코드 정리

- 주석 영문으로 변경
- Allman 스타일로 통일
This commit is contained in:
2026-04-16 12:01:51 +09:00
parent c98d9ae14e
commit 2861cb9815
35 changed files with 2406 additions and 2557 deletions

View File

@@ -3,43 +3,43 @@
* @author CandyPops Co.
* @version V1.0.0
* @date 2022-09-05
* @brief VesiScan BASIC 메인 헤더 파일
* @brief VesiScan BASIC main header file
*
* [시스템 개요]
* VesiScan BASIC nRF52840 기반 BLE 방광 모니터링 패치 디바이스이다.
* 본 헤더는 시스템 전역에서 사용하는 열거형, 함수 선언, 전역 변수를 정의한다.
* [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.
*
* [통신 방식]
* - BLE NUS (Nordic UART Service): 스마트폰 앱과 바이너리 프로토콜 통신
* - 물리 UART (1Mbps): 디버그 및 공장 테스트용
* [Communication]
* - BLE NUS (Nordic UART Service): binary protocol with smartphone app
* - Physical UART (1Mbps): debug and factory testing
*
* [데이터 전송 흐름]
* 1. 앱/UART에서 명령 수신 → received_command_process()
* 2. 센서 데이터 수집 (배터리, 온도, IMU, 압력)
* 3. format_data() 계열 함수로 바이너리 패킷 생성
* 4. dr_binary_tx_safe()로 CRC16 추가 후 BLE 전송
* [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 식별 코드
* - VBTFW0100 = 개발(시험)용 Ver 1.00
* - VB0FW0100 = 양산용 Ver 1.00
* Firmware Identification Code
* - VBTFW0100 = Development (test) build Ver 1.00
* - VB0FW0100 = Production build Ver 1.00
*
* Firmware Version Update History
* - VBTFW0101 : reb+red 패킷 병합 (채널당 단일 패킷), 260330 jhChun
* - VBTFW0102 : LED 상태 설정 명령(msl) 추가 및 재페어링 허용 등 260331 jhChun
* - VBTFW0101 : Merged reb+red packets (single packet per channel), 260330 jhChun
* - VBTFW0102 : Added LED state command (msl) and re-pairing support, 260331 jhChun
------------------------------------------------------------------------- */
#define FIRMWARE_VERSION "VBTFW0102"
/*==============================================================================
* 데이터 길이 상수
* Data Length Constants
*============================================================================*/
#define SERIAL_NO_LENGTH 12 /* 시리얼 번호 길이 (예: "VB026030000") */
#define HW_NO_LENGTH 12 /* 하드웨어 번호(버전) 길이 */
#define PASSKEY_LENGTH 6 /* BLE 페어링 패스키 길이 (숫자 6자리) */
#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 <stdio.h>
#include <stdint.h>
@@ -49,128 +49,128 @@
#include "boards.h"
/*==============================================================================
* 열거형 정의
* Enum Definitions
*============================================================================*/
/* 디바이스 ON/OFF 제어용 열거형 (EEPROM, 전원 등) */
/* Device ON/OFF control enum (EEPROM, power, etc.) */
typedef enum
{
OFF = 0, /* 꺼짐 */
ON = 1 /* 켜짐 */
OFF = 0, /* Off */
ON = 1 /* On */
}on_off_cont_t;
/* 명령 수신 경로 구분 (BLE 또는 UART) */
/* Command source identifier (BLE or UART) */
typedef enum
{
CMD_BLE = 0, /* BLE NUS를 통해 수신된 명령 */
CMD_UART = 1 /* 물리 UART를 통해 수신된 명령 */
CMD_BLE = 0, /* Command received via BLE NUS */
CMD_UART = 1 /* Command received via physical UART */
}which_cmd_t;
/* 챔버 자동 테스트 모드 (FEATURE_CHAMBER_AUTO_TEST 활성 시) */
/* Chamber auto-test mode (when FEATURE_CHAMBER_AUTO_TEST enabled) */
#if FEATURE_CHAMBER_AUTO_TEST
typedef enum
{
SIMPLE_AUTO_MODE = 0, /* 간단 자동 모드 */
HALF_AUTO_MODE = 1, /* 반자동 모드 */
FULL_AUTO_MODE = 2, /* 전체 자동 모드 */
NONE_AUTO_MODE = 3 /* 자동 모드 없음 */
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 연결 상태 */
/* BLE connection state */
typedef enum
{
BLE_DISCONNECTED_ST = 0, /* BLE 미연결 */
BLE_CONNECTED_ST = 1 /* BLE 연결됨 */
BLE_DISCONNECTED_ST = 0, /* BLE disconnected */
BLE_CONNECTED_ST = 1 /* BLE connected */
}ble_status_t;
/*==============================================================================
* 함수 선언
* Function Declarations
*============================================================================*/
#if FEATURE_SECURE_CONNECTION
/* BLE 광고 시작 (erase_bonds=true이면 본딩 정보 삭제 후 시작) */
/* Start BLE advertising (if erase_bonds=true, delete bond info first) */
static void advertising_start(bool erase_bonds);
#endif
/* 슬립 모드 진입: LED 표시 후 POWER_OFF_DELAY(3초) 후 전원 차단 */
/* Enter sleep mode: show LED, then power off after POWER_OFF_DELAY (3s) */
void sleep_mode_enter(void);
/* 전원 OFF 타이머 콜백: POWER_OFF_DELAY 경과 후 실제 전원 차단 */
/* Power-off timer callback: physically cut power after POWER_OFF_DELAY */
static void t_power_off_timeout_handler(void * p_context);
/* 디바이스 전원 OFF: LED 표시 후 타이머로 지연 전원 차단 */
/* Device power off: show LED, then delayed power cut via timer */
void device_power_off(void);
/* 전원 제어 핸들러: POWER_HOLD 핀으로 물리적 전원 ON/OFF */
/* Power control handler: physical power ON/OFF via POWER_HOLD pin */
static void power_control_handler(on_off_cont_t device_power_st);
/* 전원 버튼 상태머신 (타이머 콜백, 5ms 간격):
* - 짧은 눌림(<1.5): 전원 OFF
* - 중간 눌림(1.5~10): 부팅 시퀀스 시작
* - 긴 눌림(>10): 공장 초기화 (패스키 리셋 + 전원 OFF) */
/* 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 타이머 콜백: reset_status==5이면 BLE 연결 강제 해제 */
/* 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
*----------------------------------------------------------------------------*/
/* ASCII 텍스트 BLE 전송 ('\r'까지 전송, CRC16 자동 추가) */
/* Send ASCII text over BLE (up to '\r', CRC16 appended automatically) */
void data_tx_handler(char const *p_data_to_send);
/* 바이너리 데이터 BLE 안전 전송 (CRC16 자동 추가, 재시도 로직 포함)
* @param ble_bin_buff 전송할 바이너리 버퍼
* @param length 데이터 길이 (uint16_t 워드 단위, 실제 바이트 = length × 2) */
/* 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 호환 딜레이 (nrf_delay_ms 래퍼) */
/* SoftDevice-compatible delay (nrf_delay_ms wrapper) */
void dr_sd_delay_ms(uint32_t ms);
/*------------------------------------------------------------------------------
* 바이너리 패킷 포맷 함수
* 패킷 구조: [4바이트 태그][데이터][2바이트 CRC16]
* Binary Packet Format Functions
* Packet structure: [4-byte tag][data][2-byte CRC16]
*----------------------------------------------------------------------------*/
/* 단일 uint16_t 값 포맷: [tag 4B][value 2B] */
/* Format single uint16_t value: [tag 4B][value 2B] */
void single_format_data(uint8_t *buffer, const char *tag, const uint16_t value) ;
/* uint16_t 배열 포맷: [tag 4B][data0 2B][data1 2B]... */
/* 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);
/* uint8_t 바이트 배열 포맷: [tag 4B][byte0][byte1]... */
/* 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);
/* ASCII 문자열 포맷: [tag 4B][char0][char1]... */
/* Format ASCII string: [tag 4B][char0][char1]... */
void ascii_format_data(uint8_t *buffer, const char *tag, const char *data_ascii, size_t length);
/*==============================================================================
* 전역 변수 (extern)
* Global Variables (extern)
*============================================================================*/
extern volatile bool data_tx_in_progress; /* BLE TX 전송 진행 중 플래그 */
extern volatile bool ble_connection_st; /* BLE 연결 상태 (0=미연결, 1=연결) */
extern volatile bool processing; /* 센서 데이터 처리 중 플래그 (중복 명령 방지) */
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) */
extern volatile bool processing; /* Sensor data processing flag (prevents duplicate commands) */
/* 2026-03-17: cmd_parse.c에서 main.c로 이동한 전역변수 */
extern char SERIAL_NO[SERIAL_NO_LENGTH]; /* 시리얼 번호 */
extern char HW_NO[HW_NO_LENGTH]; /* 하드웨어 번호 */
extern char m_static_passkey[PASSKEY_LENGTH]; /* BLE 정적 패스키 */
extern bool bond_data_delete; /* 본딩 데이터 삭제 요청 플래그 */
extern uint32_t m_life_cycle; /* 디바이스 수명 사이클 카운터 */
extern uint8_t resetCount; /* 통신 타임아웃 카운터 */
extern bool info4; /* 추가 정보 포함 측정 플래그 */
extern uint8_t m_reset_status; /* 리셋 상태 코드 */
/* 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 바이너리 응답 버퍼 */
extern uint8_t ble_bin_buffer[]; /* BLE binary response buffer */
/* 에러 응답 전송 */
/* Send error response */
void param_error(const char *cmd);
#endif //MAIN_H__