libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::FDCAN Class Referenceabstract

FDCAN 通信接口,扩展 CAN 功能,支持灵活数据速率(FD)CAN 消息 (FDCAN communication interface that extends CAN functionality by supporting Flexible Data-Rate (FD) CAN messages). More...

#include <can.hpp>

Inheritance diagram for LibXR::FDCAN:
[legend]
Collaboration diagram for LibXR::FDCAN:
[legend]

Data Structures

struct  Filter
 

Public Types

using CallbackFD = LibXR::Callback<const FDPack &>
 
enum class  FilterMode
 
- Public Types inherited from LibXR::CAN
enum class  Type : uint8_t {
  STANDARD = 0 , EXTENDED = 1 , REMOTE_STANDARD = 2 , REMOTE_EXTENDED = 3 ,
  TYPE_NUM
}
 CAN 消息类型 (Enumeration of CAN message types). More...
 
enum class  FilterMode : uint8_t { ID_MASK = 0 , ID_RANGE = 1 }
 
using Callback = LibXR::Callback<const ClassicPack &>
 

Public Member Functions

 FDCAN ()
 构造 FDCAN 对象,可指定主题名称和通信域 (Constructs an FDCAN object with optional topic names and domain).
 
struct __attribute__ ((packed))
 FD CAN 消息结构 (Structure representing an FD CAN message).
 
void Register (CallbackFD cb, Type type, FilterMode mode=FilterMode::ID_RANGE, uint32_t start_id_mask=0, uint32_t end_id_mask=UINT32_MAX)
 注册回调函数 Registers a callback function
 
virtual ErrorCode AddMessage (const FDPack &pack)=0
 添加 FD CAN 消息到系统 (Adds an FD CAN message to the system).
 
virtual ErrorCode AddMessage (const ClassicPack &pack)=0
 添加 CAN 消息到系统 (Adds a CAN message to the system).
 
void OnMessage (const ClassicPack &pack, bool in_isr)
 
- Public Member Functions inherited from LibXR::CAN
 CAN ()
 构造 CAN 对象,可指定主题名称和通信域 (Constructs a CAN object with an optional topic name and domain).
 
struct __attribute__ ((packed))
 经典 CAN 消息结构 (Structure representing a classic CAN message).
 
void Register (Callback cb, Type type, FilterMode mode=FilterMode::ID_RANGE, uint32_t start_id_mask=0, uint32_t end_id_match=UINT32_MAX)
 注册回调函数 Registers a callback function
 

Data Fields

 FDPack
 
- Data Fields inherited from LibXR::CAN
 ClassicPack
 

Protected Member Functions

void OnMessage (const FDPack &pack, bool in_isr)
 
- Protected Member Functions inherited from LibXR::CAN
void OnMessage (const ClassicPack &pack, bool in_isr)
 

Private Attributes

LockFreeList subscriber_list_fd_ [static_cast< uint8_t >(Type::TYPE_NUM)]
 

Detailed Description

FDCAN 通信接口,扩展 CAN 功能,支持灵活数据速率(FD)CAN 消息 (FDCAN communication interface that extends CAN functionality by supporting Flexible Data-Rate (FD) CAN messages).

Definition at line 125 of file can.hpp.

Member Typedef Documentation

◆ CallbackFD

using LibXR::FDCAN::CallbackFD = LibXR::Callback<const FDPack &>

Definition at line 152 of file can.hpp.

Member Enumeration Documentation

◆ FilterMode

enum class LibXR::CAN::FilterMode : uint8_t
strong

Definition at line 48 of file can.hpp.

49 {
50 ID_MASK = 0,
51 ID_RANGE = 1
52 };

Constructor & Destructor Documentation

◆ FDCAN()

LibXR::FDCAN::FDCAN ( )
inline

构造 FDCAN 对象,可指定主题名称和通信域 (Constructs an FDCAN object with optional topic names and domain).

Parameters
name_tp经典 CAN 消息的主题名称 (Topic name for classic CAN messages).
name_fd_tpFD CAN 消息的主题名称 (Topic name for FD CAN messages).
domain可选的通信域 (Optional domain for message communication).

Definition at line 135 of file can.hpp.

135{}

Member Function Documentation

◆ __attribute__()

