push_back(MSGEND);
}
+
+ // set timeout
+ transmit_timeout = command.transmit_timeout;
}
CCECAdapterMessage &CCECAdapterMessage::operator =(const CCECAdapterMessage &msg)
return *this;
}
-CStdString CCECAdapterMessage::ToString(void) const
+CStdString CCECAdapterMessage::MessageCodeAsString(void) const
{
CStdString strMsg;
switch (message())
strMsg = "PING";
break;
case MSGCODE_TIMEOUT_ERROR:
+ strMsg = "TIMEOUT";
+ break;
case MSGCODE_HIGH_ERROR:
+ strMsg = "HIGH_ERROR";
+ break;
case MSGCODE_LOW_ERROR:
- {
- if (message() == MSGCODE_TIMEOUT_ERROR)
- strMsg = "TIMEOUT";
- else if (message() == MSGCODE_HIGH_ERROR)
- strMsg = "HIGH_ERROR";
- else
- strMsg = "LOW_ERROR";
-
- int iLine = (size() >= 3) ? (at(1) << 8) | at(2) : 0;
- uint32_t iTime = (size() >= 7) ? (at(3) << 24) | (at(4) << 16) | (at(5) << 8) | at(6) : 0;
- strMsg.AppendFormat(" line:%i", iLine);
- strMsg.AppendFormat(" time:%u", iTime);
- }
+ strMsg = "LOW_ERROR";
break;
case MSGCODE_FRAME_START:
strMsg = "FRAME_START";
- if (size() >= 2)
- strMsg.AppendFormat(" initiator:%1x destination:%1x ack:%s %s", initiator(), destination(), ack() ? "high" : "low", eom() ? "eom" : "");
break;
case MSGCODE_FRAME_DATA:
strMsg = "FRAME_DATA";
- if (size() >= 2)
- strMsg.AppendFormat(" %02x %s", at(1), eom() ? "eom" : "");
break;
case MSGCODE_RECEIVE_FAILED:
strMsg = "RECEIVE_FAILED";
return strMsg;
}
+CStdString CCECAdapterMessage::ToString(void) const
+{
+ CStdString strMsg;
+ strMsg = MessageCodeAsString();
+
+ switch (message())
+ {
+ case MSGCODE_TIMEOUT_ERROR:
+ case MSGCODE_HIGH_ERROR:
+ case MSGCODE_LOW_ERROR:
+ {
+ int iLine = (size() >= 3) ? (at(1) << 8) | at(2) : 0;
+ uint32_t iTime = (size() >= 7) ? (at(3) << 24) | (at(4) << 16) | (at(5) << 8) | at(6) : 0;
+ strMsg.AppendFormat(" line:%i", iLine);
+ strMsg.AppendFormat(" time:%u", iTime);
+ }
+ break;
+ case MSGCODE_FRAME_START:
+ if (size() >= 2)
+ strMsg.AppendFormat(" initiator:%1x destination:%1x ack:%s %s", initiator(), destination(), ack() ? "high" : "low", eom() ? "eom" : "");
+ break;
+ case MSGCODE_FRAME_DATA:
+ if (size() >= 2)
+ strMsg.AppendFormat(" %02x %s", at(1), eom() ? "eom" : "");
+ break;
+ default:
+ break;
+ }
+
+ return strMsg;
+}
+
bool CCECAdapterMessage::is_error(void) const
{
cec_adapter_messagecode code = message();
while (!IsStopped())
{
ReadFromDevice(500);
+ Sleep(5);
WriteNextCommand();
Sleep(5);
}
else
{
m_controller->AddLog(CEC_LOG_DEBUG, "command sent");
- CCondition::Sleep((uint32_t) msg->size() * (uint32_t)24 /*data*/ + (uint32_t)5 /*start bit (4.5 ms)*/);
+ CCondition::Sleep((uint32_t) msg->size() * 24 /*data*/ + 5 /*start bit (4.5 ms)*/ + 10);
msg->state = ADAPTER_MESSAGE_STATE_SENT;
}
msg->condition.Signal();
return true;
}
-bool CAdapterCommunication::SetAckMask(uint16_t iMask)
-{
- if (!IsRunning())
- return false;
-
- CStdString strLog;
- strLog.Format("setting ackmask to %2x", iMask);
- m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str());
-
- CCECAdapterMessagePtr output(new CCECAdapterMessage);
-
- output->push_back(MSGSTART);
- output->push_escaped(MSGCODE_SET_ACK_MASK);
- output->push_escaped(iMask >> 8);
- output->push_escaped((uint8_t)iMask);
- output->push_back(MSGEND);
-
- if (!Write(output))
- {
- m_controller->AddLog(CEC_LOG_ERROR, "could not set the ackmask");
- return false;
- }
-
- return true;
-}
-
bool CAdapterCommunication::PingAdapter(void)
{
if (!IsRunning())