cec: handle GiveAudioStatus. currently send a feature abort
authorLars Op den Kamp <lars@opdenkamp.eu>
Sun, 6 Nov 2011 13:49:59 +0000 (14:49 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sun, 6 Nov 2011 13:52:29 +0000 (14:52 +0100)
src/lib/devices/CECAudioSystem.cpp
src/lib/devices/CECAudioSystem.h
src/lib/devices/CECBusDevice.cpp
src/lib/devices/CECBusDevice.h
src/lib/implementations/CECCommandHandler.cpp
src/lib/implementations/CECCommandHandler.h

index d0ab39ebf15781ebbc6841cf5642d8372d0a926a..3ed22e989f1683c7d9a67a410783e01fced57c35 100644 (file)
@@ -31,6 +31,7 @@
  */
 
 #include "CECAudioSystem.h"
+#include "../CECProcessor.h"
 
 using namespace CEC;
 
@@ -40,3 +41,14 @@ CCECAudioSystem::CCECAudioSystem(CCECProcessor *processor, cec_logical_address a
   m_type          = CEC_DEVICE_TYPE_AUDIO_SYSTEM;
   m_strDeviceName = "Audio";
 }
+
+bool CCECAudioSystem::TransmitAudioStatus(cec_logical_address dest)
+{
+  // TODO
+  CStdString strLog;
+  strLog.Format("<< %x -> %x: audio status feature abort", m_iLogicalAddress, dest);
+  AddLog(CEC_LOG_NOTICE, strLog);
+
+  m_processor->TransmitAbort(dest, CEC_OPCODE_GIVE_AUDIO_STATUS);
+  return false;
+}
index 51c16767f7bc7ed53e4beddc8de225c454483bb8..5690eda0e8148b5096efe81abd4894a73b497a89 100644 (file)
@@ -40,5 +40,7 @@ namespace CEC
   public:
     CCECAudioSystem(CCECProcessor *processor, cec_logical_address address, uint16_t iPhysicalAddress = 0);
     virtual ~CCECAudioSystem(void) {};
+
+    virtual bool TransmitAudioStatus(cec_logical_address dest);
   };
 }
index 665d7fdc893bccc5591887908c80c8d909be3b77..7c2f6bf5705f89c501f1ce2ab2b9ea6d9f0c6335 100644 (file)
@@ -403,7 +403,7 @@ bool CCECBusDevice::TransmitDeckStatus(cec_logical_address dest)
   strLog.Format("<< %x -> %x: deck status feature abort", m_iLogicalAddress, dest);
   AddLog(CEC_LOG_NOTICE, strLog);
 
-  m_processor->TransmitAbort(dest, CEC_OPCODE_GIVE_DEVICE_VENDOR_ID);
+  m_processor->TransmitAbort(dest, CEC_OPCODE_GIVE_DECK_STATUS);
   return false;
 }
 
index 83f295554258dd6e6363746354db5d226e780498..509e57c604dc5d6d90ed0835e281e2bd2c56af54 100644 (file)
@@ -63,7 +63,8 @@ namespace CEC
     virtual uint16_t            GetMyPhysicalAddress(void) const;
     virtual uint16_t            GetPhysicalAddress(void) const { return m_iPhysicalAddress; }
     virtual cec_power_status    GetPowerStatus(void);
-    virtual CCECProcessor *     GetProcessor() const { return m_processor; }
+    virtual CCECProcessor *     GetProcessor(void) const { return m_processor; }
+    virtual cec_device_type     GetType(void) const { return m_type; }
     virtual const cec_vendor &  GetVendor(void);
     virtual uint8_t             GetVendorClass(void) const { return m_iVendorClass; }
     virtual cec_vendor_id       GetVendorId(void) { return GetVendor().vendor; };
index 2324c2011d9664a04d361e3210398fcf00baaf16..94348676b94600b020b27405667ddf7468140a98 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "CECCommandHandler.h"
 #include "../devices/CECBusDevice.h"
+#include "../devices/CECAudioSystem.h"
 #include "../CECProcessor.h"
 
 using namespace CEC;
