Test software for SatChat prototype hardware Platform - MAX32630FTHR

Dependencies:   USBDevice max32630fthr

Committer:
koziniec
Date:
Sat Jul 01 02:02:38 2017 +0000
Revision:
6:af25f19eb4e6
Parent:
5:703f61be6ee2
Child:
7:4218bb385ca4
First attempt at calculating CS.  Probably incorrect and doesn't print the CS to screen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
koziniec 0:59c04ca89ae2 1
koziniec 0:59c04ca89ae2 2 #include "mbed.h"
koziniec 0:59c04ca89ae2 3 #include "max32630fthr.h"
koziniec 1:b8cb82927f33 4 #include <stdbool.h>
koziniec 1:b8cb82927f33 5 #define on 1
koziniec 1:b8cb82927f33 6 #define off 0
koziniec 1:b8cb82927f33 7
koziniec 0:59c04ca89ae2 8 Serial pc(USBTX, USBRX);
koziniec 1:b8cb82927f33 9 Serial gps(P5_3, P5_4, 9600);
koziniec 0:59c04ca89ae2 10 I2C i2c(P5_7,P6_0); // SDA, SCL
koziniec 0:59c04ca89ae2 11
koziniec 1:b8cb82927f33 12 DigitalOut red_led(LED1,1);
koziniec 1:b8cb82927f33 13 DigitalOut green_led(LED2,1);
koziniec 1:b8cb82927f33 14 DigitalOut blue_led(LED3,1);
koziniec 1:b8cb82927f33 15
koziniec 1:b8cb82927f33 16 void gps_power(bool state)
koziniec 1:b8cb82927f33 17 {
koziniec 1:b8cb82927f33 18 char data[2];
koziniec 1:b8cb82927f33 19 data[0] = 0x16; //MAX14690 LDO3cfg register
koziniec 1:b8cb82927f33 20 data[1] = 0xE0; //Disable LDO3
koziniec 1:b8cb82927f33 21 if (state == on) {
koziniec 1:b8cb82927f33 22 data[1] = 0xE2; //Enable LDO3
koziniec 1:b8cb82927f33 23 }
koziniec 1:b8cb82927f33 24 i2c.write( 0x50, data, 2 );
koziniec 1:b8cb82927f33 25 }
koziniec 1:b8cb82927f33 26
koziniec 1:b8cb82927f33 27 void gps_update(void)
koziniec 1:b8cb82927f33 28 {
koziniec 1:b8cb82927f33 29 char nmea_descriptor[5] = {0};
koziniec 1:b8cb82927f33 30 gps_power(on);
koziniec 1:b8cb82927f33 31 while (1) {
koziniec 6:af25f19eb4e6 32 char nmea_sentence[82] = {0}; //Fill with NULL terminators
koziniec 1:b8cb82927f33 33 gps.format(8,Serial::None,1);
koziniec 1:b8cb82927f33 34 while (gps.getc()!='$'); //wait for start of sentence
koziniec 1:b8cb82927f33 35 int nmea_index = 0;
koziniec 2:814706310a71 36 nmea_sentence[nmea_index] = '$';
koziniec 2:814706310a71 37 while (nmea_sentence[nmea_index++] != '\n') {
koziniec 3:1dff075c1c88 38 char nmea_char = gps.getc();
koziniec 4:e996385ca6d9 39 if ((nmea_sentence[nmea_index-1] == ',')&&(nmea_char == ',')) {
koziniec 3:1dff075c1c88 40 nmea_sentence[nmea_index++] = ' '; //Pad consecutive comma with a space
koziniec 3:1dff075c1c88 41 }
koziniec 5:703f61be6ee2 42 if (nmea_char == '*'){
koziniec 5:703f61be6ee2 43 nmea_sentence[nmea_index++] = ','; //inserting a comma before CS makes handling easier
koziniec 5:703f61be6ee2 44 }
koziniec 5:703f61be6ee2 45 nmea_sentence[nmea_index] = nmea_char; //build the sentence
koziniec 1:b8cb82927f33 46 if (nmea_index > 80) {
koziniec 3:1dff075c1c88 47 nmea_index=80; //Don't overflow buffer
koziniec 1:b8cb82927f33 48 }
koziniec 1:b8cb82927f33 49 }
koziniec 6:af25f19eb4e6 50 // Checksum
koziniec 6:af25f19eb4e6 51 bool checksum_valid = FALSE;
koziniec 6:af25f19eb4e6 52 int checksum = 0;
koziniec 6:af25f19eb4e6 53 int i = 1; //After the '$'
koziniec 6:af25f19eb4e6 54 while (nmea_sentence[i++] != '*'){
koziniec 6:af25f19eb4e6 55 checksum ^= nmea_sentence[i];
koziniec 6:af25f19eb4e6 56 }
koziniec 6:af25f19eb4e6 57 pc.printf( "Checksum: %i\n\r", checksum );
koziniec 4:e996385ca6d9 58 // const char s[2] = ",";
koziniec 1:b8cb82927f33 59 const char gprmc[7] = "$GPRMC";
koziniec 1:b8cb82927f33 60 char *token;
koziniec 1:b8cb82927f33 61 token = strtok(nmea_sentence, ",");
koziniec 4:e996385ca6d9 62 if (strcmp(token,gprmc) == 0) {
koziniec 1:b8cb82927f33 63 pc.printf( " %s\n\r", token );
koziniec 4:e996385ca6d9 64 while (token != NULL) {
koziniec 4:e996385ca6d9 65 token = strtok(NULL, ",");
koziniec 4:e996385ca6d9 66 pc.printf( " %s\n\r", token );
koziniec 4:e996385ca6d9 67 }
koziniec 4:e996385ca6d9 68 }
koziniec 4:e996385ca6d9 69
koziniec 4:e996385ca6d9 70 while (gps.readable()) {
koziniec 4:e996385ca6d9 71 char dummy = gps.getc();
koziniec 1:b8cb82927f33 72 }
koziniec 1:b8cb82927f33 73 }
koziniec 1:b8cb82927f33 74
koziniec 1:b8cb82927f33 75 }
koziniec 1:b8cb82927f33 76 int main()
koziniec 1:b8cb82927f33 77 {
koziniec 1:b8cb82927f33 78 //
koziniec 1:b8cb82927f33 79 char data[2];
koziniec 1:b8cb82927f33 80 data[0] = 0x1A; //MAX14690 BootCfg register
koziniec 1:b8cb82927f33 81 data[1] = 0x30; //Always-On Mode, off state via PWR_OFF_CMD
koziniec 0:59c04ca89ae2 82 i2c.write( 0x50, data, 2 );
koziniec 0:59c04ca89ae2 83
koziniec 1:b8cb82927f33 84 data[0] = 0x17; //MAX14690 LDO3Vset register
koziniec 0:59c04ca89ae2 85 data[1] = 0x19; //3.3V
koziniec 0:59c04ca89ae2 86 i2c.write( 0x50, data, 2 );
koziniec 1:b8cb82927f33 87 gps_power(off);
koziniec 6:af25f19eb4e6 88 wait(2);
koziniec 1:b8cb82927f33 89 while (1) {
koziniec 1:b8cb82927f33 90 gps_update();
koziniec 0:59c04ca89ae2 91 }
koziniec 0:59c04ca89ae2 92 }
koziniec 0:59c04ca89ae2 93
koziniec 0:59c04ca89ae2 94
koziniec 0:59c04ca89ae2 95
koziniec 0:59c04ca89ae2 96
koziniec 0:59c04ca89ae2 97
koziniec 0:59c04ca89ae2 98
koziniec 0:59c04ca89ae2 99
koziniec 0:59c04ca89ae2 100
koziniec 0:59c04ca89ae2 101
koziniec 0:59c04ca89ae2 102