/******************************************************************************* * @file main.h * @brief Main application header for BLE Bladder Patch NIRS device * @author Charles KWON * @version V2.0.0 * @date 2025-12-31 * * Copyright (c) 2025 Medithings Inc. * All rights reserved. * * This file contains type definitions, enumerations, and function prototypes * for the main application module of the BLE-enabled NIRS bladder monitoring * device based on nRF52840. ******************************************************************************/ #ifndef MAIN_H__ #define MAIN_H__ /*============================================================================*/ /* Includes - Charles KWON */ /*============================================================================*/ #include #include #include #include #include "boards.h" /*============================================================================*/ /* Type Definitions - Charles KWON */ /*============================================================================*/ /** * @brief Generic ON/OFF control enumeration * - Charles KWON * * Used for controlling power states of various device components * such as LEDs, photodetectors, and other peripherals. */ typedef enum { OFF = 0, /**< Device/component is OFF */ ON = 1 /**< Device/component is ON */ } on_off_cont_t; /** * @brief Command source type enumeration * - Charles KWON * * Identifies the source of incoming commands to route * responses appropriately. */ typedef enum { CMD_BLE = 0, /**< Command received via BLE (Nordic UART Service) */ CMD_UART = 1 /**< Command received via physical UART interface */ } which_cmd_t; #if FEATURE_CHAMBER_AUTO_TEST /** * @brief Automatic measurement mode enumeration * - Charles KWON * * Defines different automatic testing modes for chamber calibration * and production testing scenarios. */ typedef enum { SIMPLE_AUTO_MODE = 0, /**< Simple automatic measurement mode */ HALF_AUTO_MODE = 1, /**< Semi-automatic measurement mode */ FULL_AUTO_MODE = 2, /**< Full automatic measurement mode */ NONE_AUTO_MODE = 3 /**< Manual mode (no automation) */ } auto_meas_mode_t; #endif /** * @brief BLE connection status enumeration * - Charles KWON * * Tracks the current BLE connection state for controlling * device behavior based on connectivity. */ typedef enum { BLE_DISCONNECTED_ST = 0, /**< BLE is disconnected */ BLE_CONNECTED_ST = 1 /**< BLE is connected to a central device */ } ble_status_t; /*============================================================================*/ /* Function Prototypes - Command Processing - Charles KWON */ /*============================================================================*/ /** * @brief Process received command data * - Charles KWON * * Parses and executes commands received from BLE or UART. * Commands control measurement modes, device settings, and queries. * * @param[in] data_array Pointer to received command data buffer * @param[in] cmd_t Source of the command (BLE or UART) * @param[in] length Length of the command data in bytes */ void received_command_process(uint8_t const *data_array, which_cmd_t cmd_t, uint8_t length); /*============================================================================*/ /* Function Prototypes - Data Transmission - Charles KWON */ /*============================================================================*/ /** * @brief Transmit ASCII string data * - Charles KWON * * Sends null-terminated string data over the active communication * channel (BLE NUS or UART) with flow control. * * @param[in] p_data_to_send Pointer to null-terminated string to transmit */ void data_tx_handler(char const *p_data_to_send); /** * @brief Transmit binary data * - Charles KWON * * Sends raw binary data over BLE NUS with specified length. * Used for transmitting measurement data and binary payloads. * * @param[in] ble_bin_buff Pointer to binary data buffer * @param[in] length Number of bytes to transmit */ void binary_tx_handler(uint8_t const *ble_bin_buff, uint16_t length); /** * @brief Format single 16-bit value with tag * - Charles KWON * * Creates a tagged binary packet containing a single 16-bit value. * Format: [tag bytes][value_high][value_low] * * @param[out] buffer Destination buffer for formatted data * @param[in] tag 4-character tag string identifier * @param[in] value 16-bit value to encode */ void single_format_data(uint8_t *buffer, const char *tag, const uint16_t value); /** * @brief Format 16-bit array with tag * - Charles KWON * * Creates a tagged binary packet containing an array of 16-bit values. * Format: [tag bytes][data_0_high][data_0_low]...[data_n_high][data_n_low] * * @param[out] buffer Destination buffer for formatted data * @param[in] tag 4-character tag string identifier * @param[in] data_array Pointer to array of 16-bit values * @param[in] length Number of elements in the array */ void format_data(uint8_t *buffer, const char *tag, const uint16_t *data_array, size_t length); /** * @brief Format 8-bit array with tag * - Charles KWON * * Creates a tagged binary packet containing an array of 8-bit values. * Format: [tag bytes][data_0]...[data_n] * * @param[out] buffer Destination buffer for formatted data * @param[in] tag 4-character tag string identifier * @param[in] data_array Pointer to array of 8-bit values * @param[in] length Number of elements in the array */ void format_data_byte(uint8_t *buffer, const char *tag, const uint8_t *data_array, size_t length); /** * @brief Format ASCII string with tag * - Charles KWON * * Creates a tagged packet containing ASCII string data. * Format: [tag bytes][ascii_char_0]...[ascii_char_n] * * @param[out] buffer Destination buffer for formatted data * @param[in] tag 4-character tag string identifier * @param[in] data_ascii Pointer to ASCII string data * @param[in] length Number of characters to include */ void ascii_format_data(uint8_t *buffer, const char *tag, const char *data_ascii, size_t length); /*============================================================================*/ /* External Variables - Charles KWON */ /*============================================================================*/ /** * @brief Flag indicating BLE TX operation in progress * * Set to true when a BLE transmission is pending completion. * Used to prevent overlapping transmissions and implement flow control. */ extern volatile bool data_tx_in_progress; /** * @brief Current BLE connection status * * True when device is connected to a BLE central. * Used to control device behavior based on connectivity state. */ extern volatile bool ble_connection_st; /** * @brief Flag indicating command processing in progress * * Set to true during command execution to prevent * concurrent command processing. */ extern volatile bool processing; #endif /* MAIN_H__ */