1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file drvDMD_INTERN_DVBS.c
98 /// @brief DVBS Driver Interface
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101
102
103 //-------------------------------------------------------------------------------------------------
104 // Include Files
105 //-------------------------------------------------------------------------------------------------
106 // Common Definition
107 #ifdef MSOS_TYPE_LINUX_KERNEL
108 #include <linux/string.h>
109 #else
110 #include <string.h>
111 #include <stdio.h>
112 #include <math.h>
113 #endif
114 #include "MsCommon.h"
115 #include "MsVersion.h"
116 #include "MsOS.h"
117
118 // Internal Definition
119 //#include "regCHIP.h"
120 //#include "regAVD.h"
121 //#include "mapi_tuner.h"
122 #include "drvSYS.h"
123 #include "drvDMD_VD_MBX.h"
124 #include "drvDMD_INTERN_DVBS_v2.h"
125 #include "halDMD_INTERN_DVBS.h"
126 #include "halDMD_INTERN_common.h"
127 #include "drvSAR.h" // for Utopia2
128 #include "utopia.h"
129 #include "utopia_dapi.h"
130 #include "../../utopia_core/utopia_driver_id.h"
131 #include "ULog.h"
132 //-------------------------------------------------------------------------------------------------
133 // Driver Compiler Options
134 //-------------------------------------------------------------------------------------------------
135
136
137 //-------------------------------------------------------------------------------------------------
138 // Local Defines
139 //-------------------------------------------------------------------------------------------------
140
141
142 //-------------------------------------------------------------------------------------------------
143 // Local Structurs
144 //-------------------------------------------------------------------------------------------------
145
146
147 //-------------------------------------------------------------------------------------------------
148 // Global Variables
149 //-------------------------------------------------------------------------------------------------
150 #define DMD_LOCK() \
151 do{ \
152 MS_ASSERT(MsOS_In_Interrupt() == FALSE); \
153 if (_s32DMD_DVBS_Mutex == -1) return FALSE; \
154 if (_u8DMD_DVBS_DbgLevel == DMD_DVBS_DBGLV_DEBUG) printf("%s lock mutex\n", __FUNCTION__);\
155 MsOS_ObtainMutex(_s32DMD_DVBS_Mutex, MSOS_WAIT_FOREVER);\
156 }while(0)
157
158 #define DMD_UNLOCK() \
159 do{ \
160 MsOS_ReleaseMutex(_s32DMD_DVBS_Mutex);\
161 if (_u8DMD_DVBS_DbgLevel == DMD_DVBS_DBGLV_DEBUG) printf("%s unlock mutex\n", __FUNCTION__); \
162 }while(0)
163
164 //-------------------------------------------------------------------------------------------------
165 // Local Variables
166 //-------------------------------------------------------------------------------------------------
167 MS_BOOL bIsDVBS = FALSE; // Usage for STR
168 #if 1
169 static MSIF_Version _drv_dmd_dvbs_intern_version = {
170 .MW = { DMD_DVBS_INTERN_VER, },
171 };
172 #else
173 static MSIF_Version _drv_dmd_dvbs_intern_version;
174 #endif
175
176
177
178 static const char pDMD_DVBS_MutexString[]={"Mutex DMD DVBS"};
179 static DMD_DVBS_InitData_Transform _sDMD_DVBS_InitData;
180 DMD_DVBS_DbgLv _u8DMD_DVBS_DbgLevel=DMD_DVBS_DBGLV_NONE;
181 static MS_S32 _s32DMD_DVBS_Mutex=-1;
182 DMD_DVBS_Info sDMD_DVBS_Info;
183 static MS_U16 u16DMD_DVBS_AutoSymbol_Timeout = 10000, u16DMD_DVBS_FixSymbol_AutoQam_Timeout=2000, u16DMD_DVBS_FixSymbol_FixQam_Timeout=1000;
184 //static MS_U32 u32DMD_DVBS_PrevScanTime=0;
185 static MS_U32 u32DMD_DVBS_ScanCount=0;
186
187 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
188 fpIntCallBack fpCB = NULL;
189 #define DMD_EVT_MASK 0x0F
190 #define DMD_EVT_MCU_INT 0x01
191 #define DMD_EVT_TASK_STACK_SIZE 4096
192 static MS_U8 u8StackBuffer[DMD_EVT_TASK_STACK_SIZE];
193 static MS_S32 _s32DmdEventTaskId = -1;
194 static MS_S32 _s32DmdEventId = -1;
195 static MS_U32 u32Events;
196 extern fpIntCallBack fpCB;
197 #endif
198
199 //Debug Only-
200
201 //-------------------------------------------------------------------------------------------------
202 // Debug Functions
203 //-------------------------------------------------------------------------------------------------
204 //#define MS_DEBUG 1
205 #ifdef MS_DEBUG
206 #define DMD_DBG(x) (x)
207 #else
208 #define DMD_DBG(x) //(x)
209 #endif
210 #ifdef MS_DEBUG
211 #define DBG_INTERN_DVBS(x) x
212 #define DBG_GET_SIGNAL_DVBS(x) x
213 #define DBG_INTERN_DVBS_TIME(x) x
214 #define DBG_INTERN_DVBS_LOCK(x) x
215 #define INTERN_DVBS_INTERNAL_DEBUG 1
216 #else
217 #define DBG_INTERN_DVBS(x) //x
218 #define DBG_GET_SIGNAL_DVBS(x) //x
219 #define DBG_INTERN_DVBS_TIME(x) //x
220 #define DBG_INTERN_DVBS_LOCK(x) //x
221 #define INTERN_DVBS_INTERNAL_DEBUG 0
222 #endif
223
224 #ifdef MSOS_TYPE_LINUX_KERNEL
225 #define DVBS2FEC_REG_BASE 0x3D00
226 #define DVBS2OPPRO_REG_BASE 0x3E00
227 #define INTERN_DVBS_DEMOD_WAIT_TIMEOUT (6000)
228 #endif
229 //-------------------------------------------------------------------------------------------------
230 // Local Functions
231 //-------------------------------------------------------------------------------------------------
232
233 typedef MS_BOOL (*IOCTL_DVBS_Init)(DMD_DVBS_InitData_Transform *pDMD_DVBS_InitData, MS_U32 u32InitDataLen);
234 typedef MS_BOOL (*IOCTL_DVBS_Exit)(void);
235 typedef MS_BOOL (*IOCTL_DVBS_SetDbgLevel)(DMD_DVBS_DbgLv u8DbgLevel);
236 typedef const DMD_DVBS_Info* (*IOCTL_DVBS_GetInfo)(void);
237 typedef MS_BOOL (*IOCTL_DVBS_GetLibVer)(const MSIF_Version **ppVersion);
238 typedef MS_BOOL (*IOCTL_DVBS_GetFWVer)(MS_U16 *ver);
239 typedef MS_BOOL (*IOCTL_DVBS_GetDSPReg)(MS_U16 u16Addr, MS_U8 *pu8Data);
240 typedef MS_BOOL (*IOCTL_DVBS_SetDSPReg)(MS_U16 u16Addr, MS_U8 pu8Data);
241 typedef MS_BOOL (*IOCTL_DVBS_GetReg)(MS_U16 u16Addr, MS_U8 *pu8Data);
242 typedef MS_BOOL (*IOCTL_DVBS_SetReg)(MS_U16 u16Addr, MS_U8 u8Data);
243 typedef MS_BOOL (*IOCTL_DVBS_SetSerialControl)(MS_BOOL bEnable);
244 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_Config_symbol_rate_list)(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num);
245 typedef MS_BOOL (*IOCTL_DVBS_SetConfig_symbol_rate_list)(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num);
246 typedef MS_BOOL (*IOCTL_DVBS_SetActive)(MS_BOOL bEnable);
247 typedef MS_BOOL (*IOCTL_DVBS_GetLockWithRFPower)(DMD_DVBS_GETLOCK_TYPE eType, DMD_DVBS_LOCK_STATUS *eLockStatus, MS_U32 fCurrRFPowerDbm, MS_U32 fNoChannelRFPowerDbm);
248 typedef MS_BOOL (*IOCTL_DVBS_GetSignalStrengthWithRFPower)(MS_U16 fRFPowerDbm, DMD_DVBS_DEMOD_TYPE *pDemodType, MS_U8 *u8_DVBS2_CurrentCodeRateLocal, MS_U8 *u8_DVBS2_CurrentConstellationLocal);
249 //typedef MS_BOOL (*IOCTL_DVBS_GetSignalQualityWithRFPower)(MS_U16 *u16Quality);
250
251 typedef MS_BOOL (*IOCTL_DVBS_ActiveDmdSwitch)(MS_U8 demod_no);
252
253 typedef MS_BOOL (*IOCTL_DVBS_GetSNR)(MS_U32 *u32NDA_SNR_A, MS_U32 *u32NDA_SNR_AB);
254
255 typedef MS_BOOL (*IOCTL_DVBS_GetPostViterbiBer)(MS_U32 *BitErr_reg, MS_U16 *BitErrPeriod_reg);
256 typedef MS_BOOL (*IOCTL_DVBS_GetIFAGC)(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err);
257
258 typedef MS_BOOL (*IOCTL_DVBS_GetPacketErr)(MS_U16 *pktErr);
259 typedef MS_BOOL (*IOCTL_DVBS_GetCellID)(MS_U16 *u16CellID);
260
261 typedef MS_BOOL (*IOCTL_DVBS_GetStatus)(DMD_DVBS_MODULATION_TYPE *pQAMMode, MS_U32 *u32SymbolRate, MS_S16 *s16CFO);
262 //typedef MS_BOOL (*IOCTL_DVBS_GetStatus)(DMD_DVBS_MODULATION_TYPE *pQAMMode, MS_U16 *u16SymbolRate);
263 typedef MS_U32 (*IOCTL_DVBS_SetPowerState)(EN_POWER_MODE u16PowerState);
264 typedef MS_BOOL (*IOCTL_DVBS_Get_FreqOffset)(MS_S16 *s16CFO);
265 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_Start)(MS_U16 u16StartFreq, MS_U16 u16EndFreq);
266 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_NextFreq)(MS_BOOL* bBlindScanEnd);
267 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_Cancel)(void);
268 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_End)(void);
269 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_GetChannel)(MS_U16 u16ReadStart, MS_U16* u16TPNum, HAL_DEMOD_MS_FE_CARRIER_PARAM *pTable);
270 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_GetCurrentFreq)(MS_U32 *u32CurrentFeq);
271 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_WaitCurFreqFinished)(MS_U8* u8Progress,MS_U8 *u8FindNum, MS_U8 *substate_reg, MS_U32 *u32Data, MS_U16 *symbolrate_reg, MS_U16 *CFO_reg);
272 typedef MS_BOOL (*IOCTL_DVBS_BlindScan_GetTunerFreq)(MS_U16 *u16TunerCenterFreq, MS_U16 *u16TunerCutOffFreq);
273 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_Init)(void);
274 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_SetLNBOut)(MS_BOOL bLow);
275 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_GetLNBOut)(MS_BOOL* bLNBOutLow);
276 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_Set22kOnOff)(MS_BOOL b22kOn);
277 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_Get22kOnOff)(MS_BOOL* b22kOn);
278 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_SendCmd)(MS_U8* pCmd,MS_U8 u8CmdSize);
279 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_SetTxToneMode)(MS_BOOL bTxTone22kOff);
280 typedef MS_BOOL (*IOCTL_DVBS_DiSEqC_SetTone)(MS_BOOL bTone1);
281 typedef MS_BOOL (*IOCTL_DVBS_UnicableAGCCheckPower)(MS_BOOL pbAGCCheckPower);
282 typedef MS_BOOL (*IOCTL_DVBS_GetTsDivNum)(MS_U32 *u32SymbolRate, MS_U8* system_type_reg, MS_U8 *code_rate_idx, MS_U8 *fec_type_idx, MS_U8 *pilot_flag, MS_U32 *u32temp, MS_U8 *code_rate_reg);
283 typedef MS_BOOL (*IOCTL_DVBS_GetCurrentDemodCodeRate)(DMD_DVBS_CODE_RATE_TYPE *pCodeRate);
284 typedef MS_BOOL (*IOCTL_DVBS_GetTunrSignalLevel_PWR)(MS_U16 *u16Data);
285 #ifdef UFO_SUPPORT_VCM
286 //Terry add
287 typedef MS_BOOL (*IOCTL_DVBS_Set_IS_ID)(MS_U8 u8ISID);
288 typedef MS_BOOL (*IOCTL_DVBS_Set_Default_IS_ID)(MS_U8 *u8ISID, MS_U8 *u8ISID_table);
289 typedef MS_BOOL (*IOCTL_DVBS_Get_IS_ID_INFO)(MS_U8 *u8ISID, MS_U8 *u8ISID_table);
290 typedef MS_BOOL (*IOCTL_DVBS_VCM_INIT)(DMD_DVBS_VCM_OPT u8VCM_OPT, MS_U8 u8IS_ID, MS_U32 u32DMD_DVBS2_DJB_START_ADDR);
291 typedef MS_BOOL (*IOCTL_DVBS_VCM_CHECK)(void);
292 typedef MS_BOOL (*IOCTL_DVBS_VCM_ENABLED)(MS_U8 u8VCM_ENABLED);
293 typedef MS_BOOL (*IOCTL_DVBS_VCM_MODE)(DMD_DVBS_VCM_OPT u8VCM_OPT);
294 #endif
295
296 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
297 typedef MS_BOOL (*IOCTL_DVBS_INT_MODE)(fpIntCallBack fpCBReg);
298 #endif
299
300 #ifdef UFO_DEMOD_GetParam_NEW_FLOW
301 typedef MS_BOOL (*IOCTL_DVBS_GetParam)(PDVBS_GET_INFO pParam);
302 #endif
303
304 #ifdef UFO_DEMOD_GET_AGC_INFO
305 typedef MS_BOOL (*IOCTL_DVBS_GetAGC_INFO)(MS_U8 u8dbg_mode, MS_U16 *pu16Data);
306 #endif
307
308 typedef struct DVBS_INSTANT_PRIVATE
309 {
310 IOCTL_DVBS_Init fpDVBS_Init;
311 IOCTL_DVBS_Exit fpDVBS_Exit;
312 IOCTL_DVBS_SetDbgLevel fpDVBS_SetDbgLevel;
313 IOCTL_DVBS_GetInfo fpDVBS_GetInfo;
314 IOCTL_DVBS_GetLibVer fpDVBS_GetLibVer;
315 IOCTL_DVBS_GetFWVer fpDVBS_GetFWVer;
316 IOCTL_DVBS_GetDSPReg fpDVBS_GetDSPReg;
317 IOCTL_DVBS_SetDSPReg fpDVBS_SetDSPReg;
318 IOCTL_DVBS_GetReg fpDVBS_GetReg;
319 IOCTL_DVBS_SetReg fpDVBS_SetReg;
320 IOCTL_DVBS_SetSerialControl fpDVBSSetSerialControl;
321 IOCTL_DVBS_BlindScan_Config_symbol_rate_list fpDVBS_BlindScan_Config_symbol_rate_list;
322 IOCTL_DVBS_SetConfig_symbol_rate_list fpDVBS_SetConfig_symbol_rate_list;
323 IOCTL_DVBS_SetActive fpDVBS_SetActive;
324 IOCTL_DVBS_GetLockWithRFPower fpDVBS_GetLockWithRFPower;
325 IOCTL_DVBS_GetSignalStrengthWithRFPower fpDVBS_GetSignalStrengthWithRFPower;
326 //IOCTL_DVBS_GetSignalQualityWithRFPower fpDVBS_GetSignalQualityWithRFPower;
327 IOCTL_DVBS_ActiveDmdSwitch fpDVBS_ActiveDmdSwitch;
328 IOCTL_DVBS_GetSNR fpDVBS_GetSNR;
329 IOCTL_DVBS_GetPostViterbiBer fpDVBS_GetPostViterbiBer;
330 IOCTL_DVBS_GetPacketErr fpDVBS_GetPacketErr;
331 IOCTL_DVBS_GetCellID fpDVBS_GetCellID;
332 IOCTL_DVBS_GetStatus fpDVBS_GetStatus;
333 IOCTL_DVBS_SetPowerState fpDVBS_SetPowerState;
334 IOCTL_DVBS_Get_FreqOffset fpDVBS_Get_FreqOffset;
335 IOCTL_DVBS_BlindScan_Start fpDVBS_BlindScan_Start;
336 IOCTL_DVBS_BlindScan_NextFreq fpDVBS_BlindScan_NextFreq;
337 IOCTL_DVBS_BlindScan_Cancel fpDVBS_BlindScan_Cancel;
338 IOCTL_DVBS_BlindScan_End fpDVBS_BlindScan_End;
339 IOCTL_DVBS_BlindScan_GetChannel fpDVBS_BlindScan_GetChannel;
340 IOCTL_DVBS_BlindScan_GetCurrentFreq fpDVBS_BlindScan_GetCurrentFreq;
341 IOCTL_DVBS_BlindScan_WaitCurFreqFinished fpDVBS_BlindScan_WaitCurFreqFinished;
342 IOCTL_DVBS_BlindScan_GetTunerFreq fpDVBS_BlindScan_GetTunerFreq;
343 IOCTL_DVBS_DiSEqC_Init fpDVBS_DiSEqC_Init;
344 IOCTL_DVBS_DiSEqC_SetLNBOut fpDVBS_DiSEqC_SetLNBOut;
345 IOCTL_DVBS_DiSEqC_GetLNBOut fpDVBS_DiSEqC_GetLNBOut;
346 IOCTL_DVBS_DiSEqC_Set22kOnOff fpDVBS_DiSEqC_Set22kOnOff;
347 IOCTL_DVBS_DiSEqC_Get22kOnOff fpDVBS_DiSEqC_Get22kOnOff;
348 IOCTL_DVBS_DiSEqC_SendCmd fpDVBS_DiSEqC_SendCmd;
349 IOCTL_DVBS_DiSEqC_SetTxToneMode fpDVBS_DiSEqC_SetTxToneMode;
350 IOCTL_DVBS_DiSEqC_SetTone fpDVBS_DiSEqC_SetTone;
351 IOCTL_DVBS_UnicableAGCCheckPower fpDVBS_UnicableAGCCheckPower;
352
353 //Leo add
354 IOCTL_DVBS_GetTsDivNum fpDVBS_GetTsDivNum;
355 IOCTL_DVBS_GetIFAGC fpDVBS_GetIFAGC;
356 IOCTL_DVBS_GetCurrentDemodCodeRate fpDVBS_GetCurrentDemodCodeRate;
357 IOCTL_DVBS_GetTunrSignalLevel_PWR fpDVBS_GetTunrSignalLevel_PWR;
358 #ifdef UFO_SUPPORT_VCM
359 //Terry add
360 IOCTL_DVBS_Set_IS_ID fpDVBS_Set_IS_ID;
361 IOCTL_DVBS_Set_Default_IS_ID fpDVBS_Set_Default_IS_ID;
362 IOCTL_DVBS_Get_IS_ID_INFO fpDVBS_Get_IS_ID_INFO;
363 IOCTL_DVBS_VCM_INIT fpDVBS_VCM_INIT;
364 IOCTL_DVBS_VCM_CHECK fpDVBS_VCM_CHECK;
365 IOCTL_DVBS_VCM_ENABLED fpDVBS_VCM_ENABLED;
366 IOCTL_DVBS_VCM_MODE fpDVBS_VCM_MODE;
367 #endif
368
369 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
370 IOCTL_DVBS_INT_MODE fpDVBS_INT_MODE;
371 #endif
372
373 #ifdef UFO_DEMOD_GetParam_NEW_FLOW
374 IOCTL_DVBS_GetParam fpDVBS_GetParam;
375 #endif
376
377 #ifdef UFO_DEMOD_GET_AGC_INFO
378 IOCTL_DVBS_GetAGC_INFO fpDVBS_GetAGC_INFO;
379 #endif
380 } DVBS_INSTANT_PRIVATE;
381
382
383 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
_mdrv_dmd_dvbs_event_task(MS_U32 argc,void * argv)384 static void _mdrv_dmd_dvbs_event_task(MS_U32 argc, void *argv)
385 {
386 MS_U8 u8IntType;
387 do
388 {
389 MsOS_WaitEvent(_s32DmdEventId, DMD_EVT_MCU_INT,&u32Events, E_OR_CLEAR, MSOS_WAIT_FOREVER);
390 INTERN_DVBS_Demod_Interrupt_Monitor(&u8IntType);
391 //if(_sDMD_DVBS_InitData.fpCB != NULL)
392
393 if(u8IntType == 1)
394 MDrv_DMD_DVBS2_TS_DivNum_Calculation();
395
396 if(fpCB!=NULL)
397 {
398 //_sDMD_DVBS_InitData.fpCB(u8IntType);
399 fpCB(u8IntType);
400 }
401 }while(1);
402 }
403
_mdrv_dmd_dvbs_cb(InterruptNum irq)404 static void _mdrv_dmd_dvbs_cb(InterruptNum irq)
405 {
406 MsOS_ClearEvent(_s32DmdEventId, DMD_EVT_MASK);
407 MsOS_SetEvent(_s32DmdEventId, DMD_EVT_MCU_INT);
408 MsOS_EnableInterrupt(E_INT_FIQ_DMDMCU2HK);
409 }
410 #endif
411
412
413 MS_U8 DVBS_TS_PHASE_EN =0;
414 MS_U8 DVBS_TS_PHASE_NUM = 0;
415 #ifdef MSOS_TYPE_LINUX_KERNEL
416 #if 1
417 static float _LogApproxTableX[80] =
418 { 1.00, 1.30, 1.69, 2.20, 2.86, 3.71, 4.83, 6.27, 8.16, 10.60, 13.79,
419 17.92, 23.30, 30.29, 39.37, 51.19, 66.54, 86.50, 112.46, 146.19,
420 190.05, 247.06, 321.18, 417.54, 542.80, 705.64, 917.33, 1192.53,
421 1550.29, 2015.38, 2620.00, 3405.99, 4427.79, 5756.13, 7482.97,
422 9727.86, 12646.22, 16440.08, 21372.11, 27783.74, 36118.86,
423 46954.52, 61040.88, 79353.15, 103159.09, 134106.82, 174338.86,
424 226640.52, 294632.68, 383022.48, 497929.22, 647307.99, 841500.39, 1093950.50,
425 1422135.65, 1848776.35, 2403409.25, 3124432.03, 4061761.64, 5280290.13,
426 6864377.17, 8923690.32, 11600797.42, 15081036.65, 19605347.64, 25486951.94,
427 33133037.52, 43072948.77, 55994833.40, 72793283.42, 94631268.45,
428 123020648.99, 159926843.68, 207904896.79, 270276365.82, 351359275.57,
429 456767058.24, 593797175.72, 771936328.43, 1003517226.96
430 };
431
432 static float _LogApproxTableY[80] =
433 { 0.00, 0.11, 0.23, 0.34, 0.46, 0.57, 0.68, 0.80, 0.91, 1.03, 1.14, 1.25,
434 1.37, 1.48, 1.60, 1.71, 1.82, 1.94, 2.05, 2.16, 2.28, 2.39, 2.51, 2.62,
435 2.73, 2.85, 2.96, 3.08, 3.19, 3.30, 3.42, 3.53, 3.65, 3.76, 3.87, 3.99,
436 4.10, 4.22, 4.33, 4.44, 4.56, 4.67, 4.79, 4.90, 5.01, 5.13, 5.24, 5.36,
437 5.47, 5.58, 5.70, 5.81, 5.93, 6.04, 6.15, 6.27, 6.04, 6.15, 6.27, 6.38,
438 6.49, 6.61, 6.72, 6.84, 6.95, 7.06, 7.18, 7.29, 7.41, 7.52, 7.63, 7.75,
439 7.86, 7.98, 8.09, 8.20, 8.32, 8.43, 8.55, 8.66
440 };
441
Log10Approx(float flt_x)442 static float Log10Approx(float flt_x)
443 {
444 MS_U8 indx = 0;
445
446 do {
447 if (flt_x < _LogApproxTableX[indx])
448 break;
449 indx++;
450 }while (indx < 79); //stop at indx = 80
451
452 return _LogApproxTableY[indx];
453 }
454 #else
Log10Approx(float flt_x)455 static float Log10Approx(float flt_x)
456 {
457 MS_U32 u32_temp = 1;
458 MS_U8 indx = 0;
459
460 do {
461 u32_temp = u32_temp << 1;
462 if (flt_x < (float)u32_temp)
463 break;
464 }while (++indx < 32);
465
466 // 10*log10(X) ~= 0.3*N, when X ~= 2^N
467 return (float)0.3 * indx;
468 }
469 #endif
470 #endif
471
472
473 //-------------------------------------------------------------------------------------------------
474 // Global Functions
475 //-------------------------------------------------------------------------------------------------
DMD_DVBS_Init(DMD_DVBS_InitData_Transform * pDMD_DVBS_InitData,MS_U32 u32InitDataLen)476 MS_BOOL DMD_DVBS_Init(DMD_DVBS_InitData_Transform *pDMD_DVBS_InitData, MS_U32 u32InitDataLen)
477 {
478 char pDMD_DVBS_MutexString[16];
479 MS_U32 u32IfFrequency = 0L, u32FsFrequency = 96000L;
480 MS_U8 u8IQSwap=0, u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
481 MS_BOOL bRFAGCTristateEnable = 1;
482 MS_BOOL bIFAGCTristateEnable = 0;
483 bIsDVBS = TRUE;
484
485 if (_s32DMD_DVBS_Mutex != -1)
486 {
487 DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBS_Init more than once\n"));
488 return FALSE;
489 }
490
491 if (NULL == strncpy(pDMD_DVBS_MutexString,"Mutex DMD DVBS",16))
492 {
493 DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBS_Init strcpy Fail\n"));
494 return FALSE;
495 }
496 _s32DMD_DVBS_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBS_MutexString, MSOS_PROCESS_SHARED);
497 if ( _s32DMD_DVBS_Mutex == -1)
498 {
499 DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBS_Init Create Mutex Fail\n"));
500 return FALSE;
501 }
502
503 #ifdef MS_DEBUG
504 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
505 {
506 ULOGD("DEMOD","MDrv_DMD_DVBS_Init\n");
507 }
508 #endif
509
510 if ( sizeof(_sDMD_DVBS_InitData) == u32InitDataLen)
511 {
512 memcpy(&_sDMD_DVBS_InitData, pDMD_DVBS_InitData, u32InitDataLen);
513 }
514 else
515 {
516 DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBS_Init input data structure incorrect\n"));
517 return FALSE;
518 }
519
520 if (_sDMD_DVBS_InitData.u8SarChannel != 0xFF)
521 {
522 //MDrv_SAR_Adc_Config(_sDMD_DVBS_InitData.u8SarChannel, TRUE);
523 }
524 DMD_LOCK();
525 //_u8DMD_DVBS_DbgLevel=DMD_DVBS_DBGLV_DEBUG;
526 MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBS);
527 HAL_DMD_RegInit();
528
529 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
530 {
531 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=2)
532 {
533 bRFAGCTristateEnable = (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[3] & (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
534 bIFAGCTristateEnable = (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[3] & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
535 }
536 else
537 {
538 bRFAGCTristateEnable = 1;
539 bIFAGCTristateEnable = 0;
540 }
541 }
542 else
543 {
544 bRFAGCTristateEnable = 1;
545 bIFAGCTristateEnable = 0;
546 }
547
548 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
549 {
550 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=3)
551 {
552 u32IfFrequency = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[4]; // IF frequency
553 u32IfFrequency = (u32IfFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[5]; // IF frequency
554 u32IfFrequency = (u32IfFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[6]; // IF frequency
555 u32IfFrequency = (u32IfFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[7]; // IF frequency
556 u32FsFrequency = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[8]; // FS frequency
557 u32FsFrequency = (u32FsFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[9]; // FS frequency
558 u32FsFrequency = (u32FsFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[10]; // FS frequency
559 u32FsFrequency = (u32FsFrequency<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[11]; // FS frequency
560 u8IQSwap = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[12]; // IQ Swap
561 u8ADCIQMode = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[13]; // u8ADCIQMode : 0=I path, 1=Q path, 2=both IQ
562 u8PadSel = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[14]; // u8PadSel : 0=Normal, 1=analog pad
563 bPGAEnable = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[15]; // bPGAEnable : 0=disable, 1=enable
564 u8PGAGain = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[16]; // u8PGAGain : default 5
565 }
566 else
567 {
568
569 }
570 }
571 else
572 {
573
574 }
575
576 u16DMD_DVBS_AutoSymbol_Timeout = 10000;
577 u16DMD_DVBS_FixSymbol_AutoQam_Timeout=2000;
578 u16DMD_DVBS_FixSymbol_FixQam_Timeout=2000;
579 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
580 {
581 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=4)
582 {
583 u16DMD_DVBS_AutoSymbol_Timeout = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[17];
584 u16DMD_DVBS_AutoSymbol_Timeout = (u16DMD_DVBS_AutoSymbol_Timeout<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[18];
585 if (u16DMD_DVBS_AutoSymbol_Timeout < 5000) u16DMD_DVBS_AutoSymbol_Timeout=5000;
586 //printf("u16DMD_DVBS_AutoSymbol_Timeout %d\n",u16DMD_DVBS_AutoSymbol_Timeout);
587
588 u16DMD_DVBS_FixSymbol_AutoQam_Timeout = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[19];
589 u16DMD_DVBS_FixSymbol_AutoQam_Timeout = (u16DMD_DVBS_FixSymbol_AutoQam_Timeout<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[20];
590 if (u16DMD_DVBS_FixSymbol_AutoQam_Timeout < 2000) u16DMD_DVBS_FixSymbol_AutoQam_Timeout=2000;
591 //printf("u16DMD_DVBS_FixSymbol_AutoQam_Timeout %d\n",u16DMD_DVBS_FixSymbol_AutoQam_Timeout);
592
593 u16DMD_DVBS_FixSymbol_FixQam_Timeout = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[21];
594 u16DMD_DVBS_FixSymbol_FixQam_Timeout = (u16DMD_DVBS_FixSymbol_FixQam_Timeout<<8)+_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[22];
595 if (u16DMD_DVBS_FixSymbol_FixQam_Timeout < 1000) u16DMD_DVBS_FixSymbol_FixQam_Timeout=1000;
596 //printf("u16DMD_DVBS_FixSymbol_FixQam_Timeout %d\n",u16DMD_DVBS_FixSymbol_FixQam_Timeout);
597 }
598 else
599 {
600 }
601 }
602 else
603 {
604 }
605
606 #ifdef MS_DEBUG
607 ULOGD("DEMOD","u32IfFrequency %ld\n",u32IfFrequency);
608 ULOGD("DEMOD","u32FsFrequency %ld\n",u32FsFrequency);
609 ULOGD("DEMOD","u8IQSwap %d\n",u8IQSwap);
610 #endif
611
612 if (bIFAGCTristateEnable)
613 {
614 MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
615 }
616 else
617 {
618 MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
619 }
620
621 if (_sDMD_DVBS_InitData.u8DMD_DVBS_DSPRegInitExt != NULL)
622 {
623 if (_sDMD_DVBS_InitData.u8DMD_DVBS_DSPRegInitExt[0]>=1)
624 {
625 INTERN_DVBS_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, _sDMD_DVBS_InitData.u8DMD_DVBS_DSPRegInitExt, _sDMD_DVBS_InitData.u8DMD_DVBS_DSPRegInitSize);
626 }
627 else
628 {
629 ULOGD("DEMOD","u8DMD_DVBS_DSPRegInitExt Error\n");
630 }
631 }
632 else
633 {
634 INTERN_DVBS_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, NULL, 0);
635 }
636 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
637 if (_s32DmdEventId < 0)
638 {
639 _s32DmdEventId = MsOS_CreateEventGroup("DMD_INTERN_DVBS_Event");
640 if (_s32DmdEventId > 0)
641 ULOGD("DEMOD","[%s][%d] Event create ok\n",__FUNCTION__,__LINE__);
642 else
643 ULOGD("DEMOD","[%s][%d] create failed \n",__FUNCTION__,__LINE__);
644 }
645
646 MsOS_AttachInterrupt(E_INT_FIQ_DMDMCU2HK, _mdrv_dmd_dvbs_cb);
647 MsOS_DisableInterrupt(E_INT_FIQ_DMDMCU2HK);
648
649 if(_s32DmdEventTaskId < 0)
650 {
651 _s32DmdEventTaskId = MsOS_CreateTask(_mdrv_dmd_dvbs_event_task,
652 0,
653 E_TASK_PRI_HIGHEST,
654 TRUE,
655 u8StackBuffer,
656 DMD_EVT_TASK_STACK_SIZE,
657 "DMD_INTERN_DVBS_EVT_TASK");
658 if (_s32DmdEventTaskId > 0)
659 ULOGD("DEMOD","[%s][%d] Event task create ok\n",__FUNCTION__,__LINE__);
660 else
661 ULOGD("DEMOD","[%s][%d] create task failed \n",__FUNCTION__,__LINE__);
662 }
663 #endif
664
665 INTERN_DVBS_Version(&sDMD_DVBS_Info.u16Version);
666
667 DMD_UNLOCK();
668 #ifdef MS_DEBUG
669 ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBS_Info.u16Version);
670 #endif
671
672 return TRUE;
673 }
674
DMD_DVBS_Exit(void)675 MS_BOOL DMD_DVBS_Exit(void)
676 {
677 #ifdef MS_DEBUG
678 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
679 {
680 ULOGD("DEMOD","MDrv_DMD_DVBS_Exit\n");
681 }
682 #endif
683 bIsDVBS = FALSE;
684 DMD_LOCK();
685 INTERN_DVBS_Exit();
686 DMD_UNLOCK();
687 MsOS_DeleteMutex(_s32DMD_DVBS_Mutex);
688 _s32DMD_DVBS_Mutex= -1;
689 return TRUE;
690 }
691
DMD_DVBS_SetDbgLevel(DMD_DVBS_DbgLv u8DbgLevel)692 MS_BOOL DMD_DVBS_SetDbgLevel(DMD_DVBS_DbgLv u8DbgLevel)
693 {
694 DMD_LOCK();
695 _u8DMD_DVBS_DbgLevel = u8DbgLevel;
696 DMD_UNLOCK();
697 return TRUE;
698 }
699
DMD_DVBS_GetInfo(void)700 const DMD_DVBS_Info* DMD_DVBS_GetInfo(void)
701 {
702 MS_U8 state = 0;
703
704 #ifdef MS_DEBUG
705 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
706 {
707 ULOGD("DEMOD","MDrv_DMD_DVBS_GetInfo\n");
708 }
709 #endif
710 //for DBG
711 #if 1
712 MDrv_SYS_DMD_VD_MBX_ReadReg(FEC_REG_BASE + 0xE0, &state);
713 ULOGD("DEMOD"," @INTERN_DVBS_GetLock FSM 0x%x\n",state);
714 INTERN_DVBS_Show_AGC_Info();
715 INTERN_DVBS_info();
716 #endif
717
718 return (const DMD_DVBS_Info*)&sDMD_DVBS_Info;
719 }
720
DMD_DVBS_GetLibVer(const MSIF_Version ** ppVersion)721 MS_BOOL DMD_DVBS_GetLibVer(const MSIF_Version **ppVersion)
722 {
723 #ifdef MS_DEBUG
724 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
725 {
726 ULOGD("DEMOD","MDrv_DMD_DVBS_GetLibVer\n");
727 }
728 #endif
729 DMD_LOCK();
730 if (!ppVersion)
731 {
732 return FALSE;
733 }
734
735 *ppVersion = &_drv_dmd_dvbs_intern_version;
736 DMD_UNLOCK();
737 return TRUE;
738 }
739
DMD_DVBS_GetFWVer(MS_U16 * ver)740 MS_BOOL DMD_DVBS_GetFWVer(MS_U16 *ver)
741 {
742
743 MS_BOOL bRet;
744
745 DMD_LOCK();
746
747 bRet = INTERN_DVBS_Version(ver);
748 //printf("MDrv_DMD_DVBS_GetFWVer %x\n", *ver);
749 DMD_UNLOCK();
750
751 return bRet;
752
753 }
754
DMD_DVBS_GetDSPReg(MS_U16 u16Addr,MS_U8 * pu8Data)755 MS_BOOL DMD_DVBS_GetDSPReg(MS_U16 u16Addr, MS_U8 *pu8Data)
756 {
757 #ifdef CHIP_K1
758 MS_BOOL bRet;
759
760 DMD_LOCK();
761 bRet=MDrv_SYS_DMD_VD_MBX_ReadDSPReg(u16Addr, pu8Data);
762 DMD_UNLOCK();
763
764 #ifdef MS_DEBUG
765 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
766 {
767 ULOGD("DEMOD","MDrv_DMD_DVBS_GetDSPReg %x %x\n", u16Addr, *pu8Data);
768 }
769 #endif
770
771 return bRet;
772 #else
773 ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBS_GetDSPReg\n");
774 return FALSE;
775 #endif
776 }
777
DMD_DVBS_SetDSPReg(MS_U16 u16Addr,MS_U8 pu8Data)778 MS_BOOL DMD_DVBS_SetDSPReg(MS_U16 u16Addr, MS_U8 pu8Data)
779 {
780 #ifdef CHIP_K1
781 MS_BOOL bRet;
782
783 DMD_LOCK();
784 bRet=MDrv_SYS_DMD_VD_MBX_WriteDSPReg(u16Addr, pu8Data);
785 DMD_UNLOCK();
786
787 #ifdef MS_DEBUG
788 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
789 {
790 ULOGD("DEMOD","MDrv_DMD_DVBS_SetDSPReg %x %x\n", u16Addr, pu8Data);
791 }
792 #endif
793
794 return bRet;
795 #else
796 ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBS_SetDSPReg\n");
797 return FALSE;
798 #endif
799 }
800
801
DMD_DVBS_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)802 MS_BOOL DMD_DVBS_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
803 {
804 MS_BOOL bRet;
805
806 DMD_LOCK();
807 bRet=MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, pu8Data);
808 DMD_UNLOCK();
809
810 #ifdef MS_DEBUG
811 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
812 {
813 ULOGD("DEMOD","MDrv_DMD_DVBS_GetReg %x %x\n", u16Addr, *pu8Data);
814 }
815 #endif
816 return bRet;
817 }
818
DMD_DVBS_SetReg(MS_U16 u16Addr,MS_U8 u8Data)819 MS_BOOL DMD_DVBS_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
820 {
821 MS_BOOL bRet;
822
823 #ifdef MS_DEBUG
824 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
825 {
826 ULOGD("DEMOD","MDrv_DMD_DVBS_SetReg %x %x\n", u16Addr, u8Data);
827 }
828 #endif
829 DMD_LOCK();
830 bRet=MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, u8Data);
831 DMD_UNLOCK();
832 return bRet;
833 }
834
DMD_DVBS_SetSerialControl(MS_BOOL bEnable)835 MS_BOOL DMD_DVBS_SetSerialControl(MS_BOOL bEnable)
836 {
837 MS_BOOL bRet;
838 MS_U8 u8TSClk;
839
840 #ifdef MS_DEBUG
841 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
842 {
843 ULOGD("DEMOD","MDrv_DMD_DVBS_SetSerialControl %d\n", bEnable);
844 }
845 #endif
846
847 DMD_LOCK();
848 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
849 {
850 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=1)
851 {
852 u8TSClk = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[2];
853 }
854 else
855 {
856 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
857 }
858 }
859 else
860 {
861 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
862 }
863 bRet=INTERN_DVBS_Serial_Control(bEnable, u8TSClk);
864 DMD_UNLOCK();
865 return bRet;
866 }
867
868 #ifdef UFO_DEMOD_BLINDSCAN_NEW_FLOW
DMD_DVBS_BlindScan_Config_symbol_rate_list(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)869 MS_BOOL DMD_DVBS_BlindScan_Config_symbol_rate_list(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
870 {
871 MS_BOOL bRet;
872 MS_U8 u8TSClk;
873 #ifdef MSOS_TYPE_LINUX_KERNEL
874 MS_U32 u32CurrentSR;
875 #endif
876 #ifdef MS_DEBUG
877 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
878 {
879 ULOGD("DEMOD","MDrv_DMD_DVBS_BlindScanConfig %ld %d %ld %d %d\n", u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS);
880 }
881 #endif
882
883 DMD_LOCK();
884 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
885 {
886 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=1)
887 {
888 u8TSClk = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[2];
889 }
890 else
891 {
892 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
893 }
894 }
895 else
896 {
897 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
898 }
899 bRet=INTERN_DVBS_BlindScan_Config(u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk, pu16_symbol_rate_list,u8_symbol_rate_list_num);
900 sDMD_DVBS_Info.u32SymbolRate = u32SymbolRate;
901 sDMD_DVBS_Info.eQamMode = eQamMode;
902 sDMD_DVBS_Info.u32IFFreq = u32IFFreq;
903 sDMD_DVBS_Info.bSpecInv = bSpecInv;
904 sDMD_DVBS_Info.bSerialTS = bSerialTS;
905 DMD_UNLOCK();
906 return bRet;
907 }
908 #endif
909
DMD_DVBS_SetConfig_symbol_rate_list(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)910 MS_BOOL DMD_DVBS_SetConfig_symbol_rate_list(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
911 {
912 MS_BOOL bRet;
913 MS_U8 u8TSClk;
914 #ifdef MSOS_TYPE_LINUX_KERNEL
915 MS_U32 u32CurrentSR;
916 #endif
917 #ifdef MS_DEBUG
918 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
919 {
920 ULOGD("DEMOD","MDrv_DMD_DVBS_SetConfig %ld %d %ld %d %d\n", u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS);
921 }
922 #endif
923
924 DMD_LOCK();
925 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt != NULL)
926 {
927 if (_sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[0]>=1)
928 {
929 u8TSClk = _sDMD_DVBS_InitData.u8DMD_DVBS_InitExt[2];
930 }
931 else
932 {
933 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
934 }
935 }
936 else
937 {
938 u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
939 }
940 bRet=INTERN_DVBS_Config(u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk, pu16_symbol_rate_list,u8_symbol_rate_list_num);
941 sDMD_DVBS_Info.u32SymbolRate = u32SymbolRate;
942 sDMD_DVBS_Info.eQamMode = eQamMode;
943 sDMD_DVBS_Info.u32IFFreq = u32IFFreq;
944 sDMD_DVBS_Info.bSpecInv = bSpecInv;
945 sDMD_DVBS_Info.bSerialTS = bSerialTS;
946 DMD_UNLOCK();
947 return bRet;
948 }
949
DMD_DVBS_SetActive(MS_BOOL bEnable)950 MS_BOOL DMD_DVBS_SetActive(MS_BOOL bEnable)
951 {
952 MS_BOOL bRet;
953
954 #ifdef MS_DEBUG
955 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
956 {
957 ULOGD("DEMOD","MDrv_DMD_DVBS_SetActive %d\n", bEnable);
958 }
959 #endif
960
961 DMD_LOCK();
962 bRet=INTERN_DVBS_Active(bEnable);
963 sDMD_DVBS_Info.u32ChkScanTimeStart = MsOS_GetSystemTime();
964 u32DMD_DVBS_ScanCount=0;
965 #ifdef MS_DEBUG
966 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
967 {
968 ULOGD("DEMOD","%s %ld\n", __FUNCTION__, sDMD_DVBS_Info.u32ChkScanTimeStart);
969 }
970 #endif
971 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
972 MsOS_EnableInterrupt(E_INT_FIQ_DMDMCU2HK);
973 #endif
974 DMD_UNLOCK();
975 return bRet;
976 }
977
978 #ifdef UFO_DEMOD_GetParam_NEW_FLOW
DMD_DVBS_GetParam(PDVBS_GET_INFO pParam)979 MS_BOOL DMD_DVBS_GetParam(PDVBS_GET_INFO pParam)
980 {
981 DMD_DVBS_CODE_RATE_TYPE coderate;
982 MS_U8 rolloff;
983 DMD_DVBS_MODULATION_TYPE modulationmode;
984 DMD_DVBS_DEMOD_TYPE DemodType;
985 HAL_DEMOD_EN_SAT_IQ_MODE SAT_IQ_MODE;
986
987 MS_S16 freqoff;
988 MS_BOOL bRet = TRUE;
989
990 DMD_LOCK();
991 bRet &= INTERN_DVBS_GetCurrentDemodCodeRate(&coderate);
992 bRet &= INTERN_DVBS_GetRollOff(&rolloff);
993 bRet &= INTERN_DVBS_GetCurrentModulationType(&modulationmode);
994 bRet &= INTERN_DVBS_GetCurrentDemodType(&DemodType); //get the DemodType from hal
995 bRet &= INTERN_DVBS_Get_FreqOffset(&freqoff);
996 bRet &= INTERN_DVBS_Get_IQ_MODE(&SAT_IQ_MODE);
997 DMD_UNLOCK();
998
999 if( DemodType == DMD_SAT_DVBS)
1000 DemodType = HAL_DEMOD_SAT_DVBS;
1001 else
1002 DemodType = HAL_DEMOD_SAT_DVBS2;
1003
1004 pParam->eCodeRate = coderate;
1005 pParam->eRollOff = rolloff;
1006 pParam->eConstellation = modulationmode;
1007 pParam->eDemodType = DemodType;
1008 pParam->eFreqoff = (float)freqoff;
1009 pParam->eIQ_Mode = SAT_IQ_MODE;
1010
1011 return bRet;
1012 }
1013 #endif
1014
1015 #ifdef UFO_DEMOD_GET_AGC_INFO
DMD_DVBS_GetAGCInfo(MS_U8 u8dbg_mode,MS_U16 * pu16Data)1016 MS_BOOL DMD_DVBS_GetAGCInfo(MS_U8 u8dbg_mode, MS_U16 *pu16Data)
1017 {
1018 MS_BOOL bRet;
1019 DMD_LOCK();
1020 bRet = INTERN_DVBS_AGC_Info(u8dbg_mode, pu16Data);
1021 DMD_UNLOCK();
1022 return bRet;
1023 }
1024 #endif
1025
DMD_DVBS_GetLockWithRFPower(DMD_DVBS_GETLOCK_TYPE eType,DMD_DVBS_LOCK_STATUS * eLockStatus,MS_U32 fCurrRFPowerDbm,MS_U32 fNoChannelRFPowerDbm)1026 MS_BOOL DMD_DVBS_GetLockWithRFPower(DMD_DVBS_GETLOCK_TYPE eType, DMD_DVBS_LOCK_STATUS *eLockStatus, MS_U32 fCurrRFPowerDbm, MS_U32 fNoChannelRFPowerDbm)
1027 {
1028 //MS_U32 u32CurrScanTime=0;
1029 MS_BOOL bRet=FALSE;
1030 DMD_LOCK();
1031 /*
1032 if ( eType == DMD_DVBS_GETLOCK ) // for channel scan
1033 {
1034 if (INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200, -200, 0))
1035 {
1036 *eLockStatus = DMD_DVBS_LOCK;
1037 }
1038 else
1039 {
1040 MS_U32 u32Timeout = 7000;//(sDMD_DVBS_Info.u32SymbolRate) ? 5000 : 15000;
1041
1042 u32CurrScanTime=MsOS_GetSystemTime();
1043 if (u32CurrScanTime - sDMD_DVBS_Info.u32ChkScanTimeStart < u32Timeout)
1044 {
1045 if (u32DMD_DVBS_ScanCount==0)
1046 {
1047 u32DMD_DVBS_PrevScanTime=u32CurrScanTime;
1048 u32DMD_DVBS_ScanCount++;
1049 }
1050
1051 if (_sDMD_DVBS_InitData.u8SarChannel != 0xFF)
1052 {
1053 //sDMD_DVBS_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBS_InitData.u8SarChannel);
1054 }
1055 else
1056 {
1057 sDMD_DVBS_Info.u8SarValue=0xFF;
1058 }
1059
1060 bRet=HAL_DMD_GetRFLevel(&fCurrRFPowerDbm, fCurrRFPowerDbm, sDMD_DVBS_Info.u8SarValue,
1061 _sDMD_DVBS_InitData.pTuner_RfagcSsi, _sDMD_DVBS_InitData.u16Tuner_RfagcSsi_Size,
1062 _sDMD_DVBS_InitData.pTuner_IfagcSsi_HiRef, _sDMD_DVBS_InitData.u16Tuner_IfagcSsi_HiRef_Size,
1063 _sDMD_DVBS_InitData.pTuner_IfagcSsi_LoRef, _sDMD_DVBS_InitData.u16Tuner_IfagcSsi_LoRef_Size,
1064 _sDMD_DVBS_InitData.pTuner_IfagcErr_HiRef, _sDMD_DVBS_InitData.u16Tuner_IfagcErr_HiRef_Size,
1065 _sDMD_DVBS_InitData.pTuner_IfagcErr_LoRef, _sDMD_DVBS_InitData.u16Tuner_IfagcErr_LoRef_Size);
1066
1067 if (INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_NO_CHANNEL, fCurrRFPowerDbm, fNoChannelRFPowerDbm, u32CurrScanTime-u32DMD_DVBS_PrevScanTime))
1068 {
1069 #ifdef MS_DEBUG
1070 ULOGD("DEMOD","%s %ld UNLOCK:NO_CHANNEL\n", __FUNCTION__, u32CurrScanTime-sDMD_DVBS_Info.u32ChkScanTimeStart);
1071 #endif
1072 *eLockStatus = DMD_DVBS_UNLOCK;
1073 }
1074 #ifdef NEW_TR_MODULE
1075 else if ((INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TR_EVER_LOCK, 200, -200, 0) == FALSE) && ((u32CurrScanTime - sDMD_DVBS_Info.u32ChkScanTimeStart) > 3000))
1076 #else
1077 else if ((INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TR_EVER_LOCK, 200, -200, 0) == FALSE) && ((u32CurrScanTime - sDMD_DVBS_Info.u32ChkScanTimeStart) > 5000))
1078 #endif
1079 {
1080 #ifdef MS_DEBUG
1081 ULOGD("DEMOD","%s %ld UNLOCK:TR\n", __FUNCTION__, u32CurrScanTime-sDMD_DVBS_Info.u32ChkScanTimeStart);
1082 #endif
1083 *eLockStatus = DMD_DVBS_UNLOCK;
1084 }
1085 else
1086 {
1087 *eLockStatus = DMD_DVBS_CHECKING;
1088 }
1089 }
1090 else
1091 {
1092 #ifdef MS_DEBUG
1093 ULOGD("DEMOD","%s %ld UNLOCK:TIMEOUT %ld\n", __FUNCTION__, MsOS_GetSystemTime(), u32Timeout);
1094 #endif
1095 *eLockStatus = DMD_DVBS_UNLOCK;
1096 }
1097 u32DMD_DVBS_PrevScanTime=u32CurrScanTime;
1098 }
1099 sDMD_DVBS_Info.eLockStatus = *eLockStatus;
1100 #ifdef MS_DEBUG
1101 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1102 {
1103 ULOGD("DEMOD","%s %ld %d\n", __FUNCTION__, MsOS_GetSystemTime(), sDMD_DVBS_Info.eLockStatus);
1104 }
1105 #endif
1106 }
1107 else
1108 {
1109 */
1110 if (INTERN_DVBS_GetLock(eType, 200, -200, 0) == TRUE)
1111 {
1112 *eLockStatus = DMD_DVBS_LOCK;
1113 }
1114 else
1115 {
1116 *eLockStatus = DMD_DVBS_UNLOCK;
1117 }
1118 //}
1119 sDMD_DVBS_Info.eLockStatus = *eLockStatus;
1120 DMD_UNLOCK();
1121
1122 #ifdef MS_DEBUG
1123 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1124 {
1125 ULOGD("DEMOD","MDrv_DMD_DVBS_GetLock %x %x\n", eType, *eLockStatus);
1126 }
1127 #endif
1128 bRet=TRUE;
1129 return bRet;
1130 }
1131
DMD_DVBS_GetSignalStrengthWithRFPower(MS_U16 fRFPowerDbm,DMD_DVBS_DEMOD_TYPE * pDemodType,MS_U8 * u8_DVBS2_CurrentCodeRateLocal,MS_U8 * u8_DVBS2_CurrentConstellationLocal)1132 MS_BOOL DMD_DVBS_GetSignalStrengthWithRFPower(MS_U16 fRFPowerDbm, DMD_DVBS_DEMOD_TYPE *pDemodType, MS_U8 *u8_DVBS2_CurrentCodeRateLocal, MS_U8 *u8_DVBS2_CurrentConstellationLocal)
1133 {
1134 MS_BOOL bRet;
1135
1136 DMD_LOCK();
1137 /*
1138 if (_sDMD_DVBS_InitData.u8SarChannel != 0xFF)
1139 {
1140 sDMD_DVBS_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBS_InitData.u8SarChannel);
1141 }
1142 else
1143 {
1144 sDMD_DVBS_Info.u8SarValue=0xFF;
1145 }
1146 */
1147 sDMD_DVBS_Info.u8SarValue=0xFF;
1148 bRet=INTERN_DVBS_GetSignalStrength(fRFPowerDbm, pDemodType, u8_DVBS2_CurrentCodeRateLocal, u8_DVBS2_CurrentConstellationLocal);
1149 //sDMD_DVBS_Info.u16Strength=*u16Strength;
1150 DMD_UNLOCK();
1151
1152 #ifdef MS_DEBUG
1153 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1154 {
1155 //printf("MDrv_DMD_DVBS_GetSignalStrength %d\n", *u16Strength);
1156 }
1157 #endif
1158 return bRet;
1159 }
1160
1161 #if (0)
DMD_DVBS_GetSignalQualityWithRFPower(MS_U16 * u16Quality,float fRFPowerDbm)1162 MS_BOOL DMD_DVBS_GetSignalQualityWithRFPower(MS_U16 *u16Quality, float fRFPowerDbm)
1163 {
1164 MS_BOOL bRet;
1165
1166 DMD_LOCK();
1167 if (_sDMD_DVBS_InitData.u8SarChannel != 0xFF)
1168 {
1169 sDMD_DVBS_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBS_InitData.u8SarChannel);
1170 }
1171 else
1172 {
1173 sDMD_DVBS_Info.u8SarValue=0xFF;
1174 }
1175 #ifndef MSOS_TYPE_LINUX_KERNEL
1176 bRet=INTERN_DVBS_GetSignalQuality(u16Quality, (const DMD_DVBS_InitData *)(&_sDMD_DVBS_InitData), sDMD_DVBS_Info.u8SarValue, fRFPowerDbm);
1177 #else
1178 {
1179 float fber = 0.0;
1180 //float log_ber;
1181 MS_BOOL status = TRUE;
1182 float f_snr = 0.0, ber_sqi = 0.0, cn_rel = 0.0;
1183 //MS_U8 u8Data =0;
1184 DMD_DVBS_CODE_RATE_TYPE _u8_DVBS2_CurrentCodeRateLocal ;
1185 MS_U16 bchpkt_error,BCH_Eflag2_Window;
1186 //fRFPowerDbm = fRFPowerDbm;
1187 float snr_poly =0.0;
1188 float Fixed_SNR =0.0;
1189 double eFlag_PER=0.0;
1190 if (u8DemodLockFlag == 1)
1191 // if (TRUE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0))
1192 {
1193 if(_bDemodType) //S2
1194 {
1195
1196 MDrv_DMD_DVBS_GetSNR(&f_snr);
1197 snr_poly = 0.005261367463671*pow(f_snr, 3)-0.116517828301214*pow(f_snr, 2)+0.744836970505452*pow(f_snr, 1)-0.86727609780167;
1198 Fixed_SNR = f_snr + snr_poly;
1199
1200 if (Fixed_SNR < 17.0)
1201 Fixed_SNR = Fixed_SNR;
1202 else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
1203 Fixed_SNR = Fixed_SNR - 0.8;
1204 else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
1205 Fixed_SNR = Fixed_SNR - 2.0;
1206 else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
1207 Fixed_SNR = Fixed_SNR - 3.0;
1208 else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
1209 Fixed_SNR = Fixed_SNR - 3.5;
1210 else if (Fixed_SNR >= 29.0)
1211 Fixed_SNR = Fixed_SNR - 3.0;
1212
1213
1214 if (Fixed_SNR < 1.0)
1215 Fixed_SNR = 1.0;
1216 if (Fixed_SNR > 30.0)
1217 Fixed_SNR = 30.0;
1218
1219 //BCH EFLAG2_Window, window size 0x2000
1220 BCH_Eflag2_Window=0x2000;
1221 MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 + 1, (BCH_Eflag2_Window>>8));
1222 MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 , (BCH_Eflag2_Window&0xff));
1223 INTERN_DVBS_GetPacketErr(&bchpkt_error);
1224 eFlag_PER = (float)(bchpkt_error)/(float)(BCH_Eflag2_Window);
1225 if(eFlag_PER>0)
1226 fber = 0.089267531133002*pow(eFlag_PER, 2) + 0.019640560289510*eFlag_PER + 0.0000001;
1227 else
1228 fber = 0;
1229
1230 #ifdef MSOS_TYPE_LINUX
1231 //log_ber = ( - 1) *log10f(1 / fber);
1232 if (fber > 1.0E-1)
1233 ber_sqi = (log10f(1.0f/fber))*20.0f + 8.0f;
1234 else if(fber > 8.5E-7)
1235 ber_sqi = (log10f(1.0f/fber))*20.0f - 30.0f;
1236 else
1237 ber_sqi = 100.0;
1238 #else
1239 //log_ber = ( - 1) *Log10Approx(1 / fber);
1240 if (fber > 1.0E-1)
1241 ber_sqi = (Log10Approx(1.0f/fber))*20.0f + 8.0f;
1242 else if(fber > 8.5E-7)
1243 ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 30.0f;
1244 else
1245 ber_sqi = 100.0;
1246
1247 #endif
1248
1249 *u16Quality = Fixed_SNR/30*ber_sqi;
1250 DBG_INTERN_DVBS(printf(" Fixed_SNR %f\n",Fixed_SNR));
1251 DBG_INTERN_DVBS(printf(" BCH_Eflag2_Window %d\n",BCH_Eflag2_Window));
1252 DBG_INTERN_DVBS(printf(" eFlag_PER [%f]\n fber [%8.3e]\n ber_sqi [%f]\n",eFlag_PER,fber,ber_sqi));
1253 }
1254 else //S
1255 {
1256 if (MDrv_DMD_DVBS_GetPostViterbiBer(&fber) == FALSE)//ViterbiBer
1257 {
1258 DBG_INTERN_DVBS(printf("\nGetPostViterbiBer Fail!"));
1259 bRet= FALSE;
1260 }
1261 _fPostBer=fber;
1262
1263
1264 if (status==FALSE)
1265 {
1266 DBG_INTERN_DVBS(printf("MSB131X_DTV_GetSignalQuality GetPostViterbiBer Fail!\n"));
1267 bRet= FALSE;
1268 }
1269 float fDVBS_SQI_CNref[]=
1270 { //0, 1, 2, 3, 4
1271 4.2, 5.9, 6, 6.9, 7.5,//QPSK
1272 };
1273
1274 INTERN_DVBS_GetCurrentDemodCodeRate(&_u8_DVBS2_CurrentCodeRateLocal);
1275 #if 0
1276 #ifdef MSOS_TYPE_LINUX
1277 log_ber = ( - 1.0f) *log10f(1.0f / fber); //BY modify
1278 #else
1279 log_ber = ( - 1.0f) *Log10Approx(1.0f / fber); //BY modify
1280 #endif
1281 DBG_INTERN_DVBS(printf("\nLog(BER) = %f\n",log_ber));
1282 #endif
1283 if (fber > 2.5E-2)
1284 ber_sqi = 0.0;
1285 else if(fber > 8.5E-7)
1286 #ifdef MSOS_TYPE_LINUX
1287 ber_sqi = (log10f(1.0f/fber))*20.0f - 32.0f; //40.0f;
1288 #else
1289 ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 32.0f;//40.0f;
1290 #endif
1291 else
1292 ber_sqi = 100.0;
1293
1294 status &= MDrv_DMD_DVBS_GetSNR(&f_snr);
1295 DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS GetSNR = %d \n", (int)f_snr));
1296
1297 cn_rel = f_snr - fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal];
1298
1299 DBG_INTERN_DVBS(printf(" fber = %f\n",fber));
1300 DBG_INTERN_DVBS(printf(" f_snr = %f\n",f_snr));
1301 DBG_INTERN_DVBS(printf(" cn_nordig_s1 = %f\n",fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal]));
1302 DBG_INTERN_DVBS(printf(" cn_rel = %f\n",cn_rel));
1303 DBG_INTERN_DVBS(printf(" ber_sqi = %f\n",ber_sqi));
1304
1305 if (cn_rel < -7.0f)
1306 {
1307 *u16Quality = 0;
1308 }
1309 else if (cn_rel < 3.0)
1310 {
1311 *u16Quality = (MS_U16)(ber_sqi*((cn_rel - 3.0)/10.0 + 1.0));
1312 }
1313 else
1314 {
1315 *u16Quality = (MS_U16)ber_sqi;
1316 }
1317
1318
1319 }
1320 //INTERN_DVBS_GetTunrSignalLevel_PWR();//For Debug.
1321 DBG_INTERN_DVBS(printf(">>>>>Signal Quility(SQI) = %d\n", *quality));
1322 bRet= TRUE;
1323 }
1324 else
1325 {
1326 *u16Quality = 0;
1327 }
1328 bRet= TRUE;
1329 }
1330 #endif
1331 //printf("@@--%s--u16Quality = %d\n", __func__, *u16Quality);
1332 sDMD_DVBS_Info.u16Quality=*u16Quality;
1333 DMD_UNLOCK();
1334 #ifdef MS_DEBUG
1335 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1336 {
1337 printf("%s %d %d\n", __FUNCTION__, bRet, sDMD_DVBS_Info.u16Quality);
1338 }
1339 #endif
1340
1341 #ifdef MS_DEBUG
1342 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1343 {
1344 printf("MDrv_DMD_DVBS_GetSignalQuality %d\n", *u16Quality);
1345 }
1346 #endif
1347 return bRet;
1348 }
1349 #endif
DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)1350 MS_BOOL DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)
1351 {
1352 ULOGD("DEMOD","Doesn't support DVBS_ActiveDmdSwitch function!!!\n");
1353 return false;
1354 }
1355
DMD_DVBS_GetSNR(MS_U32 * u32NDA_SNR_A,MS_U32 * u32NDA_SNR_AB)1356 MS_BOOL DMD_DVBS_GetSNR(MS_U32 *u32NDA_SNR_A, MS_U32 *u32NDA_SNR_AB)
1357 {
1358 MS_BOOL bRet;
1359 DMD_LOCK();
1360 bRet=INTERN_DVBS_GetSNR(u32NDA_SNR_A, u32NDA_SNR_AB);
1361 DMD_UNLOCK();
1362
1363 return bRet;
1364 }
1365
DMD_DVBS_GetPostViterbiBer(MS_U32 * BitErr_reg,MS_U16 * BitErrPeriod_reg)1366 MS_BOOL DMD_DVBS_GetPostViterbiBer(MS_U32 *BitErr_reg, MS_U16 *BitErrPeriod_reg)
1367 {
1368 MS_BOOL bRet;
1369 DMD_LOCK();
1370 bRet=INTERN_DVBS_GetPostViterbiBer(BitErr_reg, BitErrPeriod_reg);
1371 DMD_UNLOCK();
1372
1373 return bRet;
1374 }
1375
DMD_DVBS_GetIFAGC(MS_U8 * ifagc_reg,MS_U8 * ifagc_reg_lsb,MS_U16 * ifagc_err)1376 MS_BOOL DMD_DVBS_GetIFAGC(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err)
1377 {
1378 MS_BOOL bRet;
1379
1380 DMD_LOCK();
1381 bRet=INTERN_DVBS_GetIFAGC(ifagc_reg, ifagc_reg_lsb, ifagc_err);
1382 DMD_UNLOCK();
1383
1384 return bRet;
1385 }
1386
DMD_DVBS_GetPacketErr(MS_U16 * pktErr)1387 MS_BOOL DMD_DVBS_GetPacketErr(MS_U16 *pktErr)
1388 {
1389 MS_BOOL bRet;
1390
1391 DMD_LOCK();
1392 bRet=INTERN_DVBS_GetPacketErr(pktErr);
1393 DMD_UNLOCK();
1394
1395 return bRet;
1396 }
1397
DMD_DVBS_GetCellID(MS_U16 * u16CellID)1398 MS_BOOL DMD_DVBS_GetCellID(MS_U16 *u16CellID)
1399 {
1400 MS_BOOL bRet;
1401
1402 DMD_LOCK();
1403 bRet=INTERN_DVBS_Get_CELL_ID(u16CellID);
1404 DMD_UNLOCK();
1405
1406 #ifdef MS_DEBUG
1407 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1408 {
1409 ULOGD("DEMOD","MDrv_DMD_DVBS_GetCellID %x\n", *u16CellID);
1410 }
1411 #endif
1412 return bRet;
1413 }
1414
DMD_DVBS_GetStatus(DMD_DVBS_MODULATION_TYPE * pQAMMode,MS_U32 * u32SymbolRate,MS_S16 * s16CFO)1415 MS_BOOL DMD_DVBS_GetStatus(DMD_DVBS_MODULATION_TYPE *pQAMMode, MS_U32 *u32SymbolRate, MS_S16 *s16CFO)
1416 {
1417 MS_BOOL bRet=TRUE;
1418
1419 DMD_LOCK();
1420 bRet &= INTERN_DVBS_GetCurrentModulationType(pQAMMode);
1421 bRet &= INTERN_DVBS_GetCurrentSymbolRate(u32SymbolRate);
1422 bRet &= INTERN_DVBS_Get_FreqOffset(s16CFO);
1423 DMD_UNLOCK();
1424
1425 #ifdef MS_DEBUG
1426 if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
1427 {
1428 ULOGD("DEMOD","MDrv_DMD_DVBS_GetStatus %d %ld \n", *pQAMMode, *u32SymbolRate);
1429 }
1430 #endif
1431 return bRet;
1432 }
1433
DMD_DVBS_SetPowerState(EN_POWER_MODE u16PowerState)1434 MS_U32 DMD_DVBS_SetPowerState(EN_POWER_MODE u16PowerState)
1435 {
1436 static EN_POWER_MODE _prev_u16PowerState = E_POWER_MECHANICAL;
1437 MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1438 if(bIsDVBS == TRUE)
1439 {
1440 if (u16PowerState == E_POWER_SUSPEND)
1441 {
1442 DMD_DVBS_Exit();
1443 _prev_u16PowerState = u16PowerState;
1444 u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1445 }
1446 else if (u16PowerState == E_POWER_RESUME)
1447 {
1448 if (_prev_u16PowerState == E_POWER_SUSPEND)
1449 {
1450 DMD_DVBS_Init(&_sDMD_DVBS_InitData, sizeof(_sDMD_DVBS_InitData));
1451 _prev_u16PowerState = u16PowerState;
1452 u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1453 }
1454 else
1455 {
1456 ULOGD("DEMOD","[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
1457 u32Return = UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
1458 }
1459 }
1460 else
1461 {
1462 ULOGD("DEMOD","[%s,%5d]Do Nothing: %d\n",__FUNCTION__,__LINE__,u16PowerState);
1463 u32Return = FALSE;
1464 }
1465 }
1466 else
1467 {
1468 ULOGD("DEMOD","\r\n ====== DVBS doesn't need to Suspend/Resume at Non-DVBS mode ====== \r\n");
1469 u32Return = FALSE;
1470 }
1471 return UTOPIA_STATUS_SUCCESS;
1472 }
1473 /*
1474 MS_U32 MDrv_DMD_DVBS_Demod_Restart(MS_U32 u32SymbolRate, MS_U32 u32Frequency)
1475 {
1476 MS_BOOL bRet;
1477
1478 DMD_LOCK();
1479 bRet=INTERN_DVBS_Demod_Restart(u32SymbolRate, u32Frequency);
1480 sDMD_DVBS_Info.u32ChkScanTimeStart = MsOS_GetSystemTime();
1481 DMD_UNLOCK();
1482
1483 return bRet;
1484 }
1485 */
1486
DMD_DVBS_Get_FreqOffset(MS_S16 * s16CFO)1487 MS_BOOL DMD_DVBS_Get_FreqOffset(MS_S16 *s16CFO)
1488 {
1489 MS_BOOL bRet;
1490
1491 DMD_LOCK();
1492 bRet=INTERN_DVBS_Get_FreqOffset(s16CFO);
1493 DMD_UNLOCK();
1494
1495 return bRet;
1496 }
1497 //------------------------------------------------------------------------------
DMD_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)1498 MS_BOOL DMD_DVBS_BlindScan_Start(MS_U16 u16StartFreq, MS_U16 u16EndFreq)
1499 {
1500 MS_BOOL bRet=TRUE;
1501
1502 DMD_LOCK();
1503 bRet=INTERN_DVBS_BlindScan_Start(u16StartFreq, u16EndFreq);
1504 DMD_UNLOCK();
1505 return bRet;
1506 }
1507
DMD_DVBS_BlindScan_NextFreq(MS_BOOL * bBlindScanEnd)1508 MS_BOOL DMD_DVBS_BlindScan_NextFreq(MS_BOOL* bBlindScanEnd)
1509 {
1510 MS_BOOL bRet=TRUE;
1511
1512 DMD_LOCK();
1513 bRet=INTERN_DVBS_BlindScan_NextFreq(bBlindScanEnd);
1514 DMD_UNLOCK();
1515
1516 return bRet;
1517 }
1518
DMD_DVBS_BlindScan_Cancel(void)1519 MS_BOOL DMD_DVBS_BlindScan_Cancel(void)
1520 {
1521 MS_BOOL bRet=TRUE;
1522
1523 DMD_LOCK();
1524 bRet=INTERN_DVBS_BlindScan_Cancel();
1525 DMD_UNLOCK();
1526
1527 return bRet;
1528 }
1529
DMD_DVBS_BlindScan_End(void)1530 MS_BOOL DMD_DVBS_BlindScan_End(void)
1531 {
1532 MS_BOOL bRet=TRUE;
1533
1534 DMD_LOCK();
1535 bRet=INTERN_DVBS_BlindScan_End();
1536 DMD_UNLOCK();
1537
1538 return bRet;
1539 }
1540
DMD_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16 * u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM * pTable)1541 MS_BOOL DMD_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart, MS_U16* u16TPNum, HAL_DEMOD_MS_FE_CARRIER_PARAM *pTable)
1542 {
1543 return INTERN_DVBS_BlindScan_GetChannel(u16ReadStart, u16TPNum, pTable);
1544 }
1545
DMD_DVBS_BlindScan_GetCurrentFreq(MS_U32 * u32CurrentFeq)1546 MS_BOOL DMD_DVBS_BlindScan_GetCurrentFreq(MS_U32 *u32CurrentFeq)
1547 {
1548 return INTERN_DVBS_BlindScan_GetCurrentFreq(u32CurrentFeq);
1549 }
1550
DMD_DVBS_BlindScan_WaitCurFreqFinished(MS_U8 * u8Progress,MS_U8 * u8FindNum,MS_U8 * substate_reg,MS_U32 * u32Data,MS_U16 * symbolrate_reg,MS_U16 * CFO_reg)1551 MS_BOOL DMD_DVBS_BlindScan_WaitCurFreqFinished(MS_U8* u8Progress,MS_U8 *u8FindNum, MS_U8 *substate_reg, MS_U32 *u32Data, MS_U16 *symbolrate_reg, MS_U16 *CFO_reg)
1552 {
1553 return INTERN_DVBS_BlindScan_WaitCurFreqFinished(u8Progress, u8FindNum,substate_reg,u32Data,symbolrate_reg,CFO_reg);
1554 }
1555
DMD_DVBS_BlindScan_GetTunerFreq(MS_U16 * u16TunerCenterFreq,MS_U16 * u16TunerCutOffFreq)1556 MS_BOOL DMD_DVBS_BlindScan_GetTunerFreq(MS_U16 *u16TunerCenterFreq, MS_U16 *u16TunerCutOffFreq)
1557 {
1558 return INTERN_DVBS_BlindScan_GetTunerFreq(u16TunerCenterFreq, u16TunerCutOffFreq);
1559 }
1560 //------------------------------------------------------------------------------
DMD_DVBS_DiSEqC_Init(void)1561 MS_BOOL DMD_DVBS_DiSEqC_Init(void)
1562 {
1563 MS_BOOL bRet;
1564
1565 DMD_LOCK();
1566 bRet=INTERN_DVBS_DiSEqC_Init();
1567 DMD_UNLOCK();
1568
1569 return bRet;
1570 }
1571
DMD_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)1572 MS_BOOL DMD_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)
1573 {
1574 MS_BOOL bRet;
1575
1576 DMD_LOCK();
1577 bRet=INTERN_DVBS_DiSEqC_SetLNBOut(bLow);
1578 DMD_UNLOCK();
1579
1580 return bRet;
1581 }
1582
DMD_DVBS_DiSEqC_GetLNBOut(MS_BOOL * bLNBOutLow)1583 MS_BOOL DMD_DVBS_DiSEqC_GetLNBOut(MS_BOOL* bLNBOutLow)
1584 {
1585 MS_BOOL bRet;
1586
1587 DMD_LOCK();
1588 bRet=INTERN_DVBS_DiSEqC_GetLNBOut(bLNBOutLow);
1589 DMD_UNLOCK();
1590
1591 return bRet;
1592 }
1593
DMD_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)1594 MS_BOOL DMD_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)
1595 {
1596 MS_BOOL bRet;
1597
1598 DMD_LOCK();
1599 bRet=INTERN_DVBS_DiSEqC_Set22kOnOff(b22kOn);
1600 DMD_UNLOCK();
1601
1602 return bRet;
1603 }
1604
DMD_DVBS_DiSEqC_Get22kOnOff(MS_BOOL * b22kOn)1605 MS_BOOL DMD_DVBS_DiSEqC_Get22kOnOff(MS_BOOL* b22kOn)
1606 {
1607 MS_BOOL bRet;
1608
1609 DMD_LOCK();
1610 bRet=INTERN_DVBS_DiSEqC_Get22kOnOff(b22kOn);
1611 DMD_UNLOCK();
1612
1613 return bRet;
1614 }
1615
DMD_DVBS_DiSEqC_SendCmd(MS_U8 * pCmd,MS_U8 u8CmdSize)1616 MS_BOOL DMD_DVBS_DiSEqC_SendCmd(MS_U8* pCmd,MS_U8 u8CmdSize)
1617 {
1618 MS_BOOL bRet;
1619
1620 DMD_LOCK();
1621 bRet=INTERN_DVBS_DiSEqC_SendCmd(pCmd, u8CmdSize);
1622 DMD_UNLOCK();
1623
1624 return bRet;
1625 }
1626
DMD_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)1627 MS_BOOL DMD_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)
1628 {
1629 MS_BOOL bRet;
1630
1631 DMD_LOCK();
1632 bRet=INTERN_DVBS_DiSEqC_SetTxToneMode(bTxTone22kOff);
1633 DMD_UNLOCK();
1634
1635 return bRet;
1636 }
1637
DMD_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)1638 MS_BOOL DMD_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)
1639 {
1640 MS_BOOL bRet;
1641
1642 DMD_LOCK();
1643 bRet=INTERN_DVBS_DiSEqC_SetTone(bTone1);
1644 DMD_UNLOCK();
1645
1646 return bRet;
1647 }
1648
DMD_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)1649 MS_BOOL DMD_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)
1650 {
1651 MS_BOOL bRet;
1652
1653 DMD_LOCK();
1654 bRet=INTERN_DVBS_UnicableAGCCheckPower(pbAGCCheckPower);
1655 DMD_UNLOCK();
1656
1657 return bRet;
1658 }
1659
DMD_DVBS_GetTsDivNum(MS_U32 * u32SymbolRate,MS_U8 * system_type_reg,MS_U8 * code_rate_idx,MS_U8 * fec_type_idx,MS_U8 * pilot_flag,MS_U32 * u32temp,MS_U8 * code_rate_reg)1660 MS_BOOL DMD_DVBS_GetTsDivNum(MS_U32 *u32SymbolRate, MS_U8* system_type_reg, MS_U8 *code_rate_idx, MS_U8 *fec_type_idx, MS_U8 *pilot_flag, MS_U32 *u32temp, MS_U8 *code_rate_reg)
1661 {
1662 MS_BOOL bRet;
1663 bRet=INTERN_DVBS_GetTsDivNum(u32SymbolRate, system_type_reg, code_rate_idx, fec_type_idx, pilot_flag, u32temp, code_rate_reg);
1664 return bRet;
1665 }
1666
DMD_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE * pCodeRate)1667 MS_BOOL DMD_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE *pCodeRate)
1668 {
1669
1670 MS_BOOL bRet;
1671
1672 DMD_LOCK();
1673
1674 bRet = INTERN_DVBS_GetCurrentDemodCodeRate(pCodeRate);
1675 //printf("MDrv_DMD_DVBS_GetFWVer %x\n", *ver);
1676 DMD_UNLOCK();
1677
1678 return bRet;
1679
1680 }
1681
DMD_DVBS_GetTunrSignalLevel_PWR(MS_U16 * u16Data)1682 MS_BOOL DMD_DVBS_GetTunrSignalLevel_PWR(MS_U16 *u16Data)
1683 {
1684 MS_BOOL bRet;
1685 bRet=INTERN_DVBS_GetTunrSignalLevel_PWR(u16Data);
1686 return bRet;
1687 }
1688 #ifdef UFO_SUPPORT_VCM
DMD_DVBS_Set_IS_ID(MS_U8 u8IS_ID)1689 MS_BOOL DMD_DVBS_Set_IS_ID(MS_U8 u8IS_ID)
1690 {
1691 MS_BOOL bret;
1692 bret = INTERN_DVBS2_Set_IS_ID(u8IS_ID);
1693 return bret;
1694 }
1695
DMD_DVBS_Set_Default_IS_ID(MS_U8 * u8IS_ID,MS_U8 * u8ISID_table)1696 MS_BOOL DMD_DVBS_Set_Default_IS_ID(MS_U8 *u8IS_ID, MS_U8 *u8ISID_table)
1697 {
1698 MS_BOOL bret;
1699 bret = INTERN_DVBS2_Set_Default_IS_ID(u8IS_ID, u8ISID_table);
1700 return bret;
1701 }
1702
1703
DMD_DVBS_Get_IS_ID_INFO(MS_U8 * u8IS_ID,MS_U8 * u8ISID_table)1704 MS_BOOL DMD_DVBS_Get_IS_ID_INFO(MS_U8 *u8IS_ID, MS_U8 *u8ISID_table)
1705 {
1706 MS_BOOL bret;
1707 bret = INTERN_DVBS2_Get_IS_ID_INFO(u8IS_ID, u8ISID_table);
1708 return bret;
1709 }
1710
DMD_DVBS_VCM_INIT(DMD_DVBS_VCM_OPT u8VCM_OPT,MS_U8 u8IS_ID,MS_U32 u32DMD_DVBS2_DJB_START_ADDR)1711 MS_BOOL DMD_DVBS_VCM_INIT(DMD_DVBS_VCM_OPT u8VCM_OPT, MS_U8 u8IS_ID, MS_U32 u32DMD_DVBS2_DJB_START_ADDR)
1712 {
1713 MS_BOOL bret = TRUE;
1714 bret &= INTERN_DVBS2_VCM_INIT(u8VCM_OPT, u8IS_ID, u32DMD_DVBS2_DJB_START_ADDR);
1715 #ifdef MS_DEBUG
1716 ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBS_Info.u16Version);
1717 #endif
1718
1719 return bret;
1720 }
1721
DMD_DVBS_VCM_CHECK(void)1722 MS_BOOL DMD_DVBS_VCM_CHECK(void)
1723 {
1724 MS_BOOL bret;
1725 bret = INTERN_DVBS2_VCM_CHECK();
1726 return bret;
1727 }
1728
DMD_DVBS_VCM_ENABLED(MS_U8 u8VCM_ENABLED)1729 MS_BOOL DMD_DVBS_VCM_ENABLED(MS_U8 u8VCM_ENABLED)
1730 {
1731 MS_BOOL bret;
1732 bret = INTERN_DVBS2_VCM_ENABLED(u8VCM_ENABLED);
1733 return bret;
1734 }
1735
DMD_DVBS_VCM_MODE(DMD_DVBS_VCM_OPT u8VCM_OPT)1736 MS_BOOL DMD_DVBS_VCM_MODE(DMD_DVBS_VCM_OPT u8VCM_OPT)
1737 {
1738 MS_BOOL bret;
1739 bret = INTERN_DVBS2_VCM_MODE(u8VCM_OPT);
1740 return bret;
1741 }
1742
1743 #endif
1744
1745 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
DMD_DVBS_INT_MODE(fpIntCallBack fpCBReg)1746 MS_BOOL DMD_DVBS_INT_MODE(fpIntCallBack fpCBReg)
1747 {
1748 fpCB = fpCBReg;
1749 return TRUE;
1750 }
1751 #endif
1752
DVBSOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)1753 MS_U32 DVBSOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
1754 {
1755
1756 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSOpen\n"));
1757
1758 DVBS_INSTANT_PRIVATE *pDVBSPri= NULL;
1759
1760 UtopiaInstanceCreate(sizeof(DVBS_INSTANT_PRIVATE), ppInstance);
1761 UtopiaInstanceGetPrivate(*ppInstance, (void*)&pDVBSPri);
1762
1763
1764 pDVBSPri->fpDVBS_Init=DMD_DVBS_Init;
1765 pDVBSPri->fpDVBS_Exit=DMD_DVBS_Exit;
1766 pDVBSPri->fpDVBS_SetDbgLevel=DMD_DVBS_SetDbgLevel;
1767
1768 pDVBSPri->fpDVBS_GetInfo=DMD_DVBS_GetInfo;
1769 pDVBSPri->fpDVBS_GetLibVer=DMD_DVBS_GetLibVer;
1770
1771 pDVBSPri->fpDVBS_GetFWVer=DMD_DVBS_GetFWVer;
1772 pDVBSPri->fpDVBS_GetDSPReg=DMD_DVBS_GetDSPReg;
1773 pDVBSPri->fpDVBS_SetDSPReg=DMD_DVBS_SetDSPReg;
1774 pDVBSPri->fpDVBS_GetReg=DMD_DVBS_GetReg;
1775 pDVBSPri->fpDVBS_SetReg=DMD_DVBS_SetReg;
1776
1777 pDVBSPri->fpDVBSSetSerialControl=DMD_DVBS_SetSerialControl;
1778 #ifdef UFO_DEMOD_BLINDSCAN_NEW_FLOW
1779 pDVBSPri->fpDVBS_BlindScan_Config_symbol_rate_list=DMD_DVBS_BlindScan_Config_symbol_rate_list;
1780 #endif
1781 pDVBSPri->fpDVBS_SetConfig_symbol_rate_list=DMD_DVBS_SetConfig_symbol_rate_list;
1782 pDVBSPri->fpDVBS_SetActive=DMD_DVBS_SetActive;
1783
1784 pDVBSPri->fpDVBS_GetLockWithRFPower=DMD_DVBS_GetLockWithRFPower;
1785
1786 pDVBSPri->fpDVBS_GetSignalStrengthWithRFPower=DMD_DVBS_GetSignalStrengthWithRFPower;
1787 //pDVBSPri->fpDVBS_GetSignalQualityWithRFPower=DMD_DVBS_GetSignalQualityWithRFPower;
1788
1789 pDVBSPri->fpDVBS_ActiveDmdSwitch=DMD_DVBS_ActiveDmdSwitch;
1790
1791 pDVBSPri->fpDVBS_GetSNR=DMD_DVBS_GetSNR;
1792 pDVBSPri->fpDVBS_GetPostViterbiBer=DMD_DVBS_GetPostViterbiBer;
1793
1794 pDVBSPri->fpDVBS_GetPacketErr=DMD_DVBS_GetPacketErr;
1795
1796 pDVBSPri->fpDVBS_GetCellID=DMD_DVBS_GetCellID;
1797 //pDVBSPri->fpDVBS_GetStatus=DMD_DVBS_GetStatus;
1798 pDVBSPri->fpDVBS_GetStatus=DMD_DVBS_GetStatus;
1799
1800 pDVBSPri->fpDVBS_SetPowerState=DMD_DVBS_SetPowerState;
1801 pDVBSPri->fpDVBS_Get_FreqOffset=DMD_DVBS_Get_FreqOffset;
1802 pDVBSPri->fpDVBS_BlindScan_Start=DMD_DVBS_BlindScan_Start;
1803 pDVBSPri->fpDVBS_BlindScan_NextFreq=DMD_DVBS_BlindScan_NextFreq;
1804 pDVBSPri->fpDVBS_BlindScan_Cancel=DMD_DVBS_BlindScan_Cancel;
1805 pDVBSPri->fpDVBS_BlindScan_End=DMD_DVBS_BlindScan_End;
1806 pDVBSPri->fpDVBS_BlindScan_GetChannel=DMD_DVBS_BlindScan_GetChannel;
1807 pDVBSPri->fpDVBS_BlindScan_GetCurrentFreq=DMD_DVBS_BlindScan_GetCurrentFreq;
1808 pDVBSPri->fpDVBS_BlindScan_WaitCurFreqFinished=DMD_DVBS_BlindScan_WaitCurFreqFinished;
1809 pDVBSPri->fpDVBS_BlindScan_GetTunerFreq=DMD_DVBS_BlindScan_GetTunerFreq;
1810 pDVBSPri->fpDVBS_DiSEqC_Init=DMD_DVBS_DiSEqC_Init;
1811 pDVBSPri->fpDVBS_DiSEqC_SetLNBOut=DMD_DVBS_DiSEqC_SetLNBOut;
1812 pDVBSPri->fpDVBS_DiSEqC_GetLNBOut=DMD_DVBS_DiSEqC_GetLNBOut;
1813 pDVBSPri->fpDVBS_DiSEqC_Set22kOnOff=DMD_DVBS_DiSEqC_Set22kOnOff;
1814 pDVBSPri->fpDVBS_DiSEqC_Get22kOnOff=DMD_DVBS_DiSEqC_Get22kOnOff;
1815 pDVBSPri->fpDVBS_DiSEqC_SendCmd=DMD_DVBS_DiSEqC_SendCmd;
1816 pDVBSPri->fpDVBS_DiSEqC_SetTxToneMode=DMD_DVBS_DiSEqC_SetTxToneMode;
1817 pDVBSPri->fpDVBS_DiSEqC_SetTone=DMD_DVBS_DiSEqC_SetTone;
1818 pDVBSPri->fpDVBS_UnicableAGCCheckPower=DMD_DVBS_UnicableAGCCheckPower;
1819 pDVBSPri->fpDVBS_GetTsDivNum=DMD_DVBS_GetTsDivNum;
1820 pDVBSPri->fpDVBS_GetIFAGC=DMD_DVBS_GetIFAGC;
1821 pDVBSPri->fpDVBS_GetCurrentDemodCodeRate=DMD_DVBS_GetCurrentDemodCodeRate;
1822 pDVBSPri->fpDVBS_GetTunrSignalLevel_PWR=DMD_DVBS_GetTunrSignalLevel_PWR;
1823 #ifdef UFO_SUPPORT_VCM
1824 pDVBSPri->fpDVBS_Set_IS_ID = DMD_DVBS_Set_IS_ID;
1825 pDVBSPri->fpDVBS_Set_Default_IS_ID = DMD_DVBS_Set_Default_IS_ID;
1826 pDVBSPri->fpDVBS_Get_IS_ID_INFO = DMD_DVBS_Get_IS_ID_INFO;
1827 pDVBSPri->fpDVBS_VCM_INIT = DMD_DVBS_VCM_INIT;
1828 pDVBSPri->fpDVBS_VCM_CHECK = DMD_DVBS_VCM_CHECK;
1829 pDVBSPri->fpDVBS_VCM_ENABLED = DMD_DVBS_VCM_ENABLED;
1830 pDVBSPri->fpDVBS_VCM_MODE = DMD_DVBS_VCM_MODE;
1831 #endif
1832
1833 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
1834 pDVBSPri->fpDVBS_INT_MODE = DMD_DVBS_INT_MODE;
1835 #endif
1836
1837 #ifdef UFO_DEMOD_GetParam_NEW_FLOW
1838 pDVBSPri->fpDVBS_GetParam = DMD_DVBS_GetParam;
1839 #endif
1840
1841 #ifdef UFO_DEMOD_GET_AGC_INFO
1842 pDVBSPri->fpDVBS_GetAGC_INFO = DMD_DVBS_GetAGCInfo;
1843 #endif
1844
1845 //return TRUE;
1846 return UTOPIA_STATUS_SUCCESS;
1847 }
1848
DVBSIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)1849 MS_U32 DVBSIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
1850 {
1851 //ULOGD("DEMOD","\n[drvDMD_INTERN_DVBS_v2.c][DVBS INFO] DVBS Ioctl \n");
1852 void* pModule = NULL;
1853 UtopiaInstanceGetModule(pInstance, &pModule);
1854
1855 //void* pResource = NULL;
1856
1857 DVBS_INSTANT_PRIVATE* psDVBSInstPri = NULL;
1858 void* psDVBSInstPriVoid = NULL;
1859 UtopiaInstanceGetPrivate(pInstance, (void**)&psDVBSInstPriVoid);
1860 psDVBSInstPri = (DVBS_INSTANT_PRIVATE*)psDVBSInstPriVoid;
1861
1862 MS_BOOL bRet = FALSE;
1863
1864 #if 0
1865 if (UtopiaResourceObtain(pModule, DVBT_POOL_ID_DMD0, &pResource) != 0)
1866 {
1867 DMD_DBG(ULOGD("DEMOD","UtopiaResourceObtainToInstant fail\n"));
1868 return UTOPIA_STATUS_ERR_RESOURCE;
1869 }
1870
1871 psDMD_DVBT_ResData = ((PDVBT_RESOURCE_PRIVATE)pResource)->sDMD_DVBT_ResData;
1872 #endif
1873
1874
1875 switch (u32Cmd)
1876 {
1877 case DMD_DVBS_DRV_CMD_Init:
1878 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Init\n"));
1879 bRet = psDVBSInstPri->fpDVBS_Init( (((PDVBS_Init_PARAM)pArgs)->pDMD_DVBS_InitData), ((PDVBS_Init_PARAM)pArgs)->u32InitDataLen);
1880 ((PDVBS_Init_PARAM)pArgs)->ret=bRet;
1881 break;
1882 case DMD_DVBS_DRV_CMD_Exit:
1883 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Exit\n"));
1884 bRet= psDVBSInstPri->fpDVBS_Exit();
1885 ((PDVBS_EXIT_PARAM_PARAM)pArgs)->ret=bRet;
1886 break;
1887 case DMD_DVBS_DRV_CMD_SetDbgLevel:
1888 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetDbgLevel\n"));
1889 bRet= psDVBSInstPri->fpDVBS_SetDbgLevel(((PDVBS_SetDbgLevel_PARAM)pArgs)->u8DbgLevel);
1890 ((PDVBS_SetDbgLevel_PARAM)pArgs)->ret=bRet;
1891 break;
1892 case DMD_DVBS_DRV_CMD_GetInfo:
1893 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetInfo\n"));
1894 ((PDVBS_GetInfo_PARAM)pArgs)->ret_info=psDVBSInstPri->fpDVBS_GetInfo();
1895 break;
1896 case DMD_DVBS_DRV_CMD_GetLibVer:
1897 bRet=psDVBSInstPri->fpDVBS_GetLibVer(((PDVBS_GetLibVer_PARAM)pArgs)->ppVersion);
1898 ((PDVBS_GetLibVer_PARAM)pArgs)->ret=bRet;
1899 break;
1900 case DMD_DVBS_DRV_CMD_GetFWVer:
1901 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetFWVer\n"));
1902 bRet=psDVBSInstPri->fpDVBS_GetFWVer(((PDVBS_GetFWVer_PARAM)pArgs)->ver);
1903 ((PDVBS_GetFWVer_PARAM)pArgs)->ret=bRet;
1904 break;
1905 case DMD_DVBS_DRV_CMD_GetDSPReg:
1906 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetDSPReg\n"));
1907 bRet=psDVBSInstPri->fpDVBS_GetDSPReg(((PDVBS_GetDSPReg_PARAM)pArgs)->u16Addr,((PDVBS_GetDSPReg_PARAM)pArgs)->pu8Data);
1908 ((PDVBS_GetDSPReg_PARAM)pArgs)->ret=bRet;
1909 break;
1910
1911 case DMD_DVBS_DRV_CMD_SetDSPReg:
1912 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetDSPReg\n"));
1913 bRet=psDVBSInstPri->fpDVBS_SetDSPReg(((PDVBS_SetDSPReg_PARAM)pArgs)->u16Addr,((PDVBS_SetDSPReg_PARAM)pArgs)->pu8Data);
1914 ((PDVBS_SetDSPReg_PARAM)pArgs)->ret=bRet;
1915 break;
1916 case DMD_DVBS_DRV_CMD_GetReg:
1917 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetReg\n"));
1918 bRet=psDVBSInstPri->fpDVBS_GetReg(((PDVBS_GetReg_PARAM)pArgs)->u16Addr,((PDVBS_GetReg_PARAM)pArgs)->pu8Data);
1919 ((PDVBS_GetReg_PARAM)pArgs)->ret=bRet;
1920 break;
1921 case DMD_DVBS_DRV_CMD_SetReg:
1922 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetReg\n"));
1923 bRet=psDVBSInstPri->fpDVBS_SetReg(((PDVBS_SetReg_PARAM)pArgs)->u16Addr,((PDVBS_SetReg_PARAM)pArgs)->u8Data);
1924 ((PDVBS_SetReg_PARAM)pArgs)->ret=bRet;
1925 break;
1926
1927 case DMD_DVBS_DRV_CMD_SetSerialControl:
1928 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetSerialControl\n"));
1929 bRet=psDVBSInstPri->fpDVBSSetSerialControl(((PDVBS_SetSerialControl_PARAM)pArgs)->bEnable);
1930 ((PDVBS_SetSerialControl_PARAM)pArgs)->ret=bRet;
1931 break;
1932
1933 #ifdef UFO_DEMOD_BLINDSCAN_NEW_FLOW
1934 case DMD_DVBS_DRV_CMD_BlindScan_Config_symbol_rate_list:
1935 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_Config_symbol_rate_list\n"));
1936 bRet=psDVBSInstPri->fpDVBS_BlindScan_Config_symbol_rate_list(((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->u16SymbolRate,\
1937 ((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->eQamMode,((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->u32IFFreq,\
1938 ((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->bSpecInv,\
1939 ((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->bSerialTS,((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->pu16_symbol_rate_list,\
1940 ((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->u8_symbol_rate_list_num
1941 );
1942
1943 ((PDVBS_BlindScan_Config_Symbol_rate_list_PARAM)pArgs)->ret=bRet;
1944
1945 break;
1946 #endif
1947 case DMD_DVBS_DRV_CMD_SetConfig_symbol_rate_list:
1948 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetSetConfig_symbol_rate_list\n"));
1949 bRet=psDVBSInstPri->fpDVBS_SetConfig_symbol_rate_list(((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->u16SymbolRate,\
1950 ((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->eQamMode,((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->u32IFFreq,\
1951 ((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->bSpecInv,\
1952 ((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->bSerialTS,((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->pu16_symbol_rate_list,\
1953 ((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->u8_symbol_rate_list_num
1954 );
1955
1956 ((PDVBS_SetConfig_Symbol_rate_list_PARAM)pArgs)->ret=bRet;
1957
1958 break;
1959
1960 case DMD_DVBS_DRV_CMD_SetActive:
1961 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetActive\n"));
1962 bRet=psDVBSInstPri->fpDVBS_SetActive(((PDVBS_SetActive_PARAM)pArgs)->bEnable);
1963 ((PDVBS_SetActive_PARAM)pArgs)->ret=bRet;
1964 break;
1965
1966
1967 case DMD_DVBS_DRV_CMD_GetLockWithRFPower:
1968 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetLockWithRFPower\n"));
1969
1970 //ULOGD("DEMOD","bryan check DVBS in V2 layer DMD_DVBS_DRV_CMD_GetLockWithRFPower\n");
1971 bRet=psDVBSInstPri->fpDVBS_GetLockWithRFPower(((PDVBS_GetLockWithRFPower)pArgs)->eType,\
1972 ((PDVBS_GetLockWithRFPower)pArgs)->eLockStatus,\
1973 ((PDVBS_GetLockWithRFPower)pArgs)->u32CurrRFPowerDbm,\
1974 ((PDVBS_GetLockWithRFPower)pArgs)->u32NoChannelRFPowerDbm);
1975 ((PDVBS_GetLockWithRFPower)pArgs)->ret=bRet;
1976
1977 break;
1978
1979 case DMD_DVBS_DRV_CMD_GetSignalStrengthWithRFPower:
1980 bRet=psDVBSInstPri->fpDVBS_GetSignalStrengthWithRFPower(((PDVBS_GetSignalStrengthWithRFPower_PARAM)pArgs)->fRFPowerDbm, ((PDVBS_GetSignalStrengthWithRFPower_PARAM)pArgs)->pDemodType, ((PDVBS_GetSignalStrengthWithRFPower_PARAM)pArgs)->u8_DVBS2_CurrentCodeRateLocal, ((PDVBS_GetSignalStrengthWithRFPower_PARAM)pArgs)->u8_DVBS2_CurrentConstellationLocal);
1981 ((PDVBS_GetSignalStrengthWithRFPower_PARAM)pArgs)->ret=bRet;
1982 break;
1983 /*
1984 case DMD_DVBS_DRV_CMD_GetSignalQualityWithRFPower:
1985 bRet=psDVBSInstPri->fpDVBS_GetSignalQualityWithRFPower((PDVBS_GetSignalQualityWithRFPower_PARAM)pArgs->u16Quality);
1986 (PDVBS_GetSignalQualityWithRFPower_PARAM)pArgs->ret=bRet;
1987 break;
1988 #endif
1989 */
1990
1991 case DMD_DVBS_DRV_CMD_ActiveDmdSwitch:
1992 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_ActiveDmdSwitch\n"));
1993 bRet=psDVBSInstPri->fpDVBS_ActiveDmdSwitch(((PDVBS_ActiveDmdSwitch_PARAM)pArgs)->demod_no);
1994 ((PDVBS_ActiveDmdSwitch_PARAM)pArgs)->ret=bRet;
1995 break;
1996
1997
1998 case DMD_DVBS_DRV_CMD_GetSNR:
1999 bRet=psDVBSInstPri->fpDVBS_GetSNR(((PDVBS_GetSNR_PARAM)pArgs)->u32NDA_SNR_A,((PDVBS_GetSNR_PARAM)pArgs)->u32NDA_SNR_AB);
2000 ((PDVBS_GetSNR_PARAM)pArgs)->ret=bRet;
2001 break;
2002
2003
2004 case DMD_DVBS_DRV_CMD_GetPostViterbiBer:
2005 bRet=psDVBSInstPri->fpDVBS_GetPostViterbiBer(((PDVBS_GetPostViterbiBer_PARAM)pArgs)->BitErr_reg,\
2006 ((PDVBS_GetPostViterbiBer_PARAM)pArgs)->BitErrPeriod_reg);
2007 ((PDVBS_GetPostViterbiBer_PARAM)pArgs)->ret=bRet;
2008 break;
2009
2010
2011 case DMD_DVBS_DRV_CMD_GetPacketErr:
2012 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetPacketErr\n"));
2013 bRet=psDVBSInstPri->fpDVBS_GetPacketErr(((PDVBS_GetPacketErr_PARAM)pArgs)->pktErr);
2014 ((PDVBS_GetPacketErr_PARAM)pArgs)->ret=bRet;
2015 break;
2016
2017 case DMD_DVBS_DRV_CMD_GetCellID:
2018 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetCellID\n"));
2019 bRet=psDVBSInstPri->fpDVBS_GetCellID(((PDVBS_GetCellID_PARAM)pArgs)->u16CellID);
2020 ((PDVBS_GetCellID_PARAM)pArgs)->ret=bRet;
2021 break;
2022
2023 case DMD_DVBS_DRV_CMD_GetStatus:
2024 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetStatus\n"));
2025 bRet=psDVBSInstPri->fpDVBS_GetStatus(((PDVBS_GetStatus_PARAM)pArgs)->pQAMMode,((PDVBS_GetStatus_PARAM)pArgs)->u32SymbolRate,\
2026 ((PDVBS_GetStatus_PARAM)pArgs)->s16CFO);
2027 ((PDVBS_GetStatus_PARAM)pArgs)->ret=bRet;
2028 break;
2029
2030
2031 case DMD_DVBS_DRV_CMD_SetPowerState:
2032 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_SetPowerState\n"));
2033 ((PDVBS_SetPowerState_PARAM)pArgs)->ret_U32=psDVBSInstPri->fpDVBS_SetPowerState(((PDVBS_SetPowerState_PARAM)pArgs)->u16PowerState);
2034
2035 break;
2036
2037 case DMD_DVBS_DRV_CMD_Get_FreqOffset:
2038 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Get_FreqOffset\n"));
2039 bRet=psDVBSInstPri->fpDVBS_Get_FreqOffset(((PDVBS_Get_FreqOffset_PARAM)pArgs)->s16CFO);
2040 ((PDVBS_Get_FreqOffset_PARAM)pArgs)->bRet=bRet;
2041
2042 break;
2043
2044 case DMD_DVBS_DRV_CMD_BlindScan_Start:
2045 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_Start\n"));
2046 bRet=psDVBSInstPri->fpDVBS_BlindScan_Start(((PDVBS_BlindScan_Start_PARAM)pArgs)->u16StartFreq,((PDVBS_BlindScan_Start_PARAM)pArgs)->u16EndFreq);
2047 ((PDVBS_BlindScan_Start_PARAM)pArgs)->bRet=bRet;
2048
2049 break;
2050
2051 case DMD_DVBS_DRV_CMD_BlindScan_NextFreq:
2052 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_NextFreq\n"));
2053 bRet=psDVBSInstPri->fpDVBS_BlindScan_NextFreq(((PDVBS_BlindScan_NextFreq_PARAM)pArgs)->bBlindScanEnd);
2054 ((PDVBS_BlindScan_NextFreq_PARAM)pArgs)->bRet=bRet;
2055
2056 break;
2057
2058 case DMD_DVBS_DRV_CMD_BlindScan_Cancel:
2059 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_Cancel\n"));
2060 bRet=psDVBSInstPri->fpDVBS_BlindScan_Cancel();
2061 ((PDVBS_BlindScan_Cancel_PARAM)pArgs)->bRet=bRet;
2062
2063 break;
2064
2065 case DMD_DVBS_DRV_CMD_BlindScan_End:
2066 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_End\n"));
2067 bRet=psDVBSInstPri->fpDVBS_BlindScan_End();
2068 ((PDVBS_BlindScan_End_PARAM)pArgs)->bRet=bRet;
2069
2070 break;
2071
2072 case DMD_DVBS_DRV_CMD_BlindScan_GetChannel:
2073 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_GetChannel\n"));
2074 bRet=psDVBSInstPri->fpDVBS_BlindScan_GetChannel(((PDVBS_BlindScan_GetChannel_PARAM)pArgs)->u16ReadStart,((PDVBS_BlindScan_GetChannel_PARAM)pArgs)->u16TPNum,((PDVBS_BlindScan_GetChannel_PARAM)pArgs)->pTable);
2075 ((PDVBS_BlindScan_GetChannel_PARAM)pArgs)->bRet=bRet;
2076
2077 break;
2078
2079 case DMD_DVBS_DRV_CMD_BlindScan_GetCurrentFreq:
2080 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_GetCurrentFreq\n"));
2081 bRet=psDVBSInstPri->fpDVBS_BlindScan_GetCurrentFreq(((PDVBS_BlindScan_GetCurrentFreq_PARAM)pArgs)->u32CurrentFreq);
2082 ((PDVBS_BlindScan_GetCurrentFreq_PARAM)pArgs)->bRet=bRet;
2083
2084 break;
2085
2086 case DMD_DVBS_DRV_CMD_BlindScan_WaitCurFreqFinished:
2087 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_WaitCurFreqFinished\n"));
2088 bRet=psDVBSInstPri->fpDVBS_BlindScan_WaitCurFreqFinished(((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->u8Progress,((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->u8FindNum,((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->substate_reg,((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->u32Data,((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->symbolrate_reg,((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->CFO_reg);
2089 ((PDVBS_BlindScan_WaitCurFreqFinished_PARAM)pArgs)->bRet=bRet;
2090
2091 break;
2092
2093 case DMD_DVBS_DRV_CMD_BlindScan_GetTunerFreq:
2094 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_BlindScan_GetTunerFreq\n"));
2095 bRet=psDVBSInstPri->fpDVBS_BlindScan_GetTunerFreq(((PDVBS_BlindScan_GetTunerFreq_PARAM)pArgs)->u16TunerCenterFreq,((PDVBS_BlindScan_GetTunerFreq_PARAM)pArgs)->u16TunerCutOffFreq);
2096 ((PDVBS_BlindScan_GetTunerFreq_PARAM)pArgs)->bRet=bRet;
2097
2098 break;
2099
2100 case DMD_DVBS_DRV_CMD_DiSEqC_Init:
2101 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_Init\n"));
2102 bRet=psDVBSInstPri->fpDVBS_DiSEqC_Init();
2103 ((PDVBS_DiSEqC_Init_PARAM)pArgs)->bRet=bRet;
2104
2105 break;
2106
2107 case DMD_DVBS_DRV_CMD_DiSEqC_SetLNBOut:
2108 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_SetLNBOut\n"));
2109 bRet=psDVBSInstPri->fpDVBS_DiSEqC_SetLNBOut(((PDVBS_DiSEqC_SetLNBOut_PARAM)pArgs)->bLow);
2110 ((PDVBS_DiSEqC_SetLNBOut_PARAM)pArgs)->bRet=bRet;
2111
2112 break;
2113
2114 case DMD_DVBS_DRV_CMD_DiSEqC_GetLNBOut:
2115 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_GetLNBOut\n"));
2116 bRet=psDVBSInstPri->fpDVBS_DiSEqC_GetLNBOut(((PDVBS_DiSEqC_GetLNBOut_PARAM)pArgs)->bLNBOutLow);
2117 ((PDVBS_DiSEqC_GetLNBOut_PARAM)pArgs)->bRet=bRet;
2118
2119 break;
2120
2121 case DMD_DVBS_DRV_CMD_DiSEqC_Set22kOnOff:
2122 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_Set22kOnOff\n"));
2123 bRet=psDVBSInstPri->fpDVBS_DiSEqC_Set22kOnOff(((PDVBS_DiSEqC_Set22kOnOff_PARAM)pArgs)->b22kOn);
2124 ((PDVBS_DiSEqC_Set22kOnOff_PARAM)pArgs)->bRet=bRet;
2125
2126 break;
2127
2128 case DMD_DVBS_DRV_CMD_DiSEqC_Get22kOnOff:
2129 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_Get22kOnOff\n"));
2130 bRet=psDVBSInstPri->fpDVBS_DiSEqC_Get22kOnOff(((PDVBS_DiSEqC_Get22kOnOff_PARAM)pArgs)->b22kOn);
2131 ((PDVBS_DiSEqC_Get22kOnOff_PARAM)pArgs)->bRet=bRet;
2132
2133 break;
2134
2135 case DMD_DVBS_DRV_CMD_DiSEqC_SendCmd:
2136 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_SendCmd\n"));
2137 bRet=psDVBSInstPri->fpDVBS_DiSEqC_SendCmd(((PDVBS_DiSEqC_SendCmd_PARAM)pArgs)->pCmd,((PDVBS_DiSEqC_SendCmd_PARAM)pArgs)->u8CmdSize);
2138 ((PDVBS_DiSEqC_SendCmd_PARAM)pArgs)->bRet=bRet;
2139
2140 break;
2141
2142 case DMD_DVBS_DRV_CMD_DiSEqC_SetTxToneMode:
2143 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_SetTxToneMode\n"));
2144 bRet=psDVBSInstPri->fpDVBS_DiSEqC_SetTxToneMode(((PDVBS_DiSEqC_SetTxToneMode_PARAM)pArgs)->bTxTone22kOff);
2145 ((PDVBS_DiSEqC_SetTxToneMode_PARAM)pArgs)->bRet=bRet;
2146
2147 break;
2148
2149 case DMD_DVBS_DRV_CMD_DiSEqC_SetTone:
2150 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DiSEqC_SetTone\n"));
2151 bRet=psDVBSInstPri->fpDVBS_DiSEqC_SetTone(((PDVBS_DiSEqC_SetTone_PARAM)pArgs)->bTone1);
2152 ((PDVBS_DiSEqC_SetTone_PARAM)pArgs)->bRet=bRet;
2153
2154 break;
2155
2156 case DMD_DVBS_DRV_CMD_UnicableAGCCheckPower:
2157 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_UnicableAGCCheckPower\n"));
2158 bRet=psDVBSInstPri->fpDVBS_UnicableAGCCheckPower(((PDVBS_UnicableAGCCheckPower_PARAM)pArgs)->pbAGCCheckPower);
2159 ((PDVBS_UnicableAGCCheckPower_PARAM)pArgs)->bRet=bRet;
2160
2161 break;
2162
2163 case DMD_DVBS_DRV_CMD_GetIFAGC:
2164 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetIFAGC\n"));
2165 bRet=psDVBSInstPri->fpDVBS_GetIFAGC(((PDVBS_GetIFAGC_PARAM)pArgs)->ifagc_reg, ((PDVBS_GetIFAGC_PARAM)pArgs)->ifagc_reg_lsb, ((PDVBS_GetIFAGC_PARAM)pArgs)->ifagc_err_reg);
2166 ((PDVBS_GetIFAGC_PARAM)pArgs)->ret=bRet;
2167
2168 break;
2169
2170 case DMD_DVBS_DRV_CMD_GetTsDivNum:
2171 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetTsDivNum\n"));
2172 bRet=psDVBSInstPri->fpDVBS_GetTsDivNum(((PDVBS_GetTsDivNum_PARAM)pArgs)->u32SymbolRate, ((PDVBS_GetTsDivNum_PARAM)pArgs)->system_type_reg, ((PDVBS_GetTsDivNum_PARAM)pArgs)->code_rate_idx, ((PDVBS_GetTsDivNum_PARAM)pArgs)->fec_type_idx, ((PDVBS_GetTsDivNum_PARAM)pArgs)->pilot_flag, ((PDVBS_GetTsDivNum_PARAM)pArgs)->u32temp, ((PDVBS_GetTsDivNum_PARAM)pArgs)->code_rate_reg);
2173 ((PDVBS_GetTsDivNum_PARAM)pArgs)->bRet=bRet;
2174 break;
2175
2176 case DMD_DVBS_DRV_CMD_GetCurrentDemodCodeRate:
2177 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetCurrentDemodCodeRate\n"));
2178 bRet=psDVBSInstPri->fpDVBS_GetCurrentDemodCodeRate(((PDVBS_GetCurrentDemodCodeRate_PARAM)pArgs)->pCodeRate);
2179 ((PDVBS_GetCurrentDemodCodeRate_PARAM)pArgs)->bRet=bRet;
2180 break;
2181
2182 case DMD_DVBS_DRV_CMD_GetTunrSignalLevel_PWR:
2183 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_GetTunrSignalLevel_PWR\n"));
2184 bRet=psDVBSInstPri->fpDVBS_GetTunrSignalLevel_PWR(((PDVBS_GetTunrSignalLevel_PWR_PARAM)pArgs)->u16Data);
2185 ((PDVBS_GetTunrSignalLevel_PWR_PARAM)pArgs)->bRet=bRet;
2186 break;
2187 #ifdef UFO_SUPPORT_VCM
2188 case DMD_DVBS_DRV_CMD_Set_IS_ID:
2189 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Set_IS_ID\n"));
2190 bRet=psDVBSInstPri->fpDVBS_Set_IS_ID(((PDVBS_SetVCM_PARAM)pArgs)->u8IS_ID);
2191 ((PDVBS_SetVCM_PARAM)pArgs)->ret=bRet;
2192 break;
2193
2194 case DMD_DVBS_DRV_CMD_Set_Default_IS_ID:
2195 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Set_Default_IS_ID\n"));
2196 bRet=psDVBSInstPri->fpDVBS_Set_Default_IS_ID(((PDVBS_SetDefaultVCM_PARAM)pArgs)->u8IS_ID, ((PDVBS_SetDefaultVCM_PARAM)pArgs)->u8IS_ID_table);
2197 ((PDVBS_SetDefaultVCM_PARAM)pArgs)->ret=bRet;
2198 break;
2199
2200 case DMD_DVBS_DRV_CMD_Get_IS_ID_INFO:
2201 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_Get_IS_ID_INFO\n"));
2202 bRet=psDVBSInstPri->fpDVBS_Get_IS_ID_INFO(((PDVBS_GetVCM_PARAM)pArgs)->u8IS_ID, ((PDVBS_GetVCM_PARAM)pArgs)->u8IS_ID_table);
2203 ((PDVBS_GetVCM_PARAM)pArgs)->ret=bRet;
2204 break;
2205
2206 case DMD_DVBS_DRV_CMD_VCM_Init:
2207 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_VCM_INIT\n"));
2208 bRet=psDVBSInstPri->fpDVBS_VCM_INIT(((PDVBS_VCM_INIT_PARAM)pArgs)->u8VCM_OPT, ((PDVBS_VCM_INIT_PARAM)pArgs)->u8IS_ID, ((PDVBS_VCM_INIT_PARAM)pArgs)->u32DVBS2_DJB_START_ADDR);
2209 ((PDVBS_VCM_INIT_PARAM)pArgs)->ret=bRet;
2210 break;
2211
2212 case DMD_DVBS_DRV_CMD_VCM_Check:
2213 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_VCM_CHECK\n"));
2214 bRet = psDVBSInstPri->fpDVBS_VCM_CHECK();
2215 ((PDVBS_VCM_CHECK)pArgs)->ret = bRet;
2216 break;
2217
2218 case DMD_DVBS_DRV_CMD_VCM_Enabled:
2219 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_VCM_ENABLED\n"));
2220 bRet = psDVBSInstPri->fpDVBS_VCM_ENABLED(( (PDVBS_VCM_ENABLED)pArgs)->u8VCM_ENABLED);
2221 ((PDVBS_VCM_ENABLED)pArgs)->ret = bRet;
2222 break;
2223
2224 case DMD_DVBS_DRV_CMD_VCM_Mode:
2225 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_VCM_MODE\n"));
2226 bRet = psDVBSInstPri->fpDVBS_VCM_MODE(( (PDVBS_VCM_MODE)pArgs)->u8VCM_OPT);
2227 ((PDVBS_VCM_MODE)pArgs)->ret = bRet;
2228 break;
2229 #endif
2230
2231 #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
2232 case DMD_DVBS_DRV_CMD_INT_MODE:
2233 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DRV_CMD_INT_MODE\n"));
2234 bRet = psDVBSInstPri->fpDVBS_INT_MODE(( (PDVBS_INT_MODE)pArgs)->fpCB);
2235 ((PDVBS_INT_MODE)pArgs)->ret = bRet;
2236 break;
2237 #endif
2238
2239 #ifdef UFO_DEMOD_GetParam_NEW_FLOW
2240 case DMD_DVBS_DRV_CMD_GetParam:
2241 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DRV_CMD_GetParam\n"));
2242 bRet = psDVBSInstPri->fpDVBS_GetParam( (PDVBS_GET_INFO)pArgs );
2243 ((PDVBS_GET_INFO)pArgs)->ret = bRet;
2244 break;
2245 #endif
2246 #ifdef UFO_DEMOD_GET_AGC_INFO
2247 case DMD_DVBS_DRV_CMD_GetAGCInfo:
2248 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSIoctl - MDrv_DMD_DVBS_DRV_CMD_GetAGC_INFO\n"));
2249 bRet = psDVBSInstPri->fpDVBS_GetAGC_INFO( ((PDVBS_GET_AGC_INFO)pArgs)->u8dbg_mode, ((PDVBS_GET_AGC_INFO)pArgs)->pu16Data );
2250 ((PDVBS_GET_AGC_INFO)pArgs)->ret = bRet;
2251 break;
2252 #endif
2253 default:
2254 break;
2255 }
2256
2257 //jway suggest UtopiaResourceRelease(pResource);
2258
2259 return (bRet ? UTOPIA_STATUS_SUCCESS : UTOPIA_STATUS_FAIL);
2260 }
2261
DVBSClose(void * pInstance)2262 MS_U32 DVBSClose(void* pInstance)
2263 {
2264 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSClose\n"));
2265
2266 UtopiaInstanceDelete(pInstance);
2267
2268 return UTOPIA_STATUS_SUCCESS;
2269 }
2270
DVBSStr(MS_U32 u32PowerState,void * pModule)2271 MS_U32 DVBSStr(MS_U32 u32PowerState, void* pModule)
2272 {
2273 MS_U32 u32Return = UTOPIA_STATUS_FAIL;
2274 MS_U32 u32Ret = 0;
2275
2276 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSStr\n"));
2277
2278 //UtopiaModuleGetSTRPrivate(pModule, (void**));
2279
2280 if (u32PowerState == E_POWER_SUSPEND)
2281 {
2282 /* Please Implement Module Suspend Flow Here. */
2283 u32Ret = DMD_DVBS_SetPowerState(E_POWER_SUSPEND);
2284
2285 if(u32Ret == TRUE)
2286 u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
2287 else
2288 u32Return = UTOPIA_STATUS_FAIL;
2289 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c][DVBSStr] SUSPEND !\n"));
2290 }
2291 else if (u32PowerState == E_POWER_RESUME)
2292 {
2293 /* Please Implement Module Resume Flow Here. */
2294 u32Ret = DMD_DVBS_SetPowerState(E_POWER_RESUME);
2295
2296 if(u32Ret == TRUE)
2297 u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
2298 else
2299 u32Return = UTOPIA_STATUS_FAIL;
2300 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c][DVBSStr] RESUME !\n"));
2301 }
2302 else
2303 {
2304 u32Return = UTOPIA_STATUS_FAIL;
2305 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c][DVBSStr] OTHERS !\n"));
2306 }
2307
2308 return u32Return;// for success
2309 }
2310
DVBSRegisterToUtopia(void)2311 void DVBSRegisterToUtopia(void)
2312 {
2313 // 1. deal with module
2314
2315 void* pUtopiaModule = NULL;
2316 // UtopiaModuleCreate(MODULE_DVBT, 8, &pUtopiaModule);
2317 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c]DVBSRegisterToUtopia\n"));
2318
2319 UtopiaModuleCreate(MODULE_DVBS, 8, &pUtopiaModule);
2320 UtopiaModuleRegister(pUtopiaModule);
2321 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)DVBSOpen, (FUtopiaClose)DVBSClose, (FUtopiaIOctl)DVBSIoctl);
2322
2323 // Utopia2K STR
2324 #if defined(MSOS_TYPE_LINUX_KERNEL)
2325 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS_v2.c][DVBSRegisterToUtopia] KERNEL DVBSStr!\n"));
2326 UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule,(FUtopiaSTR)DVBSStr);
2327 #endif
2328 }
2329