@@ -25,6 +25,26 @@ static const char *kProductName = "SparkFun IoT Node LoRaWAN";
25
25
// delay used in loop during startup
26
26
const uint32_t kStartupLoopDelayMS = 70 ;
27
27
28
+ // ---------------------------------------------------------------------------
29
+ // LoRaWAN Receive message ids
30
+ //
31
+ // Set the on-board LED to the RGB value in the message
32
+ const uint8_t kLoRaWANMsgLEDRGB = 0x01 ;
33
+
34
+ // Turn off the on-board LED
35
+ const uint8_t kLoRaWANMsgLEDOff = 0x02 ;
36
+
37
+ // Set the on-board LED to blink with the given RGB color
38
+ const uint8_t kLoRaWANMsgLEDBlink = 0x03 ;
39
+
40
+ // Set the on-board LED to fast blink with the given RGB color
41
+ const uint8_t kLoRaWANMsgLEDFastBlink = 0x04 ;
42
+
43
+ // Set the on-board LED to flash with the given RGB color
44
+ const uint8_t kLoRaWANMsgLEDFlash = 0x05 ;
45
+
46
+ // ---------------------------------------------------------------------------
47
+
28
48
// Application keys - used to encrypt runtime secrets for the app.
29
49
//
30
50
// NOTE: Gen a base 64 key % openssl rand -base64 32
@@ -265,6 +285,9 @@ bool sfeIoTNodeLoRaWAN::onSetup()
265
285
// Event Callback for lorawan send status
266
286
flxRegisterEventCB (flxEvent::kLoRaWANSendStatus , this , &sfeIoTNodeLoRaWAN::onLoRaWANSendEvent);
267
287
288
+ // Event Callback for lorawan receive status
289
+ flxRegisterEventCB (flxEvent::kLoRaWANReceivedMessage , this , &sfeIoTNodeLoRaWAN::onLoRaWANReceiveEvent);
290
+
268
291
// Set the default timer interval, before restore of settings
269
292
_timer.interval = kDefaultLogInterval ;
270
293
@@ -542,7 +565,41 @@ void sfeIoTNodeLoRaWAN::onLoRaWANSendEvent(bool bOkay)
542
565
else
543
566
sfeLED.flash (sfeLED.Red );
544
567
}
568
+ // ---------------------------------------------------------------------------
569
+ // Callback for LoRaWAN receive events
570
+ void sfeIoTNodeLoRaWAN::onLoRaWANReceiveEvent (uint32_t data)
571
+ {
572
+
573
+ // flxLog_I("LoRaWAN Received Event: 0x%0.8X", data);
574
+
575
+ uint8_t *pData = (uint8_t *)&data;
576
+
577
+ // We basically update/change the state of the on-board LED
578
+ sfeLEDColor_t color;
579
+ switch (pData[0 ])
580
+ {
581
+ case kLoRaWANMsgLEDRGB :
582
+ color = pData[1 ] << 16 | pData[2 ] << 8 | pData[3 ];
583
+ sfeLED.on (color);
584
+ break ;
545
585
586
+ case kLoRaWANMsgLEDOff :
587
+ sfeLED.off ();
588
+ break ;
589
+ case kLoRaWANMsgLEDBlink :
590
+ color = pData[1 ] << 16 | pData[2 ] << 8 | pData[3 ];
591
+ sfeLED.blink (color, 1000 );
592
+ break ;
593
+ case kLoRaWANMsgLEDFastBlink :
594
+ color = pData[1 ] << 16 | pData[2 ] << 8 | pData[3 ];
595
+ sfeLED.blink (color, 500 );
596
+ break ;
597
+ case kLoRaWANMsgLEDFlash :
598
+ color = pData[1 ] << 16 | pData[2 ] << 8 | pData[3 ];
599
+ sfeLED.flash (color);
600
+ break ;
601
+ }
602
+ }
546
603
// ---------------------------------------------------------------------------
547
604
// checkBatteryLevels()
548
605
//
0 commit comments