X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Fcectypes.h;h=808fb95a15fc7b8c13945d12907bbfd329fc7a0b;hb=de49d80bb32eef6589d7d3a2413aa684a39b7e34;hp=3b81bdce41444c62a2b8280da875856e88e1b779;hpb=fa4798bd538f6114390884ad6f2f9c44c9f77e09;p=deb_libcec.git diff --git a/include/cectypes.h b/include/cectypes.h index 3b81bdc..808fb95 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -2,7 +2,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -37,6 +37,12 @@ #include #include +#if defined(_WIN32) || defined(_WIN64) +#define CEC_CDECL __cdecl +#else +#define CEC_CDECL +#endif + #if !defined(DECLSPEC) #if defined(_WIN32) || defined(_WIN64) #include @@ -65,14 +71,22 @@ namespace CEC { #define ESCOFFSET 3 #define CEC_BUTTON_TIMEOUT 500 #define CEC_POWER_STATE_REFRESH_TIME 30000 +#define CEC_FW_VERSION_UNKNOWN 0xFFFF -#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000 -#define CEC_DEFAULT_TRANSMIT_WAIT 2000 -#define CEC_DEFAULT_TRANSMIT_RETRIES 1 +#define CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE 1 +#define CEC_DEFAULT_SETTING_POWER_ON_STARTUP 1 +#define CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN 1 +#define CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER 1 +#define CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY 1 + +#define CEC_DEFAULT_TRANSMIT_RETRY_WAIT 500 +#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000 +#define CEC_DEFAULT_TRANSMIT_WAIT 2000 +#define CEC_DEFAULT_TRANSMIT_RETRIES 1 #define CEC_MIN_LIB_VERSION 1 #define CEC_LIB_VERSION_MAJOR 1 -#define CEC_LIB_VERSION_MINOR 3 +#define CEC_LIB_VERSION_MINOR 4 typedef enum cec_abort_reason { @@ -452,15 +466,11 @@ typedef enum cec_user_control_code CEC_USER_CONTROL_CODE_F4_YELLOW = 0x74, CEC_USER_CONTROL_CODE_F5 = 0x75, CEC_USER_CONTROL_CODE_DATA = 0x76, - CEC_USER_CONTROL_CODE_MAX = 0x76, + CEC_USER_CONTROL_CODE_AN_RETURN = 0x91, + CEC_USER_CONTROL_CODE_MAX = 0x91, CEC_USER_CONTROL_CODE_UNKNOWN } cec_user_control_code; -typedef enum cec_an_user_control_code -{ - CEC_AN_USER_CONTROL_CODE_RETURN = 0x91 -} cec_an_user_control_code; - typedef enum cec_logical_address { CECDEVICE_UNKNOWN = -1, //not a valid logical address @@ -586,6 +596,8 @@ typedef enum cec_adapter_messagecode MSGCODE_TRANSMIT_FAILED_TIMEOUT_LINE, MSGCODE_FIRMWARE_VERSION, MSGCODE_START_BOOTLOADER, + MSGCODE_SET_POWERSTATE, + MSGCODE_SET_CONTROLLED, MSGCODE_FRAME_EOM = 0x80, MSGCODE_FRAME_ACK = 0x40, } cec_adapter_messagecode; @@ -815,6 +827,18 @@ typedef struct cec_device_type_list } cec_device_type operator[](uint8_t pos) const { return pos < 5 ? types[pos] : CEC_DEVICE_TYPE_RESERVED; } + bool operator==(const cec_device_type_list &other) const + { + bool bEqual(true); + for (uint8_t iPtr = 0; iPtr < 5; iPtr++) + bEqual &= (types[iPtr] == other[iPtr]); + return bEqual; + } + + bool operator!=(const cec_device_type_list &other) const + { + return !(*this == other); + } #endif } cec_device_type_list; @@ -863,32 +887,102 @@ typedef struct cec_logical_addresses bool IsSet(cec_logical_address address) const { return addresses[(int) address] == 1; } bool operator[](uint8_t pos) const { return pos < 16 ? IsSet((cec_logical_address) pos) : false; } + + bool operator==(const cec_logical_addresses &other) const + { + bool bEqual(true); + for (uint8_t iPtr = 0; iPtr < 16; iPtr++) + bEqual &= ((addresses[(int)iPtr] == 1) == other[iPtr]); + return bEqual; + } + + bool operator!=(const cec_logical_addresses &other) const + { + return !(*this == other); + } #endif } cec_logical_addresses; -struct ICECCallbacks +typedef int (CEC_CDECL* CBCecLogMessageType)(void *param, const CEC::cec_log_message &); +typedef int (CEC_CDECL* CBCecKeyPressType)(void *param, const cec_keypress &); +typedef int (CEC_CDECL* CBCecCommandType)(void *param, const cec_command &); + +typedef struct ICECCallbacks { /*! * @brief Transfer a log message from libCEC to the client. * @param message The message to transfer. * @return 1 when ok, 0 otherwise. */ - int (*CecLogMessage)(const cec_log_message &message); + CBCecLogMessageType CBCecLogMessage; /*! * @brief Transfer a keypress from libCEC to the client. * @param key The keypress to transfer. * @return 1 when ok, 0 otherwise. */ - int (*CecKeyPress)(const cec_keypress &key); + CBCecKeyPressType CBCecKeyPress; /*! * @brief Transfer a CEC command from libCEC to the client. * @param command The command to transfer. * @return 1 when ok, 0 otherwise. */ - int (*CecCommand)(const cec_command &command); -}; + CBCecCommandType CBCecCommand; +} ICECCallbacks; + +typedef enum cec_client_version +{ + CEC_CLIENT_VERSION_PRE_1_5 = 0, + CEC_CLIENT_VERSION_1_5_0 = 0x1500 +} cec_client_version; + +typedef struct libcec_configuration +{ + cec_client_version clientVersion; /*!< the version of the client that is connecting */ + char strDeviceName[13]; /*!< how to name the device on the CEC bus */ + cec_device_type_list deviceTypes; /*!< the CEC device types to emulate */ + uint16_t iPhysicalAddress; /*!< the physical address of the CEC adapter */ + cec_logical_address baseDevice; /*!< the logical address of the device to which the adapter is connected. only used when iPhysicalAddress = 0 */ + uint8_t iHDMIPort; /*!< the HDMI port to which the adapter is connected. only used when iPhysicalAddress = 0 */ + cec_vendor_id tvVendor; /*!< the vendor ID of the TV. leave this untouched to autodetect */ + cec_logical_addresses wakeDevices; /*!< wake these CEC devices when starting libCEC */ + + // player specific settings + uint8_t bGetSettingsFromROM; /*!< true to get the settings from the ROM (if set, and a v2 ROM is present), false to use these settings. */ + uint8_t bUseTVMenuLanguage; /*!< use the menu language of the TV in the player application */ + uint8_t bPowerOnStartup; /*!< power on CEC devices when start the player application */ + uint8_t bPowerOffShutdown; /*!< power off CEC devices when stopping the player application */ + uint8_t bPowerOffScreensaver; /*!< put devices in standby mode when activating the screensaver */ + uint8_t bPowerOffOnStandby; /*!< put this PC in standby mode when the TV is switched off */ + + void * callbackParam; /*!< the object to pass along with a call of the callback methods. NULL to ignore */ + ICECCallbacks * callbacks; /*!< the callback methods to use. set this to NULL when not using callbacks */ + +#ifdef __cplusplus + void Clear(void) + { + memset(strDeviceName, 0, 13); + deviceTypes.clear(); + iPhysicalAddress = 0; + baseDevice = (cec_logical_address)CEC_DEFAULT_BASE_DEVICE; + iHDMIPort = CEC_DEFAULT_HDMI_PORT; + tvVendor = CEC_VENDOR_UNKNOWN; + clientVersion = CEC_CLIENT_VERSION_PRE_1_5; + wakeDevices.Clear(); + + bGetSettingsFromROM = 0; + bUseTVMenuLanguage = CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE; + bPowerOnStartup = CEC_DEFAULT_SETTING_POWER_ON_STARTUP; + bPowerOffShutdown = CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN; + bPowerOffScreensaver = CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER; + bPowerOffOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY; + + callbackParam = NULL; + callbacks = NULL; + } +#endif +} libcec_configuration; #ifdef UNUSED #elif defined(__GNUC__)