static int CecSendMessage ( char opCode, char dest )
{
	CEC_FrameData_t cecFrame;

    cecFrame.opcode        = opCode;
    cecFrame.srcDestAddr   = MAKE_SRCDEST( Cec.address_logic, dest );
    cecFrame.argCount      = 0;
    return CecSendFrame( &cecFrame );
}
예제 #2
0
/**
 *  Cbus RAP operation:  RAP error process
 *
 *
 *  @param[in]          channel		Cbus channel, always 0 in SiI1292
 *  @param[in]          rapStatusCode	including Unrecognized Action Code, Unsupported Action Code, responder busy
 *
 *  @return             Result
 *
 *****************************************************************************/
bool_t SI_RapErrProcess(uint8_t channel, uint8_t rapStatusCode)
{
#ifdef CONFIG_MHL_SII1292_CEC
	SI_CpiData_t cecFrame;
#endif
	uint8_t retry;

	switch (rapStatusCode)
	{
		case RAP_UNRECOGNIZED:
		case RAP_UNSUPPORTED:

#ifdef SUPPORT_MSCMSG_IGNORE_LIST
			//add to ignore list
			SI_CbusOQCleanActiveReq(channel);
			if (rapStatusCode == MHL_RAP_CMD_CONTENT_ON)
				SI_CbusPushKeytoIgnoreList(channel, MHL_RAP_CMD_CONTENT_ON_IREG, CBUS_OUT);
			if (rapStatusCode == MHL_RAP_CMD_CONTENT_OFF)
				SI_CbusPushKeytoIgnoreList(channel, MHL_RAP_CMD_CONTENT_OFF_IREG, CBUS_OUT);
#endif
#if defined(CONFIG_MHL_SII1292_CEC)
			//feature abort
			cecFrame.opcode        = CECOP_FEATURE_ABORT;
			cecFrame.srcDestAddr   = MAKE_SRCDEST( g_cecAddress, CEC_LOGADDR_TV );
			cecFrame.args[0]       = rapStatusCode;
			cecFrame.args[1]       = CECAR_UNRECOG_OPCODE;
			cecFrame.argCount      = 2;
			SI_CpiWrite( &cecFrame );
#endif
			break;
		case RAP_BUSY:
			retry = SI_CbusOQReqRetry(channel);
			if (retry > 0)
			{
				SI_CbusOQReduceReqRetry(channel);
				SI_CbusOQSetReqStatus(channel, CBUS_REQ_PENDING);
			}
			else if (retry == 0)
			{
				SI_CbusOQCleanActiveReq(channel);
			}
			break;
	}
	return SUCCESS;
}