Onboard-SDK-ROS
Public Member Functions | Static Public Member Functions | List of all members
DJI::onboardSDK::CoreAPI Class Reference

CoreAPI implements core Open Protocol communication between M100/M600/A3 and your onboard embedded platform. More...

#include <DJI_API.h>

Public Member Functions

void sendPoll (void)
 
void readPoll (void)
 
void callbackPoll (void)
 
void byteHandler (const uint8_t in_data)
 
void byteStreamHandler (uint8_t *buffer, size_t size)
 
 CoreAPI (HardDriver *Driver=0, Version SDKVersion=0, bool userCallbackThread=false, CallBack userRecvCallback=0, UserData userData=0)
 
 CoreAPI (HardDriver *Driver, Version SDKVersion, CallBackHandler userRecvCallback, bool userCallbackThread=false)
 
void ack (req_id_t req_id, unsigned char *ackdata, int len)
 
void activate (ActivateData *data, CallBack callback=0, UserData userData=0)
 Activation Control. More...
 
void setControl (bool enable, CallBack callback=0, UserData userData=0)
 
void setActivation (bool isActivated)
 Activation Control. More...
 
ActivateData getAccountData () const
 Activation Control. More...
 
void setAccountData (const ActivateData &value)
 Activation Control.
 
void sendToMobile (uint8_t *data, uint8_t len, CallBack callback=0, UserData userData=0)
 
void setBroadcastFreq (uint8_t *dataLenIs16, CallBack callback=0, UserData userData=0)
 
void setSessionStatus (uint32_t usageFlag)
 
uint32_t getSessionStatus ()
 
void setSyncFreq (uint32_t freqInHz)
 
void setKey (const char *key)
 
HardDrivergetDriver () const
 
Version getFwVersion () const
 
void setBroadcastCallback (CallBackHandler callback)
 
void setFromMobileCallback (CallBackHandler FromMobileEntrance)
 
void setBroadcastCallback (CallBack handler, UserData userData=0)
 
void setFromMobileCallback (CallBack handler, UserData userData=0)
 
void setMisssionCallback (CallBackHandler callback)
 
void setHotPointCallback (CallBackHandler callback)
 
void setWayPointCallback (CallBackHandler callback)
 
void setFollowCallback (CallBackHandler callback)
 
void setWayPointEventCallback (CallBackHandler callback)
 
void setMisssionCallback (CallBack handler, UserData userData=0)
 
void setHotPointCallback (CallBack handler, UserData userData=0)
 
void setWayPointCallback (CallBack handler, UserData userData=0)
 
void setFollowCallback (CallBack handler, UserData userData=0)
 
void setWayPointEventCallback (CallBack handler, UserData userData=0)
 
bool decodeACKStatus (unsigned short ack)
 
bool decodeMissionStatus (uint8_t ack)
 
SDKFilter getFilter () const
 Open Protocol Control. More...
 
bool getHotPointData () const
 HotPoint Mission Control.
 
bool getWayPointData () const
 WayPoint Mission Control.
 
bool getFollowData () const
 
void setHotPointData (bool value)
 HotPoint Mission Control.
 
void setWayPointData (bool value)
 WayPoint Mission Control.
 
void setFollowData (bool value)
 Follow Me Mission Control.
 
void setDriver (HardDriver *value)
 
void setVersion (const Version &value)
 
void send (unsigned char session_mode, unsigned char is_enc, CMD_SET cmd_set, unsigned char cmd_id, void *pdata, int len, CallBack ack_callback, int timeout=0, int retry_time=1)
 
void send (unsigned char session_mode, bool is_enc, CMD_SET cmd_set, unsigned char cmd_id, void *pdata, size_t len, int timeout=0, int retry_time=1, CallBack ack_handler=0, UserData userData=0)
 
void send (Command *parameter)
 
void getDroneVersion (CallBack callback=0, UserData userData=0)
 
BroadcastData getBroadcastData () const
 
TimeStampData getTime () const
 
FlightStatus getFlightStatus () const
 
CtrlInfoData getCtrlInfo () const
 
BatteryData getBatteryCapacity () const
 

Static Public Member Functions

static void activateCallback (CoreAPI *api, Header *protocolHeader, UserData userData=0)
 
static void getDroneVersionCallback (CoreAPI *api, Header *protocolHeader, UserData userData=0)
 
static void setControlCallback (CoreAPI *api, Header *protocolHeader, UserData userData=0)
 
static void sendToMobileCallback (CoreAPI *api, Header *protocolHeader, UserData userData=0)
 
static void setFrequencyCallback (CoreAPI *api, Header *protocolHeader, UserData userData=0)
 

Detailed Description

CoreAPI implements core Open Protocol communication between M100/M600/A3 and your onboard embedded platform.

Remarks
API is running on two poll threads:
  • sendPoll();
  • readPoll();
    Please make sure both threads operate correctly.
