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