cec: handle routing information and report physical address opcodes
[deb_libcec.git] / src / lib / implementations / CECCommandHandler.cpp
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)