optek_cec.h
17.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
#ifndef _OPTEK_CEC_H_
#define _OPTEK_CEC_H_
//----------------------------------------------------------
//==========================================================
//HdmiCECLogicalAddress
#define CEC_LOGICAL_ADDRESS_TV 0 /*!< TV */
#define CEC_LOGICAL_ADDRESS_RECORDING_DEVICE_1 1 /*!< Recording Device 1 */
#define CEC_LOGICAL_ADDRESS_RECORDING_DEVICE_2 2 /*!< Recording Device 1 */
#define CEC_LOGICAL_ADDRESS_TUNER_1 3 /*!< Tuner 1 */
#define CEC_LOGICAL_ADDRESS_PLAYBACK_DEVICE_1 4 /*!< Playback Device 1 */
#define CEC_LOGICAL_ADDRESS_AUDIO_SYSTEM 5 /*!< Audio System */
#define CEC_LOGICAL_ADDRESS_TUNER_2 6 /*!< Tuner 2 */
#define CEC_LOGICAL_ADDRESS_TUNER_3 7 /*!< Tuner 3 */
#define CEC_LOGICAL_ADDRESS_PLAYBACK_DEVICE_2 8 /*!< Playback Device 2 */
#define CEC_LOGICAL_ADDRESS_RECORDING_DEVICE_3 9 /*!< Recording Device 3 */
#define CEC_LOGICAL_ADDRESS_TUNER_4 10 /*!< Tuner 4 */
#define CEC_LOGICAL_ADDRESS_PLAYBACK_DEVICE_3 11 /*!< Playback Device 3 */
#define CEC_LOGICAL_ADDRESS_RESERVED1 12 /*!< Reserved */
#define CEC_LOGICAL_ADDRESS_RESERVED2 13 /*!< Reserved */
#define CEC_LOGICAL_ADDRESS_FREE_USE 14 /*!< Free Use */
#define CEC_LOGICAL_ADDRESS_BROADCAST 15 /*!< Unregistred/Broadcast */
#define HDMI_CEC_UNREGISTRED_DEVICE 0xf0
#define HDMI_CEC_AUDIO_DEVICE 0x50
//HdmiCECPowerStatus
#define CEC_OPCODE_POLLING_MESSAGE 0x02 //0x00
#define CEC_POWER_STATUS_ON 0x00 /*!< On */
#define CEC_POWER_STATUS_STANDBY 0x01 /*!< Standby */
#define CEC_POWER_STATUS_TRANSITION_STANDBY_TO_ON 0x02 /*!< In Transition Standby to On */
#define CEC_POWER_STATUS_TRANSITION_ON_TO_STANDBY 0x03 /*!< In Transition On to StandBy */
//HdmiCECFeatureOpcode
#define CEC_OPCODE_FEATURE_ABORT 0x00 /*!< Abort */
#define CEC_OPCODE_IMAGE_VIEW_ON 0x04 /*!< Image view on */
#define CEC_OPCODE_TUNER_STEP_INCREMENT 0x05 /*!< Tuner step increment */
#define CEC_OPCODE_TUNER_STEP_DECREMENT 0x06 /*!< Tuner step decrement */
#define CEC_OPCODE_TUNER_DEVICE_STATUS 0x07 /*!< Tuner device status */
#define CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS 0x08 /*!< Give tuner device status */
#define CEC_OPCODE_RECORD_ON 0x09 /*!< Record on */
#define CEC_OPCODE_RECORD_STATUS 0x0A /*!< Record status */
#define CEC_OPCODE_RECORD_OFF 0x0B /*!< Record off */
#define CEC_OPCODE_TEXT_VIEW_ON 0x0D /*!< Text view on */
#define CEC_OPCODE_RECORD_TV_SCREEN 0x0F /*!< Record tv screen */
#define CEC_OPCODE_GIVE_DECK_STATUS 0x1A /*!< Give deck status */
#define CEC_OPCODE_DECK_STATUS 0x1B /*!< Deck status */
#define CEC_OPCODE_SET_MENU_LANGUAGE 0x32 /*!< Set menu language */
#define CEC_OPCODE_CLEAR_ANALOGUE_TIMER 0x33 /*!< Clear analogue timer */
#define CEC_OPCODE_SET_ANALOGUE_TIMER 0x34 /*!< Set analogue timer */
#define CEC_OPCODE_TIMER_STATUS 0x35 /*!< Timer status */
#define CEC_OPCODE_STANDBY 0x36 /*!< Standby */
#define CEC_OPCODE_PLAY 0x41 /*!< Play */
#define CEC_OPCODE_DECK_CONTROL 0x42 /*!< Deck control */
#define CEC_OPCODE_TIMER_CLEARED_STATUS 0x43 /*!< Timer cleared status */
#define CEC_OPCODE_USER_CONTROL_PRESSED 0x44 /*!< User control pressed */
#define CEC_OPCODE_USER_CONTROL_RELEASED 0x45 /*!< User control released */
#define CEC_OPCODE_GIVE_OSD_NAME 0x46 /*!< Give osd name */
#define CEC_OPCODE_SET_OSD_NAME 0x47 /*!< Set osd name */
#define CEC_OPCODE_SET_OSD_STRING 0x64 /*!< Set osd string */
#define CEC_OPCODE_SET_TIMER_PROGRAM_TITLE 0x67 /*!< Set timer program title */
#define CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST 0x70 /*!< System audio mode request */
#define CEC_OPCODE_GIVE_AUDIO_STATUS 0x71 /*!< Give audio status */
#define CEC_OPCODE_SET_SYSTEM_AUDIO_MODE 0x72 /*!< Set system audio mode */
#define CEC_OPCODE_REPORT_AUDIO_STATUS 0x7A /*!< Report audio status */
#define CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS 0x7D /*!< Give system audio mode status*/
#define CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS 0x7E /*!< System audio mode status */
#define CEC_OPCODE_ROUTING_CHANGE 0x80 /*!< Routing change */
#define CEC_OPCODE_ROUTING_INFORMATION 0x81 /*!< Routing information */
#define CEC_OPCODE_ACTIVE_SOURCE 0x82 /*!< Active source */
#define CEC_OPCODE_GIVE_PHYSICAL_ADDRESS 0x83 /*!< Give physical address */
#define CEC_OPCODE_REPORT_PHYSICAL_ADDRESS 0x84 /*!< Report physical address */
#define CEC_OPCODE_REQUEST_ACTIVE_SOURCE 0x85 /*!< Request active source */
#define CEC_OPCODE_SET_STREAM_PATH 0x86 /*!< Set stream path */
#define CEC_OPCODE_DEVICE_VENDOR_ID 0x87 /*!< Device vendor ID */
#define CEC_OPCODE_VENDOR_COMMAND 0x89 /*!< Vendor command */
#define CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN 0x8A /*!< Vendor remote button down */
#define CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP 0x8B /*!< Vendor remote button up */
#define CEC_OPCODE_GIVE_DEVICE_VENDOR_ID 0x8C /*!< Give device vendor ID */
#define CEC_OPCODE_MENU_REQUEST 0x8D /*!< Menu request */
#define CEC_OPCODE_MENU_STATUS 0x8E /*!< Menu status */
#define CEC_OPCODE_GIVE_DEVICE_POWER_STATUS 0x8F /*!< Give device power status */
#define CEC_OPCODE_REPORT_POWER_STATUS 0x90 /*!< Report power status */
#define CEC_OPCODE_GET_MENU_LANGUAGE 0x91 /*!< Get menu language */
#define CEC_OPCODE_SET_ANALOGUE_SERVICE 0x92 /*!< Set analogue service */
#define CEC_OPCODE_SET_DIGITAL_SERVICE 0x93 /*!< Set digital service */
#define CEC_OPCODE_SET_DIGITAL_TIMER 0x97 /*!< Set digital timer */
#define CEC_OPCODE_CLEAR_DIGITAL_TIMER 0x99 /*!< Clear digital timer */
#define CEC_OPCODE_SET_AUDIO_RATE 0x9A /*!< Set audio rate */
#define CEC_OPCODE_INACTIVE_SOURCE 0x9D /*!< Inactive source */
#define CEC_OPCODE_CEC_VERSION 0x9E /*!< CEC Version */
#define CEC_OPCODE_GET_CEC_VERSION 0x9F /*!< Get CEC Version */
#define CEC_OPCODE_VENDOR_COMMAND_WITH_ID 0xA0 /*!< Vendor command with ID */
#define CEC_OPCODE_CLEAR_EXTERNAL_TIMER 0xA1 /*!< Clear external timer */
#define CEC_OPCODE_SET_EXTERNAL_TIMER 0xA2 /*!< Set external timer */
#define CEC_OPCODE_REQUEST_SHORT_AUDIO_DESC 0xA3 /*! */
#define CEC_OPCODE_REPORT_SHORT_AUDIO_DESC 0xA4 /*! */
#define CEC_OPCODE_INITIATE_ARC 0xC0 /*!< Initiate ARC */
#define CEC_OPCODE_REPORT_ARC_INITIATED 0xC1 /*!< Report ARC Initiated */
#define CEC_OPCODE_REPORT_ARC_TERMINATED 0xC2 /*!< Report ARC Terminated */
#define CEC_OPCODE_REQUEST_ARC_INITIATION 0xC3 /*!< Request ARC Initiation */
#define CEC_OPCODE_REQUEST_ARC_TERMINATION 0xC4 /*!< Request ARC Termination */
#define CEC_OPCODE_TERMINATE_ARC 0xC5 /*!< Terminate ARC */
#define CEC_OPCODE_CDC_MESSAGE 0xF8 /*!< CDC Message */
#define CEC_OPCODE_ABORT_MESSAGE 0xFF /*!< This message is reserved for testing*/
//added by Optek
#define CEC_OPCODE_POLLING 0xFE /*!Just one byte to checking logic ID */
//HdmiCECVersion
#define CEC_VERSION_1_1 0x00 /*!< CEC Version 1.1 */
#define CEC_VERSION_1_2 0x01 /*!< CEC Version 1.2 */
#define CEC_VERSION_1_2a 0x02 /*!< CEC Version 1.2a */
#define CEC_VERSION_1_3 0x03 /*!< CEC Version 1.3 */
#define CEC_VERSION_1_3a 0x04 /*!< CEC Version 1.3a */
#define CEC_VERSION_1_4 0x05 /*!< CEC Version 1.4 */
//Hdmi CEC Menu Request Type
#define CEC_MENU_ACTIVATE 0
#define CEC_MENU_DEACTIVATE 1
#define CEC_MENU_QUERY 2
//Hdmi CEC Abort Reason
#define CEC_ABORT_UNRECONGNIZED_OPT 0
#define CEC_ABORT_N0T_IN_CORRECT_MOD 1
#define CEC_ABORT_CANNOT_PROVIDE_SOURCE 2
#define CEC_ABORT_INVALID_OPRAND 3
#define CEC_ABORT_REFUSED 4
#define CEC_UNABLE_DETERMIN 5
//Hdmi CEC PQL2 Application command
#define CEC_PQL2_ENABLE 0x00
#define CEC_PQL2_OK 0x01
#define CEC_PQL2_TS_DISABLE_PROCESSING 0x04
#define CEC_PQL2_ST_PROCESS_DISABLED 0x07
#define CEC_PQL2_VIDEO_INFO_REQUEST 0x06
#define CEC_PQL2_VIDEO_ATTRIBUTES 0x0d
//HdmiCECUserRemoteControlCommand
#define CEC_REMOTE_BUTTON_SELECT 0
#define CEC_REMOTE_BUTTON_UP 1
#define CEC_REMOTE_BUTTON_DOWN 2
#define CEC_REMOTE_BUTTON_LEFT 3
#define CEC_REMOTE_BUTTON_RIGHT 4
#define CEC_REMOTE_BUTTON_RIGHT_UP 5
#define CEC_REMOTE_BUTTON_RIGHT_DOWN 6
#define CEC_REMOTE_BUTTON_LEFT_UP 7
#define CEC_REMOTE_BUTTON_LEFT_DOWN 8
#define CEC_REMOTE_BUTTON_ROOT_MENU 9
#define CEC_REMOTE_BUTTON_SETUP_MENU 10
#define CEC_REMOTE_BUTTON_CONTENTS_MENU 11
#define CEC_REMOTE_BUTTON_FAVORITE_MENU 12
#define CEC_REMOTE_BUTTON_EXIT 13
#define CEC_REMOTE_BUTTON_NUMBER_0 32
#define CEC_REMOTE_BUTTON_NUMBER_1 33
#define CEC_REMOTE_BUTTON_NUMBER_2 34
#define CEC_REMOTE_BUTTON_NUMBER_3 35
#define CEC_REMOTE_BUTTON_NUMBER_4 36
#define CEC_REMOTE_BUTTON_NUMBER_5 37
#define CEC_REMOTE_BUTTON_NUMBER_6 38
#define CEC_REMOTE_BUTTON_NUMBER_7 39
#define CEC_REMOTE_BUTTON_NUMBER_8 40
#define CEC_REMOTE_BUTTON_NUMBER_9 41
#define CEC_REMOTE_BUTTON_DOT 42
#define CEC_REMOTE_BUTTON_ENTER 43
#define CEC_REMOTE_BUTTON_CLEAR 44
#define CEC_REMOTE_BUTTON_NEXT_FAVORITE 47
#define CEC_REMOTE_BUTTON_CHANNEL_UP 48
#define CEC_REMOTE_BUTTON_CHANNEL_DOWN 49
#define CEC_REMOTE_BUTTON_PREVIOUS_CHANNEL 50
#define CEC_REMOTE_BUTTON_SOUND_SELECT 51
#define CEC_REMOTE_BUTTON_INPUT_SELECT 52
#define CEC_REMOTE_BUTTON_DISPLAY_INFORMATION 53
#define CEC_REMOTE_BUTTON_HELP 54
#define CEC_REMOTE_BUTTON_PAGE_UP 55
#define CEC_REMOTE_BUTTON_PAGE_DOWN 56
#define CEC_REMOTE_BUTTON_POWER 64
#define CEC_REMOTE_BUTTON_VOLUME_UP 65
#define CEC_REMOTE_BUTTON_VOLUME_DOWN 66
#define CEC_REMOTE_BUTTON_MUTE 67
#define CEC_REMOTE_BUTTON_PLAY 68
#define CEC_REMOTE_BUTTON_STOP 69
#define CEC_REMOTE_BUTTON_PAUSE 70
#define CEC_REMOTE_BUTTON_RECORD 71
#define CEC_REMOTE_BUTTON_REWIND 72
#define CEC_REMOTE_BUTTON_FAST_FORWARD 73
#define CEC_REMOTE_BUTTON_EJECT 74
#define CEC_REMOTE_BUTTON_FORWARD 75
#define CEC_REMOTE_BUTTON_BACKWARD 76
#define CEC_REMOTE_BUTTON_STOP_RECORD 77
#define CEC_REMOTE_BUTTON_PAUSE_RECORD 78
#define CEC_REMOTE_BUTTON_ANGLE 80
#define CEC_REMOTE_BUTTON_SUB_PICTURE 81
#define CEC_REMOTE_BUTTON_VIDEO_ON_DEMAND 82
#define CEC_REMOTE_BUTTON_ELECTRONIC_PROGRAM_GUIDE 83
#define CEC_REMOTE_BUTTON_TIMER_PROGRAMMING 84
#define CEC_REMOTE_BUTTON_INITIAL_CONFIGURATION 85
#define CEC_REMOTE_BUTTON_PLAY_FUNCTION 96
#define CEC_REMOTE_BUTTON_PAUSE_PLAY_FUNCTION 97
#define CEC_REMOTE_BUTTON_RECORD_FUNCTION 98
#define CEC_REMOTE_BUTTON_PAUSE_RECORD_FUNCTION 99
#define CEC_REMOTE_BUTTON_STOP_FUNCTION 100
#define CEC_REMOTE_BUTTON_MUTE_FUNCTION 101
#define CEC_REMOTE_BUTTON_RESTORE_VOLUME_FUNCTION 102
#define CEC_REMOTE_BUTTON_TUNE_FUNCTION 103
#define CEC_REMOTE_BUTTON_SELECT_MEDIA_FUNCTION 104
#define CEC_REMOTE_BUTTON_SELECT_AV_INPUT_FUNCTION 105
#define CEC_REMOTE_BUTTON_SELECT_AUDIO_INPUT_FUNCTION 106
#define CEC_REMOTE_BUTTON_POWER_TOGGLE_FUNCTION 107
#define CEC_REMOTE_BUTTON_POWER_OFF_FUNCTION 108
#define CEC_REMOTE_BUTTON_POWER_ON_FUNCTION 109
#define CEC_REMOTE_BUTTON_F1_BLUE 113
#define CEC_REMOTE_BUTTON_F2_RED 114
#define CEC_REMOTE_BUTTON_F3_GREEN 115
#define CEC_REMOTE_BUTTON_F4_YELLOW 116
#define CEC_REMOTE_BUTTON_F5 117
#define CEC_REMOTE_BUTTON_DATA 118
//HdmiCECDeviceState
#define CEC_DEVICE_STATE_ON 0 /*!< All devices */
#define CEC_DEVICE_STATE_STANDBY 1 /*!< All devices */
#define CEC_DEVICE_STATE_TEXT_DISPLAY 2 /*!< TV devices */
#define CEC_DEVICE_STATE_IMAGE_DISPLAY 3 /*!< TV devices */
#define CEC_DEVICE_STATE_MENU_DISPLAY 4 /*!< TV devices */
#define CEC_DEVICE_STATE_DEVICE_MENU_INACTIVE 1 /*!< TV devices */
#define CEC_DEVICE_STATE_DEVICE_MENU_ACTIVE 0 /*!< TV devices */
#define CEC_DEVICE_STATE_NOT_RECORDING 7 /*!< Recording devices */
#define CEC_DEVICE_STATE_RECORDING 8 /*!< Recording devices */
#define CEC_DEVICE_STATE_DECK_INACTIVE 9 /*!< Playback devices */
#define CEC_DEVICE_STATE_DECK_ACTIVE 10 /*!< Playback devices */
#define TV_MENU_LANGUAGE_BLANK 0
#define TV_MENU_LANGUAGE_ENG 1 //ENGLISH
#define TV_MENU_LANGUAGE_CHI 2 //CHINESE
#define TV_MENU_LANGUAGE_FRE 3 //FRENCH
#define TV_MENU_LANGUAGE_GER 4 //GERMAN
#define TV_MENU_LANGUAGE_DUT 5 //DUTCH //HeLan
#define TV_MENU_LANGUAGE_ITA 6 //ITALIAN //YiDaLi
#define TV_MENU_LANGUAGE_SPA 7 //SPANISH //XiBanYa
#define TV_MENU_LANGUAGE_SWE 8 //SWEDISH //RuiDan
#define TV_MENU_LANGUAGE_POR 9 //PORTUGUESE //PuTaoYa
#define TV_MENU_LANGUAGE_DEN 10 //DENISH //DanMai
#define TV_MENU_LANGUAGE_NOR 11 //NORWEGIAN //NuoWei
#define TV_MENU_LANGUAGE_FIN 12 //FINNISH //FenLan
#define TV_MENU_LANGUAGE_POL 13 //POLISH //PoLan
#define TV_MENU_LANGUAGE_TUR 14 //TURKISH //TuErQi
#define TV_MENU_LANGUAGE_CZE 15 //CZECH //JieKe
#define TV_MENU_LANGUAGE_HUN 16 //HUNGARIAN //XiongYaLi
#define TV_MENU_LANGUAGE_JAP 17 //JAPANESS //
#define TV_MENU_LANGUAGE_KOR 18 //KOREAN //
#define TV_MENU_LANGUAGE_RUS 19 //RUSSIAN //
#define TV_MENU_LANGUAGE_TRA 20 //TRAD.CHINESE //
#if 0
#ifdef HDMI_CEC_TEST_HW
#define HDMI_DETECT_PIN GPIO2_30_INDEX
#define HDMI_DETECT_STATUS app_gpio_input_level_read(HDMI_DETECT_PIN)
#define HDMI_DETECT_PIN_USED_GPIO_0
#define HDMI_CEC_PIN GPIO0_28_INDEX
#define HDMI_CEC_PIN_DETECT app_gpio_input_level_read(HDMI_CEC_PIN)
#define HDMI_CEC_PIN_USED_GPIO_0
#define HDMI_CEC_PIN_INPUT { \
//unsigned int interrupt_save; \
TX_DISABLE; \
REG_GPIO0_DOE &= ~HDMI_CEC_PIN; \
TX_RESTORE; \
}
#define HDMI_CEC_PIN_OUTPUT { \
//unsigned int interrupt_save; \
TX_DISABLE; \
REG_GPIO0_DOE |= HDMI_CEC_PIN; \
TX_RESTORE; \
}
#else
#if 1
#define HDMI_DETECT_PIN GPIO2_30_INDEX
#define HDMI_DETECT_STATUS app_gpio_input_level_read(HDMI_DETECT_PIN) //HPD
#define HDMI_DETECT_PIN_USED_GPIO_0
#else
#define HDMI_DETECT_PIN GPIO25_MASK
#define HDMI_DETECT_STATUS GPIO0_READ(HDMI_DETECT_PIN)
#define HDMI_DETECT_PIN_USED_GPIO_1
#endif
#define HDMI_CEC_PIN GPIO0_28_INDEX
#define HDMI_CEC_PIN_DETECT app_gpio_input_level_read(HDMI_CEC_PIN) //CEC
#define HDMI_CEC_PIN_USED_GPIO_0
/*
#define HDMI_CEC_PIN GPIO4_MASK
#define HDMI_CEC_PIN_DETECT GPIO1_READ(HDMI_CEC_PIN)
#define HDMI_CEC_PIN_USED_GPIO_1*/
#define HDMI_CEC_PIN_INPUT { \
TX_DISABLE; \
REG_GPIO0_DOE &= ~HDMI_CEC_PIN; \
TX_RESTORE; \
}
#define HDMI_CEC_PIN_OUTPUT { \
TX_DISABLE; \
REG_GPIO0_DOE |= HDMI_CEC_PIN; \
TX_RESTORE; \
}
#endif
#define HDMI_CEC_PIN_HIGH HDMI_CEC_PIN_INPUT
#define HDMI_CEC_PIN_LOW HDMI_CEC_PIN_OUTPUT
#endif
void HdmiCEC_init (void);
void HdmiCEC_open (void);
void HdmiCEC_close (void);
void HdmiCEC_fini (void);
U8 HdmiDetect_hw_init(U8 gpio_group, U32 gpio_mask);
U8 HdmiCEC_hw_init(U8 gpio_group, U32 gpio_mask);
#endif //_OPTEK_CEC_H_