http://www.rcgroups.com/forums/showthread.php?t=1995704

Use the following image to get GPS signal and supply:

http://static.rcgroups.net/forums/attachments/3/9/3/9/3/6/a6132334-125-naza_gps_pinout.jpg

Committer:
garfield38
Date:
Fri Nov 28 17:50:46 2014 +0000
Revision:
2:de84f8a0a706
Parent:
1:4eadcb718c8b
Added comments

Who changed what in which revision?

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