cmd_parse.c에서 parser.c로 통합 준비: spz? / sqz? / sxz? / syz? -> mpz? / mqz? / mxz? / myz?
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,9 @@ extern void dr_sd_delay_ms(uint32_t ms); /* Softdevice-friendly delay */
|
||||
#include "fstorage.h"
|
||||
extern char SERIAL_NO[12];
|
||||
extern char HW_NO[12];
|
||||
extern char m_static_passkey[6];
|
||||
extern uint32_t m_life_cycle;
|
||||
extern void format_data(uint8_t *buffer, const char *tag, const uint16_t *data_array, size_t length);
|
||||
|
||||
/* FW Version - must match cmd_parse.c DEVICE_VERSION */
|
||||
#define DR_DEVICE_VERSION "FW25LIT2B102"
|
||||
@@ -298,7 +301,7 @@ static int Cmd_sss(const ParsedCmd *cmd);
|
||||
static int Cmd_sst(const ParsedCmd *cmd);
|
||||
static int Cmd_mfv(const ParsedCmd *cmd);
|
||||
|
||||
/////////////////////* PIEZO */////////////////////
|
||||
/* ------------------ Piezo ------------------ */
|
||||
|
||||
static int Cmd_msp(const ParsedCmd *cmd); /* IMU 6-axis raw data (single shot) */
|
||||
|
||||
@@ -311,11 +314,18 @@ static int Cmd_maa(const ParsedCmd *cmd); /* Piezo Burst + ADC all channel capt
|
||||
|
||||
static int Cmd_cmd(const ParsedCmd *cmd); /* Pin Test (High / Low) */
|
||||
|
||||
/* ------------------ FDS ------------------ */
|
||||
|
||||
static int Cmd_mwh(const ParsedCmd *cmd); /* Write HW Number to FDS */
|
||||
static int Cmd_mws(const ParsedCmd *cmd); /* Write Serial Number to FDS */
|
||||
static int Cmd_mrh(const ParsedCmd *cmd); /* Read HW Number from FDS */
|
||||
static int Cmd_mrs(const ParsedCmd *cmd); /* Read Serial Number from FDS */
|
||||
|
||||
static int Cmd_mpz(const ParsedCmd *cmd); /* Write Passkey to FDS */
|
||||
static int Cmd_mqz(const ParsedCmd *cmd); /* Read Passkey from FDS */
|
||||
static int Cmd_mxz(const ParsedCmd *cmd); /* Write Life Cycle to FDS */
|
||||
static int Cmd_myz(const ParsedCmd *cmd); /* Read Life Cycle from FDS */
|
||||
|
||||
/* ---- Command Table ---- */
|
||||
|
||||
typedef struct {
|
||||
@@ -344,6 +354,12 @@ static CmdEntry g_cmd_table[] = {
|
||||
{ "mrh?", true, Cmd_mrh },
|
||||
{ "mrs?", true, Cmd_mrs },
|
||||
|
||||
/* Config: Passkey / Life Cycle (FDS) */
|
||||
{ "mpz?", true, Cmd_mpz }, /* 패스키 쓰기 (spz? → mpz?) */
|
||||
{ "mqz?", true, Cmd_mqz }, /* 패스키 읽기 (sqz? → mqz?) */
|
||||
{ "mxz?", true, Cmd_mxz }, /* life_cycle 쓰기 (sxz? → mxz?) */
|
||||
{ "myz?", true, Cmd_myz }, /* life_cycle 읽기 (syz? → myz?) */
|
||||
|
||||
/* A. Device Status */
|
||||
{ "mta?", true, Cmd_mta },
|
||||
{ "sta?", true, Cmd_sta },
|
||||
@@ -1349,6 +1365,84 @@ static int Cmd_mrs(const ParsedCmd *cmd)
|
||||
}
|
||||
|
||||
|
||||
/*==============================================================================
|
||||
* Passkey / Life Cycle (FDS)
|
||||
*============================================================================*/
|
||||
|
||||
/* mpz? - 패스키 쓰기 (spz? → mpz?)
|
||||
* 패킷: mpz? + ASCII 6자리 패스키
|
||||
* 응답: rpz: + ASCII 6바이트
|
||||
*/
|
||||
static int Cmd_mpz(const ParsedCmd *cmd)
|
||||
{
|
||||
char passkey[7] = {0};
|
||||
dr_get_ascii(cmd, 0, passkey, 6);
|
||||
|
||||
memcpy(m_static_passkey, passkey, 6);
|
||||
memcpy(m_config.static_passkey, m_static_passkey, 6);
|
||||
config_save();
|
||||
|
||||
if (g_plat.log) g_plat.log("[mpz] Passkey saved: %.6s\r\n", m_static_passkey);
|
||||
|
||||
ascii_format_data(ble_bin_buffer, "rpz:", passkey, 6);
|
||||
dr_binary_tx_safe(ble_bin_buffer, 5);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* mqz? - 패스키 읽기 (sqz? → mqz?)
|
||||
* 패킷: mqz? (데이터 없음)
|
||||
* 응답: rqz: + ASCII 6바이트
|
||||
*/
|
||||
static int Cmd_mqz(const ParsedCmd *cmd)
|
||||
{
|
||||
(void)cmd;
|
||||
memcpy(m_static_passkey, m_config.static_passkey, 6);
|
||||
|
||||
ascii_format_data(ble_bin_buffer, "rqz:", m_static_passkey, 6);
|
||||
dr_binary_tx_safe(ble_bin_buffer, 5);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* mxz? - life_cycle 쓰기 (sxz? → mxz?)
|
||||
* 패킷: mxz? + uint16 x 2 (상위16비트, 하위16비트)
|
||||
* 응답: rxz: + uint16 x 2
|
||||
*/
|
||||
static int Cmd_mxz(const ParsedCmd *cmd)
|
||||
{
|
||||
uint16_t hi = 0, lo = 0;
|
||||
dr_get_u16(cmd, 0, &hi);
|
||||
dr_get_u16(cmd, 1, &lo);
|
||||
|
||||
m_life_cycle = ((uint32_t)hi << 16) | (uint32_t)lo;
|
||||
m_config.life_cycle = m_life_cycle;
|
||||
config_save();
|
||||
|
||||
if (g_plat.log) g_plat.log("[mxz] life_cycle=%u saved\r\n", m_life_cycle);
|
||||
|
||||
uint16_t result[2] = { hi, lo };
|
||||
format_data(ble_bin_buffer, "rxz:", result, 2);
|
||||
dr_binary_tx_safe(ble_bin_buffer, 4);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* myz? - life_cycle 읽기 (syz? → myz?)
|
||||
* 패킷: myz? (데이터 없음)
|
||||
* 응답: ryz: + uint16 x 2
|
||||
*/
|
||||
static int Cmd_myz(const ParsedCmd *cmd)
|
||||
{
|
||||
(void)cmd;
|
||||
m_life_cycle = m_config.life_cycle;
|
||||
|
||||
uint16_t result[2];
|
||||
result[0] = (uint16_t)(m_life_cycle >> 16);
|
||||
result[1] = (uint16_t)(m_life_cycle & 0xFFFF);
|
||||
|
||||
format_data(ble_bin_buffer, "ryz:", result, 2);
|
||||
dr_binary_tx_safe(ble_bin_buffer, 4);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*==============================================================================
|
||||
* IMU: 6-axis raw data (single shot)
|
||||
*============================================================================*/
|
||||
|
||||
Reference in New Issue
Block a user