// Copyright (C) 2024, Mark Qvist
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
# include "ROM.h"
# include "Boards.h"
# ifndef CONFIG_H
# define CONFIG_H
# define MAJ_VERS 0x01
# define MIN_VERS 0x4a
# define MODE_HOST 0x11
# define MODE_TNC 0x12
# define CABLE_STATE_DISCONNECTED 0x00
# define CABLE_STATE_CONNECTED 0x01
uint8_t cable_state = CABLE_STATE_DISCONNECTED ;
# define MAX_INTERFACES 12
# define BT_STATE_NA 0xff
# define BT_STATE_OFF 0x00
# define BT_STATE_ON 0x01
# define BT_STATE_PAIRING 0x02
# define BT_STATE_CONNECTED 0x03
uint8_t bt_state = BT_STATE_NA ;
uint32_t bt_ssp_pin = 0 ;
bool bt_ready = false ;
bool bt_enabled = false ;
bool bt_allow_pairing = false ;
# define M_FRQ_S 27388122
# define M_FRQ_R 27388061
bool console_active = false ;
bool modems_installed = false ;
# define MTU 508
# define SINGLE_MTU 255
# define HEADER_L 1
# define MIN_L 1
# define CMD_L 64
# define eeprom_addr(a) (a+EEPROM_OFFSET)
# define PA_OUTPUT_RFO_PIN 0
# define PA_OUTPUT_PA_BOOST_PIN 1
// MCU independent configuration parameters
const long serial_baudrate = 115200 ;
// SX1276 RSSI offset to get dBm value from
// packet RSSI register
const int rssi_offset = 157 ;
// Default LoRa settings
const int lora_rx_turnaround_ms = 66 ;
const int lora_post_tx_yield_slots = 6 ;
# define LORA_CAD_SYMBOLS 3
// Operational variables
bool community_fw = true ;
bool hw_ready = false ;
bool disp_ready = false ;
bool pmu_ready = false ;
bool promisc = false ;
bool implicit = false ;
bool memory_low = false ;
uint8_t implicit_l = 0 ;
uint8_t op_mode = MODE_HOST ;
uint8_t model = 0x00 ;
uint8_t hwrev = 0x00 ;
int last_rssi = - 292 ;
uint8_t last_rssi_raw = 0x00 ;
uint8_t last_snr_raw = 0x80 ;
uint8_t seq [ INTERFACE_COUNT ] ;
uint16_t read_len [ INTERFACE_COUNT ] ;
bool serial_in_frame = false ;
FIFOBuffer packet_rdy_interfaces ;
uint8_t packet_rdy_interfaces_buf [ MAX_INTERFACES ] ;
// Incoming packet buffer
uint8_t pbuf [ MTU ] ;
// KISS command buffer
uint8_t cmdbuf [ CMD_L ] ;
// LoRa transmit buffer
uint8_t tbuf [ MTU ] ;
uint32_t stat_rx = 0 ;
uint32_t stat_tx = 0 ;
unsigned long last_tx = 0 ;
unsigned long last_rx = 0 ;
// Power management
# define BATTERY_STATE_UNKNOWN 0x00
# define BATTERY_STATE_DISCHARGING 0x01
# define BATTERY_STATE_CHARGING 0x02
# define BATTERY_STATE_CHARGED 0x03
bool battery_installed = false ;
bool battery_indeterminate = false ;
bool external_power = false ;
bool battery_ready = false ;
float battery_voltage = 0.0 ;
float battery_percent = 0.0 ;
uint8_t battery_state = 0x00 ;
uint8_t display_intensity = 0xFF ;
uint8_t display_addr = 0xFF ;
bool display_blanking_enabled = false ;
bool display_diagnostics = true ;
bool device_init_done = false ;
bool eeprom_ok = false ;
bool firmware_update_mode = false ;
// Boot flags
# define START_FROM_BOOTLOADER 0x01
# define START_FROM_POWERON 0x02
# define START_FROM_BROWNOUT 0x03
# define START_FROM_JTAG 0x04
// Subinterfaces
// select interface 0 by default
uint8_t interface = 0 ;
RadioInterface * selected_radio ;
RadioInterface * interface_obj [ INTERFACE_COUNT ] ;
RadioInterface * interface_obj_sorted [ INTERFACE_COUNT ] ;
# endif