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
5.4 KiB
112 lines
5.4 KiB
#include <esp_log.h> |
|
#include <freertos/task.h> |
|
|
|
#define MAX_PKT_LENGTH 255 |
|
#define RESET_DELAY (pdMS_TO_TICKS(15)) |
|
// 8mhz |
|
#define SPI_CLOCK_HZ (8 * 1000 * 1000) |
|
#define TASK_STACK_SIZE (2 * 1024) |
|
#define TASK_PRIORITY 3 |
|
|
|
#define REG_FIFO 0x00 |
|
#define REG_OP_MODE 0x01 |
|
#define REG_FRF_MSB 0x06 |
|
#define REG_FRF_MID 0x07 |
|
#define REG_FRF_LSB 0x08 |
|
#define REG_PA_CONFIG 0x09 |
|
#define REG_OCP 0x0b |
|
#define REG_LNA 0x0c |
|
#define REG_FIFO_ADDR_PTR 0x0d |
|
#define REG_FIFO_TX_BASE_ADDR 0x0e |
|
#define REG_FIFO_RX_BASE_ADDR 0x0f |
|
#define REG_FIFO_RX_CURRENT_ADDR 0x10 |
|
#define REG_IRQ_FLAGS 0x12 |
|
#define REG_RX_NB_BYTES 0x13 |
|
#define REG_PKT_SNR_VALUE 0x19 |
|
#define REG_PKT_RSSI_VALUE 0x1a |
|
#define REG_MODEM_CONFIG_1 0x1d |
|
#define REG_MODEM_CONFIG_2 0x1e |
|
#define REG_PREAMBLE_MSB 0x20 |
|
#define REG_PREAMBLE_LSB 0x21 |
|
#define REG_PAYLOAD_LENGTH 0x22 |
|
#define REG_MODEM_CONFIG_3 0x26 |
|
#define REG_FREQ_ERROR_MSB 0x28 |
|
#define REG_FREQ_ERROR_MID 0x29 |
|
#define REG_FREQ_ERROR_LSB 0x2a |
|
#define REG_RSSI_WIDEBAND 0x2c |
|
#define REG_DETECTION_OPTIMIZE 0x31 |
|
#define REG_INVERTIQ 0x33 |
|
#define REG_DETECTION_THRESHOLD 0x37 |
|
#define REG_SYNC_WORD 0x39 |
|
#define REG_INVERTIQ2 0x3b |
|
#define REG_DIO_MAPPING_1 0x40 |
|
#define REG_VERSION 0x42 |
|
#define REG_PA_DAC 0x4d |
|
|
|
// modes |
|
#define MODE_LONG_RANGE_MODE 0x80 |
|
#define MODE_SLEEP 0x00 |
|
#define MODE_STDBY 0x01 |
|
#define MODE_TX 0x03 |
|
#define MODE_RX_CONTINUOUS 0x05 |
|
#define MODE_RX_SINGLE 0x06 |
|
|
|
#define CONFIG2_CRC 0x04 |
|
#define CONFIG3_AUTO_AGC 0x04 |
|
|
|
// PA config |
|
#define PA_BOOST 0x80 |
|
|
|
// IRQ masks |
|
#define IRQ_TX_DONE_MASK 0x08 |
|
#define IRQ_PAYLOAD_CRC_ERROR_MASK 0x20 |
|
#define IRQ_RX_DONE_MASK 0x40 |
|
|
|
#ifdef NODEBUG |
|
#define SX127X_CHECK(check, str, ret_val, ...) \ |
|
if (!(check)) { \ |
|
ESP_LOGE(SX127X_TAG, "%s(%d): " str, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ |
|
return (ret_val); \ |
|
} |
|
#define SX127X_ERROR_CHECK(ret) \ |
|
{ \ |
|
esp_err_t _error_code = (ret); \ |
|
if (_error_code != ESP_OK) { \ |
|
return _error_code; \ |
|
} \ |
|
} |
|
#define SX127X_ERROR_CHECK2(ret, fun) SX127X_CHECK(ret) |
|
#else |
|
#define SX127X_CHECK(check, str, ret_val, ...) \ |
|
if (!(check)) { \ |
|
ESP_LOGE(SX127X_TAG, "%s(%d): " #check ": " str, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ |
|
return (ret_val); \ |
|
} |
|
#define SX127X_ERROR_CHECK(ret) \ |
|
{ \ |
|
esp_err_t _error_code = (ret); \ |
|
if (_error_code != ESP_OK) { \ |
|
const char *_error_name = esp_err_to_name(_error_code); \ |
|
ESP_LOGE(SX127X_TAG, "%s(%d): %s (%d)", __FUNCTION__, __LINE__, _error_name, _error_code); \ |
|
return _error_code; \ |
|
} \ |
|
} |
|
#define SX127X_ERROR_CHECK2(ret, fun) \ |
|
{ \ |
|
esp_err_t _error_code = (ret); \ |
|
if (_error_code != ESP_OK) { \ |
|
const char *_error_name = esp_err_to_name(_error_code); \ |
|
ESP_LOGE(SX127X_TAG, "%s(%d): " #fun ": %s (%d)", __FUNCTION__, __LINE__, _error_name, _error_code); \ |
|
return _error_code; \ |
|
} \ |
|
} |
|
#endif |
|
|
|
struct sx127x { |
|
sx127x_config_t config; |
|
spi_device_handle_t device_handle; |
|
TaskHandle_t task_handle; |
|
bool task_running; |
|
}; |
|
|
|
const char *SX127X_TAG;
|
|
|