Note
if you can read data in a interrupt, try to pass data through byteHandler() or byteStreamHandler()

Member Function Documentation

void CoreAPI::activate ( ActivateData data,
CallBack  callback = 0,
UserData  userData = 0 
)

Activation Control.

Send activation request to your flight controller to check if:
a) your application registered in your developer account
b) API Control enabled in the Assistant software

Proceed to programming if activation successful.

Note
for ios verification
void DJI::onboardSDK::CoreAPI::byteHandler ( const uint8_t  in_data)
Todo:
Pipeline refactoring
Note
Just think a command as below

[123456HHD1234567===HHHH------------——] — is buf un-used part

if after recv full of above, but crc failed, we throw all data? NO! Just throw ONE BYTE, we move like below

[123456HH------------——D1234567===HHHH]

Use the buffer high part to re-loop, try to find a new command

if new cmd also fail, and buf like below

[56HHD1234567----------------——===HHHH]

throw one byte, buf looks like

[6HHD123-----------------——4567===HHHH]

the command tail part move to buffer right

Note
because reuse_index maybe re-located, so reuse_index must be always point to un-used index re-loop the buffered data
void CoreAPI::byteStreamHandler ( uint8_t *  buffer,
size_t  size 
)
Todo:
Implement stream handler
void CoreAPI::callbackPoll ( void  )
Todo:
Implement callback poll handler
Todo:
Implement callback poll here
bool CoreAPI::decodeACKStatus ( unsigned short  ack)

ACK decoder.

bool DJI::onboardSDK::CoreAPI::decodeMissionStatus ( uint8_t  ack)

Flight mission decoder.

Todo:
Fix memory leak issue
ActivateData CoreAPI::getAccountData ( ) const

Activation Control.

Get Activation information

BatteryData DJI::onboardSDK::CoreAPI::getBatteryCapacity ( ) const

Get battery capacity.

Note
Flight missions will not perform if battery capacity is under %50. If battery capacity drops below %50 during a flight mission, aircraft will automatically "go home".
BroadcastData DJI::onboardSDK::CoreAPI::getBroadcastData ( ) const

Get broadcasted data values from flight controller.

HardDriver * CoreAPI::getDriver ( ) const

Get serial device handler.

void CoreAPI::getDroneVersion ( CallBack  callback = 0,
UserData  userData = 0 
)

Get aircraft version.

Note
You can query your flight controller prior to activation.
SDKFilter CoreAPI::getFilter ( ) const

Open Protocol Control.

Get Open Protocol packet information.

FlightStatus CoreAPI::getFlightStatus ( ) const

Get flight status at any time during a flight mission.

Version CoreAPI::getFwVersion ( ) const

Get SDK version

TimeStampData CoreAPI::getTime ( ) const

Get timestamp from flight controller.

Note
Make sure you are using appropriate timestamp broadcast frequency. See setBroadcastFreq
function for more details.
void CoreAPI::send ( unsigned char  session_mode,
unsigned char  is_enc,
CMD_SET  cmd_set,
unsigned char  cmd_id,
void *  pdata,
int  len,
CallBack  ack_callback,
int  timeout = 0,
int  retry_time = 1 
)
Remarks
void send() - core overloaded function which can be invoked in three different ways.

void send(CallbackCommand *parameter) - main interface
(other two overloaded functions are builded on the base of this function)

Please be careful when passing in UserData, there might have memory leak problems.
Parameters
timeout
Note
Compatible for DJI_APP_Pro_send
void CoreAPI::send ( unsigned char  session_mode,
bool  is_enc,
CMD_SET  cmd_set,
unsigned char  cmd_id,
void *  pdata,
size_t  len,
int  timeout = 0,
int  retry_time = 1,
CallBack  ack_handler = 0,
UserData  userData = 0 
)
Parameters
userData
Note
Better interface entrance
void CoreAPI::send ( Command parameter)
Note
Main interface
void CoreAPI::sendPoll ( void  )
Note
Add auto resendpoll
void CoreAPI::setActivation ( bool  isActivated)

Activation Control.

Is your aircraft already activated ?

void CoreAPI::setBroadcastFreq ( uint8_t *  dataLenIs16,
CallBack  callback = 0,
UserData  userData = 0 
)

Set broadcast frequency.

Remarks
We offer 12 frequency channels to customize:

0 - Timestamp
1 - Attitude Quaterniouns
2 - Acceleration
3 - Velocity (Ground Frame)
4 - Angular Velocity (Body Frame)
5 - Position
6 - Magnetometer
7 - RC Channels Data
8 - Gimbal Data
9 - Flight Status
10 - Battery Level
11 - Control Information
Note
see also enum BROADCAST_FREQ in DJI_API.h
void CoreAPI::setDriver ( HardDriver value)

Initialize serial device

void CoreAPI::setVersion ( const Version value)

Set SDK version.


The documentation for this class was generated from the following files: