Files
firmware-test/pc_firm/dr_util/dr_util.c
jhchun 831dbc2844 fix: BLE TX 먹통 해결 및 메모리 안전성 개선
- binary_tx_handler를 dr_binary_tx_safe로 전체 교체 (APP_ERROR_CHECK 제거)
- data_tx_handler APP_ERROR_CHECK → DBG_PRINTF 교체
- memset/memcpy 하드코딩 크기를 define 상수로 교체 (버퍼 오버런 수정)
- SERIAL_NO_LENGTH, HW_NO_LENGTH, PASSKEY_LENGTH를 main.h로 통합
- 미사용 HW 드라이버/EEPROM 코드 삭제, TWI를 i2c_manager.c로 통합
- EEPROM → FDS 전환, 코드 리뷰 현황 문서 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 16:39:26 +09:00

80 lines
2.5 KiB
C

#include "dr_util.h"
#include "parser.h"
extern void single_format_data(uint8_t *buffer, const char *tag, uint16_t value);
extern void format_data(uint8_t *buffer, const char *tag, uint16_t *data, uint8_t length);
extern uint8_t ble_bin_buffer[];
extern void dr_binary_tx_safe(uint8_t const *ble_bin_buff, uint16_t length);
void dr_ble_return_1(const char *tag, uint16_t value)
{
single_format_data(ble_bin_buffer, tag, value);
dr_binary_tx_safe(ble_bin_buffer, 3); /* Use safe TX with retry */
}
void dr_ble_return_2(const char *tag, uint16_t v1, uint16_t v2)
{
ble_bin_buffer[0] = tag[0];
ble_bin_buffer[1] = tag[1];
ble_bin_buffer[2] = tag[2];
ble_bin_buffer[3] = tag[3];
ble_bin_buffer[4] = (uint8_t)(v1 >> 8);
ble_bin_buffer[5] = (uint8_t)(v1 & 0xFF);
ble_bin_buffer[6] = (uint8_t)(v2 >> 8);
ble_bin_buffer[7] = (uint8_t)(v2 & 0xFF);
dr_binary_tx_safe(ble_bin_buffer, 4); /* Use safe TX with retry */
}
void dr_ble_return_3(const char *tag, uint16_t v1, uint16_t v2, uint16_t v3)
{
ble_bin_buffer[0] = tag[0];
ble_bin_buffer[1] = tag[1];
ble_bin_buffer[2] = tag[2];
ble_bin_buffer[3] = tag[3];
ble_bin_buffer[4] = (uint8_t)(v1 >> 8);
ble_bin_buffer[5] = (uint8_t)(v1 & 0xFF);
ble_bin_buffer[6] = (uint8_t)(v2 >> 8);
ble_bin_buffer[7] = (uint8_t)(v2 & 0xFF);
ble_bin_buffer[8] = (uint8_t)(v3 >> 8);
ble_bin_buffer[9] = (uint8_t)(v3 & 0xFF);
dr_binary_tx_safe(ble_bin_buffer, 5); /* Use safe TX with retry */
}
void dr_ble_debug(uint16_t point_id, uint16_t value)
{
/* Use dedicated buffer to avoid conflicts with ble_bin_buffer */
static uint8_t dbg_buffer[8];
dbg_buffer[0] = 'd';
dbg_buffer[1] = 'b';
dbg_buffer[2] = 'g';
dbg_buffer[3] = ':';
dbg_buffer[4] = (uint8_t)(point_id >> 8);
dbg_buffer[5] = (uint8_t)(point_id & 0xFF);
dbg_buffer[6] = (uint8_t)(value >> 8);
dbg_buffer[7] = (uint8_t)(value & 0xFF);
dr_binary_tx_safe(dbg_buffer, 4);
}
void dr_ble_return_piezo_1(const char *tag, uint16_t value)
{
/* Use dedicated buffer for piezo responses to avoid conflicts with ble_bin_buffer */
static uint8_t piezo_buffer[8];
piezo_buffer[0] = tag[0];
piezo_buffer[1] = tag[1];
piezo_buffer[2] = tag[2];
piezo_buffer[3] = tag[3];
piezo_buffer[4] = (uint8_t)(value >> 8);
piezo_buffer[5] = (uint8_t)(value & 0xFF);
dr_binary_tx_safe(piezo_buffer, 3); /* 6 bytes = 3 words */
}