khronosfws/openmax_al/src/gst_adaptation/xardsitfadaptation.c
author hgs
Fri, 28 May 2010 19:26:28 -0500
changeset 21 2ed61feeead6
parent 19 4a629bc82c5e
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <unistd.h>
hgs
parents:
diff changeset
    19
#include <time.h>
hgs
parents:
diff changeset
    20
#include <string.h>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "xaadaptationgst.h"
hgs
parents:
diff changeset
    23
#include "xaradioadaptctx.h"
hgs
parents:
diff changeset
    24
#include "xardsitfadaptation.h"
hgs
parents:
diff changeset
    25
#include "xaradioitfadaptation.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
/* emulated device data and constraints */
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#define NUM_OF_CHANNELS 2
hgs
parents:
diff changeset
    30
#define MAX_PS_STRING_LENGHT 17
hgs
parents:
diff changeset
    31
#define MAX_RT_STRING_LENGHT 129
hgs
parents:
diff changeset
    32
#define MAX_ODA_GROUP_SUBSCRIPTIONS 100
hgs
parents:
diff changeset
    33
#define MAX_PTY_STRING_SHORT_LENGHT 17
hgs
parents:
diff changeset
    34
#define MAX_PTY_STRING_LONG_LENGHT 33
hgs
parents:
diff changeset
    35
#define NONE_STRING_LENGHT 4
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
/* emulated rds data structure */
hgs
parents:
diff changeset
    38
typedef struct
hgs
parents:
diff changeset
    39
{
hgs
parents:
diff changeset
    40
    XAuint32 frequency;
hgs
parents:
diff changeset
    41
    XAchar *progServiceName;
hgs
parents:
diff changeset
    42
    XAchar *radioText;
hgs
parents:
diff changeset
    43
    XAuint32 programmeType;
hgs
parents:
diff changeset
    44
    XAchar *ptyStringShort;
hgs
parents:
diff changeset
    45
    XAchar *ptyStringLong;
hgs
parents:
diff changeset
    46
    XAint16 programmeID;
hgs
parents:
diff changeset
    47
    XAboolean trafficAnnouncement;
hgs
parents:
diff changeset
    48
    XAboolean trafficProgramme;
hgs
parents:
diff changeset
    49
} RDSData;
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
#define TRAFFIC_PROGRAMME_CHANNEL 0
hgs
parents:
diff changeset
    52
#define TRAFFIC_ANNOUNCEMENT_CHANNEL 0
hgs
parents:
diff changeset
    53
#define POPMUSIC_CHANNEL 1
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
/* emulated rds data from channels */
hgs
parents:
diff changeset
    56
static const RDSData rdsData[NUM_OF_CHANNELS] = {
hgs
parents:
diff changeset
    57
        {88500000, (XAchar *)"Traffic", (XAchar *)"All your traffic needs", XA_RDSPROGRAMMETYPE_RDSPTY_NONE,
hgs
parents:
diff changeset
    58
            (XAchar *)"None", (XAchar *)"None", 0x0001, XA_BOOLEAN_TRUE, XA_BOOLEAN_TRUE },
hgs
parents:
diff changeset
    59
        {89300000, (XAchar *)"Popular", (XAchar *)"For the populous", XA_RDSPROGRAMMETYPE_RDSPTY_POPMUSIC,
hgs
parents:
diff changeset
    60
            (XAchar *)"Pop music", (XAchar *)"Pop music for the masses", 0x0002, XA_BOOLEAN_FALSE, XA_BOOLEAN_FALSE }
hgs
parents:
diff changeset
    61
};
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
static const XAchar* noneString = (XAchar *)"None";
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
static XAint16 subscribedODAGroups[MAX_ODA_GROUP_SUBSCRIPTIONS];
hgs
parents:
diff changeset
    66
static XAuint16 subscribedODAGroupCount = 0;
hgs
parents:
diff changeset
    67
21
hgs
parents: 19
diff changeset
    68
//static XAuint32 freqSetAfterSeek;
19
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
const RDSData* GetCurrentRdsData( XAAdaptationGstCtx *bCtx );
hgs
parents:
diff changeset
    71
void * XARDSItfAdapt_AsyncSeek(void* args);
hgs
parents:
diff changeset
    72
void * XARDSItfAdapt_AsyncGetODAGroup(void* args);
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
/* exposing radio itf adaptation internal function here */
21
hgs
parents: 19
diff changeset
    75
//XAresult XARadioItfAdapt_SyncSetFrequency(XAAdaptationGstCtx *bCtx, XAuint32 freq);
19
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
/*
hgs
parents:
diff changeset
    79
 * XAresult XARDSItfAdapt_QueryRDSSignal(XAAdaptationGstCtx *bCtx, XAboolean * isSignal)
hgs
parents:
diff changeset
    80
 */
hgs
parents:
diff changeset
    81
XAresult XARDSItfAdapt_QueryRDSSignal(XAAdaptationGstCtx *bCtx, XAboolean * isSignal)
hgs
parents:
diff changeset
    82
{
hgs
parents:
diff changeset
    83
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
    84
    DEBUG_API("->XARDSItfAdapt_QueryRDSSignal");
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    if(!bCtx || !isSignal)
hgs
parents:
diff changeset
    87
    {
hgs
parents:
diff changeset
    88
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
    89
        DEBUG_API("<-XARDSItfAdapt_QueryRDSSignal");
hgs
parents:
diff changeset
    90
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
    91
    }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    if (GetCurrentRdsData(bCtx))
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
        *isSignal = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
    96
    }
hgs
parents:
diff changeset
    97
    else
hgs
parents:
diff changeset
    98
    {
hgs
parents:
diff changeset
    99
        *isSignal = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
    DEBUG_API("<-XARDSItfAdapt_QueryRDSSignal");
hgs
parents:
diff changeset
   103
    return ret;
hgs
parents:
diff changeset
   104
}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
/*
hgs
parents:
diff changeset
   107
 * XAresult XARDSItfAdapt_GetProgrammeServiceName(XAAdaptationGstCtx *bCtx, XAchar * ps)
hgs
parents:
diff changeset
   108
 */
hgs
parents:
diff changeset
   109
