xref: /utopia/UTPA2-700.0.x/modules/demodulator/drv/demod/drvDMD_INTERN_DVBS_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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