most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
joel_ssc
Date:
Mon May 13 19:25:26 2019 +0000
Revision:
92:52a91656458a
Parent:
66:0f20870117b7
version for first flight test, timeouts not yet set correctly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tnhnrl 66:0f20870117b7 1 #include "mbed.h"
tnhnrl 66:0f20870117b7 2 #include "MODSERIAL.h"
tnhnrl 66:0f20870117b7 3
tnhnrl 66:0f20870117b7 4 // for Microstrain's MIPS protocol, try this link, or search on microstrain.com
tnhnrl 66:0f20870117b7 5 // http://www.microstrain.com/sites/default/files/3dm-gx5-45_dcp_manual_8500-0064_0.pdf
tnhnrl 66:0f20870117b7 6
tnhnrl 66:0f20870117b7 7 #define _PI ((float) 3.14159265359)
tnhnrl 66:0f20870117b7 8
tnhnrl 66:0f20870117b7 9 // state machine states
tnhnrl 66:0f20870117b7 10 #define SYNC0 0 // first sync byte state
tnhnrl 66:0f20870117b7 11 #define SYNC1 1 // second sync byte state
tnhnrl 66:0f20870117b7 12 #define SET 2 // aka descriptor set
tnhnrl 66:0f20870117b7 13 #define LEN 3 // payload length
tnhnrl 66:0f20870117b7 14 #define PAY 4 // getting the payload data
tnhnrl 66:0f20870117b7 15 #define CRC0 5 // crc high byte
tnhnrl 66:0f20870117b7 16 #define CRC1 6 // crc low byte
tnhnrl 66:0f20870117b7 17
tnhnrl 66:0f20870117b7 18 // data set descriptors
tnhnrl 66:0f20870117b7 19 #define IMU_DATA_SET 0x80
tnhnrl 66:0f20870117b7 20 #define GNSS_DATA_SET 0x81
tnhnrl 66:0f20870117b7 21
tnhnrl 66:0f20870117b7 22 // enumerations for the Euler angle packet we care about
tnhnrl 66:0f20870117b7 23 #define EULER_CF_LENGTH 14
tnhnrl 66:0f20870117b7 24 #define EULER_CF_DESCRIPTOR 0x0C
tnhnrl 66:0f20870117b7 25 #define ROLL_OFFSET 0
tnhnrl 66:0f20870117b7 26 #define PITCH_OFFSET 4
tnhnrl 66:0f20870117b7 27 #define YAW_OFFSET 8
tnhnrl 66:0f20870117b7 28
tnhnrl 66:0f20870117b7 29 // enumerations for the lat-lon-alt packet we care about
tnhnrl 66:0f20870117b7 30 #define LLH_POSITION_LENGTH 44
tnhnrl 66:0f20870117b7 31 #define LLH_POSITION_DESCRIPTOR 0x03
tnhnrl 66:0f20870117b7 32 #define LATITUDE_OFFSET 0
tnhnrl 66:0f20870117b7 33 #define LONGITUDE_OFFSET 8
tnhnrl 66:0f20870117b7 34 #define HEIGHT_MSL_OFFSET 16
tnhnrl 66:0f20870117b7 35 #define VALID_FLAG_OFFSET 40
tnhnrl 66:0f20870117b7 36
tnhnrl 66:0f20870117b7 37 // enumerations for the lat-lon-alt packet we care about
tnhnrl 66:0f20870117b7 38 #define GNSS_FIX_INFO_LENGTH 8
tnhnrl 66:0f20870117b7 39 #define GNSS_FIX_INFO_DESCRIPTOR 0x0B
tnhnrl 66:0f20870117b7 40 #define FIX_TYPE_OFFSET 0
tnhnrl 66:0f20870117b7 41 #define NUM_SV_OFFSET 1
tnhnrl 66:0f20870117b7 42 #define VALID_FLAGS_OFFSET 4
tnhnrl 66:0f20870117b7 43
tnhnrl 66:0f20870117b7 44 class IMU {
tnhnrl 66:0f20870117b7 45 public:
tnhnrl 66:0f20870117b7 46 IMU(PinName Tx, PinName Rx);
tnhnrl 66:0f20870117b7 47 void initialize();
tnhnrl 66:0f20870117b7 48 void update();
tnhnrl 66:0f20870117b7 49 void start();
tnhnrl 66:0f20870117b7 50 void stop();
tnhnrl 66:0f20870117b7 51
tnhnrl 66:0f20870117b7 52 void runIMU();
tnhnrl 66:0f20870117b7 53
tnhnrl 66:0f20870117b7 54 float getRoll();
tnhnrl 66:0f20870117b7 55 float getPitch();
tnhnrl 66:0f20870117b7 56 float getHeading();
tnhnrl 66:0f20870117b7 57
tnhnrl 66:0f20870117b7 58 bool getIsValid2dFix();
tnhnrl 66:0f20870117b7 59 bool getIsValid3dFix();
tnhnrl 66:0f20870117b7 60 char getNumSV();
tnhnrl 66:0f20870117b7 61 double getLatitude();
tnhnrl 66:0f20870117b7 62 double getLongitude();
tnhnrl 66:0f20870117b7 63 double getAltitudeMSL();
tnhnrl 66:0f20870117b7 64
tnhnrl 66:0f20870117b7 65 protected:
tnhnrl 66:0f20870117b7 66 Ticker interval;
tnhnrl 66:0f20870117b7 67 MODSERIAL _rs232;
tnhnrl 66:0f20870117b7 68
tnhnrl 66:0f20870117b7 69 char byte;
tnhnrl 66:0f20870117b7 70
tnhnrl 66:0f20870117b7 71 unsigned char state, len, descriptor, i, packet[256];
tnhnrl 66:0f20870117b7 72 unsigned int checksum, crc0, crc1;
tnhnrl 66:0f20870117b7 73
tnhnrl 66:0f20870117b7 74 /* unsigned char state, len, descriptor, i, crc0, crc1, payload[30];
tnhnrl 66:0f20870117b7 75 unsigned int checksum;*/
tnhnrl 66:0f20870117b7 76
tnhnrl 66:0f20870117b7 77 float euler[3];
tnhnrl 66:0f20870117b7 78 double latLonAlt[3];
tnhnrl 66:0f20870117b7 79 bool is2dFixValid;
tnhnrl 66:0f20870117b7 80 bool is3dFixValid;
tnhnrl 66:0f20870117b7 81 char numSV;
tnhnrl 66:0f20870117b7 82
tnhnrl 66:0f20870117b7 83 void processPayload(char type, char length, unsigned char * payload);
tnhnrl 66:0f20870117b7 84 void processEulerCfPacket(char length, unsigned char * payload);
tnhnrl 66:0f20870117b7 85 void processLatLonAltPacket(char length, unsigned char * payload);
tnhnrl 66:0f20870117b7 86 void processGnssFixInformation(char length, unsigned char * payload);
tnhnrl 66:0f20870117b7 87
tnhnrl 66:0f20870117b7 88 unsigned int calcChecksum(unsigned char * mip_packet, char checksum_range);
tnhnrl 66:0f20870117b7 89
tnhnrl 66:0f20870117b7 90 float floatFromChar(unsigned char * value);
tnhnrl 66:0f20870117b7 91 double doubleFromChar(unsigned char * value);
tnhnrl 66:0f20870117b7 92 };