reb: 패킷에 채널 정보 추가

This commit is contained in:
2026-06-12 12:11:03 +09:00
parent 99db147ff4
commit 9666d2e7ec
+19 -11
View File
@@ -52,10 +52,11 @@ static uint16_t echo_capture[ECHO_ADC_MAX_SAMPLES];
static uint32_t echo_accum[ECHO_ADC_MAX_SAMPLES];
static uint8_t tx_u16_buf[8];
static uint8_t tx_imu_buf[18];
static uint8_t tx_echo_buf[4 + 2 + (ECHO_ADC_MAX_SAMPLES * 2) + 2];
static uint8_t tx_echo_buf[4 + 2 + 2 + (ECHO_ADC_MAX_SAMPLES * 2) + 2];
static uint8_t tx_bundle_buf[22];
static uint8_t tx_cfg_buf[16];
static uint8_t tx_ascii_buf[4 + HW_NO_LENGTH + 2];
static uint8_t g_echo_session;
static piezo_config_t g_piezo_config = {
.freq = PIEZO_CFG_FREQ_DEFAULT,
.cycles = PIEZO_CFG_CYCLES_DEFAULT,
@@ -269,26 +270,28 @@ static int send_response_imu(const int16_t accel[3], const int16_t gyro[3])
return ble_data_send(buf, 18);
}
static void send_response_echo(const uint16_t *samples, uint16_t num_samples)
static void send_response_echo(uint8_t session, uint8_t channel, const uint16_t *samples, uint16_t num_samples)
{
/*
* reb: 패킷은 최대 208바이트라서 스택 지역변수로 두면
* reb: 패킷은 최대 210바이트라서 스택 지역변수로 두면
* mbb?처럼 반복 호출할 때 워커 스택을 꽤 먹는다.
* 현재는 한 번에 하나의 명령만 처리하므로 정적 버퍼를 재사용한다.
*/
uint8_t *buf = tx_echo_buf;
buf[0] = 'r'; buf[1] = 'e'; buf[2] = 'b'; buf[3] = ':';
buf[4] = (uint8_t)(num_samples >> 8);
buf[5] = (uint8_t)(num_samples & 0xFF);
buf[4] = session;
buf[5] = channel;
buf[6] = (uint8_t)(num_samples >> 8);
buf[7] = (uint8_t)(num_samples & 0xFF);
for (uint16_t i = 0; i < num_samples; i++)
{
buf[6 + i * 2] = (uint8_t)(samples[i] >> 8);
buf[7 + i * 2] = (uint8_t)(samples[i] & 0xFF);
buf[8 + i * 2] = (uint8_t)(samples[i] >> 8);
buf[9 + i * 2] = (uint8_t)(samples[i] & 0xFF);
}
uint16_t payload_len = 4 + 2 + (num_samples * 2);
uint16_t payload_len = 4 + 2 + 2 + (num_samples * 2);
uint16_t crc = dr_crc16_compute(buf, payload_len);
buf[payload_len] = (uint8_t)(crc & 0xFF);
buf[payload_len + 1] = (uint8_t)(crc >> 8);
@@ -727,6 +730,7 @@ static int cmd_mec(const uint8_t *data, uint8_t data_len)
uint16_t cycles = cfg->cycles;
uint16_t averaging = cfg->avg;
uint16_t piezo_ch = 0;
uint8_t session = g_echo_session++;
get_data_u16_be(data, data_len, 0, &freq_option);
get_data_u16_be(data, data_len, 1, &delay_us);
@@ -765,7 +769,7 @@ static int cmd_mec(const uint8_t *data, uint8_t data_len)
if (status == ECHO_STATUS_OK)
{
send_response_echo(echo_capture, num_samples);
send_response_echo(session, (uint8_t)(piezo_ch % PIEZO_NUM_CHANNELS), echo_capture, num_samples);
}
piezo_power_off();
@@ -788,6 +792,8 @@ static int cmd_maa(const uint8_t *data, uint8_t data_len)
ARG_UNUSED(data);
ARG_UNUSED(data_len);
uint8_t session = g_echo_session++;
processing = true;
power_button_suspend(true);
@@ -801,7 +807,7 @@ static int cmd_maa(const uint8_t *data, uint8_t data_len)
{
for (uint8_t ch = 0; ch < PIEZO_NUM_CHANNELS; ch++)
{
send_response_echo(piezo_channels[ch], piezo_config_get()->samples);
send_response_echo(session, ch, piezo_channels[ch], piezo_config_get()->samples);
}
}
@@ -822,6 +828,8 @@ static int cmd_mbb(const uint8_t *data, uint8_t data_len)
ARG_UNUSED(data);
ARG_UNUSED(data_len);
uint8_t session = g_echo_session++;
int16_t accel[3];
int16_t gyro[3];
@@ -892,7 +900,7 @@ static int cmd_mbb(const uint8_t *data, uint8_t data_len)
{
/* reb: 채널별 raw echo 파형 */
DBG_PRINTF("[MBB] tx reb ch=%d\r\n", ch);
send_response_echo(piezo_channels[ch], piezo_config_get()->samples);
send_response_echo(session, ch, piezo_channels[ch], piezo_config_get()->samples);
}
}