namespace CEC
{
+ class CCommunication;
+
class CCECParser : public ICECDevice
{
public:
virtual ~CCECParser(void);
virtual bool Open(const char *strPort, int iTimeout = 10000);
+ virtual bool Close(int iTimeoutMs = 2000);
virtual int FindDevices(std::vector<cec_device> &deviceList, const char *strDevicePath = NULL);
virtual bool Ping(void);
virtual bool StartBootloader(void);
virtual bool PowerOffDevices(cec_logical_address address = CECDEVICE_BROADCAST);
- virtual bool PowerOnDevices(cec_logical_address address = CECDEVICE_BROADCAST);
+ virtual bool PowerOnDevices(cec_logical_address address = CECDEVICE_TV);
virtual bool StandbyDevices(cec_logical_address address = CECDEVICE_BROADCAST);
virtual bool SetActiveView(void);
virtual bool SetInactiveView(void);
virtual bool GetNextLogMessage(cec_log_message *message);
virtual bool GetNextKeypress(cec_keypress *key);
+ virtual bool GetNextCommand(cec_command *command);
virtual bool Transmit(const cec_frame &data, bool bWaitForAck = true, int64_t iTimeout = (int64_t) 5000);
- virtual bool SetAckMask(cec_logical_address ackmask);
+ virtual bool SetLogicalAddress(cec_logical_address iLogicalAddress);
+ virtual bool SetAckMask(uint16_t iMask);
virtual int GetMinVersion(void);
virtual int GetLibVersion(void);
//@}
static void *ThreadHandler(CCECParser *parser);
bool Process(void);
+ void AddLog(cec_log_level level, const std::string &strMessage);
protected:
virtual bool TransmitFormatted(const cec_frame &data, bool bWaitForAck = true, int64_t iTimeout = (int64_t) 2000);
- virtual void TransmitAbort(cec_logical_address address, ECecOpcode opcode, ECecAbortReason reason = CEC_ABORT_REASON_UNRECOGNIZED_OPCODE);
+ virtual void TransmitAbort(cec_logical_address address, cec_opcode opcode, ECecAbortReason reason = CEC_ABORT_REASON_UNRECOGNIZED_OPCODE);
virtual void ReportCECVersion(cec_logical_address address = CECDEVICE_TV);
virtual void ReportPowerState(cec_logical_address address = CECDEVICE_TV, bool bOn = true);
virtual void ReportMenuState(cec_logical_address address = CECDEVICE_TV, bool bActive = true);
private:
void AddKey(void);
- void AddLog(cec_log_level level, const std::string &strMessage);
+ void AddCommand(cec_logical_address source, cec_logical_address destination, cec_opcode opcode, cec_frame *parameters);
bool WaitForAck(int64_t iTimeout = (int64_t) 1000);
bool ReadFromDevice(int iTimeout);
void ProcessMessages(void);
void CheckKeypressTimeout(int64_t now);
- uint8_t* m_inbuf;
- int m_iInbufSize;
- int m_iInbufUsed;
- CSerialPort * m_serialport;
cec_frame m_currentframe;
cec_user_control_code m_iCurrentButton;
int64_t m_buttontime;
CecBuffer<cec_frame> m_frameBuffer;
CecBuffer<cec_log_message> m_logBuffer;
CecBuffer<cec_keypress> m_keyBuffer;
+ CecBuffer<cec_command> m_commandBuffer;
std::string m_strDeviceName;
pthread_t m_thread;
CMutex m_mutex;
+ CCondition m_exitCondition;
bool m_bRunning;
+ CCommunication *m_communication;
};
};