feat(motor_state): 支持多通道电机状态管理并添加推送周期动态调节功能
- 实现 node×channel 双键槽位管理,支持同一节点号在不同CAN通道独立缓存 - 扩展电机状态表容量从9个槽位到27个槽位(9节点×3通道) - 添加SPI命令子命令0xFE用于动态设置0xC5推送周期(50-5000ms) - 增加运行时可调推送周期功能,默认250ms,支持50ms-5s范围调节 - 更新CAN通道配置,启用CH1和CH2通道支持 - 版本号更新至1.5.4
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
* - 总开关:sys/config.h 中 CONFIG_MOTOR_STATE_ENABLE
|
||||
*
|
||||
* payload 格式 (每页):
|
||||
* [0] page 页号 (0/1)
|
||||
* [1] total_pages 总页数 (2)
|
||||
* [0] page 页号 (0..kMotorTotalPages-1)
|
||||
* [1] total_pages 总页数 (6,27 槽 = 9 node × 3 ch)
|
||||
* [2] entry_count 本页有效电机数
|
||||
* [3] active_count 全局在线电机数
|
||||
* [4..] 每个 entry 44B:
|
||||
@@ -47,6 +47,18 @@ public:
|
||||
|
||||
void handle(AppSpiCommand &bus, const SpiCommandContext &ctx) override
|
||||
{
|
||||
/* 子命令:payload[0]=0xFE 且 len>=3 → 设置 0xC5 推送周期(payload[1..2]=毫秒 LE)。
|
||||
* 有效页号仅 0..kMotorTotalPages-1,0xFE 作子操作码不冲突。回 ACK 携实际应用毫秒 LE。 */
|
||||
if (ctx.payload_len >= 3U && ctx.payload[0] == kMotorSubCmdSetPeriod) {
|
||||
const uint16_t ms = static_cast<uint16_t>(ctx.payload[1] | (ctx.payload[2] << 8));
|
||||
const uint16_t applied = MotorState::setPushPeriodMs(ms);
|
||||
uint8_t ack[2] = { static_cast<uint8_t>(applied & 0xFFU),
|
||||
static_cast<uint8_t>((applied >> 8) & 0xFFU) };
|
||||
bus.buildResponse(ctx.tx_buf, ctx.tx_buf_size, ctx.tx_len,
|
||||
SpiDefs::kRspAck, ack, sizeof(ack));
|
||||
return;
|
||||
}
|
||||
|
||||
/* 请求 payload[0] = page (可选, 默认 0) */
|
||||
const uint8_t page = (ctx.payload_len >= 1U) ? ctx.payload[0] : 0U;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user