174 /* invalid parameter */ |
172 /* invalid parameter */ |
175 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
173 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
176 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
174 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
177 return XA_RESULT_PARAMETER_INVALID; |
175 return XA_RESULT_PARAMETER_INVALID; |
178 } |
176 } |
179 |
177 ret = XARadioItfAdapt_IsFreqRangeSupported( range, &isSupported ); |
180 ret = XARadioItfAdapt_IsFreqRangeSupported( (XAAdaptationGstCtx*)impl->adapCtx, range, &isSupported ); |
|
181 |
178 |
182 if (isSupported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS) |
179 if (isSupported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS) |
183 { |
180 { |
184 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
181 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
185 /* invalid parameter */ |
182 /* invalid parameter */ |
186 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
183 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
187 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
184 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
188 return XA_RESULT_PARAMETER_INVALID; |
185 return XA_RESULT_PARAMETER_INVALID; |
189 } |
186 } |
190 |
187 |
191 |
188 ret = XARadioItfAdapt_GetFreqRangeProperties( (XAAdaptationMMFCtx*)impl->adapCtx, |
192 ret = XARadioItfAdapt_GetFreqRangeProperties( (XAAdaptationGstCtx*)impl->adapCtx, |
189 range, pMinFreq, pMaxFreq ); |
193 range, pMinFreq, pMaxFreq, pFreqInterval ); |
|
194 |
190 |
195 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
191 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
196 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
192 DEBUG_API("<-XARadioItfImpl_GetFreqRangeProperties"); |
197 return ret; |
193 return ret; |
198 } |
194 } |
355 XAresult ret = XA_RESULT_SUCCESS; |
346 XAresult ret = XA_RESULT_SUCCESS; |
356 XARadioItfImpl* impl = GetImpl(self); |
347 XARadioItfImpl* impl = GetImpl(self); |
357 DEBUG_API("->XARadioItfImpl_SetStereoMode"); |
348 DEBUG_API("->XARadioItfImpl_SetStereoMode"); |
358 XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); |
349 XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); |
359 |
350 |
360 if(!impl || mode > XA_STEREOMODE_AUTO ) |
351 if( !impl || mode > XA_STEREOMODE_AUTO ) |
361 { |
352 { |
362 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
353 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
363 /* invalid parameter */ |
354 /* invalid parameter */ |
364 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
355 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
365 DEBUG_API("<-XARadioItfImpl_SetStereoMode"); |
356 DEBUG_API("<-XARadioItfImpl_SetStereoMode"); |
366 return XA_RESULT_PARAMETER_INVALID; |
357 return XA_RESULT_PARAMETER_INVALID; |
367 } |
358 } |
368 |
|
369 if ( impl->stereoMode != mode) |
359 if ( impl->stereoMode != mode) |
370 { |
360 { |
371 |
361 ret = XARadioItfAdapt_SetStereoMode( (XAAdaptationMMFCtx*)impl->adapCtx, mode ); |
372 ret = XARadioItfAdapt_SetStereoMode( (XAAdaptationGstCtx*)impl->adapCtx, mode ); |
362 if ( ret == XA_RESULT_SUCCESS ) |
373 |
|
374 if ( ret == XA_RESULT_SUCCESS ) |
|
375 { |
363 { |
376 impl->stereoMode = mode; |
364 impl->stereoMode = mode; |
377 } |
365 } |
378 } |
366 } |
379 |
|
380 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
367 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
381 DEBUG_API("<-XARadioItfImpl_SetStereoMode"); |
368 DEBUG_API("<-XARadioItfImpl_SetStereoMode"); |
382 return ret; |
369 return ret; |
383 } |
370 } |
384 |
371 |
486 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
471 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
487 DEBUG_API("<-XARadioItfImpl_StopSeeking"); |
472 DEBUG_API("<-XARadioItfImpl_StopSeeking"); |
488 return XA_RESULT_PARAMETER_INVALID; |
473 return XA_RESULT_PARAMETER_INVALID; |
489 } |
474 } |
490 |
475 |
491 |
476 XARadioItfAdapt_StopSeeking( (XAAdaptationMMFCtx*)impl->adapCtx ); |
492 ret = XARadioItfAdapt_StopSeeking( (XAAdaptationGstCtx*)impl->adapCtx ); |
|
493 |
477 |
494 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
478 XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); |
495 DEBUG_API("<-XARadioItfImpl_StopSeeking"); |
479 DEBUG_API("<-XARadioItfImpl_StopSeeking"); |
496 return ret; |
|
497 } |
|
498 |
|
499 /** |
|
500 * XAresult XARadioItfImpl_GetNumberOfPresets(XARadioItf self, XAuint32 * pNumPresets) |
|
501 * Description: Returns the number of preset slots the device has for storing the presets. |
|
502 **/ |
|
503 XAresult XARadioItfImpl_GetNumberOfPresets(XARadioItf self, XAuint32 * pNumPresets) |
|
504 { |
|
505 XAresult ret = XA_RESULT_SUCCESS; |
|
506 XARadioItfImpl* impl = GetImpl(self); |
|
507 DEBUG_API("->XARadioItfImpl_GetNumberOfPresets"); |
|
508 |
|
509 if(!impl || !pNumPresets) |
|
510 { |
|
511 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
512 /* invalid parameter */ |
|
513 DEBUG_API("<-XARadioItfImpl_GetNumberOfPresets"); |
|
514 return XA_RESULT_PARAMETER_INVALID; |
|
515 } |
|
516 |
|
517 *pNumPresets = impl->numOfPresets; |
|
518 |
|
519 DEBUG_API("<-XARadioItfImpl_GetNumberOfPresets"); |
|
520 return ret; |
|
521 } |
|
522 |
|
523 /** |
|
524 * XAresult XARadioItfImpl_SetPreset(XARadioItf self, |
|
525 * XAuint32 preset, |
|
526 * XAuint32 freq, |
|
527 * XAuint8 range, |
|
528 * XAuint32 mode, |
|
529 * const XAchar * name) |
|
530 * Description: Sets the preset. |
|
531 **/ |
|
532 XAresult XARadioItfImpl_SetPreset(XARadioItf self, |
|
533 XAuint32 preset, |
|
534 XAuint32 freq, |
|
535 XAuint8 range, |
|
536 XAuint32 mode, |
|
537 const XAchar * name) |
|
538 { |
|
539 XAresult ret = XA_RESULT_SUCCESS; |
|
540 XAboolean supported = XA_BOOLEAN_FALSE; |
|
541 XAuint32 minFreq = 0; |
|
542 XAuint32 maxFreq = 0; |
|
543 XAuint32 freqInterval = 0; |
|
544 |
|
545 XARadioItfImpl* impl = GetImpl(self); |
|
546 DEBUG_API("->XARadioItfImpl_SetPreset"); |
|
547 |
|
548 if(!impl || !name) |
|
549 { |
|
550 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
551 /* invalid parameter */ |
|
552 DEBUG_API("<-XARadioItfImpl_SetPreset"); |
|
553 return XA_RESULT_PARAMETER_INVALID; |
|
554 } |
|
555 ret = (*self)->IsFreqRangeSupported(self, range, &supported); |
|
556 if(supported != XA_BOOLEAN_TRUE || ret != XA_RESULT_SUCCESS) |
|
557 { |
|
558 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
559 /* invalid range */ |
|
560 DEBUG_API("<-XARadioItfImpl_SetPreset"); |
|
561 return XA_RESULT_PARAMETER_INVALID; |
|
562 } |
|
563 ret = (*self)->GetFreqRangeProperties(self, range, &minFreq, &maxFreq, &freqInterval); |
|
564 if (freq < minFreq || freq > maxFreq || ((freq-minFreq)%freqInterval != 0) || |
|
565 ret != XA_RESULT_SUCCESS) |
|
566 { |
|
567 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
568 /* invalid freq */ |
|
569 DEBUG_API("<-XARadioItfImpl_SetPreset"); |
|
570 return XA_RESULT_PARAMETER_INVALID; |
|
571 } |
|
572 if (preset < 1 || preset >= impl->numOfPresets || |
|
573 mode > XA_STEREOMODE_AUTO || |
|
574 strlen((char*)name) > RADIO_PRESET_NAME_MAX_LENGTH) |
|
575 { |
|
576 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
577 /* invalid preset, name or mode*/ |
|
578 DEBUG_API("<-XARadioItfImpl_SetPreset"); |
|
579 return XA_RESULT_PARAMETER_INVALID; |
|
580 } |
|
581 |
|
582 |
|
583 |
|
584 free(impl->presets[preset].name); |
|
585 |
|
586 impl->presets[preset].freq = freq; |
|
587 impl->presets[preset].range = range; |
|
588 impl->presets[preset].stereoMode = mode; |
|
589 impl->presets[preset].name = calloc(1, RADIO_PRESET_NAME_MAX_LENGTH+1); |
|
590 strncpy( impl->presets[preset].name, (char*)name, RADIO_PRESET_NAME_MAX_LENGTH ); |
|
591 |
|
592 DEBUG_API("<-XARadioItfImpl_SetPreset"); |
|
593 return ret; |
|
594 } |
|
595 |
|
596 /** |
|
597 * XAresult XARadioItfImpl_GetPreset(XARadioItf self, |
|
598 * XAuint32 preset, |
|
599 * XAuint32 * pFreq, |
|
600 * XAuint8 * pRange, |
|
601 * XAuint32 * pMode, |
|
602 * XAchar * pName, |
|
603 * XAuint16 * pNameLength) |
|
604 * Description: Gets the settings stored into a preset. |
|
605 **/ |
|
606 XAresult XARadioItfImpl_GetPreset(XARadioItf self, |
|
607 XAuint32 preset, |
|
608 XAuint32 * pFreq, |
|
609 XAuint8 * pRange, |
|
610 XAuint32 * pMode, |
|
611 XAchar * pName, |
|
612 XAuint16 * pNameLength) |
|
613 { |
|
614 /* Supporting CT tester the API signature is newer, but API functionality reflects required spec version. |
|
615 Implement newer specification in terms of handling pName and pNameLength*/ |
|
616 XAresult ret = XA_RESULT_SUCCESS; |
|
617 XARadioItfImpl* impl = GetImpl(self); |
|
618 DEBUG_API("->XARadioItfImpl_GetPreset"); |
|
619 |
|
620 if(!impl || !pFreq || !pRange || !pMode || !pNameLength) |
|
621 { |
|
622 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
623 /* invalid parameter */ |
|
624 DEBUG_API("<-XARadioItfImpl_GetPreset"); |
|
625 return XA_RESULT_PARAMETER_INVALID; |
|
626 } |
|
627 if (pName) |
|
628 { |
|
629 if(preset < 1 || preset > impl->numOfPresets) |
|
630 { |
|
631 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
|
632 /* invalid parameter */ |
|
633 DEBUG_API("<-XARadioItfImpl_GetPreset"); |
|
634 return XA_RESULT_PARAMETER_INVALID; |
|
635 } |
|
636 |
|
637 *pFreq = impl->presets[preset].freq; |
|
638 *pRange = impl->presets[preset].range; |
|
639 *pMode = impl->presets[preset].stereoMode; |
|
640 if(*pNameLength<RADIO_PRESET_NAME_MAX_LENGTH) |
|
641 { |
|
642 strncpy( (char*)pName, impl->presets[preset].name, *pNameLength ); |
|
643 ret = XA_RESULT_BUFFER_INSUFFICIENT; |
|
644 } |
|
645 else |
|
646 { |
|
647 strncpy( (char*)pName, impl->presets[preset].name, RADIO_PRESET_NAME_MAX_LENGTH ); |
|
648 } |
|
649 |
|
650 } |
|
651 /*Just adding some meaninful value, when supporting new spec this must be fetch the system*/ |
|
652 *pNameLength = RADIO_PRESET_NAME_MAX_LENGTH; |
|
653 |
|
654 DEBUG_API("<-XARadioItfImpl_GetPreset"); |
|
655 return ret; |
480 return ret; |
656 } |
481 } |
657 |
482 |
658 /** |
483 /** |
659 * XAresult XARadioItfImpl_RegisterRadioCallback(XARadioItf self, |
484 * XAresult XARadioItfImpl_RegisterRadioCallback(XARadioItf self, |
717 self->itf.SetStereoMode = XARadioItfImpl_SetStereoMode; |
541 self->itf.SetStereoMode = XARadioItfImpl_SetStereoMode; |
718 self->itf.GetStereoMode = XARadioItfImpl_GetStereoMode; |
542 self->itf.GetStereoMode = XARadioItfImpl_GetStereoMode; |
719 self->itf.GetSignalStrength = XARadioItfImpl_GetSignalStrength; |
543 self->itf.GetSignalStrength = XARadioItfImpl_GetSignalStrength; |
720 self->itf.Seek = XARadioItfImpl_Seek; |
544 self->itf.Seek = XARadioItfImpl_Seek; |
721 self->itf.StopSeeking = XARadioItfImpl_StopSeeking; |
545 self->itf.StopSeeking = XARadioItfImpl_StopSeeking; |
722 self->itf.GetNumberOfPresets = XARadioItfImpl_GetNumberOfPresets; |
|
723 self->itf.SetPreset = XARadioItfImpl_SetPreset; |
|
724 self->itf.GetPreset = XARadioItfImpl_GetPreset; |
|
725 self->itf.RegisterRadioCallback = XARadioItfImpl_RegisterRadioCallback; |
546 self->itf.RegisterRadioCallback = XARadioItfImpl_RegisterRadioCallback; |
726 |
547 |
727 /* init variables */ |
548 /* init variables */ |
728 |
549 |
729 self->squelch = XA_BOOLEAN_FALSE; |
550 self->squelch = XA_BOOLEAN_FALSE; |
730 self->stereoMode = RADIO_DEFAULT_STEREO_MODE; |
551 self->stereoMode = RADIO_DEFAULT_STEREO_MODE; |
731 |
|
732 self->preset = 0; |
|
733 self->numOfPresets = RADIO_NUM_OF_PRESETS; |
|
734 |
|
735 for (index = 0; index < self->numOfPresets; index++) |
|
736 { |
|
737 self->presets[index].freq = RADIO_DEFAULT_FREQ; |
|
738 self->presets[index].range = RADIO_DEFAULT_FREQ_RANGE; |
|
739 self->presets[index].stereoMode = RADIO_DEFAULT_STEREO_MODE; |
|
740 self->presets[index].name = calloc(1, RADIO_PRESET_NAME_MAX_LENGTH+1); |
|
741 strncpy( self->presets[index].name, RadioPresetDefaultName, RADIO_PRESET_NAME_MAX_LENGTH ); |
|
742 } |
|
743 |
|
744 self->callback = NULL; |
552 self->callback = NULL; |
745 self->context = NULL; |
553 self->context = NULL; |
746 self->cbPtrToSelf = NULL; |
554 self->cbPtrToSelf = NULL; |
747 |
|
748 self->adapCtx = adapCtx; |
555 self->adapCtx = adapCtx; |
749 |
556 |
750 XAAdaptationBase_AddEventHandler( adapCtx, &XARadioItfImpl_AdaptCb, XA_RADIOITFEVENTS, self ); |
557 XAAdaptationBase_AddEventHandler( adapCtx, &XARadioItfImpl_AdaptCb, XA_RADIOITFEVENTS, self ); |
751 |
558 |
752 self->self = self; |
559 self->self = self; |
760 * void XARadioItfImpl_Free(XARadioItfImpl* self) |
567 * void XARadioItfImpl_Free(XARadioItfImpl* self) |
761 * Description: Free all resources reserved at XARadioItfImpl_Create |
568 * Description: Free all resources reserved at XARadioItfImpl_Create |
762 **/ |
569 **/ |
763 void XARadioItfImpl_Free(XARadioItfImpl* self) |
570 void XARadioItfImpl_Free(XARadioItfImpl* self) |
764 { |
571 { |
765 XAuint16 index = 0; |
|
766 DEBUG_API("->XARadioItfImpl_Free"); |
572 DEBUG_API("->XARadioItfImpl_Free"); |
767 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSRadio); |
573 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSRadio); |
768 |
|
769 |
|
770 XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XARadioItfImpl_AdaptCb ); |
574 XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XARadioItfImpl_AdaptCb ); |
771 |
575 |
772 XARadioItfAdapt_Free(self->adapCtx); |
576 XARadioItfAdapt_Free(); |
773 |
|
774 for (index = 0; index < self->numOfPresets; index++) |
|
775 { |
|
776 free(self->presets[index].name); |
|
777 } |
|
778 |
|
779 assert(self==self->self); |
577 assert(self==self->self); |
780 free(self); |
578 free(self); |
781 |
579 |
782 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSRadio); |
580 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSRadio); |
783 DEBUG_API("<-XARadioItfImpl_Free"); |
581 DEBUG_API("<-XARadioItfImpl_Free"); |
799 } |
600 } |
800 assert(event); |
601 assert(event); |
801 |
602 |
802 if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_CHANGED && impl->callback ) |
603 if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_CHANGED && impl->callback ) |
803 { |
604 { |
804 DEBUG_API("Frequency changed in adaptation"); |
605 DEBUG_API("Frequency changed in adaptation"); |
805 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_CHANGED, 0, XA_BOOLEAN_FALSE ); |
606 eventData = *(XAuint32*)event->data; |
806 } |
607 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_CHANGED, eventData, eventBoolean ); |
|
608 } |
|
609 |
807 else if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_RANGE_CHANGED && impl->callback ) |
610 else if( event->eventid == XA_ADAPT_RADIO_FREQUENCY_RANGE_CHANGED && impl->callback ) |
808 { |
611 { |
809 DEBUG_API("Frequency range changed in adaptation"); |
612 DEBUG_API("Frequency range changed in adaptation"); |
810 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED, 0, XA_BOOLEAN_FALSE ); |
613 |
811 } |
614 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED, eventData, eventBoolean ); |
|
615 } |
|
616 |
812 else if( event->eventid == XA_ADAPT_RADIO_SEEK_COMPLETE && impl->callback ) |
617 else if( event->eventid == XA_ADAPT_RADIO_SEEK_COMPLETE && impl->callback ) |
813 { |
618 { |
814 DEBUG_API("Seek complete in adaptation"); |
619 DEBUG_API("Seek complete in adaptation"); |
815 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SEEK_COMPLETED, 0, XA_BOOLEAN_FALSE ); |
620 eventBoolean = *(XAboolean*)event->data; |
816 } |
621 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SEEK_COMPLETED, eventData, eventBoolean ); |
|
622 } |
|
623 |
|
624 else if( event->eventid == XA_ADAPT_RADIO_STEREO_STATUS_CHANGED && impl->callback ) |
|
625 { |
|
626 DEBUG_API("Stereo status change in adaptation"); |
|
627 eventBoolean = *(XAboolean*)event->data; |
|
628 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_STEREO_STATUS_CHANGED, eventData, eventBoolean ); |
|
629 } |
|
630 |
|
631 else if( event->eventid == XA_ADAPT_RADIO_SIGNAL_STRENGTH_CHANGED && impl->callback ) |
|
632 { |
|
633 DEBUG_API("Signal Strength Change in adaptation"); |
|
634 impl->callback( impl->cbPtrToSelf, impl->context, XA_RADIO_EVENT_SIGNAL_STRENGTH_CHANGED, eventData, eventBoolean ); |
|
635 } |
817 else |
636 else |
818 { |
637 { |
819 /* do nothing */ |
638 /* do nothing */ |
820 } |
639 } |
821 DEBUG_API("<-XARadioItfimpl_AdaptCb"); |
640 DEBUG_API("<-XARadioItfimpl_AdaptCb"); |
822 } |
641 } |
823 |
642 |
824 |
|