一種操作系統(tǒng)中控制硬件設(shè)備的方法和模塊的制作方法
【專利摘要】一種操作系統(tǒng)中控制硬件設(shè)備的方法和模塊,獲取到用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù),將其下發(fā)并存儲到緩沖單元;調(diào)用硬件設(shè)備驅(qū)動,硬件設(shè)備驅(qū)動讀取緩沖單元中的狀態(tài)數(shù)據(jù),根據(jù)狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài)。調(diào)用硬件設(shè)備驅(qū)動包括:調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動作;或者獲取鏈接庫加載指令,加載鏈接庫;獲取用于控制硬件設(shè)備動作的指令,調(diào)用鏈接庫中與該指令對應(yīng)的功能實現(xiàn)函數(shù);執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作。硬件設(shè)備驅(qū)動控制硬件設(shè)備執(zhí)行動作為直接控制方式,能夠有效避免在驅(qū)動硬件設(shè)備動作時出現(xiàn)中斷、延遲等現(xiàn)象,從而提高數(shù)據(jù)傳輸?shù)臏蚀_性,為高速數(shù)據(jù)傳輸提供了保證。
【專利說明】一種操作系統(tǒng)中控制硬件設(shè)備的方法和模塊
【技術(shù)領(lǐng)域】
[0001] 本申請涉及電子設(shè)備操作系統(tǒng)的開發(fā),具體涉及一種操作系統(tǒng)中控制硬件設(shè)備的 方法和模塊。
【背景技術(shù)】
[0002] 請參考圖1,為安卓系統(tǒng)的架構(gòu)示意圖。
[0003] 第一層101為Linux內(nèi)核驅(qū)動層(Linux kernel),其由C/C++實現(xiàn)。安卓核心系 統(tǒng)服務(wù)依賴于Linux內(nèi)核,包括安全性、內(nèi)存管理、進程管理、網(wǎng)絡(luò)協(xié)議、驅(qū)動模型等。Linux 內(nèi)核也作為硬件和軟件棧之間的抽象層,除了標準的Linux內(nèi)核外,安卓還增加了內(nèi)核的 驅(qū)動程序,例如:Binder(IPC)驅(qū)動、camera驅(qū)動、電源管理等。
[0004] 第二層為組件庫和虛擬機層,其中,102為組件庫層(Libraries),103為虛擬機層 (Android Runtime),組件庫層102通過C/C++實現(xiàn),包含C/C++庫,用于安卓系統(tǒng)中不同的 組件使用,它們通過安卓應(yīng)用程序框架為開發(fā)者進行服務(wù)。虛擬機層103作為安卓系統(tǒng)的 運動環(huán)境,其提供了 Java編程語言核心庫的大多數(shù)功能,由Dalvik Java虛擬機和基礎(chǔ)的 Java類庫組成。
[0005] 第三層104為應(yīng)用框架層(Application Framework),在安卓系統(tǒng)中,開發(fā)人員也 可以完全訪問核心應(yīng)用程序所使用的API (Application Programming Interface,應(yīng)用程 序編程接口)框架。
[0006] 第四層105為應(yīng)用程序?qū)樱ˋpplications),安卓應(yīng)用程序都是采用Java語言編寫 的,用戶開發(fā)的安卓應(yīng)用程序和安卓的核心應(yīng)用程序是同一層次的,它們都是基于安卓的 系統(tǒng)API構(gòu)建的。
[0007] 目前,眾多的電子設(shè)備采用安卓系統(tǒng),且設(shè)備硬件上都安裝有閃光燈,在很多情況 下,用戶具有使用閃光燈的需求,因此,如何在安卓系統(tǒng)上實現(xiàn)閃光燈的控制,是本領(lǐng)域技 術(shù)人員正在研究的問題。
[0008] -方面,隨著光通信的發(fā)展,越來越多的電子設(shè)備通過使用閃光燈來進行光通信。 在安卓系統(tǒng)中,例如,用戶在應(yīng)用程序?qū)涌刂茖⒛骋粩?shù)據(jù)通過閃光燈以光通信的方式發(fā)送 出去,則該數(shù)據(jù)作為待發(fā)送數(shù)據(jù),根據(jù)相應(yīng)的編碼規(guī)則將該數(shù)據(jù)轉(zhuǎn)換成控制閃光燈亮滅的 時間數(shù)據(jù),即在應(yīng)用程序?qū)赢a(chǎn)生了控制閃光燈開關(guān)的時間數(shù)據(jù)。然而應(yīng)用程序?qū)釉讷@取到 控制閃光燈的指令后,對閃光燈驅(qū)動的調(diào)用指令是一條一條發(fā)送的,閃光燈驅(qū)動執(zhí)行完一 條指令后,等待應(yīng)用程序?qū)影l(fā)送的下一條指令,加上應(yīng)用程序?qū)訉⒅噶顐鬟_到驅(qū)動層需要 經(jīng)過應(yīng)用框架層、組件庫層和虛擬機層等層級,其間,必然會出現(xiàn)一定的時間延遲,從而影 響光通信過程中數(shù)據(jù)傳輸?shù)臏蚀_性。
[0009] 在光通信中,通常采用的是可見光通信,該可見光即可用于進行數(shù)據(jù)傳輸,又可以 作為照明用。然而,由于上述時間延遲問題,使得數(shù)據(jù)傳輸過程中,為了保證數(shù)據(jù)的準確性, 需要適當(dāng)限制其傳輸速度(可見光的閃爍頻率)。因此,對于需要對數(shù)據(jù)進行高速傳輸時, 無法很好地適用。
[0010] 另一方面,在安卓系統(tǒng)中,當(dāng)需要控制閃光燈的開關(guān)時,通常是先調(diào)用camera driver,利用camera自帶的接口,通過設(shè)置camera的參數(shù),來實現(xiàn)閃光燈的開關(guān)。而這種 對閃光燈的控制方式,屬于間接控制,其對閃光燈的調(diào)用具有一定的時間延遲。
【發(fā)明內(nèi)容】
[0011] 本申請?zhí)峁┑囊环N操作系統(tǒng)中控制硬件設(shè)備的方法和模塊,可以直接控制硬件設(shè) 備,并解決信息傳輸延遲、中斷的問題。
[0012] 根據(jù)本申請的第一方面,本申請?zhí)峁┝艘环N操作系統(tǒng)中控制硬件設(shè)備的方法,包 括:
[0013] 獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù);
[0014] 將所述狀態(tài)數(shù)據(jù)下發(fā)并存儲到緩沖單元中;
[0015] 調(diào)用硬件設(shè)備驅(qū)動,所述硬件設(shè)備驅(qū)動讀取保存在緩沖單元中的狀態(tài)數(shù)據(jù),根據(jù) 所述狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài);
[0016] 其中所述調(diào)用硬件設(shè)備驅(qū)動具體包括:調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè) 備動作;或者,
[0017] 獲取鏈接庫加載指令,加載鏈接庫,所述鏈接庫中包括用于控制硬件設(shè)備動作的 功能實現(xiàn)函數(shù);
[0018] 獲取用于控制硬件設(shè)備動作的指令;
[0019] 調(diào)用所述鏈接庫中與所述控制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù);
[0020] 執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作。
[0021] 在某些實施例中,獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù),具體為:獲取原始數(shù) 據(jù),對原始數(shù)據(jù)編碼后得到所述狀態(tài)數(shù)據(jù)。
[0022] 在某些實施例中,所述硬件設(shè)備為發(fā)光器件、震動器、攝像頭、傳感器或麥克風(fēng)。
[0023] 在某些實施例中,所述硬件設(shè)備為發(fā)光器件時,所述硬件設(shè)備驅(qū)動為發(fā)光器件驅(qū) 動,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)的數(shù)組;所述硬件設(shè)備驅(qū)動根據(jù)所述狀態(tài)數(shù)據(jù)控制硬件 設(shè)備動作的狀態(tài),具體為:發(fā)光器件驅(qū)動按照所述數(shù)組中數(shù)據(jù)元素的順序控制發(fā)光器件開 啟或關(guān)閉的時間。
[0024] 在某些實施例中,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)、亮度數(shù)據(jù)或強度數(shù)據(jù)的數(shù)組。
[0025] 在某些實施例中,所述操作系統(tǒng)為安卓系統(tǒng)、Blackberry 0S系統(tǒng)、windows phone 系統(tǒng)、windows mobile系統(tǒng)、I0S系統(tǒng)或Mac 0S系統(tǒng)。
[0026] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)的內(nèi)核驅(qū)動層中 設(shè)置有所述硬件設(shè)備的驅(qū)動,所述硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬 件設(shè)備執(zhí)行相應(yīng)的動作;或者,
[0027] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng),所述I0S系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè)備 的驅(qū)動,所述硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動 作。
[0028] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)的JNI層定義有 相應(yīng)的JNI接口函數(shù);
[0029] 獲取鏈接庫加載指令,加載鏈接庫后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控 制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的 功能實現(xiàn)函數(shù);或者,
[0030] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng)時,則利用LibSystem庫訪問核心系統(tǒng)層提供的接口 函數(shù);
[0031] 獲取鏈接庫加載指令,加載鏈接庫后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控 制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供核心系統(tǒng)層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的 功能實現(xiàn)函數(shù)。
[0032] 在某些實施例中,JNI層保存有功能實現(xiàn)函數(shù)實例化后的地址。
[0033] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)還包括硬件抽象 層,所述安卓系統(tǒng)的硬件抽象層運行于內(nèi)核驅(qū)動層之上,用于在內(nèi)核驅(qū)動層的支持下,為安 卓系統(tǒng)的應(yīng)用框架層和JNI層提供對硬件設(shè)備控制的接口實現(xiàn);或者
[0034] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng),所述I0S系統(tǒng)還包括核心服務(wù)層。
[0035] 根據(jù)本申請的第二方面,本申請?zhí)峁┝艘环N操作系統(tǒng)中控制硬件設(shè)備的模塊,包 括:
[0036] 狀態(tài)數(shù)據(jù)獲取單元,用于獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù);
[0037] 傳輸單元,用于將所述狀態(tài)數(shù)據(jù)下發(fā);
[0038] 緩沖單元,用于存儲傳輸單元下發(fā)的狀態(tài)數(shù)據(jù);
[0039] 第一執(zhí)行單元,用于調(diào)用硬件設(shè)備驅(qū)動,并控制所述硬件設(shè)備驅(qū)動讀取保存在緩 沖單元中的狀態(tài)數(shù)據(jù),根據(jù)所述狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài);
[0040] 第一執(zhí)行單元調(diào)用硬件設(shè)備驅(qū)動時,調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備 動作;或者,所述操作系統(tǒng)中控制硬件設(shè)備的模塊還包括:
[0041] 加載單元,用于獲取鏈接庫加載指令,并加載鏈接庫,所述鏈接庫中包括用于控制 硬件設(shè)備動作的功能實現(xiàn)函數(shù);
[0042] 檢測單元,用于獲取控制硬件設(shè)備動作的指令;
[0043] 調(diào)用單元,用于調(diào)用所述鏈接庫中與所述控制硬件設(shè)備動作的指令對應(yīng)的功能實 現(xiàn)函數(shù);
[0044] 第二執(zhí)行單元,用于控制硬件設(shè)備驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件 設(shè)備執(zhí)行相應(yīng)的動作。
[0045] 在某些實施例中,所述狀態(tài)數(shù)據(jù)獲取單元還包括編碼子單元,用于獲取原始數(shù)據(jù), 對原始數(shù)據(jù)編碼后得到所述狀態(tài)數(shù)據(jù)。
[0046] 在某些實施例中,所述硬件設(shè)備為發(fā)光器件、震動器、攝像頭、傳感器或麥克風(fēng)。
[0047] 在某些實施例中,所述硬件設(shè)備為發(fā)光器件時,所述硬件設(shè)備驅(qū)動為發(fā)光器件驅(qū) 動,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)的數(shù)組;所述第一執(zhí)行單元控制硬件設(shè)備驅(qū)動根據(jù)所述 狀態(tài)數(shù)據(jù)控制硬件設(shè)備的狀態(tài)時:第一執(zhí)行單元控制發(fā)光器件驅(qū)動按照所述數(shù)組中數(shù)據(jù)元 素的順序控制發(fā)光器件開啟或關(guān)閉的時間。
[0048] 在某些實施例中,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)、亮度數(shù)據(jù)或強度數(shù)據(jù)的數(shù)組。
[0049] 在某些實施例中,所述操作系統(tǒng)為安卓系統(tǒng)、Blackberry 0S系統(tǒng)、windows phone 系統(tǒng)、windows mobile系統(tǒng)、I0S系統(tǒng)或Mac 0S系統(tǒng)。
[0050] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)的內(nèi)核驅(qū)動層中 設(shè)置有所述硬件設(shè)備的驅(qū)動,所述第二執(zhí)行單元用于控制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功 能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作;或者
[0051] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng)時,所述I0S系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè) 備的驅(qū)動,所述第二執(zhí)行單元用于控制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控 制硬件設(shè)備執(zhí)行相應(yīng)的動作。
[0052] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)的架構(gòu)還包括JNI 層,所述JNI層定義有相應(yīng)的JNI接口函數(shù);
[0053] 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬件設(shè)備動作的指令 對應(yīng)的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實現(xiàn)函數(shù);或者
[0054] 所述操作系統(tǒng)為I0S系統(tǒng)時,則利用LibSystem庫訪問核心系統(tǒng)層提供的接口函 數(shù);
[0055] 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬件設(shè)備動作的指令 對應(yīng)的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實現(xiàn)函數(shù)。
[0056] 在某些實施例中,所述JNI層保存有功能實現(xiàn)函數(shù)實例化后的地址。
[0057] 在某些實施例中,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系統(tǒng)的架構(gòu)還包括硬 件抽象層,所述硬件抽象層運行于內(nèi)核驅(qū)動層之上,用于在內(nèi)核驅(qū)動層的支持下,為安卓系 統(tǒng)的應(yīng)用框架層和JNI層提供對硬件設(shè)備控制的接口實現(xiàn);或者
[0058] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng)時,所述I0S系統(tǒng)還包括核心服務(wù)層。
[0059] 本申請?zhí)峁┑牟僮飨到y(tǒng)中控制硬件設(shè)備的方法和模塊,在獲取到用于控制硬件設(shè) 備動作的狀態(tài)數(shù)據(jù)后,先將狀態(tài)數(shù)據(jù)下發(fā)并存儲到緩沖單元中,之后調(diào)用硬件設(shè)備驅(qū)動,該 硬件設(shè)備驅(qū)動讀取保存在緩沖單元中的狀態(tài)數(shù)據(jù),根據(jù)狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀 態(tài)。調(diào)用硬件設(shè)備驅(qū)動具體包括:調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動作;或者, 獲取鏈接庫加載指令,加載鏈接庫;在獲取用于控制硬件設(shè)備動作的指令后,調(diào)用鏈接庫中 與硬件設(shè)備動作指令對應(yīng)的功能實現(xiàn)函數(shù);之后執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件 設(shè)備執(zhí)行相應(yīng)的動作。本申請?zhí)峁┑牟僮飨到y(tǒng)中控制硬件設(shè)備的方法和模塊中,硬件設(shè)備 驅(qū)動控制硬件設(shè)備執(zhí)行相應(yīng)的動作為直接控制方式,另外,由于狀態(tài)數(shù)據(jù)存儲在緩沖單元 中,硬件設(shè)備驅(qū)動被調(diào)用后,便直接讀取存儲在緩沖單元中的狀態(tài)數(shù)據(jù),該讀取過程是連續(xù) 的,避免了硬件設(shè)備驅(qū)動在驅(qū)動硬件設(shè)備動作的過程中出現(xiàn)中斷、延遲等現(xiàn)象,從而提高了 數(shù)據(jù)傳輸?shù)臏蚀_性,并為高速數(shù)據(jù)傳輸提供了保證。
【專利附圖】
【附圖說明】
[0060] 圖1為安卓系統(tǒng)的架構(gòu)示意圖;
[0061] 圖2為本申請一種實施例提供的安卓系統(tǒng)的架構(gòu)示意圖;
[0062] 圖3為本申請一種實施例提供的安卓系統(tǒng)的架構(gòu)分析示意圖;
[0063] 圖4為本申請一種實施例安卓系統(tǒng)中控制硬件設(shè)備的方法流程示意圖;
[0064] 圖5為本申請一種實施例安卓系統(tǒng)中控制硬件設(shè)備的模塊的結(jié)構(gòu)示意圖。
【具體實施方式】
[0065] 為了更好地理解本申請,本申請實施例以安卓系統(tǒng)中控制發(fā)光器件(閃光燈) 開關(guān)為例進行說明,應(yīng)當(dāng)理解,本申請中所指的操作系統(tǒng)還可以是Blackberry OS系統(tǒng)、 windows phone系統(tǒng)、windows mobile系統(tǒng)、I0S系統(tǒng)或Mac OS系統(tǒng)等其他操作系統(tǒng)。
[0066] 在本申請實施例中,通過在Linux內(nèi)核空間(Linux Kernel層)實現(xiàn)內(nèi)核驅(qū)動程 序(閃光燈驅(qū)動)和在用戶空間實現(xiàn)硬件抽象層接口,以向更上一層提供硬件訪問接口,即 為安卓系統(tǒng)的應(yīng)用框架層提供硬件服務(wù)。由于安卓系統(tǒng)的應(yīng)用程序是用Java語言編寫的, 硬件驅(qū)動程序是用C/C++語言來實現(xiàn)的,而Java提供了 JNI (Java Native Interface, Java 本地調(diào)用)方法調(diào)用,因此,在安卓系統(tǒng)中,Java應(yīng)用程序可以通過JNI來調(diào)用硬件抽象層 接口。
[0067] 請參考圖2,本申請實施例中,將安卓系統(tǒng)的架構(gòu)分為五層。第一層201為Linux內(nèi) 核驅(qū)動層(Linux kernel),第二層202為硬件抽象層(HAL,Hardware Abstraction Layer), 第三層203、204為組件庫層203 (Libraries)和虛擬機層204 (Android Runtime),第四層 205為應(yīng)用框架層(Application Framework),第五層206為應(yīng)用程序?qū)樱ˋpplications)。 [0068] 基于圖2,請參考圖3,其示出了從另一角度對安卓系統(tǒng)的架構(gòu)的分析??蓪⒄麄€ 安卓系統(tǒng)分為硬件、內(nèi)核空間和用戶空間三個部分,其各自包括的構(gòu)架內(nèi)容如圖3所示。 [0069] 在本申請實施例中,將JNI層劃分到第三層中,JNI層為應(yīng)用框架層設(shè)計了一系列 接口函數(shù),而在這些接口函數(shù)的具體實現(xiàn)中,利用回調(diào)函數(shù)與硬件抽象層進行交互。
[0070] 需要說明的是,本申請實施例提供的控制閃光燈開關(guān)的方法也同樣適用于圖1所 示架構(gòu)的安卓系統(tǒng),本實施例中增加硬件抽象層的作用在于,為不具有標準Linux內(nèi)核驅(qū) 動層接口的硬件設(shè)備提供接入的路徑,將原本可讀性差的接口轉(zhuǎn)化成可讀性好的接口,提 供給上層程序調(diào)用。即硬件抽象層運行于Linux內(nèi)核驅(qū)動層之上,用于在Linux內(nèi)核驅(qū)動 層的支持下,為應(yīng)用框架層和JNI層提供對閃光燈控制的接口實現(xiàn)。
[0071] 圖1和圖2中各層的內(nèi)部框架為本領(lǐng)域技術(shù)人員熟知的,因此,本申請不對其進行 一一翻譯和說明。
[0072] 本申請實施例中,還利用緩沖單元將用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù)先存儲, 該緩沖單元內(nèi)存儲的數(shù)據(jù)為硬件設(shè)備驅(qū)動可直接讀取的,狀態(tài)數(shù)據(jù)存儲完畢后,再調(diào)用硬 件設(shè)備驅(qū)動,硬件設(shè)備驅(qū)動讀取保存在緩存單元中的狀態(tài)數(shù)據(jù),根據(jù)狀態(tài)數(shù)據(jù)控制硬件設(shè) 備動作的狀態(tài)。硬件設(shè)備驅(qū)動讀取緩存單元中的狀態(tài)數(shù)據(jù)是連續(xù)的,不會出現(xiàn)時間延遲、中 斷等現(xiàn)象,從而保證了數(shù)據(jù)傳輸?shù)臏蚀_性,同時也為高速數(shù)據(jù)傳輸提供了保證。
[0073] 本申請實施例中硬件設(shè)備可以為發(fā)光器件、震動器、攝像頭、傳感器或麥克風(fēng)。為 了便于對本申請進行說明,本申請實施例主要以硬件設(shè)備為發(fā)光器件(閃光燈)進行說明, 相應(yīng)的,硬件設(shè)備驅(qū)動為閃光燈驅(qū)動,狀態(tài)數(shù)據(jù)為時間數(shù)據(jù),硬件設(shè)備動作為閃光燈的開啟 或關(guān)閉。
[0074] 下面通過【具體實施方式】結(jié)合附圖對本申請作進一步詳細說明。
[0075] 請參考圖4,本實施例提供了一種操作系統(tǒng)中控制硬件設(shè)備的方法,包括下面步 驟:
[0076] 步驟401 :獲取原始數(shù)據(jù)。具體的,原始數(shù)據(jù)可以是用戶輸入的數(shù)據(jù),例如用戶輸 入的銀行卡賬號。在安卓系統(tǒng)中,可以由應(yīng)用程序?qū)荧@取原始數(shù)據(jù)。
[0077] 步驟402 :對原始數(shù)據(jù)進行編碼,以得到用于控制閃光燈開啟或關(guān)閉的時間數(shù)據(jù), 例如,控制閃光燈開5s、關(guān)2s、開3s……在安卓系統(tǒng)中,可以由應(yīng)用程序?qū)訉υ紨?shù)據(jù)進行 編碼。
[0078] 在某些實施例中,如果用戶直接輸入用于控制閃光燈開啟或關(guān)閉的時間數(shù)據(jù),即 原始數(shù)據(jù)便是時間數(shù)據(jù),此時則不需要進行編碼操作。
[0079] 閃光燈具體可以是電子設(shè)備中自身的光源,例如LED閃光燈;或者其他光源,例如 插接在手機上的光源,可以為激光發(fā)射器或者LED。
[0080] 獲取的原始數(shù)據(jù)通常為N進位制數(shù)據(jù),對原始數(shù)據(jù)進行編碼相當(dāng)于將該N進位制 數(shù)據(jù)編碼為電信號單元,具體如下:
[0081] 將N進位制數(shù)據(jù)按位依次轉(zhuǎn)換為與其對應(yīng)的電信號單元,該步驟包括:將N進位制 數(shù)據(jù)中每個不同的數(shù)字編碼為不同的電信號單元,電信號單元內(nèi)的高低電平持續(xù)時間段分 別為Til、Ti2···和Tij,i、j、N為自然數(shù),不同的電信號單元以分隔標志隔開,其中,本例的 電信號單元內(nèi)的高低電平并不默認為先高電平后低電平,也可以先低電平后高電平,高低 電平之間其分隔標志可以為電平的跳變,或者以持續(xù)時間段不同的高低電平為特征電平, 其分隔標志為不同于特征電平的基準電平。
[0082] 在一可選實施例中,可以對至少部分待編碼的N進位制數(shù)據(jù)編碼為狀態(tài)不同的電 平信號,按照電平信號大小分為多檔,不同檔表示N進位制數(shù)據(jù)中的不同數(shù)字。
[0083] 本步驟中,如果原始數(shù)據(jù)是未轉(zhuǎn)換為N進位制數(shù)據(jù)的數(shù)據(jù)時,需要先將原始數(shù)據(jù) 轉(zhuǎn)換為N進位制數(shù)據(jù)。
[0084] 本例中,Ti2、Ti3…和Tij與Til的運算值為預(yù)定值或預(yù)定范圍,這里的運算是指: Ti2、Ti3···和Tij與Til的比值、乘積、差、和、倒數(shù)、和/或算余數(shù)。
[0085] 本步驟中,以二進制數(shù)據(jù)為例,即當(dāng)N = 2時,將二進制數(shù)據(jù)0編碼為第一電信號 單元,第一電信號單元內(nèi)的高低電平持續(xù)時間段分別為T11和T12 ;將二進制數(shù)據(jù)1編碼為 第二電信號單元,第二電信號單元內(nèi)的高低電平持續(xù)時間段分別為T21和T22,其中,T11時 間段為預(yù)設(shè)時間,T12 = Tll,T21 = Tll,T22 = m*T21,m為設(shè)定的系數(shù);或者,T11時間段 為預(yù)設(shè)時間范圍,T12、Til、T21在同一時間范圍內(nèi),T122 = m*21,m為設(shè)定的系數(shù),最終使 得T22與T21運算值不等于T12與T11運算值。
[0086] 電平的跳變是從高電平到低電平的跳變,在二進制數(shù)據(jù)中,一個電信號單元內(nèi)的 電平發(fā)生一次跳變,其中,高電平控制LED閃光燈發(fā)光,低電平控制LED閃光燈不發(fā)光;在其 他實施例中,可以采用相反的控制方式,如:電平發(fā)生為低電平到高電平的跳變,其中,低電 平控制LED閃光燈發(fā)光,高電平控制LED閃光燈不發(fā)光。
[0087] 步驟403 :將時間數(shù)據(jù)下發(fā)。在安卓系統(tǒng)中,具體可以為:應(yīng)用程序?qū)訉r間數(shù)據(jù) 下發(fā)到內(nèi)核驅(qū)動層。
[0088] 步驟404 :將下發(fā)的時間數(shù)據(jù)存儲到緩沖單元中。在安卓系統(tǒng)中,具體為:內(nèi)核驅(qū) 動層獲取到應(yīng)用程序?qū)酉掳l(fā)的時間數(shù)據(jù)后,將其存儲到設(shè)置在內(nèi)核驅(qū)動層的緩沖單元中。 緩沖單元內(nèi)存儲的數(shù)據(jù)為發(fā)光器件驅(qū)動可直接讀取的,緩沖單元起到暫時保存時間數(shù)據(jù)的 作用,其可以是緩沖寄存器。在其他實施例中,該緩沖單元也可以是利用現(xiàn)有的系統(tǒng)存儲單 元,通過程序的方法將該存儲單元分離出一部分或全部空間作為本實施例中的緩沖單元。
[0089] 緩沖寄存器又稱緩沖器,可分為輸入緩沖器和輸出緩沖器兩種。前者的作用是將 外設(shè)送來的數(shù)據(jù)暫時存放,以便處理器將它取走;后者的作用是用來暫時存放處理器送往 外設(shè)的數(shù)據(jù)。緩沖器可以使高速工作的CPU與慢速工作的外設(shè)起協(xié)調(diào)和緩沖作用,實現(xiàn)數(shù) 據(jù)傳送的同步。
[0090] 步驟405 :應(yīng)用框架層檢測獲取鏈接庫加載指令。
[0091 ] 在具體實施例中,一方面,安卓系統(tǒng)在啟動后會自動加載相應(yīng)的鏈接庫,因此,鏈 接庫加載指令可以是安卓系統(tǒng)在啟動后發(fā)出的一個指令;另一方面,鏈接庫只有在需要調(diào) 用相應(yīng)的功能實現(xiàn)函數(shù)時才需要進行加載,因此,鏈接庫加載指令可以是安卓系統(tǒng)檢測到 要進行功能實現(xiàn)函數(shù)的調(diào)用時發(fā)出的一個指令。
[0092] 步驟406 :應(yīng)用框架層加載鏈接庫,鏈接庫中包括用于控制閃光燈動作的功能實 現(xiàn)函數(shù)。
[0093] 功能實現(xiàn)函數(shù)為用于控制閃光燈動作的函數(shù),例如:
[0094] led_on
[0095] led_off
[0096] ......
[0097] 或者當(dāng)led的驅(qū)動信號需要由另外一個設(shè)備給出時,例如CPU芯片或攝像頭芯片 等,則需要先打開該設(shè)備,然后再驅(qū)動LED發(fā)光。這樣的優(yōu)勢是控制燈的模式更加靈活,例 如不同顏色、不同亮度等,則可以寫如下函數(shù):
[0098] led_deViCe_〇pen//打開閃光燈(可選,其功能是打開上述設(shè)備)
[0099] led_deViCe_cl〇Se//關(guān)閉閃光燈(可選,其功能是打開上述設(shè)備)
[0100] led_on
[0101] led_off
[0102] ......
[0103] 上述用于控制閃光燈動作的函數(shù)在定義完畢后,可以保存在.c文件里,.c文件中 是所有變量和函數(shù)的定義。
[0104] 步驟407 :應(yīng)用程序?qū)荧@取用于控制閃光燈動作的指令。該指令可以是用戶通過 安卓設(shè)備的人機交互界面(即應(yīng)用程序?qū)樱┹斎氲挠糜诳刂崎W光燈動作的指令;也可以是 應(yīng)用程序?qū)又幸丫幋a好的指令串,例如用"〇"和"1"表示的數(shù)據(jù)串,其中,"〇"表示閃光燈 關(guān)閉,"1"表示閃光燈打開。
[0105] 基于步驟301,步驟303中用于控制閃光燈動作的指令也可以作為鏈接庫加載指 令,用于控制閃光燈動作的指令即可理解為要進行功能實現(xiàn)函數(shù)的調(diào)用,因此,需要說明的 是,本實施例中提供的方法的步驟順序不應(yīng)該理解為對本申請的限定,在其他實施例中,其 步驟順序可以根據(jù)實際情況進行適當(dāng)?shù)淖儞Q。
[0106] 步驟408 :應(yīng)用程序?qū)訖z測鏈接庫是否加載完畢,如果否,則繼續(xù)待鏈接庫加載完 畢,如果是,則繼續(xù)步驟409。
[0107] 步驟409 :應(yīng)用程序?qū)诱{(diào)用鏈接庫中與用于控制閃光燈動作的指令對應(yīng)的功能實 現(xiàn)函數(shù)。
[0108] 應(yīng)用程序?qū)涌梢栽跈z測到鏈接庫全部加載完畢時調(diào)用功能實現(xiàn)函數(shù),或者在檢測 的同時即進行調(diào)用,或者可以設(shè)定預(yù)定的時間,當(dāng)滿足一定的預(yù)定時間時,便調(diào)用功能實現(xiàn) 函數(shù)。
[0109] 步驟410 :Linux內(nèi)核驅(qū)動層執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制閃光燈執(zhí)行相應(yīng) 的動作。
[0110] 本實施例中,Linux內(nèi)核驅(qū)動層中設(shè)置有閃光燈驅(qū)動,閃光燈驅(qū)動執(zhí)行被調(diào)用的功 能實現(xiàn)函數(shù),以控制閃光燈執(zhí)行相應(yīng)的動作。
[0111] 步驟411 :閃光燈驅(qū)動讀取保存在緩沖單元中的時間數(shù)據(jù)。
[0112] 步驟412 :閃光燈驅(qū)動讀取時間數(shù)據(jù)后,根據(jù)時間數(shù)據(jù)控制發(fā)光器件開啟或關(guān)閉 的時間。
[0113] 目前,閃光燈通常只用于作為camera的輔助硬件,只有在使用camera時,才有可 能會使用到閃光燈,因此,安卓系統(tǒng)中在使用閃光燈時,必須先調(diào)用camera driver,通過設(shè) 置camera參數(shù)來實現(xiàn)閃光燈的控制。即,對閃光燈的控制為間接控制的方式。
[0114] 在通過camera driver控制閃光燈時會出現(xiàn)時間延遲的問題,但對于目前閃光燈 的應(yīng)用范圍,該時間延遲不會影響正常的使用。然而,隨著光通信(例如可見光通信)的發(fā) 展,當(dāng)需要通過光進行信息傳輸時,由于光通信對傳輸速度及信息傳輸準確性的要求,上述 時間延遲的問題便逐漸突顯出來,并成為光通信發(fā)展的障礙之一。
[0115] 本實施例中,在安卓系統(tǒng)的Linux內(nèi)核驅(qū)動層中獨立設(shè)置有閃光燈驅(qū)動,在控制 閃光燈時,可以直接調(diào)用閃光燈驅(qū)動,其對閃光燈的控制方式為直接控制。可以避免在通過 camera driver控制閃光燈時出現(xiàn)的時間延遲。
[0116] 需要說明的是,步驟405-步驟409為本實施例提供的一種硬件設(shè)備驅(qū)動(閃光燈 驅(qū)動)調(diào)用方式,屬于直接控制的方式。在其他實施例中,可以采用現(xiàn)有技術(shù)中的任一種方 式調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動作,例如采用上述間接控制的方式。
[0117] JNI層定義有接口函數(shù)。應(yīng)用程序?qū)痈鶕?jù)JNI層的接口函數(shù)調(diào)用鏈接庫中與控制 閃光燈動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供Linux內(nèi)核驅(qū)動層的閃光燈驅(qū)動執(zhí)行相應(yīng)的 功能實現(xiàn)函數(shù)。
[0118] 當(dāng)操作系統(tǒng)為I0S系統(tǒng),則syscall為本地化接口處,可實現(xiàn)安卓系統(tǒng)中JNI層 定義有接口函數(shù)的作用,此處不再贅述。
[0119] JNI層的接口函數(shù)定義了 C/C++函數(shù)與JAVA函數(shù)的對應(yīng)關(guān)系,該接口函數(shù)采用 JNI方法將硬件抽象層的C/C++函數(shù)映射到應(yīng)用程序?qū)拥腏AVA函數(shù)上,以實現(xiàn)硬件抽象層 (采用C/C++語言)與應(yīng)用程序?qū)樱ú捎肑AVA語言)的交互。led_on為JAVA函數(shù),只有 通過JNI接口的映射才能調(diào)用底層的功能函數(shù),它會在JNI層中映射成名為java_全包名 _類名_led_on的本地函數(shù),再在函數(shù)里調(diào)用底層功能函數(shù)。
[0120] 安卓運行環(huán)境中的Dalvik虛擬機在調(diào)用一個成員函數(shù)時,如果發(fā)現(xiàn)該成員函數(shù) 是一個JNI方法,那么就會直接跳到它的地址去執(zhí)行。即,JNI方法是直接在本地操作系統(tǒng) 上執(zhí)行的,而不是由Dalvik虛擬機解釋器執(zhí)行。因此,JNI方法是安卓應(yīng)用程序與本地操 作系統(tǒng)直接進行通信的一個手段,通過JNI方法使得通信更加高效。
[0121] 優(yōu)選的,JNI層保存有功能實現(xiàn)函數(shù)實例化后的地址,以便于JNI層直接調(diào)用功能 實現(xiàn)函數(shù)。實例化是指在面向?qū)ο蟮木幊讨?,用類(Class)創(chuàng)建對象的過程。例如:在閃光 燈的控制過程中,將閃光燈動作作為類,將開啟閃光燈、關(guān)閉閃光燈等具體的功能實現(xiàn)函數(shù) 創(chuàng)建為對象。該對象的創(chuàng)建過程,即為實例化。該對象創(chuàng)建完后會有一對應(yīng)的地址,JNI層 保存該地址后,在后續(xù)調(diào)用該功能實現(xiàn)函數(shù)時,即可以根據(jù)該地址快速查詢到相應(yīng)的對象, 而不需要先檢索該功能實現(xiàn)函數(shù)對應(yīng)的類。
[0122] 本實施例中,在硬件抽象層定義有下面三個結(jié)構(gòu)體:
[0123] struct hw_module_t ;//模塊類型:每一個硬件模塊的必須申明一個hal_ module_info_sym的數(shù)據(jù)結(jié)構(gòu)體,該結(jié)構(gòu)體的第一個成員必須是以hw_module_t為數(shù)據(jù)的 結(jié)構(gòu)體。
[0124] struct hw_module_methods_t ;//模塊方法:該結(jié)構(gòu)體僅提供一個打開特殊設(shè)備 的open函數(shù)的接口,其傳入?yún)?shù)為"hw_module_t,id"和"w_device_t",該函數(shù)用于初始 化hw_device_t的各個成員。
[0125] strcut hw_device_t.//設(shè)備類型:對于每一個設(shè)備數(shù)據(jù)結(jié)構(gòu)體都必須以該結(jié)構(gòu) 體開頭,該結(jié)構(gòu)體是所有設(shè)備的引導(dǎo)線,在該結(jié)構(gòu)體之后才是每一個設(shè)備自己的數(shù)據(jù)。
[0126] 本實施例中,在定義硬件模塊類型結(jié)構(gòu)體時,硬件抽象層規(guī)定不能直接使用hw_ module_t結(jié)構(gòu)體,需要做一個繼承,即在該結(jié)構(gòu)體外再套一層結(jié)構(gòu)體,但hw_module_t結(jié)構(gòu) 體必須是該結(jié)構(gòu)體的第一個成員變量數(shù)據(jù)類型,以方便兩者之間的強制轉(zhuǎn)換。其部分程序 代碼可參考如下: struct led niodule t
[0127] { striict liw module t common;
[0128] struct led-control-device-t { struct hw device t common; ini (:f:sei on)(struct led control device t *de\, iiit32 t led); int (^set oif)(struct led control de^ ice t :' de\; int32 t led); 1; stnict led control coiitext t { struct led-control-device-t device; I;
[0129] 定義結(jié)構(gòu)體的作用:把相關(guān)的變量與功能打包在一起,代碼進行封裝,以避免隨意 被更改。結(jié)構(gòu)體是一種優(yōu)選的方式,并不是必須的。
[0130] 結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。結(jié)構(gòu)體用來 封裝一些屬性、參數(shù)等值(即數(shù)據(jù)成員),以組成新的類型,封裝后使得該屬性、參數(shù)等值可 以被多次利用。
[0131] 對于閃光燈驅(qū)動,其定義的結(jié)構(gòu)體可以包括閃光燈亮度、閃光燈開/關(guān)時間等,而 亮度值、開/關(guān)時間則作為數(shù)據(jù)成員被封裝在相應(yīng)類別的結(jié)構(gòu)體中。另外,對于采用C++定 義的結(jié)構(gòu)體,其數(shù)據(jù)成員還可以為函數(shù),不僅可以用于描述對象的狀態(tài),還可以用于描述對 象的行為,例如控制閃光燈開/關(guān)的函數(shù)LED_0N,LED_0FF,LED_DEVICE_0PEN,LED_DEVICE_ CLOSE,它們分別對應(yīng)前述的 led_on,led_off,led_device_open,led_device_close 函數(shù)。
[0132] 在某些實施例中,時間數(shù)據(jù)為一數(shù)組。閃光燈驅(qū)動根據(jù)時間數(shù)據(jù)控制閃光燈開啟 或關(guān)閉的時間,具體為:發(fā)光器件驅(qū)動按照數(shù)組中數(shù)據(jù)元素的順序控制閃光燈開啟或關(guān)閉 的時間。當(dāng)然,在其他實施例中,時間數(shù)據(jù)的格式也可以采用現(xiàn)有技術(shù)中其他可行的方式。
[0133] 本實施例提供操作系統(tǒng)中控制閃光燈的方法中,利用緩沖單元將用于控制閃光燈 開啟或關(guān)閉的時間數(shù)據(jù)先存儲,時間數(shù)據(jù)存儲完畢后,再調(diào)用發(fā)光器件驅(qū)動,閃光燈驅(qū)動讀 取保存在緩存器中的時間數(shù)據(jù),根據(jù)時間數(shù)據(jù)控制閃光燈開啟或關(guān)閉的時間。閃光燈驅(qū)動 讀取緩存器中的時間數(shù)據(jù)是連續(xù)的,不會出現(xiàn)時間延遲現(xiàn)象,從而保證了數(shù)據(jù)傳輸?shù)臏蚀_ 性,同時也為光通信的高速數(shù)據(jù)傳輸提供了保證。
[0134] 需要說明的是,本實施例中的操作系統(tǒng)可以是安卓系統(tǒng)、Blackberry 0S系統(tǒng)、 windows phone系統(tǒng)、windows mobile系統(tǒng)、I0S系統(tǒng)、Mac 0S系統(tǒng)等,雖然各個系統(tǒng)存在 著差異,但為了實現(xiàn)本實施例控制發(fā)光器件的方法,在本發(fā)明的構(gòu)思下,本領(lǐng)域技術(shù)人員可 以通過適當(dāng)?shù)母淖円赃_到目的。
[0135] 在某些實施例中,狀態(tài)數(shù)據(jù)還可以是用于控制閃光燈發(fā)光強度的強度數(shù)據(jù)。在其 他實施例中,如果硬件設(shè)備為震動器,相應(yīng)的,狀態(tài)數(shù)據(jù)也可以是用于控制震動器震動強度 的強度數(shù)據(jù)。對于其他硬件設(shè)備,其實現(xiàn)原理與閃光燈的實現(xiàn)原理一致,本實施例不再贅 述。
[0136] 請參考圖5,對應(yīng)于本實施例提供的操作系統(tǒng)中控制硬件設(shè)備的方法,本實施例還 提供了一種操作系統(tǒng)中控制硬件設(shè)備的模塊,包括狀態(tài)數(shù)據(jù)獲取單元501、傳輸單元502、 緩沖單元503、加載單元504、檢測單元505、調(diào)用單元506、第一執(zhí)行單元508和第二執(zhí)行單 元 507。
[0137] 狀態(tài)數(shù)據(jù)獲取單元501用于獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù)。
[0138] 傳輸單元502用于將狀態(tài)數(shù)據(jù)下發(fā)。
[0139] 緩沖單元503用于存儲傳輸單元502下發(fā)的狀態(tài)數(shù)據(jù)。
[0140] 第一執(zhí)行單元508用于調(diào)用硬件設(shè)備驅(qū)動,并控制硬件設(shè)備驅(qū)動讀取保存在緩沖 單元503中的狀態(tài)數(shù)據(jù),根據(jù)該狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài)。
[0141] 加載單元504用于獲取鏈接庫加載指令,并加載鏈接庫,鏈接庫中包括用于控制 硬件設(shè)備動作的功能實現(xiàn)函數(shù)。
[0142] 檢測單元505用于獲取控制硬件設(shè)備動作的指令。
[0143] 調(diào)用單元506用于調(diào)用鏈接庫中與控制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函 數(shù)。
[0144] 第二執(zhí)行單元507用于控制硬件設(shè)備驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬 件設(shè)備執(zhí)行相應(yīng)的動作。
[0145] 在具體實施例中,狀態(tài)數(shù)據(jù)獲取單元501還包括編碼子單元5010,用于獲取原始 數(shù)據(jù),對原始數(shù)據(jù)編碼后得到狀態(tài)數(shù)據(jù)。
[0146] 在具體實施例中,硬件設(shè)備為發(fā)光器件、震動器、攝像頭、傳感器或麥克風(fēng)。
[0147] 在具體實施例中,硬件設(shè)備為發(fā)光器件時,硬件設(shè)備驅(qū)動為發(fā)光器件驅(qū)動,狀態(tài)數(shù) 據(jù)為表示時間數(shù)據(jù)的數(shù)組;第一執(zhí)行單元508控制硬件設(shè)備驅(qū)動根據(jù)狀態(tài)數(shù)據(jù)控制硬件設(shè) 備的狀態(tài)時:第一執(zhí)行單元508控制發(fā)光器件驅(qū)動按照數(shù)組中數(shù)據(jù)元素的順序控制發(fā)光器 件開啟或關(guān)閉的時間。
[0148] 在具體實施例中,狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)、亮度數(shù)據(jù)或強度數(shù)據(jù)的數(shù)組。
[0149] 在具體實施例中,操作系統(tǒng)為安卓系統(tǒng)、Blackberry 0S系統(tǒng)、windows phone系 統(tǒng)、windows mobile系統(tǒng)、I0S系統(tǒng)或Mac 0S系統(tǒng)。
[0150] 在具體實施例中,當(dāng)操作系統(tǒng)為安卓系統(tǒng)時,安卓系統(tǒng)的內(nèi)核驅(qū)動層中設(shè)置有硬 件設(shè)備的驅(qū)動,第二執(zhí)行單元507用于控制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù), 以控制硬件設(shè)備執(zhí)行相應(yīng)的動作;或者,當(dāng)操作系統(tǒng)為I0S系統(tǒng)時,I0S系統(tǒng)的核心系統(tǒng)層 中設(shè)置有硬件設(shè)備的驅(qū)動,第二執(zhí)行單元507用于控制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能 實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作。
[0151] 在具體實施例中,當(dāng)操作系統(tǒng)為安卓系統(tǒng)時,安卓系統(tǒng)的架構(gòu)還包括JNI層,JNI 層定義有相應(yīng)的JNI接口函數(shù);調(diào)用單元506用于根據(jù)接口函數(shù)調(diào)用鏈接庫中與控制硬件 設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實 現(xiàn)函數(shù);或者,操作系統(tǒng)為I0S系統(tǒng)時,則利用LibSystem庫訪問核心系統(tǒng)層提供的接口函 數(shù);調(diào)用單元506用于根據(jù)接口函數(shù)調(diào)用鏈接庫中與控制硬件設(shè)備動作的指令對應(yīng)的功能 實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實現(xiàn)函數(shù)。
[0152] 在具體實施例中,JNI層保存有功能實現(xiàn)函數(shù)實例化后的地址。
[0153] 在具體實施例中,當(dāng)操作系統(tǒng)為安卓系統(tǒng)時,安卓系統(tǒng)的架構(gòu)還包括硬件抽象層, 硬件抽象層運行于內(nèi)核驅(qū)動層之上,用于在內(nèi)核驅(qū)動層的支持下,為安卓系統(tǒng)的應(yīng)用框架 層和JNI層提供對硬件設(shè)備控制的接口實現(xiàn);或者,當(dāng)操作系統(tǒng)為I0S系統(tǒng)時,I0S系統(tǒng)還 包括核心服務(wù)層。
[0154] 需要說明的是,本實施例中,加載單元504、檢測單元505、調(diào)用單元506、第二執(zhí)行 單元507對硬件設(shè)備驅(qū)動(閃光燈驅(qū)動)調(diào)用方式屬于直接控制的方式。在其他實施例中, 第一執(zhí)行單元508可以采用現(xiàn)有技術(shù)中的任一種方式調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬 件設(shè)備動作,例如采用間接控制的方式。
[0155] 本實施例提供的操作系統(tǒng)中控制硬件設(shè)備的模塊與上述控制硬件設(shè)備的方法對 應(yīng),此處不再對其工作原理進行贅述。
[0156] 本申請實施例提供的操作系統(tǒng)中控制硬件設(shè)備的方法和模塊,在獲取到用于控制 硬件設(shè)備動作的狀態(tài)數(shù)據(jù)后,先將狀態(tài)數(shù)據(jù)下發(fā)并存儲到緩沖單元中,之后調(diào)用硬件設(shè)備 驅(qū)動,該硬件設(shè)備驅(qū)動讀取保存在緩沖單元中的狀態(tài)數(shù)據(jù),根據(jù)狀態(tài)數(shù)據(jù)控制硬件設(shè)備動 作的狀態(tài)。調(diào)用硬件設(shè)備驅(qū)動具體包括:調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動作; 或者,獲取鏈接庫加載指令,加載鏈接庫;在獲取用于控制硬件設(shè)備動作的指令后,調(diào)用鏈 接庫中與硬件設(shè)備動作指令對應(yīng)的功能實現(xiàn)函數(shù);之后執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控 制硬件設(shè)備執(zhí)行相應(yīng)的動作。本申請?zhí)峁┑牟僮飨到y(tǒng)中控制硬件設(shè)備的方法和模塊中,硬 件設(shè)備驅(qū)動控制硬件設(shè)備執(zhí)行相應(yīng)的動作為直接控制方式,另外,由于狀態(tài)數(shù)據(jù)存儲在緩 沖單元中,硬件設(shè)備驅(qū)動被調(diào)用后,便直接讀取存儲在緩沖單元中的狀態(tài)數(shù)據(jù),該讀取過程 是連續(xù)的,避免了硬件設(shè)備驅(qū)動在驅(qū)動硬件設(shè)備動作的過程中出現(xiàn)中斷、延遲等現(xiàn)象,從而 提高了數(shù)據(jù)傳輸?shù)臏蚀_性,并為高速數(shù)據(jù)傳輸提供了保證。
[0157] 本領(lǐng)域技術(shù)人員可以理解,上述實施方式中各種方法的全部或部分步驟可以通過 程序來指令相關(guān)硬件完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包 括:只讀存儲器、隨機存取存儲器、磁盤或光盤等。
[0158] 以上內(nèi)容是結(jié)合具體的實施方式對本申請所作的進一步詳細說明,不能認定本申 請的具體實施只局限于這些說明。對于本申請所屬【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫 離本申請發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換。
【權(quán)利要求】
1. 一種操作系統(tǒng)中控制硬件設(shè)備的方法,其特征在于,包括: 獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù); 將所述狀態(tài)數(shù)據(jù)下發(fā)并存儲到緩沖單元中; 調(diào)用硬件設(shè)備驅(qū)動,所述硬件設(shè)備驅(qū)動讀取保存在緩沖單元中的狀態(tài)數(shù)據(jù),根據(jù)所述 狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài); 其中所述調(diào)用硬件設(shè)備驅(qū)動具體包括:調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動 作;或者, 獲取鏈接庫加載指令,加載鏈接庫,所述鏈接庫中包括用于控制硬件設(shè)備動作的功能 實現(xiàn)函數(shù); 獲取用于控制硬件設(shè)備動作的指令; 調(diào)用所述鏈接庫中與所述控制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù); 執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作。
2. 如權(quán)利要求1所述的方法,其特征在于,獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù),具 體為:獲取原始數(shù)據(jù),對原始數(shù)據(jù)編碼后得到所述狀態(tài)數(shù)據(jù)。
3. 如權(quán)利要求1所述的方法,其特征在于,所述硬件設(shè)備為發(fā)光器件、震動器、攝像頭、 傳感器或麥克風(fēng)。
4. 如權(quán)利要求3所述的方法,其特征在于,所述硬件設(shè)備為發(fā)光器件時,所述硬件設(shè)備 驅(qū)動為發(fā)光器件驅(qū)動,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)的數(shù)組;所述硬件設(shè)備驅(qū)動根據(jù)所述 狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài),具體為:發(fā)光器件驅(qū)動按照所述數(shù)組中數(shù)據(jù)元素的順 序控制發(fā)光器件開啟或關(guān)閉的時間。
5. 如權(quán)利要求1所述的方法,其特征在于,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)、亮度數(shù)據(jù)或 強度數(shù)據(jù)的數(shù)組。
6. 如權(quán)利要求1所述的方法,其特征在于,所述操作系統(tǒng)為安卓系統(tǒng)、Blackberry 0S 系統(tǒng)、windows phone 系統(tǒng)、windows mobile 系統(tǒng)、IOS 系統(tǒng)或 Mac OS 系統(tǒng)。
7. 如權(quán)利要求1-6任一項所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所 述安卓系統(tǒng)的內(nèi)核驅(qū)動層中設(shè)置有所述硬件設(shè)備的驅(qū)動,所述硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用 的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作;或者, 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng),所述I0S系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè)備的驅(qū) 動,所述硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作。
8. 如權(quán)利要求7所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓系 統(tǒng)的JNI層定義有相應(yīng)的JNI接口函數(shù); 獲取鏈接庫加載指令,加載鏈接庫后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬 件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能 實現(xiàn)函數(shù);或者, 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng)時,則利用LibSystem庫訪問核心系統(tǒng)層提供的接口函 數(shù); 獲取鏈接庫加載指令,加載鏈接庫后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬 件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函數(shù),以供核心系統(tǒng)層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能 實現(xiàn)函數(shù)。
9. 如權(quán)利要求8所述的方法,其特征在于,JNI層保存有功能實現(xiàn)函數(shù)實例化后的地 址。
10. 如權(quán)利要求8所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓 系統(tǒng)還包括硬件抽象層,所述安卓系統(tǒng)的硬件抽象層運行于內(nèi)核驅(qū)動層之上,用于在內(nèi)核 驅(qū)動層的支持下,為安卓系統(tǒng)的應(yīng)用框架層和JNI層提供對硬件設(shè)備控制的接口實現(xiàn);或 者 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng),所述IOS系統(tǒng)還包括核心服務(wù)層。
11. 一種操作系統(tǒng)中控制硬件設(shè)備的模塊,其特征在于,包括: 狀態(tài)數(shù)據(jù)獲取單元,用于獲取用于控制硬件設(shè)備動作的狀態(tài)數(shù)據(jù); 傳輸單元,用于將所述狀態(tài)數(shù)據(jù)下發(fā); 緩沖單元,用于存儲傳輸單元下發(fā)的狀態(tài)數(shù)據(jù); 第一執(zhí)行單元,用于調(diào)用硬件設(shè)備驅(qū)動,并控制所述硬件設(shè)備驅(qū)動讀取保存在緩沖單 元中的狀態(tài)數(shù)據(jù),根據(jù)所述狀態(tài)數(shù)據(jù)控制硬件設(shè)備動作的狀態(tài); 第一執(zhí)行單元調(diào)用硬件設(shè)備驅(qū)動時,調(diào)用已有的硬件設(shè)備驅(qū)動,以控制硬件設(shè)備動作; 或者,所述操作系統(tǒng)中控制硬件設(shè)備的模塊還包括: 加載單元,用于獲取鏈接庫加載指令,并加載鏈接庫,所述鏈接庫中包括用于控制硬件 設(shè)備動作的功能實現(xiàn)函數(shù); 檢測單元,用于獲取控制硬件設(shè)備動作的指令; 調(diào)用單元,用于調(diào)用所述鏈接庫中與所述控制硬件設(shè)備動作的指令對應(yīng)的功能實現(xiàn)函 數(shù); 第二執(zhí)行單元,用于控制硬件設(shè)備驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備 執(zhí)行相應(yīng)的動作。
12. 如權(quán)利要求11所述的模塊,其特征在于,所述狀態(tài)數(shù)據(jù)獲取單元還包括編碼子單 元,用于獲取原始數(shù)據(jù),對原始數(shù)據(jù)編碼后得到所述狀態(tài)數(shù)據(jù)。
13. 如權(quán)利要求11所述的模塊,其特征在于,所述硬件設(shè)備為發(fā)光器件、震動器、攝像 頭、傳感器或麥克風(fēng)。
14. 如權(quán)利要求13所述的模塊,其特征在于,所述硬件設(shè)備為發(fā)光器件時,所述硬件設(shè) 備驅(qū)動為發(fā)光器件驅(qū)動,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)的數(shù)組;所述第一執(zhí)行單元控制硬 件設(shè)備驅(qū)動根據(jù)所述狀態(tài)數(shù)據(jù)控制硬件設(shè)備的狀態(tài)時:第一執(zhí)行單元控制發(fā)光器件驅(qū)動按 照所述數(shù)組中數(shù)據(jù)元素的順序控制發(fā)光器件開啟或關(guān)閉的時間。
15. 如權(quán)利要求11所述的模塊,其特征在于,所述狀態(tài)數(shù)據(jù)為表示時間數(shù)據(jù)、亮度數(shù)據(jù) 或強度數(shù)據(jù)的數(shù)組。
16. 如權(quán)利要求11所述的模塊,其特征在于,所述操作系統(tǒng)為安卓系統(tǒng)、Blackberry OS 系統(tǒng)、windows phone 系統(tǒng)、windows mobile 系統(tǒng)、IOS 系統(tǒng)或 Mac OS 系統(tǒng)。
17. 如權(quán)利要求11-16任一項所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng) 時,所述安卓系統(tǒng)的內(nèi)核驅(qū)動層中設(shè)置有所述硬件設(shè)備的驅(qū)動,所述第二執(zhí)行單元用于控 制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動作;或者 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng)時,所述I0S系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè)備的 驅(qū)動,所述第二執(zhí)行單元用于控制硬件設(shè)備的驅(qū)動執(zhí)行被調(diào)用的功能實現(xiàn)函數(shù),以控制硬 件設(shè)備執(zhí)行相應(yīng)的動作。
18. 如權(quán)利要求17所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓 系統(tǒng)的架構(gòu)還包括JNI層,所述JNI層定義有相應(yīng)的JNI接口函數(shù); 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬件設(shè)備動作的指令對應(yīng) 的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實現(xiàn)函數(shù);或者 所述操作系統(tǒng)為IOS系統(tǒng)時,則利用LibSystem庫訪問核心系統(tǒng)層提供的接口函數(shù); 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫中與控制硬件設(shè)備動作的指令對應(yīng) 的功能實現(xiàn)函數(shù),以供內(nèi)核驅(qū)動層的硬件設(shè)備驅(qū)動執(zhí)行相應(yīng)的功能實現(xiàn)函數(shù)。
19. 如權(quán)利要求18所述的模塊,其特征在于,所述JNI層保存有功能實現(xiàn)函數(shù)實例化后 的地址。
20. 如權(quán)利要求18所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時,所述安卓 系統(tǒng)的架構(gòu)還包括硬件抽象層,所述硬件抽象層運行于內(nèi)核驅(qū)動層之上,用于在內(nèi)核驅(qū)動 層的支持下,為安卓系統(tǒng)的應(yīng)用框架層和JNI層提供對硬件設(shè)備控制的接口實現(xiàn);或者 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng)時,所述IOS系統(tǒng)還包括核心服務(wù)層。
【文檔編號】G06F9/44GK104267956SQ201410510111
【公開日】2015年1月7日 申請日期:2014年9月28日 優(yōu)先權(quán)日:2014年9月28日
【發(fā)明者】不公告發(fā)明人 申請人:深圳光啟創(chuàng)新技術(shù)有限公司