/******************************************************************************* * @file main.h * @author CandyPops Co. * @version V1.0.0 * @date 2022-09-05 * @brief VesiScan BASIC main header file * * [System Overview] * VesiScan BASIC is an nRF52840-based BLE bladder monitoring patch device. * This header defines enums, function declarations, and global variables used system-wide. * * [Communication] * - BLE NUS (Nordic UART Service): binary protocol with smartphone app * - Physical UART (1Mbps): debug and factory testing * * [Data Transmission Flow] * 1. Receive command from app/UART -> received_command_process() * 2. Collect sensor data (battery, temperature, IMU, pressure) * 3. Build binary packets via format_data() family * 4. Transmit over BLE with CRC16 appended via dr_binary_tx_safe() ******************************************************************************/ #ifndef MAIN_H__ #define MAIN_H__ /* ------------------------------------------------------------------------- * Firmware Identification Code * - VBTFW0100 = Development (test) build Ver 1.00 * - VB0FW0100 = Production build Ver 1.00 * * Firmware Version Update History * - VBTFW0101 : Merged reb+red packets (single packet per channel), 260330 jhChun * - VBTFW0102 : Added LED state command (msl) and re-pairing support, 260331 jhChun * - VBTFW0103 260416 jhChun * : Stabilized ADC measurement by clearing buffers before sampling. * : Improved low-battery detection and automatic power-off handling. * : Updated BLE security, bonding, and advertising timeout behavior. * : Cleaned up command parsing and removed unused project files. * - VBTFW0111 260421 jhChun ------------------------------------------------------------------------- */ #define FIRMWARE_VERSION "VBTFW0111" /*============================================================================== * Data Length Constants *============================================================================*/ #define SERIAL_NO_LENGTH 12 /* Serial number length (e.g. "VB026030000") */ #define HW_NO_LENGTH 12 /* Hardware number (version) length */ #define PASSKEY_LENGTH 6 /* BLE pairing passkey length (6 digits) */ #include #include #include #include #include #include "boards.h" /*============================================================================== * Enum Definitions *============================================================================*/ /* Device ON/OFF control enum (EEPROM, power, etc.) */ typedef enum { OFF = 0, /* Off */ ON = 1 /* On */ }on_off_cont_t; /* Command source identifier (BLE or UART) */ typedef enum { CMD_BLE = 0, /* Command received via BLE NUS */ CMD_UART = 1 /* Command received via physical UART */ }which_cmd_t; /* Chamber auto-test mode (when FEATURE_CHAMBER_AUTO_TEST enabled) */ #if FEATURE_CHAMBER_AUTO_TEST typedef enum { SIMPLE_AUTO_MODE = 0, /* Simple auto mode */ HALF_AUTO_MODE = 1, /* Semi-auto mode */ FULL_AUTO_MODE = 2, /* Full auto mode */ NONE_AUTO_MODE = 3 /* No auto mode */ }auto_meas_mode_t; #endif /* BLE connection state */ typedef enum { BLE_DISCONNECTED_ST = 0, /* BLE disconnected */ BLE_CONNECTED_ST = 1 /* BLE connected */ }ble_status_t; /*============================================================================== * Function Declarations *============================================================================*/ #if FEATURE_SECURE_CONNECTION /* Start BLE advertising (if erase_bonds=true, delete bond info first) */ static void advertising_start(bool erase_bonds); #endif /* Enter sleep mode: show LED, then power off after POWER_OFF_DELAY (3s) */ void sleep_mode_enter(void); /* Power-off timer callback: physically cut power after POWER_OFF_DELAY */ static void t_power_off_timeout_handler(void * p_context); /* Device power off: show LED, then delayed power cut via timer */ void device_power_off(void); /* Power control handler: physical power ON/OFF via POWER_HOLD pin */ static void power_control_handler(on_off_cont_t device_power_st); /* Power button state machine (timer callback, 5ms interval): * - Short press (<1.5s): power OFF * - Medium press (1.5s~10s): start boot sequence * - Long press (>10s): factory reset (passkey reset + power OFF) */ static void main_s(void * p_context); /* Peer Manager timer callback: force BLE disconnect if reset_status==5 */ static void PM_s(void * p_context); //static void main_re(void * p_context); /* Main routine handler (legacy, currently unused) */ static void main_routine_handler(void * p_context); /*------------------------------------------------------------------------------ * Data Transmission Functions *----------------------------------------------------------------------------*/ /* Send ASCII text over BLE (up to '\r', CRC16 appended automatically) */ void data_tx_handler(char const *p_data_to_send); /* Safe binary data BLE transmission (CRC16 appended, with retry logic) * @param ble_bin_buff Binary buffer to transmit * @param length Data length in uint16_t words (actual bytes = length x 2) */ void dr_binary_tx_safe(uint8_t const *ble_bin_buff, uint16_t length); /* SoftDevice-compatible delay (nrf_delay_ms wrapper) */ void dr_sd_delay_ms(uint32_t ms); /*------------------------------------------------------------------------------ * Binary Packet Format Functions * Packet structure: [4-byte tag][data][2-byte CRC16] *----------------------------------------------------------------------------*/ /* Format single uint16_t value: [tag 4B][value 2B] */ void single_format_data(uint8_t *buffer, const char *tag, const uint16_t value) ; /* Format uint16_t array: [tag 4B][data0 2B][data1 2B]... */ void format_data(uint8_t *buffer, const char *tag, const uint16_t *data_array, size_t length); /* Format uint8_t byte array: [tag 4B][byte0][byte1]... */ void format_data_byte(uint8_t *buffer, const char *tag, const uint8_t *data_array, size_t length); /* Format ASCII string: [tag 4B][char0][char1]... */ void ascii_format_data(uint8_t *buffer, const char *tag, const char *data_ascii, size_t length); /*============================================================================== * Global Variables (extern) *============================================================================*/ extern volatile bool data_tx_in_progress; /* BLE TX in progress flag */ extern volatile bool ble_connection_st; /* BLE connection state (0=disconnected, 1=connected) */ /* 2026-03-17: Global variables moved from cmd_parse.c to main.c */ extern char SERIAL_NO[SERIAL_NO_LENGTH]; /* Serial number */ extern char HW_NO[HW_NO_LENGTH]; /* Hardware number */ extern char m_static_passkey[PASSKEY_LENGTH]; /* BLE static passkey */ extern bool bond_data_delete; /* Bond data delete request flag */ extern uint32_t m_life_cycle; /* Device life cycle counter */ extern uint8_t resetCount; /* Communication timeout counter */ extern bool info4; /* Measurement with extra info flag */ extern uint8_t m_reset_status; /* Reset status code */ extern uint8_t ble_bin_buffer[]; /* BLE binary response buffer */ /* Send error response */ void param_error(const char *cmd); #endif //MAIN_H__