-
Notifications
You must be signed in to change notification settings - Fork 4
/
parseRecord_RECOVER.cpp
68 lines (53 loc) · 2.43 KB
/
parseRecord_RECOVER.cpp
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
/**********
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**********/
/*
A C++ program to parse DJI's ".txt" log files (recorded by the "DJI Go 4" app).
Version 2019-02-08
Copyright (c) 2019 Live Networks, Inc. All rights reserved.
For the latest version of this program (and more information), visit http://djilogs.live555.com
Parsing RECOVER records within DJI ".txt" files.
Implementation.
*/
#include "RecordAndDetailsParser.hh"
void RecordAndDetailsParser::parseRecord_RECOVER(u_int8_t const*& ptr, u_int8_t const* limit) {
// RECOVER.droneType.RAW: 1 byte unsigned:
noteByteField("RECOVER.droneType.RAW", ptr, limit);
// RECOVER.appType.RAW: 1 byte unsigned:
noteByteField("RECOVER.appType.RAW", ptr, limit);
// RECOVER.appVersion: 3 bytes;
note3ByteVersionField("RECOVER.appVersion", ptr, limit);
// RECOVER.aircraftSn: string (length 10):
noteStringField("RECOVER.aircraftSn", ptr, 10, limit);
// RECOVER.aircraftName: string (length 24):
noteStringField("RECOVER.aircraftName", ptr, 24, limit);
// unknown (8 bytes)
ptr += 8;
// RECOVER.activeTimestamp: 8 bytes little-endian, in Unix time format:
extern u_int32_t fileVersionNumber;
if ((fileVersionNumber&0x0000FF00) < 0x00000800) {
note8ByteTimestampField("RECOVER.activeTimestamp", ptr, limit);
} else {
// This timestamp is formatted differently (how?) in newer versions of the .txt file. #####
if ((fileVersionNumber&0x0000FF00) > 0x00000800) {
ptr += 8; // skip over 8-byte timestamp
} else {
ptr += 6+8; // skip over 6 bytes (unknown) + 8-byte timestamp
}
}
// RECOVER.cameraSn: string (length 10):
noteStringField("RECOVER.cameraSn", ptr, 10, limit);
// RECOVER.rcSn: string (length 10):
noteStringField("RECOVER.rcSn", ptr, 10, limit);
// RECOVER.batterySn: string (length 10):
noteStringField("RECOVER.batterySn", ptr, 10, limit);
}