Simple driver for GNSS functions on BG96 module.
Dependents: mbed-os-example-cellular-gps-bg96
Note: this is early version
BG96 module needs to be already running to use this. Configuration only inside of this class. (hardcoded values)
BG96_GNSS.cpp
- Committer:
- Pawel Zarembski
- Date:
- 2020-02-19
- Revision:
- 0:6a2a480672be
- Child:
- 1:c3a5d3a0b437
File content as of revision 0:6a2a480672be:
#include "BG96_GNSS.h" BG96_GNSS::BG96_GNSS(bool debug) { const int baudrate = 115200; const char delimiter[] = "\r\n"; _serial = new UARTSerial(MBED_CONF_QUECTEL_BG96_TX, MBED_CONF_QUECTEL_BG96_RX, baudrate); serial_at_parser_init(delimiter, debug); } void BG96_GNSS::serial_at_parser_init(const char *delimiter, bool debug) { _parser = new ATCmdParser(_serial); _parser->debug_on(debug); _parser->set_delimiter(delimiter); _parser->set_timeout(BG96_AT_TIMEOUT); } void BG96_GNSS::check_if_ready(void) { int counter = 0; while ((counter++) < 10) { if (_parser->recv("RDY")) { printf("BG96 ready\r\n"); } else if (_parser->send("AT") && _parser->recv("OK")) { printf("BG96 already available\r\n"); } thread_sleep_for(10); } } int BG96_GNSS::set_gps_power(bool state) { char _buf[32]; sprintf((char *)_buf, "%s", state ? "AT+QGPS=1" : "AT+QGPSEND"); if (_parser->send(_buf) && _parser->recv("OK")) { printf("GPS Power: %s\r\n", state ? "On" : "Off"); return SUCCESS; } else { printf("Set GPS Power %s failed\r\n", state ? "On" : "Off"); return FAILURE; } } int get_gps_data(gps_data *data) { char _buf[100]; bool ok = false; Timer t; // Structure init: GPS info // todo external fucntion or delete data->utc = data->lat = data->lon = data->hdop= data->altitude = data->cog = data->spkm = data->spkn = data->nsat=0.0; data->fix=0; memset(&data->date, 0x00, 7); // timer start t.start(); while(!ok && (t.read_ms() < 15000) ) { _parser->flush(); /* todo: error handler first check if no error, flush, ask about */ _parser->send((char*)"AT+QGPSLOC=2"); // MS-based mode ok = _parser->recv("+QGPSLOC: "); if (ok) { _parser->recv("%s\r\n", _buf); sscanf(_buf,"%f,%f,%f,%f,%f,%d,%f,%f,%f,%6s,%d", &data->utc, &data->lat, &data->lon, &data->hdop, &data->altitude, &data->fix, &data->cog, &data->spkm, &data->spkn, data->date, &data->nsat); ok = _parser->recv("OK"); } } if(ok == true) { return SUCCESS; } return FAILURE; }