diff -r 94fc26b6e006 -r 1fa3fb47b1e3 khronosfws/openmax_al/src/radio/xardsitf.c --- a/khronosfws/openmax_al/src/radio/xardsitf.c Tue Jul 06 14:50:35 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,881 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include -#include -#include -#include "xardsitf.h" -#include "xardsitfadaptation.h" -#include "xathreadsafety.h" -#include "xaadaptationgst.h" -/** - * XARDSItfImpl* GetImpl(XARDSItf self) - * Description: Validated interface pointer and cast it to implementations pointer. - **/ -static XARDSItfImpl* GetImpl(XARDSItf self) -{ - if(self) - { - XARDSItfImpl *impl = (XARDSItfImpl*)(*self); - if(impl && impl == impl->self) - { - return impl; - } - } - return NULL; -} - -/** - * Base interface XARDSItf implementation - */ - -/** - * XAresult XARDSItfImpl_QueryRDSSignal(XARDSItf self, XAboolean * isSignal) - * Description: Returns the status of the RDS reception. - **/ -XAresult XARDSItfImpl_QueryRDSSignal(XARDSItf self, XAboolean * isSignal) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_QueryRDSSignal"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl || !isSignal) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_QueryRDSSignal"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_QueryRDSSignal((XAAdaptationGstCtx*)impl->adapCtx, isSignal); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_QueryRDSSignal"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetProgrammeServiceName(XARDSItf self, XAchar * ps) - * Description: Gets the current Programme Service name (PS). - **/ -XAresult XARDSItfImpl_GetProgrammeServiceName(XARDSItf self, XAchar * ps) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetProgrammeServiceName"); - if(!impl || !ps) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetProgrammeServiceName"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetProgrammeServiceName((XAAdaptationGstCtx*)impl->adapCtx, ps); - - DEBUG_API("<-XARDSItfImpl_GetProgrammeServiceName"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetRadioText(XARDSItf self, XAchar * rt) - * Description: Gets the current Radio Text (RT). - **/ -XAresult XARDSItfImpl_GetRadioText(XARDSItf self, XAchar * rt) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetRadioText"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !rt) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetRadioText"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetRadioText((XAAdaptationGstCtx*)impl->adapCtx, rt); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetRadioText"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetRadioTextPlus(XARDSItf self, - * XAuint8 contentType, - * XAchar * informationElement, - * XAchar * descriptor, - * XAuint8 * descriptorContentType) - * Description: Gets the current Radio Text+ (RT+) information element based - * on the given class code. - **/ -XAresult XARDSItfImpl_GetRadioTextPlus(XARDSItf self, - XAuint8 contentType, - XAchar * informationElement, - XAchar * descriptor, - XAuint8 * descriptorContentType) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetRadioTextPlus"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || contentType < XA_RDSRTPLUS_ITEMTITLE || contentType > XA_RDSRTPLUS_GETDATA - || !informationElement || !descriptor || !descriptorContentType) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetRadioTextPlus"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_GetRadioTextPlus((XAAdaptationGstCtx*)impl->adapCtx, contentType, informationElement, - // descriptor, descriptorContentType); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetRadioTextPlus"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetProgrammeType(XARDSItf self, XAuint32 * pty) - * Description: Gets the current Programme TYpe (PTY) as short. The - * return value zero corresponds to No Programme Type - * or to undefined type. Please note that PTYs in RBDS - * differ from the ones in RDS. - **/ -XAresult XARDSItfImpl_GetProgrammeType(XARDSItf self, XAuint32 * pty) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetProgrammeType"); - - if(!impl || !pty) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetProgrammeType"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetProgrammeType((XAAdaptationGstCtx*)impl->adapCtx, pty); - - DEBUG_API("<-XARDSItfImpl_GetProgrammeType"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetProgrammeTypeString(XARDSItf self, - * XAboolean isLengthMax16, - * XAchar * pty) - * Description: Gets the current Programme TYpe (PTY) as a String with - * the maximum of 8 or 16 characters in English (char set TBD) - * as defined in RDS and RBDS specifications. Please note - * that PTYs in RBDS differ from the ones in RDS. - **/ -XAresult XARDSItfImpl_GetProgrammeTypeString(XARDSItf self, - XAboolean isLengthMax16, - XAchar * pty) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetProgrammeTypeString"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !pty) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetProgrammeTypeString"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetProgrammeTypeString((XAAdaptationGstCtx*)impl->adapCtx, isLengthMax16, pty); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetProgrammeTypeString"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetProgrammeIdentificationCode(XARDSItf self, XAint16 * pi) - * Description: Gets the current Programme Identification code (PI). The PI is not - * intended for directly displaying to the end user, but instead to - * identify uniquely a programme. This can be used to detect that two - * frequencies are transmitting the same programme. - **/ -XAresult XARDSItfImpl_GetProgrammeIdentificationCode(XARDSItf self, XAint16 * pi) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetProgrammeIdentificationCode"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !pi) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetProgrammeIdentificationCode"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetProgrammeIdentificationCode((XAAdaptationGstCtx*)impl->adapCtx, pi); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetProgrammeIdentificationCode"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetClockTime(XARDSItf self, XAtime * dateAndTime) - * Description: Gets the current Clock Time and date (CT). - **/ -XAresult XARDSItfImpl_GetClockTime(XARDSItf self, XAtime * dateAndTime) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetClockTime"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !dateAndTime) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetClockTime"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_GetClockTime((XAAdaptationGstCtx*)impl->adapCtx, dateAndTime); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetClockTime"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetTrafficAnnouncement(XARDSItf self, XAboolean * ta) - * Description: Gets the current status of the Traffic Announcement (TA) switch. - **/ -XAresult XARDSItfImpl_GetTrafficAnnouncement(XARDSItf self, XAboolean * ta) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetTrafficAnnouncement"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !ta) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetTrafficAnnouncement"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetTrafficAnnouncement((XAAdaptationGstCtx*)impl->adapCtx, ta); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetTrafficAnnouncement"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetTrafficProgramme(XARDSItf self, XAboolean * tp) - * Description: Gets the current status of the Traffic Programme (TP) switch. - **/ -XAresult XARDSItfImpl_GetTrafficProgramme(XARDSItf self, XAboolean * tp) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetTrafficProgramme"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl || !tp) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetTrafficProgramme"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetTrafficProgramme((XAAdaptationGstCtx*)impl->adapCtx, tp); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetTrafficProgramme"); - return ret; -} - -/** - * XAresult XARDSItfImpl_SeekByProgrammeType(XARDSItf self, - * XAuint32 pty, - * XAboolean upwards) - * Description: Seeks for the frequency sending the given Programme TYpe (PTY). - * If the end of the tuner’s frequency band is reached before the - * given Programme TYpe is found, the scan continues from the other - * end until the given Programme TYpe is found or the original frequency - * is reached. Asynchronous - tuner callback xaRadioCallback() and - * XA_RADIO_EVENT_SEEK_COMPLETED is used for notifying of the result. - * StopSeeking() method of XARadioItf can be used to abort an ongoing seek. - **/ -XAresult XARDSItfImpl_SeekByProgrammeType(XARDSItf self, - XAuint32 pty, - XAboolean upwards) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_SeekByProgrammeType"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl || pty > XA_RDSPROGRAMMETYPE_RDSPTY_ALARM) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SeekByProgrammeType"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_SeekByProgrammeType((XAAdaptationGstCtx*)impl->adapCtx, pty, upwards); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SeekByProgrammeType"); - return ret; -} - -/** - * XAresult XARDSItfImpl_SeekTrafficAnnouncement(XARDSItf self, XAboolean upwards) - * Description: Seeks for a frequency sending Traffic Announcement (TA). If the end - * of the tuner’s frequency band is reached before a Traffic Announcement - * is found, the scan continues from the other end until a Traffic - * Announcement is found or the original frequency is reached. Asynchronous - * - tuner callback xaRadioCallback() and XA_RADIO_EVENT_SEEK_COMPLETED - * is used for notifying of the result. StopSeeking() method of XARadioItf - * can be used to abort an ongoing seek. - **/ -XAresult XARDSItfImpl_SeekTrafficAnnouncement(XARDSItf self, XAboolean upwards) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_SeekTrafficAnnouncement"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SeekTrafficAnnouncement"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_SeekTrafficAnnouncement((XAAdaptationGstCtx*)impl->adapCtx, upwards); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SeekTrafficAnnouncement"); - return ret; -} - -/** - * XAresult XARDSItfImpl_SeekTrafficProgramme(XARDSItf self, XAboolean upwards) - * Description: Seeks for a frequency sending Traffic Programme (TP). If the end - * of the tuner’s frequency band is reached before a Traffic Programme - * is found, the scan continues from the other end until a Traffic - * Programme is found or the original frequency is reached. Asynchronous - * - tuner callback xaRadioCallback() and XA_RADIO_EVENT_SEEK_COMPLETED - * is used for notifying of the result. StopSeeking() method of XARadioItf - * can be used to abort an ongoing seek. - **/ -XAresult XARDSItfImpl_SeekTrafficProgramme(XARDSItf self, XAboolean upwards) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_SeekTrafficProgramme"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SeekTrafficProgramme"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_SeekTrafficProgramme((XAAdaptationGstCtx*)impl->adapCtx, upwards); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SeekTrafficProgramme"); - return ret; -} - -/** - * XAresult XARDSItfImpl_SetAutomaticSwitching(XARDSItf self, XAboolean automatic) - * Description: Sets the automatic switching of the transmitter in the case of a - * stronger transmitter with the same PI presence. Based on AF and/or - * EON fields. Please note that NOT ALL IMPLEMENTATIONS SUPPORT THIS - * FUNCTIONALITY. - **/ -XAresult XARDSItfImpl_SetAutomaticSwitching(XARDSItf self, XAboolean automatic) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_SetAutomaticSwitching"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SetAutomaticSwitching"); - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_SetAutomaticSwitching((XAAdaptationGstCtx*)impl->adapCtx, automatic); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SetAutomaticSwitching"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetAutomaticSwitching(XARDSItf self, XAboolean * automatic) - * Description: Gets the mode of the automatic switching of the transmitter in - * case of a stronger transmitter with the same PI presence. - **/ -XAresult XARDSItfImpl_GetAutomaticSwitching(XARDSItf self, XAboolean * automatic) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetAutomaticSwitching"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl || !automatic) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetAutomaticSwitching"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_GetAutomaticSwitching((XAAdaptationGstCtx*)impl->adapCtx, automatic); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetAutomaticSwitching"); - return ret; -} - -/** - * XAresult XARDSItfImpl_SetAutomaticTrafficAnnouncement(XARDSItf self, XAboolean automatic) - * Description: Sets the automatic switching of the program in case of the presence - * of Traffic Announcement in another program. Based on TP and TA fields. - * Please note that NOT ALL IMPLEMENTATIONS SUPPORT THIS FUNCTIONALITY. - **/ -XAresult XARDSItfImpl_SetAutomaticTrafficAnnouncement(XARDSItf self, XAboolean automatic) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_SetAutomaticTrafficAnnouncement"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SetAutomaticTrafficAnnouncement"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_SetAutomaticTrafficAnnouncement((XAAdaptationGstCtx*)impl->adapCtx, automatic); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SetAutomaticTrafficAnnouncement"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetAutomaticTrafficAnnouncement(XARDSItf self, XAboolean * automatic) - * Description: Gets the mode of the automatic switching of the program in case of - * the presence of Traffic Announcement in another program. Based on - * TP and TA fields. - **/ -XAresult XARDSItfImpl_GetAutomaticTrafficAnnouncement(XARDSItf self, XAboolean * automatic) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetAutomaticTrafficAnnouncement"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl || !automatic) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetAutomaticTrafficAnnouncement"); - - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_GetAutomaticTrafficAnnouncement((XAAdaptationGstCtx*)impl->adapCtx, automatic); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetAutomaticTrafficAnnouncement"); - return ret; -} - -/** - * XAresult XARDSItfImpl_GetODAGroup(XARDSItf self, - * XAint16 AID, - * xaGetODAGroupCallback callback, - * void * pContext) - * Description: Returns asynchronously via callback (xaGetODAGroupCallback()) - * the application Group and the message bits concerning the given - * ODA (Open Data Application). ODA is a mechanism that a broadcaster - * can use to transfer data that is not explicitly specified in the RDS - * standard. Open Data Applications are subject to a registration process. - * Transmission protocols used by ODAs may be public or private. See RDS - * Forum web page (http://www.rds.org.uk/)for details. - **/ -XAresult XARDSItfImpl_GetODAGroup(XARDSItf self, - XAuint16 AID, - xaGetODAGroupCallback callback, - void * pContext) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_GetODAGroup"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_GetODAGroup"); - return XA_RESULT_PARAMETER_INVALID; - } - - impl->odaGroupCallback = callback; - impl->odaGroupContext = pContext; - impl->odaGroupCbPtrToSelf = self; - - if (callback) - { - - // ret = XARDSItfAdapt_GetODAGroup((XAAdaptationGstCtx*)impl->adapCtx, AID); - - } - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_GetODAGroup"); - - return ret; -} - -/** - * XAresult XARDSItfImpl_SubscribeODAGroup(XARDSItf self, - * XAint16 group, - * XAboolean useErrorCorrection) - * Description: Subscribes the given ODA group. If the given group was already - * subscribed, this call doesn’t do anything. Only new data in groups - * that have been subscribed will cause a newODA callback. - **/ -XAresult XARDSItfImpl_SubscribeODAGroup(XARDSItf self, - XAint16 group, - XAboolean useErrorCorrection) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - - DEBUG_API("->XARDSItfImpl_SubscribeODAGroup"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_SubscribeODAGroup"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// ret = XARDSItfAdapt_SubscribeODAGroup((XAAdaptationGstCtx*)impl->adapCtx, group, useErrorCorrection); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_SubscribeODAGroup"); - return ret; -} - -/** - * XAresult XARDSItfImpl_UnsubscribeODAGroup(XARDSItf self, XAint16 group) - * Description: Unsubscribes the given ODA group. If the given group has not - * been subscribed, this doesn’t do anything. Only new data in - * groups that have been subscribed will cause a newODA callback. - **/ -XAresult XARDSItfImpl_UnsubscribeODAGroup(XARDSItf self, XAint16 group) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - - DEBUG_API("->XARDSItfImpl_UnsubscribeODAGroup"); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - - if(!impl) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_UnsubscribeODAGroup"); - - return XA_RESULT_PARAMETER_INVALID; - } - - - // ret = XARDSItfAdapt_UnsubscribeODAGroup((XAAdaptationGstCtx*)impl->adapCtx, group); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_UnsubscribeODAGroup"); - return ret; -} - -/** - * XAresult XARDSItfImpl_ListODAGroupSubscriptions(XARDSItf self, - * XAint16* pGroups, - * XAuint32* pLength); - * Description: Lists ODA groups that are currently subscribed. - **/ -XAresult XARDSItfImpl_ListODAGroupSubscriptions(XARDSItf self, - XAint16* pGroups, - XAuint32* pLength) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - XA_IMPL_THREAD_SAFETY_ENTRY(XATSRadio); - DEBUG_API("->XARDSItfImpl_ListODAGroupSubscriptions"); - - if(!impl || !pLength) - { - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_ListODAGroupSubscriptions"); - return XA_RESULT_PARAMETER_INVALID; - } - - -// XARDSItfAdapt_ListODAGroupSubscriptions((XAAdaptationGstCtx*)impl->adapCtx, pGroups, pLength); - - XA_IMPL_THREAD_SAFETY_EXIT(XATSRadio); - DEBUG_API("<-XARDSItfImpl_ListODAGroupSubscriptions"); - return ret; -} - -/** - * XAresult XARDSItfImpl_RegisterRDSCallback(XARDSItf self, - * xaRDSCallback callback, - * void * pContext) - * Description: Sets or clears the xaNewODADataCallback(). xaNewODADataCallback() - * is used tranfer the actual ODA data to the application. - **/ -XAresult XARDSItfImpl_RegisterRDSCallback(XARDSItf self, - xaRDSCallback callback, - void * pContext) -{ - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_RegisterRDSCallback"); - - if(!impl) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_RegisterRDSCallback"); - return XA_RESULT_PARAMETER_INVALID; - } - - impl->rdsCallback = callback; - impl->rdsContext = pContext; - impl->rdsCbPtrToSelf = self; - - DEBUG_API("<-XARDSItfImpl_RegisterRDSCallback"); - return ret; -} - -/** - * XAresult XARDSItfImpl_RegisterODADataCallback(XARDSItf self, - * xaNewODADataCallback callback, - * void * pContext) - * Description: Sets or clears the xaRDSCallback(). xaRDSCallback() is used to monitor - * changes in RDS fields. - **/ -XAresult XARDSItfImpl_RegisterODADataCallback(XARDSItf self, - xaNewODADataCallback callback, - void * pContext) -{ - - XAresult ret = XA_RESULT_SUCCESS; - XARDSItfImpl* impl = GetImpl(self); - DEBUG_API("->XARDSItfImpl_RegisterODADataCallback"); - - if(!impl) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - /* invalid parameter */ - DEBUG_API("<-XARDSItfImpl_RegisterODADataCallback"); - return XA_RESULT_PARAMETER_INVALID; - } - - impl->odaDataCallback = callback; - impl->odaDataContext = pContext; - impl->odaDataCbPtrToSelf = self; - - DEBUG_API("<-XARDSItfImpl_RegisterODADataCallback"); - return ret; -} - -/** - * XARDSItfImpl -specific methods - **/ - - -/** - * XARDSItfImplImpl* XARDSItfImpl_Create() - * @return XARDSItfImplImpl* - Pointer to RDSItf interface implementation - **/ -XARDSItfImpl* XARDSItfImpl_Create(XAAdaptationBaseCtx *adapCtx) -{ - XARDSItfImpl *self = (XARDSItfImpl*) - calloc(1,sizeof(XARDSItfImpl)); - DEBUG_API("->XARDSItfImpl_Create"); - if(self) - { - /* init itf default implementation */ - self->itf.QueryRDSSignal = XARDSItfImpl_QueryRDSSignal; - self->itf.GetProgrammeServiceName = XARDSItfImpl_GetProgrammeServiceName; - self->itf.GetRadioText = XARDSItfImpl_GetRadioText; - self->itf.GetRadioTextPlus = XARDSItfImpl_GetRadioTextPlus; - self->itf.GetProgrammeType = XARDSItfImpl_GetProgrammeType; - self->itf.GetProgrammeTypeString = XARDSItfImpl_GetProgrammeTypeString; - self->itf.GetProgrammeIdentificationCode = XARDSItfImpl_GetProgrammeIdentificationCode; - self->itf.GetClockTime = XARDSItfImpl_GetClockTime; - self->itf.GetTrafficAnnouncement = XARDSItfImpl_GetTrafficAnnouncement; - self->itf.GetTrafficProgramme = XARDSItfImpl_GetTrafficProgramme; - self->itf.SeekByProgrammeType = XARDSItfImpl_SeekByProgrammeType; - self->itf.SeekTrafficAnnouncement = XARDSItfImpl_SeekTrafficAnnouncement; - self->itf.SeekTrafficProgramme = XARDSItfImpl_SeekTrafficProgramme; - self->itf.SetAutomaticSwitching = XARDSItfImpl_SetAutomaticSwitching; - self->itf.GetAutomaticSwitching = XARDSItfImpl_GetAutomaticSwitching; - self->itf.SetAutomaticTrafficAnnouncement = XARDSItfImpl_SetAutomaticTrafficAnnouncement; - self->itf.GetAutomaticTrafficAnnouncement = XARDSItfImpl_GetAutomaticTrafficAnnouncement; - self->itf.GetODAGroup = XARDSItfImpl_GetODAGroup; - self->itf.SubscribeODAGroup = XARDSItfImpl_SubscribeODAGroup; - self->itf.UnsubscribeODAGroup = XARDSItfImpl_UnsubscribeODAGroup; - self->itf.ListODAGroupSubscriptions = XARDSItfImpl_ListODAGroupSubscriptions; - self->itf.RegisterRDSCallback = XARDSItfImpl_RegisterRDSCallback; - self->itf.RegisterODADataCallback = XARDSItfImpl_RegisterODADataCallback; - - /* init variables */ - - self->odaDataCallback = NULL; - self->odaDataContext = NULL; - self->odaDataCbPtrToSelf = NULL; - self->odaGroupCallback = NULL; - self->odaGroupContext = NULL; - self->odaGroupCbPtrToSelf = NULL; - self->rdsCallback = NULL; - self->rdsContext = NULL; - self->rdsCbPtrToSelf = NULL; - - XAAdaptationBase_AddEventHandler( adapCtx, &XARDSItfImpl_AdaptCb, XA_RDSITFEVENTS, self ); - - self->adapCtx = adapCtx; - - self->self = self; - } - - DEBUG_API("<-XARDSItfImpl_Create"); - return self; -} - -/* void XARDSItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event ) - * @param void *pHandlerCtx - pointer to cb context (XARadioItfImpl) - * @param XAAdaptEvent *event - Event - * Description: Event handler for adaptation events - */ -void XARDSItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event ) -{ - XARDSItfImpl* impl =(XARDSItfImpl*)pHandlerCtx; - DEBUG_API("->XARDSItfImpl_AdaptCb"); - - if(!impl) - { - DEBUG_ERR("XARadioItfImpl_AdaptCb, invalid context pointer!"); - DEBUG_API("<-XARDSItfImpl_AdaptCb"); - return; - } - assert(event); - - if( event->eventid == XA_ADAPT_RDS_GET_ODA_GROUP_DONE && impl->odaGroupCallback ) - { - /* stubbed (enough for emulation purposes) */ - /* XA_BOOLEAN_FALSE and -1 means oda group not found */ - impl->odaGroupCallback( (XARadioItf) impl->odaGroupCbPtrToSelf, impl->odaGroupContext, XA_BOOLEAN_FALSE, -1, 0 ); - } - DEBUG_API("<-XARDSItfImpl_AdaptCb"); -} - -/** - * void XARDSItfImpl_Free(XARDSItfImpl* self) - * @param XARDSItfImpl* self - - **/ -void XARDSItfImpl_Free(XARDSItfImpl* self) -{ - DEBUG_API("->XARDSItfImpl_Free"); - XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSRadio); - assert(self==self->self); - - XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XARDSItfImpl_AdaptCb ); - - XARDSItfAdapt_Free(self->adapCtx); - - free(self); - XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSRadio); - DEBUG_API("<-XARDSItfImpl_Free"); -} -