/*===================================================================== QGroundControl Open Source Ground Control Station (c) 2009 - 2014 QGROUNDCONTROL PROJECT This file is part of the QGROUNDCONTROL project QGROUNDCONTROL is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. QGROUNDCONTROL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QGROUNDCONTROL. If not, see . ======================================================================*/ #ifndef MOCKLINK_H #define MOCKLINK_H #include #include "MockLinkMissionItemHandler.h" #include "LinkInterface.h" #include "mavlink.h" /// @file /// @brief Mock implementation of a Link. /// /// @author Don Gagne class MockLink : public LinkInterface { Q_OBJECT public: MockLink(void); ~MockLink(void); // Virtuals from LinkInterface virtual int getId(void) const { return _linkId; } virtual QString getName(void) const { return _name; } virtual void requestReset(void){ } virtual bool isConnected(void) const { return _connected; } virtual qint64 getConnectionSpeed(void) const { return 100000000; } virtual bool connect(void); virtual bool disconnect(void); virtual qint64 bytesAvailable(void) { return 0; } signals: void error(const QString& errorMsg); /// @brief Used internally to move data to the thread. void _incomingBytes(const QByteArray bytes); public slots: virtual void writeBytes(const char *bytes, qint64 cBytes); protected slots: // FIXME: This should not be part of LinkInterface. It is an internal link implementation detail. virtual void readBytes(void); private slots: void _run1HzTasks(void); void _run10HzTasks(void); void _run50HzTasks(void); private: // QThread override virtual void run(void); // MockLink methods void _sendHeartBeat(void); void _handleIncomingBytes(const QByteArray bytes); void _handleIncomingNSHBytes(const char* bytes, int cBytes); void _handleIncomingMavlinkBytes(const uint8_t* bytes, int cBytes); void _loadParams(void); void _errorInvalidTargetSystem(int targetId); void _emitMavlinkMessage(const mavlink_message_t& msg); void _handleHeartBeat(const mavlink_message_t& msg); void _handleSetMode(const mavlink_message_t& msg); void _handleParamRequestList(const mavlink_message_t& msg); void _handleParamSet(const mavlink_message_t& msg); void _handleParamRequestRead(const mavlink_message_t& msg); void _handleMissionRequestList(const mavlink_message_t& msg); void _handleMissionRequest(const mavlink_message_t& msg); void _handleMissionItem(const mavlink_message_t& msg); MockLinkMissionItemHandler* _missionItemHandler; int _linkId; QString _name; bool _connected; uint8_t _vehicleSystemId; uint8_t _vehicleComponentId; bool _inNSH; bool _mavlinkStarted; typedef QMap ParamMap_t; ParamMap_t _parameters; uint16_t _cParameters; typedef QMap MissionList_t; MissionList_t _missionItems; uint8_t _mavMode; uint8_t _mavState; }; #endif