Skip to content

Commit 00a3afa

Browse files
author
Rohit Sant
committed
Hotfix release adding 3.3 support for M600 FW 1.0.1.20. See #188. Misc bugfixes, closes #191 and some Qt sample issues.
1 parent 6e467a5 commit 00a3afa

File tree

20 files changed

+564
-293
lines changed

20 files changed

+564
-293
lines changed

.gitignore

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,4 @@ build/
4949
CMakeFiles/
5050
CMakeCache.txt
5151
cmake_install.cmake
52-
<<<<<<< HEAD
53-
<<<<<<< HEAD
54-
Makefile
55-
=======
56-
Makefile
57-
58-
osdk-core/test
59-
contrib
60-
>>>>>>> refs/heads/3.3
61-
=======
62-
Makefile
63-
>>>>>>> develop
52+
Makefile

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ A new major version of DJI Onboard SDK (v3.3) was released on 15 Jun 2017. This
2525
| | 1.7.0.0 | 3.2.15.37 | OSDK 3.2 | |
2626
| | | | | |
2727
| **M600/M600 Pro** | *1.0.1.60* | *3.2.41.5* | *OSDK 3.3 (Current)* | Firmware being investigated for potential in-flight instability |
28-
| | **1.0.1.20** | **3.2.15.62** | **OSDK 3.2** | OSDK 3.3 support for this firmware coming soon |
28+
| | **1.0.1.20** | **3.2.15.62** | **OSDK 3.3 (Current)** | |
2929
| | 1.0.0.80 | 3.2.15.00 | OSDK 3.2 | |
3030
| | | | | |
3131
| **M100** | 1.3.1.0 | 3.1.10.0 | **OSDK 3.3 (Current)** | |

osdk-core/api/inc/dji_ack.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ class ACK
293293
static const std::map<const uint32_t, const char*> createMFIOErrorCodeMap();
294294
static const std::map<const uint32_t, const char*> createSetArmErrorCodeMap();
295295
static const std::map<const uint32_t, const char*>
296-
createM100TaskErrorCodeMap();
296+
createLegacyTaskErrorCodeMap();
297297
}; // class ACK
298298

299299
} // namespace OSDK

osdk-core/api/inc/dji_broadcast.hpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -317,17 +317,23 @@ class DataBroadcast
317317

318318
private:
319319
/*!
320-
* @brief Extract broadcast data for A3/N3
321-
* @param recvFrame: the raw data payload
320+
* @brief Extract broadcast data for A3/N3/M600
321+
* @param recvFrame: pointer to the raw data payload
322322
*/
323323
void unpackData(RecvContainer* recvFrame);
324324

325325
/*!
326326
* @brief Extract broadcast data for M100
327-
* @param recvFrame: the raw data payload
327+
* @param recvFrame: pointer to the raw data payload
328328
*/
329329
void unpackM100Data(RecvContainer* pRecvFrame);
330330

331+
/*!
332+
* @brief Extract broadcast data for M600 FW 3.2.41.5
333+
* @param recvFrame: pointer to the raw data payload
334+
*/
335+
void unpackOldM600Data(RecvContainer* recvFrame);
336+
331337
inline void unpackOne(FLAG flag, void* data, uint8_t*& buf, size_t size);
332338

333339
public:
@@ -355,13 +361,14 @@ class DataBroadcast
355361
Telemetry::Battery battery ;
356362
Telemetry::SDKInfo info ;
357363
/*
358-
* @note Broadcast data for Matrice 100 that is fundamentally
359-
* different from the A3/N3
364+
* @note Broadcast data for Matrice 100/600 older firmware that is fundamentally
365+
* different from the A3/N3/M600 newer firmware
360366
*/
361-
Telemetry::M100TimeStamp m100TimeStamp;
362-
Telemetry::M100Velocity m100Velocity;
363-
Telemetry::M100Status m100FlightStatus;
364-
Telemetry::M100Battery m100Battery;
367+
Telemetry::LegacyTimeStamp legacyTimeStamp;
368+
Telemetry::LegacyVelocity legacyVelocity;
369+
Telemetry::LegacyStatus legacyStatus;
370+
Telemetry::LegacyBattery legacyBattery;
371+
Telemetry::LegacyGPSInfo legacyGPSInfo;
365372
// clang-format on
366373
private:
367374
Vehicle* vehicle;

