Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MODSERIAL FATFileSystem
Diff: IMU/IMU.h
- Revision:
- 10:085ab7328054
- Parent:
- 9:d5fcdcb3c89d
- Child:
- 11:3b241ecb75ed
diff -r d5fcdcb3c89d -r 085ab7328054 IMU/IMU.h
--- a/IMU/IMU.h Fri Oct 20 11:41:22 2017 +0000
+++ b/IMU/IMU.h Mon Oct 23 12:50:53 2017 +0000
@@ -3,34 +3,80 @@
#define _PI ((float) 3.14159265359)
-class IMU{
+// state machine states
+#define SYNC0 0 // first sync byte state
+#define SYNC1 1 // second sync byte state
+#define SET 2 // aka descriptor set
+#define LEN 3 // payload length
+#define PAY 4 // getting the payload data
+#define CRC0 5 // crc high byte
+#define CRC1 6 // crc low byte
+
+// data set descriptors
+#define IMU_DATA_SET 0x08
+#define GNSS_DATA_SET 0x81
+
+// enumerations for the Euler angle packet we care about
+#define EULER_CF_LENGTH 14
+#define EULER_CF_DESCRIPTOR 0x0C
+#define ROLL_OFFSET 0
+#define PITCH_OFFSET 4
+#define YAW_OFFSET 8
+
+// enumerations for the lat-lon-alt packet we care about
+#define LLH_POSITION_LENGTH 44
+#define LLH_POSITION_DESCRIPTOR 0x03
+#define LATITUDE_OFFSET 0
+#define LONGITUDE_OFFSET 8
+#define HEIGHT_MSL_OFFSET 16
+#define VALID_FLAG_OFFSET 40
+
+// enumerations for the lat-lon-alt packet we care about
+#define GNSS_FIX_INFO_LENGTH 8
+#define GNSS_FIX_INFO_DESCRIPTOR 0x0B
+#define FIX_TYPE_OFFSET 0
+#define NUM_SV_OFFSET 1
+#define VALID_FLAGS_OFFSET 4
+
+class IMU {
public:
- IMU();
+ IMU(PinName Tx, PinName Rx);
void initialize();
void update();
void start();
void stop();
+
+ float getRoll();
+ float getPitch();
+ float getHeading();
+ bool getIsValid2dFix();
+ bool getIsValid3dFix();
+ char getNumSV();
+ double getLatitude();
+ double getLongitude();
+ double getAltitudeMSL();
+
protected:
Ticker interval;
MODSERIAL _rs232;
- unsigned char SYNC1; // First sync byte will always be 'u' (0x75)
- unsigned char SYNC2; // Second sync byte will always be 'e' (0x65)
- unsigned char descripter_set; // Descriptor set byte for AHRS (0x80)
- int payload_length; // Payload length byte for CF Euler Angles (0x0E)
- int field_length; // Field length byte for CF Euler Angles (0x0E)
- unsigned char data_descriptor; // Data descriptor byte for CF Euler Angles (0x0C)
- unsigned char data[30]; // Data sent CF euler angles rpy [radians]
- int data_offset; // Binary offset
- int roll_offset; // Binary offset
- int pitch_offset; // Binary offset
- int yaw_offset; // Binary offset
- float euler[3];
+
+ char byte;
+ unsigned char state, len, descriptor, i, crc0, crc1, payload[30], checksum;
- int i; // set packet_length based on field_length (convert from hex to int)
- unsigned char current;
- unsigned char last;
-
- float float_from_char(unsigned char * value);
-};
+ float euler[3];
+ double latLonAlt[3];
+ bool is2dFixValid;
+ bool is3dFixValid;
+ char numSV;
+ void processPacket(char type, char length, unsigned char * data);
+ void processEulerCfPacket(char length, unsigned char * data);
+ void processLatLonAltPacket(char length, unsigned char * data);
+ void processGnssFixInformation(char length, unsigned char * data);
+
+ unsigned int calcChecksum(unsigned char * mip_packet, char checksum_range);
+
+ float floatFromChar(unsigned char * value);
+ double doubleFromChar(unsigned char * value);
+};
\ No newline at end of file