QGCSerialPortInfo.h 4.92 KB
Newer Older
1 2 3 4 5 6 7 8 9
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

10

11 12
#ifndef QGCSerialPortInfo_H
#define QGCSerialPortInfo_H
13

14 15 16 17 18 19 20 21 22
#ifdef __android__
    #include "qserialportinfo.h"
#else
    #include <QSerialPortInfo>
#endif

#include "QGCLoggingCategory.h"

Q_DECLARE_LOGGING_CATEGORY(QGCSerialPortInfoLog)
23

24 25 26 27
/// QGC's version of Qt QSerialPortInfo. It provides additional information about board types
/// that QGC cares about.
class QGCSerialPortInfo : public QSerialPortInfo
{
28
public:
29
    typedef enum {
30 31
        BoardTypePixhawk,
        BoardTypeSiKRadio,
32
        BoardTypePX4Flow,
33
        BoardTypeOpenPilot,
34
        BoardTypeRTKGPS,
35 36 37 38 39
        BoardTypeUnknown
    } BoardType_t;

    // Vendor and products ids for the boards we care about

40 41 42
    static const int px4VendorId =                          9900;   ///< Vendor ID for all Pixhawk boards and PX4 Flow
    static const int pixhawkFMUV4ProductId =                18;     ///< Product ID for Pixhawk V4 board
    static const int pixhawkFMUV4ProProductId =             19;     ///< Product ID for Pixhawk V4 Pro board
Don Gagne's avatar
Don Gagne committed
43 44 45
    static const int pixhawkFMUV2ProductId =                17;     ///< Product ID for Pixhawk V2 board
    static const int pixhawkFMUV2OldBootloaderProductId =   22;     ///< Product ID for Bootloader on older Pixhawk V2 boards
    static const int pixhawkFMUV1ProductId =                16;     ///< Product ID for PX4 FMU V1 board
46

Don Gagne's avatar
Don Gagne committed
47
    static const int AeroCoreProductId =                    4097;   ///< Product ID for the AeroCore board
48
    
Don Gagne's avatar
Don Gagne committed
49
    static const int px4FlowProductId =                     21;     ///< Product ID for PX4 Flow board
50

Henry Zhang's avatar
Henry Zhang committed
51
    static const int MindPXFMUV2ProductId =                 48;     ///< Product ID for the MindPX V2 board
52 53
    static const int TAPV1ProductId =                       64;     ///< Product ID for the TAP V1 board
    static const int ASCV1ProductId =                       65;     ///< Product ID for the ASC V1 board
Henry Zhang's avatar
Henry Zhang committed
54

Don Gagne's avatar
Don Gagne committed
55 56
    static const int threeDRRadioVendorId =                 1027;   ///< Vendor ID for 3DR Radio
    static const int threeDRRadioProductId =                24597;  ///< Product ID for 3DR Radio
57

Don Gagne's avatar
Don Gagne committed
58 59 60
    static const int siLabsRadioVendorId =                  0x10c4; ///< Vendor ID for SILabs Radio
    static const int siLabsRadioProductId =                 0xea60; ///< Product ID for SILabs Radio

61 62 63
    static const int ubloxRTKVendorId =                     5446;   ///< Vendor ID for ublox RTK
    static const int ubloxRTKProductId =                    424;    ///< Product ID for ublox RTK

64 65 66 67 68 69
    static const int openpilotVendorId =                    0x20A0; ///< Vendor ID for OpenPilot
    static const int revolutionProductId =                  0x415E; ///< Product ID for OpenPilot Revolution
    static const int oplinkProductId =                      0x415C; ///< Product ID for OpenPilot OPLink
    static const int sparky2ProductId =                     0x41D0; ///< Product ID for Taulabs Sparky2
    static const int CC3DProductId =                        0x415D; ///< Product ID for OpenPilot CC3D

Don Gagne's avatar
Don Gagne committed
70
    QGCSerialPortInfo(void);
71 72 73 74 75
    QGCSerialPortInfo(const QSerialPort & port);

    /// Override of QSerialPortInfo::availablePorts
    static QList<QGCSerialPortInfo> availablePorts(void);

76
    bool getBoardInfo(BoardType_t& boardType, QString& name) const;
77

78 79 80
    /// @return true: we can flash this board type
    bool canFlash(void);

81 82 83
    /// @return true: Board is currently in bootloader
    bool isBootloader(void) const;

Don Gagne's avatar
Don Gagne committed
84
private:
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    typedef struct {
        const char* classString;
        BoardType_t boardType;
    } BoardClassString2BoardType_t;

    typedef struct {
        int         vendorId;
        int         productId;
        BoardType_t boardType;
        QString     name;
    } BoardInfo_t;

    typedef struct {
        QString     regExp;
        BoardType_t boardType;
        bool        androidOnly;
    } BoardFallback_t;

    static void _loadJsonData(void);
    static BoardType_t _boardClassStringToType(const QString& boardClass);
    static QString _boardTypeToString(BoardType_t boardType);

    static bool         _jsonLoaded;
    static const char*  _jsonFileTypeValue;
    static const char*  _jsonBoardInfoKey;
    static const char*  _jsonBoardFallbackKey;
    static const char*  _jsonVendorIDKey;
    static const char*  _jsonProductIDKey;
    static const char*  _jsonBoardClassKey;
    static const char*  _jsonNameKey;
    static const char*  _jsonRegExpKey;
    static const char*  _jsonAndroidOnlyKey;

    static const BoardClassString2BoardType_t   _rgBoardClass2BoardType[BoardTypeUnknown];
    static QList<BoardInfo_t>                   _boardInfoList;
    static QList<BoardFallback_t>               _boardFallbackList;
121 122
};

Don Gagne's avatar
Don Gagne committed
123
#endif