| 1679 | } |
| 1680 | |
| 1681 | void* CCECClient::Process(void) |
| 1682 | { |
| 1683 | CCallbackWrap* cb(NULL); |
| 1684 | while (!IsStopped()) |
| 1685 | { |
| 1686 | if (m_callbackCalls.Pop(cb, 500)) |
| 1687 | { |
| 1688 | bool keepResult = cb->m_keepResult; |
| 1689 | try |
| 1690 | { |
| 1691 | switch (cb->m_type) |
| 1692 | { |
| 1693 | case CCallbackWrap::CEC_CB_LOG_MESSAGE: |
| 1694 | CallbackAddLog(cb->m_message); |
| 1695 | break; |
| 1696 | case CCallbackWrap::CEC_CB_KEY_PRESS: |
| 1697 | CallbackAddKey(cb->m_key); |
| 1698 | break; |
| 1699 | case CCallbackWrap::CEC_CB_COMMAND: |
| 1700 | AddCommand(cb->m_command); |
| 1701 | break; |
| 1702 | case CCallbackWrap::CEC_CB_ALERT: |
| 1703 | CallbackAlert(cb->m_alertType, cb->m_alertParam); |
| 1704 | break; |
| 1705 | case CCallbackWrap::CEC_CB_CONFIGURATION: |
| 1706 | CallbackConfigurationChanged(cb->m_config); |
| 1707 | break; |
| 1708 | case CCallbackWrap::CEC_CB_MENU_STATE: |
| 1709 | keepResult = cb->Report(CallbackMenuStateChanged(cb->m_menuState)); |
| 1710 | break; |
| 1711 | case CCallbackWrap::CEC_CB_SOURCE_ACTIVATED: |
| 1712 | CallbackSourceActivated(cb->m_bActivated, cb->m_logicalAddress); |
| 1713 | break; |
| 1714 | case CCallbackWrap::CEC_CB_COMMAND_HANDLER: |
| 1715 | keepResult = cb->Report(CallbackCommandHandler(cb->m_command)); |
| 1716 | if (!keepResult) |
| 1717 | LIB_CEC->AddLog(CEC_LOG_WARNING, "Command callback timeout occured !"); |
| 1718 | break; |
| 1719 | default: |
| 1720 | break; |
| 1721 | } |
| 1722 | |
| 1723 | if (!keepResult) |
| 1724 | delete cb; |
| 1725 | } catch (...) |
| 1726 | { |
| 1727 | // don't log a warning but let the app deal with this |
| 1728 | delete cb; |
| 1729 | } |
| 1730 | } |
| 1731 | } |
| 1732 | return NULL; |
| 1733 | } |
| 1734 | |
| 1735 | void CCECClient::CallbackAddKey(const cec_keypress &key) |
| 1736 | { |