cec: added a vendor command for panasonic that will enable routing of some more butto...
authorLars Op den Kamp <lars@opdenkamp.eu>
Wed, 20 Jun 2012 13:33:36 +0000 (15:33 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Wed, 20 Jun 2012 13:33:36 +0000 (15:33 +0200)
src/lib/implementations/VLCommandHandler.cpp
src/lib/implementations/VLCommandHandler.h

index 65f6c157cf7dec6fa36f097bc7e040ead1d7d853..aadf98823f69546952226ae06cf84f1e766f1108 100644 (file)
@@ -78,6 +78,11 @@ bool CVLCommandHandler::InitHandler(void)
 
 int CVLCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command)
 {
+  if (command.parameters[0] != 0x00 ||
+      command.parameters[1] != 0x80 ||
+      command.parameters[2] != 0x45)
+    return CEC_ABORT_REASON_INVALID_OPERAND;
+
   if (command.initiator == CECDEVICE_TV &&
       command.destination == CECDEVICE_BROADCAST &&
       command.parameters.At(3) == VL_POWER_CHANGE)
@@ -164,3 +169,25 @@ bool CVLCommandHandler::PowerUpEventReceived(void)
   m_bPowerUpEventReceived = (powerStatus == CEC_POWER_STATUS_ON);
   return m_bPowerUpEventReceived;
 }
+
+int CVLCommandHandler::HandleVendorCommand(const cec_command &command)
+{
+  // some vendor command voodoo that will enable more buttons on the remote
+  if (command.parameters.size == 3 &&
+      command.parameters[0] == 0x10 &&
+      command.parameters[1] == 0x01 &&
+      command.parameters[2] == 0x05)
+  {
+    cec_command response;
+    cec_command::Format(response, command.destination, command.initiator, CEC_OPCODE_VENDOR_COMMAND);
+    uint8_t iResponseData[] = {0x10, 0x02, 0xFF, 0xFF, 0x00, 0x05, 0x05, 0x45, 0x55, 0x5c, 0x58, 0x32};
+    response.PushArray(12, iResponseData);
+
+    Transmit(response, true);
+
+    return COMMAND_HANDLED;
+  }
+
+  return CEC_ABORT_REASON_INVALID_OPERAND;
+}
+
index 893905766318586502b45d08de7b40fffea25404..8b26741fda621e0b8864a40796d8344780a4779e 100644 (file)
@@ -47,6 +47,7 @@ namespace CEC
     bool TransmitActiveSource(const cec_logical_address iInitiator, uint16_t iPhysicalAddress);
     bool TransmitPendingActiveSourceCommands(void);
 
+    int HandleVendorCommand(const cec_command &command);
     bool PowerUpEventReceived(void);
     bool SupportsDeviceType(const cec_device_type type) const { return type != CEC_DEVICE_TYPE_RECORDING_DEVICE; };
     cec_device_type GetReplacementDeviceType(const cec_device_type type) const { return type == CEC_DEVICE_TYPE_RECORDING_DEVICE ? CEC_DEVICE_TYPE_PLAYBACK_DEVICE : type; }