///***************************************** // Copyright (C) 2009-2019 // ITE Tech. Inc. All Rights Reserved // Proprietary and Confidential ///***************************************** // @file // @author Jau-Chih.Tseng@ite.com.tw // @date 2019/01/03 // @fileversion: ITE_HDMITX_SAMPLE_3.27 //******************************************/ #ifndef _HDMITX_CEC_H_ #define _HDMITX_CEC_H_ #include "typedef.h" #include "mcu.h" //#include "IO.h" #define _CEC_DEVICE_PLAYBACK_ typedef unsigned char u8_t; //typedef unsigned char BYTE; //typedef unsigned char BOOL; typedef struct { u8_t SIZE; u8_t HEADER; u8_t OPCODE; u8_t OPERAND1; u8_t OPERAND2; u8_t OPERAND3; u8_t OPERAND4; u8_t OPERAND5; u8_t OPERAND6; u8_t OPERAND7; u8_t OPERAND8; u8_t OPERAND9; u8_t OPERAND10; u8_t OPERAND11; u8_t OPERAND12; u8_t OPERAND13; u8_t OPERAND14; u8_t OPERAND15; u8_t OPERAND16; }CEC_FRAME, *P_CEC_FRAME; typedef enum _CEC_TX_StateType { sCECOff = 0, sCECcmdGet, sCECTransfer, sCECCheckResult, sCECReceiverFail, sCECReceiverAck, sCECReceiverNack, sCECOk, sCECNone, } CEC_TX_StateType; typedef enum _ARC_StateType { sRequestARCInitiation = 0, sInitiateARC, sReportARCInitiated, sRequestARCTermination, sTerminateARC, sReportARCTermination, sARCNone, } ARC_StateType; typedef enum _HEC_StateType { sHEC_InquirState = 0x00, sHEC_ReportState = 0x01, sHEC_SetStateAdjacent = 0x02, sHEC_SetState = 0x03, sHEC_RequestDeactivation = 0x04, sHEC_NotifyAlive = 0x05, sHEC_Discover = 0x06, sHEC_HPDSetState = 0x10, sHEC_HPDReportState = 0x11, sHEC_None, } HEC_StateType; typedef enum _SystemInfoFeature_StateType { sCECVersioin = 0x9E, sGetCECVersion = 0x9F, sGivePhysicalAddress = 0x83, // follower:All sGetMenuLanguage = 0x91, // follower:TV sReportPhysicalAddress = 0x84, // follower:TV sSetMenuLanguage = 0x32, // follower:All, Initiator:TV sSIFnone, } SystemInfoFeature_StateType; typedef enum _SystemAudioControl_StateType { sComesOutOfStandby = 0, sSetSystemAudioModeToTV, sWaitingFeatureAbort, sSetSystemAudioModeToAll, sSACnone, } SystemAudioControl_StateType; typedef enum _OneTouchPlay_StateType { sActiveSource, sImageViewOn, sTextViewOn, sOTNone, } OneTouchPlay_StateType; typedef enum _LogicAddressing_StateType { sReportPhysicalAddressTransfer, sReportPhysicalAddressReceived, sPollingMessage, sPollingResult, sLANone, } LogicAddressing_StateType; typedef enum _PollingMessage_StateType { sPollingMessage1, sPollingMessage2, sPollingMessage3, sReportPhyAdr, sReportDeviceVendorID, sPMnone } PollingMessage_StateType; typedef enum _CEC_Logic_DEVICE_ID_t { DEVICE_ID_TV = 0, DEVICE_ID_RECORDING1, // 1 DEVICE_ID_RECORDING2, // 2 DEVICE_ID_TUNER1, // 3 DEVICE_ID_PLAYBACK1, // 4 DEVICE_ID_AUDIO, // 5 DEVICE_ID_TUNER2, // 6 DEVICE_ID_TUNER3, // 7 DEVICE_ID_PLAYBACK2, // 8 DEVICE_ID_RECORDING3, // 9 DEVICE_ID_TUNER4, // 10 DEVICE_ID_PLAYBACK3, // 11 DEVICE_ID_RESERVED1, // 12 DEVICE_ID_RESERVED2, // 13 DEVICE_ID_FREEUSE, // 14 DEVICE_ID_BROADCAST, // 15 DEVICE_ID_MAX } CEC_Logic_DEVICE_ID_t; typedef struct { // CEC_Logic_DEVICE_ID_t LogicDevice; u8_t PhyicalAddr1; u8_t PhyicalAddr2; u8_t Active; }CECDevice, *pCECDevice; typedef struct { // u8_t HDMIInput : 14; //bit 0~13 , HDMI Input 1 as bit13, HDMI Input 2 as bit12 u8_t HECActivation : 1; //bit 14 , '0' as HEC Inactive , '1' as HEC Active u8_t Reserved : 1; //bit 15 }HECActivationField, *pHECActivationField; typedef struct { // u8_t HDMIInput : 14; //bit 0~13 , HDMI Input 1 as bit13, HDMI Input 2 as bit12 u8_t HECSupport : 1; //bit 14 , '0' as HEC Not Support , '1' as HEC Support u8_t Reserved : 1; //bit 15 }HECSupportField, *pHECSupportField; typedef struct { u8_t CDCErrorCode : 2; //bit 0~1 , HDMI Input 1 as bit13, HDMI Input 2 as bit12 u8_t ENCState : 2; //bit 2~3 , '00' Ext Con Not Support , '01' Ext Con Inactive ,'10' Ext Con Active u8_t HostState : 2; //bit 4~5 , '00' Host Not Support , '01' Host Inactive ,'10' Host Active u8_t HECState : 2; //bit 6~7 , '00' HEC Not Support , '01' HEC Inactive ,'10' HEC Active }HECStateField, *pHECStateField; typedef enum { eCPEDID_disable = 0, eCPEDID_ENABLE = 1, eCPEDID_DISABLE_ENABLE = 2, eEDID_DISABLE = 3, eEDID_ENABLE = 4, eEDID_DISABLE_ENABLE = 5, }HPDStateType, *pHPDStateType; typedef enum { eNoError = 0, eNoRequestedCapability = 1, eNoCapableToCarryOut = 2, eOtherError = 3, eNoErrorNoVideoStream = 4, }HPDErrorCodeType, *pHPDErrorCodeType; typedef enum _CEC_COMMAND { eFeatureAbort = 0x00, // One Touch Play Feature eActiveSource = 0x82, // follower:TV, switch --> Broadcst , Directly address eImageViewOn = 0x04, // follower:TV, switch --> Broadcst eTextViewOn = 0x0D, // follower:TV // Routing Control Feature eRoutingChange = 0x80, // follower:TV, switch --> Broadcst eRoutingInformation = 0x81, // follower:switch --> Broadcst eRequestActiveSource = 0x85, // follower:switch --> Broadcst , AVR to request active source when Audio ocntrol feature is active eSetStreamPath = 0x86, // follower:switch --> Broadcst eInactiveSource = 0x9D, // eStandBy = 0x36, // follower:All --> Broadcst // System Information Feature eCECVersioin = 0x9E, eGetCECVersion = 0x9F, eGivePhysicalAddress = 0x83, // follower:All eGetMenuLanguage = 0x91, // follower:TV eReportPhysicalAddress = 0x84, // follower:TV eSetMenuLanguage = 0x32, // follower:All, Initiator:TV // Vendor Specific Commands Feature eDeviceVendorID = 0x87, eGiveDeviceVendorID = 0x8C, eVendorCommand = 0x89, eGiveDevicePowerStatus = 0x8F, eReportPowerStatus = 0x90, eVendorCommandWithID = 0xA0, // other ePlay = 0x41, eUserPressed = 0x44, eUserReleased = 0x45, eAudioModeRequest = 0x70, eGiveAudioStatus = 0x71, eSetSystemAudioMode = 0x72, eReportAudioStatus = 0x7A, eGiveSystemAudIoModeStatus = 0x7D, eSystemAudIoModeStatus = 0x7E, eRemoteButtonDown = 0x8A, eRemoteButtonUp = 0x8B, eReportAudioDescriptor = 0xA3, eRequestAudioDescriptor = 0xA4, // ACR eInitiateARC = 0xC0, eReportARCInitiated = 0xC1, eReportARCTerminated = 0xC2, eRequestARCInitiation = 0xC3, eRequestARCTermination = 0xC4, eTerminateARC = 0xC5, // HEC eCDC = 0xF8, // Polling Mesage ePollingMessage, eAbort = 0xff, eCECNone, } eCEC_CMD; typedef enum _CDC_COMMAND { eHEC_InquirState = 0x00, eHEC_ReportState = 0x01, eHEC_SetStateAdjacent = 0x02, eHEC_SetState = 0x03, eHEC_RequestDeactivation = 0x04, eHEC_NotifyAlive = 0x05, eHEC_Discover = 0x06, eHEC_HPDSetState = 0x10, eHEC_HPDReportState = 0x11, }eCDC_CMD; typedef union { struct { BYTE AudioVolumeStatus :7; //bit 0~6 Volume status BYTE AudioMuteStatus :1; //bit 7 Mute status }Map; BYTE AStatus; }CECAudioStatus; typedef union { struct { BYTE AudioFormatCode :6; //bit 0~5 Audio Format Code BYTE AudioFormatID :2; //bit 6~7 Audio Format ID }Map; BYTE AStatus; }CECAudioFormatID; typedef enum { eDirectly = 0, eBroadcast = 1, eBoth = 2, }HeaderType; typedef struct { eCEC_CMD cmd; HeaderType header; u8_t size; } CECcmdFormat; //Register Map #define REG_VENID_L 0x00 #define REG_VENID_H 0x01 #define REG_DEVICEID_L 0x02 #define REG_DEVICEID_H 0x03 #define REG_MREVISIONID 0x04 #define REG_SRVISIONID 0x05 //CEC Initiator Block #define REG06 0x06 #define REG07 0x07 #define REG08 0x08 #define B_FIRE_FRAME 0x80 #define B_DBGCEC_CLR 0x40 #define B_CEC_OE 0x20 #define B_CEC_FORCE 0x10 #define B_CEC_SMT 0x08 #define B_CEC_RST 0x04 #define B_REFCLK_RST 0x02 #define B_INT_CLR 0x01 #define REG09 0x09 #define B_DATAIT_SEL 0x80 #define B_REGION_SEL 0x40 #define B_RXSELF_SEL 0x20 #define B_REFIRE 0x10 #define B_ACKTRIG_SEL 0x08 #define B_PULSE_SEL 0x04 #define B_NACK_EN 0x02 #define B_EN100ms_CNT 0x01 #define REG0A 0x0A #define REG_DATA_MIN 0x0B #define REG_TIMER_UNIT 0x0C #define REG0D 0x0D #define REG_TX_HEADER 0x10 #define REG_TX_OPCODE 0x11 #define REG_TX_OPERAND1 0x12 #define REG_TX_OPERAND2 0x13 #define REG_TX_OPERAND3 0x14 #define REG_TX_OPERAND4 0x15 #define REG_TX_OPERAND5 0x16 #define REG_TX_OPERAND6 0x17 #define REG_TX_OPERAND7 0x18 #define REG_TX_OPERAND8 0x19 #define REG_TX_OPERAND9 0x1A #define REG_TX_OPERAND10 0x1B #define REG_TX_OPERAND11 0x1C #define REG_TX_OPERAND12 0x1D #define REG_TX_OPERAND13 0x1E #define REG_TX_OPERAND14 0x1F #define REG_TX_OPERAND15 0x20 #define REG_TX_OPERAND16 0x21 #define REG_CEC_TARGET_ADDR 0x22 #define REG_CEC_OUT_NUM 0x23 //AFE BLOCK #define REG24 0x24 #define REG_HEAC_CTRL 0x25 #define B_SPDIFO_EN 0x08 #define B_HEC_EN 0x04 #define B_ARC_RX_EN 0x02 #define B_ARC_TX_EN 0x01 #define REG26 0x26 #define REG27 0x27 #define REG28 0x28 #define REG29 0x29 #define REG2A 0x2A #define REG2B 0x2B #define REG2C 0x2C #define REG2D 0x2D //CEC FOLLOWER BLOCK #define REG_RX_HEADER 0x30 #define REG_RX_OPCODE 0x31 #define REG_RX_OPERAND1 0x32 #define REG_RX_OPERAND2 0x33 #define REG_RX_OPERAND3 0x34 #define REG_RX_OPERAND4 0x35 #define REG_RX_OPERAND5 0x36 #define REG_RX_OPERAND6 0x37 #define REG_RX_OPERAND7 0x38 #define REG_RX_OPERAND8 0x39 #define REG_RX_OPERAND9 0x3A #define REG_RX_OPERAND10 0x3B #define REG_RX_OPERAND11 0x3C #define REG_RX_OPERAND12 0x3D #define REG_RX_OPERAND13 0x3E #define REG_RX_OPERAND14 0x3F #define REG_RX_OPERAND15 0x40 #define REG_RX_OPERAND16 0x41 #define REG_FOLLOWER_RX_NUM 0x42 #define REG_INITIATOR_TX_NUM 0x43 #define REG_SYS_STATUS 0x44 #define B_READY_FIRE 0x40 #define B_ERROR_STATUS 0x30 #define B_OUT_STATUS 0x0C #define B_ReceiverACK 0x00 #define B_ReceiverNACK 0x04 #define B_ReceiverRetry 0x08 #define B_ReceiverFail 0x0C #define B_BUS_STATUS 0x02 #define REG_MSCOUNT_L 0x45 #define REG_MSCOUNT_M 0x46 #define REG_MSCOUNT_H 0x47 #define REG_DBG_STATE 0x48 #define REG_DBG_BLOCK 0x49 #define REG_DBG_BIT 0x4A #define REG_DBG_TIMING 0x4B #define REG_INT_STATUS 0x4C #define B_CECFAIL_INT 0x20 #define B_RXDONE_INT 0x10 #define B_TXDONE_INT 0x08 #define B_RXFAIL_INT 0x04 #define B_RX_INT 0x02 #define B_TX_INT 0x01 void cecclrint( void ); void cecconfig( BYTE LogicAdr, BYTE TimeUnit, BYTE CECRst, BYTE EnNAck ); BYTE cecfirerdy( void ); void cecfirecmd( void ); void cecmonitor( void ); //BYTE mode, BYTE LogicAdr ) void HDMITX_CEC_Init(void); void CEC_InactiveSource(BYTE port); void CEC_RoutingChange(BYTE port); void CECDecoder(void); void Switch_OneTouchPlayState(OneTouchPlay_StateType uState); void OneTouchPlayHandler(void); void Switch_LogicalAddressingState(LogicAddressing_StateType uc); void LogicalAddressingHandler(void); void Switch_SystemInfoFeature(SystemInfoFeature_StateType State); void SystemInfomationFeature(void); void switch_PollingMessage(PollingMessage_StateType state); void PollingMessage(void); extern void CECCmdSet(u8_t Follower,eCEC_CMD TxCommand,u8_t cOperand1,u8_t cOperand2); void iT6601Transmitter(void); BOOL CheckUpDownPhyAdr(void); void switch_ARCState(ARC_StateType uState); void ARCHandler(void); void Switch_SystemAudioControl(SystemAudioControl_StateType State); void SystemAudioControl(void); void CECChangePort(void); void SwitchHECState(HEC_StateType uState); void CECUICommandCode(BYTE UIKey); void CECTest(eCEC_CMD cmd,u8_t cData); extern void CECManager(void); extern void DumpiT6601Reg(void); extern u8_t Myself_LogicAdr; extern u8_t u8_PowerStatus; // 0: on , 1: standby, 2: in transition standby to on , 3: in transition on to standby void Initial_Ext_Int1(); /////////////////////////////////////////////////////////////////////////////////////////////// BYTE CEC_ReadI2C_Byte(BYTE RegAddr); SYS_STATUS CEC_WriteI2C_Byte(BYTE offset,BYTE buffer ); #ifdef _MCU_8051_ sbit LED1 = P2^2; sbit LED2 = P2^3; sbit LED3 = P2^4; #endif #define DEBUG_iT6601 #ifdef DEBUG_iT6601 #define IT6601_PRINT(x) printf x #else #define IT6601_PRINT(x) #endif extern CEC_TX_StateType CECTxState; #endif // _HDMITX_CEC_H_