samples: lora: receive: demo async reception

Demonstrate asynchronous reception in the LoRa sample.

Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
This commit is contained in:
Jordan Yates 2021-06-25 15:04:03 +10:00 committed by Carles Cufí
commit 13c516e04b

View file

@ -20,6 +20,24 @@ BUILD_ASSERT(DT_NODE_HAS_STATUS(DEFAULT_RADIO_NODE, okay),
#include <logging/log.h> #include <logging/log.h>
LOG_MODULE_REGISTER(lora_receive); LOG_MODULE_REGISTER(lora_receive);
void lora_receive_cb(const struct device *dev, uint8_t *data, uint16_t size,
int16_t rssi, int8_t snr)
{
static int cnt;
ARG_UNUSED(dev);
ARG_UNUSED(size);
LOG_INF("Received data: %s (RSSI:%ddBm, SNR:%ddBm)",
log_strdup(data), rssi, snr);
/* Stop receiving after 10 packets */
if (++cnt == 10) {
LOG_INF("Stopping packet receptions");
lora_recv_async(dev, NULL);
}
}
void main(void) void main(void)
{ {
const struct device *lora_dev = DEVICE_DT_GET(DEFAULT_RADIO_NODE); const struct device *lora_dev = DEVICE_DT_GET(DEFAULT_RADIO_NODE);
@ -48,7 +66,9 @@ void main(void)
return; return;
} }
while (1) { /* Receive 4 packets synchronously */
LOG_INF("Synchronous reception");
for (int i = 0; i < 4; i++) {
/* Block until data arrives */ /* Block until data arrives */
len = lora_recv(lora_dev, data, MAX_DATA_LEN, K_FOREVER, len = lora_recv(lora_dev, data, MAX_DATA_LEN, K_FOREVER,
&rssi, &snr); &rssi, &snr);
@ -60,4 +80,9 @@ void main(void)
LOG_INF("Received data: %s (RSSI:%ddBm, SNR:%ddBm)", LOG_INF("Received data: %s (RSSI:%ddBm, SNR:%ddBm)",
log_strdup(data), rssi, snr); log_strdup(data), rssi, snr);
} }
/* Enable asynchronous reception */
LOG_INF("Asynchronous reception");
lora_recv_async(lora_dev, lora_receive_cb);
k_sleep(K_FOREVER);
} }