MythTV  master
firewiredevice.h
Go to the documentation of this file.
1 
7 #ifndef FIREWIRE_DEVICE_H
8 #define FIREWIRE_DEVICE_H
9 
10 // C++ headers
11 #include <vector>
12 
13 // Qt headers
14 #include <QMutex>
15 #include <QString>
16 
17 // MythTV headers
20 
21 class TSPacket;
22 
24 {
25  public:
26 
27  // Public enums
29  {
34  };
35 
36  // AVC commands
38  {
39  kAVCControlCommand = 0x00,
40  kAVCStatusInquiryCommand = 0x01,
41  kAVCSpecificInquiryCommand = 0x02,
42  kAVCNotifyCommand = 0x03,
43  kAVCGeneralInquiryCommand = 0x04,
44 
45  kAVCNotImplementedStatus = 0x08,
46  kAVCAcceptedStatus = 0x09,
47  kAVCRejectedStatus = 0x0a,
48  kAVCInTransitionStatus = 0x0b,
49  kAVCImplementedStatus = 0x0c,
50  kAVCChangedStatus = 0x0d,
51 
52  kAVCInterimStatus = 0x0f,
53  kAVCResponseImplemented = 0x0c,
54  };
55 
56  // AVC unit addresses
58  {
59  kAVCSubunitId0 = 0x00,
60  kAVCSubunitId1 = 0x01,
61  kAVCSubunitId2 = 0x02,
62  kAVCSubunitId3 = 0x03,
63  kAVCSubunitId4 = 0x04,
64  kAVCSubunitIdExtended = 0x05,
65  kAVCSubunitIdIgnore = 0x07,
66 
67  kAVCSubunitTypeVideoMonitor = (0x00 << 3),
68  kAVCSubunitTypeAudio = (0x01 << 3),
69  kAVCSubunitTypePrinter = (0x02 << 3),
70  kAVCSubunitTypeDiscRecorder = (0x03 << 3),
71  kAVCSubunitTypeTapeRecorder = (0x04 << 3),
72  kAVCSubunitTypeTuner = (0x05 << 3),
73  kAVCSubunitTypeCA = (0x06 << 3),
74  kAVCSubunitTypeVideoCamera = (0x07 << 3),
75  kAVCSubunitTypePanel = (0x09 << 3),
76  kAVCSubunitTypeBulletinBoard = (0x0a << 3),
77  kAVCSubunitTypeCameraStorage = (0x0b << 3),
78  kAVCSubunitTypeMusic = (0x0c << 3),
79  kAVCSubunitTypeVendorUnique = (0x1c << 3),
80  kAVCSubunitTypeExtended = (0x1e << 3),
81  kAVCSubunitTypeUnit = (0x1f << 3),
82  };
83 
84  // AVC opcode
86  {
87  // Unit
88  kAVCUnitPlugInfoOpcode = 0x02,
89  kAVCUnitDigitalOutputOpcode = 0x10,
90  kAVCUnitDigitalInputOpcode = 0x11,
91  kAVCUnitChannelUsageOpcode = 0x12,
92  kAVCUnitOutputPlugSignalFormatOpcode = 0x18,
93  kAVCUnitInputPlugSignalFormatOpcode = 0x19,
94  kAVCUnitConnectAVOpcode = 0x20,
95  kAVCUnitDisconnectAVOpcode = 0x21,
96  kAVCUnitConnectionsOpcode = 0x22,
97  kAVCUnitConnectOpcode = 0x24,
98  kAVCUnitDisconnectOpcode = 0x25,
99  kAVCUnitUnitInfoOpcode = 0x30,
100  kAVCUnitSubunitInfoOpcode = 0x31,
101  kAVCUnitSignalSourceOpcode = 0x1a,
102  kAVCUnitPowerOpcode = 0xb2,
103 
104  // Common Unit + Subunit
105  kAVCCommonOpenDescriptorOpcode = 0x08,
106  kAVCCommonReadDescriptorOpcode = 0x09,
107  kAVCCommonWriteDescriptorOpcode = 0x0A,
108  kAVCCommonSearchDescriptorOpcode = 0x0B,
109  kAVCCommonObjectNumberSelectOpcode = 0x0D,
110  kAVCCommonPowerOpcode = 0xB2,
111  kAVCCommonReserveOpcode = 0x01,
112  kAVCCommonPlugInfoOpcode = 0x02,
113  kAVCCommonVendorDependentOpcode = 0x00,
114 
115  // Panel
116  kAVCPanelPassThrough = 0x7c,
117  };
118 
119  // AVC param 0
121  {
122  kAVCPowerStateOn = 0x70,
123  kAVCPowerStateOff = 0x60,
124  kAVCPowerStateQuery = 0x7f,
125  };
126 
128  {
129  kAVCPanelKeySelect = 0x00,
130  kAVCPanelKeyUp = 0x01,
131  kAVCPanelKeyDown = 0x02,
132  kAVCPanelKeyLeft = 0x03,
133  kAVCPanelKeyRight = 0x04,
134  kAVCPanelKeyRightUp = 0x05,
135  kAVCPanelKeyRightDown = 0x06,
136  kAVCPanelKeyLeftUp = 0x07,
137  kAVCPanelKeyLeftDown = 0x08,
138  kAVCPanelKeyRootMenu = 0x09,
139  kAVCPanelKeySetupMenu = 0x0A,
140  kAVCPanelKeyContentsMenu = 0x0B,
141  kAVCPanelKeyFavoriteMenu = 0x0C,
142  kAVCPanelKeyExit = 0x0D,
143 
144  kAVCPanelKey0 = 0x20,
145  kAVCPanelKey1 = 0x21,
146  kAVCPanelKey2 = 0x22,
147  kAVCPanelKey3 = 0x23,
148  kAVCPanelKey4 = 0x24,
149  kAVCPanelKey5 = 0x25,
150  kAVCPanelKey6 = 0x26,
151  kAVCPanelKey7 = 0x27,
152  kAVCPanelKey8 = 0x28,
153  kAVCPanelKey9 = 0x29,
154  kAVCPanelKeyDot = 0x2A,
155  kAVCPanelKeyEnter = 0x2B,
156  kAVCPanelKeyClear = 0x2C,
157 
158  kAVCPanelKeyChannelUp = 0x30,
159  kAVCPanelKeyChannelDown = 0x31,
160  kAVCPanelKeyPreviousChannel = 0x32,
161  kAVCPanelKeySoundSelect = 0x33,
162  kAVCPanelKeyInputSelect = 0x34,
163  kAVCPanelKeyDisplayInfo = 0x35,
164  kAVCPanelKeyHelp = 0x36,
165  kAVCPanelKeyPageUp = 0x37,
166  kAVCPanelKeyPageDown = 0x38,
167 
168  kAVCPanelKeyPower = 0x40,
169  kAVCPanelKeyVolumeUp = 0x41,
170  kAVCPanelKeyVolumeDown = 0x42,
171  kAVCPanelKeyMute = 0x43,
172  kAVCPanelKeyPlay = 0x44,
173  kAVCPanelKeyStop = 0x45,
174  kAVCPanelKeyPause = 0x46,
175  kAVCPanelKeyRecord = 0x47,
176  kAVCPanelKeyRewind = 0x48,
177  kAVCPanelKeyFastForward = 0x49,
178  kAVCPanelKeyEject = 0x4a,
179  kAVCPanelKeyForward = 0x4b,
180  kAVCPanelKeyBackward = 0x4c,
181 
182  kAVCPanelKeyAngle = 0x50,
183  kAVCPanelKeySubPicture = 0x51,
184 
185  kAVCPanelKeyTuneFunction = 0x67,
186 
187  kAVCPanelKeyPress = 0x00,
188  kAVCPanelKeyRelease = 0x80,
189 
190  };
191 
192  virtual ~FirewireDevice() = default;
193 
194  // Commands
195  virtual bool OpenPort(void) = 0;
196  virtual bool ClosePort(void) = 0;
197  virtual bool ResetBus(void) { return false; }
198 
199  virtual void AddListener(TSDataListener *listener);
200  virtual void RemoveListener(TSDataListener *listener);
201 
202  // Sets
203  virtual bool SetPowerState(bool on);
204  virtual bool SetChannel(const QString &panel_model,
205  uint alt_method, uint channel);
206 
207  // Gets
208  virtual bool IsPortOpen(void) const = 0;
209  bool IsSTBBufferCleared(void) const { return m_bufferCleared; }
210 
211  // non-const Gets
212  virtual PowerState GetPowerState(void);
213 
214  // Statics
215  static bool IsSTBSupported(const QString &model);
216  static QString GetModelName(uint vendor_id, uint model_id);
217  static std::vector<AVCInfo> GetSTBList(void);
218 
219  protected:
220  FirewireDevice(uint64_t guid, uint subunitid, uint speed);
221 
222  virtual bool SendAVCCommand(const std::vector<uint8_t> &cmd,
223  std::vector<uint8_t> &result,
224  int retry_cnt) = 0;
225  void SetLastChannel(uint channel);
226  void ProcessPATPacket(const TSPacket &tspacket);
227  virtual void BroadcastToListeners(
228  const unsigned char *data, uint dataSize);
229 
230  uint64_t m_guid;
233  uint m_lastChannel {0};
234  uint m_lastCrc {0};
235  bool m_bufferCleared {true};
236 
237  uint m_openPortCnt {0};
238  std::vector<TSDataListener*> m_listeners;
239  mutable QMutex m_lock;
240 
242  static QMap<uint64_t,QString> s_idToModel;
243  static QMutex s_staticLock;
244 };
245 
246 #endif // FIREWIRE_DEVICE_H
FirewireDevice::kAVCPowerOn
@ kAVCPowerOn
Definition: firewiredevice.h:30
FirewireDevice::m_guid
uint64_t m_guid
Definition: firewiredevice.h:230
FirewireDevice::IEEE1394Command
IEEE1394Command
Definition: firewiredevice.h:37
TSDataListener
Definition: streamlisteners.h:52
streamlisteners.h
FirewireDevice::PowerState
PowerState
Definition: firewiredevice.h:28
TSPacket
Used to access the data of a Transport Stream packet.
Definition: tspacket.h:205
avcinfo.h
uint
unsigned int uint
Definition: compat.h:81
MTV_PUBLIC
#define MTV_PUBLIC
Definition: mythtvexp.h:15
FirewireDevice::s_idToModel
static QMap< uint64_t, QString > s_idToModel
Vendor ID + Model ID to FirewireDevice STB model string.
Definition: firewiredevice.h:242
FirewireDevice::kAVCPowerUnknown
@ kAVCPowerUnknown
Definition: firewiredevice.h:32
FirewireDevice::m_subunitid
uint m_subunitid
Definition: firewiredevice.h:231
FirewireDevice::kAVCPowerQueryFailed
@ kAVCPowerQueryFailed
Definition: firewiredevice.h:33
FirewireDevice::s_staticLock
static QMutex s_staticLock
Definition: firewiredevice.h:243
FirewireDevice::m_listeners
std::vector< TSDataListener * > m_listeners
Definition: firewiredevice.h:238
FirewireDevice::IEEE1394PanelPassThroughParam0
IEEE1394PanelPassThroughParam0
Definition: firewiredevice.h:127
FirewireDevice::m_speed
uint m_speed
Definition: firewiredevice.h:232
FirewireDevice::IEEE1394Opcode
IEEE1394Opcode
Definition: firewiredevice.h:85
FirewireDevice::IsSTBBufferCleared
bool IsSTBBufferCleared(void) const
Definition: firewiredevice.h:209
FirewireDevice::kAVCPowerOff
@ kAVCPowerOff
Definition: firewiredevice.h:31
FirewireDevice::ResetBus
virtual bool ResetBus(void)
Definition: firewiredevice.h:197
FirewireDevice::m_lock
QMutex m_lock
Definition: firewiredevice.h:239
FirewireDevice::IEEE1394UnitAddress
IEEE1394UnitAddress
Definition: firewiredevice.h:57
FirewireDevice
Definition: firewiredevice.h:23
FirewireDevice::IEEE1394UnitPowerParam0
IEEE1394UnitPowerParam0
Definition: firewiredevice.h:120