Skip to content

Commit d4540c5

Browse files
committed
Thales/GPS: fix hang and add extended trace
1 parent 838d644 commit d4540c5

File tree

3 files changed

+16
-54
lines changed

3 files changed

+16
-54
lines changed

libraries/GPS/src/GPS.cpp

Lines changed: 11 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -10,50 +10,6 @@ arduino::GPSClass::~GPSClass()
1010
{
1111
}
1212

13-
void arduino::GPSClass::begin(unsigned long baudrate, uint16_t config)
14-
{
15-
auto cmux = arduino::CMUXClass::get_default_instance();
16-
17-
auto serial = cmux->get_serial(1);
18-
_serial = (arduino::PTYSerial *)serial;
19-
nextSerialPort++;
20-
21-
_serial->write("ATE0\r\n", sizeof("ATE0\r\n"));
22-
readAndDrop();
23-
24-
// burn any incoming message on gps rx buffer
25-
readAndDrop();
26-
27-
do
28-
{
29-
_serial->write("AT^SPIO=0\r\n", sizeof("AT^SPIO=0\r\n"));
30-
readAndDrop();
31-
32-
_serial->write("AT^SPIO=1\r\n", sizeof("AT^SPIO=1\r\n"));
33-
readAndDrop();
34-
35-
_serial->write("AT^SCPIN=1,7,1,0\r\n", sizeof("AT^SCPIN=1,7,1,0\r\n"));
36-
readAndDrop();
37-
38-
_serial->write("AT^SSIO=7,1\r\n", sizeof("AT^SSIO=7,1\r\n"));
39-
readAndDrop();
40-
41-
_serial->write("AT^SGIO=7\r\n", sizeof("AT^SGIO=7\r\n"));
42-
} while (!checkGNSSEngine("^SGIO: 1"));
43-
44-
_serial->write("AT^SGPSC=Engine/StartMode,0\r\n", sizeof("AT^SGPSC=Engine/StartMode,0\r\n"));
45-
checkGNSSEngine("^SGPSC: \"Engine/StartMode\",\"0\"");
46-
47-
while (!_engine)
48-
{
49-
_serial->write("AT^SGPSC=Engine,3\r\n", sizeof("AT^SGPSC=Engine,3\r\n"));
50-
_engine = checkGNSSEngine("^SGPSC: \"Engine\",\"3\"");
51-
}
52-
53-
_serial->write("AT^SGPSC=Nmea/Urc,on\r\n", sizeof("AT^SGPSC=Nmea/Urc,on\r\n"));
54-
readAndDrop();
55-
}
56-
5713
int arduino::GPSClass::available(void)
5814
{
5915
return _serial->available();
@@ -100,15 +56,21 @@ bool arduino::GPSClass::checkGNSSEngine(const char *prefix)
10056

10157
void arduino::GPSClass::readAndDrop()
10258
{
103-
char buf[256];
59+
char buf[256];
60+
uint32_t start = millis();
10461
int dataRead = 0;
105-
while((dataRead = available()) <= 0);
62+
while (!available() && millis() - start < 1000) {}
10663

10764
String tmp = "";
108-
while((dataRead =_serial->read(buf, 1)) > 0);
65+
while(_serial->read(buf, 1) > 0);
10966
}
11067

111-
void arduino::GPSClass::begin(unsigned long baudrate)
68+
void arduino::GPSClass::begin(unsigned long baudrate) {
69+
begin(baudrate, 0);
70+
}
71+
72+
73+
void arduino::GPSClass::begin(unsigned long baudrate, uint16_t config)
11274
{
11375
auto cmux = arduino::CMUXClass::get_default_instance();
11476

@@ -119,9 +81,6 @@ void arduino::GPSClass::begin(unsigned long baudrate)
11981
_serial->write("ATE0\r\n", sizeof("ATE0\r\n"));
12082
readAndDrop();
12183

122-
// burn any incoming message on gps rx buffer
123-
readAndDrop();
124-
12584
do
12685
{
12786
_serial->write("AT^SPIO=0\r\n", sizeof("AT^SPIO=0\r\n"));
@@ -207,7 +166,7 @@ arduino::GPSClass::operator bool()
207166
return checkGNSSEngine("\"Engine\",\"3\"");
208167
}
209168

210-
static Stream *trace_stream = nullptr;
169+
extern Stream *trace_stream;
211170
static void arduino_print(const char *c)
212171
{
213172
if (trace_stream)

libraries/GPS/src/GPS.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class GPSClass : public HardwareSerial {
3333
GPSClass();
3434
~GPSClass();
3535

36-
void begin(unsigned long baudrate);
37-
void begin(unsigned long baudrate = 115200UL, uint16_t config = 0);
36+
void begin(unsigned long baudrate = 115200);
37+
void begin(unsigned long baudrate, uint16_t config);
3838
void end(void);
3939
int available(void);
4040
int peek(void);

libraries/GSM/src/PTYSerial.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,17 +127,20 @@ int PTYSerial::get_port() {
127127
}
128128
int PTYSerial::write(const void *buffer) {
129129
const char *buf_ptr = static_cast<const char *>(buffer);
130+
tr_info("%s", buffer);
130131
return write(buf_ptr, sizeof(buffer));
131132
}
132133

133134
int PTYSerial::write(const void *buffer, size_t length) {
134135
const char *buf_ptr = static_cast<const char *>(buffer);
136+
tr_info("%s", buffer);
135137
int ret = _parent->populate_tx_buffer(buf_ptr, length, this->get_port());
136138
return ret;
137139
}
138140

139141
int PTYSerial::write(const void *buffer, size_t length, int id) {
140142
const char *buf_ptr = static_cast<const char *>(buffer);
143+
tr_info("%s", buffer);
141144
int ret = _parent->populate_tx_buffer(buf_ptr, length, id);
142145
return ret;
143146
}

0 commit comments

Comments
 (0)