summaryrefslogtreecommitdiffstats
path: root/positioning_hal/hal_api/positioning_hal.h
blob: 8a74b814997520314e5cdfd968e2784c78d176e1 (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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
/*
 * @copyright Copyright (c) 2018-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.
 */

#ifndef HAL_API_POSITIONING_HAL_H_
#define HAL_API_POSITIONING_HAL_H_

/**
 * @file positioning_hal.h
 */

/** @addtogroup positioning
 *  @{
 */
/** @addtogroup positioning_hal
 *  @ingroup positioning
 *  @{
 */

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

#include <native_service/frameworkunified_types.h>
#include <vehicle_service/pos_message_header.h>
#include <vehicle_service/std_types.h>

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

#define POSHAL_THREAD_NAME_SENS                         "POS_Sens"
//!< \~english Thread name for receive sensor
#define POSHAL_THREAD_NAME_GPS_MAIN                     "POS_Gps"
//!< \~english Thread name for GPS NMEA analysis and delivery message
#define POSHAL_THREAD_NAME_GPS_RECV                     "POS_Gps_Recv"
//!< \~english Thread name for receive GPS
#define POSHAL_THREAD_NAME_GPS_ROLOVR                   "POS_Gps_Rolovr"
//!< \~english Thread name for monitoring GPS rollover

#define POSHAL_DID_SNS_COUNTER                          0x8000001A
//!< \~english Data ID of sensor counter
#define POSHAL_DID_SPEED_PULSE                          0x80000012
//!< \~english Data ID of speed pulse
#define POSHAL_DID_SPEED_PULSE_FLAG                     0x80000076
//!< \~english Data ID of speed pulse flag
#define POSHAL_DID_SPEED_PULSE_FST                      0x80000028
//!< \~english Data ID of first time speed pulse
#define POSHAL_DID_SPEED_PULSE_FLAG_FST                 0x8000007D
//!< \~english Data ID of first time speed pulse flag
#define POSHAL_DID_SPEED_KMPH                           0x80000013
//!< \~english Data ID of KMPH speed
#define POSHAL_DID_PULSE_TIME                           0x8000003A
//!< \~english Data ID of pulse time
#define POSHAL_DID_GYRO_X                               0x80000014
//!< \~english Data ID of X axis of gyro
#define POSHAL_DID_GYRO_Y                               0x80000085
//!< \~english Data ID of Y axis of gyro
#define POSHAL_DID_GYRO_Z                               0x80000086
//!< \~english Data ID of Z axis ofgyro
#define POSHAL_DID_GYRO                                 POSHAL_DID_GYRO_X
//!< \~english Data ID of gyro
#define POSHAL_DID_GYRO_X_FST                           0x80000029
//!< \~english Data ID of first time X axis gyro
#define POSHAL_DID_GYRO_Y_FST                           0x80000043
//!< \~english Data ID of first time Y axis gyro
#define POSHAL_DID_GYRO_Z_FST                           0x80000023
//!< \~english Data ID of first time Z axis gyro
#define POSHAL_DID_GYRO_FST                             POSHAL_DID_GYRO_X_FST
//!< \~english Data ID of first time gyro
#define POSHAL_DID_GYRO_EXT                             0x80000027
//!< \~english Data ID of extend gyro
#define POSHAL_DID_GYRO_TEMP                            0x80000090
//!< \~english Data ID of gyro temperature
#define POSHAL_DID_GYRO_TEMP_FST                        0x80000091
//!< \~english Data ID of first time gyro temperature
#define POSHAL_DID_REV                                  0x80000017
//!< \~english Data ID of reverse signal
#define POSHAL_DID_REV_FST                              0x8000007E
//!< \~english Data ID of first time reverse signal
#define POSHAL_DID_GSNS_X                               0x80000015
//!< \~english Data ID of x axis gsensor
#define POSHAL_DID_GSNS_Y                               0x80000016
//!< \~english Data ID of Y axis gsensor
#define POSHAL_DID_GSNS_Z                               0x80000026
//!< \~english Data ID of Z axis gsensor
#define POSHAL_DID_GSNS_X_FST                           0x80000087
//!< \~english Data ID of first time x axis gsensor
#define POSHAL_DID_GSNS_Y_FST                           0x80000088
//!< \~english Data ID of first time Y axis gsensor
#define POSHAL_DID_GSNS_Z_FST                           0x80000089
//!< \~english Data ID of first time Z axis gsensor
#define POSHAL_DID_GPS_NMEA                             0x8000009AU
//!< \~english Data ID of GPS NMEA sentence
#define POSHAL_DID_GPS_ANTENNA                          0x80000019
//!< \~english Data ID of GPS antenna status
#define POSHAL_DID_GPS_CUSTOMDATA                       0x80000094U
//!< \~english Data ID of GPS custom data
#define POSHAL_DID_GPS_CUSTOMDATA_NAVI                  0x800000A0
//!< \~english Data ID of GPS custom data for navi
#define POSHAL_DID_GPS_TIME                             0x80000098
//!< \~english Data ID of GPS time
#define POSHAL_DID_GPS_TIME_RAW                         0x800000B1U
//!< \~english Data ID of GPS raw time
#define POSHAL_DID_GPS_VERSION                          0x8000001E
//!< \~english Data ID of GPS version
#define POSHAL_DID_GPS__CWORD82___CWORD44_GP4                     0x80000031U
//!< \~english Data ID of _CWORD82_ GPS _CWORD44_GP4 data
#define POSHAL_DID_GPS__CWORD82__FULLBINARY                   0x80000032U
//!< \~english Data ID of _CWORD82_ GPS full binary data
#define POSHAL_DID_GPS_WKNROLLOVER                      0x800000B2U
//!< \~english Data ID of GPS week counter
#define POSHAL_DID_GPS_CLOCK_DRIFT                      0x800000B3U
//!< \~english Data ID of GPS time drift data
#define POSHAL_DID_GPS_CLOCK_FREQ                       0x800000B4U
//!< \~english Data ID of GPS time frequency data
#define POSHAL_DID_GPS_INTERRUPT_FLAG                   0x80000077
//!< \~english Data ID of GPS interrupt flag

#define CONFIG_SENSOR_EXT_VALID 1  //!< \~english for first sensor

#define CID_LINESENS_VEHICLE_DATA 0x0300  //!< \~english vehicle notify ID

/**
 * \~english @brief LineSensor Vehicle Signal Notification
 * \~english @brief This command is sent when LineSensor vehicle signals are notified when sensor data is received.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataG\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure   @ref LsdrvMsgLsdataDatG\n
 * \~english @brief Message body (vehicle signal notification message information) structure @ref LsdrvLsdataG\n
 */
#define CID_LINESENS_VEHICLE_DATA_G   0x0303

/**
 * \~english @brief Gyro Failure Status Notification
 * \~english @brief This command is sent when giro failure status is notified.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataGyroTrouble\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure   @ref LsdrvMsgLsdataDatGyroTrouble\n
 */
#define CID_LINESENS_VEHICLE_DATA_GYRO_TROUBLE  0x0304

/**
 * \~english @brief Get SYS GPS Interrupt Signals
 * \~english @brief This command is sent when SYS GPS interrupt signal is acquired.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataGpsInterruptSignal\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure   @ref LsdrvMsgLsdataDatGpsInterruptSignal\n
 */
#define CID_LINESENS_VEHICLE_DATA_SYS_GPS_INTERRUPT_SIGNAL  0x0305


/**
 * \~english @brief Gyro Connection Status Notification
 * \~english @brief This command is sent when giro connection status is notified.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataGyroConnectStatus\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure  @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure    @ref LsdrvMsgLsdataDatGyroConnectStatus\n
 */
#define CID_LINESENS_VEHICLE_DATA_GYRO_CONNECT_STATUS       0x0306


/**
 * \~english @brief GPS Antenna Connection Status Notification
 * \~english @brief This command is sent when the GPS antenna connection status is notified.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataGpsAntennaStatus\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure   @ref LsdrvMsgLsdataDatGpsAntennaStatus\n
 */
#define CID_LINESENS_VEHICLE_DATA_GPS_ANTENNA_STATUS        0x0307


/**
 * \~english @brief LineSensor Vehicle Signal Notification(Initial Sensor)
 * \~english @brief This command is sent when LineSensor vehicle signals (initial sensor) are notified.\n
 * \~english @brief Message related structure @ref LsdrvMsgLsdataFst\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure    @ref LsdrvMsgLsdataDatFst\n
 * \~english @brief Gyro X-axis  @ref LsdrvLsdataFstGyroX\n
 * \~english @brief Gyro Y-axis  @ref LsdrvLsdataFstGyroY\n
 * \~english @brief Gyro Z-axis  @ref LsdrvLsdataFstGyroZ\n
 * \~english @brief Velocity information      @ref LsdrvLsdataFstSpeed\n
 * \~english @brief Vehicle speed pulse    @ref LsdrvLsdataFstSpeedPulseFlag\n
 * \~english @brief REV flag     @ref LsdrvLsdataFstRev\n
 * \~english @brief Gyro Temperature  @ref LsdrvLsdataFstGyroTemp\n
 * \~english @brief G-sensor X-axis   @ref LsdrvLsdataFstGsensorX\n
 * \~english @brief G-sensor Y-axis   @ref LsdrvLsdataFstGsensorY\n
 * \~english @brief G-sensor Z-axis   @ref LsdrvLsdataFstGsensorZ\n
 */
#define CID_LINESENS_VEHICLE_DATA_FST                       0x0302

/**
 * \~english @brief GPS data notification
 * \~english @brief This command is used to notify the data input from the GPS receiver device.\n
 * \~english @brief Message related structure @ref SensorMsgGpsdata\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message header structure @ref T_APIMSG_HEADER\n
 * \~english @brief Message body structure   @ref SensorMsgGpsdataDat\n
 */
#define CID_GPS_DATA                                        0x0301

/**
 * \~english @brief Notification of effective ephemeris number at shutdown
 * \~english @brief This command is sent to notify the effective ephemeris number at shutdown.\n
 * \~english @brief Message related structure @ref SensorMsgGpsdata\n
 * \~english @brief Message buffer header structure @ref T_APIMSG_MSGBUF_HEADER\n
 * \~english @brief Message body structure  @ref SensorMsgGpsdata\n
 */
#define CID_EPH_NUM_NOTIFICATION                            0x0310


#define LSDRV_FSTSNS_SENSOR_FIRST_SAVE_NUM                  50
//!< \~english number of save first sensor

#define LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM                  30
//!< \~english number of send first sensor

#define LSDRV_FSTSNS_DETAILED_DATA_GYRO_NUM                 10
//!< \~english number of gyro including detail data

#define LSDRV_FSTSNS_DETAILED_DATA_GSENSOR_NUM              10
//!< \~english number of Gsns includeing detail data

#define LSDRV_FSTSNS_DSIZE_GYRO_X  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GYRO_NUM * 2)
//!< \~english data size of X axis of gyro
#define LSDRV_FSTSNS_DSIZE_GYRO_Y  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GYRO_NUM * 2)
//!< \~english data size of Y axis of gyro
#define LSDRV_FSTSNS_DSIZE_GYRO_Z  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GYRO_NUM * 2)
//!< \~english data size of Z axis of gyro
#define LSDRV_FSTSNS_DSIZE_SPEED          (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * 2)
//!< \~english data size of speed
#define LSDRV_FSTSNS_DSIZE_SPEED_FLG      LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM
//!< \~english data size of speed pulse
#define LSDRV_FSTSNS_DSIZE_REV            LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM
//!< \~english data size of reverse
#define LSDRV_FSTSNS_DSIZE_GYRO_TEMP      (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * 2)
//!< \~english data size of gyro temperature
#define LSDRV_FSTSNS_DSIZE_GSENSOR_X  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GSENSOR_NUM * 2)
//!< \~english data size of X axis of Gsns

#define LSDRV_FSTSNS_DSIZE_GSENSOR_Y  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GSENSOR_NUM * 2)
  //!< \~english data size of Y axis of Gsns
#define LSDRV_FSTSNS_DSIZE_GSENSOR_Z  (LSDRV_FSTSNS_SENSOR_FIRST_SEND_NUM * LSDRV_FSTSNS_DETAILED_DATA_GSENSOR_NUM * 2)
//!< \~english data size of Z axis of Gsns

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


// Thread control Command ID
#define CID_THREAD_CREATE_COMP   (0x0001) //!< \~english Thread Start Complete Notify Command ID
#define CID_THREAD_STOP_REQ      (0x0002) //!< \~english Thread Stop Request Command ID
#define CID_THREAD_STOP_COMP     (0x0003) //!< \~english Thread Stop Complete Notify Command ID

// A vehicle signal of data size
#define LSDRV_SNDMSG_DTSIZE_1     1       //!< \~english SndMSG data size 1Byte
#define LSDRV_SNDMSG_DTSIZE_2     2       //!< \~english SndMSG data size 2Byte
#define LSDRV_SNDMSG_DTSIZE_20    20      //!< \~english SndMSG data size 20Byte
#define LSDRV_SNDMSG_DTSIZE_132   132     //!< \~english SndMSG data size 132Byte

// NMEA receive flag
#define POS_SNS_GPS_NMEA_GGA      (0x00000001U)  //!< \~english GGA sentence
#define POS_SNS_GPS_NMEA_GLL      (0x00000002U)  //!< \~english GLL sentence
#define POS_SNS_GPS_NMEA_GSA1     (0x00000004U)  //!< \~english GSA1 sentence
#define POS_SNS_GPS_NMEA_GSA2     (0x00000008U)  //!< \~english GSA2 sentence
#define POS_SNS_GPS_NMEA_GSA3     (0x00000010U)  //!< \~english GSA3 sentence
#define POS_SNS_GPS_NMEA_GSA4     (0x00000020U)  //!< \~english GSA4 sentence
#define POS_SNS_GPS_NMEA_GST      (0x00000040U)  //!< \~english GST sentence
#define POS_SNS_GPS_NMEA_RMC      (0x00000080U)  //!< \~english RMC sentence
#define POS_SNS_GPS_NMEA_VTG      (0x00000100U)  //!< \~english VTG sentence
#define POS_SNS_GPS_NMEA_GSV1     (0x00000200U)  //!< \~english GSV1 sentence
#define POS_SNS_GPS_NMEA_GSV2     (0x00000400U)  //!< \~english GSV2 sentence
#define POS_SNS_GPS_NMEA_GSV3     (0x00000800U)  //!< \~english GSV3 sentence
#define POS_SNS_GPS_NMEA_GSV4     (0x00001000U)  //!< \~english GSV4 sentence
#define POS_SNS_GPS_NMEA_GSV5     (0x00002000U)  //!< \~english GSV5 sentence
#define POS_SNS_GPS_NMEA_GSV6     (0x00004000U)  //!< \~english GSV6 sentence
#define POS_SNS_GPS_NMEA_GSV7     (0x00008000U)  //!< \~english GSV7 sentence
#define POS_SNS_GPS_NMEA_GSV8     (0x00010000U)  //!< \~english GSV8 sentence
#define POS_SNS_GPS_NMEA_GSV9     (0x00020000U)  //!< \~english GSV9 sentence
#define POS_SNS_GPS_NMEA_GSV10    (0x00040000U)  //!< \~english GSV10 sentence
#define POS_SNS_GPS_NMEA_GSV11    (0x00080000U)  //!< \~english GSV11 sentence
#define POS_SNS_GPS_NMEA_GSV12    (0x00100000U)  //!< \~english GSV12 sentence
#define POS_SNS_GPS_NMEA_GSV13    (0x00200000U)  //!< \~english GSV13 sentence
#define POS_SNS_GPS_NMEA_RESERVE1 (0x00400000U)  //!< \~english Reserved
#define POS_SNS_GPS_NMEA_RESERVE2 (0x00800000U)  //!< \~english Reserved


/**
 * @enum POS_SNS_GPS_NMEA_SNO
 * \~english type of NMEA
 */
typedef enum {
  POS_SNS_GPS_NMEA_SNO_GGA = 0,   //!< \~english GGA sentence
  POS_SNS_GPS_NMEA_SNO_GLL,       //!< \~english GLL sentence
  POS_SNS_GPS_NMEA_SNO_GSA1,      //!< \~english GSA1 sentence
  POS_SNS_GPS_NMEA_SNO_GSA2,      //!< \~english GSA2 sentence
  POS_SNS_GPS_NMEA_SNO_GSA3,      //!< \~english GSA3 sentence
  POS_SNS_GPS_NMEA_SNO_GSA4,      //!< \~english GSA4 sentence
  POS_SNS_GPS_NMEA_SNO_GST,       //!< \~english GST sentence
  POS_SNS_GPS_NMEA_SNO_RMC,       //!< \~english RMC sentence
  POS_SNS_GPS_NMEA_SNO_VTG,       //!< \~english VTG sentence
  POS_SNS_GPS_NMEA_SNO_GSV1,      //!< \~english GSV1 sentence
  POS_SNS_GPS_NMEA_SNO_GSV2,      //!< \~english GSV2 sentence
  POS_SNS_GPS_NMEA_SNO_GSV3,      //!< \~english GSV3 sentence
  POS_SNS_GPS_NMEA_SNO_GSV4,      //!< \~english GSV4 sentence
  POS_SNS_GPS_NMEA_SNO_GSV5,      //!< \~english GSV5 sentence
  POS_SNS_GPS_NMEA_SNO_GSV6,      //!< \~english GSV6 sentence
  POS_SNS_GPS_NMEA_SNO_GSV7,      //!< \~english GSV7 sentence
  POS_SNS_GPS_NMEA_SNO_GSV8,      //!< \~english GSV8 sentence
  POS_SNS_GPS_NMEA_SNO_GSV9,      //!< \~english GSV9 sentence
  POS_SNS_GPS_NMEA_SNO_GSV10,     //!< \~english GSV10 sentence
  POS_SNS_GPS_NMEA_SNO_GSV11,     //!< \~english GSV11 sentence
  POS_SNS_GPS_NMEA_SNO_GSV12,     //!< \~english GSV12 sentence
  POS_SNS_GPS_NMEA_SNO_GSV13,     //!< \~english GSV13 sentence
  POS_SNS_GPS_NMEA_SNO_RESERVE1,  //!< \~english Reserved
  POS_SNS_GPS_NMEA_SNO_RESERVE2,  //!< \~english Reserved

  POS_SNS_GPS_NMEA_SNO_MAX        //!< \~english MAX sentence(invalid)
} POS_SNS_GPS_NMEA_SNO;

/**
 * @enum LsDrvKind
 * \~english type of Sensor
 */
typedef enum {
  LSDRV_GYRO_X,             //!< \~english Gyro X-Axis
  LSDRV_GYRO_Y,             //!< \~english Gyro Y-Axis
  LSDRV_GYRO_Z,             //!< \~english Gyro Z-Axis
  LSDRV_SPEED_PULSE,        //!< \~english Speed pulse
  LSDRV_SPEED_PULSE_FLAG,   //!< \~english Speed pulse Flag
  LSDRV_SPEED_KMPH,         //!< \~english Speed km/h
  LSDRV_GYRO_EXT,           //!< \~english extend Gyro
  LSDRV_REV,                //!< \~english Reverse
  LSDRV_GYRO_TEMP,          //!< \~english Gyro temperature
  LSDRV_GSENSOR_X,          //!< \~english G-sensor X-Axis
  LSDRV_GSENSOR_Y,          //!< \~english G-sensor Y-Axis
  LSDRV_GSENSOR_Z,          //!< \~english G-sensor Z-Axis
  LSDRV_PULSE_TIME,         //!< \~english Pulse time
  LSDRV_SNS_COUNTER,        //!< \~english Sensor counter
  LSDRV_GPS_INTERRUPT_FLAG, //!< \~english GPS Interrupt Flag
  LSDRV_KINDS_MAX           //!< \~english MAX
} LsDrvKind;


/**
 * @enum EnumTidPos
 * \~english  Thread id notified to positioning when starting or terminating each thread is completed.
 */
typedef enum EnumTidPos {
  ETID_POS_MAIN = 0,
  //!< \~english Thread for vehicle sensor(unused in hal)
  ETID_POS_SENS,
  //!< \~english Thread for receive sensor
  ETID_POS_GPS,
  //!< \~english Thread for GPS NMEA analysis and delivery message
  ETID_POS_GPS_RECV,
  //!< \~english Thread for receive GPS
  ETID_POS_GPS_ROLLOVER,
  //!< \~english Thread for monitoring GPS rollover
  ETID_POS_MAX
  //!< \~english Max thread id
} EnumTID_POS;

/**
 * @struct LsdrvLsdata
 * \~english  Struct of LineSensor message
 */
typedef struct LsdrvLsdata {
  u_int32           ul_did;                                   //!< \~english data ID
  u_int8            uc_size;                                  //!< \~english data size
  u_int8            uc_rcvflag;                               //!< \~english receive flag
  u_int8            uc_sns_cnt;                               //!< \~english sensor count
  u_int8            u_reserve;                                //!< \~english reserve
  u_int8            uc_data[132];                             //!< \~english data contents
} LSDRV_LSDATA;

/**
 * @struct LsdrvLsdataG
 * \~english  Struct of LineSensorG message
 */
typedef struct LsdrvLsdataG {
  u_int32     ul_did;           //!< \~english data ID
  u_int8      uc_size;          //!< \~english data size
  u_int8      uc_rcv_flag;      //!< \~english receive flag
  u_int8      uc_sns_cnt;       //!< \~english sensor count
  u_int8      reserve;          //!< \~english reserve
  u_int8      uc_data[132];     //!< \~english data content
} LSDRV_LSDATA_G;

/**
 * @struct LsdrvLsdataFstGyroX
 * \~english  Struct of X axis of of gyro data(first sensor message)
 */
typedef struct LsdrvLsdataFstGyroX {
  u_int32              ul_did;                               //!< \~english data ID
  u_int16              uc_size;                              //!< \~english data size
  u_int8               uc_partition_max;                     //!< \~english total of partition
  u_int8               uc_partition_num;                     //!< \~english data number
  u_int8               uc_data[LSDRV_FSTSNS_DSIZE_GYRO_X];   //!< \~english data contents
} LSDRV_LSDATA_FST_GYRO_X;

/**
 * @struct LsdrvLsdataFstGyroY
 * \~english  Struct of Y axis of of gyro data(first sensor message)
 */
typedef struct LsdrvLsdataFstGyroY {
  u_int32              ul_did;                               //!< \~english data ID
  u_int16              uc_size;                              //!< \~english data size
  u_int8               uc_partition_max;                     //!< \~english total of partition
  u_int8               uc_partition_num;                     //!< \~english data number
  u_int8               uc_data[LSDRV_FSTSNS_DSIZE_GYRO_Y];   //!< \~english data contents
} LSDRV_LSDATA_FST_GYRO_Y;

/**
 * @struct LsdrvLsdataFstGyroZ
 * \~english  Struct of Z axis of of gyro data(first sensor message)
 */
typedef struct LsdrvLsdataFstGyroZ {
  u_int32              ul_did;                               //!< \~english data ID
  u_int16              uc_size;                              //!< \~english data size
  u_int8               uc_partition_max;                     //!< \~english total of partition
  u_int8               uc_partition_num;                     //!< \~english data number
  u_int8               uc_data[LSDRV_FSTSNS_DSIZE_GYRO_Z];   //!< \~english data contents
} LSDRV_LSDATA_FST_GYRO_Z;

/**
 * @struct LsdrvLsdataFstSpeed
 * \~english  Struct of speed data(first sensor message)
 */
typedef struct LsdrvLsdataFstSpeed {
  u_int32  ul_did;                               //!< \~english data ID
  u_int16  uc_size;                              //!< \~english data size
  u_int8   uc_partition_max;                      //!< \~english total of partition
  u_int8   uc_partition_num;                      //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_SPEED];     //!< \~english data contents
} LSDRV_LSDATA_FST_SPEED;

/**
 * @struct LsdrvLsdataFstSpeedPulseFlag
 * \~english  Struct of speed pulse data(first sensor message)
 */
typedef struct LsdrvLsdataFstSpeedPulseFlag {
  u_int32  ul_did;                                 //!< \~english data ID
  u_int16  uc_size;                                //!< \~english data size
  u_int8   uc_partition_max;                       //!< \~english total of partition
  u_int8   uc_partition_num;                       //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_SPEED_FLG];  //!< \~english data contents
} LSDRV_LSDATA_FST_SPEED_PULSE_FLAG;

/**
 * @struct LsdrvLsdataFstRev
 * \~english  Struct of reverse data(first sensor message)
 */
typedef struct LsdrvLsdataFstRev {
  u_int32  ul_did;                             //!< \~english data ID
  u_int16  uc_size;                            //!< \~english data size
  u_int8   uc_partition_max;                   //!< \~english total of partition
  u_int8   uc_partition_num;                   //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_REV];    //!< \~english data contents
} LSDRV_LSDATA_FST_REV;

/**
 * @struct LsdrvLsdataFstGyroTemp
 * \~english  Struct of gyro temperature data(first sensor message)
 */
typedef struct LsdrvLsdataFstGyroTemp {
  u_int32  ul_did;                                 //!< \~english data ID
  u_int16  uc_size;                                //!< \~english data size
  u_int8   uc_partition_max;                       //!< \~english total of partition
  u_int8   uc_partition_num;                       //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_GYRO_TEMP];  //!< \~english data contents
} LSDRV_LSDATA_FST_GYRO_TEMP;

/**
 * @struct LsdrvLsdataFstGsensorX
 * \~english  Struct of X axis of Gsns data(first sensor message)
 */
typedef struct LsdrvLsdataFstGsensorX {
  u_int32  ul_did;                                 //!< \~english data ID
  u_int16  uc_size;                                //!< \~english data size
  u_int8   uc_partition_max;                       //!< \~english total of partition
  u_int8   uc_partition_num;                       //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_GSENSOR_X];  //!< \~english data contents
} LSDRV_LSDATA_FST_GSENSOR_X;

/**
 * @struct LsdrvLsdataFstGsensorY
 * \~english  Struct of Y axis of Gsns data(first sensor message)
 */
typedef struct LsdrvLsdataFstGsensorY {
  u_int32  ul_did;                                 //!< \~english data ID
  u_int16  uc_size;                                //!< \~english data size
  u_int8   uc_partition_max;                       //!< \~english total of partition
  u_int8   uc_partition_num;                       //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_GSENSOR_Y];  //!< \~english data contents
} LSDRV_LSDATA_FST_GSENSOR_Y;

/**
 * @struct LsdrvLsdataFstGsensorZ
 * \~english  Struct of Z axis of Gsns data(first sensor message)
 */
typedef struct LsdrvLsdataFstGsensorZ {
  u_int32  ul_did;                                 //!< \~english data ID
  u_int16  uc_size;                                //!< \~english data size
  u_int8   uc_partition_max;                       //!< \~english total of partition
  u_int8   uc_partition_num;                       //!< \~english data number
  u_int8   uc_data[LSDRV_FSTSNS_DSIZE_GSENSOR_Z];  //!< \~english data contents
} LSDRV_LSDATA_FST_GSENSOR_Z;

/**
 * @struct LsdrvMsgLsdataDatFst
 * \~english  Struct of LineSensor data (first sensor message)
 */
typedef struct LsdrvMsgLsdataDatFst {
  LSDRV_LSDATA_FST_GYRO_X            st_gyro_x;         //!< \~english data of X axis of gyro
  LSDRV_LSDATA_FST_GYRO_Y            st_gyro_y;         //!< \~english data of Y axis of gyro
  LSDRV_LSDATA_FST_GYRO_Z            st_gyro_z;         //!< \~english data of Z axis of gyro
  LSDRV_LSDATA_FST_SPEED             st_speed;          //!< \~english data of speed
  LSDRV_LSDATA_FST_SPEED_PULSE_FLAG  st_spd_pulse_flg;  //!< \~english data of speed pulse
  LSDRV_LSDATA_FST_REV               st_rev;            //!< \~english data of reverse
  LSDRV_LSDATA_FST_GYRO_TEMP         st_gyro_temp;      //!< \~english data of gyro temperature
  LSDRV_LSDATA_FST_GSENSOR_X         st_gsns_x;         //!< \~english data of X axis of Gsns
  LSDRV_LSDATA_FST_GSENSOR_Y         st_gsns_y;         //!< \~english data of Y axis of Gsns
  LSDRV_LSDATA_FST_GSENSOR_Z         st_gsns_z;         //!< \~english data of Z axis of Gsns
} LSDRV_MSG_LSDATA_DAT_FST;

/**
 * @struct LsdrvMsgLsdataDat
 * \~english  Struct of LineSensor package data
 */
typedef struct LsdrvMsgLsdataDat {
  u_int8        uc_data_num;    //!< \~english data number
  u_int8        reserve[3];     //!< \~english reserve
  LSDRV_LSDATA  st_data[12];    //!< \~english data
} LSDRV_MSG_LSDATA_DAT;

/**
 * @struct LsdrvMsgLsdata
 * \~english  Struct of LineSensor message data
 */
typedef struct LsdrvMsgLsdata {
  T_APIMSG_MSGBUF_HEADER  st_head;    //!< \~english message header
  LSDRV_MSG_LSDATA_DAT    st_para;    //!< \~english data of gyro
} LSDRV_MSG_LSDATA;

/**
 * @struct LsdrvMsgLsdataDatG
 * \~english  Struct of LineSensorG package data
 */
typedef struct LsdrvMsgLsdataDatG {
  u_int8          uc_data_num;      //!< \~english data number
  u_int8          reserve[3];       //!< \~english reserve
  LSDRV_LSDATA_G  st_data[15];      //!< \~english data
} LSDRV_MSG_LSDATA_DAT_G;

/**
 * @struct LsdrvMsgLsdataG
 * \~english  Struct of LineSensorG message data
 */
typedef struct LsdrvMsgLsdataG {
  T_APIMSG_MSGBUF_HEADER  st_head;    //!< \~english message header
  LSDRV_MSG_LSDATA_DAT_G  st_para;    //!< \~english data of message
} LSDRV_MSG_LSDATA_G;

/**
 * @struct LsdrvMsgLsdataDatGyroTrouble
 * \~english  Struct of Gyro trouble
 */
typedef struct LsdrvMsgLsdataDatGyroTrouble {
  u_int32     ul_did;       //!< \~english data ID
  u_int8      uc_size;      //!< \~english data size
  u_int8      reserve;      //!< \~english reserve
  u_int8      uc_data;      //!< \~english data content
  u_int8      reserve2;     //!< \~english reserve
} LSDRV_MSG_LSDATA_DAT_GYRO_TROUBLE;

/**
 * @struct LsdrvMsgLsdataGyroTrouble
 * \~english  Struct of message about Gyro trouble
 */
typedef struct LsdrvMsgLsdataGyroTrouble {
    T_APIMSG_MSGBUF_HEADER            st_head;   //!< \~english message header
    LSDRV_MSG_LSDATA_DAT_GYRO_TROUBLE st_para;   //!< \~english data of message
} LSDRV_MSG_LSDATA_GYRO_TROUBLE;

/**
 * @struct LsdrvMsgLsdataDatGpsInterruptSignal
 * \~english  Struct of Gps interrupt signal data
 */
typedef struct LsdrvMsgLsdataDatGpsInterruptSignal {
  u_int32     ul_did;         //!< \~english data ID
  u_int8      uc_size;        //!< \~english data size
  u_int8      reserve;        //!< \~english reserve
  u_int8      uc_data;        //!< \~english data content
  u_int8      reserve2;       //!< \~english reserve
} LSDRV_MSG_LSDATA_DAT_GPS_INTERRUPT_SIGNAL;

/**
 * @struct LsdrvMsgLsdataGpsInterruptSignal
 * \~english  Struct of message about Gps interrupt signal
 */
typedef struct LsdrvMsgLsdataGpsInterruptSignal {
  T_APIMSG_MSGBUF_HEADER                    st_head;  //!< \~english message header
  LSDRV_MSG_LSDATA_DAT_GPS_INTERRUPT_SIGNAL st_para;  //!< \~english data of message
} LSDRV_MSG_LSDATA_GPS_INTERRUPT_SIGNAL;

/**
 * @struct LsdrvMsgLsdataDatGyroConnectStatus
 * \~english  Struct of Gyro connect status
 */
typedef struct LsdrvMsgLsdataDatGyroConnectStatus {
    u_int32     ul_did;       //!< \~english data ID
    u_int8      uc_size;      //!< \~english data size
    u_int8      reserve;      //!< \~english reserve
    u_int8      uc_data;      //!< \~english data content
    u_int8      reserve2;     //!< \~english reserve
} LSDRV_MSG_LSDATA_DAT_GYRO_CONNECT_STATUS;

/**
 * @struct LsdrvMsgLsdataGyroConnectStatus
 * \~english  Struct of message about Gyro connect status
 */
typedef struct LsdrvMsgLsdataGyroConnectStatus {
    T_APIMSG_MSGBUF_HEADER                    st_head;  //!< \~english message header
    LSDRV_MSG_LSDATA_DAT_GYRO_CONNECT_STATUS  st_para;  //!< \~english data of message
} LSDRV_MSG_LSDATA_GYRO_CONNECT_STATUS;

/**
 * @struct LsdrvMsgLsdataDatGpsAntennaStatus
 * \~english  Struct of Gps Antenna Status
 */
typedef struct LsdrvMsgLsdataDatGpsAntennaStatus {
  u_int32     ul_did;        //!< \~english data ID
  u_int8      uc_size;       //!< \~english data size
  u_int8      uc_rcv_flag;   //!< \~english receive flag
  u_int8      uc_sns_cnt;    //!< \~english sensor count
  u_int8      uc_data;       //!< \~english data content
} LSDRV_MSG_LSDATA_DAT_GPS_ANTENNA_STATUS;

/**
 * @struct LsdrvMsgLsdataGpsAntennaStatus
 * \~english  Struct of message about Gps Antenna Status
 */
typedef struct LsdrvMsgLsdataGpsAntennaStatus {
  T_APIMSG_MSGBUF_HEADER                  st_head;  //!< \~english message header
  LSDRV_MSG_LSDATA_DAT_GPS_ANTENNA_STATUS st_para;  //!< \~english data of message
} LSDRV_MSG_LSDATA_GPS_ANTENNA_STATUS;

/**
 * @struct LsdrvLsdataFst
 * \~english  Struct of sensor data (first sensor message)
 */
typedef struct LsdrvLsdataFst {
  u_int32     ul_did;             //!< \~english data ID
  u_int16     uc_size;            //!< \~english data size
  u_int8      uc_partition_max;   //!< \~english total of partition
  u_int8      uc_partition_num;   //!< \~english data number
  u_int8      uc_data[60];        //!< \~english data contents
} LSDRV_LSDATA_FST;

/**
 * @struct LsdrvMsgLsdataFst
 * \~english  Struct of message about sensor data (first sensor message)
 */
typedef struct LsdrvMsgLsdataFst {
  T_APIMSG_MSGBUF_HEADER    st_head;  //!< \~english message header
  LSDRV_MSG_LSDATA_DAT_FST  st_para;  //!< \~english data of message
} LSDRV_MSG_LSDATA_FST;

/**
 * @struct SensorMsgGpsdataDat
 * \~english  Struct of Gps data
 * \~english  @par Detail
 *       This data structure can have 7 types of data that identified by data ID.\n
 *       The contents are as follows.\n
 *       | data ID                           | content                                   | data format                   |
 *       |:----------------------------------|:------------------------------------------|:------------------------------|
 *       | @ref POSHAL_DID_GPS_NMEA          | NMEA data                                 | @ref MdevGpsNmea "MDEV_GPS_NMEA" |
 *       | @ref POSHAL_DID_GPS_CUSTOMDATA    | GPS custom data                           | @ref MdevGpsCustomDataMgs "MDEV_GPS_CUSTOMDATA" |
 *       | @ref POSHAL_DID_GPS_CLOCK_DRIFT   | clock drift                               | @ref int32_t                  |
 *       | @ref POSHAL_DID_GPS_CLOCK_FREQ    | clock frequency                           | @ref int32_t                  |
 *       | @ref POSHAL_DID_GPS_WKNROLLOVER   | GPS week number                           | @ref SensorWknRollOverHal     |
 *       | @ref POSHAL_DID_GPS_CONNECT_ERROR | GPS signal error(TRUE:Error, FALSE:Normal)| @ref BOOL                     |
 *       | @ref POSHAL_DID_GPS_TIME (_RAW)   | GPS time information                      | @ref SENSOR_GPSTIME           |
 */
typedef struct SensorMsgGpsdataDat {
  u_int32     ul_did;           //!< \~english data ID
  u_int16     us_size;          //!< \~english data size
  u_int8      uc_rcv_flag;      //!< \~english receive flag
  u_int8      uc_sns_cnt;       //!< \~english sensor count
  u_int8      uc_gps_cnt_flag;  //!< \~english GPS count
  u_int8      reserve[3];       //!< \~english reserve
  u_int8      uc_data[SENSOR_MSG_VSINFO_DSIZE];   //!< \~english data contents
} SENSOR_MSG_GPSDATA_DAT;

/**
 * @struct SensorMsgGpsdata
 * \~english  Struct of message about GPS data
 */
typedef struct SensorMsgGpsdata {
  T_APIMSG_MSGBUF_HEADER  st_head;
    //!< \~english message header(see vs-positioning-base-library)
  SENSOR_MSG_GPSDATA_DAT  st_para;
    //!< \~english data of message
} SENSOR_MSG_GPSDATA;

/**
 * @struct TG_GPS_RET_TIMESET_MSG
 * \~english  Struct of message about GPS time set response
 */
typedef struct {
  T_APIMSG_MSGBUF_HEADER  header;     //!< \~english message header
  uint64_t                status;     //!< \~english response status
} TG_GPS_RET_TIMESET_MSG;

/**
 * @struct TG_GPS_NMEA_SENTENCE_INFO
 * \~english  Struct of GPS NMEA sentence info
 */
typedef struct {
  uint8_t                 uc_size;    //!< \~english sentence size
  uint8_t                 reserve;    //!< \~english reserve
  uint16_t                us_offset;  //!< \~english sentence start offset
} TG_GPS_NMEA_SENTENCE_INFO;

/**
 * @struct TG_GPS_NMEA_INFO
 * \~english  Struct of GPS NMEA info
 */
typedef struct {
  uint32_t                ul_rcvsts;        //!< \~english NMEA receive info
  uint8_t                 reserve[4];       //!< \~english reserve
  TG_GPS_NMEA_SENTENCE_INFO st_nmea_sentence_info[POS_SNS_GPS_NMEA_SNO_MAX];
    //!< \~english sentence infomation
} TG_GPS_NMEA_INFO;

/////////////////////////////////////////////////////////////////////////////////////
/// \ingroup positioning_hal
/// \~english @par Brief
///        - start thread of NMEA analysis and delivery message
/// \~english @param [in] h_app
///        HANDLE - handle
///
/// \~english @retval eFrameworkunifiedStatusOK       Success
/// \~english @retval eFrameworkunifiedStatusFail     Failed
///
/// \~english @par Prerequisite
///        - None
/// \~english @par Change of internal state
///        - This API can not change internal state
/// \~english @par Conditions of processing failure
///        - None
/// \~english @par Detail
///        - start thread of NMEA analysis and delivery message
///        - the API can only be used by 1 process
/// \~english @par Classification
///        Public
/// \~english @par Type
///        Sync
/// \~english @see
///        None
/////////////////////////////////////////////////////////////////////////////////////
EFrameworkunifiedStatus StartGpsMainThreadPositioning(HANDLE h_app);

/////////////////////////////////////////////////////////////////////////////////////
/// \ingroup positioning_hal
/// \~english @par Brief
///        - start thread for receive GPS manager
/// \~english @param [in] h_app
///        HANDLE - handle
///
/// \~english @retval eFrameworkunifiedStatusOK       Success
/// \~english @retval eFrameworkunifiedStatusFail     Failed
///
/// \~english @par Prerequisite
///        - None
/// \~english @par Change of internal state
///        - This API can not change internal state.
/// \~english @par Conditions of processing failure
///        - None
/// \~english @par Detail
///        - start model for receive GPS manager
///        - the API can only be used by 1 process
/// \~english @par Classification
///        Public
/// \~english @par Type
///        Sync
/// \~english @see
///        None
/////////////////////////////////////////////////////////////////////////////////////
EFrameworkunifiedStatus  StartGpsRecvThreadPositioning(HANDLE h_app);

/////////////////////////////////////////////////////////////////////////////////////
/// \ingroup positioning_hal
/// \~english @par Brief
///        -   start thread for receive sensor
/// \~english @param [in] h_app
///        HANDLE - handle
///
/// \~english @retval eFrameworkunifiedStatusOK       Success
/// \~english @retval eFrameworkunifiedStatusFail     Failed
///
/// \~english @par Prerequisite
///        - None
/// \~english @par Change of internal state
///        - This API can not change internal state.
/// \~english @par Conditions of processing failure
///        - None
/// \~english @par Detail
///        - start thread for receive sensor
///        - the API can only be used by 1 process
/// \~english @par Classification
///        Public
/// \~english @par Type
///        Sync
/// \~english @see
///        None
/////////////////////////////////////////////////////////////////////////////////////
EFrameworkunifiedStatus StartLineSensorThreadPositioning(HANDLE h_app);

/////////////////////////////////////////////////////////////////////////////////////
/// \ingroup positioning_hal
/// \~english @par Brief
///        - start monitoring thread of GPS rollover
/// \~english @param [in] h_app
///        HANDLE - handle
///
/// \~english @retval eFrameworkunifiedStatusOK       Success
/// \~english @retval eFrameworkunifiedStatusFail     Failed
///
/// \~english @par Prerequisite
///        - None
/// \~english @par Change of internal state
///        - This API can not change internal state.
/// \~english @par Conditions of processing failure
///        - The parameter hApp is NULL [eFrameworkunifiedStatusFail]
///        - When fail to start thread. [return value of FrameworkunifiedStartChildThread]
/// \~english @par Detail
///        - start monitoring thread of GPS rollover
///        - the API can only be used by 1 process
/// \~english @par Classification
///        Public
/// \~english @par Type
///        Sync
/// \~english @see
///        FrameworkunifiedCreateChildThread, FrameworkunifiedStartChildThread
/////////////////////////////////////////////////////////////////////////////////////
EFrameworkunifiedStatus  StartGpsRolloverThreadPositioning(HANDLE h_app);

/** @}*/  // end of positioning_hal
/** @}*/  // end of positioning

/*---------------------------------------------------------------------------*/
#endif  // HAL_API_POSITIONING_HAL_H_

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