Класс QCanBusDevice
Класс QCanBusDevice является интерфейсным классом для шины CAN. Подробнее...
| Заголовок: | #include <QCanBusDevice> |
| qmake: | QT += serialbus |
| С момента: | Qt 5.8 |
| Наследует: | QObject |
Открытые типы
| Структура | Фильтр |
| Перечисление | Состояние устройства шины CAN { Отсоединённое состояние, Состояние подключения, Состояние подключения, Состояние закрытия } |
| Перечисление | Ошибка шины CAN { Нет ошибки, Ошибка чтения, Ошибка записи, Ошибка подключения, Ошибка конфигурации, …, Ошибка таймаута } |
| Перечисление | Статус шины CAN { Неизвестно, Хорошо, Предупреждение, Ошибка, BusOff } |
| Перечисление | Ключ конфигурации { Ключ фильтра Raw, Ключ фильтра Error, Ключ Loopback, Ключ ReceiveOwn, Ключ скорости передачи данных, …, Пользовательский ключ } |
| Перечисление | Направление { Вход, Выход, Все направления } |
| Флаги | Направления |
Открытые функции
| 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() |
| 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) |
Подробное описание
QCanBusDevice взаимодействует с плагином CAN, предоставляя пользователям удобный API. Плагин CAN должен быть указан во время создания объекта.
Документация по типам членов
перечисление QCanBusDevice::CanBusDeviceState
Это перечисление описывает все возможные состояния устройства.
| Константа | Значение | Описание |
|---|---|---|
QCanBusDevice::UnconnectedState |
0 |
Устройство отключено. |
QCanBusDevice::ConnectingState |
1 |
Устройство подключается. |
QCanBusDevice::ConnectedState |
2 |
Устройство подключено к шине CAN. |
QCanBusDevice::ClosingState |
3 |
Устройство закрывается. |
перечисление 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. |
[since 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 находится в состоянии Bus Off (отключен от шины CAN) |
Это перечисление было введено или изменено в Qt 5.14.
enum QCanBusDevice::ConfigurationKey
Это перечисление описывает возможные параметры конфигурации соединения CAN-шины.
| Константа | Значение | Описание |
|---|---|---|
QCanBusDevice::RawFilterKey |
0 |
Эта конфигурация определяет тип кадров CAN-шины, которые принимает текущее устройство. Ожидаемое значение — QList<QCanBusDevice::Filter>. Передача пустого списка очищает все ранее установленные фильтры, включая фильтры по умолчанию. Для получения дополнительной информации см. 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. См. также 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().
[since 5.12] enum QCanBusDevice::Directionflags QCanBusDevice::Directions
Это перечисление описывает возможные направления передачи данных.
| Константа | Значение | Описание |
|---|---|---|
QCanBusDevice::Input |
1 |
Входное направление. |
QCanBusDevice::Output |
2 |
Выходное направление. |
QCanBusDevice::AllDirections |
Input | Output |
Оба направления, входное и выходное. |
Это перечисление было введено или изменено в Qt 5.12.
Тип Directions является typedef для QFlags<Direction>. Он хранит комбинацию значений Direction с использованием оператора OR.
Описание функций-членов
QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)
Конструирует устройство последовательной шины с указанным parent.
[signal] void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)
Этот сигнал испускается при возникновении ошибки.
[signal] void QCanBusDevice::framesReceived()
Этот сигнал испускается, когда один или несколько кадров были получены. Кадры должны быть прочитаны с помощью readFrame() и framesAvailable().
[signal] void QCanBusDevice::framesWritten(qint64 framesCount)
Этот сигнал испускается каждый раз, когда полезная нагрузка кадров была записана в шину CAN. Аргумент framesCount устанавливается в количество кадров, которые были записаны в эту полезную нагрузку.
[signal] void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)
Этот сигнал испускается каждый раз, когда изменяется состояние устройства. Новое состояние представлено state.
См. также setState() и state().
[virtual, since 5.14] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()
Возвращает текущее состояние шины CAN. Если состояние запросить невозможно, возвращается QCanBusDevice::UnknownStatus.
Примечание: Эта функция может быть не реализована во всех плагинах CAN. Дополнительную информацию см. на страницах справки по плагинам. Функция hasBusStatus() может использоваться во время выполнения для проверки того, поддерживает ли используемый плагин CAN запрос состояния шины CAN.
Эта функция была введена в Qt 5.14.
См. также hasBusStatus() и resetController().
[since 5.12] void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)
Очищает входные или выходные буферы устройств в зависимости от direction.
Эта функция работает только с буферами QCanBusDevice. Кадры, которые уже записаны в драйвер CAN или на аппаратном уровне CAN, или которые еще не считаны с этих уровней, не очищаются этой функцией.
Примечание: Очистка выходных буферов возможна только для буферизованных устройств.
Эта функция была введена в Qt 5.12.
См. также framesAvailable(), readFrame(), framesToWrite() и writeFrame().
[protected, since 5.14] void QCanBusDevice::clearError()
Очищает идентификатор ошибки и удобочитаемое описание последней ошибки устройства.
Реализации CAN-шины должны использовать эту функцию для обновления состояния ошибки устройства.
Эта функция была добавлена в Qt 5.14.
См. также 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. Если функция не реализована подклассом 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().
QString QCanBusDevice::errorString() const
Возвращает удобочитаемое описание последней ошибки устройства.
См. также error().
qint64 QCanBusDevice::framesAvailable() const
Возвращает количество доступных кадров. Если кадров нет, эта функция возвращает 0.
См. также clear(), readFrame() и readAllFrames().
qint64 QCanBusDevice::framesToWrite() const
Для буферизованных устройств эта функция возвращает количество кадров, ожидающих записи. Для устройств без буферизации эта функция всегда возвращает ноль.
Примечание: В драйвере CAN и на уровне аппаратного обеспечения CAN может быть дополнительный буфер. Поэтому, если эта функция возвращает ноль, это не означает, что все CAN-кадры уже отправлены по CAN-шине.
См. также clear() и writeFrame().
[virtual, since 5.14] bool QCanBusDevice::hasBusStatus() const
Возвращает true, если плагин CAN поддерживает запрос состояния CAN-шины.
Эта функция была добавлена в Qt 5.14.
См. также busStatus().
[protected] bool QCanBusDevice::hasOutgoingFrames() const
Возвращает true если внутренний список исходящих кадров не пуст; в противном случае возвращает false.
[pure virtual] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)
Интерпретирует frame как кадр ошибки и возвращает удобочитаемое описание ошибки.
Если frame не является кадром ошибки, возвращаемая строка пуста.
[pure virtual protected] bool QCanBusDevice::open()
Эта функция вызывается connectDevice(). Подклассы должны предоставить реализацию, которая возвращает true если соединение с CAN-шиной установлено; в противном случае false. Реализация QCanBusDevice гарантирует, что при входе в эту функцию состояние устройства state() уже установлено в QCanBusDevice::ConnectingState.
Реализация должна гарантировать, что при успехе состояние экземпляра state() устанавливается в QCanBusDevice::ConnectedState; в противном случае QCanBusDevice::UnconnectedState. Для установки нового состояния устройства должен использоваться setState().
Пользовательская реализация отвечает за открытие сокета, создание потенциально необходимого QSocketNotifier и применение пользовательских и стандартных значений QCanBusDevice::configurationParameter.
См. также connectDevice().
[since 5.12] QList<QCanBusFrame> QCanBusDevice::readAllFrames()
Возвращает все QCanBusFrame из очереди; в противном случае возвращает пустой QList. Возвращаемые кадры удаляются из очереди.
Очередь работает по принципу FIFO.
Эта функция была добавлена в Qt 5.12.
См. также clear(), framesAvailable() и readFrame().
QCanBusFrame QCanBusDevice::readFrame()
Возвращает следующий QCanBusFrame из очереди; в противном случае возвращает пустой QCanBusFrame. Возвращаемый кадр удаляется из очереди.
Очередь работает по принципу FIFO.
См. также clear(), framesAvailable() и readAllFrames().
[virtual, since 5.14] void QCanBusDevice::resetController()
Выполняет сброс контроллера CAN, чтобы освободить контроллер CAN от состояния «остановлен на шине», если это возможно.
Примечание: Сбросы контроллера CAN нарушают текущую коммуникацию и могут занимать до секунды. Вызывайте эту функцию только для восстановления после ошибок на шине.
Примечание: Возможно, эта функция не реализована во всех плагинах CAN. Для получения дополнительной информации обратитесь к страницам справки плагинов.
Функция была добавлена в Qt 5.14.
См. также busStatus().
[virtual] void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
Устанавливает параметр конфигурации key для подключения к шине CAN в значение 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().
[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)
Задерживает выполнение, пока новые кадры не станут доступны для чтения, и не будет отправлен сигнал framesReceived(), или пока не пройдут msecs миллисекунд. Если msecs равно -1, эта функция не будет ожидать истечения времени.
Возвращает true если новые кадры доступны для чтения и отправлен сигнал framesReceived(); в противном случае возвращает false (если операция истекла по времени или произошла ошибка).
Примечание: Эта функция запустит локальный цикл обработки событий. Это может привести к ситуациям, когда другие слоты приложения могут быть вызваны во время блокировки выполнения этой функции. Для избежания проблем сигналы для этого класса не следует подключать к слотам. Аналогично, эту функцию нельзя вызывать в ответ на сигналы framesReceived() или errorOccurred().
См. также waitForFramesWritten().
[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)
Для буферизованных устройств эта функция ожидает, пока все буферизованные кадры не будут записаны в устройство и не будет отправлен сигнал framesWritten(), или пока не пройдут msecs миллисекунд. Если msecs равно -1, эта функция не будет ожидать истечения времени. Для устройств без буферизации она возвращает значение немедленно со значением false, так как writeFrame() не требует буфера записи.
Возвращает true если отправлен сигнал framesWritten(); в противном случае возвращает false (т.е. если операция истекла по времени или произошла ошибка).
Примечание: Эта функция запустит локальный цикл обработки событий. Это может привести к ситуациям, когда другие слоты приложения могут быть вызваны во время блокировки выполнения этой функции. Для избежания проблем сигналы для этого класса не следует подключать к слотам. Аналогично, эту функцию нельзя вызывать в ответ на сигналы framesWritten() или errorOccurred().
См. также waitForFramesReceived().
[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)
Записывает frame на шину CAN и возвращает true при успехе; в противном случае false.
На некоторых платформах кадр может помещаться в очередь, и возвращаемое значение может указывать только на успешное добавление в очередь. Фактическое отправление кадра произойдёт позднее. Поэтому сигнал framesWritten() является окончательным подтверждением того, что кадр был передан транспортному слою. При возникновении ошибки отправляется сигнал errorOccurred().
В соответствии со спецификацией шины CAN кадры типа запрос на удалённый перенос (RTR) не имеют полезной нагрузки, но имеют длину от 0 до 8 (включительно). Эта длина указывает ожидаемую длину полезной нагрузки ответа от удалённой стороны. Поэтому при отправке кадра RTR с помощью этой функции всё ещё может потребоваться установить произвольную полезную нагрузку на frame. Длина произвольной полезной нагрузки устанавливается как ожидаемая длина полезной нагрузки для кадра RTR.
См. также QCanBusFrame::setPayload().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qcanbusdevice.html