diff -r b67dd1fc57c5 -r 2ed61feeead6 khronosfws/openmax_al/src/radio/xaradioitf.c --- a/khronosfws/openmax_al/src/radio/xaradioitf.c Fri May 14 18:19:45 2010 -0500 +++ b/khronosfws/openmax_al/src/radio/xaradioitf.c Fri May 28 19:26:28 2010 -0500 @@ -19,11 +19,12 @@ #include #include #include +#include #include "xaradioitf.h" - #include "xaradioitfadaptation.h" +#include "xathreadsafety.h" -#include "xathreadsafety.h" +#define FREQINTERVAL 20 /** * XARadioItfImpl* GetImpl(XARadioItf self) @@ -54,9 +55,7 @@ XAresult XARadioItfImpl_SetFreqRange(XARadioItf self, XAuint8 range) { XAresult ret = XA_RESULT_SUCCESS; - XAboolean isSupported = XA_BOOLEAN_FALSE; - XARadioItfImpl* impl = GetImpl(self); DEBUG_API("->XARadioItfImpl_SetFreqRange"); @@ -72,15 +71,13 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_IsFreqRangeSupported((XAAdaptationGstCtx*)impl->adapCtx, range, &isSupported); + ret = XARadioItfAdapt_IsFreqRangeSupported(range, &isSupported); if ( ret == XA_RESULT_SUCCESS && isSupported == XA_BOOLEAN_TRUE ) { - ret = XARadioItfAdapt_SetFreqRange((XAAdaptationGstCtx*)impl->adapCtx, range); + ret = XARadioItfAdapt_SetFreqRange((XAAdaptationMMFCtx*)impl->adapCtx, range); } - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_SetFreqRange"); return ret; @@ -106,8 +103,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_GetFreqRange( (XAAdaptationGstCtx*)impl->adapCtx, pRange); + ret = XARadioItfAdapt_GetFreqRange(pRange); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_GetFreqRange"); @@ -138,8 +134,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_IsFreqRangeSupported( (XAAdaptationGstCtx*)impl->adapCtx, range, pSupported ); + ret = XARadioItfAdapt_IsFreqRangeSupported( range, pSupported ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_IsFreqRangeSupported"); @@ -165,6 +160,9 @@ XAresult ret = XA_RESULT_SUCCESS; XAboolean isSupported = XA_BOOLEAN_FALSE; XARadioItfImpl* impl = GetImpl(self); + + *pFreqInterval = FREQINTERVAL; + DEBUG_API("->XARadioItfImpl_GetFreqRangeProperties"); XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); @@ -176,8 +174,7 @@ DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_IsFreqRangeSupported( (XAAdaptationGstCtx*)impl->adapCtx, range, &isSupported ); + ret = XARadioItfAdapt_IsFreqRangeSupported( range, &isSupported ); if (isSupported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS) { @@ -187,10 +184,9 @@ DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); return XA_RESULT_PARAMETER_INVALID; } - - - ret = XARadioItfAdapt_GetFreqRangeProperties( (XAAdaptationGstCtx*)impl->adapCtx, - range, pMinFreq, pMaxFreq, pFreqInterval ); + + ret = XARadioItfAdapt_GetFreqRangeProperties( (XAAdaptationMMFCtx*)impl->adapCtx, + range, pMinFreq, pMaxFreq ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); @@ -220,8 +216,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_SetFrequency( (XAAdaptationGstCtx*)impl->adapCtx, freq ); + ret = XARadioItfAdapt_SetFrequency( (XAAdaptationMMFCtx*)impl->adapCtx, freq ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_SetFrequency"); @@ -251,8 +246,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_CancelSetFrequency( (XAAdaptationGstCtx*)impl->adapCtx ); + ret = XARadioItfAdapt_CancelSetFrequency(); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_CancelSetFrequency"); @@ -279,8 +273,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_GetFrequency( (XAAdaptationGstCtx*)impl->adapCtx, pFreq); + ret = XARadioItfAdapt_GetFrequency(pFreq); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_GetFrequency"); @@ -309,9 +302,7 @@ if (impl->squelch != squelch) { - - ret = XARadioItfAdapt_SetSquelch( (XAAdaptationGstCtx*)impl->adapCtx, squelch ); - + ret = XARadioItfAdapt_SetSquelch( squelch ); if ( ret == XA_RESULT_SUCCESS ) { impl->squelch = squelch; @@ -340,7 +331,7 @@ return XA_RESULT_PARAMETER_INVALID; } - *pSquelch = impl->squelch; + ret = XARadioItfAdapt_GetSquelch( pSquelch ); DEBUG_API("<-XARadioItfImpl_GetSquelch"); return ret; @@ -357,7 +348,7 @@ DEBUG_API("->XARadioItfImpl_SetStereoMode"); XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl || mode > XA_STEREOMODE_AUTO ) + if( !impl || mode > XA_STEREOMODE_AUTO ) { XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); /* invalid parameter */ @@ -365,18 +356,14 @@ DEBUG_API("<-XARadioItfImpl_SetStereoMode"); return XA_RESULT_PARAMETER_INVALID; } - if ( impl->stereoMode != mode) { - - ret = XARadioItfAdapt_SetStereoMode( (XAAdaptationGstCtx*)impl->adapCtx, mode ); - - if ( ret == XA_RESULT_SUCCESS ) + ret = XARadioItfAdapt_SetStereoMode( (XAAdaptationMMFCtx*)impl->adapCtx, mode ); + if ( ret == XA_RESULT_SUCCESS ) { - impl->stereoMode = mode; + impl->stereoMode = mode; } - } - + } XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_SetStereoMode"); return ret; @@ -400,7 +387,7 @@ return XA_RESULT_PARAMETER_INVALID; } - *pMode = impl->stereoMode; + ret = XARadioItfAdapt_GetStereoMode( pMode ); DEBUG_API("<-XARadioItfImpl_GetStereoMode"); return ret; @@ -426,8 +413,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_GetSignalStrength( (XAAdaptationGstCtx*)impl->adapCtx, pStrength ); + ret = XARadioItfAdapt_GetSignalStrength( pStrength ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_GetSignalStrength"); @@ -458,8 +444,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_Seek( (XAAdaptationGstCtx*)impl->adapCtx, upwards ); + ret = XARadioItfAdapt_Seek( (XAAdaptationMMFCtx*)impl->adapCtx, upwards ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_Seek"); @@ -488,8 +473,7 @@ return XA_RESULT_PARAMETER_INVALID; } - - ret = XARadioItfAdapt_StopSeeking( (XAAdaptationGstCtx*)impl->adapCtx ); + XARadioItfAdapt_StopSeeking( (XAAdaptationMMFCtx*)impl->adapCtx ); XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); DEBUG_API("<-XARadioItfImpl_StopSeeking"); @@ -497,165 +481,6 @@ } /** - * XAresult XARadioItfImpl_GetNumberOfPresets(XARadioItf self, XAuint32 * pNumPresets) - * Description: Returns the number of preset slots the device has for storing the presets. - **/ -XAresult XARadioItfImpl_GetNumberOfPresets(XARadioItf self, XAuint32 * pNumPresets) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARadioItfImpl* impl = GetImpl(self); - DEBUG_API("->XARadioItfImpl_GetNumberOfPresets"); - - if(!impl || !pNumPresets) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARadioItfImpl_GetNumberOfPresets"); - return XA_RESULT_PARAMETER_INVALID; - } - - *pNumPresets = impl->numOfPresets; - - DEBUG_API("<-XARadioItfImpl_GetNumberOfPresets"); - return ret; -} - -/** - * XAresult XARadioItfImpl_SetPreset(XARadioItf self, - * XAuint32 preset, - * XAuint32 freq, - * XAuint8 range, - * XAuint32 mode, - * const XAchar * name) - * Description: Sets the preset. - **/ -XAresult XARadioItfImpl_SetPreset(XARadioItf self, - XAuint32 preset, - XAuint32 freq, - XAuint8 range, - XAuint32 mode, - const XAchar * name) -{ - XAresult ret = XA_RESULT_SUCCESS; - XAboolean supported = XA_BOOLEAN_FALSE; - XAuint32 minFreq = 0; - XAuint32 maxFreq = 0; - XAuint32 freqInterval = 0; - - XARadioItfImpl* impl = GetImpl(self); - DEBUG_API("->XARadioItfImpl_SetPreset"); - - if(!impl || !name) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARadioItfImpl_SetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - ret = (*self)->IsFreqRangeSupported(self, range, &supported); - if(supported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid range */ - DEBUG_API("<-XARadioItfImpl_SetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - ret = (*self)->GetFreqRangeProperties(self, range, &minFreq, &maxFreq, &freqInterval); - if (freq < minFreq || freq > maxFreq || ((freq-minFreq)%freqInterval != 0) || - ret != XA_RESULT_SUCCESS) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid freq */ - DEBUG_API("<-XARadioItfImpl_SetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - if (preset < 1 || preset >= impl->numOfPresets || - mode > XA_STEREOMODE_AUTO || - strlen((char*)name) > RADIO_PRESET_NAME_MAX_LENGTH) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid preset, name or mode*/ - DEBUG_API("<-XARadioItfImpl_SetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - - - - free(impl->presets[preset].name); - - impl->presets[preset].freq = freq; - impl->presets[preset].range = range; - impl->presets[preset].stereoMode = mode; - impl->presets[preset].name = calloc(1, RADIO_PRESET_NAME_MAX_LENGTH+1); - strncpy( impl->presets[preset].name, (char*)name, RADIO_PRESET_NAME_MAX_LENGTH ); - - DEBUG_API("<-XARadioItfImpl_SetPreset"); - return ret; -} - -/** - * XAresult XARadioItfImpl_GetPreset(XARadioItf self, - * XAuint32 preset, - * XAuint32 * pFreq, - * XAuint8 * pRange, - * XAuint32 * pMode, - * XAchar * pName, - * XAuint16 * pNameLength) - * Description: Gets the settings stored into a preset. - **/ -XAresult XARadioItfImpl_GetPreset(XARadioItf self, - XAuint32 preset, - XAuint32 * pFreq, - XAuint8 * pRange, - XAuint32 * pMode, - XAchar * pName, - XAuint16 * pNameLength) -{ - /* Supporting CT tester the API signature is newer, but API functionality reflects required spec version. - Implement newer specification in terms of handling pName and pNameLength*/ - XAresult ret = XA_RESULT_SUCCESS; - XARadioItfImpl* impl = GetImpl(self); - DEBUG_API("->XARadioItfImpl_GetPreset"); - - if(!impl || !pFreq || !pRange || !pMode || !pNameLength) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARadioItfImpl_GetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - if (pName) - { - if(preset < 1 || preset > impl->numOfPresets) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARadioItfImpl_GetPreset"); - return XA_RESULT_PARAMETER_INVALID; - } - - *pFreq = impl->presets[preset].freq; - *pRange = impl->presets[preset].range; - *pMode = impl->presets[preset].stereoMode; - if(*pNameLengthpresets[preset].name, *pNameLength ); - ret = XA_RESULT_BUFFER_INSUFFICIENT; - } - else - { - strncpy( (char*)pName, impl->presets[preset].name, RADIO_PRESET_NAME_MAX_LENGTH ); - } - - } - /*Just adding some meaninful value, when supporting new spec this must be fetch the system*/ - *pNameLength = RADIO_PRESET_NAME_MAX_LENGTH; - - DEBUG_API("<-XARadioItfImpl_GetPreset"); - return ret; -} - -/** * XAresult XARadioItfImpl_RegisterRadioCallback(XARadioItf self, * xaRadioCallback callback, * void * pContext) @@ -695,7 +520,6 @@ **/ XARadioItfImpl* XARadioItfImpl_Create(XAAdaptationBaseCtx *adapCtx) { - XAuint16 index = 0; XARadioItfImpl *self = (XARadioItfImpl*) calloc(1,sizeof(XARadioItfImpl)); @@ -719,32 +543,15 @@ self->itf.GetSignalStrength = XARadioItfImpl_GetSignalStrength; self->itf.Seek = XARadioItfImpl_Seek; self->itf.StopSeeking = XARadioItfImpl_StopSeeking; - self->itf.GetNumberOfPresets = XARadioItfImpl_GetNumberOfPresets; - self->itf.SetPreset = XARadioItfImpl_SetPreset; - self->itf.GetPreset = XARadioItfImpl_GetPreset; self->itf.RegisterRadioCallback = XARadioItfImpl_RegisterRadioCallback; /* init variables */ self->squelch = XA_BOOLEAN_FALSE; self->stereoMode = RADIO_DEFAULT_STEREO_MODE; - - self->preset = 0; - self->numOfPresets = RADIO_NUM_OF_PRESETS; - - for (index = 0; index < self->numOfPresets; index++) - { - self->presets[index].freq = RADIO_DEFAULT_FREQ; - self->presets[index].range = RADIO_DEFAULT_FREQ_RANGE; - self->presets[index].stereoMode = RADIO_DEFAULT_STEREO_MODE; - self->presets[index].name = calloc(1, RADIO_PRESET_NAME_MAX_LENGTH+1); - strncpy( self->presets[index].name, RadioPresetDefaultName, RADIO_PRESET_NAME_MAX_LENGTH ); - } - self->callback = NULL; self->context = NULL; self->cbPtrToSelf = NULL; - self->adapCtx = adapCtx; XAAdaptationBase_AddEventHandler( adapCtx, &XARadioItfImpl_AdaptCb, XA_RADIOITFEVENTS, self ); @@ -762,20 +569,11 @@ **/ void XARadioItfImpl_Free(XARadioItfImpl* self) { - XAuint16 index = 0; DEBUG_API("->XARadioItfImpl_Free"); XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSRadio); - - XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XARadioItfImpl_AdaptCb ); - XARadioItfAdapt_Free(self->adapCtx); - - for (index = 0; index < self->numOfPresets; index++) - { - free(self->presets[index].name); - } - + XARadioItfAdapt_Free(); assert(self==self->self); free(self); @@ -789,6 +587,9 @@ void XARadioItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event ) { XARadioItfImpl* impl =(XARadioItfImpl*)pHandlerCtx; + XAuint32 eventData = 0; + XAboolean eventBoolean = XA_BOOLEAN_FALSE; + DEBUG_API("->XARadioItfimpl_AdaptCb"); if(!impl) @@ -801,19 +602,37 @@ if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_CHANGED && impl->callback ) { - DEBUG_API("Frequency changed in adaptation"); - impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_CHANGED, 0, XA_BOOLEAN_FALSE ); + DEBUG_API("Frequency changed in adaptation"); + eventData = *(XAuint32*)event->data; + impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_CHANGED, eventData, eventBoolean ); } + else if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_RANGE_CHANGED && impl->callback ) { DEBUG_API("Frequency range changed in adaptation"); - impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED, 0, XA_BOOLEAN_FALSE ); + + impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED, eventData, eventBoolean ); } + else if( event->eventid == XA_ADAPT_RADIO_SEEK_COMPLETE && impl->callback ) { DEBUG_API("Seek complete in adaptation"); - impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SEEK_COMPLETED, 0, XA_BOOLEAN_FALSE ); + eventBoolean = *(XAboolean*)event->data; + impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SEEK_COMPLETED, eventData, eventBoolean ); } + + else if( event->eventid == XA_ADAPT_RADIO_STEREO_STATUS_CHANGED && impl->callback ) + { + DEBUG_API("Stereo status change in adaptation"); + eventBoolean = *(XAboolean*)event->data; + impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_STEREO_STATUS_CHANGED, eventData, eventBoolean ); + } + + else if( event->eventid == XA_ADAPT_RADIO_SIGNAL_STRENGTH_CHANGED && impl->callback ) + { + DEBUG_API("Signal Strength Change in adaptation"); + impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SIGNAL_STRENGTH_CHANGED, eventData, eventBoolean ); + } else { /* do nothing */ @@ -821,4 +640,3 @@ DEBUG_API("<-XARadioItfimpl_AdaptCb"); } -