00001
00007 #ifndef _LINUX_FIREWIRE_DEVICE_H_
00008 #define _LINUX_FIREWIRE_DEVICE_H_
00009
00010 #include "firewiredevice.h"
00011
00012 class LFDPriv;
00013 class LinuxAVCInfo;
00014
00015 class LinuxFirewireDevice : public FirewireDevice
00016 {
00017 friend void *linux_firewire_device_port_handler_thunk(void *param);
00018 friend int linux_firewire_device_tspacket_handler(
00019 unsigned char *tspacket, int len, uint dropped, void *callback_data);
00020
00021 public:
00022 LinuxFirewireDevice(uint64_t guid, uint subunitid,
00023 uint speed, bool use_p2p,
00024 uint av_buffer_size_in_bytes = 0);
00025 ~LinuxFirewireDevice();
00026
00027
00028 virtual bool OpenPort(void);
00029 virtual bool ClosePort(void);
00030 virtual bool ResetBus(void);
00031
00032 virtual void AddListener(TSDataListener*);
00033 virtual void RemoveListener(TSDataListener*);
00034
00035
00036 virtual bool IsPortOpen(void) const;
00037
00038
00039 void SignalReset(uint generation);
00040
00041
00042 static vector<AVCInfo> GetSTBList(void);
00043
00044
00045 static const uint kBroadcastChannel;
00046 static const uint kConnectionP2P;
00047 static const uint kConnectionBroadcast;
00048 static const uint kMaxBufferedPackets;
00049
00050 private:
00051 bool OpenNode(void);
00052 bool CloseNode(void);
00053
00054 bool OpenAVStream(void);
00055 bool CloseAVStream(void);
00056
00057 bool OpenP2PNode(void);
00058 bool CloseP2PNode(void);
00059
00060 bool OpenBroadcastNode(void);
00061 bool CloseBroadcastNode(void);
00062
00063 bool StartStreaming(void);
00064 bool StopStreaming(void);
00065
00066 void RunPortHandler(void);
00067 void PrintDropped(uint dropped_packets);
00068
00069 bool SetAVStreamBufferSize(uint size_in_bytes);
00070 bool SetAVStreamSpeed(uint speed);
00071
00072 bool IsNodeOpen(void) const;
00073 bool IsAVStreamOpen(void) const;
00074
00075 bool UpdateDeviceList(void);
00076 void UpdateDeviceListItem(uint64_t guid, void *pitem);
00077 vector<AVCInfo> GetSTBListPrivate(void);
00078
00079 virtual bool SendAVCCommand(const vector<uint8_t> &cmd,
00080 vector<uint8_t> &result,
00081 int retry_cnt);
00082
00083 LinuxAVCInfo *GetInfoPtr(void);
00084 const LinuxAVCInfo *GetInfoPtr(void) const;
00085
00086 void HandleBusReset(void);
00087
00088 private:
00089 uint m_bufsz;
00090 bool m_db_reset_disabled;
00091 bool m_use_p2p;
00092 LFDPriv *m_priv;
00093 };
00094
00095 #endif // _LINUX_FIREWIRE_DEVICE_H_