static void ConnectAudioToI2s ( ) { le_result_t res; // Redirect audio to the I2S interface. FeOutRef = le_audio_OpenI2sTx(LE_AUDIO_I2S_STEREO); LE_ERROR_IF((FeOutRef==NULL), "OpenI2sTx returns NULL!"); FeInRef = le_audio_OpenI2sRx(LE_AUDIO_I2S_STEREO); LE_ERROR_IF((FeInRef==NULL), "OpenI2sRx returns NULL!"); LE_INFO("Open I2s: FeInRef.%p FeOutRef.%p", FeInRef, FeOutRef); AudioInputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioInputConnectorRef==NULL), "AudioInputConnectorRef is NULL!"); AudioOutputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioOutputConnectorRef==NULL), "AudioOutputConnectorRef is NULL!"); if (MdmRxAudioRef && MdmTxAudioRef && FeOutRef && FeInRef && AudioInputConnectorRef && AudioOutputConnectorRef) { res = le_audio_Connect(AudioInputConnectorRef, FeInRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect I2S RX on Input connector!"); res = le_audio_Connect(AudioInputConnectorRef, MdmTxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmTx on Input connector!"); res = le_audio_Connect(AudioOutputConnectorRef, FeOutRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect I2S TX on Output connector!"); res = le_audio_Connect(AudioOutputConnectorRef, MdmRxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmRx on Output connector!"); } LE_INFO("Open I2s: FeInRef.%p FeOutRef.%p", FeInRef, FeOutRef); }
//-------------------------------------------------------------------------------------------------- static void ConnectAudio ( void ) { // Redirect audio to the in-built Microphone and Speaker. FeOutRef = le_audio_OpenSpeaker(); LE_ERROR_IF((FeOutRef==NULL), "OpenSpeaker returns NULL!"); FeInRef = le_audio_OpenMic(); LE_ERROR_IF((FeInRef==NULL), "OpenMic returns NULL!"); AudioInputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioInputConnectorRef==NULL), "AudioInputConnectorRef is NULL!"); AudioOutputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioOutputConnectorRef==NULL), "AudioOutputConnectorRef is NULL!"); LE_ERROR_IF((le_audio_Connect(AudioInputConnectorRef, FeInRef)!=LE_OK), "Failed to connect Mic on Input connector!"); LE_ERROR_IF((le_audio_Connect(AudioOutputConnectorRef, FeOutRef)!=LE_OK), "Failed to connect Speaker on Output connector!"); MdmRxAudioRef = le_audio_OpenModemVoiceRx(); LE_ERROR_IF((MdmRxAudioRef==NULL), "GetRxAudioStream returns NULL!"); MdmTxAudioRef = le_audio_OpenModemVoiceTx(); LE_ERROR_IF((MdmTxAudioRef==NULL), "GetTxAudioStream returns NULL!"); // Play local on output connector. PlayerRef = le_audio_OpenPlayer(); LE_ERROR_IF((PlayerRef==NULL), "OpenFilePlayback returns NULL!"); LE_ERROR_IF((le_audio_Connect(AudioOutputConnectorRef, PlayerRef) != LE_OK), "Failed to connect FilePlayback on output connector!"); MediaHandlerRef = le_audio_AddMediaHandler(PlayerRef, MyMediaEventHandler, NULL); LE_ERROR_IF((MediaHandlerRef==NULL), "AddMediaHandler returns NULL!"); // Set gains LE_ERROR_IF((le_audio_SetGain(PlayerRef, 1) != LE_OK), "Cannot set multimedia gain"); LE_ERROR_IF((le_audio_SetGain(FeInRef, 1) != LE_OK), "Cannot set microphone gain"); LE_ERROR_IF((le_audio_SetGain(MdmRxAudioRef, 12) != LE_OK), "Cannot set MdmRxAudioRef gain"); LE_ERROR_IF((le_audio_SetGain(MdmTxAudioRef, 12) != LE_OK), "Cannot set MdmTxAudioRef gain"); // Set specific gains for AR7/AR8 (won't work on other platforms) LE_ERROR_IF((le_audio_SetPlatformSpecificGain("D_AFE_GAIN_RX", 0x2000) != LE_OK), "Cannot set \"D_AFE_GAIN_RX\" gain"); LE_ERROR_IF((le_audio_SetPlatformSpecificGain("D_AFE_GAIN_TX", 0x2000) != LE_OK), "Cannot set \"D_AFE_GAIN_TX\" gain"); }
//-------------------------------------------------------------------------------------------------- static void ConnectAudioToFileRec ( void ) { le_result_t res; if ((AudioFileFd=open(AudioFileRecPath, O_RDWR | O_CREAT | O_TRUNC)) == -1) { LE_ERROR("Open file %s failure: errno.%d (%s)", AudioFileRecPath, errno, strerror(errno)); } else { LE_INFO("Open file %s with AudioFileFd.%d", AudioFileRecPath, AudioFileFd); } // Capture Remote on output connector. FileAudioRef = le_audio_OpenRecorder(); LE_ERROR_IF((FileAudioRef==NULL), "OpenFileRecording returns NULL!"); if (FileAudioRef && AudioOutputConnectorRef) { res = le_audio_Connect(AudioOutputConnectorRef, FileAudioRef); if(res!=LE_OK) { LE_ERROR("Failed to connect FileRecording on output connector!"); return; } res = le_audio_Connect(AudioInputConnectorRef, FileAudioRef); if(res!=LE_OK) { LE_ERROR("Failed to connect FileRecording on input connector!"); return; } LE_INFO("Recorder is now connected."); res = le_audio_RecordFile(FileAudioRef, AudioFileFd); if(res!=LE_OK) { LE_ERROR("Failed to record the file"); } else { LE_INFO("File is now recording."); } } }
//-------------------------------------------------------------------------------------------------- static void ConnectAudio ( void ) { le_result_t res; MdmRxAudioRef = le_audio_OpenModemVoiceRx(); LE_ERROR_IF((MdmRxAudioRef==NULL), "OpenModemVoiceRx returns NULL!"); MdmTxAudioRef = le_audio_OpenModemVoiceTx(); LE_ERROR_IF((MdmTxAudioRef==NULL), "OpenModemVoiceTx returns NULL!"); #if (ENABLE_CODEC == 1) // Redirect audio to the in-built Microphone and Speaker. FeOutRef = le_audio_OpenSpeaker(); LE_ERROR_IF((FeOutRef==NULL), "OpenSpeaker returns NULL!"); FeInRef = le_audio_OpenMic(); LE_ERROR_IF((FeInRef==NULL), "OpenMic returns NULL!"); #else // Redirect audio to the PCM interface. FeOutRef = le_audio_OpenPcmTx(0); LE_ERROR_IF((FeOutRef==NULL), "OpenPcmTx returns NULL!"); FeInRef = le_audio_OpenPcmRx(0); LE_ERROR_IF((FeInRef==NULL), "OpenPcmRx returns NULL!"); #endif AudioInputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioInputConnectorRef==NULL), "AudioInputConnectorRef is NULL!"); AudioOutputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioOutputConnectorRef==NULL), "AudioOutputConnectorRef is NULL!"); if (MdmRxAudioRef && MdmTxAudioRef && FeOutRef && FeInRef && AudioInputConnectorRef && AudioOutputConnectorRef) { res = le_audio_Connect(AudioInputConnectorRef, FeInRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect Mic on Input connector!"); res = le_audio_Connect(AudioInputConnectorRef, MdmTxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmTx on Input connector!"); res = le_audio_Connect(AudioOutputConnectorRef, FeOutRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect Speaker on Output connector!"); res = le_audio_Connect(AudioOutputConnectorRef, MdmRxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmRx on Output connector!"); } }
//-------------------------------------------------------------------------------------------------- static void ConnectAudioToAnalog ( void ) { le_result_t res; MdmRxAudioRef = le_audio_OpenModemVoiceRx(); LE_ERROR_IF((MdmRxAudioRef==NULL), "GetRxAudioStream returns NULL!"); MdmTxAudioRef = le_audio_OpenModemVoiceTx(); LE_ERROR_IF((MdmTxAudioRef==NULL), "GetTxAudioStream returns NULL!"); // Redirect audio to the in-built Microphone and Speaker. FeOutRef = le_audio_OpenSpeaker(); LE_ERROR_IF((FeOutRef==NULL), "OpenSpeaker returns NULL!"); FeInRef = le_audio_OpenMic(); LE_ERROR_IF((FeInRef==NULL), "OpenMic returns NULL!"); LE_INFO("Open Analog: FeInRef.%p FeOutRef.%p", FeInRef, FeOutRef); AudioInputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioInputConnectorRef==NULL), "AudioInputConnectorRef is NULL!"); AudioOutputConnectorRef = le_audio_CreateConnector(); LE_ERROR_IF((AudioOutputConnectorRef==NULL), "AudioOutputConnectorRef is NULL!"); if (MdmRxAudioRef && MdmTxAudioRef && FeOutRef && FeInRef && AudioInputConnectorRef && AudioOutputConnectorRef) { res = le_audio_Connect(AudioInputConnectorRef, FeInRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect Mic on Input connector!"); res = le_audio_Connect(AudioInputConnectorRef, MdmTxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmTx on Input connector!"); res = le_audio_Connect(AudioOutputConnectorRef, FeOutRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect Speaker on Output connector!"); res = le_audio_Connect(AudioOutputConnectorRef, MdmRxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmRx on Output connector!"); } LE_INFO("Open Analog: FeInRef.%p FeOutRef.%p", FeInRef, FeOutRef); }
//-------------------------------------------------------------------------------------------------- static void ConnectAudioToFileLocalPlay ( void ) { le_result_t res; if ((AudioFileFd=open(AudioFileRecPath, O_RDWR)) == -1) { LE_ERROR("Open file %s failure: errno.%d (%s)", AudioFileRecPath, errno, strerror(errno)); } else { LE_INFO("Open file %s with AudioFileFd.%d", AudioFileRecPath, AudioFileFd); } // Play local on output connector. FileAudioRef = le_audio_OpenPlayer(); LE_ERROR_IF((FileAudioRef==NULL), "OpenFilePlayback returns NULL!"); MediaHandlerRef = le_audio_AddMediaHandler(FileAudioRef, MyMediaEventHandler, NULL); LE_ERROR_IF((MediaHandlerRef==NULL), "AddMediaHandler returns NULL!"); if (FileAudioRef && AudioOutputConnectorRef) { res = le_audio_Connect(AudioOutputConnectorRef, FileAudioRef); if(res!=LE_OK) { LE_ERROR("Failed to connect FilePlayback on output connector!"); return; } LE_INFO("FilePlayback is now connected."); res = le_audio_PlayFile(FileAudioRef, AudioFileFd); if(res != LE_OK) { LE_ERROR("Failed to play the file!"); } else { LE_INFO("File is now playing"); } } }
//-------------------------------------------------------------------------------------------------- static void MyCallEventHandler ( le_mcc_CallRef_t callRef, le_mcc_Event_t callEvent, void* contextPtr ) { le_result_t res; if (callEvent == LE_MCC_EVENT_ALERTING) { LE_INFO("Call event is LE_MCC_EVENT_ALERTING."); StopFilePlayback(); PlayFile(RINGTONE, true); } else if (callEvent == LE_MCC_EVENT_CONNECTED) { LE_INFO("Call event is LE_MCC_EVENT_CONNECTED."); StopFilePlayback(); // Connect voice call to audio res = le_audio_Connect(AudioInputConnectorRef, MdmTxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmTx on Input connector!"); res = le_audio_Connect(AudioOutputConnectorRef, MdmRxAudioRef); LE_ERROR_IF((res!=LE_OK), "Failed to connect mdmRx on Output connector!"); } else if (callEvent == LE_MCC_EVENT_TERMINATED) { LE_INFO("Call event is LE_MCC_EVENT_TERMINATED."); le_mcc_TerminationReason_t term = le_mcc_GetTerminationReason(callRef); switch(term) { case LE_MCC_TERM_LOCAL_ENDED: case LE_MCC_TERM_REMOTE_ENDED: LE_INFO("Termination reason is LE_MCC_TERM_REMOTE_ENDED or LE_MCC_TERM_LOCAL_ENDED"); break; case LE_MCC_TERM_NETWORK_FAIL: case LE_MCC_TERM_UNASSIGNED_NUMBER: case LE_MCC_TERM_USER_BUSY: case LE_MCC_TERM_UNDEFINED: default: LE_INFO("Termination reason is %d", term); StopFilePlayback(); break; } PlayFile(VOICE_PROMPT_END, false); le_mcc_Delete(callRef); if (callRef == TestCallRef) { TestCallRef = NULL; } } else if (callEvent == LE_MCC_EVENT_INCOMING) { LE_INFO("Call event is LE_MCC_EVENT_INCOMING."); } else { LE_INFO("Unknowm Call event."); } }