reb: 패킷에 채널 정보 추가
This commit is contained in:
+19
-11
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user