在一小節的代碼中實現了一個簡單的 LED 驅動,下面是對代碼的詳細解釋: 包含的頭文件如下所示: ![]() 宏定義如下所示: ![]() 數據結構如下所示: ![]() g_LedDriverEntry 結構體是驅動入口結構體,如下所示,包含了驅動的版本號、模塊名、綁定、初始化和釋放函數。 ![]() HdfLedDriverInit 函數是驅動初始化函數。 參數:deviceObject(設備對象)。 流程:獲取設備資源接口,讀取設備配置中的 led_version 和 led_number(GPIO 號),并保存到全局配置變量中。 ![]() HdfLedDriverRelease:驅動釋放函數。 參數:HdfDeviceObject(設備對象)。 流程:記錄日志,表示驅動釋放成功。 ![]() HdfLedDriverBind:綁定解析函數 參數:deviceObject(設備對象)。 流程:將 LED 驅動的服務對象賦值給設備對象的服務成員。 ![]() LedDriverDispatch:解析函數,解析應用層下發的命令,執行命令對應的操作,控制 led 燈的亮滅。 參數:client(客戶端信息),cmdId(命令 ID),dataBuf(輸入數據緩沖區),replyBuf(回復數據緩沖區)。 流程:檢查設備對象的有效性,驗證 LED 版本,根據命令 ID 讀取數據并調用 LedGpioCtl控制 LED。 ![]() LedGpioCtl:控制指定 GPIO(LED)的高低電平,從而控制 LED 燈的開關。 參數:gpio(GPIO 號),mode(LED 模式,開或關)。 流程:設置 GPIO 為輸出方向,根據 mode 設置 GPIO 的電平,最后記錄日志。 ![]() 更多內容可以關注:迅為RK3568開發板篇OpenHarmony |