summaryrefslogtreecommitdiffstats
path: root/positioning_hal/inc/GpsCommon/MDev_Gps_Main.h
blob: d40cb0ca7fb9f0887092af61078f7740d9d275d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
/*
 * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
* @file MDev_Gps_Main.h
*/

#ifndef  INC_GPSCOMMON_MDEV_GPS_MAIN_H_
#define  INC_GPSCOMMON_MDEV_GPS_MAIN_H_

/*---------------------------------------------------------------------------*/
// Include files

#include "gps_hal.h"
#include "positioning_def.h"

// #include "gps_hal.h"
// #include "MDev_Gps_Nmea.h"
// #include "LineSensDrv_Api.h"

/*---------------------------------------------------------------------------*/
// Value define

#define OFF           0       /* OFF */
#define ON            1       /* ON */
#define OK            0       /* Normal */
#define NG            (-1L)   /* Abnormality */
#define DAT_END       0xff    /* Exit code */

// State
typedef enum GpsMatrixSts {
  GPS_STS_STARTUP = 0,        /* Startup confirmation */
  GPS_STS_NORMAL,             /* In operation */
  GPS_STS_SENT,               /* Command sent status */
  GPS_STS_NUM
}TG_GPS_MATRIX_STS;

// Event
typedef enum GpsMatrixEvt {
  GPS_EVT_SENDREQ = 0,              /* Transmission request              */
  GPS_EVT_RESETREQ,                 /* GPS reset request        */
  GPS_EVT_RECVCYCLDAT,              /* Cyclic reception command reception        */
  GPS_EVT_RECVRSPDAT,               /* Receive response command          */
  GPS_EVT_TIMEOUT_RSPDAT,           /* Response monitoring timeout        */
  GPS_EVT_TIMEOUT_CYCLDAT,          /* Periodic reception data monitoring timeout  */
  GPS_EVT_TIMEOUT_NAVI,             /* Navigation providing data monitoring timeout  */
  GPS_EVT_TIMEOUT_DIAGCLKGUARD,     /* Diagnosis provision time guard monitoring timeout*/
  GPS_EVT_ACC_OFF,                  /* In-function ACC-OFF instructions        */
  GPS_EVT_NAVI_LOCATIONINFO,        /* Providing navigation information            */
  GPS_EVT_NAVI_SPEEDINFO,           /* Navigation speed information service          */
  GPS_EVT_TIMESETTING,              /* GPS time setting instruction          */
  GPS_EVT_TIMEOUT_NMEADATAGUARD,    /* NMEA data-providing guard monitoring timeout*/
  GPS_EVT_BACKUPDATA_LOAD,          /* Backup data read request       */
  GPS_EVT_STOPREQ,                  /* Thread stop request                 */
  GPS_EVT_WEEKCOR_CNT_NOTIFICATIO,  /* GPS Week Adjustment Counter Notification            */
  GPS_EVT_TIMEOUT_RECOVERY,         /* GPS error monitoring reset timer      */
  GPS_EVT_TIMEOUT_RECEIVERERR,      /* GPS receiver anomaly detection timeout  */
  GPS_EVT_NUM
} TG_GPS_MATRIX_EVT;

