#pragma once #include #include #include #include #include #include #include #include #include #include #include enum CANMode { CAN_MODE_CLASSIC = 0, CAN_MODE_FD = 1 }; class CANBus { public: explicit CANBus(const std::string& interface, int mode); ~CANBus(); int whichCAN(); bool send(uint16_t motor_id, const std::array& data); std::array recv(uint16_t& out_id, uint8_t& out_len); private: bool sendClassic(uint16_t motor_id, const std::array& data); bool sendFD(uint16_t motor_id, const std::array& data); struct can_frame recvClassic(); struct canfd_frame recvFD(); int sock_; int mode_; };