Files
VesiScan-Basic-firmware-test/project/ble_peripheral/ble_app_bladder_patch/main.h
jhChun 71c6e23cf0 Firmware 버전 식별 코드 정의를 main.h로 이동
- parser.c: DR_DEVICE_VERSION 제거
2026-03-27 10:05:46 +09:00

174 lines
7.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*******************************************************************************
* @file main.h
* @author CandyPops Co.
* @version V1.0.0
* @date 2022-09-05
* @brief VesiScan BASIC 메인 헤더 파일
*
* [시스템 개요]
* VesiScan BASIC은 nRF52840 기반 BLE 방광 모니터링 패치 디바이스이다.
* 본 헤더는 시스템 전역에서 사용하는 열거형, 함수 선언, 전역 변수를 정의한다.
*
* [통신 방식]
* - BLE NUS (Nordic UART Service): 스마트폰 앱과 바이너리 프로토콜 통신
* - 물리 UART (1Mbps): 디버그 및 공장 테스트용
*
* [데이터 전송 흐름]
* 1. 앱/UART에서 명령 수신 → received_command_process()
* 2. 센서 데이터 수집 (배터리, 온도, IMU, 압력)
* 3. format_data() 계열 함수로 바이너리 패킷 생성
* 4. dr_binary_tx_safe()로 CRC16 추가 후 BLE 전송
******************************************************************************/
#ifndef MAIN_H__
#define MAIN_H__
/* -------------------------------------------------------------------------
* Firmware 식별 코드
* - VBTFW0100 = 개발(시험)용 Ver 1.00
* - VB0FW0100 = 양산용 Ver 1.00
------------------------------------------------------------------------- */
#define FIRMWARE_VERSION "VBTFW0100"
/*==============================================================================
* 데이터 길이 상수
*============================================================================*/
#define SERIAL_NO_LENGTH 12 /* 시리얼 번호 길이 (예: "VB026030000") */
#define HW_NO_LENGTH 12 /* 하드웨어 번호(버전) 길이 */
#define PASSKEY_LENGTH 6 /* BLE 페어링 패스키 길이 (숫자 6자리) */
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdarg.h>
#include <stdbool.h>
#include "boards.h"
/*==============================================================================
* 열거형 정의
*============================================================================*/
/* 디바이스 ON/OFF 제어용 열거형 (EEPROM, 전원 등) */
typedef enum
{
OFF = 0, /* 꺼짐 */
ON = 1 /* 켜짐 */
}on_off_cont_t;
/* 명령 수신 경로 구분 (BLE 또는 UART) */
typedef enum
{
CMD_BLE = 0, /* BLE NUS를 통해 수신된 명령 */
CMD_UART = 1 /* 물리 UART를 통해 수신된 명령 */
}which_cmd_t;
/* 챔버 자동 테스트 모드 (FEATURE_CHAMBER_AUTO_TEST 활성 시) */
#if FEATURE_CHAMBER_AUTO_TEST
typedef enum
{
SIMPLE_AUTO_MODE = 0, /* 간단 자동 모드 */
HALF_AUTO_MODE = 1, /* 반자동 모드 */
FULL_AUTO_MODE = 2, /* 전체 자동 모드 */
NONE_AUTO_MODE = 3 /* 자동 모드 없음 */
}auto_meas_mode_t;
#endif
/* BLE 연결 상태 */
typedef enum
{
BLE_DISCONNECTED_ST = 0, /* BLE 미연결 */
BLE_CONNECTED_ST = 1 /* BLE 연결됨 */
}ble_status_t;
/*==============================================================================
* 함수 선언
*============================================================================*/
#if FEATURE_SECURE_CONNECTION
/* BLE 광고 시작 (erase_bonds=true이면 본딩 정보 삭제 후 시작) */
static void advertising_start(bool erase_bonds);
#endif
/* 슬립 모드 진입: LED 표시 후 POWER_OFF_DELAY(3초) 후 전원 차단 */
void sleep_mode_enter(void);
/* 전원 OFF 타이머 콜백: POWER_OFF_DELAY 경과 후 실제 전원 차단 */
static void t_power_off_timeout_handler(void * p_context);
/* 디바이스 전원 OFF: LED 표시 후 타이머로 지연 전원 차단 */
void device_power_off(void);
/* 전원 제어 핸들러: POWER_HOLD 핀으로 물리적 전원 ON/OFF */
static void power_control_handler(on_off_cont_t device_power_st);
/* 전원 버튼 상태머신 (타이머 콜백, 5ms 간격):
* - 짧은 눌림(<1.5초): 전원 OFF
* - 중간 눌림(1.5초~10초): 부팅 시퀀스 시작
* - 긴 눌림(>10초): 공장 초기화 (패스키 리셋 + 전원 OFF) */
static void main_s(void * p_context);
/* Peer Manager 타이머 콜백: reset_status==5이면 BLE 연결 강제 해제 */
static void PM_s(void * p_context);
//static void main_re(void * p_context);
/* 메인 루틴 핸들러 (레거시, 현재 미사용) */
static void main_routine_handler(void * p_context);
/*------------------------------------------------------------------------------
* 데이터 전송 함수
*----------------------------------------------------------------------------*/
/* ASCII 텍스트 BLE 전송 ('\r'까지 전송, CRC16 자동 추가) */
void data_tx_handler(char const *p_data_to_send);
/* 바이너리 데이터 BLE 안전 전송 (CRC16 자동 추가, 재시도 로직 포함)
* @param ble_bin_buff 전송할 바이너리 버퍼
* @param length 데이터 길이 (uint16_t 워드 단위, 실제 바이트 = length × 2) */
void dr_binary_tx_safe(uint8_t const *ble_bin_buff, uint16_t length);
/* SoftDevice 호환 딜레이 (nrf_delay_ms 래퍼) */
void dr_sd_delay_ms(uint32_t ms);
/*------------------------------------------------------------------------------
* 바이너리 패킷 포맷 함수
* 패킷 구조: [4바이트 태그][데이터][2바이트 CRC16]
*----------------------------------------------------------------------------*/
/* 단일 uint16_t 값 포맷: [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]... */
void format_data(uint8_t *buffer, const char *tag, const uint16_t *data_array, size_t length);
/* uint8_t 바이트 배열 포맷: [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]... */
void ascii_format_data(uint8_t *buffer, const char *tag, const char *data_ascii, size_t length);
/*==============================================================================
* 전역 변수 (extern)
*============================================================================*/
extern volatile bool data_tx_in_progress; /* BLE TX 전송 진행 중 플래그 */
extern volatile bool ble_connection_st; /* BLE 연결 상태 (0=미연결, 1=연결) */
extern volatile bool processing; /* 센서 데이터 처리 중 플래그 (중복 명령 방지) */
/* 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; /* 리셋 상태 코드 */
extern uint8_t ble_bin_buffer[]; /* BLE 바이너리 응답 버퍼 */
/* 에러 응답 전송 */
void param_error(const char *cmd);
#endif //MAIN_H__