#endif
/*!
- * @brief Set the logical address of the CEC adapter.
- * @param iLogicalAddress The cec adapter's logical address.
- * @return True when the logical address was set succesfully, false otherwise.
+ * @brief Change the logical address of the CEC adapter.
+ * @param iLogicalAddress The CEC adapter's new logical address.
+ * @return True when the logical address was set successfully, false otherwise.
*/
#ifdef __cplusplus
-extern DECLSPEC int cec_set_logical_address(CEC::cec_logical_address iLogicalAddress);
+extern DECLSPEC int cec_set_logical_address(CEC::cec_logical_address iLogicalAddress = CEC::CECDEVICE_PLAYBACKDEVICE1);
#else
extern DECLSPEC int cec_set_logical_address(cec_logical_address myAddress, cec_logical_address targetAddress);
#endif
+/*!
+ * @brief Change the physical address (HDMI port) of the CEC adapter.
+ * @param iPhysicalAddress The CEC adapter's new physical address.
+ * @brief True when the physical address was set successfully, false otherwise.
+ */
+extern DECLSPEC int cec_set_physical_address(uint16_t iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS);
+
#ifdef __cplusplus
};
#endif
using namespace std;
CCECProcessor::CCECProcessor(CLibCEC *controller, CAdapterCommunication *serComm, const char *strDeviceName, cec_logical_address iLogicalAddress /* = CECDEVICE_PLAYBACKDEVICE1 */, uint16_t iPhysicalAddress /* = CEC_DEFAULT_PHYSICAL_ADDRESS*/) :
- m_physicaladdress(iPhysicalAddress),
+ m_iPhysicalAddress(iPhysicalAddress),
m_iLogicalAddress(iLogicalAddress),
m_strDeviceName(strDeviceName),
m_communication(serComm),
cec_command command;
cec_command::format(command, m_iLogicalAddress, CECDEVICE_BROADCAST, CEC_OPCODE_ACTIVE_SOURCE);
- command.parameters.push_back((m_physicaladdress >> 8) & 0xFF);
- command.parameters.push_back(m_physicaladdress & 0xFF);
+ command.parameters.push_back((m_iPhysicalAddress >> 8) & 0xFF);
+ command.parameters.push_back(m_iPhysicalAddress & 0xFF);
return Transmit(command);
}
cec_command command;
cec_command::format(command, m_iLogicalAddress, CECDEVICE_BROADCAST, CEC_OPCODE_INACTIVE_SOURCE);
- command.parameters.push_back((m_physicaladdress >> 8) & 0xFF);
- command.parameters.push_back(m_physicaladdress & 0xFF);
+ command.parameters.push_back((m_iPhysicalAddress >> 8) & 0xFF);
+ command.parameters.push_back(m_iPhysicalAddress & 0xFF);
return Transmit(command);
}
bool CCECProcessor::SetLogicalAddress(cec_logical_address iLogicalAddress)
{
CStdString strLog;
- strLog.Format("<< setting logical address to %d", iLogicalAddress);
+ strLog.Format("<< setting logical address to %1x", iLogicalAddress);
m_controller->AddLog(CEC_LOG_NOTICE, strLog.c_str());
m_iLogicalAddress = iLogicalAddress;
return m_communication && m_communication->SetAckMask(0x1 << (uint8_t)m_iLogicalAddress);
}
+bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress)
+{
+ CStdString strLog;
+ strLog.Format("<< setting physical address to %2x", iPhysicalAddress);
+ m_controller->AddLog(CEC_LOG_NOTICE, strLog.c_str());
+
+ m_iPhysicalAddress = iPhysicalAddress;
+ return SetActiveView();
+}
+
bool CCECProcessor::TransmitFormatted(const cec_adapter_message &data, bool bWaitForAck /* = true */)
{
CLockObject lock(&m_mutex);
void CCECProcessor::ReportPhysicalAddress(void)
{
CStdString strLog;
- strLog.Format("<< reporting physical address as %04x", m_physicaladdress);
+ strLog.Format("<< reporting physical address as %04x", m_iPhysicalAddress);
m_controller->AddLog(CEC_LOG_NOTICE, strLog.c_str());
cec_command command;
cec_command::format(command, m_iLogicalAddress, CECDEVICE_BROADCAST, CEC_OPCODE_REPORT_PHYSICAL_ADDRESS);
- command.parameters.push_back((uint8_t) ((m_physicaladdress >> 8) & 0xFF));
- command.parameters.push_back((uint8_t) (m_physicaladdress & 0xFF));
+ command.parameters.push_back((uint8_t) ((m_iPhysicalAddress >> 8) & 0xFF));
+ command.parameters.push_back((uint8_t) (m_iPhysicalAddress & 0xFF));
command.parameters.push_back((uint8_t) (CEC_DEVICE_TYPE_PLAYBACK_DEVICE));
Transmit(command);
cec_command command;
cec_command::format(command, m_iLogicalAddress, CECDEVICE_BROADCAST, CEC_OPCODE_ACTIVE_SOURCE);
- command.parameters.push_back((uint8_t) ((m_physicaladdress >> 8) & 0xFF));
- command.parameters.push_back((uint8_t) (m_physicaladdress & 0xFF));
+ command.parameters.push_back((uint8_t) ((m_iPhysicalAddress >> 8) & 0xFF));
+ command.parameters.push_back((uint8_t) (m_iPhysicalAddress & 0xFF));
Transmit(command);
}
int streamaddr = ((int)command.parameters[0] << 8) | ((int)command.parameters[1]);
strLog.Format(">> %i requests stream path from physical address %04x", command.initiator, streamaddr);
m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str());
- if (streamaddr == m_physicaladdress)
+ if (streamaddr == m_iPhysicalAddress)
BroadcastActiveSource();
}
}