- CLockObject lock(&m_writeMutex);
- CStdString strLog;
- strLog.Format("<< %s (%X) -> %s (%X): display OSD message '%s'", GetLogicalAddressName(), m_iLogicalAddress, ToString(dest), dest, strMessage);
- AddLog(CEC_LOG_NOTICE, strLog.c_str());
-
- cec_command command;
- cec_command::Format(command, m_iLogicalAddress, dest, CEC_OPCODE_SET_OSD_STRING, m_iTransmitTimeout);
- command.parameters.PushBack((uint8_t)duration);
-
- unsigned int iLen = strlen(strMessage);
- if (iLen > 13) iLen = 13;
-
- for (unsigned int iPtr = 0; iPtr < iLen; iPtr++)
- command.parameters.PushBack(strMessage[iPtr]);
-
- lock.Leave();
- return m_processor->Transmit(command);
+ bool bReturn(false);
+ if (!m_processor->m_busDevices[dest]->IsUnsupportedFeature(CEC_OPCODE_SET_OSD_STRING))
+ {
+ CLibCEC::AddLog(CEC_LOG_NOTICE, "<< %s (%X) -> %s (%X): display OSD message '%s'", GetLogicalAddressName(), m_iLogicalAddress, ToString(dest), dest, strMessage);
+ MarkBusy();
+ bReturn = m_handler->TransmitOSDString(m_iLogicalAddress, dest, duration, strMessage);
+ MarkReady();
+ }
+ return bReturn;