X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Fcectypes.h;h=da3e2dc4a7d3c6659a52b8872cf39fb6c2fee3be;hb=9bbe4cc4765fd09f3f406ab516229f6967779081;hp=188e7de8df1402a121df919e9d7c16bca6e34c27;hpb=eafd9beda6b5e5aafaccd7a0e3de65c632d494e0;p=deb_libcec.git diff --git a/include/cectypes.h b/include/cectypes.h index 188e7de..da3e2dc 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -55,23 +55,23 @@ extern "C" { namespace CEC { #endif -typedef enum +typedef enum cec_abort_reason { CEC_ABORT_REASON_UNRECOGNIZED_OPCODE = 0, CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND = 1, CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE = 2, CEC_ABORT_REASON_INVALID_OPERAND = 3, CEC_ABORT_REASON_REFUSED = 4 -} ECecAbortReason; +} cec_abort_reason; -typedef enum +typedef enum cec_analogue_broadcast_type { CEC_ANALOGUE_BROADCAST_TYPE_CABLE = 0x00, CEC_ANALOGUE_BROADCAST_TYPE_SATELLITE = 0x01, CEC_ANALOGUE_BROADCAST_TYPE_TERRESTIAL = 0x02 -} ECecAnalogueBroadcastType; +} cec_analogue_broadcast_type; -typedef enum +typedef enum cec_audio_rate { CEC_AUDIO_RATE_RATE_CONTROL_OFF = 0, CEC_AUDIO_RATE_STANDARD_RATE_100 = 1, @@ -80,22 +80,22 @@ typedef enum CEC_AUDIO_RATE_STANDARD_RATE_100_0 = 4, CEC_AUDIO_RATE_FAST_RATE_MAX_100_1 = 5, CEC_AUDIO_RATE_SLOW_RATE_MIN_99_9 = 6 -} ECecAudioRate; +} cec_audio_rate; -typedef enum +typedef enum cec_audio_status { CEC_AUDIO_MUTE_STATUS_MASK = 0x80, CEC_AUDIO_VOLUME_STATUS_MASK = 0x7F, CEC_AUDIO_VOLUME_MIN = 0x00, CEC_AUDIO_VOLUME_MAX = 0x64, CEC_AUDIO_VOLUME_STATUS_UNKNOWN = 0x7F -} ECecAudioStatus; +} cec_audio_status; -typedef enum +typedef enum cec_boolean { CEC_FALSE = 0, CEC_TRUE = 1 -} ECecBoolean; +} cec_boolean; typedef enum cec_version { @@ -103,27 +103,28 @@ typedef enum cec_version CEC_VERSION_1_2 = 0x01, CEC_VERSION_1_2A = 0x02, CEC_VERSION_1_3 = 0x03, - CEC_VERSION_1_3A = 0x04 + CEC_VERSION_1_3A = 0x04, + CEC_VERSION_1_4 = 0x05 } cec_version; -typedef enum +typedef enum cec_channel_identifier { CEC_CHANNEL_NUMBER_FORMAT_MASK = 0xFC000000, CEC_1_PART_CHANNEL_NUMBER = 0x04000000, CEC_2_PART_CHANNEL_NUMBER = 0x08000000, CEC_MAJOR_CHANNEL_NUMBER_MASK = 0x3FF0000, CEC_MINOR_CHANNEL_NUMBER_MASK = 0xFFFF -} ECecChannelIdentifier; +} cec_channel_identifier; -typedef enum +typedef enum cec_deck_control_mode { - CEC_DESK_CONTROL_MODE_SKIP_FORWARD_WIND = 1, - CEC_DESK_CONTROL_MODE_SKIP_REVERSE_REWIND = 2, - CEC_DESK_CONTROL_MODE_STOP = 3, - CEC_DESK_CONTROL_MODE_EJECT = 4 -} ECecDeskControlMode; + CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND = 1, + CEC_DECK_CONTROL_MODE_SKIP_REVERSE_REWIND = 2, + CEC_DECK_CONTROL_MODE_STOP = 3, + CEC_DECK_CONTROL_MODE_EJECT = 4 +} cec_deck_control_mode; -typedef enum +typedef enum cec_deck_info { CEC_DECK_INFO_PLAY = 0x11, CEC_DECK_INFO_RECORD = 0x12, @@ -140,9 +141,9 @@ typedef enum CEC_DECK_INFO_INDEX_SEARCH_FORWARD = 0x1D, CEC_DECK_INFO_INDEX_SEARCH_REVERSE = 0x1E, CEC_DECK_INFO_OTHER_STATUS = 0x1F -} ECecDeckInfo; +} cec_deck_info; -typedef enum +typedef enum cec_device_type { CEC_DEVICE_TYPE_TV = 0, CEC_DEVICE_TYPE_RECORDING_DEVICE = 1, @@ -150,7 +151,56 @@ typedef enum CEC_DEVICE_TYPE_TUNER = 3, CEC_DEVICE_TYPE_PLAYBACK_DEVICE = 4, CEC_DEVICE_TYPE_AUDIO_SYSTEM = 5 -} ECecDeviceType; +} cec_device_type; + +typedef struct cec_device_type_list +{ + cec_device_type types[5]; + +#ifdef __cplusplus + void clear(void) + { + for (unsigned int iPtr = 0; iPtr < 5; iPtr++) + types[iPtr] = CEC_DEVICE_TYPE_RESERVED; + } + + void add(const cec_device_type type) + { + for (unsigned int iPtr = 0; iPtr < 5; iPtr++) + { + if (types[iPtr] == CEC_DEVICE_TYPE_RESERVED) + { + types[iPtr] = type; + break; + } + } + } + + bool isset(cec_device_type type) + { + bool bReturn(false); + for (unsigned int iPtr = 0; !bReturn && iPtr < 5; iPtr++) + { + if (types[iPtr] == type) + bReturn = true; + } + return bReturn; + } + + bool empty() + { + bool bReturn(true); + for (unsigned int iPtr = 0; bReturn && iPtr < 5; iPtr++) + { + if (types[iPtr] != CEC_DEVICE_TYPE_RESERVED) + bReturn = false; + } + return bReturn; + } + + cec_device_type operator[](uint8_t pos) const { return pos < 5 ? types[pos] : CEC_DEVICE_TYPE_RESERVED; } +#endif +} cec_device_type_list; typedef enum cec_display_control { @@ -160,26 +210,26 @@ typedef enum cec_display_control CEC_DISPLAY_CONTROL_RESERVED_FOR_FUTURE_USE = 0xC0 } cec_display_control; -typedef enum +typedef enum cec_external_source_specifier { CEC_EXTERNAL_SOURCE_SPECIFIER_EXTERNAL_PLUG = 4, CEC_EXTERNAL_SOURCE_SPECIFIER_EXTERNAL_PHYSICAL_ADDRESS = 5 -} ECecExternalSourceSpecifier; +} cec_external_source_specifier; -typedef enum +typedef enum cec_menu_request_type { CEC_MENU_REQUEST_TYPE_ACTIVATE = 0, CEC_MENU_REQUEST_TYPE_DEACTIVATE = 1, CEC_MENU_REQUEST_TYPE_QUERY = 2 -} ECecMenuRequestType; +} cec_menu_request_type; -typedef enum +typedef enum cec_menu_state { CEC_MENU_STATE_ACTIVATED = 0, CEC_MENU_STATE_DEACTIVATED = 1 -} ECecMenuState; +} cec_menu_state; -typedef enum +typedef enum cec_play_mode { CEC_PLAY_MODE_PLAY_FORWARD = 0x24, CEC_PLAY_MODE_PLAY_REVERSE = 0x20, @@ -196,7 +246,7 @@ typedef enum CEC_PLAY_MODE_SLOW_REVERSE_MIN_SPEED = 0x19, CEC_PLAY_MODE_SLOW_REVERSE_MEDIUM_SPEED = 0x1A, CEC_PLAY_MODE_SLOW_REVERSE_MAX_SPEED = 0x1B -} ECecPlayMode; +} cec_play_mode; typedef enum cec_power_status { @@ -207,16 +257,16 @@ typedef enum cec_power_status CEC_POWER_STATUS_UNKNOWN = 0x99 } cec_power_status; -typedef enum +typedef enum cec_record_source_type { CEC_RECORD_SOURCE_TYPE_OWN_SOURCE = 1, CEC_RECORD_SOURCE_TYPE_DIGITAL_SERVICE = 2, CEC_RECORD_SOURCE_TYPE_ANALOGUE_SERVICE = 3, CEC_RECORD_SOURCE_TYPE_EXTERNAL_PLUS = 4, CEC_RECORD_SOURCE_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 5 -} ECecRecordSourceType; +} cec_record_source_type; -typedef enum +typedef enum cec_record_status_info { CEC_RECORD_STATUS_INFO_RECORDING_CURRENTLY_SELECTED_SOURCE = 0x01, CEC_RECORD_STATUS_INFO_RECORDING_DIGITAL_SERVICE = 0x02, @@ -242,9 +292,9 @@ typedef enum CEC_RECORD_STATUS_INFO_RECORDING_TERMINATED_NORMALLY = 0x1A, CEC_RECORD_STATUS_INFO_RECORDING_HAS_ALREADY_TERMINATED = 0x1B, CEC_RECORD_STATUS_INFO_NO_RECORDING_OTHER_REASON = 0x1F -} ECecRecordStatusInfo; +} cec_record_status_info; -typedef enum +typedef enum cec_recording_sequence { CEC_RECORDING_SEQUENCE_SUNDAY = 0x01, CEC_RECORDING_SEQUENCE_MONDAY = 0x02, @@ -254,59 +304,59 @@ typedef enum CEC_RECORDING_SEQUENCE_FRIDAY = 0x20, CEC_RECORDING_SEQUENCE_SATURDAY = 0x40, CEC_RECORDING_SEQUENCE_ONCE_ONLY = 0x00 -} ECecRecordingSequence; +} cec_recording_sequence; -typedef enum +typedef enum cec_status_request { CEC_STATUS_REQUEST_ON = 1, CEC_STATUS_REQUEST_OFF = 2, CEC_STATUS_REQUEST_ONCE = 3 -} ECecStatusRequest; +} cec_status_request; -typedef enum +typedef enum cec_system_audio_status { CEC_SYSTEM_AUDIO_STATUS_OFF = 0, CEC_SYSTEM_AUDIO_STATUS_ON = 1 -} ECecSystemAudioStatus; +} cec_system_audio_status; -typedef enum +typedef enum cec_timer_cleared_status_data { CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_RECORDING = 0x00, CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_NO_MATCHING = 0x01, CEC_TIMER_CLEARED_STATUS_DATA_TIMER_NOT_CLEARED_NO_INF0_AVAILABLE = 0x02, CEC_TIMER_CLEARED_STATUS_DATA_TIMER_CLEARED = 0x80 -} ECecTimerClearedStatusData; +} cec_timer_cleared_status_data; -typedef enum +typedef enum cec_timer_overlap_warning { CEC_TIMER_OVERLAP_WARNING_NO_OVERLAP = 0, CEC_TIMER_OVERLAP_WARNING_TIMER_BLOCKS_OVERLAP = 1 -} ECecTimerOverlapWarning; +} cec_timer_overlap_warning; -typedef enum +typedef enum cec_media_info { CEC_MEDIA_INFO_MEDIA_PRESENT_AND_NOT_PROTECTED = 0x00, CEC_MEDIA_INFO_MEDIA_PRESENT_BUT_PROTECTED = 0x01, CEC_MEDIA_INFO_MEDIA_NOT_PRESENT = 0x02, CEC_MEDIA_INFO_FUTURE_USE = 0x03 -} ECecMediaInfo; +} cec_media_info; -typedef enum +typedef enum cec_programmed_indicator { CEC_PROGRAMMED_INDICATOR_NOT_PROGRAMMED = 0, CEC_PROGRAMMED_INDICATOR_PROGRAMMED = 1 -} ECecProgrammedIndicator; +} cec_programmed_indicator; -typedef enum +typedef enum cec_programmed_info { CEC_PROGRAMMED_INFO_FUTURE_USE = 0x0, CEC_PROGRAMMED_INFO_ENOUGH_SPACE_AVAILABLE_FOR_RECORDING = 0x08, CEC_PROGRAMMED_INFO_NOT_ENOUGH_SPACE_AVAILABLE_FOR_RECORDING = 0x09, CEC_PROGRAMMED_INFO_MAY_NOT_BE_ENOUGH_SPACE_AVAILABLE = 0x0B, CEC_PROGRAMMED_INFO_NO_MEDIA_INFO_AVAILABLE = 0x0A -} ECecProgrammedInfo; +} cec_programmed_info; -typedef enum +typedef enum cec_not_programmed_error_info { CEC_NOT_PROGRAMMED_ERROR_INFO_FUTURE_USE = 0x0, CEC_NOT_PROGRAMMED_ERROR_INFO_NO_FREE_TIMER_AVAILABLE = 0x01, @@ -322,23 +372,22 @@ typedef enum CEC_NOT_PROGRAMMED_ERROR_INFO_RESERVED_FOR_FUTURE_USE_START = 0x0B, CEC_NOT_PROGRAMMED_ERROR_INFO_RESERVED_FOR_FUTURE_USE_END = 0x0D, CEC_NOT_PROGRAMMED_ERROR_INFO_DUPLICATE_ALREADY_PROGRAMMED = 0x0E -} ECecNotProgrammedErrorInfo; +} cec_not_programmed_error_info; -typedef enum +typedef enum cec_recording_flag { CEC_RECORDING_FLAG_NOT_BEING_USED_FOR_RECORDING = 0, CEC_RECORDING_FLAG_BEING_USED_FOR_RECORDING = 1 -} ECecRecordingFlag; +} cec_recording_flag; -typedef enum +typedef enum cec_tuner_display_info { CEC_TUNER_DISPLAY_INFO_DISPLAYING_DIGITAL_TUNER = 0, CEC_TUNER_DISPLAY_INFO_NOT_DISPLAYING_TUNER = 1, CEC_TUNER_DISPLAY_INFO_DISPLAYING_ANALOGUE_TUNER = 2 -} ECecTunerDisplayInfo; +} cec_tuner_display_info; - -typedef enum +typedef enum cec_broadcast_system { CEC_BROADCAST_SYSTEM_PAL_B_G = 0, CEC_BROADCAST_SYSTEM_SECAM_L1 = 1, @@ -350,7 +399,7 @@ typedef enum CEC_BROADCAST_SYSTEM_SECAM_L2 = 7, CEC_BROADCAST_SYSTEM_PAL_DK = 8, CEC_BROADCAST_SYSTEM_OTHER_SYSTEM = 30 -} ECecBroadcastSystem; +} cec_broadcast_system; typedef enum cec_user_control_code { @@ -463,6 +512,54 @@ typedef enum cec_logical_address CECDEVICE_BROADCAST = 15 } cec_logical_address; +typedef struct cec_logical_addresses +{ + cec_logical_address primary; + int addresses[16]; + +#ifdef __cplusplus + void clear(void) + { + primary = CECDEVICE_UNKNOWN; + for (unsigned int iPtr = 0; iPtr < 16; iPtr++) + addresses[iPtr] = 0; + } + + bool empty(void) const + { + return primary == CECDEVICE_UNKNOWN; + } + + uint16_t ackmask(void) const + { + uint16_t mask = 0; + for (unsigned int iPtr = 0; iPtr < 16; iPtr++) + if (addresses[iPtr] == 1) + mask |= 0x1 << iPtr; + return mask; + } + + void set(cec_logical_address address) + { + if (primary == CECDEVICE_UNKNOWN) + primary = address; + + addresses[(int) address] = 1; + } + + void unset(cec_logical_address address) + { + if (primary == address) + primary = CECDEVICE_UNKNOWN; + + addresses[(int) address] = 0; + } + + 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; } +#endif +} cec_logical_addresses; + typedef enum cec_opcode { CEC_OPCODE_ACTIVE_SOURCE = 0x82, @@ -526,7 +623,8 @@ typedef enum cec_opcode CEC_OPCODE_SET_SYSTEM_AUDIO_MODE = 0x72, CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST = 0x70, CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS = 0x7E, - CEC_OPCODE_SET_AUDIO_RATE = 0x9A + CEC_OPCODE_SET_AUDIO_RATE = 0x9A, + CEC_OPCODE_NONE = 0xFD /* when this opcode is set, no opcode will be sent to the device. this is one of the reserved numbers */ } cec_opcode; typedef enum cec_log_level @@ -671,10 +769,13 @@ typedef struct cec_command static void format(cec_command &command, cec_logical_address initiator, cec_logical_address destination, cec_opcode opcode) { command.clear(); - command.initiator = initiator; - command.destination = destination; - command.opcode = opcode; - command.opcode_set = 1; + command.initiator = initiator; + command.destination = destination; + if (opcode != CEC_OPCODE_NONE) + { + command.opcode = opcode; + command.opcode_set = 1; + } } void push_back(uint8_t data) @@ -709,29 +810,13 @@ typedef struct cec_command typedef enum cec_vendor_id { - CEC_VENDOR_SAMSUNG = 0x00F0, - CEC_VENDOR_LG = 0xE091, - CEC_VENDOR_UNKNOWN = 0 + CEC_VENDOR_SAMSUNG = 0x00F0, + CEC_VENDOR_LG = 0xE091, + CEC_VENDOR_PANASONIC = 0x8045, + CEC_VENDOR_PIONEER = 0xE036, + CEC_VENDOR_UNKNOWN = 0 } cec_vendor_id; -typedef struct cec_vendor -{ - const char *AsString(void) const - { - switch (vendor) - { - case CEC_VENDOR_SAMSUNG: - return "Samsung"; - case CEC_VENDOR_LG: - return "LG"; - default: - return "Unknown"; - } - } - - cec_vendor_id vendor; -} cec_vendor; - //default physical address 1.0.0.0, HDMI port 1 #define CEC_DEFAULT_PHYSICAL_ADDRESS 0x1000 #define MSGSTART 0xFF @@ -740,8 +825,8 @@ typedef struct cec_vendor #define ESCOFFSET 3 #define CEC_BUTTON_TIMEOUT 500 -#define CEC_MIN_VERSION 8 -#define CEC_LIB_VERSION 8 +#define CEC_MIN_LIB_VERSION 1 +#define CEC_LIB_VERSION_MAJOR 1 #define CEC_LIB_VERSION_MINOR 1 #ifdef __cplusplus