From 2f9efac10db9dd52f291c21397d818a90202bbb6 Mon Sep 17 00:00:00 2001 From: jhchun Date: Wed, 2 Sep 2026 13:57:59 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EA=B8=B0=20=EC=B8=A1=EC=A0=95=20?= =?UTF-8?q?=EB=B0=B0=ED=84=B0=EB=A6=AC/IMU/=EC=98=A8=EB=8F=84=20=EC=B8=A1?= =?UTF-8?q?=EC=A0=95=20=EC=8B=A4=ED=8C=A8=20=EC=8B=9C=20BLE=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=200xFFFF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 실패하더라도 Piezo sweep은 계속됨 --- src/command/handlers/cmd_piezo.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/command/handlers/cmd_piezo.c b/src/command/handlers/cmd_piezo.c index b42e379..ff72876 100644 --- a/src/command/handlers/cmd_piezo.c +++ b/src/command/handlers/cmd_piezo.c @@ -38,8 +38,8 @@ int cmd_mbb(const uint8_t *data, uint8_t data_len) uint8_t session = cmd_next_echo_session(); - int16_t accel[3]; - int16_t gyro[3]; + int16_t accel[3] = { (int16_t)0xFFFF, (int16_t)0xFFFF, (int16_t)0xFFFF }; + int16_t gyro[3] = { (int16_t)0xFFFF, (int16_t)0xFFFF, (int16_t)0xFFFF }; processing = true; DBG_PRINTF("[MBB] cmd start\r\n"); @@ -50,13 +50,29 @@ int cmd_mbb(const uint8_t *data, uint8_t data_len) /* Read battery first (idle measurement) so mbb? result matches msn? */ DBG_PRINTF("[MBB] battery read (idle)\r\n"); batt_mv = battery_read_mv(); + if (batt_mv < 0) + { + DBG_PRINTF("[MBB] battery read fail\r\n"); + batt_mv = 0xFFFF; + } int status = piezo_measure_start_session(); if (status == ECHO_STATUS_OK) // Piezo GPIO, power, ADC initialization/wake succeeded { DBG_PRINTF("[MBB] imu/temp read\r\n"); - imu_read_with_temperature(accel, gyro, &temp_cdeg); + int imu_ret = imu_read_with_temperature(accel, gyro, &temp_cdeg); + if (imu_ret != 0) + { + DBG_PRINTF("[MBB] imu/temp read fail ret=%d\r\n", imu_ret); + accel[0] = (int16_t)0xFFFF; + accel[1] = (int16_t)0xFFFF; + accel[2] = (int16_t)0xFFFF; + gyro[0] = (int16_t)0xFFFF; + gyro[1] = (int16_t)0xFFFF; + gyro[2] = (int16_t)0xFFFF; + temp_cdeg = (int16_t)0xFFFF; + } battery_protection_record_continuous(batt_mv, temp_cdeg); // update protection counters for continuous monitoring @@ -240,8 +256,8 @@ int cmd_mim(const uint8_t *data, uint8_t data_len) int imu_ret = imu_fifo_start(); if (imu_ret != 0) { - DBG_PRINTF("[MTB] fifo start fail ret=%d\r\n", imu_ret); - cmd_send_response_rim(tx_rim_samples, 0U); + DBG_PRINTF("[MIM] fifo start fail ret=%d\r\n", imu_ret); + cmd_send_response_rim_error(); processing = false; return 1; } @@ -252,7 +268,10 @@ int cmd_mim(const uint8_t *data, uint8_t data_len) if (imu_ret != 0) { DBG_PRINTF("[MIM] fifo read fail ret=%d\r\n", imu_ret); - rim_count = 0U; + cmd_send_response_rim_error(); + imu_fifo_stop(); + processing = false; + return 1; } cmd_send_response_rim(tx_rim_samples, rim_count); // IMU FIFO 15 samples rim: 전송