thread bug

Fork of GroveGPS by Michael Ray

Committer:
JimCarver
Date:
Thu May 31 16:24:30 2018 +0000
Revision:
1:7ad98913098c
Child:
2:e3f570014ab4
bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 1:7ad98913098c 1 // ----------------------------------------------------------------------------
JimCarver 1:7ad98913098c 2 // Copyright 2016-2017 ARM Ltd.
JimCarver 1:7ad98913098c 3 //
JimCarver 1:7ad98913098c 4 // SPDX-License-Identifier: Apache-2.0
JimCarver 1:7ad98913098c 5 //
JimCarver 1:7ad98913098c 6 // Licensed under the Apache License, Version 2.0 (the "License");
JimCarver 1:7ad98913098c 7 // you may not use this file except in compliance with the License.
JimCarver 1:7ad98913098c 8 // You may obtain a copy of the License at
JimCarver 1:7ad98913098c 9 //
JimCarver 1:7ad98913098c 10 // http://www.apache.org/licenses/LICENSE-2.0
JimCarver 1:7ad98913098c 11 //
JimCarver 1:7ad98913098c 12 // Unless required by applicable law or agreed to in writing, software
JimCarver 1:7ad98913098c 13 // distributed under the License is distributed on an "AS IS" BASIS,
JimCarver 1:7ad98913098c 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JimCarver 1:7ad98913098c 15 // See the License for the specific language governing permissions and
JimCarver 1:7ad98913098c 16 // limitations under the License.
JimCarver 1:7ad98913098c 17 // ----------------------------------------------------------------------------
JimCarver 1:7ad98913098c 18
JimCarver 1:7ad98913098c 19 #include "mbed.h"
JimCarver 1:7ad98913098c 20
JimCarver 1:7ad98913098c 21 #include "GroveGPS.h"
JimCarver 1:7ad98913098c 22
JimCarver 1:7ad98913098c 23 Serial gps_serial(PE_8, PE_7, 9600);
JimCarver 1:7ad98913098c 24
JimCarver 1:7ad98913098c 25
JimCarver 1:7ad98913098c 26
JimCarver 1:7ad98913098c 27 //Thread gpsThread;
JimCarver 1:7ad98913098c 28 GroveGPS gps;
JimCarver 1:7ad98913098c 29
JimCarver 1:7ad98913098c 30 Semaphore parse;
JimCarver 1:7ad98913098c 31 Thread parsethread(osPriorityBelowNormal);
JimCarver 1:7ad98913098c 32
JimCarver 1:7ad98913098c 33
JimCarver 1:7ad98913098c 34 static void parseLine() {
JimCarver 1:7ad98913098c 35 while(1) {
JimCarver 1:7ad98913098c 36 printf("waiting\r\n");
JimCarver 1:7ad98913098c 37 parse.wait();
JimCarver 1:7ad98913098c 38 printf("Released\r\n");
JimCarver 1:7ad98913098c 39 if (gps._last_line.find("GPGGA") != std::string::npos) {
JimCarver 1:7ad98913098c 40 gps.parseGGA();
JimCarver 1:7ad98913098c 41 }
JimCarver 1:7ad98913098c 42 if (gps._last_line.find("GPZDA") != std::string::npos) {
JimCarver 1:7ad98913098c 43 gps.parseZDA();
JimCarver 1:7ad98913098c 44 }
JimCarver 1:7ad98913098c 45 if (gps._last_line.find("GPVTG") != std::string::npos) {
JimCarver 1:7ad98913098c 46 gps.parseVTG();
JimCarver 1:7ad98913098c 47 }
JimCarver 1:7ad98913098c 48 gps._last_line = "";
JimCarver 1:7ad98913098c 49 }
JimCarver 1:7ad98913098c 50 }
JimCarver 1:7ad98913098c 51
JimCarver 1:7ad98913098c 52
JimCarver 1:7ad98913098c 53 void readCharacter(char newCharacter) {
JimCarver 1:7ad98913098c 54 if (newCharacter == '\n') {
JimCarver 1:7ad98913098c 55 parse.release();
JimCarver 1:7ad98913098c 56 printf("Release parse\r\n");
JimCarver 1:7ad98913098c 57 } else {
JimCarver 1:7ad98913098c 58 gps._last_line += newCharacter;
JimCarver 1:7ad98913098c 59 }
JimCarver 1:7ad98913098c 60 }
JimCarver 1:7ad98913098c 61
JimCarver 1:7ad98913098c 62
JimCarver 1:7ad98913098c 63 void service_serial(void) {
JimCarver 1:7ad98913098c 64 readCharacter(gps_serial.getc());
JimCarver 1:7ad98913098c 65 }
JimCarver 1:7ad98913098c 66
JimCarver 1:7ad98913098c 67
JimCarver 1:7ad98913098c 68 int calc_cs(char * str) {
JimCarver 1:7ad98913098c 69 char cs = 0;
JimCarver 1:7ad98913098c 70 int x = 1;
JimCarver 1:7ad98913098c 71
JimCarver 1:7ad98913098c 72 while(str[x] != '*') {
JimCarver 1:7ad98913098c 73 cs ^= str[x++];
JimCarver 1:7ad98913098c 74 }
JimCarver 1:7ad98913098c 75 return(cs);
JimCarver 1:7ad98913098c 76 }
JimCarver 1:7ad98913098c 77
JimCarver 1:7ad98913098c 78 void nema_send( void ) {
JimCarver 1:7ad98913098c 79
JimCarver 1:7ad98913098c 80 char nema_mode[] = "$PMTK314,0,0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0*";
JimCarver 1:7ad98913098c 81 char nema_cmd[64];
JimCarver 1:7ad98913098c 82 int x = 0;
JimCarver 1:7ad98913098c 83 sprintf( nema_cmd, "%s%x\r\n", nema_mode, calc_cs(nema_mode));
JimCarver 1:7ad98913098c 84 while(nema_cmd[x]) {
JimCarver 1:7ad98913098c 85 gps_serial.putc(nema_cmd[x++]);
JimCarver 1:7ad98913098c 86 }
JimCarver 1:7ad98913098c 87 }
JimCarver 1:7ad98913098c 88
JimCarver 1:7ad98913098c 89 int GPS_init() {
JimCarver 1:7ad98913098c 90 gps._last_line = "";
JimCarver 1:7ad98913098c 91 gps_serial.attach( &service_serial, Serial::RxIrq );
JimCarver 1:7ad98913098c 92 gps.gps_gga.new_flag = 0;
JimCarver 1:7ad98913098c 93 gps.gps_zda.new_flag = 0;
JimCarver 1:7ad98913098c 94 gps.gps_vtg.new_flag = 0;
JimCarver 1:7ad98913098c 95 nema_send();
JimCarver 1:7ad98913098c 96 printf("\r\nGPS Init\r\n");
JimCarver 1:7ad98913098c 97 parsethread.start(parseLine);
JimCarver 1:7ad98913098c 98 return 0;
JimCarver 1:7ad98913098c 99 }