XAresult XARDSItfAdapt_GetProgrammeServiceName(XAAdaptationGstCtx *bCtx, XAchar * ps)
hgs
parents:
diff changeset
   110
{
hgs
parents:
diff changeset
   111
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   112
    const RDSData* data;
hgs
parents:
diff changeset
   113
    DEBUG_API("->XARDSItfAdapt_GetProgrammeServiceName");
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    if(!bCtx || !ps)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   119
        DEBUG_API("<-XARDSItfAdapt_GetProgrammeServiceName");
hgs
parents:
diff changeset
   120
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   121
    }
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
    if (data)
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
        strncpy( (char *)ps, (char *)data->progServiceName, MAX_PS_STRING_LENGHT );
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
    else
hgs
parents:
diff changeset
   130
    {
hgs
parents:
diff changeset
   131
        *ps = 0;
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    DEBUG_API("<-XARDSItfAdapt_GetProgrammeServiceName");
hgs
parents:
diff changeset
   135
    return ret;
hgs
parents:
diff changeset
   136
}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
/*
hgs
parents:
diff changeset
   139
 * XAresult XARDSItfAdapt_GetRadioText(XAAdaptationGstCtx *bCtx, XAchar * rt)
hgs
parents:
diff changeset
   140
 */
hgs
parents:
diff changeset
   141
XAresult XARDSItfAdapt_GetRadioText(XAAdaptationGstCtx *bCtx, XAchar * rt)
hgs
parents:
diff changeset
   142
{
hgs
parents:
diff changeset
   143
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   144
    const RDSData* data;
hgs
parents:
diff changeset
   145
    DEBUG_API("->XARDSItfAdapt_GetRadioText");
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    if(!bCtx || !rt)
hgs
parents:
diff changeset
   148
    {
hgs
parents:
diff changeset
   149
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   150
        DEBUG_API("<-XARDSItfAdapt_GetRadioText");
hgs
parents:
diff changeset
   151
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   152
    }
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    if (data)
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
        strncpy( (char *)rt, (char *)data->radioText, MAX_RT_STRING_LENGHT );
hgs
parents:
diff changeset
   159
    }
hgs
parents:
diff changeset
   160
    else
hgs
parents:
diff changeset
   161
    {
hgs
parents:
diff changeset
   162
        *rt = 0;
hgs
parents:
diff changeset
   163
    }
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    DEBUG_API("<-XARDSItfAdapt_GetRadioText");
hgs
parents:
diff changeset
   166
    return ret;
hgs
parents:
diff changeset
   167
}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
/*
hgs
parents:
diff changeset
   170
 * XAresult XARDSItfAdapt_GetRadioTextPlus(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   171
 *                                         XAuint8 contentType,
hgs
parents:
diff changeset
   172
 *                                         XAchar * informationElement,
hgs
parents:
diff changeset
   173
 *                                         XAchar * descriptor,
hgs
parents:
diff changeset
   174
 *                                         XAuint8 * descriptorContentType)
hgs
parents:
diff changeset
   175
 */
hgs
parents:
diff changeset
   176
XAresult XARDSItfAdapt_GetRadioTextPlus(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   177
                                        XAuint8 contentType,
hgs
parents:
diff changeset
   178
                                        XAchar * informationElement,
hgs
parents:
diff changeset
   179
                                        XAchar * descriptor,
hgs
parents:
diff changeset
   180
                                        XAuint8 * descriptorContentType)
