Skip to main content

linux_cec_sys/
constants.rs

1/*
2 * Copyright © 2024 Valve Software
3 *
4 * Based in part on linux/cec.h
5 * Copyright 2016 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9#![allow(clippy::identity_op)]
10
11pub const CEC_MAX_MSG_SIZE: usize = 16;
12
13/* cec_msg flags field */
14pub const CEC_MSG_FL_REPLY_TO_FOLLOWERS: u32 = 1 << 0;
15pub const CEC_MSG_FL_RAW: u32 = 1 << 1;
16pub const CEC_MSG_FL_REPLY_VENDOR_ID: u32 = 1 << 2;
17
18/* cec_msg tx/rx_status field */
19pub const CEC_TX_STATUS_OK: u8 = 1 << 0;
20pub const CEC_TX_STATUS_ARB_LOST: u8 = 1 << 1;
21pub const CEC_TX_STATUS_NACK: u8 = 1 << 2;
22pub const CEC_TX_STATUS_LOW_DRIVE: u8 = 1 << 3;
23pub const CEC_TX_STATUS_ERROR: u8 = 1 << 4;
24pub const CEC_TX_STATUS_MAX_RETRIES: u8 = 1 << 5;
25pub const CEC_TX_STATUS_ABORTED: u8 = 1 << 6;
26pub const CEC_TX_STATUS_TIMEOUT: u8 = 1 << 7;
27
28pub const CEC_RX_STATUS_OK: u8 = 1 << 0;
29pub const CEC_RX_STATUS_TIMEOUT: u8 = 1 << 1;
30pub const CEC_RX_STATUS_FEATURE_ABORT: u8 = 1 << 2;
31pub const CEC_RX_STATUS_ABORTED: u8 = 1 << 3;
32
33pub const CEC_LOG_ADDR_INVALID: u16 = 0xff;
34pub const CEC_PHYS_ADDR_INVALID: u16 = 0xffff;
35
36/*
37 * The maximum number of logical addresses one device can be assigned to.
38 * The CEC 2.0 spec allows for only 2 logical addresses at the moment. The
39 * Analog Devices CEC hardware supports 3. So let's go wild and go for 4.
40 */
41pub const CEC_MAX_LOG_ADDRS: usize = 4;
42
43/* The logical addresses defined by CEC 2.0 */
44pub const CEC_LOG_ADDR_TV: u8 = 0;
45pub const CEC_LOG_ADDR_RECORD_1: u8 = 1;
46pub const CEC_LOG_ADDR_RECORD_2: u8 = 2;
47pub const CEC_LOG_ADDR_TUNER_1: u8 = 3;
48pub const CEC_LOG_ADDR_PLAYBACK_1: u8 = 4;
49pub const CEC_LOG_ADDR_AUDIOSYSTEM: u8 = 5;
50pub const CEC_LOG_ADDR_TUNER_2: u8 = 6;
51pub const CEC_LOG_ADDR_TUNER_3: u8 = 7;
52pub const CEC_LOG_ADDR_PLAYBACK_2: u8 = 8;
53pub const CEC_LOG_ADDR_RECORD_3: u8 = 9;
54pub const CEC_LOG_ADDR_TUNER_4: u8 = 10;
55pub const CEC_LOG_ADDR_PLAYBACK_3: u8 = 11;
56pub const CEC_LOG_ADDR_BACKUP_1: u8 = 12;
57pub const CEC_LOG_ADDR_BACKUP_2: u8 = 13;
58pub const CEC_LOG_ADDR_SPECIFIC: u8 = 14;
59pub const CEC_LOG_ADDR_UNREGISTERED: u8 = 15; /* as initiator address */
60pub const CEC_LOG_ADDR_BROADCAST: u8 = 15; /* as destination address */
61
62/* The logical address types that the CEC device wants to claim */
63pub const CEC_LOG_ADDR_TYPE_TV: u8 = 0;
64pub const CEC_LOG_ADDR_TYPE_RECORD: u8 = 1;
65pub const CEC_LOG_ADDR_TYPE_TUNER: u8 = 2;
66pub const CEC_LOG_ADDR_TYPE_PLAYBACK: u8 = 3;
67pub const CEC_LOG_ADDR_TYPE_AUDIOSYSTEM: u8 = 4;
68pub const CEC_LOG_ADDR_TYPE_SPECIFIC: u8 = 5;
69pub const CEC_LOG_ADDR_TYPE_UNREGISTERED: u8 = 6;
70/*
71 * Switches should use UNREGISTERED.
72 * Processors should use SPECIFIC.
73 */
74
75pub const CEC_LOG_ADDR_MASK_TV: u16 = 1 << CEC_LOG_ADDR_TV;
76pub const CEC_LOG_ADDR_MASK_RECORD: u16 =
77    (1 << CEC_LOG_ADDR_RECORD_1) | (1 << CEC_LOG_ADDR_RECORD_2) | (1 << CEC_LOG_ADDR_RECORD_3);
78pub const CEC_LOG_ADDR_MASK_TUNER: u16 = (1 << CEC_LOG_ADDR_TUNER_1)
79    | (1 << CEC_LOG_ADDR_TUNER_2)
80    | (1 << CEC_LOG_ADDR_TUNER_3)
81    | (1 << CEC_LOG_ADDR_TUNER_4);
82pub const CEC_LOG_ADDR_MASK_PLAYBACK: u16 = (1 << CEC_LOG_ADDR_PLAYBACK_1)
83    | (1 << CEC_LOG_ADDR_PLAYBACK_2)
84    | (1 << CEC_LOG_ADDR_PLAYBACK_3);
85pub const CEC_LOG_ADDR_MASK_AUDIOSYSTEM: u16 = 1 << CEC_LOG_ADDR_AUDIOSYSTEM;
86pub const CEC_LOG_ADDR_MASK_BACKUP: u16 =
87    (1 << CEC_LOG_ADDR_BACKUP_1) | (1 << CEC_LOG_ADDR_BACKUP_2);
88pub const CEC_LOG_ADDR_MASK_SPECIFIC: u16 = 1 << CEC_LOG_ADDR_SPECIFIC;
89pub const CEC_LOG_ADDR_MASK_UNREGISTERED: u16 = 1 << CEC_LOG_ADDR_UNREGISTERED;
90
91/*
92 * Use this if there is no vendor ID (CEC_G_VENDOR_ID) or if the vendor ID
93 * should be disabled (CEC_S_VENDOR_ID)
94 */
95pub const CEC_VENDOR_ID_NONE: u32 = 0xffffffff;
96
97/* The message handling modes */
98/* Modes for initiator */
99pub const CEC_MODE_NO_INITIATOR: u32 = 0x0 << 0;
100pub const CEC_MODE_INITIATOR: u32 = 0x1 << 0;
101pub const CEC_MODE_EXCL_INITIATOR: u32 = 0x2 << 0;
102pub const CEC_MODE_INITIATOR_MSK: u32 = 0x0f;
103
104/* Modes for follower */
105pub const CEC_MODE_NO_FOLLOWER: u32 = 0x0 << 4;
106pub const CEC_MODE_FOLLOWER: u32 = 0x1 << 4;
107pub const CEC_MODE_EXCL_FOLLOWER: u32 = 0x2 << 4;
108pub const CEC_MODE_EXCL_FOLLOWER_PASSTHRU: u32 = 0x3 << 4;
109pub const CEC_MODE_MONITOR_PIN: u32 = 0xd << 4;
110pub const CEC_MODE_MONITOR: u32 = 0xe << 4;
111pub const CEC_MODE_MONITOR_ALL: u32 = 0xf << 4;
112pub const CEC_MODE_FOLLOWER_MSK: u32 = 0xf0;
113
114/* Userspace has to configure the physical address */
115pub const CEC_CAP_PHYS_ADDR: u32 = 1 << 0;
116/* Userspace has to configure the logical addresses */
117pub const CEC_CAP_LOG_ADDRS: u32 = 1 << 1;
118/* Userspace can transmit messages (and thus become follower as well) */
119pub const CEC_CAP_TRANSMIT: u32 = 1 << 2;
120/*
121 * Passthrough all messages instead of processing them.
122 */
123pub const CEC_CAP_PASSTHROUGH: u32 = 1 << 3;
124/* Supports remote control */
125pub const CEC_CAP_RC: u32 = 1 << 4;
126/* Hardware can monitor all messages, not just directed and broadcast. */
127pub const CEC_CAP_MONITOR_ALL: u32 = 1 << 5;
128/* Hardware can use CEC only if the HDMI HPD pin is high. */
129pub const CEC_CAP_NEEDS_HPD: u32 = 1 << 6;
130/* Hardware can monitor CEC pin transitions */
131pub const CEC_CAP_MONITOR_PIN: u32 = 1 << 7;
132/* CEC_ADAP_G_CONNECTOR_INFO is available */
133pub const CEC_CAP_CONNECTOR_INFO: u32 = 1 << 8;
134/* CEC_MSG_FL_REPLY_VENDOR_ID is available */
135pub const CEC_CAP_REPLY_VENDOR_ID: u32 = 1 << 9;
136
137/* Allow a fallback to unregistered */
138pub const CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK: u32 = 1 << 0;
139/* Passthrough RC messages to the input subsystem */
140pub const CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU: u32 = 1 << 1;
141/* CDC-Only device: supports only CDC messages */
142pub const CEC_LOG_ADDRS_FL_CDC_ONLY: u32 = 1 << 2;
143
144pub const CEC_CONNECTOR_TYPE_NO_CONNECTOR: u32 = 0;
145pub const CEC_CONNECTOR_TYPE_DRM: u32 = 1;
146
147/* Events */
148
149/* Event that occurs when the adapter state changes */
150pub const CEC_EVENT_STATE_CHANGE: u32 = 1;
151/*
152 * This event is sent when messages are lost because the application
153 * didn't empty the message queue in time
154 */
155pub const CEC_EVENT_LOST_MSGS: u32 = 2;
156pub const CEC_EVENT_PIN_CEC_LOW: u32 = 3;
157pub const CEC_EVENT_PIN_CEC_HIGH: u32 = 4;
158pub const CEC_EVENT_PIN_HPD_LOW: u32 = 5;
159pub const CEC_EVENT_PIN_HPD_HIGH: u32 = 6;
160pub const CEC_EVENT_PIN_5V_LOW: u32 = 7;
161pub const CEC_EVENT_PIN_5V_HIGH: u32 = 8;
162
163pub const CEC_EVENT_FL_INITIAL_STATE: u32 = 1 << 0;
164pub const CEC_EVENT_FL_DROPPED_EVENTS: u32 = 1 << 1;
165
166/* Messages */
167
168/* One Touch Play Feature */
169pub const CEC_MSG_ACTIVE_SOURCE: u8 = 0x82;
170pub const CEC_MSG_IMAGE_VIEW_ON: u8 = 0x04;
171pub const CEC_MSG_TEXT_VIEW_ON: u8 = 0x0d;
172
173/* Routing Control Feature */
174
175/*
176 * Has also:
177 * CEC_MSG_ACTIVE_SOURCE
178 */
179
180pub const CEC_MSG_INACTIVE_SOURCE: u8 = 0x9d;
181pub const CEC_MSG_REQUEST_ACTIVE_SOURCE: u8 = 0x85;
182pub const CEC_MSG_ROUTING_CHANGE: u8 = 0x80;
183pub const CEC_MSG_ROUTING_INFORMATION: u8 = 0x81;
184pub const CEC_MSG_SET_STREAM_PATH: u8 = 0x86;
185
186/* Standby Feature */
187pub const CEC_MSG_STANDBY: u8 = 0x36;
188
189/* One Touch Record Feature */
190pub const CEC_MSG_RECORD_OFF: u8 = 0x0b;
191pub const CEC_MSG_RECORD_ON: u8 = 0x09;
192/* Record Source Type Operand (rec_src_type) */
193pub const CEC_OP_RECORD_SRC_OWN: u8 = 1;
194pub const CEC_OP_RECORD_SRC_DIGITAL: u8 = 2;
195pub const CEC_OP_RECORD_SRC_ANALOG: u8 = 3;
196pub const CEC_OP_RECORD_SRC_EXT_PLUG: u8 = 4;
197pub const CEC_OP_RECORD_SRC_EXT_PHYS_ADDR: u8 = 5;
198/* Service Identification Method Operand (service_id_method) */
199pub const CEC_OP_SERVICE_ID_METHOD_BY_DIG_ID: u8 = 0;
200pub const CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL: u8 = 1;
201/* Digital Service Broadcast System Operand (dig_bcast_system) */
202pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_GEN: u8 = 0x00;
203pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_GEN: u8 = 0x01;
204pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_GEN: u8 = 0x02;
205pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_BS: u8 = 0x08;
206pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_CS: u8 = 0x09;
207pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ARIB_T: u8 = 0x0a;
208pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_CABLE: u8 = 0x10;
209pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_SAT: u8 = 0x11;
210pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_T: u8 = 0x12;
211pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_C: u8 = 0x18;
212pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S: u8 = 0x19;
213pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_S2: u8 = 0x1a;
214pub const CEC_OP_DIG_SERVICE_BCAST_SYSTEM_DVB_T: u8 = 0x1b;
215/* Analogue Broadcast Type Operand (ana_bcast_type) */
216pub const CEC_OP_ANA_BCAST_TYPE_CABLE: u8 = 0;
217pub const CEC_OP_ANA_BCAST_TYPE_SATELLITE: u8 = 1;
218pub const CEC_OP_ANA_BCAST_TYPE_TERRESTRIAL: u8 = 2;
219/* Broadcast System Operand (bcast_system) */
220pub const CEC_OP_BCAST_SYSTEM_PAL_BG: u8 = 0x00;
221pub const CEC_OP_BCAST_SYSTEM_SECAM_LQ: u8 = 0x01; /* SECAM L' */
222pub const CEC_OP_BCAST_SYSTEM_PAL_M: u8 = 0x02;
223pub const CEC_OP_BCAST_SYSTEM_NTSC_M: u8 = 0x03;
224pub const CEC_OP_BCAST_SYSTEM_PAL_I: u8 = 0x04;
225pub const CEC_OP_BCAST_SYSTEM_SECAM_DK: u8 = 0x05;
226pub const CEC_OP_BCAST_SYSTEM_SECAM_BG: u8 = 0x06;
227pub const CEC_OP_BCAST_SYSTEM_SECAM_L: u8 = 0x07;
228pub const CEC_OP_BCAST_SYSTEM_PAL_DK: u8 = 0x08;
229pub const CEC_OP_BCAST_SYSTEM_OTHER: u8 = 0x1f;
230/* Channel Number Format Operand (channel_number_fmt) */
231pub const CEC_OP_CHANNEL_NUMBER_FMT_1_PART: u8 = 0x01;
232pub const CEC_OP_CHANNEL_NUMBER_FMT_2_PART: u8 = 0x02;
233
234pub const CEC_MSG_RECORD_STATUS: u8 = 0x0a;
235/* Record Status Operand (rec_status) */
236pub const CEC_OP_RECORD_STATUS_CUR_SRC: u8 = 0x01;
237pub const CEC_OP_RECORD_STATUS_DIG_SERVICE: u8 = 0x02;
238pub const CEC_OP_RECORD_STATUS_ANA_SERVICE: u8 = 0x03;
239pub const CEC_OP_RECORD_STATUS_EXT_INPUT: u8 = 0x04;
240pub const CEC_OP_RECORD_STATUS_NO_DIG_SERVICE: u8 = 0x05;
241pub const CEC_OP_RECORD_STATUS_NO_ANA_SERVICE: u8 = 0x06;
242pub const CEC_OP_RECORD_STATUS_NO_SERVICE: u8 = 0x07;
243pub const CEC_OP_RECORD_STATUS_INVALID_EXT_PLUG: u8 = 0x09;
244pub const CEC_OP_RECORD_STATUS_INVALID_EXT_PHYS_ADDR: u8 = 0x0a;
245pub const CEC_OP_RECORD_STATUS_UNSUP_CA: u8 = 0x0b;
246pub const CEC_OP_RECORD_STATUS_NO_CA_ENTITLEMENTS: u8 = 0x0c;
247pub const CEC_OP_RECORD_STATUS_CANT_COPY_SRC: u8 = 0x0d;
248pub const CEC_OP_RECORD_STATUS_NO_MORE_COPIES: u8 = 0x0e;
249pub const CEC_OP_RECORD_STATUS_NO_MEDIA: u8 = 0x10;
250pub const CEC_OP_RECORD_STATUS_PLAYING: u8 = 0x11;
251pub const CEC_OP_RECORD_STATUS_ALREADY_RECORDING: u8 = 0x12;
252pub const CEC_OP_RECORD_STATUS_MEDIA_PROT: u8 = 0x13;
253pub const CEC_OP_RECORD_STATUS_NO_SIGNAL: u8 = 0x14;
254pub const CEC_OP_RECORD_STATUS_MEDIA_PROBLEM: u8 = 0x15;
255pub const CEC_OP_RECORD_STATUS_NO_SPACE: u8 = 0x16;
256pub const CEC_OP_RECORD_STATUS_PARENTAL_LOCK: u8 = 0x17;
257pub const CEC_OP_RECORD_STATUS_TERMINATED_OK: u8 = 0x1a;
258pub const CEC_OP_RECORD_STATUS_ALREADY_TERM: u8 = 0x1b;
259pub const CEC_OP_RECORD_STATUS_OTHER: u8 = 0x1f;
260
261pub const CEC_MSG_RECORD_TV_SCREEN: u8 = 0x0f;
262
263/* Timer Programming Feature */
264pub const CEC_MSG_CLEAR_ANALOGUE_TIMER: u8 = 0x33;
265/* Recording Sequence Operand (recording_seq) */
266pub const CEC_OP_REC_SEQ_SUNDAY: u8 = 0x01;
267pub const CEC_OP_REC_SEQ_MONDAY: u8 = 0x02;
268pub const CEC_OP_REC_SEQ_TUESDAY: u8 = 0x04;
269pub const CEC_OP_REC_SEQ_WEDNESDAY: u8 = 0x08;
270pub const CEC_OP_REC_SEQ_THURSDAY: u8 = 0x10;
271pub const CEC_OP_REC_SEQ_FRIDAY: u8 = 0x20;
272pub const CEC_OP_REC_SEQ_SATURDAY: u8 = 0x40;
273pub const CEC_OP_REC_SEQ_ONCE_ONLY: u8 = 0x00;
274
275pub const CEC_MSG_CLEAR_DIGITAL_TIMER: u8 = 0x99;
276
277pub const CEC_MSG_CLEAR_EXT_TIMER: u8 = 0xa1;
278/* External Source Specifier Operand (ext_src_spec) */
279pub const CEC_OP_EXT_SRC_PLUG: u8 = 0x04;
280pub const CEC_OP_EXT_SRC_PHYS_ADDR: u8 = 0x05;
281
282pub const CEC_MSG_SET_ANALOGUE_TIMER: u8 = 0x34;
283pub const CEC_MSG_SET_DIGITAL_TIMER: u8 = 0x97;
284pub const CEC_MSG_SET_EXT_TIMER: u8 = 0xa2;
285
286pub const CEC_MSG_SET_TIMER_PROGRAM_TITLE: u8 = 0x67;
287pub const CEC_MSG_TIMER_CLEARED_STATUS: u8 = 0x43;
288/* Timer Cleared Status Data Operand (timer_cleared_status) */
289pub const CEC_OP_TIMER_CLR_STAT_RECORDING: u8 = 0x00;
290pub const CEC_OP_TIMER_CLR_STAT_NO_MATCHING: u8 = 0x01;
291pub const CEC_OP_TIMER_CLR_STAT_NO_INFO: u8 = 0x02;
292pub const CEC_OP_TIMER_CLR_STAT_CLEARED: u8 = 0x80;
293
294pub const CEC_MSG_TIMER_STATUS: u8 = 0x35;
295/* Timer Overlap Warning Operand (timer_overlap_warning) */
296pub const CEC_OP_TIMER_OVERLAP_WARNING_NO_OVERLAP: u8 = 0;
297pub const CEC_OP_TIMER_OVERLAP_WARNING_OVERLAP: u8 = 1;
298/* Media Info Operand (media_info) */
299pub const CEC_OP_MEDIA_INFO_UNPROT_MEDIA: u8 = 0;
300pub const CEC_OP_MEDIA_INFO_PROT_MEDIA: u8 = 1;
301pub const CEC_OP_MEDIA_INFO_NO_MEDIA: u8 = 2;
302/* Programmed Indicator Operand (prog_indicator) */
303pub const CEC_OP_PROG_IND_NOT_PROGRAMMED: u8 = 0;
304pub const CEC_OP_PROG_IND_PROGRAMMED: u8 = 1;
305/* Programmed Info Operand (prog_info) */
306pub const CEC_OP_PROG_INFO_ENOUGH_SPACE: u8 = 0x08;
307pub const CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE: u8 = 0x09;
308pub const CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE: u8 = 0x0b;
309pub const CEC_OP_PROG_INFO_NONE_AVAILABLE: u8 = 0x0a;
310/* Not Programmed Error Info Operand (prog_error) */
311pub const CEC_OP_PROG_ERROR_NO_FREE_TIMER: u8 = 0x01;
312pub const CEC_OP_PROG_ERROR_DATE_OUT_OF_RANGE: u8 = 0x02;
313pub const CEC_OP_PROG_ERROR_REC_SEQ_ERROR: u8 = 0x03;
314pub const CEC_OP_PROG_ERROR_INV_EXT_PLUG: u8 = 0x04;
315pub const CEC_OP_PROG_ERROR_INV_EXT_PHYS_ADDR: u8 = 0x05;
316pub const CEC_OP_PROG_ERROR_CA_UNSUPP: u8 = 0x06;
317pub const CEC_OP_PROG_ERROR_INSUF_CA_ENTITLEMENTS: u8 = 0x07;
318pub const CEC_OP_PROG_ERROR_RESOLUTION_UNSUPP: u8 = 0x08;
319pub const CEC_OP_PROG_ERROR_PARENTAL_LOCK: u8 = 0x09;
320pub const CEC_OP_PROG_ERROR_CLOCK_FAILURE: u8 = 0x0a;
321pub const CEC_OP_PROG_ERROR_DUPLICATE: u8 = 0x0e;
322
323/* System Information Feature */
324pub const CEC_MSG_CEC_VERSION: u8 = 0x9e;
325/* CEC Version Operand (cec_version) */
326pub const CEC_OP_CEC_VERSION_1_3A: u8 = 4;
327pub const CEC_OP_CEC_VERSION_1_4: u8 = 5;
328pub const CEC_OP_CEC_VERSION_2_0: u8 = 6;
329
330pub const CEC_MSG_GET_CEC_VERSION: u8 = 0x9f;
331pub const CEC_MSG_GIVE_PHYSICAL_ADDR: u8 = 0x83;
332pub const CEC_MSG_GET_MENU_LANGUAGE: u8 = 0x91;
333pub const CEC_MSG_REPORT_PHYSICAL_ADDR: u8 = 0x84;
334/* Primary Device Type Operand (prim_devtype) */
335pub const CEC_OP_PRIM_DEVTYPE_TV: u8 = 0;
336pub const CEC_OP_PRIM_DEVTYPE_RECORD: u8 = 1;
337pub const CEC_OP_PRIM_DEVTYPE_TUNER: u8 = 3;
338pub const CEC_OP_PRIM_DEVTYPE_PLAYBACK: u8 = 4;
339pub const CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM: u8 = 5;
340pub const CEC_OP_PRIM_DEVTYPE_SWITCH: u8 = 6;
341pub const CEC_OP_PRIM_DEVTYPE_PROCESSOR: u8 = 7;
342
343pub const CEC_MSG_SET_MENU_LANGUAGE: u8 = 0x32;
344pub const CEC_MSG_REPORT_FEATURES: u8 = 0xa6; /* HDMI 2.0 */
345/* All Device Types Operand (all_device_types) */
346pub const CEC_OP_ALL_DEVTYPE_TV: u8 = 0x80;
347pub const CEC_OP_ALL_DEVTYPE_RECORD: u8 = 0x40;
348pub const CEC_OP_ALL_DEVTYPE_TUNER: u8 = 0x20;
349pub const CEC_OP_ALL_DEVTYPE_PLAYBACK: u8 = 0x10;
350pub const CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM: u8 = 0x08;
351pub const CEC_OP_ALL_DEVTYPE_SWITCH: u8 = 0x04;
352/*
353 * And if you wondering what happened to PROCESSOR devices: those should
354 * be mapped to a SWITCH.
355 */
356
357/* Valid for RC Profile and Device Feature operands */
358pub const CEC_OP_FEAT_EXT: u8 = 0x80; /* Extension bit */
359/* RC Profile Operand (rc_profile) */
360pub const CEC_OP_FEAT_RC_TV_PROFILE_NONE: u8 = 0x00;
361pub const CEC_OP_FEAT_RC_TV_PROFILE_1: u8 = 0x02;
362pub const CEC_OP_FEAT_RC_TV_PROFILE_2: u8 = 0x06;
363pub const CEC_OP_FEAT_RC_TV_PROFILE_3: u8 = 0x0a;
364pub const CEC_OP_FEAT_RC_TV_PROFILE_4: u8 = 0x0e;
365pub const CEC_OP_FEAT_RC_SRC_HAS_DEV_ROOT_MENU: u8 = 0x50;
366pub const CEC_OP_FEAT_RC_SRC_HAS_DEV_SETUP_MENU: u8 = 0x48;
367pub const CEC_OP_FEAT_RC_SRC_HAS_CONTENTS_MENU: u8 = 0x44;
368pub const CEC_OP_FEAT_RC_SRC_HAS_MEDIA_TOP_MENU: u8 = 0x42;
369pub const CEC_OP_FEAT_RC_SRC_HAS_MEDIA_CONTEXT_MENU: u8 = 0x41;
370/* Device Feature Operand (dev_features) */
371pub const CEC_OP_FEAT_DEV_HAS_RECORD_TV_SCREEN: u8 = 0x40;
372pub const CEC_OP_FEAT_DEV_HAS_SET_OSD_STRING: u8 = 0x20;
373pub const CEC_OP_FEAT_DEV_HAS_DECK_CONTROL: u8 = 0x10;
374pub const CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE: u8 = 0x08;
375pub const CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX: u8 = 0x04;
376pub const CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX: u8 = 0x02;
377pub const CEC_OP_FEAT_DEV_HAS_SET_AUDIO_VOLUME_LEVEL: u8 = 0x01;
378
379pub const CEC_MSG_GIVE_FEATURES: u8 = 0xa5; /* HDMI 2.0 */
380
381/* Deck Control Feature */
382pub const CEC_MSG_DECK_CONTROL: u8 = 0x42;
383/* Deck Control Mode Operand (deck_control_mode) */
384pub const CEC_OP_DECK_CTL_MODE_SKIP_FWD: u8 = 1;
385pub const CEC_OP_DECK_CTL_MODE_SKIP_REV: u8 = 2;
386pub const CEC_OP_DECK_CTL_MODE_STOP: u8 = 3;
387pub const CEC_OP_DECK_CTL_MODE_EJECT: u8 = 4;
388
389pub const CEC_MSG_DECK_STATUS: u8 = 0x1b;
390/* Deck Info Operand (deck_info) */
391pub const CEC_OP_DECK_INFO_PLAY: u8 = 0x11;
392pub const CEC_OP_DECK_INFO_RECORD: u8 = 0x12;
393pub const CEC_OP_DECK_INFO_PLAY_REV: u8 = 0x13;
394pub const CEC_OP_DECK_INFO_STILL: u8 = 0x14;
395pub const CEC_OP_DECK_INFO_SLOW: u8 = 0x15;
396pub const CEC_OP_DECK_INFO_SLOW_REV: u8 = 0x16;
397pub const CEC_OP_DECK_INFO_FAST_FWD: u8 = 0x17;
398pub const CEC_OP_DECK_INFO_FAST_REV: u8 = 0x18;
399pub const CEC_OP_DECK_INFO_NO_MEDIA: u8 = 0x19;
400pub const CEC_OP_DECK_INFO_STOP: u8 = 0x1a;
401pub const CEC_OP_DECK_INFO_SKIP_FWD: u8 = 0x1b;
402pub const CEC_OP_DECK_INFO_SKIP_REV: u8 = 0x1c;
403pub const CEC_OP_DECK_INFO_INDEX_SEARCH_FWD: u8 = 0x1d;
404pub const CEC_OP_DECK_INFO_INDEX_SEARCH_REV: u8 = 0x1e;
405pub const CEC_OP_DECK_INFO_OTHER: u8 = 0x1f;
406
407pub const CEC_MSG_GIVE_DECK_STATUS: u8 = 0x1a;
408/* Status Request Operand (status_req) */
409pub const CEC_OP_STATUS_REQ_ON: u8 = 1;
410pub const CEC_OP_STATUS_REQ_OFF: u8 = 2;
411pub const CEC_OP_STATUS_REQ_ONCE: u8 = 3;
412
413pub const CEC_MSG_PLAY: u8 = 0x41;
414/* Play Mode Operand (play_mode) */
415pub const CEC_OP_PLAY_MODE_PLAY_FWD: u8 = 0x24;
416pub const CEC_OP_PLAY_MODE_PLAY_REV: u8 = 0x20;
417pub const CEC_OP_PLAY_MODE_PLAY_STILL: u8 = 0x25;
418pub const CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MIN: u8 = 0x05;
419pub const CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MED: u8 = 0x06;
420pub const CEC_OP_PLAY_MODE_PLAY_FAST_FWD_MAX: u8 = 0x07;
421pub const CEC_OP_PLAY_MODE_PLAY_FAST_REV_MIN: u8 = 0x09;
422pub const CEC_OP_PLAY_MODE_PLAY_FAST_REV_MED: u8 = 0x0a;
423pub const CEC_OP_PLAY_MODE_PLAY_FAST_REV_MAX: u8 = 0x0b;
424pub const CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MIN: u8 = 0x15;
425pub const CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MED: u8 = 0x16;
426pub const CEC_OP_PLAY_MODE_PLAY_SLOW_FWD_MAX: u8 = 0x17;
427pub const CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MIN: u8 = 0x19;
428pub const CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MED: u8 = 0x1a;
429pub const CEC_OP_PLAY_MODE_PLAY_SLOW_REV_MAX: u8 = 0x1b;
430
431/* Tuner Control Feature */
432pub const CEC_MSG_GIVE_TUNER_DEVICE_STATUS: u8 = 0x08;
433pub const CEC_MSG_SELECT_ANALOGUE_SERVICE: u8 = 0x92;
434pub const CEC_MSG_SELECT_DIGITAL_SERVICE: u8 = 0x93;
435pub const CEC_MSG_TUNER_DEVICE_STATUS: u8 = 0x07;
436/* Recording Flag Operand (rec_flag) */
437pub const CEC_OP_REC_FLAG_NOT_USED: u8 = 0;
438pub const CEC_OP_REC_FLAG_USED: u8 = 1;
439/* Tuner Display Info Operand (tuner_display_info) */
440pub const CEC_OP_TUNER_DISPLAY_INFO_DIGITAL: u8 = 0;
441pub const CEC_OP_TUNER_DISPLAY_INFO_NONE: u8 = 1;
442pub const CEC_OP_TUNER_DISPLAY_INFO_ANALOGUE: u8 = 2;
443
444pub const CEC_MSG_TUNER_STEP_DECREMENT: u8 = 0x06;
445pub const CEC_MSG_TUNER_STEP_INCREMENT: u8 = 0x05;
446
447/* Vendor Specific Commands Feature */
448
449/*
450 * Has also:
451 * CEC_MSG_CEC_VERSION
452 * CEC_MSG_GET_CEC_VERSION
453 */
454pub const CEC_MSG_DEVICE_VENDOR_ID: u8 = 0x87;
455pub const CEC_MSG_GIVE_DEVICE_VENDOR_ID: u8 = 0x8c;
456pub const CEC_MSG_VENDOR_COMMAND: u8 = 0x89;
457pub const CEC_MSG_VENDOR_COMMAND_WITH_ID: u8 = 0xa0;
458pub const CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN: u8 = 0x8a;
459pub const CEC_MSG_VENDOR_REMOTE_BUTTON_UP: u8 = 0x8b;
460
461/* OSD Display Feature */
462pub const CEC_MSG_SET_OSD_STRING: u8 = 0x64;
463/* Display Control Operand (disp_ctl) */
464pub const CEC_OP_DISP_CTL_DEFAULT: u8 = 0x00;
465pub const CEC_OP_DISP_CTL_UNTIL_CLEARED: u8 = 0x40;
466pub const CEC_OP_DISP_CTL_CLEAR: u8 = 0x80;
467
468/* Device OSD Transfer Feature */
469pub const CEC_MSG_GIVE_OSD_NAME: u8 = 0x46;
470pub const CEC_MSG_SET_OSD_NAME: u8 = 0x47;
471
472/* Device Menu Control Feature */
473pub const CEC_MSG_MENU_REQUEST: u8 = 0x8d;
474/* Menu Request Type Operand (menu_req) */
475pub const CEC_OP_MENU_REQUEST_ACTIVATE: u8 = 0x00;
476pub const CEC_OP_MENU_REQUEST_DEACTIVATE: u8 = 0x01;
477pub const CEC_OP_MENU_REQUEST_QUERY: u8 = 0x02;
478
479pub const CEC_MSG_MENU_STATUS: u8 = 0x8e;
480/* Menu State Operand (menu_state) */
481pub const CEC_OP_MENU_STATE_ACTIVATED: u8 = 0x00;
482pub const CEC_OP_MENU_STATE_DEACTIVATED: u8 = 0x01;
483
484pub const CEC_MSG_USER_CONTROL_PRESSED: u8 = 0x44;
485/* UI Command Operand (ui_cmd) */
486pub const CEC_OP_UI_CMD_SELECT: u8 = 0x00;
487pub const CEC_OP_UI_CMD_UP: u8 = 0x01;
488pub const CEC_OP_UI_CMD_DOWN: u8 = 0x02;
489pub const CEC_OP_UI_CMD_LEFT: u8 = 0x03;
490pub const CEC_OP_UI_CMD_RIGHT: u8 = 0x04;
491pub const CEC_OP_UI_CMD_RIGHT_UP: u8 = 0x05;
492pub const CEC_OP_UI_CMD_RIGHT_DOWN: u8 = 0x06;
493pub const CEC_OP_UI_CMD_LEFT_UP: u8 = 0x07;
494pub const CEC_OP_UI_CMD_LEFT_DOWN: u8 = 0x08;
495pub const CEC_OP_UI_CMD_DEVICE_ROOT_MENU: u8 = 0x09;
496pub const CEC_OP_UI_CMD_DEVICE_SETUP_MENU: u8 = 0x0a;
497pub const CEC_OP_UI_CMD_CONTENTS_MENU: u8 = 0x0b;
498pub const CEC_OP_UI_CMD_FAVORITE_MENU: u8 = 0x0c;
499pub const CEC_OP_UI_CMD_BACK: u8 = 0x0d;
500pub const CEC_OP_UI_CMD_MEDIA_TOP_MENU: u8 = 0x10;
501pub const CEC_OP_UI_CMD_MEDIA_CONTEXT_SENSITIVE_MENU: u8 = 0x11;
502pub const CEC_OP_UI_CMD_NUMBER_ENTRY_MODE: u8 = 0x1d;
503pub const CEC_OP_UI_CMD_NUMBER_11: u8 = 0x1e;
504pub const CEC_OP_UI_CMD_NUMBER_12: u8 = 0x1f;
505pub const CEC_OP_UI_CMD_NUMBER_0_OR_NUMBER_10: u8 = 0x20;
506pub const CEC_OP_UI_CMD_NUMBER_1: u8 = 0x21;
507pub const CEC_OP_UI_CMD_NUMBER_2: u8 = 0x22;
508pub const CEC_OP_UI_CMD_NUMBER_3: u8 = 0x23;
509pub const CEC_OP_UI_CMD_NUMBER_4: u8 = 0x24;
510pub const CEC_OP_UI_CMD_NUMBER_5: u8 = 0x25;
511pub const CEC_OP_UI_CMD_NUMBER_6: u8 = 0x26;
512pub const CEC_OP_UI_CMD_NUMBER_7: u8 = 0x27;
513pub const CEC_OP_UI_CMD_NUMBER_8: u8 = 0x28;
514pub const CEC_OP_UI_CMD_NUMBER_9: u8 = 0x29;
515pub const CEC_OP_UI_CMD_DOT: u8 = 0x2a;
516pub const CEC_OP_UI_CMD_ENTER: u8 = 0x2b;
517pub const CEC_OP_UI_CMD_CLEAR: u8 = 0x2c;
518pub const CEC_OP_UI_CMD_NEXT_FAVORITE: u8 = 0x2f;
519pub const CEC_OP_UI_CMD_CHANNEL_UP: u8 = 0x30;
520pub const CEC_OP_UI_CMD_CHANNEL_DOWN: u8 = 0x31;
521pub const CEC_OP_UI_CMD_PREVIOUS_CHANNEL: u8 = 0x32;
522pub const CEC_OP_UI_CMD_SOUND_SELECT: u8 = 0x33;
523pub const CEC_OP_UI_CMD_INPUT_SELECT: u8 = 0x34;
524pub const CEC_OP_UI_CMD_DISPLAY_INFORMATION: u8 = 0x35;
525pub const CEC_OP_UI_CMD_HELP: u8 = 0x36;
526pub const CEC_OP_UI_CMD_PAGE_UP: u8 = 0x37;
527pub const CEC_OP_UI_CMD_PAGE_DOWN: u8 = 0x38;
528pub const CEC_OP_UI_CMD_POWER: u8 = 0x40;
529pub const CEC_OP_UI_CMD_VOLUME_UP: u8 = 0x41;
530pub const CEC_OP_UI_CMD_VOLUME_DOWN: u8 = 0x42;
531pub const CEC_OP_UI_CMD_MUTE: u8 = 0x43;
532pub const CEC_OP_UI_CMD_PLAY: u8 = 0x44;
533pub const CEC_OP_UI_CMD_STOP: u8 = 0x45;
534pub const CEC_OP_UI_CMD_PAUSE: u8 = 0x46;
535pub const CEC_OP_UI_CMD_RECORD: u8 = 0x47;
536pub const CEC_OP_UI_CMD_REWIND: u8 = 0x48;
537pub const CEC_OP_UI_CMD_FAST_FORWARD: u8 = 0x49;
538pub const CEC_OP_UI_CMD_EJECT: u8 = 0x4a;
539pub const CEC_OP_UI_CMD_SKIP_FORWARD: u8 = 0x4b;
540pub const CEC_OP_UI_CMD_SKIP_BACKWARD: u8 = 0x4c;
541pub const CEC_OP_UI_CMD_STOP_RECORD: u8 = 0x4d;
542pub const CEC_OP_UI_CMD_PAUSE_RECORD: u8 = 0x4e;
543pub const CEC_OP_UI_CMD_ANGLE: u8 = 0x50;
544pub const CEC_OP_UI_CMD_SUB_PICTURE: u8 = 0x51;
545pub const CEC_OP_UI_CMD_VIDEO_ON_DEMAND: u8 = 0x52;
546pub const CEC_OP_UI_CMD_ELECTRONIC_PROGRAM_GUIDE: u8 = 0x53;
547pub const CEC_OP_UI_CMD_TIMER_PROGRAMMING: u8 = 0x54;
548pub const CEC_OP_UI_CMD_INITIAL_CONFIGURATION: u8 = 0x55;
549pub const CEC_OP_UI_CMD_SELECT_BROADCAST_TYPE: u8 = 0x56;
550pub const CEC_OP_UI_CMD_SELECT_SOUND_PRESENTATION: u8 = 0x57;
551pub const CEC_OP_UI_CMD_AUDIO_DESCRIPTION: u8 = 0x58;
552pub const CEC_OP_UI_CMD_INTERNET: u8 = 0x59;
553pub const CEC_OP_UI_CMD_3D_MODE: u8 = 0x5a;
554pub const CEC_OP_UI_CMD_PLAY_FUNCTION: u8 = 0x60;
555pub const CEC_OP_UI_CMD_PAUSE_PLAY_FUNCTION: u8 = 0x61;
556pub const CEC_OP_UI_CMD_RECORD_FUNCTION: u8 = 0x62;
557pub const CEC_OP_UI_CMD_PAUSE_RECORD_FUNCTION: u8 = 0x63;
558pub const CEC_OP_UI_CMD_STOP_FUNCTION: u8 = 0x64;
559pub const CEC_OP_UI_CMD_MUTE_FUNCTION: u8 = 0x65;
560pub const CEC_OP_UI_CMD_RESTORE_VOLUME_FUNCTION: u8 = 0x66;
561pub const CEC_OP_UI_CMD_TUNE_FUNCTION: u8 = 0x67;
562pub const CEC_OP_UI_CMD_SELECT_MEDIA_FUNCTION: u8 = 0x68;
563pub const CEC_OP_UI_CMD_SELECT_AV_INPUT_FUNCTION: u8 = 0x69;
564pub const CEC_OP_UI_CMD_SELECT_AUDIO_INPUT_FUNCTION: u8 = 0x6a;
565pub const CEC_OP_UI_CMD_POWER_TOGGLE_FUNCTION: u8 = 0x6b;
566pub const CEC_OP_UI_CMD_POWER_OFF_FUNCTION: u8 = 0x6c;
567pub const CEC_OP_UI_CMD_POWER_ON_FUNCTION: u8 = 0x6d;
568pub const CEC_OP_UI_CMD_F1_BLUE: u8 = 0x71;
569pub const CEC_OP_UI_CMD_F2_RED: u8 = 0x72;
570pub const CEC_OP_UI_CMD_F3_GREEN: u8 = 0x73;
571pub const CEC_OP_UI_CMD_F4_YELLOW: u8 = 0x74;
572pub const CEC_OP_UI_CMD_F5: u8 = 0x75;
573pub const CEC_OP_UI_CMD_DATA: u8 = 0x76;
574/* UI Broadcast Type Operand (ui_bcast_type) */
575pub const CEC_OP_UI_BCAST_TYPE_TOGGLE_ALL: u8 = 0x00;
576pub const CEC_OP_UI_BCAST_TYPE_TOGGLE_DIG_ANA: u8 = 0x01;
577pub const CEC_OP_UI_BCAST_TYPE_ANALOGUE: u8 = 0x10;
578pub const CEC_OP_UI_BCAST_TYPE_ANALOGUE_T: u8 = 0x20;
579pub const CEC_OP_UI_BCAST_TYPE_ANALOGUE_CABLE: u8 = 0x30;
580pub const CEC_OP_UI_BCAST_TYPE_ANALOGUE_SAT: u8 = 0x40;
581pub const CEC_OP_UI_BCAST_TYPE_DIGITAL: u8 = 0x50;
582pub const CEC_OP_UI_BCAST_TYPE_DIGITAL_T: u8 = 0x60;
583pub const CEC_OP_UI_BCAST_TYPE_DIGITAL_CABLE: u8 = 0x70;
584pub const CEC_OP_UI_BCAST_TYPE_DIGITAL_SAT: u8 = 0x80;
585pub const CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT: u8 = 0x90;
586pub const CEC_OP_UI_BCAST_TYPE_DIGITAL_COM_SAT2: u8 = 0x91;
587pub const CEC_OP_UI_BCAST_TYPE_IP: u8 = 0xa0;
588/* UI Sound Presentation Control Operand (ui_snd_pres_ctl) */
589pub const CEC_OP_UI_SND_PRES_CTL_DUAL_MONO: u8 = 0x10;
590pub const CEC_OP_UI_SND_PRES_CTL_KARAOKE: u8 = 0x20;
591pub const CEC_OP_UI_SND_PRES_CTL_DOWNMIX: u8 = 0x80;
592pub const CEC_OP_UI_SND_PRES_CTL_REVERB: u8 = 0x90;
593pub const CEC_OP_UI_SND_PRES_CTL_EQUALIZER: u8 = 0xa0;
594pub const CEC_OP_UI_SND_PRES_CTL_BASS_UP: u8 = 0xb1;
595pub const CEC_OP_UI_SND_PRES_CTL_BASS_NEUTRAL: u8 = 0xb2;
596pub const CEC_OP_UI_SND_PRES_CTL_BASS_DOWN: u8 = 0xb3;
597pub const CEC_OP_UI_SND_PRES_CTL_TREBLE_UP: u8 = 0xc1;
598pub const CEC_OP_UI_SND_PRES_CTL_TREBLE_NEUTRAL: u8 = 0xc2;
599pub const CEC_OP_UI_SND_PRES_CTL_TREBLE_DOWN: u8 = 0xc3;
600
601pub const CEC_MSG_USER_CONTROL_RELEASED: u8 = 0x45;
602
603/* Remote Control Passthrough Feature */
604
605/*
606 * Has also:
607 * CEC_MSG_USER_CONTROL_PRESSED
608 * CEC_MSG_USER_CONTROL_RELEASED
609 */
610
611/* Power Status Feature */
612pub const CEC_MSG_GIVE_DEVICE_POWER_STATUS: u8 = 0x8f;
613pub const CEC_MSG_REPORT_POWER_STATUS: u8 = 0x90;
614/* Power Status Operand (pwr_state) */
615pub const CEC_OP_POWER_STATUS_ON: u8 = 0;
616pub const CEC_OP_POWER_STATUS_STANDBY: u8 = 1;
617pub const CEC_OP_POWER_STATUS_TO_ON: u8 = 2;
618pub const CEC_OP_POWER_STATUS_TO_STANDBY: u8 = 3;
619
620/* General Protocol Messages */
621pub const CEC_MSG_FEATURE_ABORT: u8 = 0x00;
622/* Abort Reason Operand (reason) */
623pub const CEC_OP_ABORT_UNRECOGNIZED_OP: u8 = 0;
624pub const CEC_OP_ABORT_INCORRECT_MODE: u8 = 1;
625pub const CEC_OP_ABORT_NO_SOURCE: u8 = 2;
626pub const CEC_OP_ABORT_INVALID_OP: u8 = 3;
627pub const CEC_OP_ABORT_REFUSED: u8 = 4;
628pub const CEC_OP_ABORT_UNDETERMINED: u8 = 5;
629
630pub const CEC_MSG_ABORT: u8 = 0xff;
631
632/* System Audio Control Feature */
633
634/*
635 * Has also:
636 * CEC_MSG_USER_CONTROL_PRESSED
637 * CEC_MSG_USER_CONTROL_RELEASED
638 */
639pub const CEC_MSG_GIVE_AUDIO_STATUS: u8 = 0x71;
640pub const CEC_MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS: u8 = 0x7d;
641pub const CEC_MSG_REPORT_AUDIO_STATUS: u8 = 0x7a;
642/* Audio Mute Status Operand (aud_mute_status) */
643pub const CEC_OP_AUD_MUTE_STATUS_OFF: u8 = 0;
644pub const CEC_OP_AUD_MUTE_STATUS_ON: u8 = 1;
645
646pub const CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR: u8 = 0xa3;
647pub const CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR: u8 = 0xa4;
648pub const CEC_MSG_SET_SYSTEM_AUDIO_MODE: u8 = 0x72;
649/* System Audio Status Operand (sys_aud_status) */
650pub const CEC_OP_SYS_AUD_STATUS_OFF: u8 = 0;
651pub const CEC_OP_SYS_AUD_STATUS_ON: u8 = 1;
652
653pub const CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST: u8 = 0x70;
654pub const CEC_MSG_SYSTEM_AUDIO_MODE_STATUS: u8 = 0x7e;
655/* Audio Format ID Operand (audio_format_id) */
656pub const CEC_OP_AUD_FMT_ID_CEA861: u8 = 0;
657pub const CEC_OP_AUD_FMT_ID_CEA861_CXT: u8 = 1;
658
659pub const CEC_MSG_SET_AUDIO_VOLUME_LEVEL: u8 = 0x73;
660
661/* Audio Rate Control Feature */
662pub const CEC_MSG_SET_AUDIO_RATE: u8 = 0x9a;
663/* Audio Rate Operand (audio_rate) */
664pub const CEC_OP_AUD_RATE_OFF: u8 = 0;
665pub const CEC_OP_AUD_RATE_WIDE_STD: u8 = 1;
666pub const CEC_OP_AUD_RATE_WIDE_FAST: u8 = 2;
667pub const CEC_OP_AUD_RATE_WIDE_SLOW: u8 = 3;
668pub const CEC_OP_AUD_RATE_NARROW_STD: u8 = 4;
669pub const CEC_OP_AUD_RATE_NARROW_FAST: u8 = 5;
670pub const CEC_OP_AUD_RATE_NARROW_SLOW: u8 = 6;
671
672/* Audio Return Channel Control Feature */
673pub const CEC_MSG_INITIATE_ARC: u8 = 0xc0;
674pub const CEC_MSG_REPORT_ARC_INITIATED: u8 = 0xc1;
675pub const CEC_MSG_REPORT_ARC_TERMINATED: u8 = 0xc2;
676pub const CEC_MSG_REQUEST_ARC_INITIATION: u8 = 0xc3;
677pub const CEC_MSG_REQUEST_ARC_TERMINATION: u8 = 0xc4;
678pub const CEC_MSG_TERMINATE_ARC: u8 = 0xc5;
679
680/* Dynamic Audio Lipsync Feature */
681/* Only for CEC 2.0 and up */
682pub const CEC_MSG_REQUEST_CURRENT_LATENCY: u8 = 0xa7;
683pub const CEC_MSG_REPORT_CURRENT_LATENCY: u8 = 0xa8;
684/* Low Latency Mode Operand (low_latency_mode) */
685pub const CEC_OP_LOW_LATENCY_MODE_OFF: u8 = 0;
686pub const CEC_OP_LOW_LATENCY_MODE_ON: u8 = 1;
687/* Audio Output Compensated Operand (audio_out_compensated) */
688pub const CEC_OP_AUD_OUT_COMPENSATED_NA: u8 = 0;
689pub const CEC_OP_AUD_OUT_COMPENSATED_DELAY: u8 = 1;
690pub const CEC_OP_AUD_OUT_COMPENSATED_NO_DELAY: u8 = 2;
691pub const CEC_OP_AUD_OUT_COMPENSATED_PARTIAL_DELAY: u8 = 3;
692
693/* Capability Discovery and Control Feature */
694pub const CEC_MSG_CDC_MESSAGE: u8 = 0xf8;
695/* Ethernet-over-HDMI: nobody ever does this... */
696pub const CEC_MSG_CDC_HEC_INQUIRE_STATE: u8 = 0x00;
697pub const CEC_MSG_CDC_HEC_REPORT_STATE: u8 = 0x01;
698/* HEC Functionality State Operand (hec_func_state) */
699pub const CEC_OP_HEC_FUNC_STATE_NOT_SUPPORTED: u8 = 0;
700pub const CEC_OP_HEC_FUNC_STATE_INACTIVE: u8 = 1;
701pub const CEC_OP_HEC_FUNC_STATE_ACTIVE: u8 = 2;
702pub const CEC_OP_HEC_FUNC_STATE_ACTIVATION_FIELD: u8 = 3;
703/* Host Functionality State Operand (host_func_state) */
704pub const CEC_OP_HOST_FUNC_STATE_NOT_SUPPORTED: u8 = 0;
705pub const CEC_OP_HOST_FUNC_STATE_INACTIVE: u8 = 1;
706pub const CEC_OP_HOST_FUNC_STATE_ACTIVE: u8 = 2;
707/* ENC Functionality State Operand (enc_func_state) */
708pub const CEC_OP_ENC_FUNC_STATE_EXT_CON_NOT_SUPPORTED: u8 = 0;
709pub const CEC_OP_ENC_FUNC_STATE_EXT_CON_INACTIVE: u8 = 1;
710pub const CEC_OP_ENC_FUNC_STATE_EXT_CON_ACTIVE: u8 = 2;
711/* CDC Error Code Operand (cdc_errcode) */
712pub const CEC_OP_CDC_ERROR_CODE_NONE: u8 = 0;
713pub const CEC_OP_CDC_ERROR_CODE_CAP_UNSUPPORTED: u8 = 1;
714pub const CEC_OP_CDC_ERROR_CODE_WRONG_STATE: u8 = 2;
715pub const CEC_OP_CDC_ERROR_CODE_OTHER: u8 = 3;
716/* HEC Support Operand (hec_support) */
717pub const CEC_OP_HEC_SUPPORT_NO: u8 = 0;
718pub const CEC_OP_HEC_SUPPORT_YES: u8 = 1;
719/* HEC Activation Operand (hec_activation) */
720pub const CEC_OP_HEC_ACTIVATION_ON: u8 = 0;
721pub const CEC_OP_HEC_ACTIVATION_OFF: u8 = 1;
722
723pub const CEC_MSG_CDC_HEC_SET_STATE_ADJACENT: u8 = 0x02;
724pub const CEC_MSG_CDC_HEC_SET_STATE: u8 = 0x03;
725/* HEC Set State Operand (hec_set_state) */
726pub const CEC_OP_HEC_SET_STATE_DEACTIVATE: u8 = 0;
727pub const CEC_OP_HEC_SET_STATE_ACTIVATE: u8 = 1;
728
729pub const CEC_MSG_CDC_HEC_REQUEST_DEACTIVATION: u8 = 0x04;
730pub const CEC_MSG_CDC_HEC_NOTIFY_ALIVE: u8 = 0x05;
731pub const CEC_MSG_CDC_HEC_DISCOVER: u8 = 0x06;
732/* Hotplug Detect messages */
733pub const CEC_MSG_CDC_HPD_SET_STATE: u8 = 0x10;
734/* HPD State Operand (hpd_state) */
735pub const CEC_OP_HPD_STATE_CP_EDID_DISABLE: u8 = 0;
736pub const CEC_OP_HPD_STATE_CP_EDID_ENABLE: u8 = 1;
737pub const CEC_OP_HPD_STATE_CP_EDID_DISABLE_ENABLE: u8 = 2;
738pub const CEC_OP_HPD_STATE_EDID_DISABLE: u8 = 3;
739pub const CEC_OP_HPD_STATE_EDID_ENABLE: u8 = 4;
740pub const CEC_OP_HPD_STATE_EDID_DISABLE_ENABLE: u8 = 5;
741pub const CEC_MSG_CDC_HPD_REPORT_STATE: u8 = 0x11;
742/* HPD Error Code Operand (hpd_error) */
743pub const CEC_OP_HPD_ERROR_NONE: u8 = 0;
744pub const CEC_OP_HPD_ERROR_INITIATOR_NOT_CAPABLE: u8 = 1;
745pub const CEC_OP_HPD_ERROR_INITIATOR_WRONG_STATE: u8 = 2;
746pub const CEC_OP_HPD_ERROR_OTHER: u8 = 3;
747pub const CEC_OP_HPD_ERROR_NONE_NO_VIDEO: u8 = 4;
748
749/* End of Messages */