它是壹種基於消息的協議,最初是為汽車內的多路電氣布線設計的,但也用於許多其他情況。
CAN Bus API提供了壹些通用的API來訪問CAN設備:
多家供應商為CAN設備提供了各種API進行訪問。該 QtSerialBus 模塊支持CAN總線插件的設置如下:
如果Qt提供的插件不適合所需的目標平臺,則可以實施定制的CAN總線插件。該實現遵循實現Qt插件的標準方法。自定義插件必須部署到 $QTDIR/plugins/canbus 。
每個插件必須定義壹個Key值,該Key值用於加載插件。這是通過壹個小的json文件完成的。例如,socketcan插件使用以下 plugin.json 內容:
該Key值必須與CAN總線適配器的接口名稱壹起傳遞給 QCanBus :: createDevice() 。 QCanBus 使用 QCanBusFactoryV2 接口加載和實例化插件,每個插件必須將其實現為中央入口點。接口充當工廠,其唯壹目的是返回 QCanBusDevice 實例。上面提到的接口名稱是通過 QCanBusFactory :: createDevice() 工廠方法傳遞的。以下是 socketcan 插件的工廠實現:
下壹步是提供 QCanBusDevice 的實現。至少必須實現以下純虛函數功能:
在 open() 和 close() 方法分別配合 QCanBusDevice :: connectDevice() 和 QCanBusDevice :: disconnectDevice() 使用。檢查功能文檔以了解實施細節。
QCanBusDevice :: writeFrame() 負責進行完整性檢查,例如 QCanBusFrame 的有效性以及設備是否仍處於連接狀態。假設檢查通過,它將幀寫入CAN總線。成功後,它將發出 QCanBusDevice :: framesWritten() 信號;否則,將使用適當的錯誤消息調用 QCanBusDevice :: setError() 。此功能也可以用於實現異步寫入操作。插件實施者有責任在適當的時間發出適當的信號。
最後但並非最不重要的壹點是, QCanBusDevice :: interpretedErrorFrame 提供了壹種方便的方法來將CAN總線錯誤幀的內容轉換為人類可讀的錯誤字符串。