FmTxStatus _FM_TX_SimpleCmdAndCopyParams(FmTxContext *fmContext, FMC_UINT paramIn, FMC_BOOL condition, FmTxCmdType cmdT, const char * funcName) { FmTxStatus status; FmTxSimpleSetOneParamCmd * baseCmd; _FM_TX_FUNC_START_AND_LOCK_ENABLED(funcName); FMC_VERIFY_ERR((fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("%s: Invalid Context Ptr",funcName)); /* Verify that the band value is valid */ FMC_VERIFY_ERR(condition, FM_TX_STATUS_INVALID_PARM, ("%s: Invalid param",funcName)); /*Rds Auto Actions can be preformed only if we are in Auto mode and no change RDS mode is in the queue*/ if(_FM_TX_IsRdsAutoAction(cmdT)) { FMC_VERIFY_ERR((FM_TX_SM_GetRdsMode()==FMC_RDS_TRANSMISSION_AUTOMATIC), FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON, ("%s: %s",funcName,_FM_TX_FmTxStatusStr(FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON))); FMC_VERIFY_ERR((FM_TX_SM_IsCmdPending(FM_TX_CMD_SET_RDS_TRANSMISSION_MODE)==FMC_FALSE) , FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS, ("%s: %s",funcName,_FM_TX_FmTxStatusStr(FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS))); } /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue(fmContext, cmdT, (FmcBaseCmd**)&baseCmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, (funcName)); /* Copy cmd parms for the cmd execution phase*/ /*we assume here strongly that the stract pointed by base command as as its first field base command and another field with the param*/ baseCmd->param = paramIn; status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); _FM_TX_FUNC_END_AND_UNLOCK_ENABLED(); return status; }
FmTxStatus FM_TX_SetRdsTrafficCodes(FmTxContext *fmContext, FmcRdsTaCode taCode, FmcRdsTpCode tpCode) { FmTxStatus status; FmTxSetRdsTrafficCodesCmd *setRdsTrafficCodesCmd = NULL; _FM_TX_FUNC_START_AND_LOCK_ENABLED("FM_TX_SetRdsTrafficCodes"); FMC_VERIFY_ERR( (fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_SetRdsTrafficCodes: Invalid Context Ptr")); FMC_VERIFY_ERR(((taCode<=1)&&( tpCode <= 1)) , FM_TX_STATUS_INVALID_PARM, ("FM_TX_SetRdsTrafficCodes: Invalid params (%d , %d)", taCode,tpCode)); FMC_VERIFY_ERR((FM_TX_SM_GetRdsMode()==FMC_RDS_TRANSMISSION_AUTOMATIC), FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON, ("FM_TX_SetRdsTrafficCodes: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON))); FMC_VERIFY_ERR((FM_TX_SM_IsCmdPending(FM_TX_CMD_SET_RDS_TRANSMISSION_MODE)==FMC_FALSE) , FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS, ("FM_TX_SetRdsTrafficCodes: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS))); /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue( fmContext, FM_TX_CMD_SET_RDS_TRAFFIC_CODES, (FmcBaseCmd**)&setRdsTrafficCodesCmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, ("FM_TX_SetRdsTrafficCodes")); /* Copy cmd parms for the cmd execution phase*/ setRdsTrafficCodesCmd->taCode= taCode; setRdsTrafficCodesCmd->tpCode= tpCode; status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); _FM_TX_FUNC_END_AND_UNLOCK_ENABLED(); return status; }
FmTxStatus FM_TX_SetRdsTextRtMsg( FmTxContext *fmContext, FmcRdsRtMsgType msgType, const FMC_U8 *msg, FMC_UINT len) { FmTxStatus status; FmTxSetRdsTextRtMsgCmd *cmd = NULL; _FM_TX_FUNC_START_AND_LOCK_ENABLED("FM_TX_SetRdsTextRtMsg"); FMC_VERIFY_ERR((fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_SetRdsTextRtMsg: Invalid Context Ptr")); FMC_VERIFY_ERR((FM_TX_SM_GetRdsMode()==FMC_RDS_TRANSMISSION_AUTOMATIC), FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON, ("FM_TX_SetRdsTextRtMsg: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON))); FMC_VERIFY_ERR((FM_TX_SM_IsCmdPending(FM_TX_CMD_SET_RDS_TRANSMISSION_MODE)==FMC_FALSE) , FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS, ("FM_TX_SetRdsTextRtMsg: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS))); /* Verify Parameters */ status = _FM_TX_SetRdsTextRtMsgVerifyParms(msgType, msg, len); FMC_VERIFY_ERR((status == FM_TX_STATUS_SUCCESS), status, ("FM_TX_SetRdsTextRtMsg")); /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue(fmContext, FM_TX_CMD_SET_RDS_TEXT_RT_MSG, (FmcBaseCmd**)&cmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, ("FM_TX_SetRdsTextRtMsg")); /* Copy cmd parms for the cmd execution phase*/ cmd->rtType = msgType; FMC_OS_MemCopy(cmd->msg, msg, len); cmd->len = len; status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); _FM_TX_FUNC_END_AND_UNLOCK_ENABLED(); return status; }
FmTxStatus FM_TX_Enable(FmTxContext *fmContext) { FmTxStatus status; FmTxEnableCmd *enableCmd = NULL; FMC_FUNC_START_AND_LOCK(("FM_TX_Enable")); FMC_VERIFY_ERR((fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_Enable: Invalid Context Ptr")); FMC_VERIFY_ERR((FM_TX_SM_GetContextState() == FM_TX_SM_CONTEXT_STATE_DISABLED), FM_TX_STATUS_CONTEXT_NOT_DISABLED, ("FM_TX_Enable: FM TX Context Is Not Disabled")); FMC_VERIFY_ERR((FM_TX_SM_IsCmdPending(FM_TX_CMD_ENABLE) == FMC_FALSE), FM_TX_STATUS_IN_PROGRESS, ("FM_TX_Enable: Enabling Already In Progress")); /* When we are disabled there must not be any pending commands in the queue */ FMC_VERIFY_FATAL((FMC_IsListEmpty(FMCI_GetCmdsQueue()) == FMC_TRUE), FMC_STATUS_INTERNAL_ERROR, ("FM_TX_Enable: Context is Disabled but there are pending command in the queue")); /* Direct FM task events to the TX's event handler. This must be done here (and not in fm_tx_sm.c) since only afterwards we will be able to send the event the event handler */ status = FMCI_SetEventCallback(FM_TX_SM_TaskEventCb); FMC_VERIFY_FATAL((status == FMC_STATUS_SUCCESS), status, ("FM_TX_Enable: FMCI_SetEventCallback Failed (%s)", FMC_DEBUG_FmcStatusStr(status))); /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue(fmContext, FM_TX_CMD_ENABLE, (FmcBaseCmd**)&enableCmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, ("FM_TX_Enable")); status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); FMC_FUNC_END_AND_UNLOCK(); return status; }
FmTxStatus FM_TX_ChangeDigitalSourceConfiguration(FmTxContext *fmContext, ECAL_SampleFrequency eSampleFreq) { FmTxStatus status; FmTxSetDigitalAudioConfigurationCmd *setDigitalSourceConfigurationCmd = NULL; _FM_TX_FUNC_START_AND_LOCK_ENABLED("FM_TX_ChangeDigitalSourceConfiguration"); FMC_VERIFY_ERR( (fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_ChangeDigitalSourceConfiguration: Invalid Context Ptr")); /*FMC_VERIFY_ERR(((taCode<=1)&&( tpCode <= 1)) , FM_TX_STATUS_INVALID_PARM, ("FM_RX_ChangeDigitalSourceConfiguration: Invalid params (%d , %d)", taCode,tpCode));*/ /*FMC_VERIFY_ERR((FM_TX_SM_GetRdsMode()==FMC_RDS_TRANSMISSION_AUTOMATIC), FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON, ("FM_TX_ChangeDigitalSourceConfiguration: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON)));*/ /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue( fmContext, FM_TX_CMD_CHANGE_DIGITAL_AUDIO_CONFIGURATION, (FmcBaseCmd**)&setDigitalSourceConfigurationCmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, ("FM_TX_ChangeDigitalSourceConfiguration")); /* Copy cmd parms for the cmd execution phase*/ setDigitalSourceConfigurationCmd->eSampleFreq = eSampleFreq; status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); _FM_TX_FUNC_END_AND_UNLOCK_ENABLED(); return status; }
FmTxStatus FM_TX_WriteRdsRawData(FmTxContext *fmContext, const FMC_U8 *rdsRawData, FMC_UINT len) { FmTxStatus status; FmTxSetRdsRawDataCmd *cmd = NULL; _FM_TX_FUNC_START_AND_LOCK_ENABLED("FM_TX_WriteRdsRawData"); FMC_VERIFY_ERR((fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_WriteRdsRawData: Invalid Context Ptr")); FMC_VERIFY_ERR((len <= FM_RDS_RAW_MAX_MSG_LEN), FMC_STATUS_INVALID_PARM, ("FM_TX_WriteRdsRawData: Raw data longer then max size")); FMC_VERIFY_ERR((FM_TX_SM_GetRdsMode()==FMC_RDS_TRANSMISSION_MANUAL), FM_TX_STATUS_RDS_MANUAL_MODE_NOT_ON, ("FM_TX_WriteRdsRawData: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_RDS_MANUAL_MODE_NOT_ON))); FMC_VERIFY_ERR((FM_TX_SM_IsCmdPending(FM_TX_CMD_SET_RDS_TRANSMISSION_MODE)==FMC_FALSE) , FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS, ("FM_TX_WriteRdsRawData: %s",_FM_TX_FmTxStatusStr(FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS))); /* Allocates the command and insert to commands queue */ status = FM_TX_SM_AllocateCmdAndAddToQueue(fmContext, FM_TX_CMD_WRITE_RDS_RAW_DATA, (FmcBaseCmd**)&cmd); FMC_VERIFY_ERR((status == FMC_STATUS_SUCCESS), status, ("FM_TX_WriteRdsRawData")); /* Copy cmd parms for the cmd execution phase*/ FMC_OS_MemCopy(cmd->rawData, rdsRawData, len); cmd->rawLen = len; status = FM_TX_STATUS_PENDING; /* Trigger TX SM to execute the command in FM Task context */ FMCI_NotifyFmTask(FMC_OS_EVENT_GENERAL); _FM_TX_FUNC_END_AND_UNLOCK_ENABLED(); return status; }