struct LibXR::FDCAN::__attribute__ ( (packed) )
inline

FD CAN 消息结构 (Structure representing an FD CAN message).

< 消息 ID (Message ID).

< 消息类型 (Message type).

< 数据长度,最大 64 字节 (Data length, up to 64 bytes).

< 数据载荷 (Data payload).

Definition at line 135 of file can.hpp.

141 {
142 uint32_t id;
143 Type type;
144 uint8_t len;
145 uint8_t data[64];
146 } FDPack;
Type
CAN 消息类型 (Enumeration of CAN message types).
Definition can.hpp:20

◆ AddMessage() [1/2]

virtual ErrorCode LibXR::CAN::AddMessage ( const ClassicPack & pack)
virtual

添加 CAN 消息到系统 (Adds a CAN message to the system).

Parameters
pack经典 CAN 消息包 (The classic CAN message packet).
Returns
操作结果 (ErrorCode indicating success or failure).

Implements LibXR::CAN.

Reimplemented in LibXR::STM32CANFD.

◆ AddMessage() [2/2]

virtual ErrorCode LibXR::FDCAN::AddMessage ( const FDPack & pack)
pure virtual

添加 FD CAN 消息到系统 (Adds an FD CAN message to the system).

Parameters
packFD CAN 消息包 (The FD CAN message packet).
Returns
操作结果 (ErrorCode indicating success or failure).

Implemented in LibXR::STM32CANFD.

◆ OnMessage() [1/2]

void LibXR::CAN::OnMessage ( const ClassicPack & pack,
bool in_isr )
inline

Definition at line 90 of file can.hpp.

91 {
92 ASSERT(pack.type < Type::TYPE_NUM);
93 subscriber_list_[static_cast<uint8_t>(pack.type)].Foreach<Filter>(
94 [&](Filter &node)
95 {
96 switch (node.mode)
97 {
98 case FilterMode::ID_MASK:
99 if ((pack.id & node.start_id_mask) == node.end_id_match)
100 {
101 node.cb.Run(in_isr, pack);
102 }
103 break;
104 case FilterMode::ID_RANGE:
105 if (pack.id >= node.start_id_mask && pack.id <= node.end_id_match)
106 {
107 node.cb.Run(in_isr, pack);
108 }
109 break;
110 }
111
112 return ErrorCode::OK;
113 });
114 }

◆ OnMessage() [2/2]

void LibXR::FDCAN::OnMessage ( const FDPack & pack,
bool in_isr )
inlineprotected

Definition at line 189 of file can.hpp.

190 {
191 ASSERT(pack.type < Type::TYPE_NUM);
192 subscriber_list_fd_[static_cast<uint8_t>(pack.type)].Foreach<Filter>(
193 [&](Filter &node)
194 {
195 if (pack.id >= node.start_id_mask && pack.id <= node.end_id_mask)
196 {
197 node.cb.Run(in_isr, pack);
198 }
199
200 return ErrorCode::OK;
201 });
202 }

◆ Register()

void LibXR::FDCAN::Register ( CallbackFD cb,
Type type,
FilterMode mode = FilterMode::ID_RANGE,
uint32_t start_id_mask = 0,
uint32_t end_id_mask = UINT32_MAX )
inline

注册回调函数 Registers a callback function

Parameters
cb回调函数 Callback function
type帧类型 Frame type
mode过滤器模式 Filter mode
start_id_mask起始ID/掩码 Starting ID/mask
end_id_match结束ID/匹配 Ending ID/match

Definition at line 172 of file can.hpp.

174 {
175 ASSERT(type < Type::TYPE_NUM);
176 auto node = new (std::align_val_t(LIBXR_CACHE_LINE_SIZE))
177 LockFreeList::Node<Filter>({mode, start_id_mask, end_id_mask, type, cb});
178 subscriber_list_fd_[static_cast<uint8_t>(type)].Add(*node);
179 }

Field Documentation

◆ FDPack

LibXR::FDCAN::FDPack

Definition at line 146 of file can.hpp.

◆ subscriber_list_fd_

LockFreeList LibXR::FDCAN::subscriber_list_fd_[static_cast< uint8_t >(Type::TYPE_NUM)]
private

Definition at line 205 of file can.hpp.


The documentation for this class was generated from the following file: