khronosfws/openmax_al/src/radio/xardsitf.c
changeset 42 1fa3fb47b1e3
parent 32 94fc26b6e006
child 47 c2e43643db4c
--- 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 <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#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");
-}
-