You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.7 KiB
112 lines
2.7 KiB
#pragma once |
|
|
|
#include <driver/gpio.h> |
|
#include <driver/spi_master.h> |
|
#include <stdint.h> |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#define SX127_MAX_PACKET_LEN 255 |
|
|
|
// carrier frequency type |
|
typedef uint64_t sx127x_freq_t; |
|
|
|
#define SX127X_FREQ_433 ((sx127x_freq_t)433E6) |
|
#define SX127X_FREQ_915 ((sx127x_freq_t)915E6) |
|
|
|
// signal bandwidth type |
|
typedef uint64_t sx127x_bw_t; |
|
// spreading factor type |
|
typedef uint8_t sx127x_sf_t; |
|
|
|
typedef enum sx127x_pa_boost { |
|
SX127X_PA_BOOST_DISABLED = 0, |
|
SX127X_PA_BOOST_ENABLED = 1, |
|
} sx127x_pa_boost_t; |
|
|
|
typedef enum sx127x_crc { |
|
SX127X_CRC_DISABLED = 0, |
|
SX127X_CRC_ENABLED = 1, |
|
} sx127x_crc_t; |
|
|
|
// low data rate optimization |
|
typedef enum sx127x_ldo { |
|
SX127X_LDO_DISABLED = 0, |
|
SX127X_LDO_ENABLED = 1, |
|
} sx127x_ldo_t; |
|
|
|
typedef struct sx127x_config { |
|
spi_host_device_t spi_host; |
|
gpio_num_t mosi_io_num; |
|
gpio_num_t miso_io_num; |
|
gpio_num_t sck_io_num; |
|
gpio_num_t cs_io_num; |
|
gpio_num_t rst_io_num; |
|
gpio_num_t irq_io_num; |
|
uint8_t tx_power; |
|
sx127x_freq_t frequency; |
|
sx127x_bw_t signal_bandwidth; |
|
sx127x_sf_t spreading_factor; |
|
uint8_t sync_word; |
|
sx127x_crc_t crc; |
|
sx127x_ldo_t ldo; |
|
} sx127x_config_t; |
|
|
|
// clang-format off |
|
#define SX127X_CONFIG_DEFAULT \ |
|
{ \ |
|
.spi_host = VSPI_HOST, \ |
|
.mosi_io_num = 27, \ |
|
.miso_io_num = 19, \ |
|
.sck_io_num = 5, \ |
|
.cs_io_num = 18, \ |
|
.rst_io_num = 14, \ |
|
.irq_io_num = 26, \ |
|
.tx_power = 17, \ |
|
.frequency = SX127X_FREQ_433, \ |
|
.signal_bandwidth = 125E3, \ |
|
.spreading_factor = 11, \ |
|
.sync_word = 0x34, \ |
|
.crc = SX127X_CRC_ENABLED, \ |
|
.ldo = SX127X_LDO_DISABLED \ |
|
} |
|
// clang-format on |
|
|
|
typedef struct sx127x_packet_rx { |
|
char * data; |
|
size_t data_len; |
|
// rssi value |
|
int32_t rssi; |
|
// snr value in steps of .25 |
|
int8_t snr; |
|
} sx127x_rx_packet_t; |
|
|
|
typedef struct sx127x* sx127x_hndl; |
|
|
|
sx127x_config_t sx127x_config_default(); |
|
|
|
esp_err_t sx127x_init(const sx127x_config_t *config, sx127x_hndl *hndl_ptr); |
|
|
|
esp_err_t sx127x_free(sx127x_hndl hndl); |
|
|
|
esp_err_t sx127x_start(sx127x_hndl hndl); |
|
|
|
esp_err_t sx127x_stop(sx127x_hndl hndl); |
|
|
|
esp_err_t sx127x_send_packet(sx127x_hndl hndl, const char *data, |
|
size_t data_len, TickType_t ticks_to_wait); |
|
|
|
esp_err_t sx127x_recv_packet(sx127x_hndl hndl, sx127x_rx_packet_t *packet_out, |
|
TickType_t ticks_to_wait); |
|
|
|
QueueHandle_t sx127x_get_recv_queue(sx127x_hndl hndl); |
|
|
|
void sx127x_packet_rx_free(sx127x_rx_packet_t *packet); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#include "sx127x_pb.h"
|
|
|