QCanBusDevice Class
La classe QCanBusDevice est la classe d'interface pour le bus CAN. Plus d'informations...
| En-tête : | #include <QCanBusDevice> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS SerialBus)target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake : | QT += serialbus |
| Héritages : | QObject |
Types publics
| 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 |
Fonctions publiques
| 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 |
Signaux
| void | errorOccurred(QCanBusDevice::CanBusError) |
| void | framesReceived() |
| void | framesWritten(qint64 framesCount) |
| void | stateChanged(QCanBusDevice::CanBusDeviceState state) |
Fonctions protégées
| 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) |
Description détaillée
QCanBusDevice communique avec un plugin CAN fournissant aux utilisateurs une API pratique. Le plugin CAN doit être spécifié lors de la création de l'objet.
Type de membre Documentation
enum QCanBusDevice::CanBusDeviceState
Cette énumération décrit tous les états possibles de l'appareil.
| Constante | Valeur | Description de l'état de l'appareil |
|---|---|---|
QCanBusDevice::UnconnectedState | 0 | L'appareil est déconnecté. |
QCanBusDevice::ConnectingState | 1 | L'appareil est en cours de connexion. |
QCanBusDevice::ConnectedState | 2 | L'appareil est connecté au bus CAN. |
QCanBusDevice::ClosingState | 3 | L'appareil est fermé. |
enum QCanBusDevice::CanBusError
Cette énumération décrit toutes les conditions d'erreur possibles.
| Constante | Valeur | Description de l'erreur |
|---|---|---|
QCanBusDevice::NoError | 0 | Aucune erreur n'est survenue. |
QCanBusDevice::ReadError | 1 | Une erreur s'est produite lors d'une opération de lecture. |
QCanBusDevice::WriteError | 2 | Une erreur s'est produite lors d'une opération d'écriture. |
QCanBusDevice::ConnectionError | 3 | Une erreur s'est produite lors de la tentative d'ouverture du plugin. |
QCanBusDevice::ConfigurationError | 4 | Une erreur s'est produite lors de la définition d'un paramètre de configuration. |
QCanBusDevice::UnknownError | 5 | Une erreur inconnue s'est produite. |
QCanBusDevice::OperationError | 6 | Une opération a été tentée alors que l'appareil était dans un état qui ne le permettait pas. Cette énumération a été introduite dans Qt 5.14. |
QCanBusDevice::TimeoutError | 7 | Un dépassement de délai s'est produit lors de l'attente de trames écrites ou reçues. Cette énumération a été introduite dans Qt 5.14. |
enum class QCanBusDevice::CanBusStatus
Cette énumération décrit les valeurs possibles de l'état du bus CAN.
| Constante | Valeur | Description de l'état du bus CAN |
|---|---|---|
QCanBusDevice::CanBusStatus::Unknown | 0 | L'état du bus CAN est inconnu (par exemple, il n'est pas pris en charge par le module d'extension CAN). |
QCanBusDevice::CanBusStatus::Good | 1 | Le contrôleur CAN est entièrement opérationnel |
QCanBusDevice::CanBusStatus::Warning | 2 | Le contrôleur CAN est en état d'alerte |
QCanBusDevice::CanBusStatus::Error | 3 | Le contrôleur CAN est en état d'erreur (n'envoie plus de trames CAN) |
QCanBusDevice::CanBusStatus::BusOff | 4 | Le contrôleur CAN est en état de bus off (déconnecté du bus CAN) |
enum QCanBusDevice::ConfigurationKey
Cette énumération décrit les options de configuration possibles pour la connexion au bus CAN.
| Constante | Valeur | Description de la configuration |
|---|---|---|
QCanBusDevice::RawFilterKey | 0 | Cette configuration détermine le type de trames de bus CAN que l'appareil actuel accepte. La valeur attendue est QList<QCanBusDevice::Filter>. Le passage d'une liste vide efface tous les filtres précédemment définis, y compris les filtres par défaut. Pour plus de détails, voir QCanBusDevice::Filter. |
QCanBusDevice::ErrorFilterKey | 1 | Cette clé définit le type d'erreur qui doit être transmis via la connexion actuelle. La valeur associée doit être de type QCanBusFrame::FrameErrors. |
QCanBusDevice::LoopbackKey | 2 | Cette clé définit si le dispositif de bus CAN doit fonctionner en mode de bouclage. Le bouclage signifie que chaque fois qu'une trame CAN est transmise sur le bus CAN, un écho local de cette trame est envoyé à toutes les applications connectées à ce dispositif CAN. La valeur attendue pour cette clé est bool. |
QCanBusDevice::ReceiveOwnKey | 3 | Cette clé définit si ce dispositif CAN reçoit ses propres trames d'envoi. Elle peut être utilisée pour vérifier si la transmission a réussi. La valeur attendue pour cette clé est bool. |
QCanBusDevice::BitRateKey | 4 | Cette clé définit le débit binaire CAN en bits par seconde. Avec CAN FD, la charge utile peut être transmise à un débit de données plus élevé si QCanBusFrame::hasBitrateSwitch() est activé. Dans ce cas, QCanBusDevice::BitRateKey n'est utilisé que pour la phase d'arbitrage de l'ID CAN. Voir aussi QCanBusDevice::DataBitRateKey |
QCanBusDevice::CanFdKey | 5 | Cette clé définit si l'envoi et la réception de trames CAN FD doivent être activés. La valeur attendue pour cette clé est bool. |
QCanBusDevice::DataBitRateKey | 6 | Cette clé définit le débit binaire de la charge utile CAN FD en bits par seconde. CAN FD permet de transmettre la charge utile des trames avec l'indicateur QCanBusFrame::hasBitrateSwitch() à un débit de données plus élevé, une fois que la phase d'arbitrage au débit nominal est terminée. Cette valeur a été introduite dans Qt 5.9. Voir aussi QCanBusDevice::BitRateKey |
QCanBusDevice::ProtocolKey | 7 | Cette clé permet de spécifier un autre protocole. Pour l'instant, ce paramètre ne peut être défini et utilisé que dans le plugin SocketCAN. Cette valeur a été introduite dans Qt 5.14. |
QCanBusDevice::UserKey | 30 | Cette clé définit la plage où commencent les clés personnalisées. Son objectif le plus courant est d'autoriser des options de configuration spécifiques à une plate-forme. |
Voir aussi configurationParameter().
enum QCanBusDevice::Direction
flags QCanBusDevice::Directions
Cette énumération décrit les directions possibles de transmission de données.
| Constante | Valeur | Description |
|---|---|---|
QCanBusDevice::Input | 1 | Direction d'entrée. |
QCanBusDevice::Output | 2 | Direction de la sortie. |
QCanBusDevice::AllDirections | Input | Output | Les deux directions, entrée et sortie. |
Le type Directions est un typedef pour QFlags<Direction>. Il stocke une combinaison OU de valeurs de direction.
Documentation des fonctions membres
[explicit] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)
Construit un périphérique de bus série avec l'adresse parent spécifiée.
[virtual] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()
Renvoie l'état actuel du bus CAN. Si le statut ne peut pas être demandé, QCanBusDevice::UnknownStatus est retourné.
Note : Cette fonction peut ne pas être implémentée dans tous les plugins CAN. Veuillez vous référer aux pages d'aide des plugins pour plus d'informations. La fonction hasBusStatus() peut être utilisée au moment de l'exécution pour vérifier si le plugin CAN utilisé est capable de demander l'état du bus CAN.
Voir également hasBusStatus() et resetController().
void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)
Efface les tampons d'entrée ou de sortie de l'appareil, selon direction.
Cette fonction n'agit que sur les tampons QCanBusDevice. Les trames qui sont déjà écrites dans le pilote CAN ou la couche matérielle CAN, ou qui ne sont pas encore lues depuis ces couches, ne sont pas effacées par cette fonction.
Remarque : l'effacement des tampons de sortie n'est possible que pour les appareils à mémoire tampon.
Voir également framesAvailable(), readFrame(), framesToWrite() et writeFrame().
[protected] void QCanBusDevice::clearError()
Efface l'identifiant d'erreur et la description lisible par l'homme de la dernière erreur du dispositif.
Les implémentations de bus CAN doivent utiliser cette fonction pour mettre à jour l'état d'erreur du dispositif.
Voir également error(), errorOccurred() et setError().
[pure virtual protected] void QCanBusDevice::close()
Cette fonction est responsable de la fermeture de la connexion au bus CAN. L'implémentation doit s'assurer que l'instance state() est réglée sur QCanBusDevice::UnconnectedState.
La tâche la plus importante de cette fonction est de fermer le socket vers le dispositif CAN et d'appeler QCanBusDevice::setState().
Voir également disconnectDevice().
QList<QCanBusDevice::ConfigurationKey> QCanBusDevice::configurationKeys() const
Renvoie la liste des clés utilisées par la connexion au bus CAN.
La signification des clés est équivalente à ConfigurationKey. Si une clé n'est pas explicitement mentionnée, le réglage par défaut de la plate-forme pour la clé concernée est utilisé.
QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const
Renvoie la valeur actuelle attribuée à ConfigurationKey key ; sinon, un QVariant invalide.
Voir aussi setConfigurationParameter() et configurationKeys().
bool QCanBusDevice::connectDevice()
Connecte l'appareil au bus CAN. Retourne true en cas de succès, sinon false.
Cette fonction appelle open() dans le cadre de sa mise en œuvre.
Voir également disconnectDevice().
[protected] QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()
Renvoie le prochain QCanBusFrame de la liste interne des trames sortantes ; sinon, renvoie un QCanBusFrame invalide. La trame renvoyée est supprimée de la liste interne.
[virtual, since 6.2] QCanBusDeviceInfo QCanBusDevice::deviceInfo() const
Renvoie un QCanBusDeviceInfo pour le QCanBusDevice actuel. Si la fonction n'est pas implémentée par une sous-classe de QCanBusDevice, un objet construit par défaut est renvoyé.
Cette fonction a été introduite dans Qt 6.2.
void QCanBusDevice::disconnectDevice()
Déconnecte l'appareil du bus CAN.
Cette fonction appelle close() dans le cadre de sa mise en œuvre.
Remarque : cette fonction ne doit être appelée que si connectDevice() a renvoyé true.
Voir également connectDevice().
[protected] void QCanBusDevice::enqueueOutgoingFrame(const QCanBusFrame &newFrame)
Ajoute newFrame à la liste interne des cadres sortants accessibles par writeFrame().
Les sous-classes doivent appeler cette fonction lorsqu'elles écrivent un nouveau cadre.
[protected] void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
Ajoute newFrames à la liste interne des images auxquelles on peut accéder en utilisant readFrame() et émet le signal framesReceived().
Les sous-classes doivent appeler cette fonction lorsqu'elles reçoivent des trames.
QCanBusDevice::CanBusError QCanBusDevice::error() const
Renvoie la dernière erreur survenue. La valeur de l'erreur est toujours fixée à la dernière erreur survenue et n'est jamais réinitialisée.
Voir aussi setError() et errorString().
[signal] void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)
Ce signal est émis lorsqu'une erreur se produit.
QString QCanBusDevice::errorString() const
Renvoie une description lisible par l'homme de la dernière erreur de périphérique qui s'est produite.
Voir aussi error().
qint64 QCanBusDevice::framesAvailable() const
Renvoie le nombre de trames disponibles. Si aucune image n'est disponible, cette fonction renvoie 0.
Voir aussi clear(), readFrame() et readAllFrames().
[signal] void QCanBusDevice::framesReceived()
Ce signal est émis lorsqu'une ou plusieurs trames ont été reçues. Les trames doivent être lues en utilisant readFrame() et framesAvailable().
qint64 QCanBusDevice::framesToWrite() const
Pour les appareils à mémoire tampon, cette fonction renvoie le nombre de trames en attente d'écriture. Pour les dispositifs non bufférisés, cette fonction renvoie toujours zéro.
Remarque : il peut y avoir une mise en mémoire tampon supplémentaire dans le pilote CAN et la couche matérielle CAN. Par conséquent, si cette fonction renvoie zéro, cela ne signifie pas que toutes les trames CAN ont déjà été écrites sur le bus CAN.
Voir également clear() et writeFrame().
[signal] void QCanBusDevice::framesWritten(qint64 framesCount)
Ce signal est émis chaque fois qu'un paquet de trames a été écrit sur le bus CAN. L'argument framesCount est fixé au nombre de trames qui ont été écrites dans cette charge utile.
[virtual] bool QCanBusDevice::hasBusStatus() const
Retourne true, si le plugin CAN permet de demander l'état du bus CAN.
Voir aussi busStatus().
[protected] bool QCanBusDevice::hasOutgoingFrames() const
Renvoie true si la liste interne des trames sortantes n'est pas vide ; sinon, renvoie false.
[pure virtual] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)
Interprète frame comme un cadre d'erreur et renvoie une description lisible par l'homme de l'erreur.
Si frame n'est pas un cadre d'erreur, la chaîne renvoyée est vide.
[pure virtual protected] bool QCanBusDevice::open()
Cette fonction est appelée par connectDevice(). Les sous-classes doivent fournir une implémentation qui renvoie true si la connexion au bus CAN a pu être établie, sinon false. L'implémentation de QCanBusDevice garantit qu'à l'entrée de cette fonction, la valeur de state() de l'appareil est déjà réglée sur QCanBusDevice::ConnectingState.
L'implémentation doit garantir qu'en cas de succès, l'instance state() est réglée sur QCanBusDevice::ConnectedState; sinon, QCanBusDevice::UnconnectedState. setState() doit être utilisé pour définir le nouvel état du dispositif.
L'implémentation personnalisée est responsable de l'ouverture de la socket, de l'instanciation d'un QSocketNotifier potentiellement nécessaire et de l'application des QCanBusDevice::configurationParameter() personnalisés et par défaut.
Voir également connectDevice().
QList<QCanBusFrame> QCanBusDevice::readAllFrames()
Renvoie tous les QCanBusFrames de la file d'attente ; sinon, renvoie un QList vide. Les trames renvoyées sont supprimées de la file d'attente.
La file d'attente fonctionne selon le principe FIFO.
Voir également clear(), framesAvailable() et readFrame().
QCanBusFrame QCanBusDevice::readFrame()
Renvoie le prochain QCanBusFrame de la file d'attente ; sinon, renvoie un QCanBusFrame vide. La trame renvoyée est supprimée de la file d'attente.
La file d'attente fonctionne selon le principe FIFO.
Voir également clear(), framesAvailable() et readAllFrames().
[virtual] void QCanBusDevice::resetController()
Effectue une réinitialisation du contrôleur CAN pour libérer le contrôleur CAN de l'état de désactivation du bus, si possible.
Remarque : les réinitialisations du contrôleur CAN perturbent la communication en cours et peuvent prendre jusqu'à une seconde. N'appelez cette fonction que pour récupérer des erreurs de bus.
Note : Cette fonction peut ne pas être implémentée dans tous les plugins CAN. Veuillez vous référer aux pages d'aide des plugins pour plus d'informations.
Voir aussi busStatus().
[virtual] void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
Définit le paramètre de configuration key pour la connexion au bus CAN à value. Les clés potentielles sont représentées par ConfigurationKey.
Un paramètre peut être désactivé en définissant une valeur invalide QVariant. La désactivation d'un paramètre implique que la configuration est réinitialisée à sa valeur par défaut.
Remarque : dans la plupart des cas, les modifications de la configuration ne prennent effet qu'après une reconnexion.
Voir également configurationParameter().
[protected] void QCanBusDevice::setError(const QString &errorText, QCanBusDevice::CanBusError errorId)
Définit la description lisible par l'homme de la dernière erreur du dispositif à errorText. errorId catégorise le type d'erreur.
Les implémentations de bus CAN doivent utiliser cette fonction pour mettre à jour l'état d'erreur du dispositif.
Voir également error(), errorOccurred() et clearError().
[protected] void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)
Définit l'état de l'appareil à newState. Les implémentations de bus CAN doivent utiliser cette fonction pour mettre à jour l'état de l'appareil.
Voir également state().
QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const
Renvoie l'état actuel de l'appareil.
Voir aussi setState() et stateChanged().
[signal] void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)
Ce signal est émis à chaque fois que l'état de l'appareil change. Le nouvel état est représenté par state.
Voir aussi setState() et state().
[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)
Bloque jusqu'à ce que de nouvelles images soient disponibles pour la lecture et que le signal framesReceived() ait été émis, ou jusqu'à ce que msecs millisecondes se soient écoulées. Si msecs est -1, cette fonction n'est pas interrompue.
Renvoie true si de nouvelles images sont disponibles pour la lecture et si le signal framesReceived() est émis ; sinon, renvoie false (si l'opération a dépassé le temps imparti ou si une erreur s'est produite).
Remarque : cette fonction démarre une boucle d'événements locaux. Cela peut conduire à des scénarios dans lesquels d'autres slots d'application peuvent être appelés pendant que l'exécution de cette fonction est bloquée. Pour éviter tout problème, les signaux de cette classe ne doivent pas être connectés à des slots. De même, cette fonction ne doit jamais être appelée en réponse aux signaux framesReceived() ou errorOccurred().
Voir également waitForFramesWritten().
[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)
Pour les appareils à mémoire tampon, cette fonction attend que toutes les images en mémoire tampon aient été écrites sur l'appareil et que le signal framesWritten() ait été émis, ou que msecs millisecondes se soient écoulées. Si msecs vaut -1, cette fonction n'est pas interrompue. Pour les périphériques sans tampon, elle retourne immédiatement avec false car writeFrame() ne nécessite pas de tampon d'écriture.
Renvoie true si le signal framesWritten() est émis ; sinon, renvoie false (c'est-à-dire si l'opération s'est arrêtée dans le temps ou si une erreur s'est produite).
Remarque : cette fonction démarre une boucle locale d'événements. Cela peut conduire à des scénarios dans lesquels d'autres slots d'application peuvent être appelés pendant que l'exécution de cette fonction est bloquée. Pour éviter tout problème, les signaux de cette classe ne doivent pas être connectés à des slots. De même, cette fonction ne doit jamais être appelée en réponse aux signaux framesWritten() ou errorOccurred().
Voir également waitForFramesReceived().
[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)
Écrit frame sur le bus CAN et renvoie true en cas de succès, sinon false.
Sur certaines plates-formes, la trame peut être placée dans une file d'attente et la valeur de retour peut uniquement indiquer une insertion réussie dans la file d'attente. La trame proprement dite sera envoyée ultérieurement. Par conséquent, le signal framesWritten() est la confirmation finale que la trame a été transmise à la couche transport. En cas d'erreur, le signal errorOccurred() est émis.
Conformément à la spécification du bus CAN, les trames de type remote transfer request (RTR) n'ont pas de charge utile, mais une longueur comprise entre 0 et 8 (inclus). Cette longueur indique la longueur de la charge utile de la réponse attendue de la partie distante. Par conséquent, lors de l'envoi d'une trame RTR à l'aide de cette fonction, il peut être nécessaire de définir une charge utile arbitraire sur frame. La longueur de la charge utile arbitraire est celle qui est définie comme taille attendue pour la trame RTR.
Voir également QCanBusFrame::setPayload().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.