IMU FIFO 샘플 대기 함수 추가

- 샘플 부족 방지 안전장치
This commit is contained in:
2026-07-15 15:45:08 +09:00
parent 4ed23a103c
commit 7cccee7cf2
3 changed files with 51 additions and 1 deletions
+7 -1
View File
@@ -139,7 +139,13 @@ int cmd_mtb(const uint8_t *data, uint8_t data_len)
{
if (fifo_started)
{
int imu_ret = imu_fifo_read_latest(tx_rim_samples, IMU_FIFO_RIM_TARGET_SAMPLES, &rim_count);
imu_ret = imu_fifo_wait_samples(IMU_FIFO_RIM_TARGET_SAMPLES, 500U);
if (imu_ret != 0)
{
DBG_PRINTF("[MTB] fifo wait ret=%d\r\n", imu_ret);
}
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);
+37
View File
@@ -615,6 +615,43 @@ int imu_fifo_start(void)
return 0;
}
int imu_fifo_wait_samples(uint16_t target_samples, uint32_t timeout_ms)
{
uint32_t waited_ms = 0U;
const uint32_t poll_ms = 10U;
if (target_samples == 0U)
{
return 0;
}
if (!fifo_active)
{
return -EALREADY;
}
while (waited_ms <= timeout_ms)
{
uint16_t record_count = 0U;
int ret = imu_fifo_read_count(&record_count);
if (ret)
{
return ret;
}
if (record_count >= target_samples)
{
return 0;
}
k_msleep(poll_ms);
waited_ms += poll_ms;
}
return -ETIMEDOUT;
}
int imu_fifo_read_latest(uint8_t *sample_bytes,
uint16_t max_samples,
uint16_t *out_count)
+7
View File
@@ -65,6 +65,13 @@ int imu_read_temperature_cdeg(int16_t *temp_cdeg);
*/
int imu_fifo_start(void);
/**
* @brief Wait until the running FIFO has at least target_samples records.
*
* @return 0 if the target is reached, -ETIMEDOUT on timeout, or a negative error.
*/
int imu_fifo_wait_samples(uint16_t target_samples, uint32_t timeout_ms);
/**
* @brief FIFO에서
*