6namespace LibXR::USB::GsUsb
13constexpr uint32_t CAN_EFF_FLAG = 0x80000000U;
18constexpr uint32_t CAN_RTR_FLAG = 0x40000000U;
23constexpr uint32_t CAN_ERR_FLAG = 0x20000000U;
28constexpr uint32_t CAN_SFF_MASK = 0x000007FFU;
33constexpr uint32_t CAN_EFF_MASK = 0x1FFFFFFFU;
38constexpr uint8_t CAN_ERR_DLC = 8;
43constexpr uint32_t CAN_ERR_TX_TIMEOUT = 0x00000001U;
45constexpr uint32_t CAN_ERR_LOSTARB = 0x00000002U;
47constexpr uint32_t CAN_ERR_CRTL = 0x00000004U;
49constexpr uint32_t CAN_ERR_PROT = 0x00000008U;
51constexpr uint32_t CAN_ERR_TRX = 0x00000010U;
53constexpr uint32_t CAN_ERR_ACK = 0x00000020U;
55constexpr uint32_t CAN_ERR_BUSOFF = 0x00000040U;
57constexpr uint32_t CAN_ERR_BUSERROR = 0x00000080U;
59constexpr uint32_t CAN_ERR_RESTARTED = 0x00000100U;
64constexpr uint8_t CAN_ERR_LOSTARB_UNSPEC = 0x00;
66constexpr uint8_t CAN_ERR_CRTL_UNSPEC = 0x00;
68constexpr uint8_t CAN_ERR_PROT_UNSPEC = 0x00;
70constexpr uint8_t CAN_ERR_PROT_LOC_UNSPEC = 0x00;
72constexpr uint8_t CAN_ERR_TRX_UNSPEC = 0x00;
80enum class BReq : uint8_t
104enum class CanMode : uint32_t
113enum class CanState : uint32_t
126enum class IdentifyMode : uint32_t
135enum class TerminationState : uint32_t
274constexpr uint32_t GSCAN_MODE_NORMAL = 0;
276constexpr uint32_t GSCAN_MODE_LISTEN_ONLY = (1u << 0);
278constexpr uint32_t GSCAN_MODE_LOOP_BACK = (1u << 1);
280constexpr uint32_t GSCAN_MODE_TRIPLE_SAMPLE = (1u << 2);
282constexpr uint32_t GSCAN_MODE_ONE_SHOT = (1u << 3);
284constexpr uint32_t GSCAN_MODE_HW_TIMESTAMP = (1u << 4);
286constexpr uint32_t GSCAN_MODE_PAD_PKTS_TO_MAX_PKT_SIZE = (1u << 7);
288constexpr uint32_t GSCAN_MODE_FD = (1u << 8);
290constexpr uint32_t GSCAN_MODE_BERR_REPORTING = (1u << 12);
295constexpr uint32_t CAN_FEAT_LISTEN_ONLY = (1u << 0);
297constexpr uint32_t CAN_FEAT_LOOP_BACK = (1u << 1);
299constexpr uint32_t CAN_FEAT_TRIPLE_SAMPLE = (1u << 2);
301constexpr uint32_t CAN_FEAT_ONE_SHOT = (1u << 3);
303constexpr uint32_t CAN_FEAT_HW_TIMESTAMP = (1u << 4);
305constexpr uint32_t CAN_FEAT_IDENTIFY = (1u << 5);
307constexpr uint32_t CAN_FEAT_USER_ID = (1u << 6);
309constexpr uint32_t CAN_FEAT_PAD_PKTS_TO_MAX_PKT_SIZE = (1u << 7);
311constexpr uint32_t CAN_FEAT_FD = (1u << 8);
313constexpr uint32_t CAN_FEAT_REQ_USB_QUIRK_LPC546XX = (1u << 9);
315constexpr uint32_t CAN_FEAT_BT_CONST_EXT = (1u << 10);
317constexpr uint32_t CAN_FEAT_TERMINATION = (1u << 11);
319constexpr uint32_t CAN_FEAT_BERR_REPORTING = (1u << 12);
321constexpr uint32_t CAN_FEAT_GET_STATE = (1u << 13);
326constexpr uint8_t CAN_FLAG_OVERFLOW = (1u << 0);
328constexpr uint8_t CAN_FLAG_FD = (1u << 1);
330constexpr uint8_t CAN_FLAG_BRS = (1u << 2);
332constexpr uint8_t CAN_FLAG_ESI = (1u << 3);
335constexpr uint32_t ECHO_ID_INVALID = 0xFFFFFFFFu;
338constexpr std::size_t HOST_FRAME_CLASSIC_SIZE =
339 sizeof(uint32_t) +
sizeof(uint32_t) + 4 + 8;
341constexpr std::size_t HOST_FRAME_CLASSIC_TS_SIZE =
342 HOST_FRAME_CLASSIC_SIZE +
sizeof(uint32_t);
345constexpr std::size_t HOST_FRAME_FD_SIZE =
sizeof(uint32_t) +
sizeof(uint32_t) + 4 + 64;
347constexpr std::size_t HOST_FRAME_FD_TS_SIZE = HOST_FRAME_FD_SIZE +
sizeof(uint32_t);
比特定时常量范围 / Bit timing constant ranges
uint32_t tseg1_min
TSEG1 最小 / Min TSEG1.
uint32_t tseg2_min
TSEG2 最小 / Min TSEG2.
uint32_t brp_min
BRP 最小 / Min BRP.
uint32_t tseg2_max
TSEG2 最大 / Max TSEG2.
uint32_t brp_max
BRP 最大 / Max BRP.
uint32_t sjw_max
SJW 最大 / Max SJW.
uint32_t tseg1_max
TSEG1 最大 / Max TSEG1.
uint32_t brp_inc
BRP 步进 / BRP increment.
扩展比特定时能力(含 FD 数据相位) / Extended timing capabilities (with FD data phase)
CanBitTimingConst btc
仲裁相位 / Arbitration phase
CanBitTimingConst dbtc
数据相位 / Data phase
uint32_t feature
CAN_FEAT_*(含 FD) / CAN_FEAT_* (with FD)
uint32_t fclk_can
CAN 时钟 / CAN clock.
设备比特定时能力(经典/仲裁) / Device bit timing capabilities (classic/arbitration)
uint32_t fclk_can
CAN 时钟 / CAN clock.
uint32_t feature
CAN_FEAT_*.
CanBitTimingConst btc
定时常量 / Timing constants
比特定时参数 / Bit timing parameters
uint32_t prop_seg
PROP_SEG.
uint32_t phase_seg1
PHASE_SEG1.
uint32_t phase_seg2
PHASE_SEG2.
设备配置(per-device) / Device configuration (per-device)
uint32_t sw_version
软件版本 / Software version
uint8_t reserved2
保留 / Reserved
uint32_t hw_version
硬件版本 / Hardware version
uint8_t reserved3
保留 / Reserved
uint8_t icount
CAN 通道数 - 1 / CAN channel count minus 1.
uint8_t reserved1
保留 / Reserved
通道模式设置(per-channel) / Channel mode configuration (per-channel)
uint32_t flags
GS_CAN_MODE_*.
通道状态(per-channel) / Channel state (per-channel)
uint32_t rxerr
接收错误计数 / Receive error counter
uint32_t txerr
发送错误计数 / Transmit error counter
终端电阻控制 / Termination control
uint32_t state
TerminationState.
主机配置(字节序协商) / Host configuration (byte order negotiation)
USB HostFrame 最大布局结构 / USB HostFrame maximum-layout structure.
uint8_t flags
帧标志(GS_CAN_FLAG_*) / Frame flags (GS_CAN_FLAG_*)
uint32_t can_id
CAN ID(含 CAN_*_FLAG) / CAN ID (with CAN_*_FLAG)
uint32_t timestamp_us
时间戳(可选) / Timestamp (optional)
uint8_t data[64]
数据(classic 用前 8 字节) / Data (classic uses first 8 bytes)
uint8_t channel
通道号 / Channel index
uint8_t reserved
保留 / Reserved
uint32_t echo_id
回显 ID / Echo ID
uint32_t mode
IdentifyMode.