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