cecd_interface.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. #ifndef _CECD_INTERFACE_H_
  2. #define _CECD_INTERFACE_H_
  3. //#include <stdbool.h>
  4. #include "cecd_keycode.h"
  5. //#include "types.h"
  6. #define NULL_NODE_INDEX 16
  7. #define MAX_DEVICE_NUM 16
  8. #define MAX_OSDNAME_LENGTH 15
  9. #define MAX_OSDSTRING_LENGTH 14
  10. #define BROADCAST_LOGICAL_ADDR 0xf
  11. #define UNREGIST_LOGICAL_ADDR 0xf
  12. #define UNREGIST_PHYSICAL_ADDR 0xffff
  13. #define CECTV_LOGICAL_ADDR 0x0
  14. #define CECTV_PHYSICAL_ADDR 0x0000
  15. #define PLAYBACK_DEVICE_1_LOGICAL_ADDR 0x04
  16. #define PLAYBACK_DEVICE_2_LOGICAL_ADDR 0x08
  17. #define PLAYBACK_DEVICE_3_LOGICAL_ADDR 0x0B
  18. #define AUDIO_SYSTEM_LOGICAL_ADDR 0x05
  19. // -------------------------------------------------------------------------------
  20. // Definitions for CECD INTERFACE
  21. // -------------------------------------------------------------------------------
  22. // General definition
  23. typedef enum{
  24. CS_STATUS_START,
  25. CS_INIT_OK,
  26. CS_EXIT_OK,
  27. CS_DEVICENOTEXIST,
  28. CS_DEVICEEXIST,
  29. CS_STATUS_END
  30. }cecd_status_t;
  31. typedef enum{
  32. PWS_ON = 0x00,
  33. PWS_STANDBY,
  34. PWS_IN_TRANSITION_STANDBY_TO_ON,
  35. PWS_IN_TRANSITION_ON_TO_STANDBY
  36. }power_status_t;
  37. typedef enum{
  38. DEVICE_TYPE_TV = 0,
  39. DEVICE_TYPE_RECORDING_DEVICE = 1,
  40. DEVICE_TYPE_STB = 3,
  41. DEVICE_TYPE_DVD = 4,
  42. DEVICE_TYPE_AUDIO_SYSTEM = 5,
  43. DEVICE_TYPE_UNKNOW = 0xf
  44. }device_type_t;
  45. typedef enum{
  46. ABT_UNRECOGNIZED_OPCODE = 0,
  47. ABT_NOT_IN_CORRECT_MODE_TO_RESPOND,
  48. ABT_CANNOT_PROVIDE_SOURCE,
  49. ABT_INVALID_OPERAND,
  50. ABT_REFUSED
  51. }abort_reason_t;
  52. // Deck related definition
  53. typedef enum{
  54. DSR_ON = 1,
  55. DSR_OFF,
  56. DSR_ONCE
  57. }deck_status_request_t;
  58. typedef enum{
  59. DS_START = 0x11,
  60. DS_PLAY = DS_START,
  61. DS_RECORD,
  62. DS_PLAY_REVERSE,
  63. DS_STILL,
  64. DS_SLOW,
  65. DS_SLOW_REVERSE,
  66. DS_SEARCH_FORWARD,
  67. DS_SEARCH_REVERSE,
  68. DS_NO_MEDIA,
  69. DS_STOP,
  70. DS_WIND,
  71. DS_REWIND,
  72. DS_INDEX_SEARCH_FORWARD,
  73. DS_INDEX_SEARCH_REVERSE,
  74. DS_OTHER_STATUS,
  75. DS_NOTSUPPORTED, // Don't support deck control.
  76. DS_END = DS_NOTSUPPORTED,
  77. }deck_status_t;
  78. // Device menu related definition
  79. typedef enum{
  80. MRT_ACTIVATE = 0,
  81. MRT_DEACTIVATE,
  82. MRT_QUERY
  83. }menu_request_t;
  84. typedef enum{
  85. MS_ACTIVATED = 0,
  86. MS_DEACTIVATED,
  87. MS_MENUNOTSUPPORTED, // Don't support menu device.
  88. MS_KEYNOTSUPPORTED // Don't support this user key.
  89. }menu_status_t;
  90. typedef enum{
  91. AS_OFF,
  92. AS_ON
  93. }audio_status_t;
  94. typedef enum{
  95. VS_IMAGE,
  96. VS_TEXT,
  97. VS_UNKNOWN
  98. }viewon_status_t;
  99. typedef UINT32 audio_volume_t;
  100. typedef enum{
  101. OSD_DC_Default, //Display for default time
  102. OSD_DC_KeepDisplay, //Display until cleared
  103. OSD_DC_Clear //Clear previous message
  104. }osdstring_display_control_t;
  105. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  106. typedef enum{
  107. ARC_FeatureAbort,
  108. ARC_Active,
  109. ARC_DeActive
  110. }audio_ARCstatus_t;
  111. typedef enum{
  112. AudioCodec_Reserved0=0,
  113. AudioCodec_LinearPCM,
  114. AudioCodec_AC3,
  115. AudioCodec_MPEG1,
  116. AudioCodec_MP3,
  117. AudioCodec_MPEG2,
  118. AudioCodec_AAC,
  119. AudioCodec_DTS,
  120. AudioCodec_ATRAC,
  121. AudioCodec_Reserved9,
  122. AudioCodec_Reserved10,
  123. AudioCodec_Reserved11,
  124. AudioCodec_Reserved12,
  125. AudioCodec_Reserved13,
  126. AudioCodec_Reserved14,
  127. AudioCodec_Reserved15
  128. }audio_format_codec_t;
  129. typedef enum{
  130. AudioSampleRate_32K=1,
  131. AudioSampleRate_44K=2,
  132. AudioSampleRate_48K=4,
  133. AudioSampleRate_88K=8,
  134. AudioSampleRate_96K=16,
  135. AudioSampleRate_176K=32,
  136. AudioSampleRate_192K=64
  137. }audio_SampleRate_t;
  138. //~cdlin
  139. // -------------------------------------------------------------------------------
  140. // Definition for cecd message
  141. // -------------------------------------------------------------------------------
  142. typedef enum{
  143. SRC_OTHERS,
  144. SRC_HDMI_1,
  145. SRC_HDMI_2,
  146. SRC_HDMI_3,
  147. SRC_HDMI_4,
  148. SRC_HDMI_5,
  149. SRC_END,
  150. SRC_UNKNOWN
  151. }tv_source_t;
  152. typedef enum{
  153. STATE_IMAGE_DISPLAY,
  154. STATE_MENU_DISPLAY,
  155. STATE_TEXT_DISPLAY,
  156. STATE_DEVICE_MENU_ACTIVE,
  157. STATE_DEVICE_MENU_INACTIVE
  158. }state_tv_t;
  159. typedef enum{
  160. //UMF to CECD
  161. CMD_NULL = 0,
  162. //CECDMSG_NOTICE_CECD
  163. CMD_SetCECEnable,
  164. CMD_NoticeStandby,
  165. CMD_NoticeSourceChange,
  166. CMD_NoticeRoutingInfo,
  167. CMD_NoticeMenuLanguage,
  168. CMD_NoticePowerStatus,
  169. CMD_ReportFeatures,
  170. //CECDMSG_NETWORK_CONTROL
  171. CMD_RefreshDeviceList,
  172. CMD_RemoveDevice,
  173. CMD_AssignDisplayDevice,
  174. //CECDMSG_DECK_CONTROL
  175. CMD_QueryDeckStatus,
  176. CMD_DeckControl,
  177. //CECDMSG_MENU_CONTROL
  178. CMD_RequestDeviceMenuStatus,
  179. CMD_RemoteControlPassThrough,
  180. //CECDMSG_AUDIO_CONTROL
  181. CMD_RequestAudioMode,
  182. CMD_RequestAudioModeStatus,
  183. CMD_RemoteControlAudioVolume,
  184. CMD_RemoteControlAudioVolumeRelease,
  185. //06/29/2009 by cdlin to add CMD_RequestAudioStatus
  186. CMD_RequestAudioStatus,
  187. //~cdlin
  188. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  189. //06/03/2010 modified by cdlin for rename CMD_RequestARC to CMD_QueryARC and CMD_ReportARC to CMD_RequestARC
  190. //CMD_RequestARC,
  191. //CMD_ReportARC,
  192. CMD_QueryARC,
  193. CMD_Hdmi_ARC_Switch,
  194. CMD_RequestARC,
  195. //~cdlin
  196. CMD_RequestShortAudioDescriptor,
  197. //~cdlin
  198. CMD_RequestARCTerminated,
  199. CMD_ReportCurrentLatency,
  200. //CECD to UMF
  201. //CECDMSG_NOTICE_UMF
  202. CMD_ReportTVPowerOff,
  203. CMD_ReportCecdStatus,
  204. CMD_ReportActiveSource,
  205. CMD_ReportInactiveSource,
  206. CMD_ReportPhysicalAddress,
  207. CMD_ReportPowerStatus,
  208. CMD_ReportFeatures_TOUMF,
  209. //CECDMSG_NETWORK_REPORT
  210. CMD_ReportDeviceList,
  211. CMD_ReportAddDevice,
  212. CMD_ReportOSDString,
  213. //CECDMSG_DECK_REPORT
  214. CMD_ReportDeckStatus,
  215. //CECDMSG_DEVICE_MENU_REPORT
  216. CMD_ReportDeviceMenuStatus,
  217. //CECDMSG_SYSTEM_AUDIO_REPORT
  218. CMD_ReportAudioMode,
  219. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  220. //CMD_ReportAudioVolume
  221. CMD_ReportAudioVolume,
  222. CMD_ReportAudioARCStatus,
  223. CMD_ReportAudioCodecCapability,
  224. //~cdlin
  225. // 06/28/2021 added to support eARC, <Request Current Latency> and <>
  226. CMD_GIVE_FEATURES,
  227. CMD_RequestCurrentLatency
  228. }CECDMSG_cmdtype_t;
  229. typedef enum{
  230. CECDMSG_NULL = 0,
  231. //UMF to CECD
  232. CECDMSG_SET_CECENABLE,
  233. CECDMSG_NOTICE_CECD,
  234. CECDMSG_NETWORK_CONTROL,
  235. CECDMSG_DECK_CONTROL,
  236. CECDMSG_DEVICE_MENU_CONTROL,
  237. CECDMSG_SYSTEM_AUDIO_CONTROL,
  238. CECDMSG_PORT_HPD_TOGGLE,
  239. //CECDMSG_TUNER_CONTROL,
  240. //CECD to UMF
  241. CECDMSG_NOTICE_UMF,
  242. CECDMSG_NETWORK_REPORT,
  243. CECDMSG_DECK_REPORT,
  244. CECDMSG_DEVICE_MENU_REPORT,
  245. CECDMSG_SYSTEM_AUDIO_REPORT
  246. //CECDMSG_TUNER_REPORT,
  247. }CECDMSG_TYPE;
  248. // -------------------------------------------------------------------------------
  249. // Definitions for device info and list (shared memory mapping)
  250. // -------------------------------------------------------------------------------
  251. typedef UINT32 PHYADDR; //Physical ADDRESS
  252. typedef UINT8 LOGADDR; //Logical Address
  253. // CECD use only
  254. typedef struct _DEVICEMAP
  255. {
  256. INT8 OSDNAME[MAX_OSDNAME_LENGTH];
  257. union{
  258. UINT32 device_info[2];
  259. struct{
  260. UINT32 hdmi_source:4;
  261. UINT32 device_type:4;
  262. UINT32 vendor_id:24;
  263. UINT32 physical_addr:16;
  264. UINT32 logical_addr:8;
  265. UINT32 bValid:1;
  266. UINT32 nextNode:7;
  267. };
  268. };
  269. }DEVICEMAP,*PDEVICEMAP;
  270. // CECD use only
  271. typedef struct _DEVICEMAP_LIST{
  272. UINT8 deviceNum;
  273. UINT8 victim;
  274. UINT8 ptrNode;
  275. UINT8 logList[16];
  276. DEVICEMAP device[MAX_DEVICE_NUM+1];
  277. }DEVICEMAP_LIST,*PDEVICEMAP_LIST;
  278. //device information
  279. typedef struct _DEVICEINFO
  280. {
  281. INT8 OSDNAME[MAX_OSDNAME_LENGTH];
  282. union{
  283. UINT32 info[2];
  284. struct{
  285. tv_source_t hdmi_source:4;
  286. device_type_t device_type:4;
  287. UINT32 vendor_id:24;
  288. PHYADDR physical_addr:16;
  289. LOGADDR logical_addr:8;
  290. };
  291. };
  292. }DEVICEINFO,*PDEVICEINFO;
  293. //OSD String for UMF
  294. typedef struct _OSDSTRING
  295. {
  296. UINT8 display_control;
  297. INT8 osd_string[MAX_OSDSTRING_LENGTH];
  298. }OSDSTRING,*POSDSTRING;
  299. //The device list for UMF
  300. typedef struct _DEVICEINFO_LIST
  301. {
  302. UINT8 deviceNum;
  303. INT32 bLock;
  304. DEVICEINFO device[MAX_DEVICE_NUM];
  305. }DEVICEINFO_LIST,*PDEVICEINFO_LIST;
  306. //message structure for umf - notice
  307. typedef struct _CECDMSG_NOTICECECD
  308. {
  309. union{
  310. UINT32 info;
  311. //UMF to CECD
  312. LOGADDR logAddr;
  313. tv_source_t target_src;
  314. struct{
  315. INT8 lng_str[3];
  316. };
  317. //OsdLangMode language;
  318. power_status_t power_state;
  319. //CECD to UMF
  320. struct{
  321. LOGADDR tar_logAddr:8;
  322. cecd_status_t state:8;
  323. };
  324. struct{
  325. LOGADDR active_logAddr:8;
  326. tv_source_t toSrc:4;
  327. viewon_status_t viewon_state:4;
  328. PHYADDR phyAddr:16;
  329. };
  330. struct{
  331. UINT32 cec_version;
  332. UINT32 all_device_type;
  333. UINT32 rc_profile;
  334. UINT32 device_features;
  335. };
  336. };
  337. }CECDMSG_NOTICECECD;
  338. //message structure for umf - network
  339. typedef struct _CECDMSG_NETWORK
  340. {
  341. union{
  342. UINT32 info;
  343. //UMF to CECD
  344. struct{
  345. LOGADDR logAddr:8;
  346. PHYADDR phyAddr:16;
  347. };
  348. //CECD to UMF
  349. INT32 shmId;
  350. INT32 OSDStringshmId;
  351. };
  352. }CECDMSG_NETWORK;
  353. //message structure for umf - deck
  354. typedef struct _CECDMSG_DECK
  355. {
  356. union{
  357. UINT32 info;
  358. //UMF to CECD
  359. struct{
  360. LOGADDR logAddr:8;
  361. UINT32 deck_reserved_1:8;
  362. };
  363. struct{
  364. UINT32 deck_reserved_2:8;
  365. deck_control_t deckCmd:8;
  366. };
  367. //CECD to UMF
  368. struct{
  369. UINT32 deck_reserved_3:8;
  370. deck_status_t deckInfo:8;
  371. };
  372. //~cdlin
  373. };
  374. }CECDMSG_DECK;
  375. //message structure for umf - device menu
  376. typedef struct _CECDMSG_MENU
  377. {
  378. union{
  379. UINT32 info;
  380. //UMF to CECD
  381. struct{
  382. LOGADDR logAddr:8;
  383. UINT32 menu_reserved_1:8;
  384. };
  385. struct{
  386. UINT32 menu_reserved_2:8;
  387. menu_request_t menuRequestType:8;
  388. };
  389. struct{
  390. UINT32 menu_reserved_3:8;
  391. user_control_code_t userControlCode:8;
  392. };
  393. //CECD to UMF
  394. struct{
  395. UINT32 menu_reserved_4:8;
  396. menu_status_t menuState:8;
  397. };
  398. //~cdlin
  399. };
  400. }CECDMSG_MENU;
  401. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  402. typedef struct _audioformat
  403. {
  404. UINT8 audioFormatCodec;//use audio_format_codec_t
  405. UINT8 audioSampleRate; //use audio_SampleRate_t and can "or"
  406. UINT8 audioChannelCount; // 2: 2ch,..., 6:6ch, .., 8:8ch
  407. UINT8 audioAtmos;
  408. } audioformat ;
  409. //message structure for umf - audio mode
  410. typedef struct _CECDMSG_AUDIO
  411. {
  412. union{
  413. UINT32 info;
  414. //UMF to CECD
  415. struct{
  416. LOGADDR logAddr:8;//current active source's(ARC) logAddr
  417. UINT32 audio_reserved_1:16; //Physical Address switch Audio feature on/off
  418. };
  419. struct{
  420. UINT32 audio_reserved_2:8;
  421. user_control_code_t userControlCode:8;
  422. };
  423. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  424. struct{
  425. UINT32 audio_reserved_3:8;
  426. PHYADDR phyAddr:16;
  427. audio_ARCstatus_t audoTxSetARCActiveDeActive:8;
  428. };
  429. //~cdlin
  430. //CECD to UMF
  431. struct{
  432. UINT32 audio_reserved_4:8;
  433. audio_status_t audioModeStatus:8;
  434. };
  435. struct{
  436. UINT32 audio_reserved_5:8;
  437. audio_volume_t audioVol:8; // Bit7:Mute on/off, Bit6-0: Vol 0% ~ 100%
  438. };
  439. //05/13/2010 added by cdlin to support ARC, <Request Short Audio Descriptor> and <Report Short Audio Descriptor>
  440. struct{
  441. UINT32 audio_reserved_6:8;
  442. audio_ARCstatus_t audioRxARCstatus:8;
  443. };
  444. struct{
  445. UINT32 audio_reserved_7:8;
  446. audioformat audioFormat[16];
  447. UINT8 audioNumFormatCodec; // number of audio format
  448. };
  449. //~cdlin
  450. //~cdlin
  451. struct{
  452. UINT32 audio_reserved_8:8;
  453. UINT32 vlatency:8;
  454. UINT32 lflgs:8;
  455. UINT32 aod:8;
  456. };
  457. };
  458. }CECDMSG_AUDIO;
  459. //message structure for umf (Message queue)
  460. typedef struct _CECD_MESSAGE
  461. {
  462. union{
  463. LONG type;
  464. struct{
  465. LONG MsgType:16;
  466. LONG CmdType:16;
  467. };
  468. };
  469. union{
  470. UINT32 param;
  471. CECDMSG_NOTICECECD notice;
  472. CECDMSG_NETWORK network;
  473. CECDMSG_DECK deck;
  474. CECDMSG_MENU menu;
  475. CECDMSG_AUDIO audio;
  476. };
  477. }CECD_MSG,*PCECD_MSG;
  478. #define CECD_MSG_SIZE (sizeof(CECD_MSG)-sizeof(CECDMSG_AUDIO))
  479. #define SIZE_OF_CECDDEVICEINFO (sizeof(DEVICEINFO))
  480. #define SIZE_OF_CECDEVICE_LIST (sizeof(DEVICEINFO_LIST))
  481. #define SIZE_OF_OSD_STRING (sizeof(OSDSTRING))
  482. #endif