QGCSerialPortInfo.h 5.03 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
    static const int auavx2_1FMUV2ProductId =               33;     ///< Product ID for AUAV X2.1 FMU V2 board
47

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

Henry Zhang's avatar
Henry Zhang committed
52
    static const int MindPXFMUV2ProductId =                 48;     ///< Product ID for the MindPX V2 board
53 54
    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
55

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

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

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

65 66 67 68 69 70
    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
71
    QGCSerialPortInfo(void);
72 73 74 75 76
    QGCSerialPortInfo(const QSerialPort & port);

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

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

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

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

Don Gagne's avatar
Don Gagne committed
85
private:
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 121
    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;
122 123
};

Don Gagne's avatar
Don Gagne committed
124
#endif