Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;

}
Example #6
0
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;
}