X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2FCECExports.h;h=fd6162ced744b2db0e47f2c4bb33f74462f5ca64;hb=ddb76c470aa282f59064c8e2ffe20a0785463167;hp=a378cfe170cd246fd50931c7c76bd4ad08ba2bb2;hpb=a6b6469cc934c046067a5f518d47344b749ab9f1;p=deb_libcec.git diff --git a/include/CECExports.h b/include/CECExports.h index a378cfe..fd6162c 100644 --- a/include/CECExports.h +++ b/include/CECExports.h @@ -54,9 +54,9 @@ extern "C" { namespace CEC { #endif - #define CEC_MIN_VERSION 5 - #define CEC_LIB_VERSION 5 - #define CEC_SETTLE_DOWN_TIME 1000 + #define CEC_MIN_VERSION 6 + #define CEC_LIB_VERSION 6 + #define CEC_SETTLE_DOWN_TIME 1500 #define CEC_BUTTON_TIMEOUT 500 typedef enum cec_user_control_code @@ -325,7 +325,7 @@ namespace CEC { } cec_datapacket; - typedef struct cec_frame + typedef struct cec_adapter_message { cec_datapacket packet; @@ -341,19 +341,45 @@ namespace CEC { bool ack(void) const { return packet.size >= 1 ? (packet.at(0) & MSGCODE_FRAME_ACK) != 0 : false; } cec_logical_address initiator(void) const { return packet.size >= 2 ? (cec_logical_address) (packet.at(1) >> 4) : CECDEVICE_UNKNOWN; }; cec_logical_address destination(void) const { return packet.size >= 2 ? (cec_logical_address) (packet.at(1) & 0xF) : CECDEVICE_UNKNOWN; }; - } cec_frame; + } cec_adapter_message; typedef struct cec_command { - cec_logical_address source; + cec_logical_address initiator; cec_logical_address destination; + bool ack; + bool eom; cec_opcode opcode; cec_datapacket parameters; + bool opcode_set; + + 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 = true; + } + + void push_back(uint8_t data) + { + if (!opcode_set) + { + opcode_set = true; + opcode = (cec_opcode) data; + } + else + parameters.push_back(data); + } void clear(void) { - source = CECDEVICE_UNKNOWN; + initiator = CECDEVICE_UNKNOWN; destination = CECDEVICE_UNKNOWN; + ack = false; + eom = false; + opcode_set = false; opcode = CEC_OPCODE_FEATURE_ABORT; parameters.clear(); };