umf_cec.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. #ifndef _UMF_CEC_H_
  2. #define _UMF_CEC_H_
  3. #include "cecd_interface.h"
  4. #include <pthread.h>
  5. #include <umf_ir.h>
  6. typedef struct _SystemAudio_t
  7. {
  8. LOGADDR logAddr;
  9. PHYADDR phyAddr;
  10. audio_status_t state;
  11. UINT8 volLevel:7;
  12. UINT8 volMute:1;
  13. audio_ARCstatus_t ARCstatus;
  14. }SystemAudio_t;
  15. typedef struct _CEC_t
  16. {
  17. INT32 UMFtoCECMsqid;
  18. INT32 CECtoUMFMsqid;
  19. pthread_t cecthread;
  20. BOOL bCECExecuted;
  21. #ifdef CONFIG_HDMI_ALL_PORT_TERMINATION_ON
  22. BOOL bActiveSrcCheck;
  23. #endif
  24. LOGADDR LogAddr;
  25. PHYADDR PhyAddr;
  26. tv_source_t inputSource;
  27. cecd_status_t cecState;
  28. deck_status_t deckState;
  29. menu_status_t menuState;
  30. menu_status_t uccState;
  31. SystemAudio_t systemAudio;
  32. OSDSTRING osdString;
  33. tv_source_t PreSource;
  34. }CEC_t;
  35. typedef INT32 (*CB_SETSOURCE)(UINT32 Input);
  36. typedef INT32 (*CB_CECOSD)(UINT8 mode);
  37. /*
  38. HRESULT cec_Init(void);
  39. HRESULT cec_Destroy(CEC_t *pcec);
  40. HRESULT cec_Suspend(CEC_t *pcec);
  41. HRESULT cec_NoticeStandby(CEC_t *pcec, BOOLEAN status);
  42. HRESULT cec_NoticeSourceChange(CEC_t *pcec);
  43. //HRESULT cec_NoticeMenuLanguage(CEC_t *pcec, UINT8 OsdLang);
  44. HRESULT cec_NoticeMenuLanguage(char lang[3]);
  45. HRESULT cec_NoticePowerStatus(CEC_t *pcec);
  46. HRESULT cec_RefreshDeviceList(CEC_t *pcec);
  47. HRESULT cec_AssignDisplayDevice(CEC_t *pcec, PHYADDR phyAddr, LOGADDR logAddr);
  48. HRESULT cec_QueryDeckStatus(CEC_t *pcec);
  49. HRESULT cec_DeckControl(CEC_t *pcec, Keycode_t keycode);
  50. HRESULT cec_ChangeSource(CEC_t *pcec, UINT32 Input);
  51. HRESULT cec_RequestAudioMode(CEC_t *pcec, BOOL bEnable);
  52. HRESULT cec_RequestARC(CEC_t *pcec, UINT8 ARCstatus);
  53. HRESULT cec_QueryARCStatus(CEC_t *pcec, UINT8 ARCstatus, UINT8 waitSecs);
  54. menu_status_t cec_RequestDeviceMenuStatus(CEC_t *pcec, menu_request_t menuRequestType, UINT8 waitSecs);
  55. CEC_t *cec_GetHandle(void);
  56. HRESULT cec_SetHDMIControl(BOOLEAN status, BOOLEAN bDefault);
  57. BOOL cec_GetHDMIControl(BOOLEAN bDefault);
  58. BOOL cec_GetAudioARC(BOOLEAN bDefault);
  59. BOOLEAN cec_GetHDMIAudioARCStatus();
  60. void cec_Register(CB_SETSOURCE CB_setSrc, CB_CECOSD CB_OSDEvent);
  61. void cec_SetVolumn(UINT8 value);
  62. */
  63. void _Stop(void);
  64. void cec_NoticeMenuLanguage(UINT8 OsdLang);
  65. INT32 cec_KeyProcess(UINT8 CECTV_KEY);
  66. INT32 cec_DeckControl(UINT8 CECTV_KEY);
  67. INT32 cec_UserControlCode(UINT8 CECTV_KEY);
  68. INT32 cec_RemoteControlPassThrough(UINT8 CECTV_KEY);
  69. INT32 cec_SetAudioARC(BOOL bEnable);
  70. void cec_EnableARCfunctionTimer(BOOL enableARC);
  71. HRESULT cec_RequestAudioMode(BOOL bEnable);
  72. //BOOL CECTV_GetAudioARC(void);
  73. void cec_RefreshDeviceList(void);
  74. void cec_SetTvAutoPwrOn(BOOL status);
  75. INT32 cec_SetDevAutoPwrOff(BOOL status);
  76. void cec_ChangeSource(tv_source_t tvsource);
  77. void CECTV_GetDeviceList(PDEVICEINFO_LIST pdeviceList);
  78. INT32 CECTV_SetDeviceNum(UINT8 DevIndex);
  79. //int CECTV_HDMIPortStatus(UINT32 HdmiPortStatus);
  80. void cec_SetCECenable(UINT32 status);
  81. void cec_RequestAudioStatus(void);
  82. HRESULT cec_SendDeactivedARCTX(CEC_t *pcec);
  83. HRESULT cec_NoticeRoutingInfo(tv_source_t tvsource);
  84. /*******************************************************************
  85. * Constant
  86. ********************************************************************/
  87. #define CECTV_KEY_SELECT 0x00
  88. #define CECTV_KEY_UP 0x01
  89. #define CECTV_KEY_DOWN 0x02
  90. #define CECTV_KEY_LEFT 0x03
  91. #define CECTV_KEY_RIGHT 0x04
  92. #define CECTV_KEY_RIGHT_UP 0x05
  93. #define CECTV_KEY_RIGHT_DOWN 0x06
  94. #define CECTV_KEY_LEFT_UP 0x07
  95. #define CECTV_KEY_LEFT_DOWN 0x08
  96. #define CECTV_KEY_ROOT_MENU 0x09
  97. #define CECTV_KEY_SETUP_MENU 0x0a
  98. #define CECTV_KEY_CONTENTS_MENU 0x0b
  99. #define CECTV_KEY_FAVORITE_MENU 0x0c
  100. #define CECTV_KEY_EXIT 0x0d
  101. #define CECTV_KEY_0 0x20
  102. #define CECTV_KEY_1 0x21
  103. #define CECTV_KEY_2 0x22
  104. #define CECTV_KEY_3 0x23
  105. #define CECTV_KEY_4 0x24
  106. #define CECTV_KEY_5 0x25
  107. #define CECTV_KEY_6 0x26
  108. #define CECTV_KEY_7 0x27
  109. #define CECTV_KEY_8 0x28
  110. #define CECTV_KEY_9 0x29
  111. #define CECTV_KEY_DOT 0x2a
  112. #define CECTV_KEY_ENTER 0x2b
  113. #define CECTV_KEY_CLEAR 0x2c
  114. #define CECTV_KEY_NEXT_FAVORITE 0x2f
  115. #define CECTV_KEY_CHANNEL_UP 0x30
  116. #define CECTV_KEY_CHANNEL_DOWN 0x31
  117. #define CECTV_KEY_PREVIOUS_CHANNEL 0x32
  118. #define CECTV_KEY_SOUND_SELECT 0x33
  119. #define CECTV_KEY_INPUT_SELECT 0x34
  120. #define CECTV_KEY_DISPLAY_INFO 0x35
  121. #define CECTV_KEY_HELP 0x36
  122. #define CECTV_KEY_PAGE_UP 0x37
  123. #define CECTV_KEY_PAGE_DOWN 0x38
  124. #define CECTV_KEY_POWER 0x40
  125. #define CECTV_KEY_VOLUME_UP 0x41
  126. #define CECTV_KEY_VOLUME_DOWN 0x42
  127. #define CECTV_KEY_MUTE 0x43
  128. #define CECTV_KEY_PLAY 0x44
  129. #define CECTV_KEY_STOP 0x45
  130. #define CECTV_KEY_PAUSE 0x46
  131. #define CECTV_KEY_RECORD 0x47
  132. #define CECTV_KEY_REWIND 0x48
  133. #define CECTV_KEY_FAST_FORWARD 0x49
  134. #define CECTV_KEY_EJECT 0x4a
  135. #define CECTV_KEY_FORWARD 0x4b
  136. #define CECTV_KEY_BACKWARD 0x4c
  137. #define CECTV_KEY_STOP_RECORD 0x4d
  138. #define CECTV_KEY_PAUSE_RECORD 0x4e
  139. #define CECTV_KEY_ANGLE 0x50
  140. #define CECTV_KEY_SUB_PICTURE 0x51
  141. #define CECTV_KEY_VOD 0x52
  142. #define CECTV_KEY_EPG 0x53
  143. #define CECTV_KEY_TIMER_PGM 0x54
  144. #define CECTV_KEY_INITIAL_CFG 0x55
  145. #define CECTV_KEY_SYSTEMAUDIOMODE_FUNC 0x56//Bryan@2010-0430 Add for CEC
  146. #define CECTV_KEY_PLAY_FUNC 0x60
  147. #define CECTV_KEY_PAUSE_PLAY_FUNC 0x61
  148. #define CECTV_KEY_RECORD_FUNC 0x62
  149. #define CECTV_KEY_PAUSE_RECORD_FUNC 0x63
  150. #define CECTV_KEY_STOP_FUNC 0x64
  151. #define CECTV_KEY_MUTE_FUNC 0x65
  152. #define CECTV_KEY_RESTORE_VOL_FUNC 0x66
  153. #define CECTV_KEY_TUNE_FUNC 0x67
  154. #define CECTV_KEY_SELECT_MEDIA_FUNC 0x68
  155. #define CECTV_KEY_SELECT_AV_INPUT_FUNC 0x69
  156. #define CECTV_KEY_SELECT_AUDIO_INPUT_FUNC 0x6a
  157. #define CECTV_KEY_POWER_TOGGLE_FUNC 0x6b
  158. #define CECTV_KEY_F1_BLUE 0x71
  159. #define CECTV_KEY_F2_RED 0x72
  160. #define CECTV_KEY_F3_GREEN 0x73
  161. #define CECTV_KEY_F4_YELLOW 0x74
  162. #define CECTV_KEY_F5 0x75
  163. #define CECTV_KEY_DATA 0x76
  164. #define CECTV_KEY_VOLUME_UP_RELEASE 0x77
  165. #define CECTV_KEY_VOLUME_DOWN_RELEASE 0x78
  166. #define CECTV_KEY_MUTE_RELEASE 0x79
  167. //******************************************************************************//
  168. //New structure
  169. //******************************************************************************//
  170. #define CECTV_MULTI_ACT_CMD_TYPE (1<<13)
  171. #define CECTV_SINGLE_ACT_CMD_TYPE (1<<12)
  172. #define CECTV_CMD_TYPE_MASK (0xFFFF0000)
  173. #define CECTV_CMD_MASK (0x0000FFFF)
  174. typedef enum
  175. {
  176. CECTV_MESSAGE_CHANGE_SOURCE ,
  177. CECTV_MESSAGE_STANDBY,
  178. CECTV_MESSAGE_SET_MUTE_STATUS,
  179. CECTV_MESSAGE_SET_SYSTEMAUDIO_STATUS,
  180. CECTV_MESSAGE_SET_DEVICE_OSDNAME,
  181. CECTV_MESSAGE_MAX,
  182. } CECTV_Message_t;
  183. typedef int (*CECTV_ModCbk_pf)(CECTV_Message_t message, UINT32 arg);
  184. typedef struct CECTV_ModualCfg_t_
  185. {
  186. CECTV_ModCbk_pf pfCallBack;
  187. } CECTV_ModualCfg_t;
  188. typedef enum
  189. {
  190. CECTV_DISABLE = 0,
  191. CECTV_ENABLE,
  192. } CECTVEnableStatus_t;
  193. typedef struct CEC_CmdBody_t_ {
  194. UINT32 dMessage;
  195. UINT32 dParam;
  196. } CEC_CmdBody_t;
  197. typedef struct CECTV_MessageBody_t_ {
  198. UINT32 dMessage;
  199. UINT32 dParam;
  200. } CECTV_MessageBody_t;
  201. typedef enum
  202. {
  203. CECTV_ACK_STAT_WAIT = 0x00,
  204. CECTV_ACK_STAT_SUCCESS = 0x01,
  205. CECTV_ACK_STAT_FAILED = 0x02,
  206. } CECTV_Ack_Stat_t;
  207. typedef enum
  208. {
  209. CEC_TASK_IDLE = 0,
  210. CEC_TASK_SEND_MESAGE,
  211. CEC_TASK_Standby,
  212. } CECTaskStatus_t;
  213. typedef enum
  214. {
  215. CECTV_SUCCESS, // successful outcome
  216. CECTV_ERR_FAILURE, // operation failed
  217. CECTV_ERR_NULL_PARAM, // null parameter
  218. } CECTV_Status_e;
  219. typedef enum
  220. {
  221. CEC_Daemon_Message_level_Normal = 0,
  222. CEC_Daemon_Message_level_Detail
  223. } CEC_DaemonMessageLevel_e;
  224. typedef enum
  225. {
  226. CECTV_ACT_CMD_NONE = 0x1000,
  227. CECTV_SINGLE_ACT_CMD_KEYPRESS = 0x1001,
  228. CECTV_SINGLE_ACT_CMD_KEYRELEASE = 0x1002,
  229. CECTV_SINGLE_ACT_CMD_KEYREPEAT= 0x1003,
  230. CECTV_SINGLE_ACT_CMD_STANDBY= 0x1004,
  231. CECTV_SINGLE_ACT_CMD_SET_OSD_LANGUAGE= 0x1005,
  232. CECTV_SINGLE_ACT_CMD_CHGSRC_OUT_HDMI= 0x1006,
  233. CECTV_SINGLE_ACT_CMD_CHGSRC_TO_HDMI= 0x1007,
  234. CECTV_SINGLE_ACT_CMD_CHGSRC_BTW_HDMI= 0x1008,
  235. CECTV_SINGLE_ACT_CMD_SYSAUD_MODE_REQ_ON= 0x1009,
  236. CECTV_SINGLE_ACT_CMD_SYSAUD_MODE_REQ_OFF= 0x100a,
  237. CECTV_SINGLE_ACT_CMD_SET_ARC_OPTION_DISABLE= 0x100b,
  238. CECTV_SINGLE_ACT_CMD_REQUEST_ARC_INITIATION= 0x100c,
  239. CECTV_SINGLE_ACT_CMD_REQUEST_ARC_TERMINATION= 0x100d,
  240. CECTV_SINGLE_ACT_CMD_GIVE_DECK_STATUS= 0x100e,
  241. CECTV_SINGLE_ACT_CMD_PLAY= 0x100f,
  242. CECTV_SINGLE_ACT_CMD_DECK_CONTROL= 0x1010,
  243. CECTV_SINGLE_ACT_CMD_SET_DEVICENUM= 0x1011,
  244. CECTV_SINGLE_ACT_CMD_SET_CECENABLE= 0x1012,
  245. CECTV_SINGLE_ACT_CMD_SET_AUTOPOWERON= 0x1013,
  246. CECTV_SINGLE_ACT_CMD_SET_DEVAUTOPOWEROFF= 0x1014,
  247. CECTV_SINGLE_ACT_CMD_REQUEST_AUDIO_STATUS= 0x1015,
  248. CECTV_SINGLE_ACT_CMD_REQUEST_SYSTEMAUDIOMODE_ON= 0x1016,
  249. CECTV_SINGLE_ACT_CMD_REQUEST_SYSTEMAUDIOMODE_OFF= 0x1017,
  250. CECTV_SINGLE_HDMI_ARC_SWITCH = 0x1018,
  251. CECTV_SINGLE_ACT_ROUTING_INFO =0x1019,
  252. CECTV_MULTI_ACT_CMD_TESTMODE = 0x2001,
  253. CECTV_MULTI_ACT_CMD_AUDIO_SYSTEM_INITE = 0x2002,
  254. } CECTV_Act_Cmd_t;
  255. typedef enum
  256. {
  257. AMP_OFF = 0x01,
  258. AMP_ON = 0x2,
  259. AMP_5V_OFF = 0x4,
  260. AMP = 0x08,
  261. ARC_OFF = 0x10,
  262. ARC_ON = 0x20,
  263. AMP_ARC = 0x80,
  264. AMP_AUDIO_FORMAT = 0x100,
  265. } CECSystemAudioStatus_t;
  266. typedef enum
  267. {
  268. Audio_Format_Reserved = 0,
  269. Audio_Format_LPCM, //Linear PCM
  270. Audio_Format_AC3,
  271. Audio_Format_MPEG1,
  272. Audio_Format_MP3,
  273. Audio_Format_MPEG2,
  274. Audio_Format_AAC,
  275. Audio_Format_DTS,
  276. Audio_Format_ATRAC,
  277. Audio_Format_OBA, //One Bit Audio
  278. Audio_Format_DDPlus, //Dolby Digital +
  279. Audio_Format_DTSHD,
  280. Audio_Format_MAT,
  281. Audio_Format_DST,
  282. Audio_Format_WMAPro,
  283. Audio_Format_Format15,
  284. Audio_Format_Max,
  285. } Audio_Format_Codes;
  286. typedef enum
  287. {
  288. Audio_Output_Com_NA = 0x0,
  289. Audio_Output_Com_Delay = 0x1,
  290. Audio_Output_Com_NoDelay = 0x2,
  291. Audio_Output_Com_Partially = 0x3,
  292. Low_Latency_Mode_Normal = 0x0,
  293. Low_Latency_Mode_Low = 0x4,
  294. Reserved_Latency_Flags = 0x0,
  295. }Latency_Flags;
  296. typedef enum
  297. {
  298. Deprecated00 = 0x0,
  299. Deprecated01 = 0x1,
  300. Deprecated02 = 0x2,
  301. Deprecated03 = 0x3,
  302. Version13a = 0x4,
  303. Version14ab = 0x5,
  304. Version20 = 0x6,
  305. CECVersionReserved,
  306. }CECVersion;
  307. typedef enum
  308. {
  309. ADT_TV = 0x80,
  310. ADT_RecordDevice = 0x40,
  311. ADT_Tuner = 0x20,
  312. ADT_PlaybackDevice = 0x10,
  313. ADT_AudioSystem = 0x8,
  314. ADT_CECSwitch = 0x4,
  315. ADT_Reserved,
  316. }ALL_Device_Type;
  317. void CECTV_SetCECSrcIdx(tv_source_t src);
  318. UINT32 CECTV_IsFirstPowerOn(void);
  319. int CECTV_GetPowerStatus(void);
  320. CECTaskStatus_t CECTV_GetAtmosVal(void);
  321. CECTaskStatus_t CECTV_GetDDPlusVal(void);
  322. CECTaskStatus_t CECTV_GetCECTaskStatus(void);
  323. CECTV_Status_e CECTV_SetCECTaskStatus(CECTaskStatus_t CECTaskStatus);
  324. CECTV_Status_e CECTV_SetCECEnable(CECTVEnableStatus_t fEn);
  325. CECTVEnableStatus_t CECTV_GetCECEnable(void);
  326. void CECTV_SetAudioARC(bool val);
  327. BOOL CECTV_GetAudioARC(void);
  328. CECTV_Status_e CECTV_SetSpeakerPreference(BOOL fEn);
  329. BOOL CECTV_GetSpeakerPreference(void);
  330. BOOL CECTV_GetHDMIAudioARCStatus(void);
  331. BOOL CECTV_GetHDMISystemAudioMode(void);
  332. BOOL CECTV_CheckARCDevice(void);
  333. BOOL CECTV_CheckDeviceDiscover(void);
  334. void CECTV_SetRequestARC(bool val);
  335. void CECTV_Init(CECTV_ModualCfg_t *pCEC_ModualCfg);
  336. CECTV_Status_e CECTV_SendCmd(UINT32 dMessage, UINT32 dParam);
  337. UINT8 CECTV_GetAutoPwrOnSrc(void);
  338. INT32 CECTV_HDMIPortStatus(UINT32 HdmiPortStatus);
  339. tv_source_t cec_QueryPlayBackDeviceLogaddr(tv_source_t tvsource);
  340. UINT32 cec_QueryPlayBackDevicePhyaddr(tv_source_t tvsource);
  341. #ifdef CONFIG_SUPPORT_DOLBY_AUDIO
  342. HRESULT cec_RequestShortAudioDescriptor(void);
  343. #endif
  344. HRESULT cec_Hdmi_ARC_Switch(UINT8 ARCstatus);
  345. #endif