QCanBusDevice 类
QCanBusDevice 类是 CAN 总线的接口类。更多...
头文件 | #include <QCanBusDevice> |
CMake | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake | QT += serialbus |
继承 | QObject |
公共类型
struct | Filter |
enum | CanBusDeviceState { UnconnectedState, ConnectingState, ConnectedState, ClosingState } |
enum | CanBusError { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, TimeoutError } |
enum class | CanBusStatus { Unknown, Good, Warning, Error, BusOff } |
enum | ConfigurationKey { RawFilterKey, ErrorFilterKey, LoopbackKey, ReceiveOwnKey, BitRateKey, …, UserKey } |
enum | Direction { Input, Output, AllDirections } |
flags | Directions |
公共函数
QCanBusDevice(QObject *parent = nullptr) | |
virtual QCanBusDevice::CanBusStatus | busStatus() |
void | clear(QCanBusDevice::Directions direction = Direction::AllDirections) |
QList<QCanBusDevice::ConfigurationKey> | configurationKeys() const |
QVariant | configurationParameter(QCanBusDevice::ConfigurationKey key) const |
bool | connectDevice() |
(since 6.2) virtual QCanBusDeviceInfo | deviceInfo() const |
void | disconnectDevice() |
QCanBusDevice::CanBusError | error() const |
QString | errorString() const |
qint64 | framesAvailable() const |
qint64 | framesToWrite() const |
virtual bool | hasBusStatus() const |
virtual QString | interpretErrorFrame(const QCanBusFrame &frame) = 0 |
QList<QCanBusFrame> | readAllFrames() |
QCanBusFrame | readFrame() |
virtual void | resetController() |
virtual void | setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value) |
QCanBusDevice::CanBusDeviceState | state() const |
virtual bool | waitForFramesReceived(int msecs) |
virtual bool | waitForFramesWritten(int msecs) |
virtual bool | writeFrame(const QCanBusFrame &frame) = 0 |
信号
void | errorOccurred(QCanBusDevice::CanBusError) |
void | framesReceived() |
void | framesWritten(qint64 framesCount) |
void | stateChanged(QCanBusDevice::CanBusDeviceState state) |
受保护的函数
void | clearError() |
virtual void | close() = 0 |
QCanBusFrame | dequeueOutgoingFrame() |
void | enqueueOutgoingFrame(const QCanBusFrame &newFrame) |
void | enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames) |
bool | hasOutgoingFrames() const |
virtual bool | open() = 0 |
void | setError(const QString &errorText, QCanBusDevice::CanBusError errorId) |
void | setState(QCanBusDevice::CanBusDeviceState newState) |
成员类型文档
enum QCanBusDevice::CanBusDeviceState
此枚举描述了所有可能的设备状态。
常量 | 值 | 描述 |
---|---|---|
QCanBusDevice::UnconnectedState | 0 | 设备已断开连接。 |
QCanBusDevice::ConnectingState | 1 | 设备正在连接。 |
QCanBusDevice::ConnectedState | 2 | 设备连接到CAN总线。 |
QCanBusDevice::ClosingState | 3 | 设备正在关闭。 |
enum QCanBusDevice::CanBusError
此枚举描述了所有可能的错误条件。
常量 | 值 | 描述 |
---|---|---|
QCanBusDevice::NoError | 0 | 未发生错误。 |
QCanBusDevice::ReadError | 1 | 在读取操作期间发生错误。 |
QCanBusDevice::WriteError | 2 | 在写入操作期间发生错误。 |
QCanBusDevice::ConnectionError | 3 | 尝试打开插件时发生错误。 |
QCanBusDevice::ConfigurationError | 4 | 尝试设置配置参数时发生错误。 |
QCanBusDevice::UnknownError | 5 | 发生未知错误。 |
QCanBusDevice::OperationError | 6 | 在设备处于不允许执行操作的状态时尝试操作。此枚举自Qt 5.14引入。 |
QCanBusDevice::TimeoutError | 7 | 等待写入或接收帧时发生超时。此枚举自Qt 5.14引入。 |
enum class QCanBusDevice::CanBusStatus
此枚举描述了可能的CAN总线状态值。
常量 | 值 | 描述 |
---|---|---|
QCanBusDevice::CanBusStatus::Unknown | 0 | CAN总线状态未知(例如,不受CAN插件支持)。 |
QCanBusDevice::CanBusStatus::Good | 1 | CAN控制器完全正常运行。 |
QCanBusDevice::CanBusStatus::Warning | 2 | CAN控制器处于警告状态。 |
QCanBusDevice::CanBusStatus::Error | 3 | CAN控制器处于错误状态(不再发送CAN帧)。 |
QCanBusDevice::CanBusStatus::BusOff | 4 | CAN控制器处于总线离线状态(已从CAN总线断开)。 |
enum QCanBusDevice::ConfigurationKey
此枚举描述了CAN总线连接的可能配置选项。
常量 | 值 | 描述 |
---|---|---|
QCanBusDevice::RawFilterKey | 0 | 此配置确定当前设备接受的CAN总线帧的类型。预期值是QList 。传递空列表会清除所有之前设置的过滤器,包括默认过滤器。有关更多详细信息,请参阅QCanBusDevice::Filter。 |
QCanBusDevice::ErrorFilterKey | 1 | 该键定义应通过当前连接转发哪种错误类型。关联的值应为QCanBusFrame::FrameErrors类型。 |
QCanBusDevice::LoopbackKey | 2 | 该键定义CAN总线设备是否应在环回模式下运行。环回意味着,每当在CAN总线上传输CAN帧时,此帧的本地回声将发送到连接到此CAN设备的所有应用程序。此键的预期值为bool 。 |
QCanBusDevice::ReceiveOwnKey | 3 | 该键定义此CAN设备是否接收其自己的发送帧。这可以用于检查传输是否成功。此键的预期值为bool 。 |
QCanBusDevice::BitRateKey | 4 | 该键定义每秒的CAN比特率。使用CAN FD时,如果QCanBusFrame::hasBitrateSwitch()被设置,则可以以更高的数据比特率传输数据负载。在这种情况下,QCanBusDevice::BitRateKey 仅用于CAN ID仲裁阶段。另请参阅QCanBusDevice::DataBitRateKey |
QCanBusDevice::CanFdKey | 5 | 该键定义是否启用发送和接收CAN FD帧。此键的预期值为bool 。 |
QCanBusDevice::DataBitRateKey | 6 | 该键定义CAN FD数据负载比特率。CAN FD允许在以正常比特率完成仲裁阶段后,使用QCanBusFrame::hasBitrateSwitch()标记以更高数据比特率传输帧的数据负载。此枚举值自Qt 5.9引入。另请参阅QCanBusDevice::BitRateKey |
QCanBusDevice::ProtocolKey | 7 | 该键允许指定其他协议。目前,此参数只能在SocketCAN插件中设置和使用。此枚举值自Qt 5.14引入。 |
QCanBusDevice::UserKey | 30 | 该键定义自定义键的起始范围。它的最常见用途是允许平台特定的配置选项。 |
另请参阅 configurationParameter。
枚举 QCanBusDevice::Direction
标志 QCanBusDevice::Directions
此枚举描述可能的数据传输方向。
常量 | 值 | 描述 |
---|---|---|
QCanBusDevice::Input | 1 | 输入方向。 |
QCanBusDevice::Output | 2 | 输出方向。 |
QCanBusDevice::AllDirections | 输入 | 输出 | 两个方向,输入和输出。 |
Directions类型是QFlags<Direction>的typedef。它存储Direction值的一个或操作。
成员函数文档
[显式]
QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)
使用指定的parent构建一个串行总线设备。
[虚拟]
QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()
返回当前的CAN总线状态。如果无法请求状态,则返回QCanBusDevice::UnknownStatus。
注意:此函数可能在所有CAN插件中都没有实现。请参阅插件的帮助页面以获取更多信息。可以使用hasBusStatus()函数在运行时检查所使用的CAN插件是否支持请求CAN总线状态。
另请参阅 hasBusStatus()和resetController。
void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)
根据direction清除设备的输入或输出缓冲区。
此函数只作用于QCanBusDevice缓冲区。已经写入CAN驱动程序或CAN硬件层的帧,或者尚未从这些层读取的帧,不会被此函数清除。
注意:仅对缓冲设备而言,清除输出缓冲区是可能的。
另请参阅framesAvailable()、readFrame()、framesToWrite()和writeFrame()。
[protected]
void QCanBusDevice::clearError()
清除最后一个设备错误的错误ID和人类可读的描述。
CAN总线实现必须使用此函数来更新设备的错误状态。
另请参阅error()、errorOccurred()和setError()。
[pure virtual protected]
void QCanBusDevice::close()
此函数负责关闭CAN总线连接。实现必须确保实例的state()被设置为QCanBusDevice::UnconnectedState。
此函数最重要的任务是关闭到CAN设备的套接字并调用QCanBusDevice::setState()。
另请参阅disconnectDevice()。
QList<QCanBusDevice::ConfigurationKey> QCanBusDevice::configurationKeys() const
返回CAN总线连接使用的键列表。
键的意义等同于ConfigurationKey。如果一个键没有明确列出,则使用平台针对相关键的默认设置。
QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const
返回分配给ConfigurationKey key的当前值;否则返回无效的QVariant。
另请参阅setConfigurationParameter()和configurationKeys()。
bool QCanBusDevice::connectDevice()
将设备连接到CAN总线。成功则返回true
,否则返回false
。
此函数在其实现中调用open()。
另请参阅disconnectDevice()。
[protected]
QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()
从内部出站帧列表返回下一个QCanBusFrame;否则返回无效的QCanBusFrame。返回的帧从内部列表中删除。
[virtual, since 6.2]
QCanBusDeviceInfo QCanBusDevice::deviceInfo() const
返回当前 QCanBusDeviceInfo 对象。如果没有在 QCanBusDevice 的子类中实现该函数,将返回默认构造的对象。
此函数自 Qt 6.2 版本引入。
void QCanBusDevice::disconnectDevice()
断开设备与 CAN 总线的连接。
此函数的实现部分包含调用 close
注意:仅当 connectDevice() 返回 true
时才应调用此函数。
另请参阅:connectDevice()。
[protected]
void QCanBusDevice::enqueueOutgoingFrame(const QCanBusFrame &newFrame)
将 newFrame 添加到内部发送帧列表,该列表可以通过 writeFrame() 访问。
子类必须在写入新帧时调用此函数。
[protected]
void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
将 newFrames 添加到内部帧列表,该列表可以通过 readFrame() 访问,并触发 framesReceived() 信号。
子类必须在接收到帧时调用此函数。
QCanBusDevice::CanBusError QCanBusDevice::error() const
返回最后一次发生的错误。错误值始终设置为最后一次发生的错误,并且永远不会重置。
另请参阅:setError() 和 errorString()。
[signal]
void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)
当发生错误时发出此信号。
QString QCanBusDevice::errorString() const
返回最后一次设备错误发生的人阅读描述。
另请参阅:error()。
qint64 QCanBusDevice::framesAvailable() const
返回可用帧的数量。如果没有可用的帧,则此函数返回 0。
另请参阅:clear(),readFrame() 和 readAllFrames()。
[signal]
void QCanBusDevice::framesReceived()
当接收到一个或多个帧时发出此信号。应使用 readFrame() 和 framesAvailable() 来读取帧。
qint64 QCanBusDevice::framesToWrite() const
对于缓冲设备,此函数返回等待写入的帧数。对于非缓冲设备,此函数总是返回零。
注意:在CAN驱动程序和CAN硬件层中可能存在额外的缓冲。因此,如果此函数返回零,并不意味着所有CAN帧都已写入到CAN总线上。
另请参阅:clear() 和 writeFrame()。
[信号]
void QCanBusDevice::framesWritten(qint64 framesCount)
每当帧负载被写入到CAN总线上时,就会发出此信号。将framesCount参数设置为在此负载中写入的帧数。
[虚函数]
bool QCanBusDevice::hasBusStatus() const
如果CAN插件支持请求CAN总线状态,则返回true。
另请参阅:busStatus()。
[保护]
bool QCanBusDevice::hasOutgoingFrames() const
如果内部传出帧列表不为空,则返回true
;否则返回false
。
[纯虚函数]
QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)
将frame 解释为错误帧并返回错误的人类可读描述。
如果frame 不是错误帧,则返回的字符串为空。
[纯虚保护]
bool QCanBusDevice::open()
connectDevice 调用此函数。子类必须提供一个实现,如果CAN总线连接已建立,则返回true
;否则返回false
。在进入此函数之前,QCanBusDevice 实现确保设备的状态设置为QCanBusDevice::ConnectingState。
实现必须确保在成功时设置实例的state() 为QCanBusDevice::ConnectedState;否则设置为QCanBusDevice::UnconnectedState。必须使用setState() 来设置新的设备状态。
自定义实现负责打开套接字,实例化可能需要的QSocketNotifier,并应用自定义和默认的QCanBusDevice::configurationParameter。
另请参阅:connectDevice()。
QList<QCanBusFrame> QCanBusDevice::readAllFrames()
返回队列中的所有 QCanBusFrame;否则返回一个空的QList。返回的帧将从队列中移除。
队列按照FIFO原则操作。
另请参阅:clear(),framesAvailable(),和 readFrame()。
QCanBusFrame QCanBusDevice::readFrame()
从队列中返回下一个QCanBusFrame;否则返回一个空的QCanBusFrame。返回的帧将从队列中移除。
队列按照FIFO原则操作。
另请参阅clear()、framesAvailable()和readAllFrames。
[virtual]
void QCanBusDevice::resetController()
执行CAN控制器重置以释放CAN控制器从总线关闭状态,如果可能的话。
注意:CAN控制器重置会干扰正在进行的通信,并可能需要一秒钟的时间才能完成。只有调用此函数来从总线错误中恢复。
注意:此功能可能不是所有CAN插件都实现。请参阅插件帮助页面以获取更多信息。
另请参阅:busStatus()。
[virtual]
void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
将CAN总线连接的配置参数key设置为value。可能的键由ConfigurationKey表示。
可以通过设置无效的QVariant来取消设置参数。取消设置参数意味着将配置重置为其默认设置。
注意:在大多数情况下,配置更改仅在重新连接后生效。
另请参阅 configurationParameter。
[protected]
void QCanBusDevice::setError(const QString &errorText, QCanBusDevice::CanBusError errorId)
将最后设备错误的可读描述设置为errorText。 errorId对错误类型进行了分类。
CAN总线实现必须使用此函数来更新设备的错误状态。
另请参阅error、errorOccurred和clearError。
[protected]
void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)
将设备的状态设置为newState。CAN总线实现必须使用此函数来更新设备状态。
另请参阅state。
QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const
返回设备的当前状态。
另请参阅setState()和stateChanged。
[signal]
void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)
每当设备状态改变时,都会发出此信号。新状态由state表示。
[virtual]
bool QCanBusDevice::waitForFramesReceived(int msecs)
该函数将挂起,直到有新的帧可供读取并且已发出framesReceived() 信号,或者直到 msecs 毫秒已经过去。如果 msecs 是 -1
,则此函数将不会超时。
如果存在可供读取的新帧并且已发出 framesReceived() 信号,则返回 true
;否则返回 false
(如果操作超时或发生错误)。
注意:此函数将启动本地事件循环。这可能导致在执行此函数作用域时其他应用槽被调用。为了避免问题,此类的信号不应连接到槽。同样,此函数绝不应在响应 framesReceived() 或 errorOccurred() 信号时调用。
另请参阅:waitForFramesWritten()。
[虚拟]
bool QCanBusDevice::waitForFramesWritten(int msecs)
对于缓冲设备,此函数会等待直到所有缓冲帧都被写入到设备并且已发出 framesWritten() 信号,或者直到 msecs 毫秒已过。如果 msecs 是 -1,该函数将不会超时。对于非缓冲设备,它将立即返回 false
,因为 writeFrame() 不需要写入缓冲区。
如果已发出 framesWritten() 信号,则返回 true
;否则返回 false
(即操作超时或发生错误)。
注意:此函数将启动本地事件循环。这可能导致在执行此函数作用域时其他应用槽被调用。为了避免问题,此类的信号不应连接到槽。同样,此函数绝不应在响应 framesWritten() 或 errorOccurred() 信号时调用。
另请参阅:waitForFramesReceived()。
[纯虚]
bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)
将 frame 写入 CAN 总线并在成功时返回 true
;否则返回 false
。
在某些平台上,帧可能会放入队列中,且返回值可能只表示成功插入队列中。实际的帧将在之后发送。因此,framesWritten() 信号是帧已传递到传输层的确凿证据。如果发生错误,则发出 errorOccurred()。
根据 CAN 总线规范,远程传输请求 (RTR) 类型的帧没有有效载荷,但长度在 0 到 8(包括)之间。此长度表示远程方期望的有效载荷长度。因此,在发送 RTR 帧时,可能仍然需要在 frame 上设置任意有效载荷。任意有效载荷的长度是设置 RTR 帧大小的期望值。
另请参阅:QCanBusFrame::setPayload()。
© 2024 Qt公司有限公司。本文件中包含的文档贡献归各自所有者所有。提供的文档根据自由软件基金会发布的GNU自由文档许可证1.3版条款进行许可。Qt及其各自的标志是芬兰及/或全球其他国家的The Qt Company Ltd的商标。所有其他商标均归各自所有者所有。