// set the default address when something went wrong
if (!bReturn)
{
- LIB_CEC->AddLog(CEC_LOG_WARNING, "failed to set the physical address to %04X, setting it to the default value %04X", iPhysicalAddress, CEC_DEFAULT_PHYSICAL_ADDRESS);
- iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS;
+ uint16_t iEepromAddress = m_processor->GetPhysicalAddressFromEeprom();
+ if (CLibCEC::IsValidPhysicalAddress(iEepromAddress))
+ {
+ LIB_CEC->AddLog(CEC_LOG_WARNING, "failed to set the physical address to %04X, setting it to the value that was persisted in the eeprom, %04X", iPhysicalAddress, iEepromAddress);
+ iPhysicalAddress = iEepromAddress;
+ bReturn = true;
+ }
+ else
+ {
+ LIB_CEC->AddLog(CEC_LOG_WARNING, "failed to set the physical address to %04X, setting it to the default value %04X", iPhysicalAddress, CEC_DEFAULT_PHYSICAL_ADDRESS);
+ iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS;
+ }
}
// and set the address
// send back the previous key if there is one
AddKey();
+ if (key.keycode > CEC_USER_CONTROL_CODE_MAX &&
+ key.keycode < CEC_USER_CONTROL_CODE_SELECT)
+ return;
+
cec_keypress transmitKey(key);
{
CLockObject lock(m_mutex);
- if (key.duration > 0 || key.keycode > CEC_USER_CONTROL_CODE_MAX)
- {
- transmitKey.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
- }
- else if (m_iCurrentButton == COMBO_KEY)
+ if (m_iCurrentButton == COMBO_KEY && key.duration == 0)
{
// stop + ok -> exit
if (key.keycode == CEC_USER_CONTROL_CODE_SELECT)
transmitKey.keycode = CEC_USER_CONTROL_CODE_EXIT;
// stop + pause -> root menu
- else if (key.keycode == CEC_USER_CONTROL_CODE_ROOT_MENU)
+ else if (key.keycode == CEC_USER_CONTROL_CODE_PAUSE)
transmitKey.keycode = CEC_USER_CONTROL_CODE_ROOT_MENU;
// stop + play -> dot (which is handled as context menu in xbmc)
else if (key.keycode == CEC_USER_CONTROL_CODE_PLAY)
AddKey(true);
}
- m_iCurrentButton = transmitKey.keycode;
- m_buttontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();
+ if (key.duration == 0)
+ {
+ m_iCurrentButton = transmitKey.keycode;
+ m_buttontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();
+ }
}
- LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x)", ToString(transmitKey.keycode), transmitKey.keycode);
- CallbackAddKey(transmitKey);
+ if (key.keycode != COMBO_KEY || key.duration > 0)
+ {
+ LIB_CEC->AddLog(CEC_LOG_DEBUG, "key pressed: %s (%1x)", ToString(transmitKey.keycode), transmitKey.keycode);
+ CallbackAddKey(transmitKey);
+ }
}
void CCECClient::SetCurrentButton(const cec_user_control_code iButtonCode)
CCECBusDevice *primary = GetPrimaryDevice();
// poll the destination, with the primary as source
if (primary)
- return primary->TransmitPoll(iAddress, false);
+ return primary->TransmitPoll(iAddress, true);
return m_processor ? m_processor->PollDevice(iAddress) : false;
}
cec_logical_address activeSource = m_processor->GetActiveSource();
CCECBusDevice *device = m_processor->GetDevice(activeSource);
if (device)
- bReturn = device->IsHandledByLibCEC();
+ bReturn = device->IsHandledByLibCEC() && !device->GetHandler()->ActiveSourcePending();
}
return bReturn;
}