Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX127x sx12xx_hal
Diff: lorawan.cpp
- Revision:
- 16:67fa19bc6331
- Parent:
- 13:fa2095be01c4
- Child:
- 17:763412df6872
--- a/lorawan.cpp Thu Aug 10 14:53:12 2017 -0700
+++ b/lorawan.cpp Thu Aug 10 17:56:02 2017 -0700
@@ -29,6 +29,7 @@
volatile uint16_t LoRaWan::rx_slot;
volatile uint32_t LoRaWan::rx_ms; // captured timer milliseconds at RxDone
bool LoRaWan::do_downlink;
+uint32_t LoRaWan::dev_addr_filter;
#ifdef USE_BAND_915
/* us915-single-channel spreading factors: */
@@ -257,6 +258,20 @@
// printf("\n");
}
+void LoRaWan::filtered_printf(uint32_t dev_addr, const char* format, ...)
+{
+ va_list args;
+
+ if (dev_addr_filter != 0) {
+ if (dev_addr_filter != dev_addr)
+ return;
+ }
+
+ va_start(args, format);
+ vprintf(format, args);
+ va_end(args);
+}
+
uint8_t* Write4ByteValue(uint8_t output[], uint32_t input)
{
uint8_t* ptr = output;
@@ -653,9 +668,9 @@
rxFRMPayload_length = (lora.RegRxNbBytes - LORA_FRAMEMICBYTES) - (rxofs + 1);
rxFRMPayload = &radio.rx_buf[rxofs+1];
rx_fport_ptr = &radio.rx_buf[rxofs];
- printf("port:%d, len:%d, ", *rx_fport_ptr, rxFRMPayload_length);
+ filtered_printf(mote->dev_addr, "port:%d, len:%d, ", *rx_fport_ptr, rxFRMPayload_length);
} else
- printf("no-payload\r\n");
+ filtered_printf(mote->dev_addr, "no-payload\r\n");
LoRa_GenerateDataFrameIntegrityCode(mote->network_session_key, radio.rx_buf, lora.RegRxNbBytes-LORA_FRAMEMICBYTES, rx_fhdr->DevAddr, true, rx_fhdr->FCnt, (uint8_t*)&calculated_mic);
@@ -664,36 +679,36 @@
rx_mic += radio.rx_buf[lora.RegRxNbBytes-3] << 8;
rx_mic += radio.rx_buf[lora.RegRxNbBytes-4];
if (calculated_mic != rx_mic) {
- printf("[31mgenMic:%08lx, rxMic:%08lx\r\n", calculated_mic, rx_mic);
- printf("mic fail[0m\n");
+ filtered_printf(mote->dev_addr, "[31mgenMic:%08lx, rxMic:%08lx\r\n", calculated_mic, rx_mic);
+ filtered_printf(mote->dev_addr, "mic fail[0m\n");
return;
}
if (rx_fport_ptr != NULL && *rx_fport_ptr == 0) {
/* mac commands are encrypted onto port 0 */
LoRa_EncryptPayload(mote->network_session_key, rxFRMPayload, rxFRMPayload_length, rx_fhdr->DevAddr, true, rx_fhdr->FCnt, decrypted);
- printf("mac commands encrypted on port 0\r\n");
+ filtered_printf(mote->dev_addr, "mac commands encrypted on port 0\r\n");
parse_mac_command(mote, decrypted, rxFRMPayload_length);
} else {
if (rx_fhdr->FCtrl.ulBits.FOptsLen > 0) {
/* mac commands are in header */
- printf("mac commands in header\r\n");
+ filtered_printf(mote->dev_addr, "mac commands in header\r\n");
rxofs = sizeof(mhdr_t) + sizeof(fhdr_t);
parse_mac_command(mote, &radio.rx_buf[rxofs], rx_fhdr->FCtrl.ulBits.FOptsLen);
}
if (rxFRMPayload != NULL) {
LoRa_EncryptPayload(mote->app_session_key, rxFRMPayload, rxFRMPayload_length, rx_fhdr->DevAddr, true, rx_fhdr->FCnt, decrypted);
- /*printf("app-decrypt:");
+ /*filtered_printf("app-decrypt:");
for (rxofs = 0; rxofs < rxFRMPayload_length; rxofs++) {
- printf("%02x ", decrypted[rxofs]);
+ filtered_printf("%02x ", decrypted[rxofs]);
}
- printf(" ");
+ filtered_printf(" ");
for (rxofs = 0; rxofs < rxFRMPayload_length; rxofs++) {
if (decrypted[rxofs] >= ' ' && decrypted[rxofs] < 0x7f)
- printf("%c", decrypted[rxofs]);
+ filtered_printf("%c", decrypted[rxofs]);
}
- printf("\n");*/
- decrypted_uplink(decrypted, rxFRMPayload_length, *rx_fport_ptr);
+ filtered_printf("\n");*/
+ decrypted_uplink(mote->dev_addr, decrypted, rxFRMPayload_length, *rx_fport_ptr);
}
}
@@ -819,10 +834,6 @@
}
} else if (mhdr->bits.MType == MTYPE_UNCONF_UP || mhdr->bits.MType == MTYPE_CONF_UP) {
fhdr_t *fhdr = (fhdr_t*)&radio.rx_buf[1];
- if (mhdr->bits.MType == MTYPE_UNCONF_UP)
- printf("MTYPE_UNCONF_UP, ");
- else if (mhdr->bits.MType == MTYPE_CONF_UP)
- printf("MTYPE_CONF_UP, ");
for (i = 0; i < N_MOTES; i++) {
if (motes[i].dev_addr == fhdr->DevAddr) {
@@ -830,14 +841,26 @@
}
}
+ filtered_printf(mote->dev_addr, "%u, %lu, %.1fdB, %ddBm, ",
+ LoRaWan::rx_slot,
+ time(NULL),
+ lora.RegPktSnrValue / 4.0,
+ lora.get_pkt_rssi()
+ );
+
+ if (mhdr->bits.MType == MTYPE_UNCONF_UP)
+ filtered_printf(mote->dev_addr, "MTYPE_UNCONF_UP, ");
+ else if (mhdr->bits.MType == MTYPE_CONF_UP)
+ filtered_printf(mote->dev_addr, "MTYPE_CONF_UP, ");
+
if (mote != NULL) {
- printf("mote:%lx, ", mote->dev_addr);
+ filtered_printf(mote->dev_addr, "mote:%lx, ", mote->dev_addr);
parse_uplink(mote);
+ filtered_printf(mote->dev_addr, "\r\n");
} else {
- printf("mote-not-found %08lx", fhdr->DevAddr);
+ printf("mote-not-found %08lx\r\n", fhdr->DevAddr);
}
- printf("\r\n");
} else
printf(" [31m%02x mtype:%d[0m\r\n", radio.rx_buf[0], mhdr->bits.MType);