hgs
parents:
diff changeset
   181
{
hgs
parents:
diff changeset
   182
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   183
    DEBUG_API("->XARDSItfAdapt_GetRadioTextPlus");
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
    if(!bCtx || contentType < XA_RDSRTPLUS_ITEMTITLE || contentType > XA_RDSRTPLUS_GETDATA
hgs
parents:
diff changeset
   186
            || !informationElement || !descriptor || !descriptorContentType)
hgs
parents:
diff changeset
   187
    {
hgs
parents:
diff changeset
   188
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   189
        DEBUG_API("<-XARDSItfAdapt_GetRadioTextPlus");
hgs
parents:
diff changeset
   190
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    *informationElement = 0;
hgs
parents:
diff changeset
   194
    *descriptorContentType = 0;
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
    DEBUG_API("<-XARDSItfAdapt_GetRadioTextPlus");
hgs
parents:
diff changeset
   197
    return ret;
hgs
parents:
diff changeset
   198
}
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
/*
hgs
parents:
diff changeset
   201
 * XAresult XARDSItfAdapt_GetProgrammeType(XAAdaptationGstCtx *bCtx, XAuint32 * pty)
hgs
parents:
diff changeset
   202
 */
hgs
parents:
diff changeset
   203
XAresult XARDSItfAdapt_GetProgrammeType(XAAdaptationGstCtx *bCtx, XAuint32 * pty)
hgs
parents:
diff changeset
   204
{
hgs
parents:
diff changeset
   205
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   206
    const RDSData* data;
hgs
parents:
diff changeset
   207
    DEBUG_API("->XARDSItfAdapt_GetProgrammeType");
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    if(!bCtx || !pty)
hgs
parents:
diff changeset
   210
    {
hgs
parents:
diff changeset
   211
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   212
        DEBUG_API("<-XARDSItfAdapt_GetProgrammeType");
hgs
parents:
diff changeset
   213
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   214
    }
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    if (data)
hgs
parents:
diff changeset
   219
    {
hgs
parents:
diff changeset
   220
        *pty = data->programmeType;
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
    else
hgs
parents:
diff changeset
   223
    {
hgs
parents:
diff changeset
   224
        *pty = 0;
hgs
parents:
diff changeset
   225
    }
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    DEBUG_API("<-XARDSItfAdapt_GetProgrammeType");
hgs
parents:
diff changeset
   228
    return ret;
hgs
parents:
diff changeset
   229
}
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
/*
hgs
parents:
diff changeset
   232
 * XAresult XARDSItfAdapt_GetProgrammeTypeString(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   233
 *                                               XAboolean isLengthMax16,
hgs
parents:
diff changeset
   234
 *                                               XAchar * pty)
hgs
parents:
diff changeset
   235
 *
hgs
parents:
diff changeset
   236
 */
hgs
parents:
diff changeset
   237
XAresult XARDSItfAdapt_GetProgrammeTypeString(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   238
                                             XAboolean isLengthMax16,
hgs
parents:
diff changeset
   239
                                             XAchar * pty)
hgs
parents:
diff changeset
   240
{
hgs
parents:
diff changeset
   241
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   242
    const RDSData* data;
hgs
parents:
diff changeset
   243
    DEBUG_API("->XARDSItfAdapt_GetProgrammeTypeString");
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
    if(!bCtx || !pty)
hgs
parents:
diff changeset
   246
    {
hgs
parents:
diff changeset
   247
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   248
        DEBUG_API("<-XARDSItfAdapt_GetProgrammeTypeString");
hgs
parents:
diff changeset
   249
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   250
    }
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    if (data)
hgs
parents:
diff changeset
   255
    {
hgs
parents:
diff changeset
   256
        if (isLengthMax16)
hgs
parents:
diff changeset
   257
        {
hgs
parents:
diff changeset
   258
            DEBUG_API_A1("Programme type string %s", data->ptyStringLong);
hgs
parents:
diff changeset
   259
            strncpy( (char *)pty, (char *)data->ptyStringLong, MAX_PTY_STRING_LONG_LENGHT );
hgs
parents:
diff changeset
   260
        }
hgs
parents:
diff changeset
   261
        else
hgs
parents:
diff changeset
   262
        {
hgs
parents:
diff changeset
   263
            DEBUG_API_A1("Programme type string %s", data->ptyStringShort);
hgs
parents:
diff changeset
   264
            strncpy( (char *)pty, (char *)data->ptyStringShort, MAX_PTY_STRING_SHORT_LENGHT );
hgs
parents:
diff changeset
   265
        }
hgs
parents:
diff changeset
   266
    }
hgs
parents:
diff changeset
   267
    else
hgs
parents:
diff changeset
   268
    {
hgs
parents:
diff changeset
   269
        DEBUG_API_A1("Programme type string %s", noneString);
hgs
parents:
diff changeset
   270
        strncpy( (char *)pty, (char *)noneString, NONE_STRING_LENGHT );
hgs
parents:
diff changeset
   271
    }
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
    DEBUG_API("<-XARDSItfAdapt_GetProgrammeTypeString");
hgs
parents:
diff changeset
   274
    return ret;
hgs
parents:
diff changeset
   275
}
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
/*
hgs
parents:
diff changeset
   278
 * XAresult XARDSItfAdapt_GetProgrammeIdentificationCode(XAAdaptationGstCtx *bCtx, XAint16 * pi)
hgs
parents:
diff changeset
   279
 */
hgs
parents:
diff changeset
   280
XAresult XARDSItfAdapt_GetProgrammeIdentificationCode(XAAdaptationGstCtx *bCtx, XAint16 * pi)
hgs
parents:
diff changeset
   281
{
hgs
parents:
diff changeset
   282
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   283
    const RDSData* data;
hgs
parents:
diff changeset
   284
    DEBUG_API("->XARDSItfAdapt_GetProgrammeIdentificationCode");
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
    if(!bCtx || !pi)
hgs
parents:
diff changeset
   287
    {
hgs
parents:
diff changeset
   288
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   289
        DEBUG_API("<-XARDSItfAdapt_GetProgrammeIdentificationCode");
hgs
parents:
diff changeset
   290
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   291
    }
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    if (data)
hgs
parents:
diff changeset
   296
    {
hgs
parents:
diff changeset
   297
        *pi = data->programmeID;
hgs
parents:
diff changeset
   298
    }
hgs
parents:
diff changeset
   299
    else
hgs
parents:
diff changeset
   300
    {
hgs
parents:
diff changeset
   301
        *pi = 0;
hgs
parents:
diff changeset
   302
    }
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
    DEBUG_API("<-XARDSItfAdapt_GetProgrammeIdentificationCode");
hgs
parents:
diff changeset
   305
    return ret;
hgs
parents:
diff changeset
   306
}
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
/*
hgs
parents:
diff changeset
   309
 * XAresult XARDSItfAdapt_GetClockTime(XAAdaptationGstCtx *bCtx, XAtime * dateAndTime)
hgs
parents:
diff changeset
   310
 */
hgs
parents:
diff changeset
   311
XAresult XARDSItfAdapt_GetClockTime(XAAdaptationGstCtx *bCtx, XAtime * dateAndTime)
hgs
parents:
diff changeset
   312
{
hgs
parents:
diff changeset
   313
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   314
    time_t timeRet=0;
hgs
parents:
diff changeset
   315
    DEBUG_API("->XARDSItfAdapt_GetClockTime");
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
    if(!bCtx || !dateAndTime)
hgs
parents:
diff changeset
   318
    {
hgs
parents:
diff changeset
   319
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   320
        DEBUG_API("<-XARDSItfAdapt_GetClockTime");
hgs
parents:
diff changeset
   321
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
    timeRet = time(NULL);
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
    if (timeRet == -1) /* could not get time for some reason */
hgs
parents:
diff changeset
   327
    {
hgs
parents:
diff changeset
   328
        ret = XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   329
    }
hgs
parents:
diff changeset
   330
    else
hgs
parents:
diff changeset
   331
    {
hgs
parents:
diff changeset
   332
        *dateAndTime = timeRet;
hgs
parents:
diff changeset
   333
    }
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
    DEBUG_API("<-XARDSItfAdapt_GetClockTime");
hgs
parents:
diff changeset
   336
    return ret;
hgs
parents:
diff changeset
   337
}
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
/*
hgs
parents:
diff changeset
   340
 * XAresult XARDSItfAdapt_GetTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean * ta)
hgs
parents:
diff changeset
   341
 */
hgs
parents:
diff changeset
   342
XAresult XARDSItfAdapt_GetTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean * ta)
hgs
parents:
diff changeset
   343
{
hgs
parents:
diff changeset
   344
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   345
    const RDSData* data;
hgs
parents:
diff changeset
   346
    DEBUG_API("->XARDSItfAdapt_GetTrafficAnnouncement");
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
    if(!bCtx || !ta)
hgs
parents:
diff changeset
   349
    {
hgs
parents:
diff changeset
   350
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   351
        DEBUG_API("<-XARDSItfAdapt_GetTrafficAnnouncement");
hgs
parents:
diff changeset
   352
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   353
    }
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    if (data)
hgs
parents:
diff changeset
   358
    {
hgs
parents:
diff changeset
   359
        *ta = data->trafficAnnouncement;
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
    else
hgs
parents:
diff changeset
   362
    {
hgs
parents:
diff changeset
   363
        *ta = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   364
    }
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
    DEBUG_API("<-XARDSItfAdapt_GetTrafficAnnouncement");
hgs
parents:
diff changeset
   367
    return ret;
hgs
parents:
diff changeset
   368
}
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
/*
hgs
parents:
diff changeset
   371
 * XAresult XARDSItfAdapt_GetTrafficProgramme(XAAdaptationGstCtx *bCtx, XAboolean * tp)
hgs
parents:
diff changeset
   372
 */
hgs
parents:
diff changeset
   373
XAresult XARDSItfAdapt_GetTrafficProgramme(XAAdaptationGstCtx *bCtx, XAboolean * tp)
hgs
parents:
diff changeset
   374
{
hgs
parents:
diff changeset
   375
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   376
    const RDSData* data;
hgs
parents:
diff changeset
   377
    DEBUG_API("->XARDSItfAdapt_GetTrafficProgramme");
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
    if(!bCtx || !tp)
hgs
parents:
diff changeset
   380
    {
hgs
parents:
diff changeset
   381
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   382
        DEBUG_API("<-XARDSItfAdapt_GetTrafficProgramme");
hgs
parents:
diff changeset
   383
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   384
    }
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
    data = GetCurrentRdsData( bCtx );
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
    if (data)
hgs
parents:
diff changeset
   389
    {
hgs
parents:
diff changeset
   390
        *tp = data->trafficProgramme;
hgs
parents:
diff changeset
   391
    }
hgs
parents:
diff changeset
   392
    else
hgs
parents:
diff changeset
   393
    {
hgs
parents:
diff changeset
   394
        *tp = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   395
    }
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
    DEBUG_API("<-XARDSItfAdapt_GetTrafficProgramme");
hgs
parents:
diff changeset
   398
    return ret;
hgs
parents:
diff changeset
   399
}
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
/*
hgs
parents:
diff changeset
   402
 * XAresult XARDSItfAdapt_SeekByProgrammeType(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   403
 *                                            XAuint32 pty,
hgs
parents:
diff changeset
   404
 *                                            XAboolean upwards)
hgs
parents:
diff changeset
   405
 */
hgs
parents:
diff changeset
   406
XAresult XARDSItfAdapt_SeekByProgrammeType(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   407
                                           XAuint32 pty,
hgs
parents:
diff changeset
   408
                                           XAboolean upwards)
hgs
parents:
diff changeset
   409
{
hgs
parents:
diff changeset
   410
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   411
    int pt_ret=0;
hgs
parents:
diff changeset
   412
    XARadioAdaptationCtx* mCtx = NULL;
hgs
parents:
diff changeset
   413
    DEBUG_API("->XARDSItfAdapt_SeekByProgrammeType");
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
    if(!bCtx)
hgs
parents:
diff changeset
   416
    {
hgs
parents:
diff changeset
   417
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   418
        DEBUG_API("<-XARDSItfAdapt_SeekByProgrammeType");
hgs
parents:
diff changeset
   419
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   420
    }
hgs
parents:
diff changeset
   421
hgs
parents:
diff changeset
   422
    mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
    if (mCtx->state != XA_RADIO_IDLE)
hgs
parents:
diff changeset
   425
    {
hgs
parents:
diff changeset
   426
      //  pthread_cancel(mCtx->emulationThread);
hgs
parents:
diff changeset
   427
        mCtx->state = XA_RADIO_IDLE;
hgs
parents:
diff changeset
   428
    }
hgs
parents:
diff changeset
   429
hgs
parents:
diff changeset
   430
    if (pty == XA_RDSPROGRAMMETYPE_RDSPTY_POPMUSIC)
hgs
parents:
diff changeset
   431
    {
21
hgs
parents: 19
diff changeset
   432
        //freqSetAfterSeek = rdsData[POPMUSIC_CHANNEL].frequency;
19
hgs
parents:
diff changeset
   433
    }
hgs
parents:
diff changeset
   434
    else
hgs
parents:
diff changeset
   435
    {
21
hgs
parents: 19
diff changeset
   436
        //freqSetAfterSeek = mCtx->frequency;
19
hgs
parents:
diff changeset
   437
    }
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
    mCtx->state = XA_RADIO_SEEKING;
hgs
parents:
diff changeset
   440
    pt_ret = pthread_create(&(mCtx->emulationThread), NULL, (XARDSItfAdapt_AsyncSeek),(void*)bCtx);
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
    if(pt_ret)
hgs
parents:
diff changeset
   443
    {
hgs
parents:
diff changeset
   444
        DEBUG_ERR_A1("could not create thread!! (%d)",ret);
hgs
parents:
diff changeset
   445
        DEBUG_API("<-XARDSItfAdapt_SeekByProgrammeType");
hgs
parents:
diff changeset
   446
        return XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   447
    }
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
    DEBUG_API("<-XARDSItfAdapt_SeekByProgrammeType");
hgs
parents:
diff changeset
   450
    return ret;
hgs
parents:
diff changeset
   451
}
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
/*
hgs
parents:
diff changeset
   454
 * XAresult XARDSItfAdapt_SeekTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean upwards)
hgs
parents:
diff changeset
   455
 */
hgs
parents:
diff changeset
   456
XAresult XARDSItfAdapt_SeekTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean upwards)
hgs
parents:
diff changeset
   457
{
hgs
parents:
diff changeset
   458
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   459
    int pt_ret=0;
hgs
parents:
diff changeset
   460
    XARadioAdaptationCtx* mCtx = NULL;
hgs
parents:
diff changeset
   461
    DEBUG_API("->XARDSItfAdapt_SeekTrafficAnnouncement");
hgs
parents:
diff changeset
   462
hgs
parents:
diff changeset
   463
    if(!bCtx)
hgs
parents:
diff changeset
   464
    {
hgs
parents:
diff changeset
   465
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   466
        DEBUG_API("<-XARDSItfAdapt_SeekTrafficAnnouncement");
hgs
parents:
diff changeset
   467
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   468
    }
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
    mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
    if (mCtx->state != XA_RADIO_IDLE)
hgs
parents:
diff changeset
   473
    {
hgs
parents:
diff changeset
   474
     //   pthread_cancel(mCtx->emulationThread);
hgs
parents:
diff changeset
   475
        mCtx->state = XA_RADIO_IDLE;
hgs
parents:
diff changeset
   476
    }
hgs
parents:
diff changeset
   477
21
hgs
parents: 19
diff changeset
   478
    //freqSetAfterSeek = rdsData[TRAFFIC_ANNOUNCEMENT_CHANNEL].frequency;
19
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
    mCtx->state = XA_RADIO_SEEKING;
hgs
parents:
diff changeset
   481
    pt_ret = pthread_create(&(mCtx->emulationThread), NULL, (XARDSItfAdapt_AsyncSeek),(void*)bCtx);
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
    if(pt_ret)
hgs
parents:
diff changeset
   484
    {
hgs
parents:
diff changeset
   485
        DEBUG_ERR_A1("could not create thread!! (%d)",ret);
hgs
parents:
diff changeset
   486
        DEBUG_API("<-XARDSItfAdapt_SeekTrafficAnnouncement");
hgs
parents:
diff changeset
   487
        return XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   488
    }
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
    DEBUG_API("<-XARDSItfAdapt_SeekTrafficAnnouncement");
hgs
parents:
diff changeset
   491
    return ret;
hgs
parents:
diff changeset
   492
}
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
/*
hgs
parents:
diff changeset
   495
 * XAresult XARDSItfAdapt_SeekTrafficProgramme(XAAdaptationGstCtx *bCtx, XAboolean upwards)
hgs
parents:
diff changeset
   496
 */
hgs
parents:
diff changeset
   497
XAresult XARDSItfAdapt_SeekTrafficProgramme(XAAdaptationGstCtx *bCtx, XAboolean upwards)
hgs
parents:
diff changeset
   498
{
hgs
parents:
diff changeset
   499
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   500
    int pt_ret=0;
hgs
parents:
diff changeset
   501
    XARadioAdaptationCtx* mCtx = NULL;
hgs
parents:
diff changeset
   502
    DEBUG_API("->XARDSItfAdapt_SeekTrafficProgramme");
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
    if(!bCtx)
hgs
parents:
diff changeset
   505
    {
hgs
parents:
diff changeset
   506
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   507
        DEBUG_API("<-XARDSItfAdapt_SeekTrafficProgramme");
hgs
parents:
diff changeset
   508
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   509
    }
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
    mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
    if (mCtx->state != XA_RADIO_IDLE)
hgs
parents:
diff changeset
   514
    {
hgs
parents:
diff changeset
   515
      //  pthread_cancel(mCtx->emulationThread);
hgs
parents:
diff changeset
   516
        mCtx->state = XA_RADIO_IDLE;
hgs
parents:
diff changeset
   517
    }
hgs
parents:
diff changeset
   518
21
hgs
parents: 19
diff changeset
   519
    //freqSetAfterSeek = rdsData[TRAFFIC_PROGRAMME_CHANNEL].frequency;
19
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    mCtx->state = XA_RADIO_SEEKING;
hgs
parents:
diff changeset
   522
    pt_ret = pthread_create(&(mCtx->emulationThread), NULL, (XARDSItfAdapt_AsyncSeek),(void*)bCtx);
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
    if(pt_ret)
hgs
parents:
diff changeset
   525
    {
hgs
parents:
diff changeset
   526
        DEBUG_ERR_A1("could not create thread!! (%d)",ret);
hgs
parents:
diff changeset
   527
        DEBUG_API("<-XARDSItfAdapt_SeekTrafficProgramme");
hgs
parents:
diff changeset
   528
        return XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   529
    }
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
    DEBUG_API("<-XARDSItfAdapt_SeekTrafficProgramme");
hgs
parents:
diff changeset
   532
    return ret;
hgs
parents:
diff changeset
   533
}
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
/*
hgs
parents:
diff changeset
   536
 * void * XARadioItfAdapt_AsyncSeek(void* args)
hgs
parents:
diff changeset
   537
 */
hgs
parents:
diff changeset
   538
void * XARDSItfAdapt_AsyncSeek(void* args)
hgs
parents:
diff changeset
   539
{
hgs
parents:
diff changeset
   540
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   541
    XAAdaptationGstCtx *bCtx = (XAAdaptationGstCtx*)args;
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
    XARadioAdaptationCtx* mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
    DEBUG_API("->XARDSItfAdapt_AsyncSeek");
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
    usleep(100000); /* 1/10 seconds */
hgs
parents:
diff changeset
   548
hgs
parents:
diff changeset
   549
    DEBUG_INFO("Seek done!");
hgs
parents:
diff changeset
   550
21
hgs
parents: 19
diff changeset
   551
    //ret = XARadioItfAdapt_SyncSetFrequency( bCtx, freqSetAfterSeek );
19
hgs
parents:
diff changeset
   552
    if (ret != XA_RESULT_SUCCESS)
hgs
parents:
diff changeset
   553
    {
hgs
parents:
diff changeset
   554
        DEBUG_ERR("XARadioItfAdapt_SyncSetFrequency FAILED");
hgs
parents:
diff changeset
   555
    }
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
    /* Send event to RadioItf */
hgs
parents:
diff changeset
   558
    {
hgs
parents:
diff changeset
   559
        XAAdaptEvent event = {XA_RADIOITFEVENTS, XA_ADAPT_RADIO_SEEK_COMPLETE, 0, NULL };
hgs
parents:
diff changeset
   560
        XAAdaptationBase_SendAdaptEvents(&bCtx->baseObj, &event );
hgs
parents:
diff changeset
   561
    }
hgs
parents:
diff changeset
   562
    mCtx->state = XA_RADIO_IDLE;
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
    DEBUG_API("<-XARDSItfAdapt_AsyncSeek");
hgs
parents:
diff changeset
   565
    pthread_exit(NULL);
hgs
parents:
diff changeset
   566
    return NULL;
hgs
parents:
diff changeset
   567
}
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
/*
hgs
parents:
diff changeset
   570
 * XAresult XARDSItfAdapt_SetAutomaticSwitching(XAAdaptationGstCtx *bCtx, XAboolean automatic)
hgs
parents:
diff changeset
   571
 */
hgs
parents:
diff changeset
   572
XAresult XARDSItfAdapt_SetAutomaticSwitching(XAAdaptationGstCtx *bCtx, XAboolean automatic)
hgs
parents:
diff changeset
   573
{
hgs
parents:
diff changeset
   574
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   575
    DEBUG_API("->XARDSItfAdapt_SetAutomaticSwitching");
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
    if(!bCtx)
hgs
parents:
diff changeset
   578
    {
hgs
parents:
diff changeset
   579
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   580
        DEBUG_API("<-XARDSItfAdapt_SetAutomaticSwitching");
hgs
parents:
diff changeset
   581
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   582
    }
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
    ret = XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
    DEBUG_API("<-XARDSItfAdapt_SetAutomaticSwitching");
hgs
parents:
diff changeset
   587
    return ret;
hgs
parents:
diff changeset
   588
}
hgs
parents:
diff changeset
   589
hgs
parents:
diff changeset
   590
/*
hgs
parents:
diff changeset
   591
 * XAresult XARDSItfAdapt_GetAutomaticSwitching(XAAdaptationGstCtx *bCtx, XAboolean * automatic)
hgs
parents:
diff changeset
   592
 */
hgs
parents:
diff changeset
   593
XAresult XARDSItfAdapt_GetAutomaticSwitching(XAAdaptationGstCtx *bCtx, XAboolean * automatic)
hgs
parents:
diff changeset
   594
{
hgs
parents:
diff changeset
   595
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   596
    DEBUG_API("->XARDSItfAdapt_GetAutomaticSwitching");
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
    if(!bCtx || !automatic)
hgs
parents:
diff changeset
   599
    {
hgs
parents:
diff changeset
   600
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   601
        DEBUG_API("<-XARDSItfAdapt_GetAutomaticSwitching");
hgs
parents:
diff changeset
   602
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   603
    }
hgs
parents:
diff changeset
   604
hgs
parents:
diff changeset
   605
    /* Feature not supported */
hgs
parents:
diff changeset
   606
    *automatic = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
    DEBUG_API("<-XARDSItfAdapt_GetAutomaticSwitching");
hgs
parents:
diff changeset
   609
    return ret;
hgs
parents:
diff changeset
   610
}
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
/*
hgs
parents:
diff changeset
   613
 * XAresult XARDSItfAdapt_SetAutomaticTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean automatic)
hgs
parents:
diff changeset
   614
 */
hgs
parents:
diff changeset
   615
XAresult XARDSItfAdapt_SetAutomaticTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean automatic)
hgs
parents:
diff changeset
   616
{
hgs
parents:
diff changeset
   617
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   618
    DEBUG_API("->XARDSItfAdapt_SetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   619
    if(!bCtx)
hgs
parents:
diff changeset
   620
    {
hgs
parents:
diff changeset
   621
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   622
        DEBUG_API("<-XARDSItfAdapt_SetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   623
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   624
    }
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
    ret = XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   627
hgs
parents:
diff changeset
   628
    DEBUG_API("<-XARDSItfAdapt_SetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   629
    return ret;
hgs
parents:
diff changeset
   630
}
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
/*
hgs
parents:
diff changeset
   633
 * XAresult XARDSItfAdapt_GetAutomaticTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean * automatic)
hgs
parents:
diff changeset
   634
 */
hgs
parents:
diff changeset
   635
XAresult XARDSItfAdapt_GetAutomaticTrafficAnnouncement(XAAdaptationGstCtx *bCtx, XAboolean * automatic)
hgs
parents:
diff changeset
   636
{
hgs
parents:
diff changeset
   637
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   638
    DEBUG_API("->XARDSItfAdapt_GetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
    if(!bCtx || !automatic)
hgs
parents:
diff changeset
   641
    {
hgs
parents:
diff changeset
   642
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   643
        DEBUG_API("<-XARDSItfAdapt_GetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   644
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   645
    }
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
    *automatic = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
    DEBUG_API("<-XARDSItfAdapt_GetAutomaticTrafficAnnouncement");
hgs
parents:
diff changeset
   650
    return ret;
hgs
parents:
diff changeset
   651
}
hgs
parents:
diff changeset
   652
hgs
parents:
diff changeset
   653
/*
hgs
parents:
diff changeset
   654
 * XAresult XARDSItfAdapt_GetODAGroup(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   655
 *                                    XAint16 AID)
hgs
parents:
diff changeset
   656
 */
hgs
parents:
diff changeset
   657
XAresult XARDSItfAdapt_GetODAGroup(XAAdaptationGstCtx *bCtx, XAint16 AID)
hgs
parents:
diff changeset
   658
{
hgs
parents:
diff changeset
   659
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   660
    int pt_ret=0;
hgs
parents:
diff changeset
   661
    XARadioAdaptationCtx* mCtx=NULL;
hgs
parents:
diff changeset
   662
    DEBUG_API("->XARDSItfAdapt_GetODAGroup");
hgs
parents:
diff changeset
   663
hgs
parents:
diff changeset
   664
    if(!bCtx)
hgs
parents:
diff changeset
   665
    {
hgs
parents:
diff changeset
   666
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   667
        DEBUG_API("<-XARDSItfAdapt_GetODAGroup");
hgs
parents:
diff changeset
   668
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   669
    }
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
    mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
    if (mCtx->rdsState != XA_RADIO_RDS_IDLE)
hgs
parents:
diff changeset
   674
    {
hgs
parents:
diff changeset
   675
      //  pthread_cancel(mCtx->rdsEmulationThread);
hgs
parents:
diff changeset
   676
        mCtx->rdsState = XA_RADIO_RDS_IDLE;
hgs
parents:
diff changeset
   677
        DEBUG_INFO("Previous getodagroup async call cancelled")
hgs
parents:
diff changeset
   678
    }
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
    pt_ret = pthread_create(&(mCtx->rdsEmulationThread), NULL, (XARDSItfAdapt_AsyncGetODAGroup),(void*)bCtx);
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
    if(pt_ret)
hgs
parents:
diff changeset
   683
    {
hgs
parents:
diff changeset
   684
        DEBUG_ERR_A1("could not create thread!! (%d)",ret);
hgs
parents:
diff changeset
   685
        DEBUG_API("<-XARDSItfAdapt_GetODAGroup");
hgs
parents:
diff changeset
   686
        return XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   687
    }
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
    DEBUG_API("<-XARDSItfAdapt_GetODAGroup");
hgs
parents:
diff changeset
   690
    return ret;
hgs
parents:
diff changeset
   691
}
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
/*
hgs
parents:
diff changeset
   694
 * void * XARDSItfAdapt_AsyncGetODAGroup(void* args)
hgs
parents:
diff changeset
   695
 */
hgs
parents:
diff changeset
   696
void * XARDSItfAdapt_AsyncGetODAGroup(void* args)
hgs
parents:
diff changeset
   697
{
hgs
parents:
diff changeset
   698
    XARadioAdaptationCtx* mCtx = (XARadioAdaptationCtx*)args;
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
    DEBUG_API("->XARDSItfAdapt_AsyncGetODAGroup");
hgs
parents:
diff changeset
   701
    mCtx->rdsState = XA_RADIO_RDS_GETTING_ODA_GROUP;
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
    DEBUG_INFO("Get oda group async wait")
hgs
parents:
diff changeset
   704
    usleep(100000); /* 1/10 seconds */
hgs
parents:
diff changeset
   705
hgs
parents:
diff changeset
   706
    /* Send event */
hgs
parents:
diff changeset
   707
    {
hgs
parents:
diff changeset
   708
        XAAdaptEvent event = {XA_RDSITFEVENTS, XA_ADAPT_RDS_GET_ODA_GROUP_DONE, 0, NULL };
hgs
parents:
diff changeset
   709
        XAAdaptationBase_SendAdaptEvents(args, &event );
hgs
parents:
diff changeset
   710
    }
hgs
parents:
diff changeset
   711
    mCtx->rdsState = XA_RADIO_RDS_IDLE;
hgs
parents:
diff changeset
   712
    DEBUG_API("<-XARDSItfAdapt_AsyncGetODAGroup");
hgs
parents:
diff changeset
   713
    pthread_exit(NULL);
hgs
parents:
diff changeset
   714
    return NULL;
hgs
parents:
diff changeset
   715
}
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
/*
hgs
parents:
diff changeset
   718
 * XAresult XARDSItfAdapt_SubscribeODAGroup(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   719
 *                                          XAint16 group,
hgs
parents:
diff changeset
   720
 *                                          XAboolean useErrorCorrection)
hgs
parents:
diff changeset
   721
 */
hgs
parents:
diff changeset
   722
XAresult XARDSItfAdapt_SubscribeODAGroup(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   723
                                        XAint16 group,
hgs
parents:
diff changeset
   724
                                        XAboolean useErrorCorrection)
hgs
parents:
diff changeset
   725
{
hgs
parents:
diff changeset
   726
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   727
    XAuint8 index=0;
hgs
parents:
diff changeset
   728
    XAboolean groupFound = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   729
    DEBUG_API("->XARDSItfAdapt_SubscribeODAGroup");
hgs
parents:
diff changeset
   730
hgs
parents:
diff changeset
   731
    if(!bCtx)
hgs
parents:
diff changeset
   732
    {
hgs
parents:
diff changeset
   733
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   734
        DEBUG_API("<-XARDSItfAdapt_SubscribeODAGroup");
hgs
parents:
diff changeset
   735
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   736
    }
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
    /* Look for group in list, if not there add it */
hgs
parents:
diff changeset
   739
    if (subscribedODAGroupCount < MAX_ODA_GROUP_SUBSCRIPTIONS)
hgs
parents:
diff changeset
   740
    {
hgs
parents:
diff changeset
   741
        for (index = 0; index < subscribedODAGroupCount; index++)
hgs
parents:
diff changeset
   742
        {
hgs
parents:
diff changeset
   743
            if (subscribedODAGroups[index] == group)
hgs
parents:
diff changeset
   744
            {
hgs
parents:
diff changeset
   745
                groupFound = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
   746
            }
hgs
parents:
diff changeset
   747
        }
hgs
parents:
diff changeset
   748
        if (!groupFound)
hgs
parents:
diff changeset
   749
        {
hgs
parents:
diff changeset
   750
            subscribedODAGroups[subscribedODAGroupCount] = group;
hgs
parents:
diff changeset
   751
            subscribedODAGroupCount++;
hgs
parents:
diff changeset
   752
        }
hgs
parents:
diff changeset
   753
    }
hgs
parents:
diff changeset
   754
    else
hgs
parents:
diff changeset
   755
    {
hgs
parents:
diff changeset
   756
        DEBUG_ERR("XA_RESULT_INTERNAL_ERROR");
hgs
parents:
diff changeset
   757
        DEBUG_API("<-XARDSItfAdapt_SubscribeODAGroup");
hgs
parents:
diff changeset
   758
        return XA_RESULT_INTERNAL_ERROR;
hgs
parents:
diff changeset
   759
    }
hgs
parents:
diff changeset
   760
hgs
parents:
diff changeset
   761
    DEBUG_API("<-XARDSItfAdapt_SubscribeODAGroup");
hgs
parents:
diff changeset
   762
    return ret;
hgs
parents:
diff changeset
   763
}
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
/*
hgs
parents:
diff changeset
   766
 * XAresult XARDSItfAdapt_UnsubscribeODAGroup(XAAdaptationGstCtx *bCtx, XAint16 group)
hgs
parents:
diff changeset
   767
 */
hgs
parents:
diff changeset
   768
XAresult XARDSItfAdapt_UnsubscribeODAGroup(XAAdaptationGstCtx *bCtx, XAint16 group)
hgs
parents:
diff changeset
   769
{
hgs
parents:
diff changeset
   770
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   771
    XAuint8 index=0;
hgs
parents:
diff changeset
   772
    DEBUG_API("->XARDSItfAdapt_UnsubscribeODAGroup");
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
    if(!bCtx)
hgs
parents:
diff changeset
   775
    {
hgs
parents:
diff changeset
   776
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   777
        DEBUG_API("<-XARDSItfAdapt_UnsubscribeODAGroup");
hgs
parents:
diff changeset
   778
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   779
    }
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
    /* Look for group in list, if found, remove it */
hgs
parents:
diff changeset
   782
    for (index = 0; index < subscribedODAGroupCount; index++)
hgs
parents:
diff changeset
   783
    {
hgs
parents:
diff changeset
   784
        if (subscribedODAGroups[index] == group)
hgs
parents:
diff changeset
   785
        {
hgs
parents:
diff changeset
   786
            subscribedODAGroups[index] = subscribedODAGroups[subscribedODAGroupCount-1];
hgs
parents:
diff changeset
   787
            subscribedODAGroupCount--;
hgs
parents:
diff changeset
   788
        }
hgs
parents:
diff changeset
   789
    }
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
    DEBUG_API("<-XARDSItfAdapt_UnsubscribeODAGroup");
hgs
parents:
diff changeset
   792
    return ret;
hgs
parents:
diff changeset
   793
}
hgs
parents:
diff changeset
   794
hgs
parents:
diff changeset
   795
/*
hgs
parents:
diff changeset
   796
 * XAresult XARDSItfAdapt_ListODAGroupSubscriptions(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   797
 *                                                  XAint16* pGroups,
hgs
parents:
diff changeset
   798
 *                                                  XAuint32* pLength)
hgs
parents:
diff changeset
   799
 */
hgs
parents:
diff changeset
   800
XAresult XARDSItfAdapt_ListODAGroupSubscriptions(XAAdaptationGstCtx *bCtx,
hgs
parents:
diff changeset
   801
                                                XAint16* pGroups,
hgs
parents:
diff changeset
   802
                                                XAuint32* pLength)
hgs
parents:
diff changeset
   803
{
hgs
parents:
diff changeset
   804
    XAresult ret = XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   805
    XAuint8 index=0;
hgs
parents:
diff changeset
   806
    DEBUG_API("->XARDSItfAdapt_ListODAGroupSubscriptions");
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
    if(!bCtx || !pLength)
hgs
parents:
diff changeset
   809
    {
hgs
parents:
diff changeset
   810
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   811
        DEBUG_API("<-XARDSItfAdapt_ListODAGroupSubscriptions");
hgs
parents:
diff changeset
   812
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   813
    }
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
    if (!pGroups)
hgs
parents:
diff changeset
   816
    {
hgs
parents:
diff changeset
   817
        *pLength = subscribedODAGroupCount;
hgs
parents:
diff changeset
   818
    }
hgs
parents:
diff changeset
   819
    else
hgs
parents:
diff changeset
   820
    {
hgs
parents:
diff changeset
   821
        if (*pLength < subscribedODAGroupCount)
hgs
parents:
diff changeset
   822
        {
hgs
parents:
diff changeset
   823
            ret = XA_RESULT_BUFFER_INSUFFICIENT;
hgs
parents:
diff changeset
   824
        }
hgs
parents:
diff changeset
   825
        for (index = 0; index < *pLength; index++)
hgs
parents:
diff changeset
   826
        {
hgs
parents:
diff changeset
   827
            pGroups[index] = subscribedODAGroups[index];
hgs
parents:
diff changeset
   828
        }
hgs
parents:
diff changeset
   829
    }
hgs
parents:
diff changeset
   830
hgs
parents:
diff changeset
   831
    DEBUG_API("<-XARDSItfAdapt_ListODAGroupSubscriptions");
hgs
parents:
diff changeset
   832
    return ret;
hgs
parents:
diff changeset
   833
}
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
/*
hgs
parents:
diff changeset
   836
 * const RDSData* GetCurrentRdsData( XAAdaptationGstCtx *bCtx )
hgs
parents:
diff changeset
   837
 */
hgs
parents:
diff changeset
   838
const RDSData* GetCurrentRdsData( XAAdaptationGstCtx *bCtx )
hgs
parents:
diff changeset
   839
{
hgs
parents:
diff changeset
   840
    XAuint8 index=0;
hgs
parents:
diff changeset
   841
    XARadioAdaptationCtx* mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   842
hgs
parents:
diff changeset
   843
    for (index = 0; index < NUM_OF_CHANNELS; index++ )
hgs
parents:
diff changeset
   844
    {
hgs
parents:
diff changeset
   845
        if (rdsData[index].frequency == mCtx->frequency)
hgs
parents:
diff changeset
   846
        {
hgs
parents:
diff changeset
   847
            DEBUG_API("<-GetCurrentRdsData");
hgs
parents:
diff changeset
   848
            return &(rdsData[index]);
hgs
parents:
diff changeset
   849
        }
hgs
parents:
diff changeset
   850
    }
hgs
parents:
diff changeset
   851
    DEBUG_API("<-GetCurrentRdsData");
hgs
parents:
diff changeset
   852
    return NULL;
hgs
parents:
diff changeset
   853
}
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
hgs
parents:
diff changeset
   856
/*
hgs
parents:
diff changeset
   857
 * void XARDSItfAdapt_Free(XAAdaptationGstCtx *bCtx)
hgs
parents:
diff changeset
   858
 */
hgs
parents:
diff changeset
   859
void XARDSItfAdapt_Free(XAAdaptationBaseCtx *bCtx)
hgs
parents:
diff changeset
   860
{
hgs
parents:
diff changeset
   861
    XARadioAdaptationCtx* mCtx = (XARadioAdaptationCtx*) bCtx;
hgs
parents:
diff changeset
   862
    DEBUG_API("->XARDSItfAdapt_Free");
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
    if (mCtx->state != XA_RADIO_IDLE)
hgs
parents:
diff changeset
   865
    {
hgs
parents:
diff changeset
   866
       // pthread_cancel(mCtx->emulationThread);
hgs
parents:
diff changeset
   867
        mCtx->state = XA_RADIO_IDLE;
hgs
parents:
diff changeset
   868
    }
hgs
parents:
diff changeset
   869
hgs
parents:
diff changeset
   870
    if (mCtx->rdsState != XA_RADIO_RDS_IDLE)
hgs
parents:
diff changeset
   871
    {
hgs
parents:
diff changeset
   872
      //  pthread_cancel(mCtx->rdsEmulationThread);
hgs
parents:
diff changeset
   873
        mCtx->rdsState = XA_RADIO_RDS_IDLE;
hgs
parents:
diff changeset
   874
    }
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
    DEBUG_API("<-XARDSItfAdapt_Free");
hgs
parents:
diff changeset
   877
}