typedef enum GpsOutputFormat {
  GPS_FORMAT_MIN = -1,        /* Minimum Receive Format(Initialization)  */
  GPS_FORMAT_BINARY,          /* Standard binary            */
  GPS_FORMAT_FULLBIN,         /* Full binary            */
  GPS_FORMAT_GGA,             /* GGA                */
  GPS_FORMAT_DGGA,            /* DGGA                */
  GPS_FORMAT_VTG,             /* VTG                */
  GPS_FORMAT_RMC,             /* RMC                */
  GPS_FORMAT_DRMC,            /* DRMC                */
  GPS_FORMAT_GLL,             /* GLL                */
  GPS_FORMAT_DGLL,            /* DGLL                */
  GPS_FORMAT_GSA,             /* GSA                */
  GPS_FORMAT_GSV1,            /* GSV(1)              */
  GPS_FORMAT_GSV2,            /* GSV(2)              */
  GPS_FORMAT_GSV3,            /* GSV(3)              */
  GPS_FORMAT_GSV4,            /* GSV(4)              */
  GPS_FORMAT_GSV5,            /* GSV(5)              */
  GPS_FORMAT_GST,             /* GST                */
  GPS_FORMAT__CWORD44__GP3,       /* _CWORD44_,GP,3            */
  GPS_FORMAT__CWORD44__GP4,       /* _CWORD44_,GP,4            */
  GPS_FORMAT_P_CWORD82_F_GP0,       /* P_CWORD82_F,GP,0            */
  GPS_FORMAT_P_CWORD82_J_GP1,       /* P_CWORD82_J,GP,1            */
  GPS_FORMAT_P_CWORD82_I_GP,        /* P_CWORD82_I,GP              */
  GPS_FORMAT_P_CWORD82_E_GP0,       /* P_CWORD82_E,GP,0            */
  GPS_FORMAT_P_CWORD82_J_GP0,       /* P_CWORD82_J,GP,0            */
  GPS_FORMAT_P_CWORD82_E_GP2,       /* P_CWORD82_E,GP,2            */
  GPS_FORMAT_P_CWORD82_G_GP0,       /* P_CWORD82_G,GP,0            */
  GPS_FORMAT_P_CWORD82_J_GP7,       /* P_CWORD82_J,GP,7            */
  GPS_FORMAT_P_CWORD82_J_GP8,       /* P_CWORD82_J,GP,8            */
  GPS_FORMAT_MON_VER,         /* MON-VER              */
  GPS_FORMAT_AID_INI,         /* AID-INI              */
  GPS_FORMAT_ACK_ACKNACK,     /* ACK-ACKNACK            */
  GPS_FORMAT_NAV_TIMEUTC,     /* NAV-TIMEUTC            */
  GPS_FORMAT_NAV_CLOCK,       /* NAV-CLOCK                        */
  GPS_FORMAT_RXM_RTC5,        /* RXM-RTC5                         */
  GPS_FORMAT_NAV_SVINFO,      /* NAV-SVINFO                       */
  GPS_FORMAT_CFG_NAVX5,       /* CFG-NAVX5            */
  GPS_FORMAT_NMEA,            /* NMEA (Sentence unspecified)      */
  GPS_FORMAT_UBX,             /* UBX Protocol (binary)      */
  GPS_FORMAT_MAX              /* Maximum Receive Format        */
} TG_GPS_OUTPUT_FORMAT;

// Return value
#define RETRY_OFF       0     /* No retry            */
#define RETRY_ON        1     /* Retry exists            */
#define RETRY_OUT       2     /* Retry out          */
#define NG_RETRYOUT     4     /* Transmission failure retry out      */

#define GPSRET_NOPCMD   (0)   /* Non notification target command  #GPF_60_024 */
#define GPSRET_SNDCMD   (1)   /* Notification target command    #GPF_60_024 */
#define GPSRET_CMDERR   (-1)  /* No applicable command    #GPF_60_024 */

// Number of Retries
#define SRSET_MAX       4     /* Maximum serial reset retry value  */
#define HRSET_MAX       3     /* Maximum value of hard reset retry    */
#define SNDNG_MAX       4     /* Maximum retry value of transmission failure      */

/* The actual number of retries is SNDNG_MAX-1. */
#define GPS_RECV_ERR_MAX 5    /* Maximum number of reception errors  #GPF_60_024  */

// Others
#define SAV_MAX                   11
#define GPS_ALTITUDE_INVALID_VAL  (-1000000)  /* Value when fix altitude is invalid */
#define GPS_HEADING_INVALID_VAL   36100       /* Value when measurement orientation is invalid */

#define GPS_RECVOK                0           /* Normal reception            #13 */
#define GPS_RECVNG                1           /* Reception error            #13 */
#define GPS_OVERRUN               2           /* Overrun detection        #13 */
#define GPS_PARITY                3           /* Parity detection          #13 */
#define GPS_FRAMING               4           /* Framing detection        #13 */

