123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #ifndef ZEPHYR_INCLUDE_DRIVERS_LORA_H_
- #define ZEPHYR_INCLUDE_DRIVERS_LORA_H_
- #include <zephyr/types.h>
- #include <device.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- enum lora_signal_bandwidth {
- BW_125_KHZ = 0,
- BW_250_KHZ,
- BW_500_KHZ,
- };
- enum lora_datarate {
- SF_6 = 6,
- SF_7,
- SF_8,
- SF_9,
- SF_10,
- SF_11,
- SF_12,
- };
- enum lora_coding_rate {
- CR_4_5 = 1,
- CR_4_6 = 2,
- CR_4_7 = 3,
- CR_4_8 = 4,
- };
- struct lora_modem_config {
- uint32_t frequency;
- enum lora_signal_bandwidth bandwidth;
- enum lora_datarate datarate;
- enum lora_coding_rate coding_rate;
- uint16_t preamble_len;
- int8_t tx_power;
- bool tx;
- };
- typedef int (*lora_api_config)(const struct device *dev,
- struct lora_modem_config *config);
- typedef int (*lora_api_send)(const struct device *dev,
- uint8_t *data, uint32_t data_len);
- typedef int (*lora_api_send_async)(const struct device *dev,
- uint8_t *data, uint32_t data_len,
- struct k_poll_signal *async);
- typedef int (*lora_api_recv)(const struct device *dev, uint8_t *data,
- uint8_t size,
- k_timeout_t timeout, int16_t *rssi, int8_t *snr);
- typedef int (*lora_api_test_cw)(const struct device *dev, uint32_t frequency,
- int8_t tx_power, uint16_t duration);
- struct lora_driver_api {
- lora_api_config config;
- lora_api_send send;
- lora_api_send_async send_async;
- lora_api_recv recv;
- lora_api_test_cw test_cw;
- };
- static inline int lora_config(const struct device *dev,
- struct lora_modem_config *config)
- {
- const struct lora_driver_api *api =
- (const struct lora_driver_api *)dev->api;
- return api->config(dev, config);
- }
- static inline int lora_send(const struct device *dev,
- uint8_t *data, uint32_t data_len)
- {
- const struct lora_driver_api *api =
- (const struct lora_driver_api *)dev->api;
- return api->send(dev, data, data_len);
- }
- static inline int lora_send_async(const struct device *dev,
- uint8_t *data, uint32_t data_len,
- struct k_poll_signal *async)
- {
- const struct lora_driver_api *api =
- (const struct lora_driver_api *)dev->api;
- return api->send_async(dev, data, data_len, async);
- }
- static inline int lora_recv(const struct device *dev, uint8_t *data,
- uint8_t size,
- k_timeout_t timeout, int16_t *rssi, int8_t *snr)
- {
- const struct lora_driver_api *api =
- (const struct lora_driver_api *)dev->api;
- return api->recv(dev, data, size, timeout, rssi, snr);
- }
- static inline int lora_test_cw(const struct device *dev, uint32_t frequency,
- int8_t tx_power, uint16_t duration)
- {
- const struct lora_driver_api *api =
- (const struct lora_driver_api *)dev->api;
- if (api->test_cw == NULL) {
- return -ENOSYS;
- }
- return api->test_cw(dev, frequency, tx_power, duration);
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
|