陳甲印
軟通動力高級技術專家
背景:
多媒體系統(tǒng)目前在Linux操作系統(tǒng),windows操作系統(tǒng)已經(jīng)非常成熟,并且應用場景廣泛,但是,基于OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)操作系統(tǒng),目前如果使用到多媒體(音頻)是需要做一系列的適配動作,才能應用到各種場景。方案:
基于OpenHarmony適配RK系列開發(fā)板音頻驅(qū)動總體方案是:基于HDF框架和ADM模型,在內(nèi)核層中創(chuàng)建DAI、DMA和Codec三個模塊,并實現(xiàn)例化ADM定義的DAI、DMA和Codec回調(diào)業(yè)務接口,ADM通過這些接口實現(xiàn)音頻數(shù)據(jù)處理與功能控制;然后再通過HCS配置設備節(jié)點和服務,通過HDF的服務管理機制,對內(nèi)核層和用戶層提供服務。針對DAI、DMA和Codec,首先分別創(chuàng)建對應的適配器模塊(RK系列開發(fā)板daiadapter、RK系列開發(fā)板dmaadapter、es8838codecadapter),在其中實現(xiàn)驅(qū)動的注冊、綁定、初始化和釋放;然后分別創(chuàng)建三者對應的操作集模塊(RK系列開發(fā)板daiops、RK系列開發(fā)板dmaops、es8838codecops),在其中實現(xiàn)所有ADM定義的對應業(yè)務接口;最后在deviceinfo.hcs中配置三者公有的參數(shù),若需要配置私有參數(shù),則還需要分別創(chuàng)建三者對應的HCS配置文件(daiconfig.hcs、dmaconfig.hcs、codecconfig.hcs)。RK系列開發(fā)板 DAI模塊適配:
DAI主要作用是通過I2S將Soc與Codec連接,實現(xiàn)在Soc和Codec之間音頻數(shù)據(jù)的傳輸,其中I2S驅(qū)動由HDF框架提供。ADM定義的DAI接口包括:DAI設備初始化、讀寫(Soc的)寄存器、音頻設備啟動、下發(fā)硬件參數(shù)和事件監(jiān)聽共6個接口。在適配器模塊中實例化ADM定義的DAI兩個結構體:DaiData(SoC端DAI數(shù)據(jù)集)和AudioDaiOps(SoC端DAI操作集);在操作集模塊中實現(xiàn)6個ADM定義的DAI的業(yè)務接口函數(shù);配置DAI設備節(jié)點公有參數(shù),若有需要,則可配置SoC端的I2S寄存器信息等私有參數(shù)。RK系列開發(fā)板 DAI模塊關系
?RK系列開發(fā)板_dai-classes.puml
1.1 RK系列開發(fā)板daiadapter- 實例化SoC端DAI操作集:g_daiDeviceOps,核心成員字段值定義如下:Startup = RK系列開發(fā)板DaiStartup;HwParams = RK系列開發(fā)板DaiHwParams;Trigger = RK系列開發(fā)板DaiTrigger。
-
實例化SoC端DAI數(shù)據(jù)集:g_daiData,核心成員字段值定義如下:
DaiInit = RK系列開發(fā)板DaiDeviceInit;
Read = RK系列開發(fā)板DaiDeviceReadReg;
Write = RK系列開發(fā)板DaiDeviceWriteReg;
ops = &g_daiDeviceOps,SoC端DAI操作集地址。
-
實例化HdfDriverEntry類型的DAI驅(qū)動實體:g_daiDriverEntry,核心成員字段值定義如下:
moduleVersion = 1,模塊版本號;
moduleName = "DAI_RK系列開發(fā)板",模塊名;
Bind = DaiDriverBind;
Init = DaiDriverInit;
Release = DaiDriverRelease。
- DAI驅(qū)動注冊到鴻蒙系統(tǒng):HDFINIT(gdaiDriverEntry)
-
實現(xiàn)以下函數(shù):
DaiDriverInit,DAI驅(qū)動初始化函數(shù);
DaiDriverBind,DAI驅(qū)動綁定函數(shù);
DaiDriverRelease,DAI驅(qū)動釋放函數(shù)。
-
實現(xiàn)以下函數(shù):
RK系列開發(fā)板DaiDeviceInit,初始化SoC端DAI設備函數(shù);
RK系列開發(fā)板DaiDeviceReadReg,讀SoC端DAI設備寄存器函數(shù);
RK系列開發(fā)板DaiDeviceWriteReg,寫SoC端DAI設備寄存器函數(shù);
RK系列開發(fā)板DaiStartup,啟動SoC端DAI設備函數(shù);
RK系列開發(fā)板DaiHwParams,下發(fā)SoC端DAI硬件參數(shù)函數(shù);
RK系列開發(fā)板DaiTrigger,監(jiān)聽并處理事件函數(shù)。
總結:
在OpenHarmony操作系統(tǒng)中,適配音頻驅(qū)動是非常重要的一個模塊,本文只是其中的一個步驟,DAI模塊適配,通過示意圖的分析,以及核心代碼的指導,相信讀者會對音頻適配有一個基本的了解,之后的文章中,會逐步更新音頻驅(qū)動的DMA模塊適配、Codec模塊適配、Audio HCS配置等。END
想了解更多開源技術?后臺留言,立刻安排!就喜歡獎勵一個“”和“在看”唄~原文標題:RK系列開發(fā)板音頻驅(qū)動適配指南(一)
文章出處:【微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
開發(fā)板
+關注
關注
25文章
5067瀏覽量
97608 -
音頻驅(qū)動
+關注
關注
0文章
10瀏覽量
8179
原文標題:RK系列開發(fā)板音頻驅(qū)動適配指南(一)
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論