Zephyr API Documentation  2.7.0-rc2
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
15#include <zephyr/types.h>
16#include <device.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
26};
27
29 SF_6 = 6,
36};
37
39 CR_4_5 = 1,
40 CR_4_6 = 2,
41 CR_4_7 = 3,
42 CR_4_8 = 4,
43};
44
52 bool tx;
53};
54
61typedef int (*lora_api_config)(const struct device *dev,
62 struct lora_modem_config *config);
63
70typedef int (*lora_api_send)(const struct device *dev,
71 uint8_t *data, uint32_t data_len);
72
79typedef int (*lora_api_send_async)(const struct device *dev,
80 uint8_t *data, uint32_t data_len,
81 struct k_poll_signal *async);
82
89typedef int (*lora_api_recv)(const struct device *dev, uint8_t *data,
90 uint8_t size,
91 k_timeout_t timeout, int16_t *rssi, int8_t *snr);
92
99typedef int (*lora_api_test_cw)(const struct device *dev, uint32_t frequency,
100 int8_t tx_power, uint16_t duration);
101
108};
109
118static inline int lora_config(const struct device *dev,
119 struct lora_modem_config *config)
120{
121 const struct lora_driver_api *api =
122 (const struct lora_driver_api *)dev->api;
123
124 return api->config(dev, config);
125}
126
137static inline int lora_send(const struct device *dev,
138 uint8_t *data, uint32_t data_len)
139{
140 const struct lora_driver_api *api =
141 (const struct lora_driver_api *)dev->api;
142
143 return api->send(dev, data, data_len);
144}
145
160static inline int lora_send_async(const struct device *dev,
161 uint8_t *data, uint32_t data_len,
162 struct k_poll_signal *async)
163{
164 const struct lora_driver_api *api =
165 (const struct lora_driver_api *)dev->api;
166
167 return api->send_async(dev, data, data_len, async);
168}
169
184static inline int lora_recv(const struct device *dev, uint8_t *data,
185 uint8_t size,
186 k_timeout_t timeout, int16_t *rssi, int8_t *snr)
187{
188 const struct lora_driver_api *api =
189 (const struct lora_driver_api *)dev->api;
190
191 return api->recv(dev, data, size, timeout, rssi, snr);
192}
193
206static inline int lora_test_cw(const struct device *dev, uint32_t frequency,
207 int8_t tx_power, uint16_t duration)
208{
209 const struct lora_driver_api *api =
210 (const struct lora_driver_api *)dev->api;
211
212 if (api->test_cw == NULL) {
213 return -ENOSYS;
214 }
215
216 return api->test_cw(dev, frequency, tx_power, duration);
217}
218
219#ifdef __cplusplus
220}
221#endif
222
223#endif /* ZEPHYR_INCLUDE_DRIVERS_LORA_H_ */
ZTEST_BMEM int timeout
Definition: main.c:31
#define ENOSYS
Definition: errno.h:83
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:206
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:184
lora_datarate
Definition: lora.h:28
@ SF_12
Definition: lora.h:35
@ SF_8
Definition: lora.h:31
@ SF_11
Definition: lora.h:34
@ SF_10
Definition: lora.h:33
@ SF_9
Definition: lora.h:32
@ SF_6
Definition: lora.h:29
@ SF_7
Definition: lora.h:30
int(* lora_api_config)(const struct device *dev, struct lora_modem_config *config)
Callback API for configuring the LoRa module.
Definition: lora.h:61
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:160
lora_coding_rate
Definition: lora.h:38
@ CR_4_5
Definition: lora.h:39
@ CR_4_6
Definition: lora.h:40
@ CR_4_8
Definition: lora.h:42
@ CR_4_7
Definition: lora.h:41
int(* lora_api_test_cw)(const struct device *dev, uint32_t frequency, int8_t tx_power, uint16_t duration)
Callback API for transmitting a continuous wave.
Definition: lora.h:99
int(* lora_api_recv)(const struct device *dev, uint8_t *data, uint8_t size, k_timeout_t timeout, int16_t *rssi, int8_t *snr)
Callback API for receiving data over LoRa.
Definition: lora.h:89
int(* lora_api_send)(const struct device *dev, uint8_t *data, uint32_t data_len)
Callback API for sending data over LoRa.
Definition: lora.h:70
int(* lora_api_send_async)(const struct device *dev, uint8_t *data, uint32_t data_len, struct k_poll_signal *async)
Callback API for sending data asynchronously over LoRa.
Definition: lora.h:79
lora_signal_bandwidth
Definition: lora.h:22
@ BW_250_KHZ
Definition: lora.h:24
@ BW_125_KHZ
Definition: lora.h:23
@ BW_500_KHZ
Definition: lora.h:25
static int lora_config(const struct device *dev, struct lora_modem_config *config)
Configure the LoRa modem.
Definition: lora.h:118
static int lora_send(const struct device *dev, uint8_t *data, uint32_t data_len)
Send data over LoRa.
Definition: lora.h:137
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
__INT8_TYPE__ int8_t
Definition: stdint.h:42
__INT16_TYPE__ int16_t
Definition: stdint.h:43
Runtime device structure (in ROM) per driver instance.
Definition: device.h:367
const void * api
Definition: device.h:373
Definition: kernel.h:5405
Kernel timeout type.
Definition: sys_clock.h:65
Definition: lora.h:102
lora_api_recv recv
Definition: lora.h:106
lora_api_send_async send_async
Definition: lora.h:105
lora_api_send send
Definition: lora.h:104
lora_api_test_cw test_cw
Definition: lora.h:107
lora_api_config config
Definition: lora.h:103
Definition: lora.h:45
uint32_t frequency
Definition: lora.h:46
enum lora_signal_bandwidth bandwidth
Definition: lora.h:47
bool tx
Definition: lora.h:52
int8_t tx_power
Definition: lora.h:51
enum lora_coding_rate coding_rate
Definition: lora.h:49
uint16_t preamble_len
Definition: lora.h:50
enum lora_datarate datarate
Definition: lora.h:48
static fdata_t data[2]
Definition: test_fifo_contexts.c:15