/* * Inputs: length of the frame in bytes, pointer to the frame bytes buffer. */ bool checksum_verify(const uint16_t length, const uint8_t* buffer) {
uint8_t checksum_a = 0, checksum_b = 0; /* Sum the two first bytes */ for(uint16_t i = 0; i < 2; i++) { checksum_b += (checksum_a += buffer[i]); } /* Skip the two checksum bytes */ /* Sum the following bytes */ for(uint16_t i = 4; i < length; i++) { checksum_b += (checksum_a += buffer[i]); } /* Compare the computed checksum to the checksum in the frame */ return checksum_a == buffer[2] && checksum_b == buffer[3]; }
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D0 0A  0x0AD0 Header (512 bytes) 

16bit unsigned  Checksum  CA CC  
16bit unsigned  Identifier  94 05  1428  
80bit signed  Nickname  4A 75 6C 69 65 6E 00 00 00 00 
Julien  
64bit unsigned  Log start date  6D D4 9F 32 65 01 00 00  Milliseconds since Unix time  20180813T09:31:00.077Z 
32bit signed  Log start latitude  6F 78 21 1E  Divide by 10e6  50.5509999 degrees 
32bit signed  Log start longitude  BE C1 50 02  Divide by 10e6  3.8846910 degrees 
32bit signed  Log start altitude (MSL)  C7 0A 01 00  Divide by 10e2  68.295 m 
64bit unsigned  Log end date  84 BA F2 32 65 01 00 00  Milliseconds since Unix time  20180813T11:01:32.932Z 
32bit signed  Log end latitude  30 DC 20 1E  Divide by 10e6  50.5470000 degrees 
32bit signed  Log end longitude  D9 3D 4F 02  Divide by 10e6  3.8747609 degrees 
32bit signed  Log end altitude (MSL)  0E 2D 01 00  Divide by 10e2  77.070 m 
32bit unsigned  Total distance  93 D7 6A 01  Divide by 10e2  23779.219 m 
32bit signed  Minimum latitude  03 D9 20 1E  Divide by 10e6  50.5469187 degrees 
32bit signed  Minimum longitude  79 76 43 02  Divide by 10e6  3.7975673 degrees 
32bit signed  Minimum altitude (MSL)  5F 83 00 00  Divide by 10e2  33.631 
32bit unsigned  Minimum speed  00 00 00 00  Divide by 10e2  0 m/s 
32bit signed  Maximum latitude  E4 FA 2A 1E  Divide by 10e6  50.6133220 degrees 
32bit signed  Maximum longitude  3F 9D 52 02  Divide by 10e6  3.8968639 degrees 
32bit signed  Maximum altitude (MSL)  F0 37 01 00  Divide by 10e2  79.856 m 
32bit unsigned  Maximum speed  E6 65 00 00  Divide by 10e2  26.086 m/s 
32bit unsigned  Speed average above 12kn 
12 42 00 00  Divide by 10e2  16.914 m/s 
32bit unsigned  Seconds spent above 12kn 
4F 05 00 00  Seconds since log start  1359 s 
32bit unsigned  Best over 1s #1 time  97 55 71 5B  Seconds since Unix time  20180813T09:55:35Z 
32bit unsigned  Best over 1s #1 value  48 66 00 00  Divide by 10e2  26.184 m/s 
32bit unsigned  Best over 1s #2 time  EB 5B 71 5B  Seconds since Unix time  20180813T10:22:35Z 
32bit unsigned  Best over 1s #2 value  2A 65 00 00  Divide by 10e2  25.898 m/s 
32bit unsigned  Best over 1s #3 time  B4 53 71 5B  Seconds since Unix time  20180813T09:47:32Z 
32bit unsigned  Best over 1s #3 value  47 63 00 00  Divide by 10e2  25.415 m/s 
32bit unsigned  Best over 1s #4 time  F2 53 71 5B  Seconds since Unix time  20180813T09:48:34Z 
32bit unsigned  Best over 1s #4 value  32 61 00 00  Divide by 10e2  24.882 m/s 
32bit unsigned  Best over 1s #5 time  CB 50 71 5B  Seconds since Unix time  20180813T09:35:07Z 
32bit unsigned  Best over 1s #5 value  52 5C 00 00  Divide by 10e2  23.634 m/s 
Repeat bests_over_1s for bests_over_10s, bests_over_1h, bests_over_500m, bests_over_1000m, bests_over_1852m, bests_gybe_min  
32bit unsigned  Elevation gain  00 00 00 00  New, divide by 10e2  0 m 
64byte unsigned  Unused  64 times 00  
64byte unsigned  Signature  80 B3 06 81 59 51 FB F1 74 85 F2 AF 67 D8 3B 95 7B 9F D6 57 04 F9 70 C4 01 21 BA DA 3C D4 C0 05 52 D0 5F 6F D7 EC 66 63 F5 B3 60 6B 81 79 7A 44 C4 0C 57 22 2A EF 40 84 22 6B 33 79 7B 94 2D 04  Authenticity check for competitions 
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D1 0A  0x0AD1 Track (12 bytes)  
16bit unsigned  Checksum  2F 37  
32bit signed  Latitude  0E 2E 22 1E  Divide by 10e6  50.5556494 degrees 
32bit signed  Longitude  6C 19 51 02  Divide by 10e6  3.8869356 degrees 
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D2 0A  0x0AD2 Emergency (34 bytes)  
16bit unsigned  Checksum  A3 38  
32bit signed  Latitude  0E 2E 22 1E  Divide by 10e6  50.5556494 degrees 
32bit signed  Longitude  6C 19 51 02  Divide by 10e6  3.8869356 degrees 
32bit signed  Altitude MSL  F7 EA 00 00  Divide by 10e2  60.151 m 
32bit unsigned  Speed  A4 45 00 00  Divide by 10e2  17.828 m/s 
32bit unsigned  Course  55 77 6F 01  Divide by 10e4  240.823 degrees 
64bit unsigned  UTC time  C0 28 D3 32 65 01 00 00  Milliseconds since Unix time  20180813T10:27:04.000Z 
16bit unsigned  Identifier  03 17  1312 
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D3 0A  0x0AD3 POI (34 bytes)  
16bit unsigned  Checksum  A4 58  
32bit signed  Latitude  0E 2E 22 1E  Divide by 10e6  50.5556494 degrees 
32bit signed  Longitude  6C 19 51 02  Divide by 10e6  3.8869356 degrees 
32bit signed  Altitude MSL  F7 EA 00 00  Divide by 10e2  60.151 m 
32bit unsigned  Speed  A4 45 00 00  Divide by 10e2  17.828 m/s 
32bit unsigned  Course  55 77 6F 01  Divide by 10e4  240.823 degrees 
64bit unsigned  UTC time  C0 28 D3 32 65 01 00 00  Milliseconds since Unix time  20180813T10:27:04.000Z 
8bit unsigned  Fix type  03  0 : none, 2 : 2D, 3 : 3D  3D 
8bit unsigned  Satellites  17  Used in this solution  23 
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D4 0A  0x0AD4 GNSS aligned (52 bytes) 

