cec: handle routing information and report physical address opcodes
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 24 Nov 2011 22:19:33 +0000 (23:19 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 24 Nov 2011 22:27:58 +0000 (23:27 +0100)
src/lib/implementations/CECCommandHandler.cpp
src/lib/implementations/CECCommandHandler.h

index 78d7d40e0f964f252363d74423f209a396048630..a23ba660ff79c6d0fd397bec5da2ce90a435650f 100644 (file)
@@ -117,12 +117,18 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command)
   case CEC_OPCODE_ROUTING_CHANGE:
     HandleRoutingChange(command);
     break;
+  case CEC_OPCODE_ROUTING_INFORMATION:
+    HandleRoutingInformation(command);
+    break;
   case CEC_OPCODE_STANDBY:
     HandleStandby(command);
     break;
   case CEC_OPCODE_ACTIVE_SOURCE:
     HandleActiveSource(command);
     break;
+  case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS:
+    HandleReportPhysicalAddress(command);
+    break;
   default:
     UnhandledCommand(command);
     if (command.destination == CECDEVICE_BROADCAST || m_busDevice->MyLogicalAddressContains(command.destination))
@@ -292,6 +298,19 @@ bool CCECCommandHandler::HandleMenuRequest(const cec_command &command)
   return false;
 }
 
+bool CCECCommandHandler::HandleReportPhysicalAddress(const cec_command &command)
+{
+  if (command.parameters.size == 2)
+  {
+    uint16_t iNewAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]);
+
+    CCECBusDevice *device = GetDevice(command.initiator);
+    if (device)
+      device->SetPhysicalAddress(iNewAddress);
+  }
+  return true;
+}
+
 bool CCECCommandHandler::HandleReportPowerStatus(const cec_command &command)
 {
   if (command.parameters.size == 1)
@@ -330,6 +349,18 @@ bool CCECCommandHandler::HandleRoutingChange(const cec_command &command)
   return true;
 }
 
+bool CCECCommandHandler::HandleRoutingInformation(const cec_command &command)
+{
+  if (command.parameters.size == 2)
+  {
+    uint16_t iNewAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]);
+
+    CCECBusDevice *device = GetDevice(command.initiator);
+    if (device)
+      device->SetPhysicalAddress(iNewAddress);
+  }
+}
+
 bool CCECCommandHandler::HandleSetMenuLanguage(const cec_command &command)
 {
   if (command.parameters.size == 3)
index 9bf98982da7949f847d26a07f12dbf9dfe0f1582..c398427224db9381f8b274f565d76e120ff8790d 100644 (file)
@@ -72,9 +72,11 @@ namespace CEC
     virtual bool HandleGiveOSDName(const cec_command &command);
     virtual bool HandleGivePhysicalAddress(const cec_command &command);
     virtual bool HandleMenuRequest(const cec_command &command);
+    virtual bool HandleReportPhysicalAddress(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 HandleRoutingInformation(const cec_command &command);
     virtual bool HandleSetMenuLanguage(const cec_command &command);
     virtual bool HandleSetStreamPath(const cec_command &command);
     virtual bool HandleSetSystemAudioModeRequest(const cec_command &command);