QCanBusDevice Class
La classe QCanBusDevice est la classe d'interface pour le bus CAN. En savoir plus...
| En-tête : | #include <QCanBusDevice> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake : | QT += serialbus |
| Hérite de : | 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, offrant ainsi aux utilisateurs une API pratique. Le plugin CAN doit être spécifié lors de la création de l'objet.
Documentation sur les types de membres
enum QCanBusDevice::CanBusDeviceState
Cette énumération décrit tous les états possibles de l'appareil.
| Constante | Valeur | Description |
|---|---|---|
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 en cours de fermeture. |
enum QCanBusDevice::CanBusError
Cette énumération décrit toutes les conditions d'erreur possibles.
| Constante | Valeur | Description |
|---|---|---|
QCanBusDevice::NoError | 0 | Aucune erreur ne s’est produite. |
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 tentative de 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 se trouvait dans un état qui ne le permettait pas. Cette énumération a été introduite dans Qt 5.14. |
QCanBusDevice::TimeoutError | 7 | Un délai d'attente a expiré 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 d'état possibles du bus CAN.
| Constante | Valeur | Description |
|---|---|---|
QCanBusDevice::CanBusStatus::Unknown | 0 | L'état du bus CAN est inconnu (par exemple, non pris en charge par le plugin CAN). |
QCanBusDevice::CanBusStatus::Good | 1 | Le contrôleur CAN est pleinement opérationnel |
QCanBusDevice::CanBusStatus::Warning | 2 | Le contrôleur CAN est en état d'avertissement |
QCanBusDevice::CanBusStatus::Error | 3 | Le contrôleur CAN est en état d'erreur (il n'envoie plus de trames CAN) |
QCanBusDevice::CanBusStatus::BusOff | 4 | Le contrôleur CAN est en état « bus désactivé » (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 |
|---|---|---|
QCanBusDevice::RawFilterKey | 0 | Cette configuration détermine le type de trames du bus CAN que le périphérique 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 périphérique CAN doit fonctionner en mode boucle de retour. Le mode boucle de retour 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 périphérique CAN. La valeur attendue pour cette clé est bool. |
QCanBusDevice::ReceiveOwnKey | 3 | Cette clé définit si ce périphérique CAN reçoit ses propres trames d’émission. Cela permet de vérifier si la transmission a bien abouti. La valeur attendue pour cette clé est bool. |
QCanBusDevice::BitRateKey | 4 | Cette clé définit le débit CAN en bits par seconde. Avec le CAN FD, la charge utile peut être transmise à un débit de données plus élevé si la valeur « QCanBusFrame::hasBitrateSwitch() » est définie. Dans ce cas, « QCanBusDevice::BitRateKey » n’est utilisé que pour la phase d’arbitrage de l’ID CAN. Voir également 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 de la charge utile CAN FD en bits par seconde. Le 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 la phase d’arbitrage au débit nominal terminée. Cette valeur d’énumération 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 d’énumération a été introduite dans Qt 5.14. |
QCanBusDevice::UserKey | 30 | Cette clé définit la plage à partir de laquelle commencent les clés personnalisées. Elle sert le plus souvent à permettre des options de configuration spécifiques à une plateforme. |
Voir également ` configurationParameter()`.
enum QCanBusDevice::Direction
flags QCanBusDevice::Directions
Cette énumération décrit les directions possibles de transmission des données.
| Constante | Valeur | Description |
|---|---|---|
QCanBusDevice::Input | 1 | Direction d'entrée. |
QCanBusDevice::Output | 2 | Direction de sortie. |
QCanBusDevice::AllDirections | Input | Output | Les deux sens, entrée et sortie. |
Le type Directions est une définition de type (typedef) pour QFlags<Direction>. Il stocke une combinaison OU de valeurs Direction.
Documentation des fonctions membres
[explicit] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)
Crée un périphérique de bus série avec l'parent spécifiée.
[virtual] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()
Renvoie l'état actuel du bus CAN. Si l'état ne peut pas être interrogé, la fonction renvoie QCanBusDevice::UnknownStatus.
Remarque : cette fonction n'est pas nécessairement implémentée dans tous les plugins CAN. Veuillez consulter les pages d'aide des plugins pour plus d'informations. La fonction hasBusStatus() peut être utilisée en cours d'exécution pour vérifier si le plugin CAN utilisé prend en charge la requête d'état du bus CAN.
Voir également hasBusStatus() et resetController().
void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)
Vide les tampons d'entrée ou de sortie de l'appareil, selon la valeur de ` direction`.
Cette fonction n’agit que sur les tampons d’ QCanBusDevice. Les trames déjà écrites dans le pilote CAN ou la couche matérielle CAN, ou qui n’ont pas encore été lues à partir de ces couches, ne sont pas effacées par cette fonction.
Remarque : la vidange des tampons de sortie n’est possible que pour les périphériques dotés de tampons.
Voir également framesAvailable(), readFrame(), framesToWrite() et writeFrame().
[protected] void QCanBusDevice::clearError()
Efface l'identifiant d'erreur et la description lisible par l'utilisateur de la dernière erreur du périphérique.
Les implémentations du bus CAN doivent utiliser cette fonction pour mettre à jour l'état d'erreur du périphérique.
Voir également error(), errorOccurred() et setError().
[pure virtual protected] void QCanBusDevice::close()
Cette fonction est chargée de fermer la connexion au bus CAN. L'implémentation doit s'assurer que la méthode ` state()` de l'instance est définie sur ` QCanBusDevice::UnconnectedState`.
La tâche principale de cette fonction est de fermer le socket vers le périphérique CAN et d’appeler la méthode ` 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 à celle décrite à l'adresse ConfigurationKey. Si une clé n'est pas explicitement mentionnée, le paramètre par défaut de la plateforme pour la clé concernée est utilisé.
QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const
Renvoie la valeur actuellement attribuée à l'ConfigurationKey key ; sinon, renvoie une QVariant non valide.
Voir également setConfigurationParameter() et configurationKeys().
bool QCanBusDevice::connectDevice()
Connecte le périphérique au bus CAN. Renvoie ` true ` en cas de succès ; sinon, ` false`.
Cette fonction appelle la fonction open() dans le cadre de sa mise en œuvre.
Voir également disconnectDevice().
[protected] QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()
Renvoie la trame suivante QCanBusFrame issue de la liste interne des trames sortantes ; sinon, renvoie une trame non valide QCanBusFrame. La trame renvoyée est supprimée de la liste interne.
[virtual, since 6.2] QCanBusDeviceInfo QCanBusDevice::deviceInfo() const
Renvoie un objet ` QCanBusDeviceInfo ` correspondant à l'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 trames sortantes, accessible via la fonction writeFrame().
Les sous-classes doivent appeler cette fonction lorsqu'elles écrivent une nouvelle trame.
[protected] void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
Ajoute ` newFrames ` à la liste interne des trames accessibles via ` 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 d'erreur correspond toujours à la dernière erreur survenue et n'est jamais réinitialisée.
Voir également 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 compréhensible par l'utilisateur de la dernière erreur de périphérique survenue.
Voir également error().
qint64 QCanBusDevice::framesAvailable() const
Renvoie le nombre de trames disponibles. S'il n'y a aucune trame disponible, cette fonction renvoie 0.
Voir également 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 à l'aide des fonctions readFrame() et framesAvailable().
qint64 QCanBusDevice::framesToWrite() const
Pour les périphériques avec mémoire tampon, cette fonction renvoie le nombre de trames en attente d'écriture. Pour les périphériques sans mémoire tampon, cette fonction renvoie toujours zéro.
Remarque : il peuty avoir une mise en mémoire tampon supplémentaire au niveau du pilote CAN et de 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'une charge utile de trames a été écrite sur le bus CAN. L'argument « framesCount » est défini sur le nombre de trames écrites dans cette charge utile.
[virtual] bool QCanBusDevice::hasBusStatus() const
Renvoie « true » si le plugin CAN prend en charge la requête d'état du bus CAN.
Voir également 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 une trame d'erreur et renvoie une description lisible 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, dès l'entrée dans cette fonction, que la méthode state() du périphérique est déjà définie sur QCanBusDevice::ConnectingState.
L’implémentation doit garantir qu’en cas de réussite, la méthode state() de l’instance soit définie sur QCanBusDevice::ConnectedState; sinon, QCanBusDevice::UnconnectedState. La méthode setState() doit être utilisée pour définir le nouvel état du périphérique.
L'implémentation personnalisée est chargée d'ouvrir le socket, d'instancier une ` QSocketNotifier ` éventuellement requise et d'appliquer les valeurs personnalisées et par défaut de ` QCanBusDevice::configurationParameter()`.
Voir également connectDevice().
QList<QCanBusFrame> QCanBusDevice::readAllFrames()
Renvoie toutes les trames « QCanBusFrame» présentes dans la file d’attente ; sinon, renvoie une trame vide « QList ». 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 la « QCanBusFrame » suivante de la file d'attente ; sinon, renvoie une « QCanBusFrame » vide. La « frame » renvoyée est retiré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 afin de le faire sortir de l'état « bus désactivé », si possible.
Remarque : les réinitialisations du contrôleurCAN perturbent la communication en cours et peuvent prendre jusqu'à une seconde. N'appelez cette fonction que pour remédier à des erreurs de bus.
Remarque : cette fonction n'est pas nécessairement implémentée dans tous les plugins CAN. Veuillez consulter les pages d'aide des plugins pour plus d'informations.
Voir également 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 sur la valeur « value ». Les clés possibles sont indiquées à l'adresse ConfigurationKey.
Un paramètre peut être désactivé en définissant une valeur non valide pour 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 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'utilisateur de la dernière erreur du périphérique sur « errorText ». « errorId » indique la catégorie de l'erreur.
Les implémentations du bus CAN doivent utiliser cette fonction pour mettre à jour l'état d'erreur du périphérique.
Voir également error(), errorOccurred() et clearError().
[protected] void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)
Définit l'état du périphérique sur « newState ». Les implémentations du bus CAN doivent utiliser cette fonction pour mettre à jour l'état du périphérique.
Voir également state().
QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const
Renvoie l'état actuel de l'appareil.
Voir également 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 également setState() et state().
[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)
Bloque jusqu’à ce que de nouvelles trames 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 vaut -1, cette fonction n’expire pas.
Renvoie true si de nouvelles trames sont disponibles pour la lecture et que le signal framesReceived() est émis ; sinon, renvoie false (si l’opération a atteint le délai d’expiration ou si une erreur s’est produite).
Remarque : cette fonction lance une boucle d’événements locale. Cela peut conduire à des situations où d’autres slots d’application peuvent être appelés alors que l’exécution de la portée 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 aussi waitForFramesWritten().
[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)
Pour les périphériques avec mémoire tampon, cette fonction attend que toutes les trames mises en mémoire tampon aient été écrites sur le périphérique et que le signal ` framesWritten()` ait été émis, ou qu’ msecs ` millisecondes se soient écoulées. Si ` msecs ` est égal à -1, cette fonction n’expire pas. Pour les périphériques sans mémoire tampon, elle renvoie immédiatement la valeur ` 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 a atteint le délai d'expiration ou si une erreur s'est produite).
Remarque : cette fonction lance une boucle d’événements locale. Cela peut conduire à des situations où d’autres slots d’application peuvent être appelés alors 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 aussi waitForFramesReceived().
[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)
Écrit « frame » sur le bus CAN et renvoie « true » en cas de réussite ; sinon, « false ».
Sur certaines plateformes, la trame peut être placée dans une file d’attente et la valeur de retour peut indiquer uniquement que l’insertion dans la file d’attente a réussi. La trame proprement dite sera envoyée ultérieurement. Par conséquent, le signal framesWritten() constitue la confirmation finale que la trame a été transmise à la couche de transport. Si une erreur se produit, 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 attendue de la charge utile de la réponse 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 cette charge utile arbitraire correspond à la 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.