m_strDeviceName(strDeviceName),
m_controller(controller),
m_bMonitor(false),
- m_busScan(NULL)
+ m_busScan(NULL),
+ m_iLineTimeout(0)
{
m_communication = new CAdapterCommunication(this);
m_logicalAddresses.Clear();
m_strDeviceName(strDeviceName),
m_types(types),
m_controller(controller),
- m_bMonitor(false)
+ m_bMonitor(false),
+ m_iLineTimeout(0)
{
m_communication = new CAdapterCommunication(this);
m_logicalAddresses.Clear();
bool CCECProcessor::SetLineTimeout(uint8_t iTimeout)
{
- bool bReturn(false);
- CCECAdapterMessage *output = new CCECAdapterMessage;
+ bool bReturn(m_iLineTimeout != iTimeout);
- output->push_back(MSGSTART);
- output->push_escaped(MSGCODE_TRANSMIT_IDLETIME);
- output->push_escaped(iTimeout);
- output->push_back(MSGEND);
+ if (!bReturn)
+ {
+ CCECAdapterMessage *output = new CCECAdapterMessage;
+
+ output->push_back(MSGSTART);
+ output->push_escaped(MSGCODE_TRANSMIT_IDLETIME);
+ output->push_escaped(iTimeout);
+ output->push_back(MSGEND);
+
+ if ((bReturn = Transmit(output)) == false)
+ m_controller->AddLog(CEC_LOG_ERROR, "could not set the idletime");
+ delete output;
+ }
- if ((bReturn = Transmit(output)) == false)
- m_controller->AddLog(CEC_LOG_ERROR, "could not set the idletime");
- delete output;
return bReturn;
}
bool bReturn(false);
CLockObject lock(&m_mutex);
{
+ SetLineTimeout(3);
+
do
{
+ if (output->tries > 0)
+ SetLineTimeout(5);
+
CLockObject msgLock(&output->mutex);
if (!m_communication || !m_communication->Write(output))
return bReturn;
}while (output->transmit_timeout > 0 && output->needs_retry() && ++output->tries <= output->maxTries);
}
+ SetLineTimeout(3);
+
return bReturn;
}
return m_busDevice->GetProcessor()->Transmit(response);
}
+ else if (command.parameters.size >= 1 &&
+ command.parameters[0] == 0x04)
+ {
+ /* enable SL */
+ cec_command response;
+ cec_command::Format(response, command.destination, command.initiator, CEC_OPCODE_VENDOR_COMMAND);
+ response.PushBack(0x05);
+ response.PushBack(0x04);
+
+ return m_busDevice->GetProcessor()->Transmit(response);
+ }
+ else if (command.parameters.size == 1 &&
+ command.parameters[0] == 0xa0)
+ {
+ /* enable SL */
+ cec_command response;
+ cec_command::Format(response, command.destination, command.initiator, CEC_OPCODE_VENDOR_COMMAND);
+ response.parameters.PushBack((uint8_t) (((uint64_t)CEC_VENDOR_LG >> 16) & 0xFF));
+ response.parameters.PushBack((uint8_t) (((uint64_t)CEC_VENDOR_LG >> 8) & 0xFF));
+ response.parameters.PushBack((uint8_t) ((uint64_t)CEC_VENDOR_LG & 0xFF));
+
+ return m_busDevice->GetProcessor()->Transmit(response);
+ }
return false;
}