Browse Source

Start possible Solo video

QGC4.4
DonLakeFlyer 7 years ago
parent
commit
4f8deb4943
  1. 8
      src/FirmwarePlugin/APM/APMFirmwarePlugin.cc
  2. 2
      src/FirmwarePlugin/APM/APMFirmwarePlugin.h

8
src/FirmwarePlugin/APM/APMFirmwarePlugin.cc

@ -366,6 +366,8 @@ bool APMFirmwarePlugin::_handleIncomingStatusText(Vehicle* vehicle, mavlink_mess
supportedMinorNumber = 4; supportedMinorNumber = 4;
break; break;
case MAV_TYPE_QUADROTOR: case MAV_TYPE_QUADROTOR:
// Start TCP video handshake with ARTOO in case it's a Solo running ArduPilot firmware
_soloVideoHandshake(vehicle, false /* originalSoloFirmware */);
case MAV_TYPE_COAXIAL: case MAV_TYPE_COAXIAL:
case MAV_TYPE_HELICOPTER: case MAV_TYPE_HELICOPTER:
case MAV_TYPE_SUBMARINE: case MAV_TYPE_SUBMARINE:
@ -420,7 +422,7 @@ bool APMFirmwarePlugin::_handleIncomingStatusText(Vehicle* vehicle, mavlink_mess
_setInfoSeverity(message); _setInfoSeverity(message);
// Start TCP video handshake with ARTOO // Start TCP video handshake with ARTOO
_soloVideoHandshake(vehicle); _soloVideoHandshake(vehicle, true /* originalSoloFirmware */);
} else if (messageText.contains(APM_FRAME_REXP)) { } else if (messageText.contains(APM_FRAME_REXP)) {
// We need to parse the Frame: message in order to determine whether the motors are coaxial or not // We need to parse the Frame: message in order to determine whether the motors are coaxial or not
QRegExp frameTypeRegex("^Frame: (\\S*)"); QRegExp frameTypeRegex("^Frame: (\\S*)");
@ -750,14 +752,16 @@ bool APMFirmwarePlugin::isGuidedMode(const Vehicle* vehicle) const
return vehicle->flightMode() == "Guided"; return vehicle->flightMode() == "Guided";
} }
void APMFirmwarePlugin::_soloVideoHandshake(Vehicle* vehicle) void APMFirmwarePlugin::_soloVideoHandshake(Vehicle* vehicle, bool originalSoloFirmware)
{ {
Q_UNUSED(vehicle); Q_UNUSED(vehicle);
QTcpSocket* socket = new QTcpSocket(); QTcpSocket* socket = new QTcpSocket();
socket->connectToHost(_artooIP, _artooVideoHandshakePort); socket->connectToHost(_artooIP, _artooVideoHandshakePort);
if (originalSoloFirmware) {
QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QTcpSocket::error), this, &APMFirmwarePlugin::_artooSocketError); QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QTcpSocket::error), this, &APMFirmwarePlugin::_artooSocketError);
}
} }
void APMFirmwarePlugin::_artooSocketError(QAbstractSocket::SocketError socketError) void APMFirmwarePlugin::_artooSocketError(QAbstractSocket::SocketError socketError)

2
src/FirmwarePlugin/APM/APMFirmwarePlugin.h

@ -125,7 +125,7 @@ private:
bool _handleIncomingStatusText(Vehicle* vehicle, mavlink_message_t* message); bool _handleIncomingStatusText(Vehicle* vehicle, mavlink_message_t* message);
void _handleIncomingHeartbeat(Vehicle* vehicle, mavlink_message_t* message); void _handleIncomingHeartbeat(Vehicle* vehicle, mavlink_message_t* message);
void _handleOutgoingParamSet(Vehicle* vehicle, LinkInterface* outgoingLink, mavlink_message_t* message); void _handleOutgoingParamSet(Vehicle* vehicle, LinkInterface* outgoingLink, mavlink_message_t* message);
void _soloVideoHandshake(Vehicle* vehicle); void _soloVideoHandshake(Vehicle* vehicle, bool originalSoloFirmware);
bool _guidedModeTakeoff(Vehicle* vehicle, double altitudeRel); bool _guidedModeTakeoff(Vehicle* vehicle, double altitudeRel);
// Any instance data here must be global to all vehicles // Any instance data here must be global to all vehicles

Loading…
Cancel
Save