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:
Tue Nov 18 16:39:57 2014 +0000
Revision:
0:b0ba4e08a18c
Child:
1:4eadcb718c8b
first release

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 0:b0ba4e08a18c 7
garfield38 0:b0ba4e08a18c 8 The RC PWM input code taken from https://www.instructables.com/id/RC-Quadrotor-Helicopter/step12/Arduino-Demo-PWM-Input/
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 "Arduino.h"
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 0:b0ba4e08a18c 21 class NazaDecoderLib
garfield38 0:b0ba4e08a18c 22 {
garfield38 0:b0ba4e08a18c 23 public:
garfield38 0:b0ba4e08a18c 24 typedef enum { NO_FIX = 0, FIX_2D = 2, FIX_3D = 3, FIX_DGPS = 4 } fixType_t;
garfield38 0:b0ba4e08a18c 25
garfield38 0:b0ba4e08a18c 26 NazaDecoderLib();
garfield38 0:b0ba4e08a18c 27
garfield38 0:b0ba4e08a18c 28 uint8_t decode(int input);
garfield38 0:b0ba4e08a18c 29 double getLat();
garfield38 0:b0ba4e08a18c 30 double getLon();
garfield38 0:b0ba4e08a18c 31 double getGpsAlt();
garfield38 0:b0ba4e08a18c 32 double getSpeed();
garfield38 0:b0ba4e08a18c 33 fixType_t getFixType();
garfield38 0:b0ba4e08a18c 34 uint8_t getNumSat();
garfield38 0:b0ba4e08a18c 35 double getHeadingNc();
garfield38 0:b0ba4e08a18c 36 double getCog();
garfield38 0:b0ba4e08a18c 37 double getGpsVsi();
garfield38 0:b0ba4e08a18c 38 double getHdop();
garfield38 0:b0ba4e08a18c 39 double getVdop();
garfield38 0:b0ba4e08a18c 40 uint8_t getYear();
garfield38 0:b0ba4e08a18c 41 uint8_t getMonth();
garfield38 0:b0ba4e08a18c 42 uint8_t getDay();
garfield38 0:b0ba4e08a18c 43 uint8_t getHour(); // Note that for time between 16:00 and 23:59 the hour returned from GPS module is actually 00:00 - 7:59.
garfield38 0:b0ba4e08a18c 44 uint8_t getMinute();
garfield38 0:b0ba4e08a18c 45 uint8_t getSecond();
garfield38 0:b0ba4e08a18c 46
garfield38 0:b0ba4e08a18c 47 private:
garfield38 0:b0ba4e08a18c 48 int gpsPayload[58];
garfield38 0:b0ba4e08a18c 49 int seq;
garfield38 0:b0ba4e08a18c 50 int cnt;
garfield38 0:b0ba4e08a18c 51 int msgId;
garfield38 0:b0ba4e08a18c 52 int msgLen;
garfield38 0:b0ba4e08a18c 53 uint8_t cs1; // checksum #1
garfield38 0:b0ba4e08a18c 54 uint8_t cs2; // checksum #2
garfield38 0:b0ba4e08a18c 55 int16_t magXMin;
garfield38 0:b0ba4e08a18c 56 int16_t magXMax;
garfield38 0:b0ba4e08a18c 57 int16_t magYMin;
garfield38 0:b0ba4e08a18c 58 int16_t magYMax;
garfield38 0:b0ba4e08a18c 59
garfield38 0:b0ba4e08a18c 60 double lon; // longitude in degree decimal
garfield38 0:b0ba4e08a18c 61 double lat; // latitude in degree decimal
garfield38 0:b0ba4e08a18c 62 double gpsAlt; // altitude in m (from GPS)
garfield38 0:b0ba4e08a18c 63 double spd; // speed in m/s
garfield38 0:b0ba4e08a18c 64 fixType_t fix; // fix type
garfield38 0:b0ba4e08a18c 65 uint8_t sat; // number of satellites
garfield38 0:b0ba4e08a18c 66 double headingNc;// heading (not tilt compensated in degrees
garfield38 0:b0ba4e08a18c 67 double cog; // course over ground
garfield38 0:b0ba4e08a18c 68 double gpsVsi; // vertical speed indicator (from GPS) in m/s (a.k.a. climb speed)
garfield38 0:b0ba4e08a18c 69 double hdop; // horizontal dilution of precision
garfield38 0:b0ba4e08a18c 70 double vdop; // vertical dilution of precision
garfield38 0:b0ba4e08a18c 71 uint8_t year;
garfield38 0:b0ba4e08a18c 72 uint8_t month;
garfield38 0:b0ba4e08a18c 73 uint8_t day;
garfield38 0:b0ba4e08a18c 74 uint8_t hour;
garfield38 0:b0ba4e08a18c 75 uint8_t minute;
garfield38 0:b0ba4e08a18c 76 uint8_t second;
garfield38 0:b0ba4e08a18c 77
garfield38 0:b0ba4e08a18c 78 int32_t decodeLong(uint8_t idx, uint8_t mask);
garfield38 0:b0ba4e08a18c 79 int16_t decodeShort(uint8_t idx, uint8_t mask);
garfield38 0:b0ba4e08a18c 80 void updateCS(int input);
garfield38 0:b0ba4e08a18c 81
garfield38 0:b0ba4e08a18c 82 };
garfield38 0:b0ba4e08a18c 83
garfield38 0:b0ba4e08a18c 84 extern NazaDecoderLib NazaDecoder;
garfield38 0:b0ba4e08a18c 85
garfield38 0:b0ba4e08a18c 86 #endif // __NAZA_DECODER_LIB_H__