blob: 5abd02d8bd4a0278218e678770501666d590885f [file] [log] [blame]
yu.dongc33b3072024-08-21 23:14:49 -07001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2016
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS (""MEDIATEK SOFTWARE"")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN ""AS-IS"" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35/*************************************************************
36*
37* This Software is the property of VIA Telecom, Inc. and may only be used pursuant to a license from VIA Telecom, Inc.
38*
39* Any unauthorized use inconsistent with the terms of such license is strictly prohibited.
40*
41* Copyright (c) 2010 VIA Telecom, Inc. All rights reserved.
42*
43*************************************************************/
44#ifndef LECAPI_H
45#define LECAPI_H
46/*****************************************************************************
47
48 FILE NAME: lecapi.h
49
50 DESCRIPTION : LEC task interface
51
52 This include file provides system wide global type declarations and
53 constants
54 HISTORY :
55 See Log at end of file
56
57*****************************************************************************/
58
59#include "monapi.h"
60#include "valapi.h"
61
62#define MAX_GPS_SV_NUM_INVIEW 16
63/*------------------------------------------------------------------------
64* EXE Interfaces - Definition of Signals, GPIO and Mailboxes
65*------------------------------------------------------------------------*/
66
67//#define LEC_STARTUP_SIGNAL EXE_SIGNAL_1 /* From Mon Task */
68//#define LEC_RUN_GPS_LIBRARY_SIGNAL EXE_SIGNAL_2 /* For Every 50msec run the GPS Lib */
69//#define LEC_RUN_PATCH_SIGNAL EXE_SIGNAL_3 /* For Patch Uploding by LEC */
70
71/* LEC command mailbox id */
72#define LEC_MAILBOX EXE_MAILBOX_1_ID
73
74/* GPIO Mapping for Target */
75#define LEC_POWER_EN HWD_GPIO_NUM /* This GPIO pin can be change by Customer */
76#define LEC_RESET_N HWD_GPIO_NUM /* This GPIO pin can be change by Customer */
77
78#ifdef MTK_CBP
79
80#else
81#define LEC_UART1_IN HWD_GPIO_NUM /* Do not change this Port assign */
82#define LEC_UART1_OUT HWD_GPIO_NUM /* Do not change this Port assign */
83#define LEC_FRAME_SYNC HWD_GPIO_NUM /* Do not change this Port assign */
84#define LEC_UART1_RTS HWD_GPIO_NUM /* Do not change this Port assign */
85#endif
86
87
88/* This is MAX PDE data size for IS801 and IS801-1 */
89#define MAX_801_SIZE 200
90
91#define MAX_EPH_DATA_BUFFER (1024) /* To support 16 PRNs in one EPH data */
92#define MAX_PRNS_PER_ONE_EPH_MSG (16)
93#define MAX_ALM_DATA_BUFFER (2048) /* to support 32 PRNs in one ALM data */
94#define MAX_PRNS_PER_ONE_ALM_MSG (32)
95
96/*----------------------------------------------------------------------------
97 Defines Constants used in this file
98----------------------------------------------------------------------------*/
99
100/* GPS Calibration related Data */
101#define LEC_CAL_INIT_FROM_NVRAM (01) /* GPS Cal data initialized from NV Ram */
102#define LEC_CAL_INIT_FROM_CODE (02) /* GPS Cal data initialized from Code */
103#define LEC_CAL_INIT_FROM_CODE_NV_ERR (03) /* GPS Cal data initialized from Code, Wrong NV data */
104#define LEC_CAL_INIT_FROM_CODE_FOR_FACTORY (04) /* GPS Cal data initialized from Code, Wrong NV data */
105
106#define LEC_1X_DO_GPS_GROUP_DELAY (34195) /* 3.5 Chip */
107
108
109
110#if (defined DATACARD_LTE_P1_USB_DPRAM) /* Stealth */
111#define LEC_CELL_GPS_GROUP_DELAY (-9770) /* 1 Chip */
112#define LEC_CELL_GPS_AA_CODE_PHASE (9) /* +9 Chips */
113#define LEC_CELL_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
114#define LEC_CELL_GPS_PRM_FRACT_CHIPS (48) /* -0.48 chips */
115
116#define LEC_PCS_GPS_GROUP_DELAY (-9770) /* 1 Chip */
117#define LEC_PCS_GPS_AA_CODE_PHASE (9) /* +9 Chips */
118#define LEC_PCS_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
119#define LEC_PCS_GPS_PRM_FRACT_CHIPS (49) /* -0.49 chips */
120
121#elif (defined STEALTHV) /* Stealth */
122#define LEC_CELL_GPS_GROUP_DELAY (-9770) /* 1 Chip */
123#define LEC_CELL_GPS_AA_CODE_PHASE (9) /* +9 Chips */
124#define LEC_CELL_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
125#define LEC_CELL_GPS_PRM_FRACT_CHIPS (48) /* -0.48 chips */
126
127#define LEC_PCS_GPS_GROUP_DELAY (-9770) /* 1 Chip */
128#define LEC_PCS_GPS_AA_CODE_PHASE (9) /* +9 Chips */
129#define LEC_PCS_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
130#define LEC_PCS_GPS_PRM_FRACT_CHIPS (49) /* -0.49 chips */
131#define LEC_CELL_GPS_GROUP_DELAY (0) /* 1 Chip */
132#define LEC_CELL_GPS_AA_CODE_PHASE (0) /* +9 Chips */
133#define LEC_CELL_GPS_PRM_WHOLE_CHIPS (0) /* -8 Chips */
134#define LEC_CELL_GPS_PRM_FRACT_CHIPS (0) /* -0.56 chips */
135
136#define LEC_PCS_GPS_GROUP_DELAY (0) /* 1 Chip */
137#define LEC_PCS_GPS_AA_CODE_PHASE (0) /* +9 Chips */
138#define LEC_PCS_GPS_PRM_WHOLE_CHIPS (0) /* -8 Chips */
139#define LEC_PCS_GPS_PRM_FRACT_CHIPS (0) /* -0.57 chips */
140
141#else /* Make Default value until Calibrated */
142#define LEC_CELL_GPS_GROUP_DELAY (-9770) /* 1 Chip */
143#define LEC_CELL_GPS_AA_CODE_PHASE (9) /* +9 Chips */
144#define LEC_CELL_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
145#define LEC_CELL_GPS_PRM_FRACT_CHIPS (56) /* -0.56 chips */
146
147#define LEC_PCS_GPS_GROUP_DELAY (-9770) /* 1 Chip */
148#define LEC_PCS_GPS_AA_CODE_PHASE (9) /* +9 Chips */
149#define LEC_PCS_GPS_PRM_WHOLE_CHIPS (8) /* -8 Chips */
150#define LEC_PCS_GPS_PRM_FRACT_CHIPS (57) /* -0.57 chips */
151#endif
152
153/* To Calibrate, set the default value */
154#define LEC_CELL_GPS_GROUP_DELAY_CAL (0) /* 0 Chips */
155#define LEC_CELL_GPS_AA_CODE_PHASE_CAL (0) /* 0 Chips */
156#define LEC_CELL_GPS_PRM_WHOLE_CHIPS_CAL (0) /* 0 Chips */
157#define LEC_CELL_GPS_PRM_FRACT_CHIPS_CAL (0) /* 0 Chips */
158#define LEC_1X_DO_GPS_GROUP_DELAY_CAL (0) /* 0 Chips */
159
160
161#define LEC_AP_RF_DELAY_1X 0
162#define LEC_AP_RF_DELAY_DO 0
163
164#if (SYS_OPTION_GPS_HW ==SYS_GPS_LOCAL_INTERNAL)
165#define LEC_RFDELAY_1X (86364)
166#define LEC_RFDELAY_DO (87713)
167#define LEC_RFDELAY (87039)
168#endif
169
170
171
172/*----------------------------------------------------------------------------
173* LEC States : Kind of Virtual State
174*----------------------------------------------------------------------------*/
175typedef enum
176{
177 GPS_OFF,
178 GPS_POWER_UP,
179 GPS_SLEEP,
180 GPS_ABOUT_TO_RUNNING,
181 GPS_RUNNING
182} GpsStateT;
183
184typedef struct
185{
186 unsigned short PilotPN;
187 signed short SystemTimeOffset;
188} LecGpsEndGpsAckMsgT;
189
190typedef struct
191{
192 unsigned short Enable;
193} LecGpsHwEnableMsgT;
194
195typedef enum
196{
197 GPS_FIX_MODE_UNKNOWN, /* This is for Error */
198 GPS_FIX_MODE_MSA, /* This is for MS_Assisted mode in User Plane*/
199 GPS_FIX_MODE_MSB, /* This is for MS_Based mode in User Plane */
200 GPS_FIX_MODE_MSS, /* This is for MS_Standalone mode in User Plane */
201 GPS_FIX_MODE_CP = 8, /* This is for Control Plane mode and E911 *//*associated with struct GPS_FIX_MODE*/
202 GPS_FIX_MODE_SUPL_MSA, /* This is for MS_Assisted mode in SUPL */
203 GPS_FIX_MODE_SUPL_MSB, /* This is for MS_Based mode in SUPL */
204 GPS_FIX_MODE_COUNT
205} GpsFixModeT;
206
207/* Write Cntl data size */
208#define GN_GPS_GNB_CTRL_MAX_SIZE (EXE_SIZE_MSG_BUFF_4 - 12)
209#define GN_GPS_GNB_CTRL_MAX_MSGS 2
210
211/* Write NMEA to ETS size */
212//#define GN_GPS_NMEA_MAX_SIZE 180
213#define GN_GPS_NMEA_MAX_SIZE MON_MAX_SPY_SIZE
214#define GN_GPS_NMEA_MAX_MSGS 10
215
216/* Write EVENT to ETS size */
217//#define GN_GPS_EVENT_MAX_SIZE 180
218#define GN_GPS_EVENT_MAX_SIZE MON_MAX_SPY_SIZE
219#define GN_GPS_EVENT_MAX_MSGS 15
220
221/* Write NAV to ETS size */
222//#define GN_GPS_NAV_MAX_SIZE 180
223#define GN_GPS_NAV_MAX_SIZE MON_MAX_SPY_SIZE
224#define GN_GPS_NAV_MAX_MSGS 30
225
226/* Write GNB to ETS size */
227//#define GN_GPS_GNB_MAX_SIZE 180
228#define GN_GPS_GNB_MAX_SIZE MON_MAX_SPY_SIZE
229#define GN_GPS_GNB_MIN_SEND_SIZE 400
230#define GN_GPS_GNB_MAX_MSGS 15
231
232
233#define PS_NMEA_MAX_SIZE 760
234
235/* This structure is used in the PSW task */
236/*
237typedef struct
238{
239 kal_uint16 DataLen;
240 kal_uint8 Data[PS_NMEA_MAX_SIZE];
241} PswGpsNmeaStreamMsgT;
242*/
243/* This structure is used for Patch Uploading */
244#define IOP_GPS7560_PATCH_DATA_SIZE_MAX 256
245typedef struct
246{
247 kal_uint16 DataLen;
248 kal_uint8 Data[IOP_GPS7560_PATCH_DATA_SIZE_MAX];
249} IopGps7560PatchDataMsgT;
250
251/* This structure is used in the IOP task */
252/* LEC <- IOP, Rx data of LEC point of view */
253#define IOP_GPS7560_DATA_SIZE_MAX 186
254typedef struct
255{
256 kal_uint16 DataLen;
257 kal_uint8 Data[IOP_GPS7560_DATA_SIZE_MAX];
258} IopGps7560RxDataMsgT;
259
260/* These structure definitions are used between IOP and GPS Lib*/
261#define LEC_MAX_QUEUE_DEPTH (10240)
262extern kal_uint8 LecRxGpsBuffer[LEC_MAX_QUEUE_DEPTH];
263
264/* Static Data definitions local to this module */
265typedef struct
266{
267 kal_uint32 CTime_Set; /* 'C' Time when the RTC was last Set / Calibrated */
268 kal_int32 Offset_s; /* (UTC - RTC) calibration offset [s] */
269 kal_int32 Offset_ms; /* (UTC - RTC) calibration offset [ms] */
270 kal_uint32 Acc_Est_Set; /* Time Accuracy Estimate when RTC was Set / Calibrated [ms] */
271 kal_uint32 checksum; /* RTC Calibration File 32-bit checksum */
272} GpsRtcCalibT;
273
274/* This structure is used in the DMB for NV Data and RTC Cal data*/
275/* From GN_GPS_API.h and Lecgns7560.c file */
276#if !defined (GPS_NV_SIZE)
277#define GPS_NV_SIZE (5248) /* was 5120 for GPS Lib ver3 */
278#endif
279#define GPS_RTC_CAL_SIZE (sizeof(GpsRtcCalibT)) /* 20 Bytes */
280#define DBM_EXT_GPS_NV_SIZE (GPS_NV_SIZE + GPS_RTC_CAL_SIZE)
281
282typedef struct
283{
284 kal_bool ReadDbmFlag;
285 kal_bool WriteDbmFlag;
286 kal_uint16 Offset;
287 kal_uint8 Data[GPS_NV_SIZE];
288 GpsRtcCalibT RtcCal;
289} GpsSvNvDataT;
290
291typedef struct
292{
293 kal_uint16 Offset;
294 kal_uint8 Data[GPS_NV_SIZE];
295} GpsEngNvDataT;
296
297
298/* This structure is used in the DMB for Cell ID Information*/
299/* From cgpsHistoricalCell_Interface.h file */
300#define DBM_EXT_GPS_CELL_NV_SIZE (20 * NMAX) /* Actually, 16bytes * NMAX */
301/* This structure is used in the LEC and PSW*/
302/* Define for GpsDevicePowerOn */
303typedef struct
304{
305 kal_uint32 FixMode;
306 kal_uint32 FixRateNumFixes;
307 kal_uint32 FixRateTimeBeFixes;
308 kal_uint32 QoSHAccuracy;
309 kal_uint32 QoSVAccuracy;
310#ifdef MTK_CBP
311 kal_uint32 QoSPRAccuracy;
312#endif
313 kal_uint32 QoSPerformance;
314 kal_uint32 InstanceID;
315 kal_uint8 flag_gps;
316} GpsDevConfigDataT;
317
318/* This structure is used in the LEC */
319/* Define for GPS's Calibrated Parameters */
320typedef struct
321{
322 kal_int32 Lecl1xDoSystemTOffset; /* For Diff system Time between 1xRTT and EVDO.*/
323 kal_int32 LecGpsGroupDelay; /* For Group Delay */
324 kal_uint16 LecGpsAACodePhaseAdj; /* For Code Phase Adjust for AA msg */
325 kal_uint16 LecGpsWholeChipsAdj; /* For Whole Chip Adjust for PRM msg*/
326 kal_uint16 LecGpsFractChipsAdj; /* For Fract chip Adjust for PRM msg*/
327} LecGpsCalLocalT ;
328
329
330typedef struct
331{
332 kal_bool ValidRef;
333 kal_uint32 RefPosRMSMaj;
334 kal_uint32 RefPosRMSMin;
335 kal_int32 APRefLat;
336 kal_int32 APRefLon;
337} ApRefCellIdInforT;
338
339typedef struct
340{
341 kal_uint32 InstanceId;
342 kal_uint8 flag_gps;
343 kal_uint8 Status;
344} GpsEndMsgT;
345/*----------------------------------------------------------------------------
346* Message IDs for signals and commands sent to LEC
347*----------------------------------------------------------------------------*/
348
349
350/* Define GNS7560's propriatry Commands set */
351typedef enum
352{
353 GNS7560_VERSION,
354 GNS7560_RSET_HOT_START,
355 GNS7560_RSET_WARM_START,
356 GNS7560_RSET_COLD_START,
357 GNS7560_RSET_FACTORY_START,
358 GNS7560_SLEEP,
359 GNS7560_COMA,
360 GNS7560_WAKEUP,
361 GNS7560_SHUTDOWN,
362 GNS7560_DIAG_MODE0,
363 GNS7560_DIAG_MODE1,
364 GNS7560_DIAG_MODE2,
365 GNS7560_DIAG_MODE3,
366
367 GNS7560_MAX_COMMANDS
368} Gns7560CommandsT;
369
370/* LEC_GPS_FACTORY_GET_RF_CNO_MSG */
371typedef struct
372{
373 ExeRspMsgT RspInfo;
374 kal_uint8 Mode; /* TimerBased:0 and CounterBased:1 */
375 kal_uint8 Para1; /* TimerBased's Para1 Range [10..60]seconds and
376 CounterBased's Para1 Range [01..30] */
377} LecEtsGpsFacGetCNoMsgT;
378
379/* LEC_VAL_FACTORY_GET_RF_CNO_MSG */
380typedef struct
381{
382 kal_uint8 Mode; /* TimerBased:0 and CounterBased:1 */
383 kal_uint8 Para1; /* TimerBased's Para1 Range [10..60]seconds and
384 CounterBased's Para1 Range [01..30] */
385} LecGpsFacGetCNoMsgT;
386
387/* For ETS and VAL as MSG_ID_VAL_GPS_FACTORY_RF_CNO_MSG */
388typedef struct
389{
390 kal_uint16 CNo; /* Depend on GPS Signal Level */
391} LecFacReportCNoMsgT;
392
393/* LEC_GET_RF_BAND_MSG */
394typedef struct
395{
396 kal_uint8 Owner; /* SYS_MOD_1xRTT or SYS_MOD_EVDO */
397 kal_uint8 Band; /* Supported RF band */
398} LecGetRfBandMsgT;
399
400/* For PGPS on AP */
401typedef struct
402{
403 kal_uint32 SysTime; /* Seconds in GPS Time from AP */
404} LecPgpsSysTimeMsgT;
405
406typedef struct
407{
408 kal_uint32 Prn_Mask; /* This is bit map for each PRN's request */
409 kal_uint32 SysTime; /* Current GPS's time to get the correct EE data */
410} LecPgpsGetEeReqMsgT;
411
412#define MAX_PGPS_SV 32
413
414/**
415* A structure containing ephemeris data.
416* Please refer to the GPS-200D for more information.
417*/
418typedef struct sRXN_ephem
419{
420 kal_uint8 prn; /* range: 1-32 */
421 kal_uint8 ura; /* see ICD-200 */
422 kal_uint8 health; /* */
423 kal_int8 af2; /* 2^-55 sec/sec^2 */
424 kal_int8 ephem_fit; /* 0-4 hr */
425 kal_uint8 ure; /* User Range Error. Provides an indication of EE accuracy. Always a GPStream output. Units: meters.*/
426 kal_uint16 gps_week; /* cumulative GPS week number (eg. 1486) */
427 kal_uint16 iode; /* */
428 kal_uint16 toc; /* 2^4 */
429 kal_uint16 toe; /* 2^4 have him on 16 sec bdry */
430 kal_int16 af1; /* 2^-43 sec/sec */
431 kal_int16 i_dot; /* 2^-43 */
432 kal_int16 delta_n; /* 2^-43 */
433 kal_int16 cuc; /* 2^-29 */
434 kal_int16 cus; /* 2^-29 */
435 kal_int16 cic; /* 2^-29 */
436 kal_int16 cis; /* 2^-29 */
437 kal_int16 crc; /* 2^-5 */
438 kal_int16 crs; /* 2^-5 */
439 kal_int32 af0; /* 2^-31 sec */
440 kal_int32 m0; /* 2^-31/PI */
441 kal_uint32 e; /* 2^-33 */
442 kal_uint32 sqrt_a; /* 2^-19 */
443 kal_int32 omega0; /* 2^-31/PI */
444 kal_int32 i0; /* 2^-31/PI */
445 kal_int32 w; /* 2^-31/PI */
446 kal_int32 omega_dot; /* 2^-43 */
447} sRXN_ephem_t;
448
449typedef struct LecPgpsRxnEEph /* RxN's EE data set */
450{
451 kal_uint8 Num_Prn; /* Number of EEphs data [range 0 .. 32] */
452 sRXN_ephem_t EE[MAX_PGPS_SV]; /* RxN's Ephemeris Elements array */
453} sLecPgpsRxnEEph;
454
455/*------------------------------------------------------------------------
456* Timer Interfaces - Declaration for PRM and AA Message
457*------------------------------------------------------------------------*/
458
459/* Define NA messages for Psedorange and Acquisition Assistance */
460#define LEC_PRM_MAX_SIZE 3
461#define LEC_MAX_ASSIST_SIZE 250
462#define LEC_PRM_MAX_RSP_SIZE 256
463
464typedef struct
465{
466 unsigned char IdleOrTraffic; /* KAL_TRUE = Idle, KAL_FALSE = Traffic */
467 unsigned char SystemTimeOffsetIncl;
468 unsigned short ReqMsmtRecLen; /* Request PRM Rec Length */
469 unsigned char ReqPseudorangesRec[LEC_PRM_MAX_SIZE]; /* Req PRM Buffer */
470 unsigned short ProvAcqAssistRecLen; /* Prov GPS Acquisition Assist Rec Length */
471 unsigned char ProvAcqAssistRec[LEC_MAX_ASSIST_SIZE]; /* Prov GPS Acquisition Assist Buffer */
472} LecPseudorangeMsmtReqMsgT;
473
474
475#define MAX_SV 16
476
477/* This structure mirrors the structure that is used in the */
478/* External GPS DB to hold AA information. */
479typedef struct
480{
481 unsigned char TOA; /* Time of applicability*/
482 unsigned char NumSV; /* Number of satellites for which data is available*/
483 unsigned char DoppIncl; /* Doppler0 is included ? KAL_TRUE/KAL_FALSE */
484 unsigned char AddDoppIncl; /* Doppler1 and DopplerWin is included? KAL_TRUE/KAL_FALSE */
485 unsigned char CodePhParIncl; /* Code Phase Information is included? KAL_TRUE/KAL_FALSE */
486 unsigned char AzElIncl; /* Azimuth and elevation angle included? KAL_TRUE/KAL_FALSE*/
487 unsigned char SV[MAX_SV]; /* SV PRN number (0 means no data available)*/
488 signed short Dopp[MAX_SV]; /* Doppler value. Units Hz*/
489 char DoppRate[MAX_SV]; /* Doppler rate of change. Units (1/64) Hz/s*/
490 unsigned char DoppSR[MAX_SV]; /* Doppler search range. Units Hz.*/
491 signed short Code[MAX_SV]; /* Code phase [range 0..1022]. Units C/A chips*/
492 unsigned char CodePhInt[MAX_SV]; /* Integer C/A Code Msec into the GPS Data Bit */
493 /* Range[0..19]msec (-1 if not known) */
494 unsigned char GpsBitNum[MAX_SV]; /* GPS Data Bit Number, module 80 msec */
495 /* Range[0..3] (-1 if not known) */
496 unsigned char CodeSR[MAX_SV]; /* Code search range. Units C/A chips [range 0..512]*/
497 unsigned char Azim[MAX_SV]; /* Azimuth. Units 11.25 degrees*/
498 unsigned char Elev[MAX_SV]; /* Elevation. Units 11.25 degrees*/
499} LecNAAcqAss;
500
501
502/* LEC_SESSION_END_REQ_MSG:
503 * Sent by PSW to end a GPS Session. PSW passes on if it reset
504 * the MS to System Determination (KAL_TRUE) or not (KAL_FALSE). PDE
505 * responds with a PSW_LEC_SESSION_END_RSP_MSG.
506 */
507typedef struct
508{
509 unsigned char SystemDeter; /* KAL_TRUE=MS reset to SYS DETER */
510} LecSessionEndReqMsgT;
511
512typedef struct
513{
514 unsigned char RecLen;
515 unsigned char ProvPseudorangeRec[LEC_PRM_MAX_RSP_SIZE];
516} LecPseudorangeMsmtRspMsgT;
517
518typedef struct
519{
520 kal_uint32 Time_Ref; /* Time of Validity [ms] % 14400000 */
521 kal_uint8 TimeRefSrc; /* Time reference source [see IS801 std] */
522} LecPRMeasTimeRef;
523
524/* This is the structure that mirrors the PRM response */
525typedef struct
526{
527 unsigned char PRN_num; /* Satellite PRN number */
528 unsigned char CNO; /* Satellite C/No [dB-Hz] (range 0 to 63 dB-Hz) */
529 signed short Dopp; /* Measured Doppler frequency [0.2 Hz] (range +/-6553.6) */
530 unsigned short Code_whole; /* Satellite Code phase measurement - whole chips */
531 /* [C/A chips] (range 0..1022) */
532 unsigned short Code_fract; /* Satellite Code phase measurement - fractional chips */
533 /* [2^-10 C/A chips] (range 0..1023) */
534 unsigned char Mul_Path_Ind; /* Multipath indicator (range 0..3) */
535 /* (see TIA/EIA/IS-801 Table 3.2.4.2-7) */
536 unsigned char Range_RMS_Err; /* Pseudorange RMS error: Mantissa (range 0..63) consisting of */
537 /* (see TIA/EIA/IS-801 Table 3.2.4.2-8) */
538 /* 3 bit Mantissa 'x' & 3 bit Exponsent 'y' where: */
539 /* RMS Error = 0.5 * (1 + x/8) * 2^y metres */
540} LecIS801SVData;
541
542typedef struct
543{
544 kal_uint32 Time_Ref; /* Time of Validity [ms] % 14400000 */
545 unsigned char TimeRefSrc; /* Time reference source [see IS801 std] */
546 unsigned char NumValidMeas; /* Number of Valid Meas avail [0..15] */
547 LecIS801SVData SV_Data[MAX_SV]; /* SV PRM data NUM_CH*/
548} LecPRMeas;
549
550#if (defined SYS_OPTION_GPS_EXTERNAL_SUPPORT_SA)
551/* Define NA message for Sensitivity Assistance */
552#define LEC_MAX_NUM_SA_NAV_BYTES 128
553#define LEC_MAX_NUM_SA_SV 16
554#define LEC_MAX_NUM_SA_DATA_RECS 3
555typedef struct
556{
557 unsigned char NavMsgBits[LEC_MAX_NUM_SA_NAV_BYTES];
558 unsigned char NumSvDr;
559 unsigned char SvNumArray[LEC_MAX_NUM_SA_SV];
560} LecSensAssistDataRecT;
561
562typedef struct
563{
564 unsigned short RefBitNum;
565 unsigned char NumDataRecs; /* num of data recs */
566 unsigned short DataRecSizeInBits; /* size of each data rec in bits; range 0 to 1020 */
567 LecSensAssistDataRecT SADataRecArray[LEC_MAX_NUM_SA_DATA_RECS];
568} LecSensAssistMsgT;
569#endif
570
571/* LEC_GPS_REF_FREQ_ADJ_MSG */
572#define SET_FREQ_PPB_CMD 0
573#define ADJ_FREQ_PPB_CMD 1
574typedef struct
575{
576 kal_uint16 Command;
577 kal_uint32 RxPllKHz;
578 kal_int16 FreqAdj;
579} LecGpsRefAdjMsgT;
580
581/*#ifdef MS_BASED_DEBUG*/
582/*MS-Based ETS*/
583typedef enum{
584 EPH = 1,
585 ALM,
586 LOC,
587 EPHALM,
588 All
589}InjectModeT;
590
591
592typedef struct
593{
594ExeRspMsgT RspInfo;
595kal_uint32 UserModeTime;
596} GPSUserModeTimeT;
597
598typedef struct
599{
600kal_uint32 UserModeTime;
601} GPSUserModeTimeRspT;
602
603/*MS-Based ETS*/
604typedef struct
605{
606 kal_uint32 FixMode;
607 kal_uint32 QoSAccuracy;
608 kal_uint32 QoSPerformance;
609} GpsMSBasedT;
610
611
612typedef struct
613{
614 kal_uint8 MsgNum;
615 kal_uint16 IS801Length;
616 kal_uint8 MsgID; /* Should be change to TotalNumMsgs */
617 kal_uint8 Data[MAX_801_SIZE];
618} AGpsMSBased801T;
619
620typedef enum{
621 HotReStart = 1,
622 WarmReStart,
623 ColdReStart
624}ReStartModeT;
625
626typedef struct
627{
628 kal_uint8 StartMode;
629} GpsReStartT;
630
631typedef struct
632{
633 kal_uint8 SatID;
634 kal_uint8 CodeOnL2;
635 kal_uint8 URA;
636 kal_uint8 SVHealth;
637 kal_uint8 FitIntFlag;
638 kal_uint8 AODA;
639 kal_int8 L2Pflag;
640 kal_int8 TGD;
641 kal_int8 af2;
642 kal_uint16 Week;
643 kal_uint16 toc;
644 kal_uint16 toe;
645 kal_uint16 IODC;
646 kal_int16 af1;
647 kal_int16 dn;
648 kal_int16 IDot;
649 kal_int16 Crs;
650 kal_int16 Crc;
651 kal_int16 Cus;
652 kal_int16 Cuc;
653 kal_int16 Cis;
654 kal_int16 Cic;
655 kal_int32 af0;
656 kal_int32 M0;
657 kal_uint32 e;
658 kal_uint32 APowerHalf;
659 kal_int32 Omega0;
660 kal_int32 i0;
661 kal_int32 w;
662 kal_int32 OmegaDot;
663
664} s_AGPS_Eph_El;
665
666typedef struct
667{
668 kal_uint8 WNa;
669 kal_uint8 SatID;
670 kal_uint8 SVHealth;
671 kal_uint8 toa;
672 kal_int16 af0;
673 kal_int16 af1;
674 kal_uint16 e;
675 kal_int16 delta_I;
676 kal_int16 OmegaDot;
677 kal_uint32 APowerHalf;
678 kal_int32 Omega0;
679 kal_int32 w;
680 kal_int32 M0;
681} s_AGPS_Alm_El;
682
683typedef struct
684{
685 kal_uint32 ZCount;
686 kal_int8 al0;
687 kal_int8 al1;
688 kal_int8 al2;
689 kal_int8 al3;
690 kal_int8 be0;
691 kal_int8 be1;
692 kal_int8 be2;
693 kal_int8 be3;
694} s_AGPS_Ion;
695
696typedef struct
697{
698 kal_int32 Latitude;
699 kal_int32 Longitude;
700 kal_int32 RMS_SMaj;
701 kal_int32 RMS_SMin;
702 kal_int16 RMS_SMajBrg;
703 kal_bool Height_OK;
704 kal_int32 Height;
705 kal_int32 RMS_Height;
706
707} s_AGPS_Ref_Pos;
708
709typedef struct {
710 kal_uint32 Interval;
711 kal_bool bGPGGA;
712 kal_bool bGPGSV;
713 kal_bool bGPGSA;
714 kal_bool bGPRMC;
715 kal_bool bGPGST;
716 kal_bool bGPGLL;
717 kal_bool bGPVTG;
718} LecNMEACfgSetMsgT;
719
720typedef struct {
721 ExeRspMsgT rspInfo;
722} LecNmeaCfgGetReqMsgT;
723
724typedef struct {
725 kal_uint32 Interval;
726 kal_bool bGPGGA;
727 kal_bool bGPGSV;
728 kal_bool bGPGSA;
729 kal_bool bGPRMC;
730 kal_bool bGPGST;
731 kal_bool bGPGLL;
732 kal_bool bGPVTG;
733} LecNmeaCfgGetRspMsgT;
734
735
736typedef struct
737{
738 kal_uint8 Ref_Pos_Req;
739 kal_uint8 Ion_Req;
740 kal_uint8 Alm_Req;
741 kal_uint8 Eph_Req;
742
743} LecGpsAssistReqT;
744
745
746typedef struct
747{
748 kal_uint8 GpsState;
749 kal_uint8 Eph;
750 kal_uint8 Alm;
751 kal_uint8 Loc;
752 kal_uint8 Ion;
753} GpsStateAssistT;
754
755
756typedef enum
757{
758 LecGpsEng_FIX_NOT_VALID,
759 LecGpsEng_FIX_ESTIMATED,
760 LecGpsEng_FIX_2D,
761 LecGpsEng_FIX_3D,
762 LecGpsEng_FIX_DGPS_2D,
763 LecGpsEng_FIX_DGPS_3D
764} LecGpsEngFixTypeT;
765
766typedef struct
767{
768 kal_bool Used;
769 kal_uint8 Id;
770 kal_uint8 Cn0;
771 kal_int8 Elev;
772 kal_uint16 Azimuth;
773} LecGpsEngSvInViewT;
774
775typedef struct {
776 LecGpsEngFixTypeT FixType;
777 kal_uint32 OsTime;
778 kal_uint32 LocalTimeTag;
779 kal_uint16 UtcYear;
780 kal_uint16 UtcMonth;
781 kal_uint16 UtcDay;
782 kal_uint16 UtcHour;
783 kal_uint16 UtcMin;
784 kal_uint16 UtcSec;
785 kal_uint16 UtcMilliSec; /* UTC Millisec into Sec */
786 kal_uint16 WeekNo;
787 kal_uint32 Tow; /* milliseconds */
788 kal_uint8 UtcDifference; /* (GPS-UTC) seconds */
789 double Lat;
790 double Long;
791 double AltitudeMSL; /* Mean Sea level */
792 double AltitudeElli; /* ? */
793 double X;
794 double Y;
795 double Z;
796 float SpeedGround;
797 float CourseGround;
798 float VerticalVelocity; /* Vertical velocity */
799 float LocUncAng; /* Location uncertainty angle */
800 float LocUncA; /* ? */
801 float LocUncP;
802 float LocUncV;
803 float VelHUnc; /* Horizontal Velocity RMS 1-sigma (67%) Accuracy estimate */
804 float VelVUnc; /* Vertical Velocity RMS 1-sigma (67%) Accuracy estimate */
805 float Pdop;
806 float Hdop;
807 float Vdop;
808 kal_uint8 SvInViewNum;
809 kal_uint8 SvUsed;
810 LecGpsEngSvInViewT SvInView[MAX_GPS_SV_NUM_INVIEW];
811} LecGpsEngWholeNavDataT;
812
813typedef struct
814{
815 kal_uint32 OsTime; /* Ticks */
816 kal_uint32 LocalTimeTag;
817 kal_uint16 UtcYear;
818 kal_uint16 UtcMonth;
819 kal_uint16 UtcDay;
820 kal_uint16 UtcHour;
821 kal_uint16 UtcMin;
822 kal_uint16 UtcSec;
823 kal_uint16 UtcMilliSec; /* UTC Millisec into Sec */
824 kal_uint16 WeekNo;
825 kal_uint32 Tow; /* Milliseconds */
826} LecGpsEngTimeMsgT;
827
828typedef struct
829{
830 kal_uint8 CustomerId;
831}LecCustomerIdSettingMsgT;
832
833
834typedef enum{
835 LEC_OFFSETSTART,
836 LEC_OFFSETEND
837}LecOffsetModeT;
838
839typedef struct
840{
841 kal_uint32 OffsetMode;
842} LecGpsOffsetT;
843
844
845typedef struct {
846
847 kal_int32 delay1X;
848 kal_int32 delayDO;
849} LecGpsRfDelayStruct;
850
851
852typedef struct
853{
854 LecGpsRfDelayStruct RfDelay[5];
855
856} LecGpsRfDelayT;
857
858#ifdef MTK_GPS_SYNC_DEV
859typedef struct
860{
861 ExeRspMsgT rspInfo;
862 kal_uint8 Switch;
863 kal_uint8 IntervalReqEE;/*in seconds*/
864
865} LecPgpsOnOffMsgT;
866typedef struct
867{
868 kal_uint8 Switch;
869 kal_uint8 IntervalReqEE;/*in seconds*/
870} LecPgpsOnOffMsgRspT;
871#endif
872/*****************************************************************************************/
873/*----------------------------------------------------------------------------
874 Global Data
875----------------------------------------------------------------------------*/
876#ifdef MTK_GPS_SYNC_DEV
877extern kal_bool bAssistDataRecvd;
878extern kal_uint8 LeapSecond;
879#endif
880
881extern ValGpsEphPrnMsgT ApGpsEphPrnData; /* Parsed Ephemeris Global Variable for LEC and VAL */
882extern ValGpsAlmPrnMsgT ApGpsAlmPrnData; /* Parsed Almanac Global Variable for LEC and VAL */
883
884extern void LecGpsTickLisr (void);
885#ifdef MTK_CBP
886#if (SYS_OPTION_EXTERNAL_GPS_HW == SYS_EXT_GPS_ON_AP)
887extern void LecAdjustLecTimer(float NewTime);
888#endif
889#endif
890
891#endif
892
893
894/*****************************************************************************
895* $Log: lecapi.h $
896* Revision 1.0 2009/02/09 schun
897*****************************************************************************/
898/**Log information: \main\Trophy\Trophy_ylxiao_href22001\1 2013-03-08 01:52:59 GMT ylxiao
899** HREF#22001 ÕûÀíGPS³õʼ»¯´úÂ룬ÐÞ¸ÄGPIO¶¨Òåµ½lecapi.h**/
900/**Log information: \main\Trophy\1 2013-03-08 03:47:15 GMT hzhang
901** HREF#22001 to modify GPS macro definition**/
902/**Log information: \main\Trophy\Trophy_ylxiao_href22033\1 2013-03-18 14:15:39 GMT ylxiao
903** HREF#22033, merge 4.6.0**/
904/**Log information: \main\Trophy\2 2013-03-19 05:20:02 GMT hzhang
905** HREF#22033 to merge 0.4.6 code from SD.**/
906/**Log information: \main\Trophy\Trophy_wzhou_href22240_fix2\1 2013-07-19 06:14:33 GMT wzhou
907** HREF#22240: fix for AP gps.**/
908/**Log information: \main\Trophy\3 2013-07-19 06:03:03 GMT jzwang
909** href#22240_fix2**/
910/**Log information: \main\Trophy\Trophy_wzhou_href22254_fix1\1 2013-08-27 09:14:35 GMT wzhou
911** HREF#22254 : Fix AA too big crash issue.**/
912/**Log information: \main\Trophy\4 2013-08-27 09:16:33 GMT jzwang
913** href#22254_fix1**/
914