feat(can/ble): vehicle-triggered CAN speed control + BLE can_status notify
- app_header_init: detect vehicle(class=2) in print_yolo_result(),
send CAN speed=10 on detection, speed=240 on clear;
only triggers on state change, keepalive maintains cmd
- app_header_init: on speed state change, send BLE JSON
{response_type:can_status, content:{vehicle_detected, speed_cmd}}
- app_header_init: add #include can_bus.h / bt_uart.h
- event_recorder: wrap legacy MsgBroker IPC path in #if 0;
setSpeed now goes directly through can_bus_send_control_cmd()
This commit is contained in:
parent
f5ce719ea1
commit
118d0f4d93
@ -13,6 +13,8 @@
|
|||||||
#include "stdc_app.h"
|
#include "stdc_app.h"
|
||||||
#include "kdp2_host_stream.h"
|
#include "kdp2_host_stream.h"
|
||||||
#include "event_recorder.h"
|
#include "event_recorder.h"
|
||||||
|
#include "can_bus.h"
|
||||||
|
#include "bt_uart.h"
|
||||||
|
|
||||||
//#define ENABLE_DBG_LOG
|
//#define ENABLE_DBG_LOG
|
||||||
|
|
||||||
@ -189,6 +191,39 @@ static void print_yolo_result(kp_app_yolo_result_t *yolo_data)
|
|||||||
break; /* 找到一輛車就夠了 */
|
break; /* 找到一輛車就夠了 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── [CAN] vehicle speed control + BLE status notify ────────────
|
||||||
|
* 偵測到 vehicle(class=2):限速 10,並透過 BLE 通知目前 CAN 狀態。
|
||||||
|
* 無 vehicle:恢復正常速度 240,並通知解除。
|
||||||
|
* 只在狀態改變時呼叫,keepalive thread 會持續維持最新速度。
|
||||||
|
* ---------------------------------------------------------------- */
|
||||||
|
{
|
||||||
|
static int s_can_vehicle_detected = -1; /* -1 = 未初始化 */
|
||||||
|
int vehicle_now = (cur_level == 1) ? 1 : 0;
|
||||||
|
|
||||||
|
if (vehicle_now != s_can_vehicle_detected) {
|
||||||
|
uint8_t speed = vehicle_now ? 10 : 240;
|
||||||
|
|
||||||
|
/* 送 CAN 速度指令 */
|
||||||
|
can_bus_send_control_cmd(speed);
|
||||||
|
|
||||||
|
/* 透過 BLE 通知目前 CAN bus 狀態 */
|
||||||
|
{
|
||||||
|
char json[128];
|
||||||
|
snprintf(json, sizeof(json),
|
||||||
|
"{\"response_type\":\"can_status\","
|
||||||
|
"\"content\":{"
|
||||||
|
"\"vehicle_detected\":%d,"
|
||||||
|
"\"speed_cmd\":%u}}",
|
||||||
|
vehicle_now, (unsigned)speed);
|
||||||
|
bt_uart_send_json(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("[YOLO] CAN speed cmd: %u (%s)\n",
|
||||||
|
speed, vehicle_now ? "vehicle detected" : "clear");
|
||||||
|
s_can_vehicle_detected = vehicle_now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* 狀態有變化時,檢查 debounce */
|
/* 狀態有變化時,檢查 debounce */
|
||||||
if (cur_level != s_cw_level ||
|
if (cur_level != s_cw_level ||
|
||||||
strcmp(cur_type, s_cw_type) != 0)
|
strcmp(cur_type, s_cw_type) != 0)
|
||||||
|
|||||||
@ -55,8 +55,6 @@ static int msg_send(const char *fifo,
|
|||||||
unsigned int data_size,
|
unsigned int data_size,
|
||||||
int has_response)
|
int has_response)
|
||||||
{
|
{
|
||||||
MsgContext tMsgCtx;
|
|
||||||
|
|
||||||
/* Speed control has moved to direct CAN control frames.
|
/* Speed control has moved to direct CAN control frames.
|
||||||
* Avoid MsgBroker FIFO dependency (/tmp/canbus/c0/command.fifo). */
|
* Avoid MsgBroker FIFO dependency (/tmp/canbus/c0/command.fifo). */
|
||||||
if (cmd && strcmp(cmd, "setSpeed") == 0 && data && data_size >= 1) {
|
if (cmd && strcmp(cmd, "setSpeed") == 0 && data && data_size >= 1) {
|
||||||
@ -64,6 +62,12 @@ static int msg_send(const char *fifo,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* Legacy: IPC path via MsgBroker FIFO → separate CAN bus process.
|
||||||
|
* No longer used: all speed commands go through can_bus_send_control_cmd()
|
||||||
|
* above. Kept for reference in case other cmd types are needed later. */
|
||||||
|
MsgContext tMsgCtx;
|
||||||
|
|
||||||
if (!fifo || !host || !cmd)
|
if (!fifo || !host || !cmd)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -81,6 +85,12 @@ static int msg_send(const char *fifo,
|
|||||||
tMsgCtx.dwDataSize = data_size;
|
tMsgCtx.dwDataSize = data_size;
|
||||||
|
|
||||||
return MsgBroker_SendMsg(fifo, &tMsgCtx);
|
return MsgBroker_SendMsg(fifo, &tMsgCtx);
|
||||||
|
#else
|
||||||
|
(void)fifo;
|
||||||
|
(void)host;
|
||||||
|
(void)has_response;
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Config ──────────────────────────────────────────────────────────────── */
|
/* ── Config ──────────────────────────────────────────────────────────────── */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user