m_type = CEC_DEVICE_TYPE_AUDIO_SYSTEM;
}
-bool CCECAudioSystem::SetAudioStatus(const cec_audio_status status)
+bool CCECAudioSystem::SetAudioStatus(uint8_t status)
{
if (m_audioStatus != status)
{
CStdString strLog;
- strLog.Format(">> %s (%X): audio status changed from %s to %s", GetLogicalAddressName(), m_iLogicalAddress, CCECCommandHandler::ToString(m_audioStatus), CCECCommandHandler::ToString(status));
+ strLog.Format(">> %s (%X): audio status changed from %2x to %2x", GetLogicalAddressName(), m_iLogicalAddress, m_audioStatus, status);
AddLog(CEC_LOG_DEBUG, strLog.c_str());
m_audioStatus = status;
bool CCECAudioSystem::TransmitAudioStatus(cec_logical_address dest)
{
CStdString strLog;
- strLog.Format("<< %x -> %x: audio status '%2x'", m_iLogicalAddress, dest, CCECCommandHandler::ToString(m_audioStatus));
+ strLog.Format("<< %x -> %x: audio status '%2x'", m_iLogicalAddress, dest, m_audioStatus);
AddLog(CEC_LOG_NOTICE, strLog);
cec_command command;
cec_command::Format(command, m_iLogicalAddress, dest, CEC_OPCODE_REPORT_AUDIO_STATUS);
- command.parameters.PushBack((uint8_t) m_audioStatus);
+ command.parameters.PushBack(m_audioStatus);
return m_processor->Transmit(command);
}
CCECAudioSystem(CCECProcessor *processor, cec_logical_address address, uint16_t iPhysicalAddress = 0);
virtual ~CCECAudioSystem(void) {};
- virtual bool SetAudioStatus(const cec_audio_status status);
+ virtual bool SetAudioStatus(uint8_t status);
virtual bool SetSystemAudioMode(const cec_system_audio_status mode);
virtual bool SetSystemAudioMode(const cec_command &command);
virtual bool TransmitAudioStatus(cec_logical_address dest);
protected:
cec_system_audio_status m_systemAudioStatus;
- cec_audio_status m_audioStatus;
+ uint8_t m_audioStatus;
};
}
}
}
+void CCECBusDevice::SetOSDName(CStdString strName)
+{
+ CLockObject lock(&m_mutex);
+ if (m_strDeviceName != strName)
+ {
+ CStdString strLog;
+ strLog.Format(">> %s (%X): osd name set to '%s'", GetLogicalAddressName(), m_iLogicalAddress, strName);
+ m_processor->AddLog(CEC_LOG_DEBUG, strLog);
+ m_strDeviceName = strName;
+ }
+}
+
void CCECBusDevice::SetMenuState(const cec_menu_state state)
{
CLockObject lock(&m_mutex);
virtual void SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress = 0);
virtual void SetCecVersion(const cec_version newVersion);
virtual void SetMenuLanguage(const cec_menu_language &menuLanguage);
+ virtual void SetOSDName(CStdString strName);
virtual void SetMenuState(const cec_menu_state state);
virtual void SetVendorId(uint64_t iVendorId);
virtual void SetPowerStatus(const cec_power_status powerStatus);
case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS:
HandleReportPhysicalAddress(command);
break;
+ case CEC_OPCODE_REPORT_AUDIO_STATUS:
+ HandleReportAudioStatus(command);
+ break;
+ case CEC_OPCODE_SET_OSD_NAME:
+ HandleSetOSDName(command);
+ break;
default:
UnhandledCommand(command);
- if (command.destination == CECDEVICE_BROADCAST || m_busDevice->MyLogicalAddressContains(command.destination))
- m_busDevice->GetProcessor()->AddCommand(command);
bHandled = false;
break;
}
+ if (command.destination == CECDEVICE_BROADCAST || m_busDevice->MyLogicalAddressContains(command.destination))
+ m_busDevice->GetProcessor()->AddCommand(command);
+
return bHandled;
}
{
if (command.parameters.size == 2)
{
- m_busDevice->GetProcessor()->AddCommand(command);
-
uint16_t iAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]);
return m_busDevice->GetProcessor()->SetStreamPath(iAddress);
}
CCECBusDevice *device = GetDevice(command.destination);
if (device && (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || device->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) && command.parameters.size > 0)
{
- m_busDevice->GetProcessor()->AddCommand(command);
-
((CCECPlaybackDevice *) device)->SetDeckControlMode((cec_deck_control_mode) command.parameters[0]);
return true;
}
if (device)
return device->TransmitMenuState(command.initiator);
}
- else
+ }
+
+ return false;
+}
+
+bool CCECCommandHandler::HandleReportAudioStatus(const cec_command &command)
+{
+ if (command.parameters.size == 1)
+ {
+ CCECBusDevice *device = GetDevice(command.initiator);
+ if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM)
{
- m_busDevice->GetProcessor()->AddCommand(command);
+ ((CCECAudioSystem *)device)->SetAudioStatus(command.parameters[0]);
+ return true;
}
}
-
return false;
}
CCECBusDevice *device = GetDevice(command.initiator);
if (device)
+ {
device->SetPhysicalAddress(iNewAddress);
+ return true;
+ }
}
+
+ return false;
}
bool CCECCommandHandler::HandleSetMenuLanguage(const cec_command &command)
language.language[iPtr] = command.parameters[iPtr];
language.language[3] = 0;
device->SetMenuLanguage(language);
+ return true;
+ }
+ }
+ return false;
+}
- if (m_busDevice->MyLogicalAddressContains(command.destination))
- m_busDevice->GetProcessor()->AddCommand(command);
+bool CCECCommandHandler::HandleSetOSDName(const cec_command &command)
+{
+ if (command.parameters.size > 0)
+ {
+ CCECBusDevice *device = GetDevice(command.initiator);
+ if (device)
+ {
+ char buf[1024];
+ for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++)
+ buf[iPtr] = (char)command.parameters[iPtr];
+ buf[command.parameters.size] = 0;
+
+ CStdString strName(buf);
+ device->SetOSDName(strName);
+
+ return true;
}
}
- return true;
+ return false;
}
bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command)
device->TransmitMenuState(command.initiator);
}
}
- return false;
}
- return true;
+ return false;
}
bool CCECCommandHandler::HandleSetSystemAudioModeRequest(const cec_command &command)
if (device)
device->SetPowerStatus(CEC_POWER_STATUS_STANDBY);
- m_busDevice->GetProcessor()->AddCommand(command);
-
return true;
}
}
m_busDevice->GetProcessor()->SetCurrentButton((cec_user_control_code) command.parameters[0]);
+ return true;
}
}
- return true;
+ return false;
}
bool CCECCommandHandler::HandleUserControlRelease(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 HandleReportAudioStatus(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 HandleSetOSDName(const cec_command &command);
virtual bool HandleSetStreamPath(const cec_command &command);
virtual bool HandleSetSystemAudioModeRequest(const cec_command &command);
virtual bool HandleStandby(const cec_command &command);