Esempio n. 1
0
FmTxStatus FM_TX_Init(void)
{
	/*FmcStatus	fmcStatus = FM_TX_STATUS_SUCCESS;*/
	FmTxStatus	status = FM_TX_STATUS_SUCCESS;
	FmcStatus  fmcStatus;
	FMC_FUNC_START(("FM_TX_Init"));

	FMC_VERIFY_ERR((_fmTxInitState == _FM_TX_INIT_STATE_NOT_INITIALIZED), FM_TX_STATUS_NOT_DE_INITIALIZED,
						("FM_TX_Init: Invalid call while FM TX Is not De-Initialized"));

	/* Assume failure. If we fail before reaching the end, we will stay in this state */
	_fmTxInitState = _FM_TX_INIT_STATE_INIT_FAILED;

	/* Init RX & TX common module */
	fmcStatus = FMCI_Init();
	FMC_VERIFY_FATAL((status == FMC_STATUS_SUCCESS), fmcStatus, 
						("FM_TX_Init: FMCI_Init Failed (%s)", FMC_DEBUG_FmcStatusStr(fmcStatus)));

	/* Init FM TX state machine */
	FM_TX_SM_Init();
	
	
	_fmTxInitState = _FM_TX_INIT_STATE_INITIALIZED;

	FMC_LOG_INFO(("FM_TX_Init: FM TX Initialization completed Successfully"));
	
	FMC_FUNC_END();
	
	return status;
}
Esempio n. 2
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;
}
const char *FMC_DEBUG_FmTxStatusStr(FMC_UINT status)
{
	
	if (status <= FMC_STATUS_LAST)
	{
		return FMC_DEBUG_FmcStatusStr(status);
	}

	switch (status)
	{
		case FM_TX_STATUS_RDS_NOT_ENABLED: return "STATUS_RDS_NOT_ENABLED";
		case FM_TX_STATUS_TRANSMITTER_NOT_TUNED: return "STATUS_TRANSMITTER_NOT_TUNED";
		case FM_TX_STATUS_TRANSMISSION_IS_NOT_ON: return "STATUS_TRANSMISSION_IS_NOT_ON";
		case FM_TX_STATUS_FM_RX_ALREADY_ENABLED: return "STATUS_FM_RX_ALREADY_ENABLED";
		case FM_TX_STATUS_AUTO_MODE_NOT_ON: return "STATUS_AUTO_MODE_NOT_ON";
		case FM_TX_STATUS_RDS_AUTO_MODE_NOT_ON: return "STATUS_RDS_AUTO_MODE_NOT_ON";
		case FM_TX_STATUS_RDS_MANUAL_MODE_NOT_ON: return "STATUS_RDS_MANUAL_MODE_NOT_ON";
		case FM_TX_STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS: return "STATUS_CONFLICTING_RDS_CMD_IN_PROGRESS";
		case FM_TX_STATUS_AUDIO_OPERATION_UNAVAILIBLE_RESOURCES: return "FM_TX_STATUS_AUDIO_OPERATION_UNAVAILIBLE_RESOURCES";
		default:											return FMC_UTILS_FormatNumber("INVALID Status:%x", status, tempStr,MAX_FMC_TMP_STR_SIZE);
	}
}
Esempio n. 4
0
FmTxStatus FM_TX_Destroy(FmTxContext **fmContext)
{
	FmTxStatus	status = FM_TX_STATUS_SUCCESS;

	FMC_FUNC_START(("FM_TX_Destroy"));

	FMC_VERIFY_ERR((*fmContext == FM_TX_SM_GetContext()), FMC_STATUS_INVALID_PARM, ("FM_TX_Destroy: Invalid Context Ptr"));
	FMC_VERIFY_ERR((FM_TX_SM_GetContextState() ==  FM_TX_SM_CONTEXT_STATE_DISABLED), 
						FM_TX_STATUS_CONTEXT_NOT_DISABLED, ("FM_TX_Destroy: FM TX Context must be disabled before destroyed"));

	status = FM_TX_SM_Destroy(fmContext);
	FMC_VERIFY_FATAL((status == FM_TX_STATUS_SUCCESS), status, 
						("FM_TX_Destroy: FM_TX_SM_Destroy Failed (%s)", FMC_DEBUG_FmcStatusStr(status)));

	/* Make sure pointer will not stay dangling */
	*fmContext = NULL;

	FMC_LOG_INFO(("FM_TX_Destroy: Successfully Destroyed FM TX Context"));
	
	FMC_FUNC_END();
	
	return status;
}
Esempio n. 5
0
FmTxStatus FM_TX_Create(FmcAppHandle *appHandle, const FmTxCallBack fmCallback, FmTxContext **fmContext)
{
	FmTxStatus	status = FM_TX_STATUS_SUCCESS;

	FMC_FUNC_START(("FM_TX_Create"));

	FMC_VERIFY_ERR((appHandle == NULL), FMC_STATUS_NOT_SUPPORTED, ("FM_TX_Create: appHandle Must be null currently"));
	FMC_VERIFY_ERR((_fmTxInitState == _FM_TX_INIT_STATE_INITIALIZED), FM_TX_STATUS_NOT_INITIALIZED,
						("FM_TX_Create: FM TX Not Initialized"));
	FMC_VERIFY_FATAL((FM_TX_SM_GetContextState() ==  FM_TX_SM_CONTEXT_STATE_DESTROYED), 
						FM_TX_STATUS_CONTEXT_NOT_DESTROYED, ("FM_TX_Deinit: FM TX Context must first be destoryed"));

	status = FM_TX_SM_Create(fmCallback, fmContext);
	FMC_VERIFY_FATAL((status == FM_TX_STATUS_SUCCESS), status, 
						("FM_TX_Create: FM_TX_SM_Create Failed (%s)", FMC_DEBUG_FmcStatusStr(status)));
	
	
	FMC_LOG_INFO(("FM_TX_Create: Successfully Create FM TX Context"));
	
	FMC_FUNC_END();
	
	return status;
}