커맨드 구조 분리
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
/*******************************************************************************
|
||||
* @file cmd_info.c
|
||||
* @brief BLE command handlers
|
||||
******************************************************************************/
|
||||
#include <zephyr/sys/util.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "cmd_common.h"
|
||||
#include "main.h"
|
||||
#include "debug_print.h"
|
||||
#include "app_nvs.h"
|
||||
#include "cmd_info.h"
|
||||
|
||||
int cmd_mfv(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
char fw_version[SERIAL_NO_LENGTH];
|
||||
int err;
|
||||
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
cmd_copy_fixed_ascii(fw_version, sizeof(fw_version), FIRMWARE_VERSION, strlen(FIRMWARE_VERSION));
|
||||
err = cmd_send_response_ascii("rfv:", fw_version, sizeof(fw_version));
|
||||
if (err)
|
||||
{
|
||||
DBG_ERR("[CMD] mfv tx failed err=%d\r\n", err);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mid(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
int err;
|
||||
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
err = cmd_send_response_identity();
|
||||
if (err)
|
||||
{
|
||||
DBG_ERR("[CMD] mid tx failed err=%d\r\n", err);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mwh(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
if (data_len < HW_NO_LENGTH)
|
||||
{
|
||||
cmd_send_response_u16("rwh:", 0xFFFF);
|
||||
return 1;
|
||||
}
|
||||
|
||||
memset(HW_NO, 0, sizeof(HW_NO));
|
||||
memcpy(HW_NO, data, HW_NO_LENGTH);
|
||||
int err = app_nvs_save_hw_no(HW_NO);
|
||||
if (err)
|
||||
{
|
||||
cmd_send_response_u16("rwh:", 0xFFFD);
|
||||
return 1;
|
||||
}
|
||||
|
||||
cmd_send_response_ascii("rwh:", HW_NO, HW_NO_LENGTH);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mrh(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
int err;
|
||||
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
err = cmd_send_response_ascii("rrh:", HW_NO, HW_NO_LENGTH);
|
||||
if (err)
|
||||
{
|
||||
DBG_ERR("[CMD] mrh tx failed err=%d\r\n", err);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mws(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
if (data_len < SERIAL_NO_LENGTH)
|
||||
{
|
||||
cmd_send_response_u16("rws:", 0xFFFF);
|
||||
return 1;
|
||||
}
|
||||
|
||||
memset(SERIAL_NO, 0, sizeof(SERIAL_NO));
|
||||
memcpy(SERIAL_NO, data, SERIAL_NO_LENGTH);
|
||||
int err = app_nvs_save_serial_no(SERIAL_NO);
|
||||
if (err)
|
||||
{
|
||||
cmd_send_response_u16("rws:", 0xFFFD);
|
||||
return 1;
|
||||
}
|
||||
|
||||
cmd_send_response_ascii("rws:", SERIAL_NO, SERIAL_NO_LENGTH);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mrs(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
int err;
|
||||
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
err = cmd_send_response_ascii("rrs:", SERIAL_NO, SERIAL_NO_LENGTH);
|
||||
if (err)
|
||||
{
|
||||
DBG_ERR("[CMD] mrs tx failed err=%d\r\n", err);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mpz(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
if (data_len < PASSKEY_LENGTH)
|
||||
{
|
||||
cmd_send_response_u16("rpz:", 0xFFFF);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_passkey_changed != 0U)
|
||||
{
|
||||
/* 패스키가 변경된 경우 다시 바꿀 수 없음(FFFF 반환) */
|
||||
cmd_send_response_u16("rpz:", 0xFFFF);
|
||||
DBG_PRINTF("[CMD] mpz: passkey already changed\r\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* NVS 저장이 모두 성공한 뒤 RAM 값 확정 */
|
||||
char new_passkey[PASSKEY_BUF_SIZE];
|
||||
memset(new_passkey, 0, sizeof(new_passkey));
|
||||
memcpy(new_passkey, data, PASSKEY_LENGTH);
|
||||
|
||||
int err = app_nvs_save_passkey(new_passkey);
|
||||
if (err)
|
||||
{
|
||||
cmd_send_response_u16("rpz:", 0xFFFD);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 변경 완료 플래그 세트 : 다음 mpz? 명령 차단 */
|
||||
err = app_nvs_save_passkey_changed(1U);
|
||||
if (err)
|
||||
{
|
||||
cmd_send_response_u16("rpz:", 0xFFFD);
|
||||
return 1;
|
||||
}
|
||||
|
||||
memset(m_static_passkey, 0, sizeof(m_static_passkey));
|
||||
memcpy(m_static_passkey, new_passkey, PASSKEY_LENGTH);
|
||||
m_passkey_changed = 1U;
|
||||
|
||||
cmd_send_response_ascii("rpz:", m_static_passkey, PASSKEY_LENGTH);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int cmd_mqz(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
cmd_send_response_ascii("rqz:", m_static_passkey, PASSKEY_LENGTH);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* LED 상태 변경 명령
|
||||
* mls?: 앱에서 전달한 LED 상태값을 적용하고 rls로 echo back
|
||||
* - 파라미터 부족: 0xFFFF
|
||||
* - 범위 초과: 0xFFFE
|
||||
* - LED_STATE_OFF 진입 시 IMU FIFO 정지
|
||||
*/
|
||||
Reference in New Issue
Block a user