Zephyr API Documentation 4.3.99
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
45
63
74 CR_4_5 = 1,
75 CR_4_6 = 2,
76 CR_4_7 = 3,
77 CR_4_8 = 4,
78};
79
129
135
142typedef void (*lora_recv_cb)(const struct device *dev, uint8_t *data, uint16_t size,
143 int16_t rssi, int8_t snr, void *user_data);
144
151typedef int (*lora_api_config)(const struct device *dev,
152 struct lora_modem_config *config);
153
160typedef uint32_t (*lora_api_airtime)(const struct device *dev, uint32_t data_len);
161
168typedef int (*lora_api_send)(const struct device *dev,
169 uint8_t *data, uint32_t data_len);
170
177typedef int (*lora_api_send_async)(const struct device *dev,
178 uint8_t *data, uint32_t data_len,
179 struct k_poll_signal *async);
180
187typedef int (*lora_api_recv)(const struct device *dev, uint8_t *data,
188 uint8_t size,
189 k_timeout_t timeout, int16_t *rssi, int8_t *snr);
190
198typedef int (*lora_api_recv_async)(const struct device *dev, lora_recv_cb cb,
199 void *user_data);
200
207typedef int (*lora_api_test_cw)(const struct device *dev, uint32_t frequency,
208 int8_t tx_power, uint16_t duration);
209
210__subsystem struct lora_driver_api {
211 lora_api_config config;
212 lora_api_airtime airtime;
213 lora_api_send send;
214 lora_api_send_async send_async;
215 lora_api_recv recv;
216 lora_api_recv_async recv_async;
217 lora_api_test_cw test_cw;
218};
219
221
230static inline int lora_config(const struct device *dev,
231 struct lora_modem_config *config)
232{
233 const struct lora_driver_api *api =
234 (const struct lora_driver_api *)dev->api;
235
236 return api->config(dev, config);
237}
238
248static inline uint32_t lora_airtime(const struct device *dev, uint32_t data_len)
249{
250 const struct lora_driver_api *api =
251 (const struct lora_driver_api *)dev->api;
252
253 return api->airtime(dev, data_len);
254}
255
266static inline int lora_send(const struct device *dev,
267 uint8_t *data, uint32_t data_len)
268{
269 const struct lora_driver_api *api =
270 (const struct lora_driver_api *)dev->api;
271
272 return api->send(dev, data, data_len);
273}
274
289static inline int lora_send_async(const struct device *dev,
290 uint8_t *data, uint32_t data_len,
291 struct k_poll_signal *async)
292{
293 const struct lora_driver_api *api =
294 (const struct lora_driver_api *)dev->api;
295
296 return api->send_async(dev, data, data_len, async);
297}
298
313static inline int lora_recv(const struct device *dev, uint8_t *data,
314 uint8_t size,
315 k_timeout_t timeout, int16_t *rssi, int8_t *snr)
316{
317 const struct lora_driver_api *api =
318 (const struct lora_driver_api *)dev->api;
319
320 return api->recv(dev, data, size, timeout, rssi, snr);
321}
322
338static inline int lora_recv_async(const struct device *dev, lora_recv_cb cb,
339 void *user_data)
340{
341 const struct lora_driver_api *api =
342 (const struct lora_driver_api *)dev->api;
343
344 return api->recv_async(dev, cb, user_data);
345}
346
359static inline int lora_test_cw(const struct device *dev, uint32_t frequency,
360 int8_t tx_power, uint16_t duration)
361{
362 const struct lora_driver_api *api =
363 (const struct lora_driver_api *)dev->api;
364
365 if (api->test_cw == NULL) {
366 return -ENOSYS;
367 }
368
369 return api->test_cw(dev, frequency, tx_power, duration);
370}
371
372#ifdef __cplusplus
373}
374#endif
375
379
380#endif /* ZEPHYR_INCLUDE_DRIVERS_LORA_H_ */
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:359
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:313
lora_datarate
LoRa data-rate.
Definition lora.h:54
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:289
lora_coding_rate
LoRa coding rate.
Definition lora.h:73
lora_signal_bandwidth
LoRa signal bandwidth.
Definition lora.h:40
static int lora_config(const struct device *dev, struct lora_modem_config *config)
Configure the LoRa modem.
Definition lora.h:230
static int lora_send(const struct device *dev, uint8_t *data, uint32_t data_len)
Send data over LoRa.
Definition lora.h:266
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:248
static int lora_recv_async(const struct device *dev, lora_recv_cb cb, void *user_data)
Receive data asynchronously over LoRa.
Definition lora.h:338
@ SF_12
Spreading factor 12 (slowest, longest range).
Definition lora.h:61
@ SF_8
Spreading factor 8.
Definition lora.h:57
@ SF_11
Spreading factor 11.
Definition lora.h:60
@ SF_10
Spreading factor 10.
Definition lora.h:59
@ SF_9
Spreading factor 9.
Definition lora.h:58
@ SF_6
Spreading factor 6 (fastest, shortest range).
Definition lora.h:55
@ SF_7
Spreading factor 7.
Definition lora.h:56
@ CR_4_5
Coding rate 4/5 (4 information bits, 1 error correction bit).
Definition lora.h:74
@ CR_4_6
Coding rate 4/6 (4 information bits, 2 error correction bits).
Definition lora.h:75
@ CR_4_8
Coding rate 4/8 (4 information bits, 4 error correction bits).
Definition lora.h:77
@ CR_4_7
Coding rate 4/7 (4 information bits, 3 error correction bits).
Definition lora.h:76
@ BW_250_KHZ
250 kHz
Definition lora.h:42
@ BW_125_KHZ
125 kHz
Definition lora.h:41
@ BW_500_KHZ
500 kHz
Definition lora.h:43
#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:6327
Kernel timeout type.
Definition clock.h:65
Structure containing the configuration of a LoRa modem.
Definition lora.h:84
uint32_t frequency
Frequency in Hz to use for transceiving.
Definition lora.h:86
enum lora_signal_bandwidth bandwidth
The bandwidth to use for transceiving.
Definition lora.h:89
bool tx
Set to true for transmission, false for receiving.
Definition lora.h:104
bool packet_crc_disable
Set to true to disable the 16-bit payload CRC.
Definition lora.h:127
int8_t tx_power
TX-power in dBm to use for transmission.
Definition lora.h:101
bool iq_inverted
Invert the In-Phase and Quadrature (IQ) signals.
Definition lora.h:113
enum lora_coding_rate coding_rate
The coding rate to use for transceiving.
Definition lora.h:95
uint16_t preamble_len
Length of the preamble.
Definition lora.h:98
enum lora_datarate datarate
The data-rate to use for transceiving.
Definition lora.h:92
bool public_network
Sets the sync-byte to use:
Definition lora.h:124