osdk-core/api/inc/dji_control.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class Control
4040
/*
4141
* @note Matrice 100 flight commands
4242
*/
43-
typedef struct M100CMD
43+
typedef struct LegacyCMD
4444
{
4545
const static int goHome = 1;
4646
const static int takeOff = 4;
4747
const static int landing = 6;
48-
} M100CMD;
48+
} LegacyCMD;
4949

5050
/*
5151
* @note OSDK release 3.3
@@ -238,11 +238,11 @@ class Control
238238
} AdvancedCtrlData; // pack(1)
239239

240240
// CMD data supported in Matrice 100
241-
typedef struct M100CMDData
241+
typedef struct LegacyCMDData
242242
{
243243
uint8_t sequence;
244244
uint8_t cmd;
245-
} M100CMDData; // pack (1)
245+
} LegacyCMDData; // pack (1)
246246
#pragma pack()
247247

248248
/*! @note
@@ -439,7 +439,7 @@ class Control
439439
/*
440440
* Task CMD data to send to the flight controller (supported in Matrice 100)
441441
*/
442-
M100CMDData m100CMDData;
442+
LegacyCMDData legacyCMDData;
443443
}; // class Control
444444

445445
} // OSDK

osdk-core/api/inc/dji_error.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,11 +335,11 @@ class ErrorCode
335335
/*
336336
* Task ACKs Supported in firmware version < 3.3
337337
*/
338-
typedef struct M100Task
338+
typedef struct LegacyTask
339339
{
340340
const static uint16_t SUCCESS;
341341
const static uint16_t FAIL;
342-
} M100Task;
342+
} LegacyTask;
343343

344344
/*!
345345
* @brief CMDID: SetArm supported in products with

osdk-core/api/inc/dji_telemetry.hpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -500,19 +500,19 @@ typedef struct HardSyncData
500500
/*!
501501
* @brief Matrice 100 Timestamp data, available in Broadcast telemetry (only for M100)
502502
*/
503-
typedef struct M100TimeStamp
503+
typedef struct LegacyTimeStamp
504504
{
505505
uint32_t time;
506506
uint32_t nanoTime;
507507
uint8_t syncFlag;
508-
} M100TimeStamp; // pack(1)
508+
} LegacyTimeStamp; // pack(1)
509509

510510
/*!
511511
* @brief Matrice 100 Velocity struct, returned in Broadcast telemetry (only for M100)
512512
* @note The velocity may be in body or ground frame
513513
* based on settings in DJI Assistant 2's SDK page.
514514
*/
515-
typedef struct M100Velocity
515+
typedef struct LegacyVelocity
516516
{
517517
float32_t x;
518518
float32_t y;
@@ -523,18 +523,32 @@ typedef struct M100Velocity
523523
uint8_t health : 1;
524524
uint8_t sensorID : 4;
525525
uint8_t reserve : 3;
526-
} M100Velocity; // pack(1)
526+
} LegacyVelocity; // pack(1)
527527

528528
typedef uint16_t EnableFlag; // pack(1)
529529

530530
/*!
531531
* @brief Return type for flight status data broadcast (only for M100). Returns VehicleStatus::M100FlightStatus.
532532
*/
533-
typedef uint8_t M100Status; // pack(1)
533+
typedef uint8_t LegacyStatus; // pack(1)
534534
/*!
535535
* @brief Return type for battery data broadcast (only for M100). Returns percentage.
536536
*/
537-
typedef uint8_t M100Battery; // pack(1)
537+
typedef uint8_t LegacyBattery; // pack(1)
538+
539+
/*!
540+
* @brief struct for GPSInfo of data broadcast
541+
*
542+
* @note only work outside of simulation
543+
*/
544+
typedef struct LegacyGPSInfo
545+
{
546+
PositionTimeStamp time;
547+
int32_t longitude; /*!< 1/1.0e7deg */
548+
int32_t latitude; /*!< 1/1.0e7deg */
549+
int32_t HFSL; /*!< height above mean sea level (mm) */
550+
Vector3f velocityNED; /*!< cm/s */
551+
} LegacyGPSInfo; // pack(1)
538552

539553
#pragma pack()
540554

osdk-core/api/inc/dji_vehicle.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,12 @@ class Vehicle
203203
Version::FirmWare getFwVersion() const;
204204
char* getHwVersion() const;
205205
char* getHwSerialNum() const;
206+
bool isLegacyM600();
207+
bool isM100();
206208

207-
void setKey(const char* key);
209+
210+
211+
void setKey(const char* key);
208212
void setStopCond(bool stopCond);
209213
bool getStopCond();
210214
CircularBuffer* circularBuffer; //! @note not used yet

