ESP_IOT v2.5
IOT ESP Coding
MultipleSatellite.h
Go to the documentation of this file.
1/*
2 *SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
3 *
4 *SPDX-License-Identifier: MIT
5 */
6
7#ifndef __MULITIPLESATELITE_H
8#define __MULITIPLESATELITE_H
9
10//#include <Arduino.h>
11#include "../../Defines.h"
12#include "TinyGPS.h"
13
14typedef enum {
15 SATELLITE_MODE_GPS = 0, // GPS mode
16 SATELLITE_MODE_BDS, // BDS mode
17 SATELLITE_MODE_GLONASS, // GLONASS mode
18 SATELLITE_MODE_GALILEO, // GALILEO mode
19 SATELLITE_MODE_QZSS, // QZSS mode
21
22typedef enum {
23 BOOT_HOST_START = 0, // Hot start
24 BOOT_WARM_START, // Warm start
25 BOOT_COLD_START, // Cold start
26 BOOT_FACTORY_START, // Factory start
27 BOOT_FACTORY_DISABLE_SERIAL_RADIO, // Factory starts, disables the serial port output and radio parts, and can
28 // respond to serial port configurations.
29 BOOT_FACTORY_ENABLE_SERIAL_RADIO, // Factory start enables the serial port output and radio frequency parts
31
33public:
34 MultipleSatellite(HardwareSerial& serialPort, long baudRate, uint32_t config, int rxPin, int txPin)
35 : _serial(serialPort), _baudRate(baudRate), _config(config), _rxPin(rxPin), _txPin(txPin)
36 {
37 }
38 void begin()
39 {
40 _serial.begin(_baudRate, _config, _rxPin, _txPin);
41 }
42
43 bool available()
44 {
45 return _serial.available() > 0;
46 }
47
48 char read()
49 {
50 return _serial.read();
51 }
52
53 void write(const char* data)
54 {
55 _serial.print(data);
56 }
57
58 void updateGPS()
59 {
60 while (available()) {
61 char c = read();
62 encode(c);
63 }
64 }
65
67 {
68 write("$PCAS06,0*1B\r\n");
69 return findCharacter("SW=");
70 }
71
73 {
74 return findCharacter("ANTENNA");
75 }
76
78 {
79 write("$PCAS06,2*19\r\n");
80 String mode = findCharacter("MO=");
81 if (mode == "G") {
82 return "GPS";
83 } else if (mode == "B") {
84 return "BDS";
85 } else if (mode == "R") {
86 return "GLONASS";
87 } else if (mode == "E") {
88 return "GALILEO";
89 } else if (mode == "Q") {
90 return "QZSS";
91 } else {
92 return "Unknown";
93 }
94 }
95
97 {
98 switch (mode) {
100 write("$PCAS04,1*18\r\n");
101 break;
103 write("$PCAS04,2*1B\r\n");
104 break;
106 write("$PCAS04,4*1D\r\n");
107 break;
109 write("$PCAS04,8*11\r\n");
110 break;
112 write("$PCAS04,20*2B\r\n");
113 break;
114 default:
115 break;
116 }
117 }
118
120 {
121 switch (mode) {
122 case BOOT_HOST_START:
123 write("$PCAS10,0*1C\r\n");
124 break;
125 case BOOT_WARM_START:
126 write("$PCAS10,1*1D\r\n");
127 break;
128 case BOOT_COLD_START:
129 write("$PCAS10,2*1E\r\n");
130 break;
132 reset();
133 write("$PCAS10,3*1F\r\n");
134 break;
136 write("$PCAS10,8*14\r\n");
137 break;
139 write("$PCAS10,9*15\r\n");
140 break;
141 default:
142 break;
143 }
144 }
145
147 write("$PCAS12,65535*1E\r\n");
148 }
149
150private:
151 HardwareSerial& _serial;
152 long _baudRate;
153 uint32_t _config;
154 int _rxPin;
155 int _txPin;
156 String findCharacter(const char* searchStr)
157 {
158 delay(100);
159 char GNSSbuf[100];
160 int GNSSbufindexsum = 0;
161
162 while (true) {
163 if (available()) {
164 char d = read();
165
166 if (d == '\n') {
167 GNSSbuf[GNSSbufindexsum] = 0;
168 // Serial.printf("%s\n", GNSSbuf);
169 GNSSbufindexsum = 0;
170 if (strstr(GNSSbuf, searchStr) != nullptr) {
171 break;
172 }
173 } else {
174 GNSSbuf[GNSSbufindexsum++] = d;
175 if (GNSSbufindexsum >= sizeof(GNSSbuf) - 1) {
176 GNSSbufindexsum = sizeof(GNSSbuf) - 1;
177 }
178 }
179 }
180 }
181 char* p = strstr(GNSSbuf, searchStr);
182 if (p != nullptr) {
183 strcpy(GNSSbuf, p + strlen(searchStr));
184 }
185
186 char* q = strstr(GNSSbuf, "*");
187 if (q != nullptr) {
188 *q = 0;
189 }
190 return String(GNSSbuf);
191 }
192};
193
194#endif
boot_mode_t
@ BOOT_FACTORY_ENABLE_SERIAL_RADIO
@ BOOT_HOST_START
@ BOOT_COLD_START
@ BOOT_WARM_START
@ BOOT_FACTORY_DISABLE_SERIAL_RADIO
@ BOOT_FACTORY_START
satellite_mode_t
@ SATELLITE_MODE_QZSS
@ SATELLITE_MODE_BDS
@ SATELLITE_MODE_GALILEO
@ SATELLITE_MODE_GLONASS
@ SATELLITE_MODE_GPS
void setSystemBootMode(boot_mode_t mode)
MultipleSatellite(HardwareSerial &serialPort, long baudRate, uint32_t config, int rxPin, int txPin)
void write(const char *data)
void setSatelliteMode(satellite_mode_t mode)
void reset()
Definition: TinyGPS.h:256
bool encode(char c)
Definition: TinyGPS.cpp:67