Test software for SatChat prototype hardware Platform - MAX32630FTHR

Dependencies:   USBDevice max32630fthr

Committer:
koziniec
Date:
Sat Jul 01 05:23:43 2017 +0000
Revision:
7:4218bb385ca4
Parent:
6:af25f19eb4e6
Child:
8:b4a6c632c809
Needs tidying up but displays both hex CS and calc'd CS and they match :-)

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 gps_power(on);
koziniec 1:b8cb82927f33 30 while (1) {
koziniec 7:4218bb385ca4 31 int checksum = 0;
koziniec 6:af25f19eb4e6 32 char nmea_sentence[82] = {0}; //Fill with NULL terminators
koziniec 7:4218bb385ca4 33 //gps.format(8,Serial::None,1);
koziniec 7:4218bb385ca4 34 while (gps.getc()!='$'); //wait for start of sentence
koziniec 1:b8cb82927f33 35 int nmea_index = 0;
koziniec 7:4218bb385ca4 36 nmea_sentence[nmea_index] = '$'; //Manually insert the '$' because we don't want it included in the checksum loop
koziniec 7:4218bb385ca4 37 char nmea_char = gps.getc(); //get sentence first char from GPS
koziniec 7:4218bb385ca4 38 while (nmea_char != '*') {
koziniec 7:4218bb385ca4 39 // pc.putc(nmea_char);
koziniec 7:4218bb385ca4 40 checksum ^= nmea_char; //Calc checksum as we read sentence
koziniec 7:4218bb385ca4 41 if ((nmea_sentence[nmea_index] == ',')&&(nmea_char == ',')) {
koziniec 7:4218bb385ca4 42 nmea_sentence[++nmea_index] = ' '; //Pad consecutive comma with a space
koziniec 3:1dff075c1c88 43 }
koziniec 7:4218bb385ca4 44 nmea_sentence[++nmea_index] = nmea_char; //build the sentence with the next character
koziniec 1:b8cb82927f33 45 if (nmea_index > 80) {
koziniec 3:1dff075c1c88 46 nmea_index=80; //Don't overflow buffer
koziniec 1:b8cb82927f33 47 }
koziniec 7:4218bb385ca4 48 nmea_char = gps.getc(); //get next char from GPS
koziniec 1:b8cb82927f33 49 }
koziniec 7:4218bb385ca4 50 //read two hex digits of CS from gps
koziniec 7:4218bb385ca4 51 char msb_gps_checksum = gps.getc();
koziniec 7:4218bb385ca4 52 char lsb_gps_checksum = gps.getc();
koziniec 7:4218bb385ca4 53
koziniec 7:4218bb385ca4 54
koziniec 7:4218bb385ca4 55
koziniec 4:e996385ca6d9 56 // const char s[2] = ",";
koziniec 1:b8cb82927f33 57 const char gprmc[7] = "$GPRMC";
koziniec 1:b8cb82927f33 58 char *token;
koziniec 1:b8cb82927f33 59 token = strtok(nmea_sentence, ",");
koziniec 4:e996385ca6d9 60 if (strcmp(token,gprmc) == 0) {
koziniec 1:b8cb82927f33 61 pc.printf( " %s\n\r", token );
koziniec 4:e996385ca6d9 62 while (token != NULL) {
koziniec 4:e996385ca6d9 63 token = strtok(NULL, ",");
koziniec 7:4218bb385ca4 64 // pc.printf( " %s\n\r", token );
koziniec 4:e996385ca6d9 65 }
koziniec 7:4218bb385ca4 66 // pc.printf("GPS CS:");
koziniec 7:4218bb385ca4 67 pc.putc(msb_gps_checksum);
koziniec 7:4218bb385ca4 68 pc.putc(lsb_gps_checksum);
koziniec 7:4218bb385ca4 69 pc.printf("%d \n\r",checksum);
koziniec 4:e996385ca6d9 70 }
koziniec 4:e996385ca6d9 71
koziniec 4:e996385ca6d9 72 while (gps.readable()) {
koziniec 4:e996385ca6d9 73 char dummy = gps.getc();
koziniec 1:b8cb82927f33 74 }
koziniec 1:b8cb82927f33 75 }
koziniec 1:b8cb82927f33 76
koziniec 1:b8cb82927f33 77 }
koziniec 1:b8cb82927f33 78 int main()
koziniec 1:b8cb82927f33 79 {
koziniec 1:b8cb82927f33 80 //
koziniec 1:b8cb82927f33 81 char data[2];
koziniec 1:b8cb82927f33 82 data[0] = 0x1A; //MAX14690 BootCfg register
koziniec 1:b8cb82927f33 83 data[1] = 0x30; //Always-On Mode, off state via PWR_OFF_CMD
koziniec 0:59c04ca89ae2 84 i2c.write( 0x50, data, 2 );
koziniec 0:59c04ca89ae2 85
koziniec 1:b8cb82927f33 86 data[0] = 0x17; //MAX14690 LDO3Vset register
koziniec 0:59c04ca89ae2 87 data[1] = 0x19; //3.3V
koziniec 0:59c04ca89ae2 88 i2c.write( 0x50, data, 2 );
koziniec 1:b8cb82927f33 89 gps_power(off);
koziniec 6:af25f19eb4e6 90 wait(2);
koziniec 1:b8cb82927f33 91 while (1) {
koziniec 1:b8cb82927f33 92 gps_update();
koziniec 7:4218bb385ca4 93
koziniec 7:4218bb385ca4 94
koziniec 0:59c04ca89ae2 95 }
koziniec 0:59c04ca89ae2 96 }
koziniec 0:59c04ca89ae2 97
koziniec 0:59c04ca89ae2 98
koziniec 7:4218bb385ca4 99
koziniec 7:4218bb385ca4 100
koziniec 7:4218bb385ca4 101
koziniec 0:59c04ca89ae2 102
koziniec 7:4218bb385ca4 103
koziniec 0:59c04ca89ae2 104
koziniec 7:4218bb385ca4 105