Test software for SatChat prototype hardware Platform - MAX32630FTHR

Dependencies:   USBDevice max32630fthr

main.cpp

Committer:
koziniec
Date:
2017-07-01
Revision:
9:b8a60ade343e
Parent:
8:b4a6c632c809
Child:
10:349d4fa9037f

File content as of revision 9:b8a60ade343e:


#include "mbed.h"
#include "max32630fthr.h"
#include <stdbool.h>
#define on 1
#define off 0

Serial pc(USBTX, USBRX);
Serial gps(P5_3, P5_4, 9600);
I2C i2c(P5_7,P6_0); // SDA, SCL

DigitalOut red_led(LED1,1);
DigitalOut green_led(LED2,1);
DigitalOut blue_led(LED3,1);

char gpsfix_last_utc_time[11] = {0};
char gpsfix_last_utc_date[7] = {0};
char gpsfix_longtitude[12] = {0};
char gpsfix_latitude[12] = {0};
char gpsfix_speed[8] = {0};     //Set but not used
char gpsfix_course[7] = {0};    //Set but not used
char gpsfix_variation[7] = {0}; //Set but not used
char gpsfix_mag_var_ew[1] = {0};//Set but not used
char gpsfix_ns[1] = {0};
char gpsfix_ew[1] = {0};


void gps_power(bool state)
{
    char    data[2];
    data[0] = 0x16;     //MAX14690 LDO3cfg register
    data[1] = 0xE0;     //Disable LDO3
    if (state == on) {
        data[1] = 0xE2; //Enable LDO3
    }
    i2c.write( 0x50, data, 2 );
}

void gps_update(void)
{
    gps_power(on);

    while (1) {
        int checksum = 0;
        char nmea_sentence[82] = {0};   //Fill with NULL terminators to save doing it later
        while (gps.getc()!='$');        //wait for start of sentence
        int nmea_index = 0;
        nmea_sentence[nmea_index] = '$';    //Manually insert the '$' because we don't want it included in the checksum loop
        char nmea_char = gps.getc();        //get sentence first char from GPS
        while (nmea_char != '*') {          //Loop building sentence and calc'ing CS until *
            checksum ^= nmea_char;         //Calc checksum as we read sentence
            if ((nmea_sentence[nmea_index] == ',')&&(nmea_char == ',')) {
                nmea_sentence[++nmea_index] = ' ';  //Pad consecutive comma with a space to make it possible to use strtok with empty values
            }
            nmea_sentence[++nmea_index] = nmea_char; //build the sentence with the next character
            if (nmea_index > 80) {
                nmea_index=80;          //Don't overflow buffer
            }
            nmea_char = gps.getc();     //get next char from GPS
        }
        //Last character was the '*' so read the two hex digits of CS from gps
        char hex_checksum[3] = {0};
        hex_checksum[0] = gps.getc();
        hex_checksum[1] = gps.getc();
        if (checksum == (int)strtol(hex_checksum, NULL, 16) ) {
            //Valid sentence so check if it's a GPRMC
            //pc.printf("Match\n\r");
            const char gprmc[7] = "$GPRMC";
            char *token;
            token = strtok(nmea_sentence, ",");
            if (strcmp(token,gprmc) == 0) {     //GPRMC ?
               // gps_power(off);                 //Yes - No need for GPS now
               // while (gps.readable()){
               //     char dummy = gps.getc();    //Empty serial buffer because overflows reveal MBED bugs :-(
               // }  
                pc.printf( " %s\n\r", token );  //Get the time
                if (token != NULL) {
                    token = strtok(NULL, ",");
                    pc.printf("Time: %s\n\r",token);
                }
                if (token != NULL) {
                    token = strtok(NULL, ",");
                    pc.printf("Valid: %s\n\r",token);
                }
                //If valid, get the rest of the tokens and pass to static variable.
                
            }
        }

 


        while (gps.readable()) {
            char dummy = gps.getc();
        }
    }

}
int main()
{
//
    char    data[2];
    data[0] = 0x1A;     //MAX14690 BootCfg register
    data[1] = 0x30;     //Always-On Mode, off state via PWR_OFF_CMD
    i2c.write( 0x50, data, 2 );

    data[0] = 0x17;     //MAX14690 LDO3Vset register
    data[1] = 0x19;     //3.3V
    i2c.write( 0x50, data, 2 );
    gps_power(off);
    wait(2);
    while (1) {
        gps_update();


    }
}