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