libgpsfile
0.2.2
some useful C-functions
_gps_data_file_v1.h
Go to the documentation of this file.
1
/* kate: indent-mode cstyle; tab-width 6; indent-width 6; */
2
#ifndef X_GPS_DATA_FILE_H
3
#define X_GPS_DATA_FILE_H
4
5
#include <stdint.h>
6
#include <math.h>
7
8
/* Macro's: */
9
#define _GPS_SPEC_HAVE_ACCURACY 1
10
#define _GPS_SPEC_VERSION 1
11
12
/* minima and maxima according to the gps spec for differential notation */
13
#define LAT_GPS_SPEC_DIFF_MAX (uint64_t)(pow(2, _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_DIFF_FIELD_SIZE) - 1)
14
#define LNG_GPS_SPEC_DIFF_MAX (uint64_t)(pow(2, _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_DIFF_FIELD_SIZE) - 1)
15
#define ALT_GPS_SPEC_DIFF_MAX (uint32_t)(pow(2, _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_DIFF_FIELD_SIZE) - 1)
16
#define TIME_GPS_SPEC_DIFF_MAX (uint64_t)(pow(2, _GPS_PARTIAL_LOCATION_BLOCK_TIME_DIFF_FIELD_SIZE) - 1)
17
18
#define LAT_GPS_SPEC_MULTIPIER (double)(pow(10, 10))
19
#define LNG_GPS_SPEC_MULTIPIER (double)(pow(10, 10))
20
#define ALT_GPS_SPEC_MULTIPIER (double)(pow(10, 3))
21
22
/* blocks from the GPS DATA FILE */
23
#define _GPS_HEADER_BLOCK_SIZE (16)
24
#define _GPS_COMPLETE_LOCATION_BLOCK_SIZE (32)
25
#define _GPS_PARTIAL_LOCATION_BLOCK_SIZE (16)
26
#define _GPS_COMMENT_BLOCK_SIZE (128)
27
#define _GPS_SUMMARY_BLOCK_SIZE (32)
28
#define _GPS_EMPTY_BLOCK_SIZE (8)
29
#define _GPS_DEFAULT_BLOCK_SIZE _GPS_COMPLETE_LOCATION_BLOCK_SIZE
30
31
#define _GPS_BLOCK_IDENTITY_SIZE (4)
32
#define _GPS_ACCURACY_FIELD_SIZE (10)
33
#define _GPS_SIGN_FIELD_SIZE (1)
34
35
/* block identities */
36
#define _GPS_HEADER_BLOCK_IDENTITY 0x50
37
#define _GPS_COMPLETE_LOCATION_BLOCK_IDENTITY 0xC0
38
#define _GPS_PARTIAL_LOCATION_BLOCK_IDENTITY 0x30
39
#define _GPS_COMMENT_BLOCK_IDENTITY 0x10
40
#define _GPS_SUMMARY_BLOCK_IDENTITY 0x80
41
#define _GPS_EMPTY_BLOCK_IDENTITY 0x00
42
43
/* fields for the header block */
44
#define _GPS_HEADER_BLOCK_VERSION_FIELD_START (_GPS_BLOCK_IDENTITY_SIZE)
45
#define _GPS_HEADER_BLOCK_VERSION_FIELD_SIZE (4)
46
#define _GPS_HEADER_BLOCK_TEXT_FIELD_START (_GPS_HEADER_BLOCK_VERSION_FIELD_START + _GPS_HEADER_BLOCK_VERSION_FIELD_SIZE)
47
#define _GPS_HEADER_BLOCK_TEXT_FIELD_SIZE (104)
48
#define _GPS_HEADER_BLOCK_OPTIONS_FIELD_START (_GPS_HEADER_BLOCK_TEXT_FIELD_START + _GPS_HEADER_BLOCK_TEXT_FIELD_SIZE)
49
#define _GPS_HEADER_BLOCK_OPTIONS_FIELD_SIZE (8)
50
#define _GPS_HEADER_BLOCK_FUTURE_FIELD_START (_GPS_HEADER_BLOCK_OPTIONS_FIELD_START + _GPS_HEADER_BLOCK_OPTIONS_FIELD_SIZE)
51
#define _GPS_HEADER_BLOCK_FUTURE_FIELD_SIZE (8)
52
53
/* fields for the complete location block */
54
#define _GPS_COMPLETE_LOCATION_BLOCK_TIME_FIELD_START (_GPS_BLOCK_IDENTITY_SIZE)
55
#define _GPS_COMPLETE_LOCATION_BLOCK_TIME_FIELD_SIZE (42)
56
#define _GPS_COMPLETE_LOCATION_BLOCK_LATITUDE_FIELD_START (_GPS_COMPLETE_LOCATION_BLOCK_TIME_FIELD_START + _GPS_COMPLETE_LOCATION_BLOCK_TIME_FIELD_SIZE)
57
#define _GPS_COMPLETE_LOCATION_BLOCK_LATITUDE_FIELD_SIZE (41)
58
#define _GPS_COMPLETE_LOCATION_BLOCK_LONGITUDE_FIELD_START (_GPS_COMPLETE_LOCATION_BLOCK_LATITUDE_FIELD_START + _GPS_COMPLETE_LOCATION_BLOCK_LATITUDE_FIELD_SIZE)
59
#define _GPS_COMPLETE_LOCATION_BLOCK_LONGITUDE_FIELD_SIZE (42)
60
#define _GPS_COMPLETE_LOCATION_BLOCK_ALTITUDE_FIELD_START (_GPS_COMPLETE_LOCATION_BLOCK_LONGITUDE_FIELD_START + _GPS_COMPLETE_LOCATION_BLOCK_LONGITUDE_FIELD_SIZE)
61
#define _GPS_COMPLETE_LOCATION_BLOCK_ALTITUDE_FIELD_SIZE (24)
62
#define _GPS_COMPLETE_LOCATION_BLOCK_ACCURACY_FIELD_START (_GPS_COMPLETE_LOCATION_BLOCK_ALTITUDE_FIELD_START + _GPS_COMPLETE_LOCATION_BLOCK_ALTITUDE_FIELD_SIZE)
63
#define _GPS_COMPLETE_LOCATION_BLOCK_ACCURACY_FIELD_SIZE (_GPS_ACCURACY_FIELD_SIZE)
64
#define _GPS_COMPLETE_LOCATION_BLOCK_FUTURE_FIELD_START (_GPS_COMPLETE_LOCATION_BLOCK_ACCURACY_FIELD_START + _GPS_COMPLETE_LOCATION_BLOCK_ACCURACY_FIELD_SIZE)
65
#define _GPS_COMPLETE_LOCATION_BLOCK_FUTURE_FIELD_SIZE (93)
66
67
/* fields for the partial location block */
68
#define _GPS_PARTIAL_LOCATION_BLOCK_TIME_DIFF_FIELD_START (_GPS_BLOCK_IDENTITY_SIZE)
69
#define _GPS_PARTIAL_LOCATION_BLOCK_TIME_DIFF_FIELD_SIZE (16)
70
#define _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_SIGN_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_TIME_DIFF_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_TIME_DIFF_FIELD_SIZE)
71
#define _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_SIGN_FIELD_SIZE (_GPS_SIGN_FIELD_SIZE)
72
#define _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_DIFF_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_SIGN_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_SIGN_FIELD_SIZE)
73
#define _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_DIFF_FIELD_SIZE (24)
74
#define _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_SIGN_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_DIFF_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_LATITUDE_DIFF_FIELD_SIZE)
75
#define _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_SIGN_FIELD_SIZE (_GPS_SIGN_FIELD_SIZE)
76
#define _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_DIFF_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_SIGN_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_SIGN_FIELD_SIZE)
77
#define _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_DIFF_FIELD_SIZE (25)
78
#define _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_SIGN_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_DIFF_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_LONGITUDE_DIFF_FIELD_SIZE)
79
#define _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_SIGN_FIELD_SIZE (_GPS_SIGN_FIELD_SIZE)
80
#define _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_DIFF_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_SIGN_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_SIGN_FIELD_SIZE)
81
#define _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_DIFF_FIELD_SIZE (14)
82
#define _GPS_PARTIAL_LOCATION_BLOCK_ACCURACY_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_DIFF_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_ALTITUDE_DIFF_FIELD_SIZE)
83
#define _GPS_PARTIAL_LOCATION_BLOCK_ACCURACY_FIELD_SIZE (_GPS_ACCURACY_FIELD_SIZE)
84
#define _GPS_PARTIAL_LOCATION_BLOCK_FUTURE_FIELD_START (_GPS_PARTIAL_LOCATION_BLOCK_ACCURACY_FIELD_START + _GPS_PARTIAL_LOCATION_BLOCK_ACCURACY_FIELD_SIZE)
85
#define _GPS_PARTIAL_LOCATION_BLOCK_FUTURE_FIELD_SIZE (32)
86
87
/* fields for the summary block */
88
#define _GPS_SUMMARY_BLOCK_MODE_FIELD_START (_GPS_BLOCK_IDENTITY_SIZE)
89
#define _GPS_SUMMARY_BLOCK_MODE_FIELD_SIZE (2)
90
#define _GPS_SUMMARY_BLOCK_TOTAL_TIME_FIELD_START (_GPS_SUMMARY_BLOCK_MODE_FIELD_START + _GPS_SUMMARY_BLOCK_MODE_FIELD_SIZE)
91
#define _GPS_SUMMARY_BLOCK_TOTAL_TIME_FIELD_SIZE (17)
92
#define _GPS_SUMMARY_BLOCK_TRAVEL_TIME_FIELD_START (_GPS_SUMMARY_BLOCK_TOTAL_TIME_FIELD_START + _GPS_SUMMARY_BLOCK_TOTAL_TIME_FIELD_SIZE)
93
#define _GPS_SUMMARY_BLOCK_TRAVEL_TIME_FIELD_SIZE (17)
94
#define _GPS_SUMMARY_BLOCK_DISTANCE_FIELD_START (_GPS_SUMMARY_BLOCK_TRAVEL_TIME_FIELD_START + _GPS_SUMMARY_BLOCK_TRAVEL_TIME_FIELD_SIZE)
95
#define _GPS_SUMMARY_BLOCK_DISTANCE_FIELD_SIZE (20)
96
#define _GPS_SUMMARY_BLOCK_CLIMB_HEIGHT_FIELD_START (_GPS_SUMMARY_BLOCK_DISTANCE_FIELD_START + _GPS_SUMMARY_BLOCK_DISTANCE_FIELD_SIZE)
97
#define _GPS_SUMMARY_BLOCK_CLIMB_HEIGHT_FIELD_SIZE (18)
98
#define _GPS_SUMMARY_BLOCK_CLIMB_DISTANCE_FIELD_START (_GPS_SUMMARY_BLOCK_CLIMB_HEIGHT_FIELD_START + _GPS_SUMMARY_BLOCK_CLIMB_HEIGHT_FIELD_SIZE)
99
#define _GPS_SUMMARY_BLOCK_CLIMB_DISTANCE_FIELD_SIZE (20)
100
#define _GPS_SUMMARY_BLOCK_CLIMB_TOTAL_TIME_FIELD_START (_GPS_SUMMARY_BLOCK_CLIMB_DISTANCE_FIELD_START + _GPS_SUMMARY_BLOCK_CLIMB_DISTANCE_FIELD_SIZE)
101
#define _GPS_SUMMARY_BLOCK_CLIMB_TOTAL_TIME_FIELD_SIZE (17)
102
#define _GPS_SUMMARY_BLOCK_CLIMB_TRAVEL_TIME_FIELD_START (_GPS_SUMMARY_BLOCK_CLIMB_TOTAL_TIME_FIELD_START + _GPS_SUMMARY_BLOCK_CLIMB_TOTAL_TIME_FIELD_SIZE)
103
#define _GPS_SUMMARY_BLOCK_CLIMB_TRAVEL_TIME_FIELD_SIZE (17)
104
#define _GPS_SUMMARY_BLOCK_FUTURE_FIELD_START (_GPS_SUMMARY_BLOCK_CLIMB_TRAVEL_TIME_FIELD_START + _GPS_SUMMARY_BLOCK_CLIMB_TRAVEL_TIME_FIELD_SIZE)
105
#define _GPS_SUMMARY_BLOCK_FUTURE_FIELD_SIZE (124)
106
107
/* fields for the comment block */
108
#define _GPS_COMMENT_BLOCK_COMMENT_FIELD_START (_GPS_BLOCK_IDENTITY_SIZE + 4)
109
#define _GPS_COMMENT_BLOCK_COMMENT_FIELD_SIZE (1016)
110
111
/* some macro's that make life easy */
112
#ifndef MIN
113
# define MIN(a,b) (((a) < (b)) ? (a) : (b))
114
#endif
115
#ifndef MAX
116
# define MAX(a,b) (((a) > (b)) ? (a) : (b))
117
#endif
118
119
/* some handsome macro's for reading and writing from and to bits */
120
#define GET_BYTE(a) ((a) / 8)
121
#define GET_BIT(a) (7 - ((a) % 8))
122
#define SHIFT(b, n) (((n) < 0) ? ((b) << (-(n))) : ((b) >> (n)))
123
#define GET_SHIFT(l, s, p) ((l) + (s) - (1) - (p))
124
125
#endif
/* X_GPS_DATA_FILE_H */
gpsfile
_gps_data_file_v1.h
Generated on Sat Aug 23 2025 07:32:00 for libgpsfile by
1.8.14