source: svn/trunk/newcon3bcm2_21bu/dta/src/nexus/bsettop_tuner.c @ 2

Last change on this file since 2 was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2012, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile:  $
11 * $brcm_Revision:  $
12 * $brcm_Date: $
13 *
14 * Module Description:
15 *
16 * Revision History:
17 *
18 * $brcm_Log:  $
19 *
20 ***************************************************************************/
21
22#include "nexus_platform.h"
23#include "nexus_frontend.h"
24#include "nexus_parser_band.h"
25
26#include "bstd.h"
27#include "bkni.h"
28
29#include "bapp_freq_table.h"
30#include "bsettop_tuner.h"
31
32#define TUNE_TIMEOUT_MS         200
33#define SCAN_TIMEOUT_MS         500
34
35BDBG_MODULE(btuner);
36
37struct btuner
38{
39        NEXUS_FrontendHandle frontend;
40        NEXUS_ParserBand parserBand;
41        unsigned int freq_hz;
42        bapp_freq_table_type_t fe_type;
43        BKNI_EventHandle lockEvent;
44        uint32_t timeout;
45};
46
47struct btuner s_tuner;
48
49static void bapp_tuner_lock_callback(void *context, int param)
50{
51        btuner_t tuner = (btuner_t)context;
52
53        BSTD_UNUSED(param);
54        BKNI_SetEvent(tuner->lockEvent);
55}
56
57#if 0
58/*
59 * Summary:
60 *      Acquisition processing thread
61 */
62static void ds_task(void *arg)
63{
64        btuner_t p_tune = (btuner_t)arg;
65        BDBG_ASSERT(p_tune);
66        BDBG_MSG(("ds_task"));
67       
68        while (1)
69        {
70                if (0 == p_tune->freq_hz) {
71                        /* if no frequency is given, skip it */
72                        bos_sleep(500);
73                        continue;
74                }
75        }       
76}
77#endif
78
79btuner_t btuner_open(bobject_t tuner_id)
80{
81        NEXUS_PlatformConfiguration platformConfig;
82        NEXUS_FrontendCapabilities capabilities;
83        NEXUS_FrontendHandle frontend;
84
85        NEXUS_ParserBandSettings parserBandSettings;
86        NEXUS_FrontendUserParameters userParams;
87       
88        bool found_frontend = false;
89        int i;
90
91        BSTD_UNUSED(tuner_id);
92        BKNI_Memset(&s_tuner, 0, sizeof(struct btuner));
93        s_tuner.timeout = TUNE_TIMEOUT_MS;
94
95        BKNI_CreateEvent(&s_tuner.lockEvent);
96        NEXUS_Platform_GetConfiguration(&platformConfig);
97        for (i=0; i<NEXUS_MAX_FRONTENDS; i++) {
98                frontend = platformConfig.frontend[i];
99
100                if (frontend) {
101                        NEXUS_Frontend_GetCapabilities(frontend, &capabilities);
102#if 0                   
103                        if (capabilities.vsb && (fe_type == eFREQ_TABLE_NTIA_VSB))
104                        { /* VSB */
105                                found_frontend = true;
106                                break;         
107                        }
108                        else if (capabilities.qam) {
109                                found_frontend = true;
110                                break;
111                        }
112#endif
113                        if (capabilities.qam) {
114                                found_frontend = true;
115                                break;
116                        }
117                }
118        }
119
120        if (!found_frontend) 
121                return NULL;
122
123//      s_tuner.fe_type = fe_type;
124        s_tuner.frontend = frontend;
125        s_tuner.parserBand = NEXUS_ParserBand_e0;
126
127        NEXUS_Frontend_GetUserParameters(s_tuner.frontend, &userParams);
128
129        NEXUS_ParserBand_GetSettings(s_tuner.parserBand, &parserBandSettings);
130        parserBandSettings.sourceType = NEXUS_ParserBandSourceType_eInputBand;
131        parserBandSettings.sourceTypeSettings.inputBand = userParams.param1;
132        parserBandSettings.transportType = NEXUS_TransportType_eTs;
133        parserBandSettings.maxDataRate = 42*1024*1024;
134        NEXUS_ParserBand_SetSettings(s_tuner.parserBand, &parserBandSettings);
135
136        return &s_tuner;
137}       
138
139int btuner_tune(btuner_t tuner, unsigned int freq, btuner_params *params)
140{
141        NEXUS_FrontendQamSettings qamSettings;
142        NEXUS_FrontendQamStatus qamStatus;
143        bool locked = false;
144
145        NEXUS_Frontend_GetDefaultQamSettings(&qamSettings);
146        qamSettings.frequency = freq;
147        qamSettings.mode = NEXUS_FrontendQamMode_e256; /*params->qamMode;*/
148        qamSettings.annex = (params->fecMode==eFEC_ANNEX_B)?NEXUS_FrontendQamAnnex_eB:NEXUS_FrontendQamAnnex_eA;
149        qamSettings.lockCallback.callback = bapp_tuner_lock_callback;
150        qamSettings.lockCallback.context = tuner;
151        if (NEXUS_Frontend_TuneQam(tuner->frontend, &qamSettings) == BERR_SUCCESS) {
152                BKNI_WaitForEvent(tuner->lockEvent, tuner->timeout);
153                NEXUS_Frontend_GetQamStatus(tuner->frontend, &qamStatus);
154                locked = qamStatus.receiverLock;
155        }
156       
157        if (locked) return 0;
158        else return -1; 
159}
160
161void btuner_params_init(btuner_params *ds, btuner_t tuner)
162{
163        BSTD_UNUSED(tuner);
164        BKNI_Memset(ds, 0, sizeof(btuner_params));
165}
166
167bresult btuner_get_status(btuner_t tuner, btuner_status *status)
168{
169        NEXUS_FrontendQamStatus qamStatus;
170
171        BDBG_ASSERT(tuner);
172        BDBG_ASSERT(status);
173
174        BKNI_Memset(status, 0, sizeof(btuner_status));
175        NEXUS_Frontend_GetQamStatus(tuner->frontend, &qamStatus);
176        status->freq = qamStatus.settings.frequency;
177        status->snr = qamStatus.snrEstimate;
178        status->lock = qamStatus.receiverLock;
179        status->mode = (btuner_qam_mode)qamStatus.settings.mode;
180        status->fecMode = (btuner_fec_mode)qamStatus.settings.annex;
181
182        status->goodRsBlockCount = qamStatus.goodRsBlockCount;
183        status->berRawCount = qamStatus.berRawCount;
184
185        status->carrierFreqOffset = qamStatus.carrierFreqOffset;
186        status->carrierPhaseOffset = qamStatus.carrierPhaseOffset;
187       
188        status->rxSymbolRate = qamStatus.symbolRate;
189        status->equalizerGain = qamStatus.equalizerGain;
190        status->postRsBER = qamStatus.postRsBer;
191        status->power = qamStatus.dsChannelPower;
192        status->isSpectrumInverted = qamStatus.spectrumInverted;
193/*
194        status->agcIntLevel =
195        status->agcExtLevel =   
196        status->elapsedTimeSec =
197*/
198        return b_ok;
199}
200
201bresult btuner_get_softdecisions(
202        btuner_t tuner,                                 /* tuner handle */
203        btuner_softdecision_t *pdes,    /* [out] array of soft decisions */
204        size_t length                                   /* number of soft decisions to get */
205        )
206{
207        /* NEXUS_FrontendSoftDecision and btuner_softdecision_t should be match */
208        NEXUS_Frontend_GetSoftDecisions(tuner->frontend, (NEXUS_FrontendSoftDecision *)pdes, length);
209        return b_ok;
210}
211
212bresult btuner_reset_status(btuner_t tuner)
213{
214        NEXUS_Frontend_ResetStatus(tuner->frontend);
215        return b_ok;
216}
Note: See TracBrowser for help on using the repository browser.