Zephyr API Documentation 4.4.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
lora.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Manivannan Sadhasivam
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_LORA_H_
13#define ZEPHYR_INCLUDE_DRIVERS_LORA_H_
14
23
24#include <stdint.h>
25#include <zephyr/kernel.h>
26#include <zephyr/device.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
57
67 SF_5 = 5,
68 SF_6 = 6,
69 SF_7 = 7,
70 SF_8 = 8,
71 SF_9 = 9,
72 SF_10 = 10,
73 SF_11 = 11,
74 SF_12 = 12,
75};
76
87 CR_4_5 = 1,
88 CR_4_6 = 2,
89 CR_4_7 = 3,
90 CR_4_8 = 4,
91};
92
106
131
202
208
215typedef void (*lora_recv_cb)(const struct device *dev, uint8_t *data, uint16_t size,
216 int16_t rssi, int8_t snr, void *user_data);
217
226typedef void (*lora_cad_cb)(const struct device *dev, bool activity_detected,
227 void *user_data);
228
235typedef int (*lora_api_config)(const struct device *dev,
236 struct lora_modem_config *config);
237
244typedef uint32_t (*lora_api_airtime)(const struct device *dev, uint32_t data_len);
245
252typedef int (*lora_api_send)(const struct device *dev,
253 uint8_t *data, uint32_t data_len);
254
261typedef int (*lora_api_send_async)(const struct device *dev,
262 uint8_t *data, uint32_t data_len,
263 struct k_poll_signal *async);
264
271typedef int (*lora_api_recv)(const struct device *dev, uint8_t *data,
272 uint8_t size,
273 k_timeout_t timeout, int16_t *rssi, int8_t *snr);
274
282typedef int (*lora_api_recv_async)(const struct device *dev, lora_recv_cb cb,
283 void *user_data);
284
291typedef int (*lora_api_cad)(const struct device *dev, k_timeout_t timeout);
292
299typedef int (*lora_api_cad_async)(const struct device *dev, lora_cad_cb cb,
300 void *user_data);
301
308typedef int (*lora_api_recv_duty_cycle)(const struct device *dev,
309 k_timeout_t rx_period,
310 k_timeout_t sleep_period,
311 lora_recv_cb cb, void *user_data);
312
319typedef int (*lora_api_test_cw)(const struct device *dev, uint32_t frequency,
320 int8_t tx_power, uint16_t duration);
321
322__subsystem struct lora_driver_api {
323 lora_api_config config;
324 lora_api_airtime airtime;
325 lora_api_send send;
326 lora_api_send_async send_async;
327 lora_api_recv recv;
328 lora_api_recv_async recv_async;
329 lora_api_cad cad;
330 lora_api_cad_async cad_async;
331 lora_api_recv_duty_cycle recv_duty_cycle;
332 lora_api_test_cw test_cw;
333};
334
336
345static inline int lora_config(const struct device *dev,
346 struct lora_modem_config *config)
347{
348 const struct lora_driver_api *api =
349 (const struct lora_driver_api *)dev->api;
350
351 return api->config(dev, config);
352}
353
363static inline uint32_t lora_airtime(const struct device *dev, uint32_t data_len)
364{
365 const struct lora_driver_api *api =
366 (const struct lora_driver_api *)dev->api;
367
368 return api->airtime(dev, data_len);
369}
370
383static inline int lora_send(const struct device *dev,
384 uint8_t *data, uint32_t data_len)
385{
386 const struct lora_driver_api *api =
387 (const struct lora_driver_api *)dev->api;
388
389 return api->send(dev, data, data_len);
390}
391
408static inline int lora_send_async(const struct device *dev,
409 uint8_t *data, uint32_t data_len,
410 struct k_poll_signal *async)
411{
412 const struct lora_driver_api *api =
413 (const struct lora_driver_api *)dev->api;
414
415 return api->send_async(dev, data, data_len, async);
416}
417
434static inline int lora_recv(const struct device *dev, uint8_t *data,
435 uint8_t size,
436 k_timeout_t timeout, int16_t *rssi, int8_t *snr)
437{
438 const struct lora_driver_api *api =
439 (const struct lora_driver_api *)dev->api;
440
441 return api->recv(dev, data, size, timeout, rssi, snr);
442}
443
459static inline int lora_recv_async(const struct device *dev, lora_recv_cb cb,
460 void *user_data)
461{
462 const struct lora_driver_api *api =
463 (const struct lora_driver_api *)dev->api;
464
465 return api->recv_async(dev, cb, user_data);
466}
467
484static inline int lora_cad(const struct device *dev, k_timeout_t timeout)
485{
486 const struct lora_driver_api *api =
487 (const struct lora_driver_api *)dev->api;
488
489 if (api->cad == NULL) {
490 return -ENOSYS;
491 }
492
493 return api->cad(dev, timeout);
494}
495
510static inline int lora_cad_async(const struct device *dev, lora_cad_cb cb,
511 void *user_data)
512{
513 const struct lora_driver_api *api =
514 (const struct lora_driver_api *)dev->api;
515
516 if (api->cad_async == NULL) {
517 return -ENOSYS;
518 }
519
520 return api->cad_async(dev, cb, user_data);
521}
522
541static inline int lora_recv_duty_cycle(const struct device *dev,
542 k_timeout_t rx_period,
543 k_timeout_t sleep_period,
544 lora_recv_cb cb, void *user_data)
545{
546 const struct lora_driver_api *api =
547 (const struct lora_driver_api *)dev->api;
548
549 if (api->recv_duty_cycle == NULL) {
550 return -ENOSYS;
551 }
552
553 return api->recv_duty_cycle(dev, rx_period, sleep_period, cb, user_data);
554}
555
568static inline int lora_test_cw(const struct device *dev, uint32_t frequency,
569 int8_t tx_power, uint16_t duration)
570{
571 const struct lora_driver_api *api =
572 (const struct lora_driver_api *)dev->api;
573
574 if (api->test_cw == NULL) {
575 return -ENOSYS;
576 }
577
578 return api->test_cw(dev, frequency, tx_power, duration);
579}
580
581#ifdef __cplusplus
582}
583#endif
584
588
589#endif /* ZEPHYR_INCLUDE_DRIVERS_LORA_H_ */
lora_cad_symbol_num
Number of symbols used for Channel Activity Detection.
Definition lora.h:99
lora_cad_mode
Channel Activity Detection mode.
Definition lora.h:113
static int lora_test_cw(const struct device *dev, uint32_t frequency, int8_t tx_power, uint16_t duration)
Transmit an unmodulated continuous wave at a given frequency.
Definition lora.h:568
static int lora_recv(const struct device *dev, uint8_t *data, uint8_t size, k_timeout_t timeout, int16_t *rssi, int8_t *snr)
Receive data over LoRa.
Definition lora.h:434
lora_datarate
LoRa data-rate.
Definition lora.h:66
static int lora_cad_async(const struct device *dev, lora_cad_cb cb, void *user_data)
Perform Channel Activity Detection asynchronously.
Definition lora.h:510
static int lora_send_async(const struct device *dev, uint8_t *data, uint32_t data_len, struct k_poll_signal *async)
Asynchronously send data over LoRa.
Definition lora.h:408
static int lora_cad(const struct device *dev, k_timeout_t timeout)
Perform Channel Activity Detection.
Definition lora.h:484
lora_coding_rate
LoRa coding rate.
Definition lora.h:86
lora_signal_bandwidth
LoRa signal bandwidth.
Definition lora.h:40
static int lora_recv_duty_cycle(const struct device *dev, k_timeout_t rx_period, k_timeout_t sleep_period, lora_recv_cb cb, void *user_data)
Start receive duty cycling (wake-on-radio).
Definition lora.h:541
static int lora_config(const struct device *dev, struct lora_modem_config *config)
Configure the LoRa modem.
Definition lora.h:345
static int lora_send(const struct device *dev, uint8_t *data, uint32_t data_len)
Send data over LoRa.
Definition lora.h:383
static uint32_t lora_airtime(const struct device *dev, uint32_t data_len)
Query the airtime of a packet with a given length.
Definition lora.h:363
static int lora_recv_async(const struct device *dev, lora_recv_cb cb, void *user_data)
Receive data asynchronously over LoRa.
Definition lora.h:459
@ LORA_CAD_SYMB_8
8 symbols
Definition lora.h:103
@ LORA_CAD_SYMB_16
16 symbols
Definition lora.h:104
@ LORA_CAD_SYMB_2
2 symbols
Definition lora.h:101
@ LORA_CAD_SYMB_4
4 symbols
Definition lora.h:102
@ LORA_CAD_SYMB_1
1 symbol
Definition lora.h:100
@ LORA_CAD_MODE_RX
CAD before receive: lora_recv() performs CAD first and returns 0 immediately if no activity is detect...
Definition lora.h:123
@ LORA_CAD_MODE_NONE
No CAD (default).
Definition lora.h:115
@ LORA_CAD_MODE_LBT
Listen Before Talk: lora_send() performs CAD before transmitting and returns -EBUSY if the channel is...
Definition lora.h:129
@ SF_5
Spreading factor 5 (fastest, shortest range).
Definition lora.h:67
@ SF_12
Spreading factor 12 (slowest, longest range).
Definition lora.h:74
@ SF_8
Spreading factor 8.
Definition lora.h:70
@ SF_11
Spreading factor 11.
Definition lora.h:73
@ SF_10
Spreading factor 10.
Definition lora.h:72
@ SF_9
Spreading factor 9.
Definition lora.h:71
@ SF_6
Spreading factor 6.
Definition lora.h:68
@ SF_7
Spreading factor 7.
Definition lora.h:69
@ CR_4_5
Coding rate 4/5 (4 information bits, 1 error correction bit).
Definition lora.h:87
@ CR_4_6
Coding rate 4/6 (4 information bits, 2 error correction bits).
Definition lora.h:88
@ CR_4_8
Coding rate 4/8 (4 information bits, 4 error correction bits).
Definition lora.h:90
@ CR_4_7
Coding rate 4/7 (4 information bits, 3 error correction bits).
Definition lora.h:89
@ BW_200_KHZ
203 kHz
Definition lora.h:49
@ BW_250_KHZ
250 kHz
Definition lora.h:50
@ BW_10_KHZ
10.42 kHz
Definition lora.h:42
@ BW_31_KHZ
31.25 kHz
Definition lora.h:45
@ BW_125_KHZ
125 kHz
Definition lora.h:48
@ BW_400_KHZ
406 kHz
Definition lora.h:51
@ BW_800_KHZ
812 kHz
Definition lora.h:53
@ BW_41_KHZ
41.67 kHz
Definition lora.h:46
@ BW_500_KHZ
500 kHz
Definition lora.h:52
@ BW_62_KHZ
62.5 kHz
Definition lora.h:47
@ BW_7_KHZ
7.81 kHz
Definition lora.h:41
@ BW_1600_KHZ
1625 kHz
Definition lora.h:55
@ BW_15_KHZ
15.63 kHz
Definition lora.h:43
@ BW_20_KHZ
20.83 kHz
Definition lora.h:44
@ BW_1000_KHZ
1000 kHz
Definition lora.h:54
#define ENOSYS
Function not implemented.
Definition errno.h:82
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
ssize_t send(int sock, const void *buf, size_t len, int flags)
ssize_t recv(int sock, void *buf, size_t max_len, int flags)
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT8_TYPE__ int8_t
Definition stdint.h:72
__INT16_TYPE__ int16_t
Definition stdint.h:73
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Definition kernel.h:6566
Kernel timeout type.
Definition clock.h:65
Structure containing the configuration of a LoRa modem.
Definition lora.h:136
struct lora_modem_config::@115122161215247245016110057201332052344206077034 cad
Channel Activity Detection parameters.
uint32_t frequency
Frequency in Hz to use for transceiving.
Definition lora.h:138
enum lora_signal_bandwidth bandwidth
The bandwidth to use for transceiving.
Definition lora.h:141
bool tx
Set to true for transmission, false for receiving.
Definition lora.h:156
bool packet_crc_disable
Set to true to disable the 16-bit payload CRC.
Definition lora.h:179
int8_t tx_power
TX-power in dBm to use for transmission.
Definition lora.h:153
uint8_t detection_peak
Detection peak threshold (hardware-specific, dimensionless).
Definition lora.h:193
bool iq_inverted
Invert the In-Phase and Quadrature (IQ) signals.
Definition lora.h:165
enum lora_coding_rate coding_rate
The coding rate to use for transceiving.
Definition lora.h:147
uint16_t preamble_len
Length of the preamble.
Definition lora.h:150
enum lora_cad_symbol_num symbol_num
Number of symbols for CAD detection.
Definition lora.h:187
enum lora_cad_mode mode
CAD mode.
Definition lora.h:184
enum lora_datarate datarate
The data-rate to use for transceiving.
Definition lora.h:144
uint8_t detection_minimum
Minimum detection threshold (hardware-specific, dimensionless).
Definition lora.h:199
bool public_network
Sets the sync-byte to use:
Definition lora.h:176