// For the communication management thread
#define  GPS_NON_RECV             0           /* Not received              */
#define  GPS_RECV_ACK             1           /* ACK received            */
#define  GPS_RECV_DATA            2           /* Receive response command          */

#define GPS_SEND_ERR_MAX          5           /* Maximum number of transmission errors        */
#define GPS_CNCT_ERR_MAX          5           /* Maximum number of connection errors        */

#define GPS_START_EVT             "GPS_EVT"   /* Interthread synchronization events      */
#define GPS_EVT_VAL               99          /* Event settings          */
#define GPS_MSGDAT_BUF_SZ         500         /* Receive message buffer size    */

// Definition for receive command analysis table  #GPF_60_024
#define SENTENCE_STR_MAX          12      /* Maximum string for judging sentence  */

#define SENSOR_MSG_VSINFO_DSIZE  1904  //!< \~english message body max size

/*---------------------------------------------------------------------------*/
// Structure

/********************************************************************************
 * TAG      :TG_GPS_MNG
 * ABSTRACT :GPS process management information
 * NOTE     :
 ********************************************************************************/
typedef struct GpsMng {
  u_int32               sts;            /* Matrix state          */
  u_int32               event;          /* Matrix event code      */
  u_int32               rcvsts;         /* Response reception status            */
  u_int32               sndcnt;         /* Number of transmission attempts          */
  u_int32               hrsetcnt;       /* Number of tries before hard reset  */
  u_int32               sndngcnt;       /* Number of failed-to-send attempts        */
  TG_GPS_OUTPUT_FORMAT  rcv_cmd;        /* Types of received GPS commands      */
  TG_GPS_OUTPUT_FORMAT  resp_cmd;       /* Types of GPS commands during response monitoring  */
  PNO                   resp_pno;       /* Destination PNO            */
  RID                   resp_rid;       /* RID to be notified when responding        */
  u_int8                resp_rst_flag;  /* Response command reset flag    */
  BOOL                  rcv_err_flag;   /* GPS receiver error detection flag        */
} TG_GPS_MNG;

/********************************************************************************
 * TAG      :TG_GPS_SAVECMD
 * ABSTRACT :GPS process pending command
 * NOTE     :
 ********************************************************************************/
typedef struct GpsSaveCmd {
  TG_GPS_SND_DATA       sndcmd;       /* Sending commands(_CWORD82_ command)    */
  PNO                   us_pno;       /* Result notification destination process number(Unused)  */
  RID                   uc_rid;       /* Result Notification Resource ID(Unused)    */
  u_int8                uc_rst;       /* Reset flag          */
  TG_GPS_OUTPUT_FORMAT  e_cmd_info;   /* Command information          */
} TG_GPS_SAVECMD;

/********************************************************************************
 * TAG      :TG_GPS_SAVEBUF
 * ABSTRACT :GPS process pending buffer management information
 * NOTE     :
 ********************************************************************************/
typedef struct GpsSaveBuf {
  u_int32         saveno;             /* Current pending index number    */
  u_int32         sendno;             /* Current send index number    */
  u_int32         bufsav;             /* Number of pending buffers used        */
  TG_GPS_SAVECMD  savebuf[SAV_MAX];   /* Pending buffer            */
} TG_GPS_SAVEBUF;

/********************************************************************************
 * TAG      :TG_GPS_MSGRCV
 * ABSTRACT :Receive message
 * NOTE     :
 ********************************************************************************/
typedef struct GpsMsgRcv {
  T_APIMSG_MSGBUF_HEADER  header;     /* Message header          */
  u_int8                  msgdat[SENSOR_MSG_VSINFO_DSIZE + 12];
} TG_GPS_MSGRCV;

/********************************************************************************
 * TAG      :TG_GPS_MSGEVTCHNG
 * ABSTRACT :GPS message event translation table
 * NOTE     :
 ********************************************************************************/
typedef struct GpsMsgEvtChng {
  u_int32     cid;            /* Matrix state          */
  u_int32     event;          /* Matrix event code      */
} TG_GPS_MSGEVTCHNG;

