http://www.rcgroups.com/forums/showthread.php?t=1995704
Use the following image to get GPS signal and supply:
NazaDecoderLib.h@1:4eadcb718c8b, 2014-11-28 (annotated)
- Committer:
- garfield38
- Date:
- Fri Nov 28 17:39:38 2014 +0000
- Revision:
- 1:4eadcb718c8b
- Parent:
- 0:b0ba4e08a18c
- Child:
- 2:de84f8a0a706
Ready for use
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
garfield38 | 0:b0ba4e08a18c | 1 | /* |
garfield38 | 0:b0ba4e08a18c | 2 | DJI Naza (v1, v1 Lite, V2) data decoder library |
garfield38 | 0:b0ba4e08a18c | 3 | (c) Pawelsky 20141109 |
garfield38 | 0:b0ba4e08a18c | 4 | Not for commercial use |
garfield38 | 0:b0ba4e08a18c | 5 | |
garfield38 | 0:b0ba4e08a18c | 6 | Refer to naza_decoder_wiring.jpg diagram for proper connection |
garfield38 | 1:4eadcb718c8b | 7 | http://www.rcgroups.com/forums/showthread.php?t=1995704 |
garfield38 | 0:b0ba4e08a18c | 8 | |
garfield38 | 0:b0ba4e08a18c | 9 | */ |
garfield38 | 0:b0ba4e08a18c | 10 | |
garfield38 | 0:b0ba4e08a18c | 11 | #ifndef __NAZA_DECODER_LIB_H__ |
garfield38 | 0:b0ba4e08a18c | 12 | #define __NAZA_DECODER_LIB_H__ |
garfield38 | 0:b0ba4e08a18c | 13 | |
garfield38 | 0:b0ba4e08a18c | 14 | #include "stdint.h" |
garfield38 | 0:b0ba4e08a18c | 15 | |
garfield38 | 0:b0ba4e08a18c | 16 | #define NAZA_MESSAGE_NONE 0x00 |
garfield38 | 0:b0ba4e08a18c | 17 | #define NAZA_MESSAGE_GPS 0x10 |
garfield38 | 0:b0ba4e08a18c | 18 | #define NAZA_MESSAGE_COMPASS 0x20 |
garfield38 | 0:b0ba4e08a18c | 19 | |
garfield38 | 1:4eadcb718c8b | 20 | /** Naza Decoder Class(es) |
garfield38 | 1:4eadcb718c8b | 21 | */ |
garfield38 | 0:b0ba4e08a18c | 22 | class NazaDecoderLib |
garfield38 | 0:b0ba4e08a18c | 23 | { |
garfield38 | 0:b0ba4e08a18c | 24 | public: |
garfield38 | 0:b0ba4e08a18c | 25 | typedef enum { NO_FIX = 0, FIX_2D = 2, FIX_3D = 3, FIX_DGPS = 4 } fixType_t; |
garfield38 | 0:b0ba4e08a18c | 26 | |
garfield38 | 1:4eadcb718c8b | 27 | /** Create a NazaDecoderLib object receiving serial data byte |
garfield38 | 1:4eadcb718c8b | 28 | */ |
garfield38 | 0:b0ba4e08a18c | 29 | NazaDecoderLib(); |
garfield38 | 0:b0ba4e08a18c | 30 | |
garfield38 | 1:4eadcb718c8b | 31 | uint8_t decode(uint8_t input); |
garfield38 | 1:4eadcb718c8b | 32 | void getDebug(RawSerial &s, char* buf); |
garfield38 | 1:4eadcb718c8b | 33 | /** Return the latitude GPS position |
garfield38 | 1:4eadcb718c8b | 34 | */ |
garfield38 | 0:b0ba4e08a18c | 35 | double getLat(); |
garfield38 | 1:4eadcb718c8b | 36 | /** Return the longitude GPS position |
garfield38 | 1:4eadcb718c8b | 37 | */ |
garfield38 | 0:b0ba4e08a18c | 38 | double getLon(); |
garfield38 | 1:4eadcb718c8b | 39 | /** Return the altitude GPS elevation |
garfield38 | 1:4eadcb718c8b | 40 | */ |
garfield38 | 0:b0ba4e08a18c | 41 | double getGpsAlt(); |
garfield38 | 1:4eadcb718c8b | 42 | /** Return the GPS speed |
garfield38 | 1:4eadcb718c8b | 43 | */ |
garfield38 | 0:b0ba4e08a18c | 44 | double getSpeed(); |
garfield38 | 1:4eadcb718c8b | 45 | /** Return the GPS fix mode NO_FIX = 0, 2D = 2, 3D = 3, DGPS = 4 |
garfield38 | 1:4eadcb718c8b | 46 | */ |
garfield38 | 0:b0ba4e08a18c | 47 | fixType_t getFixType(); |
garfield38 | 1:4eadcb718c8b | 48 | /** Return the GPS number of satellites |
garfield38 | 1:4eadcb718c8b | 49 | */ |
garfield38 | 0:b0ba4e08a18c | 50 | uint8_t getNumSat(); |
garfield38 | 1:4eadcb718c8b | 51 | /** heading (not tilt compensated in degrees) |
garfield38 | 1:4eadcb718c8b | 52 | */ |
garfield38 | 0:b0ba4e08a18c | 53 | double getHeadingNc(); |
garfield38 | 1:4eadcb718c8b | 54 | /** course over ground |
garfield38 | 1:4eadcb718c8b | 55 | */ |
garfield38 | 0:b0ba4e08a18c | 56 | double getCog(); |
garfield38 | 1:4eadcb718c8b | 57 | /** vertical speed indicator (from GPS) in m/s (a.k.a. climb speed) |
garfield38 | 1:4eadcb718c8b | 58 | */ |
garfield38 | 0:b0ba4e08a18c | 59 | double getGpsVsi(); |
garfield38 | 1:4eadcb718c8b | 60 | /** horizontal dilution of precision |
garfield38 | 1:4eadcb718c8b | 61 | */ |
garfield38 | 0:b0ba4e08a18c | 62 | double getHdop(); |
garfield38 | 1:4eadcb718c8b | 63 | /** vertical dilution of precision |
garfield38 | 1:4eadcb718c8b | 64 | */ |
garfield38 | 0:b0ba4e08a18c | 65 | double getVdop(); |
garfield38 | 1:4eadcb718c8b | 66 | /** Return the GPS Year time |
garfield38 | 1:4eadcb718c8b | 67 | */ |
garfield38 | 0:b0ba4e08a18c | 68 | uint8_t getYear(); |
garfield38 | 1:4eadcb718c8b | 69 | /** Return the GPS Month time |
garfield38 | 1:4eadcb718c8b | 70 | */ |
garfield38 | 0:b0ba4e08a18c | 71 | uint8_t getMonth(); |
garfield38 | 1:4eadcb718c8b | 72 | /** Return the GPS Day time |
garfield38 | 1:4eadcb718c8b | 73 | */ |
garfield38 | 0:b0ba4e08a18c | 74 | uint8_t getDay(); |
garfield38 | 1:4eadcb718c8b | 75 | /** Return the GPS Hour time |
garfield38 | 1:4eadcb718c8b | 76 | * Note that for time between 16:00 and 23:59 the hour returned from GPS module is actually 00:00 - 7:59. |
garfield38 | 1:4eadcb718c8b | 77 | */ |
garfield38 | 1:4eadcb718c8b | 78 | uint8_t getHour(); |
garfield38 | 1:4eadcb718c8b | 79 | /** Return the GPS Minute time |
garfield38 | 1:4eadcb718c8b | 80 | */ |
garfield38 | 0:b0ba4e08a18c | 81 | uint8_t getMinute(); |
garfield38 | 1:4eadcb718c8b | 82 | /** Return the GPS Second time |
garfield38 | 1:4eadcb718c8b | 83 | */ |
garfield38 | 0:b0ba4e08a18c | 84 | uint8_t getSecond(); |
garfield38 | 0:b0ba4e08a18c | 85 | |
garfield38 | 0:b0ba4e08a18c | 86 | private: |
garfield38 | 0:b0ba4e08a18c | 87 | int gpsPayload[58]; |
garfield38 | 0:b0ba4e08a18c | 88 | int seq; |
garfield38 | 1:4eadcb718c8b | 89 | int syncError; |
garfield38 | 0:b0ba4e08a18c | 90 | int cnt; |
garfield38 | 0:b0ba4e08a18c | 91 | int msgId; |
garfield38 | 0:b0ba4e08a18c | 92 | int msgLen; |
garfield38 | 0:b0ba4e08a18c | 93 | uint8_t cs1; // checksum #1 |
garfield38 | 0:b0ba4e08a18c | 94 | uint8_t cs2; // checksum #2 |
garfield38 | 0:b0ba4e08a18c | 95 | int16_t magXMin; |
garfield38 | 0:b0ba4e08a18c | 96 | int16_t magXMax; |
garfield38 | 0:b0ba4e08a18c | 97 | int16_t magYMin; |
garfield38 | 0:b0ba4e08a18c | 98 | int16_t magYMax; |
garfield38 | 0:b0ba4e08a18c | 99 | |
garfield38 | 0:b0ba4e08a18c | 100 | double lon; // longitude in degree decimal |
garfield38 | 0:b0ba4e08a18c | 101 | double lat; // latitude in degree decimal |
garfield38 | 0:b0ba4e08a18c | 102 | double gpsAlt; // altitude in m (from GPS) |
garfield38 | 0:b0ba4e08a18c | 103 | double spd; // speed in m/s |
garfield38 | 0:b0ba4e08a18c | 104 | fixType_t fix; // fix type |
garfield38 | 0:b0ba4e08a18c | 105 | uint8_t sat; // number of satellites |
garfield38 | 1:4eadcb718c8b | 106 | double headingNc;// heading (not tilt compensated in degrees) |
garfield38 | 0:b0ba4e08a18c | 107 | double cog; // course over ground |
garfield38 | 0:b0ba4e08a18c | 108 | double gpsVsi; // vertical speed indicator (from GPS) in m/s (a.k.a. climb speed) |
garfield38 | 0:b0ba4e08a18c | 109 | double hdop; // horizontal dilution of precision |
garfield38 | 0:b0ba4e08a18c | 110 | double vdop; // vertical dilution of precision |
garfield38 | 0:b0ba4e08a18c | 111 | uint8_t year; |
garfield38 | 0:b0ba4e08a18c | 112 | uint8_t month; |
garfield38 | 0:b0ba4e08a18c | 113 | uint8_t day; |
garfield38 | 0:b0ba4e08a18c | 114 | uint8_t hour; |
garfield38 | 0:b0ba4e08a18c | 115 | uint8_t minute; |
garfield38 | 0:b0ba4e08a18c | 116 | uint8_t second; |
garfield38 | 0:b0ba4e08a18c | 117 | |
garfield38 | 0:b0ba4e08a18c | 118 | int32_t decodeLong(uint8_t idx, uint8_t mask); |
garfield38 | 0:b0ba4e08a18c | 119 | int16_t decodeShort(uint8_t idx, uint8_t mask); |
garfield38 | 1:4eadcb718c8b | 120 | void updateCS(uint8_t input); |
garfield38 | 0:b0ba4e08a18c | 121 | |
garfield38 | 0:b0ba4e08a18c | 122 | }; |
garfield38 | 0:b0ba4e08a18c | 123 | |
garfield38 | 0:b0ba4e08a18c | 124 | extern NazaDecoderLib NazaDecoder; |
garfield38 | 0:b0ba4e08a18c | 125 | |
garfield38 | 0:b0ba4e08a18c | 126 | #endif // __NAZA_DECODER_LIB_H__ |