10 changed files with 225 additions and 23 deletions
@ -0,0 +1,5 @@ |
|||||||
|
moc_* |
||||||
|
*.o |
||||||
|
Makefile |
||||||
|
Makefile.Debug |
||||||
|
Makefile.Release |
@ -0,0 +1,114 @@ |
|||||||
|
#include "PxMAV.h" |
||||||
|
|
||||||
|
#include <QtCore> |
||||||
|
|
||||||
|
PxMAV::PxMAV() : |
||||||
|
UAS(NULL, 0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
PxMAV::PxMAV(MAVLinkProtocol* mavlink, int id) : |
||||||
|
UAS(mavlink, id) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is called by MAVLink once a complete, uncorrupted (CRC check valid) |
||||||
|
* mavlink packet is received. |
||||||
|
* |
||||||
|
* @param link Hardware link the message came from (e.g. /dev/ttyUSB0 or UDP port). |
||||||
|
* messages can be sent back to the system via this link |
||||||
|
* @param message MAVLink message, as received from the MAVLink protocol stack |
||||||
|
*/ |
||||||
|
void PxMAV::receiveMessage(LinkInterface* link, mavlink_message_t message) |
||||||
|
{ |
||||||
|
// Let UAS handle the default message set
|
||||||
|
UAS::receiveMessage(link, message); |
||||||
|
mavlink_message_t* msg = &message; |
||||||
|
|
||||||
|
//qDebug() << "PX RECEIVED" << msg->sysid << msg->compid << msg->msgid;
|
||||||
|
|
||||||
|
|
||||||
|
// Handle your special messages
|
||||||
|
switch (msg->msgid) |
||||||
|
{ |
||||||
|
case MAVLINK_MSG_ID_WATCHDOG_HEARTBEAT: |
||||||
|
{ |
||||||
|
mavlink_watchdog_heartbeat_t payload; |
||||||
|
mavlink_msg_watchdog_heartbeat_decode(msg, &payload); |
||||||
|
|
||||||
|
emit watchdogReceived(this->uasId, payload.watchdog_id, payload.process_count); |
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
case MAVLINK_MSG_ID_WATCHDOG_PROCESS_INFO: |
||||||
|
{ |
||||||
|
mavlink_watchdog_process_info_t payload; |
||||||
|
mavlink_msg_watchdog_process_info_decode(msg, &payload); |
||||||
|
|
||||||
|
emit processReceived(this->uasId, payload.watchdog_id, payload.process_id, QString((const char*)payload.name), QString((const char*)payload.arguments), payload.timeout); |
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
case MAVLINK_MSG_ID_WATCHDOG_PROCESS_STATUS: |
||||||
|
{ |
||||||
|
mavlink_watchdog_process_status_t payload; |
||||||
|
mavlink_msg_watchdog_process_status_decode(msg, &payload); |
||||||
|
emit processChanged(this->uasId, payload.watchdog_id, payload.process_id, payload.state, (payload.muted == 1) ? true : false, payload.crashes, payload.pid); |
||||||
|
} |
||||||
|
break; |
||||||
|
case MAVLINK_MSG_ID_DEBUG_VECT: |
||||||
|
{ |
||||||
|
mavlink_debug_vect_t vect; |
||||||
|
mavlink_msg_debug_vect_decode(msg, &vect); |
||||||
|
QString str((const char*)vect.name); |
||||||
|
emit valueChanged(uasId, str+".x", vect.x, MG::TIME::getGroundTimeNow()); |
||||||
|
emit valueChanged(uasId, str+".y", vect.y, MG::TIME::getGroundTimeNow()); |
||||||
|
emit valueChanged(uasId, str+".z", vect.z, MG::TIME::getGroundTimeNow()); |
||||||
|
} |
||||||
|
break; |
||||||
|
case MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE: |
||||||
|
{ |
||||||
|
mavlink_vision_position_estimate_t pos; |
||||||
|
mavlink_msg_vision_position_estimate_decode(&message, &pos); |
||||||
|
quint64 time = getUnixTime(pos.usec); |
||||||
|
emit valueChanged(uasId, "vis. time", pos.usec, time); |
||||||
|
emit valueChanged(uasId, "vis. roll", pos.roll, time); |
||||||
|
emit valueChanged(uasId, "vis. pitch", pos.pitch, time); |
||||||
|
emit valueChanged(uasId, "vis. yaw", pos.yaw, time); |
||||||
|
emit valueChanged(uasId, "vis. x", pos.x, time); |
||||||
|
emit valueChanged(uasId, "vis. y", pos.y, time); |
||||||
|
emit valueChanged(uasId, "vis. z", pos.z, time); |
||||||
|
emit valueChanged(uasId, "vis. vx", pos.vx, time); |
||||||
|
emit valueChanged(uasId, "vis. vy", pos.vy, time); |
||||||
|
emit valueChanged(uasId, "vis. vz", pos.vz, time); |
||||||
|
emit valueChanged(uasId, "vis. vyaw", pos.vyaw, time); |
||||||
|
// Set internal state
|
||||||
|
if (!positionLock) |
||||||
|
{ |
||||||
|
// If position was not locked before, notify positive
|
||||||
|
// GAudioOutput::instance()->notifyPositive();
|
||||||
|
} |
||||||
|
positionLock = true; |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
// Do nothing
|
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void PxMAV::sendProcessCommand(int watchdogId, int processId, unsigned int command) |
||||||
|
{ |
||||||
|
mavlink_watchdog_command_t payload; |
||||||
|
payload.target_system_id = uasId; |
||||||
|
payload.watchdog_id = watchdogId; |
||||||
|
payload.process_id = processId; |
||||||
|
payload.command_id = (uint8_t)command; |
||||||
|
|
||||||
|
mavlink_message_t msg; |
||||||
|
mavlink_msg_watchdog_command_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &payload); |
||||||
|
sendMessage(msg); |
||||||
|
} |
||||||
|
|
||||||
|
Q_EXPORT_PLUGIN2(pixhawk_plugins, PxMAV) |
@ -0,0 +1,24 @@ |
|||||||
|
#ifndef PXMAV_H |
||||||
|
#define PXMAV_H |
||||||
|
|
||||||
|
#include "UAS.h" |
||||||
|
|
||||||
|
class PxMAV : public UAS |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
Q_INTERFACES(UASInterface) |
||||||
|
public: |
||||||
|
PxMAV(MAVLinkProtocol* mavlink, int id); |
||||||
|
PxMAV(); |
||||||
|
public slots: |
||||||
|
/** @brief Receive a MAVLink message from this MAV */ |
||||||
|
void receiveMessage(LinkInterface* link, mavlink_message_t message); |
||||||
|
/** @brief Send a command to an onboard process */ |
||||||
|
void sendProcessCommand(int watchdogId, int processId, unsigned int command); |
||||||
|
signals: |
||||||
|
void watchdogReceived(int systemId, int watchdogId, unsigned int processCount); |
||||||
|
void processReceived(int systemId, int watchdogId, int processId, QString name, QString arguments, int timeout); |
||||||
|
void processChanged(int systemId, int watchdogId, int processId, int state, bool muted, int crashed, int pid); |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // PXMAV_H
|
@ -0,0 +1,22 @@ |
|||||||
|
# This plugin is also identified by this line in PxMAV.cc |
||||||
|
# Q_EXPORT_PLUGIN2(pixhawk_plugins, PxMAV) |
||||||
|
|
||||||
|
include(../../qgroundcontrol.pri) |
||||||
|
|
||||||
|
TEMPLATE = lib |
||||||
|
CONFIG += plugin |
||||||
|
QT += phonon |
||||||
|
INCLUDEPATH += ../. \ |
||||||
|
../../../mavlink/include \ |
||||||
|
../../MAVLink/include \ |
||||||
|
../../mavlink/include \ |
||||||
|
../uas \ |
||||||
|
../comm |
||||||
|
HEADERS = PxMAV.h |
||||||
|
SOURCES = PxMAV.cc \ |
||||||
|
../uas/UAS.cc \ |
||||||
|
../GAudioOutput.cc \ |
||||||
|
../comm/MAVLinkProtocol.cc \ |
||||||
|
../uas/UASManager.cc |
||||||
|
TARGET = $$qtLibraryTarget(pixhawk_plugins) |
||||||
|
DESTDIR = ../../plugins |
Loading…
Reference in new issue