15#include "write_queue.hpp"
17namespace roboctrl::io{
19using can_id_type = uint32_t;
21inline constexpr uint64_t can_write_key(can_id_type
id,
size_t payload_size) {
22 return uint64_t{
id} | (uint64_t{payload_size} << 32);
39 using key_type = std::string;
42 const std::string& key()
const{
return name;}
45 using key_type = std::uint32_t;
50 can(
const info_type& info);
74 asio::posix::stream_descriptor stream_;
77 std::array<std::byte,20> buffer_;
78 std::string interface_name_;
79 bool started_ {
false};
82static_assert(keyed_io<can>);
std::string desc() const
返回包含逻辑名称和 Linux 接口名的可读描述。
awaitable< void > task()
接收循环任务。
void start()
启动接收协程;重复调用不会重复启动。
awaitable< void > send(can_id_type id, byte_span data)
发送带 CAN ID 的帧。
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
std::span< const std::byte > byte_span
只读 byte span。
asio::awaitable< T > awaitable
协程任务类型。
std::string interface_name
实际 SocketCAN 接口名,例如 can0 或 CAN_CHASSIS。
std::string name
项目内稳定名称,供电机等其他组件引用。