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:39:38 2014 +0000
Revision:
1:4eadcb718c8b
Parent:
0:b0ba4e08a18c
Child:
2:de84f8a0a706
Ready for use

Who changed what in which revision?

UserRevisionLine numberNew 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__