00001 #ifndef _DARWIN_FIREWIRE_DEVICE_H_
00002 #define _DARWIN_FIREWIRE_DEVICE_H_
00003
00004 #include "firewiredevice.h"
00005
00006 class DFDPriv;
00007 class DarwinAVCInfo;
00008
00009 class DarwinFirewireDevice : public FirewireDevice
00010 {
00011 friend void *dfd_controller_thunk(void *param);
00012 friend void dfd_update_device_list_item(DarwinFirewireDevice *dev,
00013 uint64_t guid, void *item);
00014 friend int dfd_no_data_notification(void *cb_data);
00015 friend void dfd_stream_msg(
00016 long unsigned int msg, long unsigned int param1,
00017 long unsigned int param2, void *callback_data);
00018 friend int dfd_tspacket_handler(
00019 uint tsPacketCount, uint32_t **ppBuf, void *callback_data);
00020
00021
00022 public:
00023 DarwinFirewireDevice(uint64_t guid, uint subunitid, uint speed);
00024 ~DarwinFirewireDevice();
00025
00026 virtual bool OpenPort(void);
00027 virtual bool ClosePort(void);
00028 virtual bool ResetBus(void);
00029
00030 void HandleDeviceChange(uint messageType);
00031
00032 virtual void AddListener(TSDataListener*);
00033 virtual void RemoveListener(TSDataListener*);
00034
00035
00036 virtual bool IsPortOpen(void) const;
00037
00038
00039 static vector<AVCInfo> GetSTBList(void);
00040
00041 private:
00042 void StartController(void);
00043 void StopController(void);
00044
00045 bool OpenAVStream(void);
00046 bool CloseAVStream(void);
00047 bool IsAVStreamOpen(void) const;
00048
00049 bool StartStreaming(void);
00050 bool StopStreaming(void);
00051
00052 virtual bool SendAVCCommand(
00053 const vector<uint8_t> &cmd,
00054 vector<uint8_t> &result,
00055 int );
00056
00057 void HandleBusReset(void);
00058 bool UpdatePlugRegisterPrivate(
00059 uint plug_number, int fw_chan, int new_speed,
00060 bool add_plug, bool remove_plug);
00061 bool UpdatePlugRegister(
00062 uint plug_number, int fw_chan, int speed,
00063 bool add_plug, bool remove_plug, uint retry_cnt = 4);
00064
00065 void RunController(void);
00066 void BroadcastToListeners(const unsigned char *data, uint dataSize);
00067 void UpdateDeviceListItem(uint64_t guid, void *item);
00068 void ProcessNoDataMessage(void);
00069 void ProcessStreamingMessage(
00070 uint32_t msg, uint32_t param1, uint32_t param2);
00071
00072 DarwinAVCInfo *GetInfoPtr(void);
00073 const DarwinAVCInfo *GetInfoPtr(void) const;
00074
00075 int GetMaxSpeed(void);
00076 bool IsSTBStreaming(uint *fw_channel = NULL);
00077
00078 vector<AVCInfo> GetSTBListPrivate(void);
00079
00080 private:
00081 int m_local_node;
00082 int m_remote_node;
00083 DFDPriv *m_priv;
00084 };
00085
00086 #endif // _DARWIN_FIREWIRE_DEVICE_H_