Zephyr Project API  3.3.0
A Scalable Open Source RTOS
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
7#ifndef ZEPHYR_INCLUDE_DRIVERS_LORA_H_
8#define ZEPHYR_INCLUDE_DRIVERS_LORA_H_
9
18#include <stdint.h>
19#include <zephyr/kernel.h>
20#include <zephyr/device.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
30};
31
33 SF_6 = 6,
40};
41
43 CR_4_5 = 1,
44 CR_4_6 = 2,
45 CR_4_7 = 3,
46 CR_4_8 = 4,
47};
48
50 /* Frequency in Hz to use for transceiving */
52
53 /* The bandwidth to use for transceiving */
55
56 /* The data-rate to use for transceiving */
58
59 /* The coding rate to use for transceiving */
61
62 /* Length of the preamble */
64
65 /* TX-power in dBm to use for transmission */
67
68 /* Set to true for transmission, false for receiving */
69 bool tx;
70
79
90};
91
104typedef void (*lora_recv_cb)(const struct device *dev, uint8_t *data, uint16_t size,
105 int16_t rssi, int8_t snr);
106
113typedef int (*lora_api_config)(const struct device *dev,
114 struct lora_modem_config *config);
115
122typedef int (*lora_api_send)(const struct device *dev,
123 uint8_t *data, uint32_t data_len);
124
131typedef int (*lora_api_send_async)(const struct device *dev,
132 uint8_t *data, uint32_t data_len,
133 struct k_poll_signal *async);
134
141typedef int (*lora_api_recv)(const struct device *dev, uint8_t *data,
142 uint8_t size,
143 k_timeout_t timeout, int16_t *rssi, int8_t *snr);
144
152typedef int (*lora_api_recv_async)(const struct device *dev, lora_recv_cb cb);
153
160typedef int (*lora_api_test_cw)(const struct device *dev, uint32_t frequency,
161 int8_t tx_power, uint16_t duration);
162
163struct lora_driver_api {
164 lora_api_config config;
165 lora_api_send send;
166 lora_api_send_async send_async;
167 lora_api_recv recv;
168 lora_api_recv_async recv_async;
169 lora_api_test_cw test_cw;
170};
171
182static inline int lora_config(const struct device *dev,
183 struct lora_modem_config *config)
184{
185 const struct lora_driver_api *api =
186 (const struct lora_driver_api *)dev->api;
187
188 return api->config(dev, config);
189}
190
201static inline int lora_send(const struct device *dev,
202 uint8_t *data, uint32_t data_len)
203{
204 const struct lora_driver_api *api =
205 (const struct lora_driver_api *)dev->api;
206
207 return api->send(dev, data, data_len);
208}
209
224static inline int lora_send_async(const struct device *dev,
225 uint8_t *data, uint32_t data_len,
226 struct k_poll_signal *async)
227{
228 const struct lora_driver_api *api =
229 (const struct lora_driver_api *)dev->api;
230
231 return api->send_async(dev, data, data_len, async);
232}
233
248static inline int lora_recv(const struct device *dev, uint8_t *data,
249 uint8_t size,
250 k_timeout_t timeout, int16_t *rssi, int8_t *snr)
251{
252 const struct lora_driver_api *api =
253 (const struct lora_driver_api *)dev->api;
254
255 return api->recv(dev, data, size, timeout, rssi, snr);
256}
257
272static inline int lora_recv_async(const struct device *dev, lora_recv_cb cb)
273{
274 const struct lora_driver_api *api =
275 (const struct lora_driver_api *)dev->api;
276
277 return api->recv_async(dev, cb);
278}
279
292static inline int lora_test_cw(const struct device *dev, uint32_t frequency,
293 int8_t tx_power, uint16_t duration)
294{
295 const struct lora_driver_api *api =
296 (const struct lora_driver_api *)dev->api;
297
298 if (api->test_cw == NULL) {
299 return -ENOSYS;
300 }
301
302 return api->test_cw(dev, frequency, tx_power, duration);
303}
304
305#ifdef __cplusplus
306}
307#endif
308
313#endif /* ZEPHYR_INCLUDE_DRIVERS_LORA_H_ */
ZTEST_BMEM int timeout
Definition: main.c:31
static ssize_t send(int sock, const void *buf, size_t len, int flags)
Definition: socket.h:738
static ssize_t recv(int sock, void *buf, size_t max_len, int flags)
Definition: socket.h:744
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:292
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:248
lora_datarate
Definition: lora.h:32
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:224
static int lora_recv_async(const struct device *dev, lora_recv_cb cb)
Receive data asynchronously over LoRa.
Definition: lora.h:272
lora_coding_rate
Definition: lora.h:42
lora_signal_bandwidth
Definition: lora.h:26
static int lora_config(const struct device *dev, struct lora_modem_config *config)
Configure the LoRa modem.
Definition: lora.h:182
static int lora_send(const struct device *dev, uint8_t *data, uint32_t data_len)
Send data over LoRa.
Definition: lora.h:201
@ SF_12
Definition: lora.h:39
@ SF_8
Definition: lora.h:35
@ SF_11
Definition: lora.h:38
@ SF_10
Definition: lora.h:37
@ SF_9
Definition: lora.h:36
@ SF_6
Definition: lora.h:33
@ SF_7
Definition: lora.h:34
@ CR_4_5
Definition: lora.h:43
@ CR_4_6
Definition: lora.h:44
@ CR_4_8
Definition: lora.h:46
@ CR_4_7
Definition: lora.h:45
@ BW_250_KHZ
Definition: lora.h:28
@ BW_125_KHZ
Definition: lora.h:27
@ BW_500_KHZ
Definition: lora.h:29
#define ENOSYS
Definition: errno.h:83
Public kernel APIs.
__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:378
const void * api
Definition: device.h:384
Definition: kernel.h:5459
Kernel timeout type.
Definition: sys_clock.h:65
Definition: lora.h:49
uint32_t frequency
Definition: lora.h:51
enum lora_signal_bandwidth bandwidth
Definition: lora.h:54
bool tx
Definition: lora.h:69
int8_t tx_power
Definition: lora.h:66
bool iq_inverted
Definition: lora.h:78
enum lora_coding_rate coding_rate
Definition: lora.h:60
uint16_t preamble_len
Definition: lora.h:63
enum lora_datarate datarate
Definition: lora.h:57
bool public_network
Definition: lora.h:89
static fdata_t data[2]
Definition: test_fifo_contexts.c:15