44 while (
auto msg = rx_queue_.pop()) {
45 if (0x201 <= msg->id && msg->id < 0x201 + 8) {
46 Params &motor = params_[msg->id - 0x201];
48 static_cast<int16_t
>(msg->data[0] << 8 | msg->data[1]);
49 if (motor.prev_position_) {
50 int16_t delta = position - *motor.prev_position_;
53 }
else if (delta < -4096) {
56 motor.position_ += delta;
58 motor.position_ = position;
60 motor.prev_position_ = position;
61 motor.rpm_ =
static_cast<int16_t
>(msg->data[2] << 8 | msg->data[3]);
63 static_cast<int16_t
>(msg->data[4] << 8 | msg->data[5]);
69 peripheral::CanMessage msg{};
73 for (
size_t i = 0; i < 4; ++i) {
74 msg.data[i * 2] = params_[i].current_ref_raw_ >> 8;
75 msg.data[i * 2 + 1] = params_[i].current_ref_raw_;
77 if (!can_.transmit(msg, 5)) {
82 for (
size_t i = 0; i < 4; ++i) {
83 msg.data[i * 2] = params_[i + 4].current_ref_raw_ >> 8;
84 msg.data[i * 2 + 1] = params_[i + 4].current_ref_raw_;
86 return can_.transmit(msg, 5);