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:
danstrider
Date:
Mon Oct 23 12:50:53 2017 +0000
Revision:
10:085ab7328054
Parent:
9:d5fcdcb3c89d
Child:
11:3b241ecb75ed
checked out on the hardware

Who changed what in which revision?

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