Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
ed1b9ef89This file is pinned to the selected release. Download the original to open it in your design tool.
/*
* This file is part of DroneBridge:https://github.com/DroneBridge/ESP32
*
* Copyright 2025 Wolfgang Christl
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef DB_PARAMETERS_H
#define DB_PARAMETERS_H
#include <string.h>
#include <cJSON.h>
#include <nvs.h>
#include <stdint.h>
#include <driver/gpio.h>
#include "common/common.h"
/**
* Consumes one formatted parameter line emitted by db_param_stream_values().
*
* @param line Formatted parameter line, including its trailing newline.
* @param line_length Number of bytes in line, excluding a string terminator.
* @param context Caller-owned context passed through unchanged.
* @return true to continue streaming or false to stop streaming.
*/
typedef bool (*db_param_output_callback_t)(const uint8_t *line, size_t line_length, void *context);
#define DB_BUILD_VERSION 23
#define DB_MAJOR_VERSION 2
#define DB_MINOR_VERSION 4
#define DB_PATCH_VERSION 1
#define DB_MATURITY_VERSION "stable"
#define DB_TYPE_VERSION 255 // FIRMWARE_VERSION_TYPE_OFFICIAL -> https://mavlink.io/en/messages/common.html#FIRMWARE_VERSION_TYPE
#define DB_PARAM_TOTAL_NUM 27 // total number of db parameters
#define DB_PARAM_MAV_CNT 18 // Number of MAVLink parameters returned by ESP32 in the PARAM message. Needed by GCS.
#define DB_PARAM_NAME_MAXLEN 16 // max len of a parameter/key stored in the ESP32 NVM
#define DB_PARAM_MAX_MAV_PARAM_NAME_LEN 16 // max len of the field used to store the mav param name (max len 16 by def.)
#define DB_PARAM_VALUE_MAXLEN 64 // max len of a value stored for a key in the ESP32 NVM (string len)
#define DB_SERIAL_PACK_SIZE_MAX 1023U // maximum configured serial packet size; keep below UART_BUF_SIZE
#define MAX_LTM_FRAMES_IN_BUFFER 5
#ifdef CONFIG_DB_OFFICIAL_BOARD_1_X
#define DB_DEFAULT_UART_TX_PIN GPIO_NUM_5
#define DB_DEFAULT_UART_RX_PIN GPIO_NUM_4
#define DB_DEFAULT_UART_RTS_PIN GPIO_NUM_6
#define DB_DEFAULT_UART_CTS_PIN GPIO_NUM_7
#define DB_DEFAULT_UART_BAUD_RATE 57600
#elif CONFIG_DB_OFFICIAL_BOARD_1_X_C6
#define DB_DEFAULT_UART_TX_PIN GPIO_NUM_21
#define DB_DEFAULT_UART_RX_PIN GPIO_NUM_2
#define DB_DEFAULT_UART_RTS_PIN GPIO_NUM_22
#define DB_DEFAULT_UART_CTS_PIN GPIO_NUM_23
#define DB_DEFAULT_UART_BAUD_RATE 57600
#elif CONFIG_DB_GENERIC_BOARD
// initially set pins to 0 to allow the start of the system on all boards. User has to set the correct pins
#define DB_DEFAULT_UART_TX_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_RX_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_RTS_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_CTS_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_BAUD_RATE 57600
#else
// someone fucked up the config - fallback to generic config
#define DB_DEFAULT_UART_TX_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_RX_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_RTS_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_CTS_PIN GPIO_NUM_0
#define DB_DEFAULT_UART_BAUD_RATE 57600
#endif
/* ---------- Optional Macros for quick access to param values ---------- */
#define DB_PARAM_WIFI_SSID (char *) db_param_ssid.value.db_param_str.value
#define DB_PARAM_PASS (char *) db_param_pass.value.db_param_str.value
#define DB_PARAM_ESPNOW_LINK_SECRET ((char *) db_param_espnow_link_secret.value.db_param_str.value)
#define DB_PARAM_CHANNEL db_param_channel.value.db_param_u8.value
#define DB_PARAM_RADIO_MODE db_param_radio_mode.value.db_param_u8.value
#define DB_PARAM_STA_IP db_param_wifi_sta_ip.value.db_param_str.value
#define DB_PARAM_STA_GW db_param_wifi_sta_gw.value.db_param_str.value
#define DB_PARAM_STA_IP_NETMASK db_param_wifi_sta_netmask.value.db_param_str.value
#define DB_PARAM_AP_IP (char *) db_param_wifi_ap_ip.value.db_param_str.value
#define DB_PARAM_WIFI_EN_GN db_param_wifi_en_gn.value.db_param_u8.value
#define DB_PARAM_DIS_RADIO_ON_ARM db_param_dis_radio_armed.value.db_param_u8.value
#define DB_PARAM_SERIAL_BAUD db_param_baud.value.db_param_i32.value
#define DB_PARAM_SERIAL_PROTO db_param_proto.value.db_param_u8.value
#define DB_PARAM_SERIAL_PACK_SIZE db_param_serial_pack_size.value.db_param_u16.value
#define DB_PARAM_GPIO_TX db_param_gpio_tx.value.db_param_u8.value
#define DB_PARAM_GPIO_RX db_param_gpio_rx.value.db_param_u8.value
#define DB_PARAM_GPIO_RTS db_param_gpio_rts.value.db_param_u8.value
#define DB_PARAM_GPIO_CTS db_param_gpio_cts.value.db_param_u8.value
#define DB_PARAM_SERIAL_RTS_THRESH db_param_gpio_rts_thresh.value.db_param_u8.value
#define DB_PARAM_EN_EXT_ANT db_param_radio_ant_ext.value.db_param_u8.value
#define DB_PARAM_ESPNOW_AIR2AIR db_param_espnow_air2air.value.db_param_u8.value
enum E_DB_WIFI_MODE {
DB_WIFI_MODE_AP = 1, // Wi-Fi access point mode with 802.11b mode enabled
DB_WIFI_MODE_STA = 2, // Wi-Fi client mode with 802.11b and LR mode enabled
DB_WIFI_MODE_AP_LR = 3, // ESP32 WiFi LR Mode 802.11b
DB_WIFI_MODE_ESPNOW_AIR = 4, // ESP-NOW Mode for broadcasting device
DB_WIFI_MODE_ESPNOW_GND = 5, // ESP-NOW Mode for GND station
DB_BLUETOOTH_MODE = 6, // Bluetooth BLE mode
DB_WIFI_MODE_END = 7, // End of enum
};
enum E_DB_SERIAL_PROTOCOL {
DB_SERIAL_PROTOCOL_MSPLTM = 1,
DB_SERIAL_PROTOCOL_MAVLINK = 4,
DB_SERIAL_PROTOCOL_TRANSPARENT = 5
};
typedef struct db_parameter_str_s {
uint8_t *value;
uint8_t *default_value;
uint8_t min_len; // valid if >= min_len
uint8_t max_len; // allocated capacity including NUL; valid string length is < max_len
} db_param_str_t;
typedef struct db_parameter_u8_s {
uint8_t value;
uint8_t default_value;
uint8_t min;
uint8_t max;
} db_param_u8_t;
typedef struct db_parameter_u16_s {
uint16_t value;
uint16_t default_value;
uint16_t min;
uint16_t max;
} db_param_u16_t;
typedef struct db_parameter_i32_s {
int32_t value;
int32_t default_value;
int32_t min;
int32_t max;
} db_param_i32_t;
enum db_param_type_t {
STRING,
UINT8,
UINT16,
INT32
};
typedef struct db_parameter_s {
uint8_t db_name[DB_PARAM_NAME_MAXLEN]; // equals the NVS key, JSON object name and web interface input ID
enum db_param_type_t type;
struct { // no string support for mavlink
uint8_t param_name[DB_PARAM_MAX_MAV_PARAM_NAME_LEN];
uint16_t param_index; // strings will be ignored for mavlink set to -1 for strings
MAV_PARAM_TYPE param_type; // set to MAV_PARAM_TYPE_ENUM_END for strings
} mav_t;
union {
db_param_str_t db_param_str;
db_param_u8_t db_param_u8;
db_param_u16_t db_param_u16;
db_param_i32_t db_param_i32;
} value;
} db_parameter_t;
extern uint8_t DB_RADIO_MODE_DESIGNATED;
extern db_parameter_t *db_params[DB_PARAM_TOTAL_NUM];
extern db_parameter_t db_param_ssid;
extern db_parameter_t db_param_pass;
extern db_parameter_t db_param_espnow_link_secret;
extern db_parameter_t db_param_wifi_ap_ip;
extern db_parameter_t db_param_wifi_sta_ip;
extern db_parameter_t db_param_wifi_sta_gw;
extern db_parameter_t db_param_wifi_sta_netmask;
extern db_parameter_t db_param_udp_client_ip;
extern db_parameter_t db_param_wifi_hostname;
extern db_parameter_t db_param_radio_mode;
extern db_parameter_t db_param_channel;
extern db_parameter_t db_param_wifi_en_gn;
extern db_parameter_t db_param_radio_ant_ext;
extern db_parameter_t db_param_baud;
extern db_parameter_t db_param_gpio_tx;
extern db_parameter_t db_param_gpio_rx;
extern db_parameter_t db_param_gpio_rts;
extern db_parameter_t db_param_gpio_cts;
extern db_parameter_t db_param_gpio_rts_thresh;
extern db_parameter_t db_param_proto;
extern db_parameter_t db_param_serial_pack_size;
extern db_parameter_t db_param_serial_read_timeout;
extern db_parameter_t db_param_ltm_per_packet;
extern db_parameter_t db_param_dis_radio_armed;
extern db_parameter_t db_param_udp_client_port;
extern db_parameter_t db_param_rssi_dbm;
extern db_parameter_t db_param_espnow_air2air;
void db_param_init_parameters();
void db_param_set_to_default(db_parameter_t *db_parameter);
void db_param_reset_all();
bool db_param_stream_values(db_param_output_callback_t output_callback, void *context);
void db_param_log_values();
void db_param_read_all_params_nvs(const nvs_handle_t *nvs_handle);
void db_param_write_all_params_nvs(const nvs_handle_t *nvs_handle);
void db_param_read_all_params_json(const cJSON *root_obj);
void db_param_write_all_params_json(cJSON *root_obj);
bool db_param_is_valid_str(char *new_string_value, db_parameter_t *target_param);
bool db_param_is_valid_u8(uint8_t new_u8_value, db_parameter_t *target_param);
bool db_param_is_valid_u16(uint16_t new_u16_value, db_parameter_t *target_param);
bool db_param_is_valid_i32(int32_t new_i32_value, db_parameter_t *target_param);
bool db_param_is_valid_assign_str(char *new_string_value, db_parameter_t *target_param);
bool db_param_is_valid_assign_u8(uint8_t new_u8_value, db_parameter_t *target_param);
bool db_param_is_valid_assign_u16(uint16_t new_u16_value, db_parameter_t *target_param);
bool db_param_is_valid_assign_i32(int32_t new_i32_value, db_parameter_t *target_param);
bool is_valid_ip4(const char *ipaddress);
#endif //DB_PARAMETERS_H