/********************************************************************************
 * TAG      :TG_GPS_TIMEVTCHNG
 * ABSTRACT :GPS timer ID and event translation table
 * NOTE     :
 ********************************************************************************/
typedef struct GpsTimEvtChng {
  u_int16     tim_id;         /* Timer ID information          */
  u_int16     reserve;        /* Reserved              */
  u_int32     event;          /* Matrix event code      */
} TG_GPS_TIMEVTCHNG;

/********************************************************************************
 * TAG      :Gps_Jmp_Tbl
 * ABSTRACT :GPS jump table
 * NOTE     :
 ********************************************************************************/
typedef struct GpsJmpTbl {
  void        (*func)( void );    /* Jump-to module          */
} TG_GPS_JMP_TBL;

/********************************************************************************
 * TAG      :TG_GPS_CMD_ANA_TBL
 * ABSTRACT :Receive command analysis table structure
 * NOTE     :
 ********************************************************************************/
typedef struct TgGpsCmdAnaTbl {
  u_char                c_sentence[SENTENCE_STR_MAX];   /* Sentence identifier    */
  u_int32               ul_length;                      /* Length of the command      */
  u_int32               ul_rcv_kind;                    /* Receiving type        */
  BOOL                  b_snd_cmd_flg;                  /* Command notification flag  */
  TG_GPS_OUTPUT_FORMAT  e_rcv_format;                   /* Receive Format    */
} TG_GPS_CMD_ANA_TBL;

/********************************************************************************
 * TAG      :TG_GPS_TIME_BCD
 * ABSTRACT :Time information (BCD) structure
 * NOTE     :
 ********************************************************************************/
typedef struct GpsTimeBCD {
  u_int8          uc_year;      /* Year information    */
  u_int8          uc_month;     /* Month information    */
  u_int8          uc_day;       /* Day information    */
  u_int8          uc_hour;      /* Time information    */
  u_int8          uc_min;       /* Minute information    */
  u_int8          uc_sec;       /* Second information    */
} TG_GPS_TIME_BCD;

/*---------------------------------------------------------------------------*/
// Global values

#define MDEV_GPSMSGCHKC_MAX 10
#define MDEV_PSTIMCHKC_MAX  11
extern const TG_GPS_MSGEVTCHNG    kGpsMsgchkC[MDEV_GPSMSGCHKC_MAX];     /* Ignore -> MISRA-C:2004 Rule 8.12 */
extern const TG_GPS_TIMEVTCHNG    kGpsTimchkC[MDEV_PSTIMCHKC_MAX];      /* Ignore -> MISRA-C:2004 Rule 8.12 */
extern const TG_GPS_JMP_TBL       kGpsMatxC[GPS_STS_NUM][GPS_EVT_NUM];

#define MDEV_GPSCMDANATBLNMEA_MAX 20
extern const TG_GPS_CMD_ANA_TBL*  kGpsCmdAnaTbl;
extern const TG_GPS_CMD_ANA_TBL   kGpsCmdAnaTblUblox[MDEV_GPSCMDANATBLNMEA_MAX];

extern TG_GPS_SAVEBUF             g_gps_save_cmdr;
extern TG_GPS_MSGRCV              g_gps_msg_rcvr;
extern TG_GPS_MNG                 g_gps_mngr;

extern u_int16                    g_wsend_err;        /* Number of transmission errors          */
extern u_int16                    g_wcnct_err;        /* Number of connection errors          */
extern TG_GPS_OUTPUT_FORMAT       g_rcv_format;       /* Receive Format          */

/*---------------------------------------------------------------------------*/
// Prototype

EFrameworkunifiedStatus  DevGpsMainThread(HANDLE h_app);
BOOL        DevGpsInit(void);
void        DevGpsRcvMsg(void);
void        DevGpsMsgEventCheck(void);
void        DevGpsTimEventCheck(void);
void        DevGpsGpsVersionCheck(void);

/*---------------------------------------------------------------------------*/
#endif  // INC_GPSCOMMON_MDEV_GPS_MAIN_H_

/*---------------------------------------------------------------------------*/
/*EOF*/