mavHeartbeat.h
Go to the documentation of this file.
00001 /*****************************************************************************
00002  * @Brief     Heartbeat module. Mav-depended and ROS-free
00003  * @Version   0.3.0
00004  * @Author    Chris Liu
00005  * @Created   2015/11/16
00006  * @Modified  2015/12/25
00007  *****************************************************************************/
00008 
00009 #ifndef _DJI2MAV_MAVHEARTBEAT_H_
00010 #define _DJI2MAV_MAVHEARTBEAT_H_
00011 
00012 
00013 #include <mavlink/common/mavlink.h>
00014 #include <new>
00015 #include <string>
00016 #include <cstdarg>
00017 
00018 #include "dji_sdk_dji2mav/modules/mavModule.h"
00019 #include "dji_sdk_dji2mav/log.h"
00020 
00021 namespace dji2mav {
00022 
00023     class MavHeartbeat : public MavModule {
00024         public:
00032             MavHeartbeat(MavHandler &handler, std::string name, 
00033                     uint16_t gcsNum, ...) : MavModule(handler, name, 4096) {
00034 
00035                 DJI2MAV_DEBUG("Going to construct Heartbeat module with name " 
00036                         "%s and gcsNum %u...", name.c_str(), gcsNum);
00037 
00038                 setHeartbeatData(MAV_TYPE_QUADROTOR, MAV_AUTOPILOT_GENERIC, 
00039                         MAV_MODE_GUIDED_DISARMED, 0, MAV_STATE_STANDBY, 3);
00040 
00041                 setHeartbeatHook(NULL);
00042 
00043                 va_list arg;
00044                 va_start(arg, gcsNum);
00045                 if(1 == gcsNum) {
00046                     setMasterGcsIdx( (uint16_t)va_arg(arg, int) );
00047                 } else {
00048                     for(uint16_t i = 0; i < gcsNum; ++i) {
00049                         employGcsSender( (uint16_t)va_arg(arg, int) );
00050                     }
00051                 }
00052                 va_end(arg);
00053 
00054                 //TODO: Set the MOI here
00055 
00056                 DJI2MAV_DEBUG("...finish constructing Heartbeat module.");
00057 
00058             }
00059 
00060 
00061             ~MavHeartbeat() {
00062                 DJI2MAV_DEBUG("Going to destruct Heartbeat module...");
00063                 DJI2MAV_DEBUG("...finish destructing Heartbeat module.");
00064             }
00065 
00066 
00076             inline void setHeartbeatData(uint8_t mavType, 
00077                     uint8_t mavAutopilot, uint8_t mavMode, 
00078                     uint32_t customMode, uint8_t mavStatus, 
00079                     uint8_t mavVersion) {
00080 
00081                 m_hbMsg.type = mavType;
00082                 m_hbMsg.autopilot = mavAutopilot;
00083                 m_hbMsg.base_mode = mavMode;
00084                 m_hbMsg.custom_mode = customMode;
00085                 m_hbMsg.system_status = mavStatus;
00086                 m_hbMsg.mavlink_version = mavVersion;
00087 
00088             }
00089 
00090 
00095             inline void setType(uint8_t mavType) {
00096                 m_hbMsg.type = mavType;
00097             }
00098 
00099 
00104             inline void setAutopilot(uint8_t mavAutopilot) {
00105                 m_hbMsg.autopilot = mavAutopilot;
00106             }
00107 
00108 
00113             inline void setBaseMode(uint8_t mavMode) {
00114                 m_hbMsg.base_mode = mavMode;
00115             }
00116 
00117 
00122             inline void setCustomMode(uint32_t customMode) {
00123                 m_hbMsg.custom_mode = customMode;
00124             }
00125 
00126 
00131             inline void setSystemStatus(uint8_t mavStatus) {
00132                 m_hbMsg.system_status = mavStatus;
00133             }
00134 
00135 
00140             inline void setMavlinkVersion(uint8_t mavVersion) {
00141                 m_hbMsg.mavlink_version = mavVersion;
00142             }
00143 
00144 
00150             bool sendHeartbeatToGcs(uint16_t gcsIdx) {
00151 
00152                 mavlink_msg_heartbeat_encode(getMySysid(), 
00153                         MAV_COMP_ID_ALL, &m_sendMsg, &m_hbMsg);
00154 
00155                 if( sendMsgToGcs(gcsIdx, m_sendMsg) ) {
00156                     return true;
00157                 } else {
00158                     DJI2MAV_ERROR("Fail to send Heartbeat to GCS #%u!", gcsIdx);
00159                     return false;
00160                 }
00161 
00162             }
00163 
00164 
00169             bool sendHeartbeatToAll() {
00170 
00171                 mavlink_msg_heartbeat_encode(getMySysid(),      
00172                         MAV_COMP_ID_ALL, &m_sendMsg, &m_hbMsg);
00173 
00174                 if( sendMsgToAll(m_sendMsg) ) {
00175                     return true;
00176                 } else {
00177                     DJI2MAV_ERROR("Fail to send Heartbeat to some GCS!");
00178                     return false;
00179                 }
00180 
00181             }
00182 
00183 
00189             void reactToHeartbeat(uint16_t gcsIdx, const mavlink_message_t* msg) {
00190                 if(NULL != m_hook) {
00191                     m_hook();
00192                 }
00193             }
00194 
00195 
00200             inline void setHeartbeatHook( void (*func)() ) {
00201                 m_hook = func;
00202             }
00203 
00204 
00209             void passivelyReceive(mavlink_message_t &msg) {
00210             }
00211 
00212 
00216             void activelySend() {
00217                 sendHeartbeatToAll();
00218                 sleep(1); //1Hz
00219             }
00220 
00221 
00222         private:
00223             mavlink_message_t m_sendMsg;
00224             mavlink_heartbeat_t m_hbMsg;
00225 
00226             void (*m_hook)();
00227 
00228     };
00229 
00230 } //namespace dji2mav
00231 
00232 
00233 #endif


dji_sdk_dji2mav
Author(s):
autogenerated on Thu Jun 6 2019 17:55:34