Rewrite the M1 instruction to detect the status flag or timeout and send normal data and read error response packets respectively

This commit is contained in:
2025-08-19 23:59:10 +08:00
parent 9ce0323afe
commit 70a6311425

View File

@@ -255,22 +255,34 @@ void handle_command(const uint8_t *frame, uint8_t len) {
// 仅基础命令,如 M1, M2, M3 // 仅基础命令,如 M1, M2, M3
switch (base_cmd) { switch (base_cmd) {
case 1u: // M1: enable sensor report case 1u: // M1: enable sensor report
// g_ultrasonic_measure_done = false;
gpio_bit_toggle(GPIOA, GPIO_PIN_0); gpio_bit_toggle(GPIOA, GPIO_PIN_0);
// 启动超声波PWM发送
ultrasonic_pwm_out_cycles(); ultrasonic_pwm_out_cycles();
delay_ms(2); // TODO: 模拟超声结果等待延时 // 等待超声测量完成最多等待1ms (100次 * 10us)
// PWM发送约需16.7us (5周期 × 3.33us),超时时间充足
uint16_t timeout_count = 0;
const uint16_t max_timeout = 100;
while (!g_ultrasonic_measure_done && timeout_count < max_timeout) {
delay_10us(1); // 延时 10us
timeout_count++;
}
gpio_bit_toggle(GPIOA, GPIO_PIN_0); gpio_bit_toggle(GPIOA, GPIO_PIN_0);
// g_ultrasonic_measure_done = false; // 根据等待结果发送不同的响应
send_response(RESP_TYPE_OK, s_report_status_err, sizeof(s_report_status_err)); if (g_ultrasonic_measure_done) {
// 测量完成,发送正常响应
send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok));
} else {
// 超时发送读取错误包理论上不应该发生因为PWM只需16.7us
static const uint8_t timeout_error_data[] = { 0xFF, 0xFF, 0xFF, 0xFF };
send_response(RESP_TYPE_OK, timeout_error_data, sizeof(timeout_error_data));
}
return; return;
case 2u: // M2: disable sensor report case 2u: // M2: disable sensor report
send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok));
return; return;