Skip to content

Commit 751fedb

Browse files
authored
Merge pull request chipKIT32#342 from majenkotech/add-serial-event
Add support for serialEventX()
2 parents 437e64a + 6604fbd commit 751fedb

File tree

3 files changed

+137
-36
lines changed

3 files changed

+137
-36
lines changed

pic32/cores/pic32/HardwareSerial.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,9 @@ void __attribute__((interrupt(), nomips16)) IntSer7Handler(void)
12481248
** instantiated as Serial0.
12491249
*/
12501250
USBSerial Serial(&rx_bufferUSB);
1251+
bool Serial_available() { return Serial.available(); }
12511252
#if defined(_SER0_BASE)
1253+
bool Serial0_available() { return Serial0.available(); }
12521254
#if defined(__PIC32_PPS__)
12531255
HardwareSerial Serial0((p32_uart *)_SER0_BASE, _SER0_IRQ, _SER0_VECTOR, _SER0_IPL, _SER0_SPL, IntSer0Handler, _SER0_TX_PIN, _SER0_RX_PIN, _SER0_TX_OUT, _SER0_RX_IN);
12541256
#else
@@ -1264,6 +1266,7 @@ HardwareSerial Serial0((p32_uart *)_SER0_BASE, _SER0_IRQ, _SER0_VECTOR, _SER0_IP
12641266
** however MZ have 6
12651267
*/
12661268
#if defined(_SER0_BASE)
1269+
bool Serial_available() { return Serial.available(); }
12671270
#if defined(__PIC32_PPS__)
12681271
HardwareSerial Serial((p32_uart *)_SER0_BASE, _SER0_IRQ, _SER0_VECTOR, _SER0_IPL, _SER0_SPL, IntSer0Handler, _SER0_TX_PIN, _SER0_RX_PIN, _SER0_TX_OUT, _SER0_RX_IN);
12691272
#else
@@ -1274,6 +1277,7 @@ HardwareSerial Serial((p32_uart *)_SER0_BASE, _SER0_IRQ, _SER0_VECTOR, _SER0_IPL
12741277
#endif //defined(_USB) && defined(_USE_USB_FOR_SERIAL_)
12751278

12761279
#if defined(_SER1_BASE)
1280+
bool Serial1_available() { return Serial1.available(); }
12771281
#if defined(__PIC32_PPS__)
12781282
HardwareSerial Serial1((p32_uart *)_SER1_BASE, _SER1_IRQ, _SER1_VECTOR, _SER1_IPL, _SER1_SPL, IntSer1Handler, _SER1_TX_PIN, _SER1_RX_PIN, _SER1_TX_OUT, _SER1_RX_IN);
12791283
#else
@@ -1282,6 +1286,7 @@ HardwareSerial Serial1((p32_uart *)_SER1_BASE, _SER1_IRQ, _SER1_VECTOR, _SER1_IP
12821286
#endif
12831287

12841288
#if defined(_SER2_BASE)
1289+
bool Serial2_available() { return Serial2.available(); }
12851290
#if defined(__PIC32MZXX__)
12861291
HardwareSerial Serial2((p32_uart *)_SER2_BASE, _SER2_IRQ, _SER2_VECTOR, _SER2_IPL, _SER2_SPL, IntSer2Handler, _SER2_TX_PIN, _SER2_RX_PIN, _SER2_TX_OUT, _SER2_RX_IN);
12871292
#else
@@ -1290,6 +1295,7 @@ HardwareSerial Serial2((p32_uart *)_SER2_BASE, _SER2_IRQ, _SER2_VECTOR, _SER2_IP
12901295
#endif
12911296

12921297
#if defined(_SER3_BASE)
1298+
bool Serial3_available() { return Serial3.available(); }
12931299
#if defined(__PIC32MZXX__)
12941300
HardwareSerial Serial3((p32_uart *)_SER3_BASE, _SER3_IRQ, _SER3_VECTOR, _SER3_IPL, _SER3_SPL, IntSer3Handler, _SER3_TX_PIN, _SER3_RX_PIN, _SER3_TX_OUT, _SER3_RX_IN);
12951301
#else
@@ -1298,6 +1304,7 @@ HardwareSerial Serial3((p32_uart *)_SER3_BASE, _SER3_IRQ, _SER3_VECTOR, _SER3_IP
12981304
#endif
12991305

13001306
#if defined(_SER4_BASE)
1307+
bool Serial4_available() { return Serial4.available(); }
13011308
#if defined(__PIC32MZXX__)
13021309
HardwareSerial Serial4((p32_uart *)_SER4_BASE, _SER4_IRQ, _SER4_VECTOR, _SER4_IPL, _SER4_SPL, IntSer4Handler, _SER4_TX_PIN, _SER4_RX_PIN, _SER4_TX_OUT, _SER4_RX_IN);
13031310
#else
@@ -1306,6 +1313,7 @@ HardwareSerial Serial4((p32_uart *)_SER4_BASE, _SER4_IRQ, _SER4_VECTOR, _SER4_IP
13061313
#endif
13071314

13081315
#if defined(_SER5_BASE)
1316+
bool Serial5_available() { return Serial5.available(); }
13091317
#if defined(__PIC32MZXX__)
13101318
HardwareSerial Serial5((p32_uart *)_SER5_BASE, _SER5_IRQ, _SER5_VECTOR, _SER5_IPL, _SER5_SPL, IntSer5Handler, _SER5_TX_PIN, _SER5_RX_PIN, _SER5_TX_OUT, _SER5_RX_IN);
13111319
#else
@@ -1314,6 +1322,7 @@ HardwareSerial Serial5((p32_uart *)_SER5_BASE, _SER5_IRQ, _SER5_VECTOR, _SER5_IP
13141322
#endif
13151323

13161324
#if defined(_SER6_BASE)
1325+
bool Serial6_available() { return Serial6.available(); }
13171326
#if defined(__PIC32MZXX__)
13181327
HardwareSerial Serial6((p32_uart *)_SER6_BASE, _SER6_IRQ, _SER6_VECTOR, _SER6_IPL, _SER6_SPL, IntSer6Handler, _SER6_TX_PIN, _SER6_RX_PIN, _SER6_TX_OUT, _SER6_RX_IN);
13191328
#else
@@ -1322,13 +1331,70 @@ HardwareSerial Serial6((p32_uart *)_SER6_BASE, _SER6_IRQ, _SER6_VECTOR, _SER6_IP
13221331
#endif
13231332

13241333
#if defined(_SER7_BASE)
1334+
bool Serial7_available() { return Serial7.available(); }
13251335
#if defined(__PIC32MZXX__)
13261336
HardwareSerial Serial7((p32_uart *)_SER7_BASE, _SER7_IRQ, _SER7_VECTOR, _SER7_IPL, _SER7_SPL, IntSer7Handler, _SER7_TX_PIN, _SER7_RX_PIN, _SER7_TX_OUT, _SER7_RX_IN);
13271337
#else
13281338
HardwareSerial Serial7((p32_uart *)_SER7_BASE, _SER7_IRQ, _SER7_VECTOR, _SER7_IPL, _SER7_SPL, IntSer7Handler);
13291339
#endif
13301340
#endif
13311341

1342+
void serialEventRun() {
1343+
#if defined(_USB) && defined(_USE_USB_FOR_SERIAL_)
1344+
if (Serial_available && serialEvent && Serial_available()) serialEvent();
1345+
#if (NUM_SERIAL_PORTS > 0)
1346+
if (Serial0_available && serialEvent0 && Serial0_available()) serialEvent0();
1347+
#endif
1348+
#if (NUM_SERIAL_PORTS > 1)
1349+
if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1();
1350+
#endif
1351+
#if (NUM_SERIAL_PORTS > 2)
1352+
if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2();
1353+
#endif
1354+
#if (NUM_SERIAL_PORTS > 3)
1355+
if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3();
1356+
#endif
1357+
#if (NUM_SERIAL_PORTS > 4)
1358+
if (Serial4_available && serialEvent4 && Serial4_available()) serialEvent4();
1359+
#endif
1360+
#if (NUM_SERIAL_PORTS > 5)
1361+
if (Serial5_available && serialEvent5 && Serial5_available()) serialEvent5();
1362+
#endif
1363+
#if (NUM_SERIAL_PORTS > 6)
1364+
if (Serial6_available && serialEvent6 && Serial6_available()) serialEvent6();
1365+
#endif
1366+
#if (NUM_SERIAL_PORTS > 7)
1367+
if (Serial7_available && serialEvent7 && Serial7_available()) serialEvent7();
1368+
#endif
1369+
#else
1370+
#if (NUM_SERIAL_PORTS > 0)
1371+
if (Serial_available && serialEvent && Serial_available()) serialEvent();
1372+
#endif
1373+
#if (NUM_SERIAL_PORTS > 1)
1374+
if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1();
1375+
#endif
1376+
#if (NUM_SERIAL_PORTS > 2)
1377+
if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2();
1378+
#endif
1379+
#if (NUM_SERIAL_PORTS > 3)
1380+
if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3();
1381+
#endif
1382+
#if (NUM_SERIAL_PORTS > 4)
1383+
if (Serial4_available && serialEvent4 && Serial4_available()) serialEvent4();
1384+
#endif
1385+
#if (NUM_SERIAL_PORTS > 5)
1386+
if (Serial5_available && serialEvent5 && Serial5_available()) serialEvent5();
1387+
#endif
1388+
#if (NUM_SERIAL_PORTS > 6)
1389+
if (Serial6_available && serialEvent6 && Serial6_available()) serialEvent6();
1390+
#endif
1391+
#if (NUM_SERIAL_PORTS > 7)
1392+
if (Serial7_available && serialEvent7 && Serial7_available()) serialEvent7();
1393+
#endif
1394+
#endif
1395+
}
1396+
1397+
13321398
/* ------------------------------------------------------------ */
13331399

13341400
/************************************************************************/

pic32/cores/pic32/HardwareSerial.h

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -206,52 +206,70 @@ class USBSerial : public Stream
206206
** instantiated as Serial0.
207207
*/
208208
extern USBSerial Serial;
209+
void serialEvent() __attribute__((weak));
210+
bool Serial_available() __attribute__((weak));
209211
#define SERIAL_PORT_USBVIRTUAL Serial
210212
#define SERIAL_PORT_MONITOR Serial
211213
#if (NUM_SERIAL_PORTS > 0)
212214
extern HardwareSerial Serial0;
215+
void serialEvent0() __attribute__((weak));
216+
bool Serial0_available() __attribute__((weak));
213217
#define SERIAL_PORT_HARDWARE Serial0
214218
#define SERIAL_PORT_HARDWARE_OPEN Serial0
215219
#endif
216220

217221
#if (NUM_SERIAL_PORTS > 1)
218222
extern HardwareSerial Serial1;
223+
void serialEvent1() __attribute__((weak));
224+
bool Serial1_available() __attribute__((weak));
219225
#define SERIAL_PORT_HARDWARE1 Serial1
220226
#define SERIAL_PORT_HARDWARE_OPEN1 Serial1
221227
#endif
222228

223229
#if (NUM_SERIAL_PORTS > 2)
224230
extern HardwareSerial Serial2;
231+
void serialEvent2() __attribute__((weak));
232+
bool Serial2_available() __attribute__((weak));
225233
#define SERIAL_PORT_HARDWARE2 Serial2
226234
#define SERIAL_PORT_HARDWARE_OPEN2 Serial2
227235
#endif
228236

229237
#if (NUM_SERIAL_PORTS > 3)
230238
extern HardwareSerial Serial3;
239+
void serialEvent3() __attribute__((weak));
240+
bool Serial3_available() __attribute__((weak));
231241
#define SERIAL_PORT_HARDWARE3 Serial3
232242
#define SERIAL_PORT_HARDWARE_OPEN3 Serial3
233243
#endif
234244

235245
#if (NUM_SERIAL_PORTS > 4)
236246
extern HardwareSerial Serial4;
247+
void serialEvent4() __attribute__((weak));
248+
bool Serial4_available() __attribute__((weak));
237249
#define SERIAL_PORT_HARDWARE4 Serial4
238250
#define SERIAL_PORT_HARDWARE_OPEN4 Serial4
239251
#endif
240252

241253
#if (NUM_SERIAL_PORTS > 5)
242254
extern HardwareSerial Serial5;
255+
void serialEvent5() __attribute__((weak));
256+
bool Serial5_available() __attribute__((weak));
243257
#define SERIAL_PORT_HARDWARE5 Serial5
244258
#define SERIAL_PORT_HARDWARE_OPEN5 Serial5
245259
#endif
246260

247261
#if (NUM_SERIAL_PORTS > 6)
248262
extern HardwareSerial Serial6;
263+
void serialEvent6() __attribute__((weak));
264+
bool Serial6_available() __attribute__((weak));
249265
#define SERIAL_PORT_HARDWARE6 Serial6
250266
#define SERIAL_PORT_HARDWARE_OPEN6 Serial6
251267
#endif
252268

253269
#if (NUM_SERIAL_PORTS > 7)
254270
extern HardwareSerial Serial7;
271+
void serialEvent7() __attribute__((weak));
272+
bool Serial7_available() __attribute__((weak));
255273
#define SERIAL_PORT_HARDWARE7 Serial7
256274
#define SERIAL_PORT_HARDWARE_OPEN7 Serial7
257275
#endif
@@ -262,58 +280,74 @@ class USBSerial : public Stream
262280
*/
263281
#if (NUM_SERIAL_PORTS > 0)
264282
extern HardwareSerial Serial;
283+
void serialEvent() __attribute__((weak));
284+
bool Serial_available() __attribute__((weak));
265285
#define SERIAL_PORT_HARDWARE Serial
266286
#define SERIAL_PORT_MONITOR Serial
267287
#endif
268-
#if (NUM_SERIAL_PORTS > 1)
269-
extern HardwareSerial Serial1;
270-
#define SERIAL_PORT_HARDWARE1 Serial1
271-
#define SERIAL_PORT_HARDWARE_OPEN Serial1
272-
#endif
288+
#if (NUM_SERIAL_PORTS > 1)
289+
extern HardwareSerial Serial1;
290+
void serialEvent1() __attribute__((weak));
291+
bool Serial1_available() __attribute__((weak));
292+
#define SERIAL_PORT_HARDWARE1 Serial1
293+
#define SERIAL_PORT_HARDWARE_OPEN Serial1
294+
#endif
273295

274-
#if (NUM_SERIAL_PORTS > 2)
275-
extern HardwareSerial Serial2;
276-
#define SERIAL_PORT_HARDWARE2 Serial2
277-
#define SERIAL_PORT_HARDWARE_OPEN1 Serial2
278-
#endif
296+
#if (NUM_SERIAL_PORTS > 2)
297+
extern HardwareSerial Serial2;
298+
void serialEvent2() __attribute__((weak));
299+
bool Serial2_available() __attribute__((weak));
300+
#define SERIAL_PORT_HARDWARE2 Serial2
301+
#define SERIAL_PORT_HARDWARE_OPEN1 Serial2
302+
#endif
279303

280-
#if (NUM_SERIAL_PORTS > 3)
281-
extern HardwareSerial Serial3;
282-
#define SERIAL_PORT_HARDWARE3 Serial3
283-
#define SERIAL_PORT_HARDWARE_OPEN2 Serial3
284-
#endif
304+
#if (NUM_SERIAL_PORTS > 3)
305+
extern HardwareSerial Serial3;
306+
void serialEvent3() __attribute__((weak));
307+
bool Serial3_available() __attribute__((weak));
308+
#define SERIAL_PORT_HARDWARE3 Serial3
309+
#define SERIAL_PORT_HARDWARE_OPEN2 Serial3
310+
#endif
285311

286-
#if (NUM_SERIAL_PORTS > 4)
287-
extern HardwareSerial Serial4;
288-
#define SERIAL_PORT_HARDWARE4 Serial4
289-
#define SERIAL_PORT_HARDWARE_OPEN3 Serial4
290-
#endif
312+
#if (NUM_SERIAL_PORTS > 4)
313+
extern HardwareSerial Serial4;
314+
void serialEvent4() __attribute__((weak));
315+
bool Serial4_available() __attribute__((weak));
316+
#define SERIAL_PORT_HARDWARE4 Serial4
317+
#define SERIAL_PORT_HARDWARE_OPEN3 Serial4
318+
#endif
291319

292-
#if (NUM_SERIAL_PORTS > 5)
293-
extern HardwareSerial Serial5;
294-
#define SERIAL_PORT_HARDWARE5 Serial5
295-
#define SERIAL_PORT_HARDWARE_OPEN4 Serial5
296-
#endif
320+
#if (NUM_SERIAL_PORTS > 5)
321+
extern HardwareSerial Serial5;
322+
void serialEvent5() __attribute__((weak));
323+
bool Serial5_available() __attribute__((weak));
324+
#define SERIAL_PORT_HARDWARE5 Serial5
325+
#define SERIAL_PORT_HARDWARE_OPEN4 Serial5
326+
#endif
297327

298-
#if (NUM_SERIAL_PORTS > 6)
299-
extern HardwareSerial Serial6;
300-
#define SERIAL_PORT_HARDWARE6 Serial6
301-
#define SERIAL_PORT_HARDWARE_OPEN5 Serial6
302-
#endif
328+
#if (NUM_SERIAL_PORTS > 6)
329+
extern HardwareSerial Serial6;
330+
void serialEvent6() __attribute__((weak));
331+
bool Serial6_available() __attribute__((weak));
332+
#define SERIAL_PORT_HARDWARE6 Serial6
333+
#define SERIAL_PORT_HARDWARE_OPEN5 Serial6
334+
#endif
303335

304-
#if (NUM_SERIAL_PORTS > 7)
305-
extern HardwareSerial Serial7;
306-
#define SERIAL_PORT_HARDWARE7 Serial7
307-
#define SERIAL_PORT_HARDWARE_OPEN6 Serial7
308-
#endif
336+
#if (NUM_SERIAL_PORTS > 7)
337+
extern HardwareSerial Serial7;
338+
void serialEvent7() __attribute__((weak));
339+
bool Serial7_available() __attribute__((weak));
340+
#define SERIAL_PORT_HARDWARE7 Serial7
341+
#define SERIAL_PORT_HARDWARE_OPEN6 Serial7
342+
#endif
309343
#endif
310344

345+
void serialEventRun();
311346

312347
//* ------------------------------------------------------------
313348

314349
#endif // __cplusplus
315350

316-
317351
#endif // HardwareSerial_h
318352

319353
/************************************************************************/

pic32/cores/pic32/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ int main(void)
6161
{
6262
_scheduleTask();
6363
loop();
64+
if (serialEventRun) serialEventRun();
6465
}
6566
return 0;
6667
}

0 commit comments

Comments
 (0)