@@ -92,6 +93,9 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command)
     case CEC_OPCODE_USER_CONTROL_RELEASE:
       HandleUserControlRelease(command);
       break;
+    case CEC_OPCODE_GIVE_AUDIO_STATUS:
+      HandleGiveAudioStatus(command);
+      break;
     default:
       UnhandledCommand(command);
       m_busDevice->GetProcessor()->AddCommand(command);
@@ -182,6 +186,15 @@ bool CCECCommandHandler::HandleGetCecVersion(const cec_command &command)
   return false;
 }
 
+bool CCECCommandHandler::HandleGiveAudioStatus(const cec_command &command)
+{
+  CCECBusDevice *device = GetDevice(command.destination);
+  if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM)
+    return ((CCECAudioSystem *) device)->TransmitAudioStatus(command.initiator);
+
+  return false;
+}
+
 bool CCECCommandHandler::HandleGiveDeckStatus(const cec_command &command)
 {
   CCECBusDevice *device = GetDevice(command.destination);
index d6acd7512a84f6c21da0f7d74055878941d49046..6be4b707baced9e99af593e81fe7c3122ad8946b 100644 (file)
@@ -47,28 +47,27 @@ namespace CEC
     virtual cec_vendor_id GetVendorId(void) { return CEC_VENDOR_UNKNOWN; };
 
   protected:
-    bool HandleDeviceCecVersion(const cec_command &command);
-    bool HandleDeviceVendorCommandWithId(const cec_command &command);
-    bool HandleDeviceVendorId(const cec_command &command);
-    bool HandleGetCecVersion(const cec_command &command);
-    bool HandleGiveDeckStatus(const cec_command &command);
-    bool HandleGiveDevicePowerStatus(const cec_command &command);
-    bool HandleGiveDeviceVendorId(const cec_command &command);
-    bool HandleGiveOSDName(const cec_command &command);
-    bool HandleGivePhysicalAddress(const cec_command &command);
-    bool HandleMenuRequest(const cec_command &command);
-    bool HandleReportPowerStatus(const cec_command &command);
-    bool HandleRequestActiveSource(const cec_command &command);
-    bool HandleRoutingChange(const cec_command &command);
-    bool HandleSetMenuLanguage(const cec_command &command);
-    bool HandleSetStreamPath(const cec_command &command);
-    bool HandleUserControlPressed(const cec_command &command);
-    bool HandleUserControlRelease(const cec_command &command);
-    void UnhandledCommand(const cec_command &command);
+    virtual bool HandleDeviceCecVersion(const cec_command &command);
+    virtual bool HandleDeviceVendorCommandWithId(const cec_command &command);
+    virtual bool HandleDeviceVendorId(const cec_command &command);
+    virtual bool HandleGetCecVersion(const cec_command &command);
+    virtual bool HandleGiveAudioStatus(const cec_command &command);
+    virtual bool HandleGiveDeckStatus(const cec_command &command);
+    virtual bool HandleGiveDevicePowerStatus(const cec_command &command);
+    virtual bool HandleGiveDeviceVendorId(const cec_command &command);
+    virtual bool HandleGiveOSDName(const cec_command &command);
+    virtual bool HandleGivePhysicalAddress(const cec_command &command);
+    virtual bool HandleMenuRequest(const cec_command &command);
+    virtual bool HandleReportPowerStatus(const cec_command &command);
+    virtual bool HandleRequestActiveSource(const cec_command &command);
+    virtual bool HandleRoutingChange(const cec_command &command);
+    virtual bool HandleSetMenuLanguage(const cec_command &command);
+    virtual bool HandleSetStreamPath(const cec_command &command);
+    virtual bool HandleUserControlPressed(const cec_command &command);
+    virtual bool HandleUserControlRelease(const cec_command &command);
+    virtual void UnhandledCommand(const cec_command &command);
 
-    void SendToCommandBuffer(const cec_command &command);
-
-    CCECBusDevice *GetDevice(cec_logical_address iLogicalAddress) const;
+    virtual CCECBusDevice *GetDevice(cec_logical_address iLogicalAddress) const;
     CCECBusDevice *m_busDevice;
   };
 };