osdk-core/api/src/dji_ack.cpp

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -259,18 +259,18 @@ ACK::createTaskErrorCodeMap()
259259
/*
260260
* Supported in Matrice 100
261261
*/
262-
const std::pair<const uint32_t, const char*> M100TaskData[] = {
263-
std::make_pair(OpenProtocol::ErrorCode::ControlACK::M100Task::SUCCESS,
262+
const std::pair<const uint32_t, const char*> LegacyTaskData[] = {
263+
std::make_pair(OpenProtocol::ErrorCode::ControlACK::LegacyTask::SUCCESS,
264264
(const char*)"CONTROLLER_SUCCESS\n"),
265-
std::make_pair(OpenProtocol::ErrorCode::ControlACK::M100Task::FAIL,
265+
std::make_pair(OpenProtocol::ErrorCode::ControlACK::LegacyTask::FAIL,
266266
(const char*)"CONTROLLER_FAIL\n")
267267
};
268268

269269
const std::map<const uint32_t, const char*>
270-
ACK::createM100TaskErrorCodeMap()
270+
ACK::createLegacyTaskErrorCodeMap()
271271
{
272272
const std::map<const uint32_t, const char*> errorCodeMap(
273-
M100TaskData, M100TaskData + sizeof M100TaskData / sizeof M100TaskData[0]);
273+
LegacyTaskData, LegacyTaskData + sizeof LegacyTaskData / sizeof LegacyTaskData[0]);
274274
return errorCodeMap;
275275
}
276276

@@ -501,7 +501,7 @@ ACK::getError(ACK::ErrorCode ack)
501501
else if (memcmp(cmd, OpenProtocol::CMDSet::Control::setArm, sizeof(cmd)) == 0)
502502
{
503503
/*
504-
* SetArm command supported in Matrice 100
504+
* SetArm command supported in Matrice 100/ M600 old firmware
505505
*/
506506
return (ack.data == OpenProtocol::ErrorCode::ControlACK::SetArm::SUCCESS)
507507
? ACK::SUCCESS
@@ -514,7 +514,15 @@ ACK::getError(ACK::ErrorCode ack)
514514
}
515515
else if (memcmp(cmd, OpenProtocol::CMDSet::Control::task, sizeof(cmd)) == 0)
516516
{
517-
if (ack.info.version != Version::M100_31)
517+
if (ack.info.version == Version::FW(3,2,15,62))
518+
{
519+
//! ACKs supported in Matrice 600 old firmware
520+
return (ack.data ==
521+
OpenProtocol::ErrorCode::ControlACK::LegacyTask::SUCCESS)
522+
? ACK::SUCCESS
523+
: ACK::FAIL;
524+
}
525+
else if (ack.info.version != Version::M100_31)
518526
{
519527
return (ack.data == OpenProtocol::ErrorCode::ControlACK::Task::SUCCESS)
520528
? ACK::SUCCESS
@@ -524,7 +532,7 @@ ACK::getError(ACK::ErrorCode ack)
524532
{
525533
//! ACKs supported in Matrice 100
526534
return (ack.data ==
527-
OpenProtocol::ErrorCode::ControlACK::M100Task::SUCCESS)
535+
OpenProtocol::ErrorCode::ControlACK::LegacyTask::SUCCESS)
528536
? ACK::SUCCESS
529537
: ACK::FAIL;
530538
}
@@ -746,13 +754,17 @@ ACK::getCMDIDTaskMSG(ACK::ErrorCode ack)
746754
{
747755
std::map<const uint32_t, const char*> taskErrorCodeMap;
748756

749-
if (ack.info.version != Version::M100_31)
757+
if (ack.info.version == Version::FW(3,2,15,62))
758+
{
759+
taskErrorCodeMap = static_cast<std::map<const uint32_t, const char*>>(ACK::createLegacyTaskErrorCodeMap());
760+
}
761+
else if (ack.info.version == Version::M100_31)
750762
{
751-
taskErrorCodeMap = ACK::createTaskErrorCodeMap();
763+
taskErrorCodeMap = static_cast<std::map<const uint32_t, const char*>>(ACK::createLegacyTaskErrorCodeMap());
752764
}
753765
else
754766
{
755-
taskErrorCodeMap = ACK::createM100TaskErrorCodeMap();
767+
taskErrorCodeMap = static_cast<std::map<const uint32_t, const char*>>(ACK::createTaskErrorCodeMap());
756768
}
757769

758770
auto msg = taskErrorCodeMap.find(ack.data);

0 commit comments

Comments
 (0)