16bit unsigned  Checksum  E3 EE  
32bit signed  Latitude  0E 2E 22 1E  Divide by 10e6  50.5556494 degrees 
32bit signed  Longitude  6C 19 51 02  Divide by 10e6  3.8869356 degrees 
32bit signed  Altitude MSL  F7 EA 00 00  Divide by 10e2  60.151 m 
32bit unsigned  Speed  A4 45 00 00  Divide by 10e2  17.828 m/s 
32bit unsigned  Course  55 77 6F 01  Divide by 10e4  240.823 degrees 
64bit unsigned  UTC time  C0 28 D3 32 65 01 00 00  Milliseconds since Unix time  20180813T10:27:04.000Z 
8bit unsigned  Fix  03  0 : none, 2 : 2D, 3 : 3D  3D 
8bit unsigned  Satellites  17  Used in this solution  23 
32bit unsigned  Speed accuracy  56 00 00 00  Divide by 10e2  0.086 m/s 
32bit unsigned  Horizontal accuracy  6D 02 00 00  Divide by 10e2  0.621 m 
32bit unsigned  Vertical accuracy  02 03 00 00  Divide by 10e2  0.770 m 
32bit unsigned  Heading accuracy  70 A3 00 00  Divide by 10e4  0.418 degrees 
16bit unsigned  Horizontal DOP  61 00  Divide by 10e2  0.97 
Integer type  Name  Value (hex)  Informations  Interpreted as 

16bit unsigned  Mode  D6 0A  0x0AD6 IMU (32 bytes)  
16bit unsigned  Checksum  99 D3  
64bit unsigned  UTC time  8E BB 52 33 65 01 00 00  Milliseconds since Unix time  20180813T12:46:24.654Z 
16bit signed  Attitude W  51 3B  * (1 / (1 << 14))  0.927 
16bit signed  Attitude X  68 00  * (1 / (1 << 14))  0.006 
16bit signed  Attitude Y  60 03  * (1 / (1 << 14))  0.053 
16bit signed  Attitude Z  36 E8  * (1 / (1 << 14))  0.372 
16bit signed  Angular velocity X  FF FF  * (1 / (1 << 9))  0.002 rad/s 
16bit signed  Angular velocity Y  10 00  * (1 / (1 << 9))  0.031 rad/s 
16bit signed  Angular velocity Z  02 00  * (1 / (1 << 9))  0.004 rad/s 
16bit signed  Linear acceleration X  FE FF  * (1 / (1 << 8))  0.008 m/s/s 
16bit signed  Linear acceleration Y  01 00  * (1 / (1 << 8))  0.004 m/s/s 
16bit signed  Linear acceleration Z  02 00  * (1 / (1 << 8))  0.008 m/s/s 