Device driver for the Novatel OEM615 GPS receiver
Oem615.cpp
- Committer:
- sam_grove
- Date:
- 2013-04-27
- Revision:
- 3:d55471d8417e
- Parent:
- 2:35b6eb71a635
File content as of revision 3:d55471d8417e:
/** * @file Oem615.cpp * @brief Device driver - Novatel OEM615 GPS * @author sam grove * @version 1.0 * @see http://www.novatel.com/support/firmware-software-and-manuals/product-manuals-and-doc-updates/oem6-family/ * * Copyright (c) 2013 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Oem615.h" DigitalOut led_4(LED4); //char const msg_0[] = "RESET"; char const msg_1[] = "UNLOGALL COM1"; //char const msg_2[] = "SERIALCONFIG COM1 115200 n 8 1 n off"; char const msg_3[] = "LOG COM1 BESTPOSA ONTIME 1"; //messageID = 42 char const msg_4[] = "LOG COM1 BESTVelA ONTIME 1"; //messageID = 99 char const msg_5[] = "LOG COM1 RANGEA ONTIME 1"; //messageID = 43 //char const msg_6[] = "LOG COM1 TIMEB ONTIME 1"; //messageID = 101 char const msg_7[] = "SERIALCONFIG COM1 9600 n 8 1 n off"; char const msg_8[] = "FREQUENCYOUT ENABLESYNC 100000 1000000"; //char const msg_9[] = "CLOCKADJUST DISABLE"; DigitalOut led_2(LED2); DigitalOut led_3(LED3); Oem615::Oem615(Serial &uart, DigitalOut &rst, DigitalOut &pwr, InterruptIn &pps, InterruptIn &varf) { _uart = &uart; _rst = &rst; _pwr = &pwr; _pps = &pps; _varf = &varf; return; } void Oem615::init(void) { _rst->write(0); _pwr->write(1); _pps->mode(PullUp); _varf->mode(PullUp); _uart->baud(9600); return; } void Oem615::enable(void) { LOG("Configuring OEM615 GPS receiver\n"); _rst->write(1); _pwr->write(0); for(int i=0; i<5; ++i) { LOG("GPS ready in %d\n", (5-i)); wait(1.0f); } LOG("%s\n", msg_7); _uart->printf("%s\n", msg_7); wait_ms(500); LOG("%s\n", msg_1); _uart->printf("%s\n", msg_1); wait_ms(500); LOG("%s\n", msg_3); _uart->printf("%s\n", msg_3); wait_ms(500); LOG("%s\n", msg_4); _uart->printf("%s\n", msg_4); wait_ms(500); LOG("%s\n", msg_5); _uart->printf("%s\n", msg_5); wait_ms(500); // LOG("%s\n", msg_9); // _uart->printf("%s\n", msg_h9); // wait_ms(500); LOG("%s\n", msg_8); _uart->printf("%s\n", msg_8); wait_ms(500); // LOG("%s\n", msg_2); // _uart->printf("%s\n", msg_2); // _uart->baud(115200); // wait_ms(500); // power up complete - enable the handlers _from_pps.start(); _pps->rise(this, &Oem615::ppsHandler); _varf->rise(this, &Oem615::varfHandler); _uart->attach(this, &Oem615::uartRxHandler, Serial::RxIrq); return; } void Oem615::disable(void) { _pps->rise(NULL); _varf->rise(NULL); _uart->attach(NULL, Serial::RxIrq); _from_pps.stop(); _rst->write(0); _pwr->write(1); return; } void Oem615::ppsHandler(void) { _from_pps.reset(); led_2 = !led_2; return; } void Oem615::varfHandler(void) { static int cnt = 0; ++cnt; led_3 = (cnt%10) ? 0 : 1; return; } void Oem615::uartRxHandler(void) { while(1 == _uart->readable()) { _rxbuf.data[_rxbuf.loc] = _uart->getc(); ++_rxbuf.loc; // protect the buffer from spilling over _rxbuf.loc &= GPS_RXBUF_MASK; } led_4 = !led_4; return; }