코드정리
This commit is contained in:
@@ -16,6 +16,10 @@
|
||||
|
||||
static uint8_t tx_rim_samples[IMU_FIFO_RIM_TARGET_SAMPLES * IMU_FIFO_SAMPLE_BYTES];
|
||||
|
||||
/*
|
||||
* 테스트용
|
||||
* mpa?: piezo 전원 ON
|
||||
*/
|
||||
int cmd_mpa(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
ARG_UNUSED(data);
|
||||
@@ -37,12 +41,15 @@ int cmd_mpa(const uint8_t *data, uint8_t data_len)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* 테스트용
|
||||
* mpb?: piezo 전원 OFF
|
||||
*/
|
||||
int cmd_mpb(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
ARG_UNUSED(data);
|
||||
ARG_UNUSED(data_len);
|
||||
|
||||
/* mpb?: piezo TX/RX 전원 레일을 끈다. */
|
||||
DBG_CORE("[MPB] enter\r\n");
|
||||
if (piezo_init() != 0)
|
||||
{
|
||||
@@ -229,11 +236,12 @@ int cmd_mad(const uint8_t *data, uint8_t data_len)
|
||||
|
||||
/*
|
||||
* 테스트용(이전 정렬모드)
|
||||
* maa?:
|
||||
* - piezo 6채널 burst 순서대로 쏘고
|
||||
* - echo 샘플을 채널별로 모은 뒤
|
||||
* - reb: 패킷 6개 전송
|
||||
* - raa: 상태값은 전체 작업 성공/실패 요약
|
||||
* maa?: piezo echo sweep
|
||||
* - 순서:
|
||||
* 1. piezo 6채널 burst
|
||||
* 2. echo 샘플 채널별로 모으기
|
||||
* 3. reb: 패킷 6개 전송
|
||||
* 4. raa: 상태값은 전체 작업 성공/실패 요약
|
||||
*/
|
||||
int cmd_maa(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
@@ -246,22 +254,22 @@ int cmd_maa(const uint8_t *data, uint8_t data_len)
|
||||
power_button_suspend(true);
|
||||
|
||||
int status = piezo_measure_start_session();
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
status = piezo_measure_sweep();
|
||||
}
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
if (status == ECHO_STATUS_OK) // Piezo GPIO, 전원, ADC 초기화/wake 성공
|
||||
{
|
||||
DBG_PRINTF("[MBB] piezo sweep start\r\n");
|
||||
status = piezo_measure_sweep();
|
||||
|
||||
for (uint8_t ch = 0; ch < PIEZO_NUM_CHANNELS; ch++)
|
||||
{
|
||||
DBG_PRINTF("[MBB] response reb: tx start ch=%d\r\n", ch);
|
||||
cmd_send_response_echo(session, ch, piezo_measure_channel_buffer(ch), piezo_config_get()->samples);
|
||||
}
|
||||
}
|
||||
|
||||
piezo_power_off();
|
||||
power_button_suspend(false);
|
||||
cmd_send_response_u16("raa:", (uint16_t)status);
|
||||
cmd_send_response_u16("raa:", (uint16_t)status); // 최종 상태값 raa: 전송
|
||||
DBG_PRINTF("[CMD] maa status=0x%04X\r\n", status);
|
||||
|
||||
processing = false;
|
||||
@@ -272,8 +280,16 @@ int cmd_maa(const uint8_t *data, uint8_t data_len)
|
||||
* 전체 측정 명령
|
||||
* mbb?: piezo echo sweep + 배터리 + IMU + IMU 온도 측정
|
||||
* - 성공 시 rbb 1개, reb 6개, raa 상태값 전송
|
||||
* - 실패 시 rbb/reb 생략, raa에 실패 원인 코드 전송
|
||||
* - processing=true 구간에서는 내부 모니터의 I2C 접근을 막는 기준으로 사용
|
||||
*
|
||||
* - 순서:
|
||||
* 1. battery / imu / temp 측정
|
||||
* 2. rbb: 1개 전송
|
||||
* 3. piezo / echo ADC 준비
|
||||
* 4. piezo 6채널 burst
|
||||
* 5. echo 샘플 채널별로 모으기
|
||||
* 6. reb: 6개 전송
|
||||
* 7. raa: 최종 상태 전송
|
||||
*/
|
||||
int cmd_mbb(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
@@ -285,88 +301,40 @@ int cmd_mbb(const uint8_t *data, uint8_t data_len)
|
||||
int16_t accel[3];
|
||||
int16_t gyro[3];
|
||||
|
||||
/*
|
||||
* mbb?는 이 프로젝트에서 가장 무거운 명령 중 하나다.
|
||||
*
|
||||
* 순서:
|
||||
* 1. piezo/echo ADC 준비
|
||||
* 2. 6채널 echo sweep
|
||||
* 3. battery / imu / temp 추가 측정
|
||||
* 4. rbb: 1개 전송
|
||||
* 5. reb: 6개 전송
|
||||
* 6. raa: 최종 상태 전송
|
||||
*
|
||||
* 중간에 하나라도 실패하면 status에 에러 코드를 넣고,
|
||||
* 성공한 경우에만 묶음 응답(rbb + reb)을 보낸다.
|
||||
*/
|
||||
processing = true;
|
||||
power_button_suspend(true);
|
||||
DBG_PRINTF("[MBB] cmd start\r\n");
|
||||
|
||||
int status = piezo_measure_start_session();
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
status = piezo_measure_sweep();
|
||||
}
|
||||
|
||||
int batt_mv = -1;
|
||||
int16_t temp_cdeg = INT16_MIN;
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
if (status == ECHO_STATUS_OK) // Piezo GPIO, 전원, ADC 초기화/wake 성공
|
||||
{
|
||||
/* echo sweep 성공 후에만 부가 센서값 읽기
|
||||
* - rbb에 포함되는 배터리 전압
|
||||
* - 실패 시 ECHO_STATUS_BATT로 종료
|
||||
*/
|
||||
DBG_PRINTF("[MBB] battery read\r\n");
|
||||
batt_mv = battery_read_mv();
|
||||
if (batt_mv < 0)
|
||||
{
|
||||
status = ECHO_STATUS_BATT;
|
||||
}
|
||||
}
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
/* rbb에 포함되는 IMU 6축 값과 IMU 내부 온도 읽기
|
||||
* - direct read 경로 사용
|
||||
* - 실패 시 ECHO_STATUS_IMU로 종료
|
||||
*/
|
||||
DBG_PRINTF("[MBB] imu/temp read\r\n");
|
||||
if (imu_read_with_temperature(accel, gyro, &temp_cdeg) != 0)
|
||||
{
|
||||
status = ECHO_STATUS_IMU;
|
||||
}
|
||||
}
|
||||
imu_read_with_temperature(accel, gyro, &temp_cdeg);
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
/* mbb? 성공 응답값으로 연속 측정 보호 판정 갱신
|
||||
* - 실패한 측정은 호출하지 않아 기존 저전압/고온 카운트 유지
|
||||
* - rbb에 실리는 배터리/IMU 온도 값과 같은 값을 사용
|
||||
*/
|
||||
battery_protection_record_continuous(batt_mv, temp_cdeg);
|
||||
|
||||
/* 측정 성공 응답 순서
|
||||
* - rbb: 배터리 + IMU + IMU 온도 요약
|
||||
* - reb: 채널별 echo raw 데이터
|
||||
* - raa: 마지막 상태 코드
|
||||
*/
|
||||
DBG_PRINTF("[MBB] response tx start\r\n");
|
||||
DBG_PRINTF("[MBB] response rbb: tx start\r\n");
|
||||
cmd_send_response_bundle((uint16_t)batt_mv, accel, gyro, temp_cdeg);
|
||||
|
||||
DBG_PRINTF("[MBB] piezo sweep start\r\n");
|
||||
status = piezo_measure_sweep();
|
||||
|
||||
for (uint8_t ch = 0; ch < PIEZO_NUM_CHANNELS; ch++)
|
||||
{
|
||||
/* reb: 채널별 raw echo 파형 */
|
||||
DBG_PRINTF("[MBB] tx reb ch=%d\r\n", ch);
|
||||
DBG_PRINTF("[MBB] response reb: tx start ch=%d\r\n", ch);
|
||||
cmd_send_response_echo(session, ch, piezo_measure_channel_buffer(ch), piezo_config_get()->samples);
|
||||
}
|
||||
}
|
||||
|
||||
piezo_power_off();
|
||||
power_button_suspend(false);
|
||||
DBG_PRINTF("[MBB] power off\r\n");
|
||||
cmd_send_response_u16("raa:", (uint16_t)status);
|
||||
DBG_PRINTF("[MBB] done\r\n");
|
||||
cmd_send_response_u16("raa:", (uint16_t)status); // 최종 상태값 raa: 전송
|
||||
DBG_PRINTF("[CMD] mbb status=0x%04X\r\n", status);
|
||||
|
||||
processing = false;
|
||||
@@ -374,7 +342,15 @@ int cmd_mbb(const uint8_t *data, uint8_t data_len)
|
||||
}
|
||||
|
||||
/*
|
||||
* mtb?: piezo sweep + IMU FIFO
|
||||
* 정렬모드
|
||||
* mtb?: IMU FIFO + piezo echo sweep
|
||||
* - 순서:
|
||||
* 1. IMU FIFO start
|
||||
* 2. piezo 6채널 burst
|
||||
* 3. echo 샘플 채널별로 모으기
|
||||
* 4. reb: 패킷 6개 전송
|
||||
* 5. raa: 상태값은 전체 작업 성공/실패 요약
|
||||
* - IMU FIFO 샘플은 rim: 패킷으로 전송
|
||||
*/
|
||||
int cmd_mtb(const uint8_t *data, uint8_t data_len)
|
||||
{
|
||||
@@ -389,54 +365,47 @@ int cmd_mtb(const uint8_t *data, uint8_t data_len)
|
||||
power_button_suspend(true);
|
||||
DBG_PRINTF("[MTB] cmd start\r\n");
|
||||
|
||||
int status = ECHO_STATUS_OK;
|
||||
int imu_ret = imu_fifo_start();
|
||||
if (imu_ret != 0)
|
||||
{
|
||||
DBG_PRINTF("[MTB] fifo start fail ret=%d\r\n", imu_ret);
|
||||
status = ECHO_STATUS_IMU;
|
||||
}
|
||||
else
|
||||
{
|
||||
fifo_started = true;
|
||||
}
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
status = piezo_measure_start_session();
|
||||
}
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
int status = piezo_measure_start_session();
|
||||
|
||||
if (status == ECHO_STATUS_OK) // Piezo GPIO, 전원, ADC 초기화/wake 성공
|
||||
{
|
||||
DBG_PRINTF("[MTB] piezo sweep start\r\n");
|
||||
status = piezo_measure_sweep();
|
||||
}
|
||||
|
||||
if (status == ECHO_STATUS_OK)
|
||||
{
|
||||
|
||||
for (uint8_t ch = 0; ch < PIEZO_NUM_CHANNELS; ch++)
|
||||
{
|
||||
DBG_PRINTF("[MTB] response reb: tx start ch=%d\r\n", ch);
|
||||
cmd_send_response_echo(session, ch, piezo_measure_channel_buffer(ch), piezo_config_get()->samples);
|
||||
}
|
||||
}
|
||||
|
||||
cmd_send_response_u16("raa:", (uint16_t)status); // 최종 상태값 raa: 전송
|
||||
|
||||
if (fifo_started)
|
||||
{
|
||||
int imu_ret = imu_fifo_read_latest(tx_rim_samples,
|
||||
IMU_FIFO_RIM_TARGET_SAMPLES,
|
||||
&rim_count);
|
||||
int imu_ret = imu_fifo_read_latest(tx_rim_samples, IMU_FIFO_RIM_TARGET_SAMPLES, &rim_count);
|
||||
if (imu_ret != 0)
|
||||
{
|
||||
DBG_PRINTF("[MTB] fifo read fail ret=%d\r\n", imu_ret);
|
||||
status = ECHO_STATUS_IMU;
|
||||
rim_count = 0U;
|
||||
}
|
||||
}
|
||||
|
||||
cmd_send_response_rim(tx_rim_samples, rim_count);
|
||||
cmd_send_response_rim(tx_rim_samples, rim_count); // IMU FIFO 샘플 rim: 전송
|
||||
DBG_PRINTF("[CMD] mtb status=0x%04X\r\n", status);
|
||||
|
||||
piezo_power_off();
|
||||
power_button_suspend(false);
|
||||
cmd_send_response_u16("raa:", (uint16_t)status);
|
||||
DBG_PRINTF("[CMD] mtb status=0x%04X rim=%u\r\n", status, rim_count);
|
||||
|
||||
processing = false;
|
||||
|
||||
Reference in New Issue
Block a user