Onboard-SDK-ROS
DJI_Type.h
Go to the documentation of this file.
1 
20 #ifndef DJI_TYPE
21 #define DJI_TYPE
22 
23 #include "DJI_Config.h"
24 #include "DJICommonType.h"
25 #include <stdio.h>
26 
27 #define NAME(x) #x
28 
29 #ifdef __GNUC__
30 #define __UNUSED __attribute__((__unused__))
31 #define __DELETE(x) delete (char *) x
32 #else
33 #define __UNUSED
34 #define __DELETE(x) delete x
35 
36 
38 #ifndef STM32
39 #pragma warning(disable : 4100)
40 #pragma warning(disable : 4800)
41 #pragma warning(disable : 4996)
42 #pragma warning(disable : 4244)
43 #pragma warning(disable : 4267)
44 #pragma warning(disable : 4700)
45 #pragma warning(disable : 4101)
46 #endif // STM32
47 #endif //__GNUC__
48 
49 #ifdef WIN32
50 #define __func__ __FUNCTION__
51 #endif // WIN32
52 
53 #define API_LOG(driver, title, fmt, ...) \
54  if ((title)) \
55  { \
56  int len = (sprintf(DJI::onboardSDK::buffer, "%s %s,line %d: " fmt, \
57  (title) ? (title) : "NONE", __func__, __LINE__, ##__VA_ARGS__)); \
58  if ((len != -1) && (len < 1024)) \
59  (driver)->displayLog(); \
60  else \
61  (driver)->displayLog("ERROR: log printer inner fault\n"); \
62  }
63 #ifdef API_DEBUG_DATA
64 #define DEBUG_LOG "DEBUG"
65 #else
66 #define DEBUG_LOG 0
67 #endif
68 
69 #ifdef API_ERROR_DATA
70 #define ERROR_LOG "ERROR"
71 #else
72 #define ERROR_LOG 0
73 #endif
74 
75 #ifdef API_BUFFER_DATA
76 #define BUFFER_LOG "BUFFER"
77 #else
78 #define BUFFER_LOG 0
79 #endif
80 
81 #ifdef API_STATUS_DATA
82 #define STATUS_LOG "STATUS"
83 #else
84 #define STATUS_LOG 0
85 #endif
86 
87 #ifdef API_MISSION_DATA
88 #define MISSION_LOG "MISSION"
89 #else
90 #define MISSION_LOG 0
91 #endif
92 
93 #ifdef API_RTK_DEBUG
94 #define RTK_LOG "MISSION"
95 #else
96 #define RTK_LOG 0
97 #endif
98 
100 #ifdef ARMCC
101 #pragma anon_unions
102 #endif
103 
104 namespace DJI
105 {
106 namespace onboardSDK
107 {
108 
109 const size_t bufsize = 1024;
110 extern char buffer[];
111 extern uint8_t encrypt;
112 
113 const size_t SESSION_TABLE_NUM = 32;
114 const size_t CALLBACK_LIST_NUM = 10;
115 
116 class CoreAPI;
117 
118 typedef struct Header
119 {
120  unsigned int sof : 8;
121  unsigned int length : 10;
122  unsigned int version : 6;
123  unsigned int sessionID : 5;
124  unsigned int isAck : 1;
126  unsigned int reversed0 : 2; // always 0
127 
128  unsigned int padding : 5;
129  unsigned int enc : 3;
131  unsigned int reversed1 : 24;
132 
133  unsigned int sequenceNumber : 16;
134  unsigned int crc : 16;
135 } Header;
136 
137 typedef void (*CallBack)(DJI::onboardSDK::CoreAPI *, Header *, UserData);
138 
139 typedef struct CallBackHandler
140 {
141  CallBack callback;
142  UserData userData;
144 
145 typedef struct Command
146 {
147  unsigned short sessionMode : 2;
148  unsigned short encrypt : 1;
149  unsigned short retry : 13;
150  unsigned short timeout; // unit is ms
151  size_t length;
152  uint8_t *buf;
153  CallBack handler;
154  UserData userData;
155 } Command;
156 
158 typedef struct SDKFilter
159 {
160  unsigned short reuseIndex;
161  unsigned short reuseCount;
162  unsigned short recvIndex;
163  unsigned char recvBuf[BUFFER_SIZE];
164  // for encrypt
165  unsigned char sdkKey[32];
166  unsigned char encode;
167 } SDKFilter;
168 
170 typedef struct MMU_Tab
171 {
172  unsigned int tabIndex : 8;
173  unsigned int usageFlag : 8;
174  unsigned int memSize : 16;
175  unsigned char *pmem;
176 } MMU_Tab;
177 
178 typedef struct CMDSession
179 {
180  uint32_t sessionID : 5;
181  uint32_t usageFlag : 1;
182  uint32_t sent : 5;
183  uint32_t retry : 5;
184  uint32_t timeout : 16;
185  MMU_Tab *mmu;
186  CallBack handler;
187  UserData userData;
188  uint32_t preSeqNum;
189  time_ms preTimestamp;
190 } CMDSession;
191 
192 typedef struct ACKSession
193 {
194  uint32_t sessionID : 5;
195  uint32_t sessionStatus : 2;
196  uint32_t res : 25;
197  MMU_Tab *mmu;
198 } ACKSession;
199 
200 typedef struct Ack
201 {
202  uint16_t sessionID : 8;
203  uint16_t encrypt : 8;
204  uint16_t seqNum;
205  uint32_t length;
206  uint8_t *buf;
207 } Ack;
208 
209 #pragma pack(1)
210 
211 typedef uint8_t BatteryData;
212 typedef uint8_t MissionACK;
213 
214 typedef struct GimbalAngleData
215 {
216  int16_t yaw;
217  int16_t roll;
218  int16_t pitch;
219  uint8_t mode;
220  uint8_t duration;
222 
223 typedef struct GimbalSpeedData
224 {
225  int16_t yaw;
226  int16_t roll;
227  int16_t pitch;
228  uint8_t reserved; // always 0x80;
230 
231 typedef float float32_t;
232 typedef double float64_t;
233 
234 typedef struct QuaternionData
235 {
236  float32_t q0;
237  float32_t q1;
238  float32_t q2;
239  float32_t q3;
241 
243 typedef struct CommonData
244 {
245  float32_t x;
246  float32_t y;
247  float32_t z;
248 } CommonData;
249 
252 typedef struct Vector3fData
253 {
254  float32_t x;
255  float32_t y;
256  float32_t z;
257 } Vector3fData;
258 
259 typedef struct VelocityData
260 {
261  float32_t x;
262  float32_t y;
263  float32_t z;
264  uint8_t health : 1;
265  uint8_t sensorID : 4;
266  uint8_t reserve : 3;
267 } VelocityData;
268 
269 typedef struct PositionData
270 {
271  float64_t latitude;
272  float64_t longitude;
276  float32_t altitude;
277 
281  float32_t height;
282 
283  uint8_t health;
284 } PositionData;
285 
287 typedef struct RadioData
288 {
289  int16_t roll;
290  int16_t pitch;
291  int16_t yaw;
292  int16_t throttle;
293  int16_t mode;
294  int16_t gear;
295 } RadioData;
296 
298 typedef struct RCData
299 {
300  int16_t roll;
301  int16_t pitch;
302  int16_t yaw;
303  int16_t throttle;
304  int16_t mode;
305  int16_t gear;
306 } RCData;
307 
309 typedef struct MagnetData
310 {
311  int16_t x;
312  int16_t y;
313  int16_t z;
314 } MagnetData;
315 
317 typedef struct MagData
318 {
319  int16_t x;
320  int16_t y;
321  int16_t z;
322 } MagData;
323 
326 typedef struct GPSPositionData
327 {
328  float64_t latitude;
329  float64_t longitude;
331  float64_t altitude;
332 
334 
335 typedef struct CtrlInfoData
336 {
337  uint8_t mode;
339  uint8_t deviceStatus : 3; /*0->rc 1->app 2->serial*/
340  uint8_t flightStatus : 1; /*1->opensd 0->close*/
341  uint8_t vrcStatus : 1;
342  uint8_t reserved : 3;
343 } CtrlInfoData;
344 
345 typedef struct TimeStampData
346 {
348  uint32_t time;
349  uint32_t nanoTime;
350  uint8_t syncFlag;
351 } TimeStampData;
352 
353 typedef struct GimbalData
354 {
355  float32_t roll;
356  float32_t pitch;
357  float32_t yaw;
358  uint8_t pitchLimit : 1;
359  uint8_t rollLimit : 1;
360  uint8_t yawLimit : 1;
361  uint8_t reserved : 5;
362 } GimbalData;
363 
364 typedef uint8_t FlightStatus;
365 
366 typedef struct TaskData
367 {
368  unsigned char cmdSequence;
369  unsigned char cmdData;
370 } TaskData;
371 
373 typedef struct RTKData
374 {
375  uint32_t date;
376  uint32_t time;
377  float64_t longitude;
378  float64_t latitude;
380  float32_t Hmsl;
381 
382  float32_t velocityNorth;
383  float32_t velocityEast;
385  float32_t velocityGround;
386 
387  int16_t yaw;
388  uint8_t posFlag;
389  uint8_t yawFlag;
390 
391 } RTKData;
392 
394 typedef struct GPSData
395 {
396  uint32_t date;
397  uint32_t time;
398  int32_t longitude;
399  int32_t latitude;
401  int32_t Hmsl;
402 
403  float32_t velocityNorth;
404  float32_t velocityEast;
406  float32_t velocityGround;
407 
408 } GPSData;
409 
410 #ifndef SDK_DEV
411 typedef struct BroadcastData
413 {
414  unsigned short dataFlag;
415  TimeStampData timeStamp;
416  QuaternionData q;
419  VelocityData v;
422  PositionData pos;
425  GPSData gps;
426  RTKData rtk;
429  GimbalData gimbal;
430  FlightStatus status;
431  BatteryData battery;
432  CtrlInfoData ctrlInfo;
433 
436  uint8_t activation;
437 } BroadcastData;
438 #endif // SDK_DEV
439 
440 typedef struct VirtualRCSetting
441 {
442  uint8_t enable : 1;
443  uint8_t cutoff : 1;
444  uint8_t reserved : 6;
446 
447 typedef struct VirtualRCData
448 {
452  uint32_t roll;
453  uint32_t pitch;
454  uint32_t throttle;
455  uint32_t yaw;
456  uint32_t gear;
457  uint32_t reserved;
458  uint32_t mode;
459  uint32_t Channel_07;
460  uint32_t Channel_08;
461  uint32_t Channel_09;
462  uint32_t Channel_10;
463  uint32_t Channel_11;
464  uint32_t Channel_12;
465  uint32_t Channel_13;
466  uint32_t Channel_14;
467  uint32_t Channel_15;
468 } VirtualRCData;
469 
470 #pragma pack()
471 #ifdef SDK_DEV
472 #include "devtype.h"
473 #endif // SDK_DEV
474 } // namespace onboardSDK
475 } // namespace DJI
476 
477 #define PRO_PURE_DATA_MAX_SIZE 1007 // 2^10 - header size
478 const size_t MMU_TABLE_NUM = 32;
479 
480 
481 #endif // DJI_TYPE
unsigned int reversed1
Definition: DJI_Type.h:131
Definition: DJI_Type.h:317
Definition: DJI_Type.h:214
Definition: DJI_Type.h:394
Definition: DJI_Type.h:309
uint32_t time
Definition: DJI_Type.h:348
Definition: DJI_Type.h:447
Definition: DJI_Type.h:440
uint8_t activation
Definition: DJI_Type.h:436
MagnetData mag
Definition: DJI_Type.h:424
Definition: DJI_Type.h:223
float32_t Hmsl
Definition: DJI_Type.h:380
CoreAPI implements core Open Protocol communication between M100/M600/A3 and your onboard embedded pl...
Definition: DJI_API.h:195
Definition: DJI_Type.h:345
Definition: DJI_Type.h:178
Definition: DJI_Type.h:192
Definition: DJI_Type.h:366
Definition: DJI_Type.h:252
CommonData w
Definition: DJI_Type.h:421
unsigned int reversed0
Definition: DJI_Type.h:126
CommonData a
Definition: DJI_Type.h:418
Definition: DJI_Type.h:170
Definition: DJI_Type.h:269
Definition: DJI_Type.h:298
Definition: DJI_Type.h:158
RadioData rc
Definition: DJI_Type.h:428
Definition: DJI_Type.h:287
Definition: DJI_Type.h:353
Definition: DJI_Type.h:200
Definition: DJI_Type.h:259
Definition: DJI_Type.h:145
BatteryData battery
Definition: DJI_Type.h:431
Definition: DJI_Type.h:139
float32_t velocityGround
Definition: DJI_Type.h:406
Definition: DJI_Type.h:118
Definition: DJI_Type.h:373
Definition: DJI_Type.h:234
Definition: DJI_Mission.cpp:16
float32_t height
Definition: DJI_Type.h:281
uint32_t roll
Definition: DJI_Type.h:452
int32_t Hmsl
Definition: DJI_Type.h:401
Definition: DJI_Type.h:326
Definition: DJI_Type.h:412
float32_t velocityGround
Definition: DJI_Type.h:385
Definition: DJI_Type.h:243
float32_t altitude
Definition: DJI_Type.h:276
float64_t altitude
Definition: DJI_Type.h:331
Definition: DJI_Type.h:335