Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

get gps firmware version and log it in the header. #34

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 86 additions & 13 deletions bGeigieNano.ino
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ SoftwareSerial gpsSerial(GPS_RX_PIN, GPS_TX_PIN);
#endif

// Gps data buffers
#define GPS_NAME_SZ 40
static char lat[BUFFER_SZ];
static char lon[BUFFER_SZ];

Expand All @@ -149,8 +150,9 @@ static char lon[BUFFER_SZ];
#define PMTK_SET_NMEA_OUTPUT_RMCGGA "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
#define PMTK_HOT_START "$PMTK101*32"
#define PMTK_COLD_START "$PMTK104*37"
#define SBAS_ENABLE "$PMTK313,1*2E\r\n"
#define DGPS_WAAS_ON "$PMTK301,2*2E\r\n"
#define PMTK_SBAS_ENABLE "$PMTK313,1*2E"
#define PMTK_DGPS_WAAS_ON "$PMTK301,2*2E"
#define PMTK_Q_RELEASE "$PMTK605*31"

#if ENABLE_STATIC_GPS
#include <avr/pgmspace.h>
Expand Down Expand Up @@ -561,6 +563,17 @@ void loop()
#endif
OpenLog.print(strbuffer);

char gps_name[GPS_NAME_SZ];
memset(gps_name, 0, GPS_NAME_SZ);
gpsSerial.listen();
gps_query_release(gps_name, GPS_NAME_SZ);
OpenLog.listen();
if (strlen(gps_name) > 0 ) {
sprintf_P(strbuffer, PSTR("# gps=%s" NEW_LINE), gps_name);
OpenLog.print(strbuffer);
}

gpsSerial.listen(); // switch back from createFile()
#endif // ENABLE_OPENLOG
}
}
Expand All @@ -578,7 +591,7 @@ void loop()
if ((logfile_ready) && (GEIGIE_TYPE_B == config.type)) {
#ifdef LOGALARM_LED_PIN
//digitalWrite(LOGALARM_LED_PIN, HIGH);
#endif
#endif // LOGALARM_LED_PIN
// Put OpenLog serial in listen mode
OpenLog.listen();
OpenLog.println(line);
Expand All @@ -587,12 +600,14 @@ void loop()
dtostrf(read_voltage(VOLTAGE_PIN), 0, 1, strbuffer);
OpenLog.print("$DIAG,");
OpenLog.println(strbuffer);
#endif
#endif // ENABLE_DIAGNOSTIC

gpsSerial.listen();
}
#ifdef LOGALARM_LED_PIN
//digitalWrite(LOGALARM_LED_PIN, LOW);
#endif
#endif
#endif // LOGALARM_LED_PIN
#endif // ENABLE_OPENLOG
}


Expand Down Expand Up @@ -1172,25 +1187,61 @@ display.fillRect(118, offset+2, battery, 3, WHITE);
return (gps_status == AVAILABLE);
}

char* gpsExpect(const char *prefix) {
int i = 0;
while (gpsSerial.isListening()){
char c = gpsSerial.read();
if (c == -1) {
delay(10);
continue;
}
#ifdef ENABLE_GPS_NMEA_LOG
Serial.print(c);
#endif // ENABLE_GPS_NMEA_LOG
if (c == '$') {
i = 0;
}
if ( i < LINE_SZ ) {
line[i] = c;
i++;
} else {
Serial.println("overflow in gpsExpect");
return NULL;
}
if (c == '\n') {
if (strncmp(line, prefix, strlen(prefix)) == 0) {
line[++i] = '\0';
return line;
}
}
}
return NULL;
}

/* setup the GPS module to 1Hz and RMC+GGA messages only */
void gps_program_settings()
{
#if ENABLE_MEDIATEK
memset(line, 0, LINE_SZ);
char expect[16];
sprintf_P(line, PSTR(PMTK_SET_NMEA_OUTPUT_RMCGGA));
gpsSerial.println(line);
sprintf_P(expect, PSTR("$PMTK001,"));
gpsExpect(expect);

memset(line, 0, LINE_SZ);
sprintf_P(line, PSTR(PMTK_SET_NMEA_UPDATE_1HZ));
gpsSerial.println(line);
sprintf_P(expect, PSTR("$PMTK001,"));
gpsExpect(expect);

memset(line, 0, LINE_SZ);
sprintf_P(line, PSTR(SBAS_ENABLE));
sprintf_P(line, PSTR(PMTK_SBAS_ENABLE));
gpsSerial.println(line);
sprintf_P(expect, PSTR("$PMTK001,"));
gpsExpect(expect);

memset(line, 0, LINE_SZ);
sprintf_P(line, PSTR(DGPS_WAAS_ON));
sprintf_P(line, PSTR(PMTK_DGPS_WAAS_ON));
gpsSerial.println(line);
sprintf_P(expect, PSTR("$PMTK001,"));
gpsExpect(expect);
#endif

#if ENABLE_SKYTRAQ
Expand Down Expand Up @@ -1238,6 +1289,28 @@ void gps_send_message(const uint8_t *msg, uint16_t len)
gpsSerial.write('\n');
}

void gps_query_release(char *buf, size_t bufsize){
#if ENABLE_MEDIATEK
char expect[10];
sprintf_P(line, PSTR(PMTK_Q_RELEASE));
gpsSerial.println(line);
sprintf_P(expect, PSTR("$PMTK705,"));
if (gpsExpect(expect) != NULL ) {
// 9 == strlen("$PMTK705,")
for (int i=9; i<strlen(line); i++ ) { // search for checksum
if (line[i] == '*') {
size_t sz = i-9;
if (sz > bufsize-1) {
sz = bufsize-1;
}
strncpy(buf, line+9, sz);
buf[sz] = '\0';
}
}
}
#endif // ENABLE_MEDIATEK
}

/* retrieve battery voltage */
float read_voltage(int pin)
{
Expand Down Expand Up @@ -1306,4 +1379,4 @@ void truncate_100m(char *latitude, char *longitude)
longitude[9] = '0' + (minutes%10);

}
#endif /* JAPAN_POST */
#endif /* JAPAN_POST */