本申請涉及電子設備操作系統(tǒng)的開發(fā),具體涉及一種操作系統(tǒng)中控制硬件設備的方法和模塊。
背景技術:
目前,眾多的電子設備上都安裝有閃光燈,在很多情況下,用戶具有使用閃光燈的需求,因此,如何在電子設備上實現(xiàn)閃光燈的控制,是本領域技術人員正在研究的問題。以安卓系統(tǒng)為例,當需要控制閃光燈的開關時,通常是先調用camera driver,利用camera自帶的接口,通過設置camera的參數(shù),來實現(xiàn)閃光燈的開關。而這種對閃光燈的控制方式,屬于間接控制,其對閃光燈的調用具有一定的時間延遲。并且,這種控制方式在不同手機上表現(xiàn)不同,有的打開關閉閃光燈動作耗時比較小,閃爍速度比較快,時間短,效率高。而有的打開關閉閃光燈動作耗時比較長或長短不一,閃爍速度相對較慢,效率也較低。
隨著光通信的發(fā)展,例如可見光通信,需要使用電子設備上的閃光燈,通過控制閃光燈閃爍來實現(xiàn)信息的傳輸。而光通信的過程中,要求閃光燈閃爍的頻率較快,目前的閃光燈控制速度難以達到光通信的要求。
技術實現(xiàn)要素:
本申請?zhí)峁┝艘环N操作系統(tǒng)中控制硬件設備的方法和模塊,解決了操作系統(tǒng)中對硬件設備控制效率低的問題。
根據(jù)本申請的第一方面,本申請?zhí)峁┝艘环N操作系統(tǒng)中控制硬件設備的方法,包括:
查找獲取用于控制硬件設備動作的系統(tǒng)文件;
獲取用于修改所述系統(tǒng)文件的進程輸出碼流,所述進程輸出碼流包括用于控制硬件設備動作的編碼序列;
執(zhí)行所述進程輸出碼流以控制硬件設備根據(jù)所述編碼序列進行動作。
根據(jù)本申請的第二方面,本申請?zhí)峁┝艘环N操作系統(tǒng)中控制硬件設備的模塊,包括:
查找單元,用于查找獲取用于控制硬件設備動作的系統(tǒng)文件
碼流獲取單元,用于獲取用于修改所述系統(tǒng)文件的進程輸出碼流,所述進程輸出碼流包括用于控制硬件設備動作的編碼序列;
執(zhí)行單元,用于執(zhí)行所述進程輸出碼流以控制硬件設備根據(jù)所述編碼序列進行動作。
本申請?zhí)峁┑牟僮飨到y(tǒng)中控制硬件設備的方法和模塊,查找單元查找獲取用于控制硬件設備動作的系統(tǒng)文件;碼流獲取單元獲取用于修改系統(tǒng)文件的進程輸出碼流,進程輸出碼流包括用于控制硬件設備動作的編碼序列;執(zhí)行單元執(zhí)行進程輸出碼流以控制硬件設備根據(jù)編碼序列進行動作。本申請?zhí)峁┑牟僮飨到y(tǒng)中控制硬件設備的方法和模塊通過修改用于控制硬件設備動作的系統(tǒng)文件,來對硬件設備進行控制,從而提高硬件設備的控制效率。
附圖說明
圖1為本申請一種實施例中安卓系統(tǒng)中控制手機閃光燈的方法流程圖;
圖2為本申請一種實施例中安卓系統(tǒng)中控制手機閃光燈的模塊示意圖。
具體實施方式
本申請實施例提供了一種操作系統(tǒng)中控制硬件設備的方法和模塊,該操作系統(tǒng)可以是電子設備,例如手機、平板電腦等設備內的系統(tǒng),硬件設備可以是閃光燈,或其他發(fā)光器件,或震動器、攝像頭、傳感器、麥克風等。
為了便于對本申請進行說明,本申請實施例以硬件設備為手機閃光燈進行說明,相應的,硬件設備動作為閃光燈的開啟或關閉。
下面通過具體實施方式結合附圖對本申請作進一步詳細說明。
實施例一
請參考圖1,本實施例提供了一種安卓系統(tǒng)中控制手機閃光燈的方法,包括下面步驟:
步驟1.1:查找獲取用于控制手機閃光燈開啟或關閉的系統(tǒng)文件,通常,該系統(tǒng)文件為brightness系統(tǒng)文件,且其在手機內的存儲路徑通常為下面三種:
sys/class/leds/torch/brightness;
sys/class/leds/torch-light/brightness;
sys/class/leds/flashlight/brightness。
因此,本步驟中,可以直接查詢上述三個路徑,以查找到brightness系統(tǒng)文 件,在其他實施例中,也可以采用其他查找方法,例如,直接搜索整個手機存儲;或者在查詢上述三個路徑后,依然沒有查找到brightness系統(tǒng)文件,再搜索整個手機存儲。
步驟1.2:判斷當前用戶是否有修改brightness系統(tǒng)文件的權限,如果有,直接轉到步驟1.4,如果沒有,轉到步驟1.3。
步驟1.3:獲取修改brightness系統(tǒng)文件的權限,通常,可以直接獲取手機ROOT權限(超級用戶權限),例如,采用手機刷機工具ROOT手機,以得到修改brightness系統(tǒng)文件的權限。
步驟1.4:獲取用于修改brightness系統(tǒng)文件的進程輸出碼流,進程輸出碼流包括用于控制閃光燈動作的編碼序列。本實施例中,為提高閃光燈的控制效率,編碼序列采用NRZI編碼。
步驟1.5:進入DOS命令模式。
步驟1.6:執(zhí)行進程輸出碼流以控制閃光燈根據(jù)編碼序列進行動作,實現(xiàn)循環(huán)控制閃光燈的開和關。進程輸出碼流中采用ECHO命令來修改brightness系統(tǒng)文件,在其他實施例中,亦可以根據(jù)操作系統(tǒng)的不同,選擇不同的修改命令。
在編碼序列中修改brightness系統(tǒng)文件,實現(xiàn)打開和關閉閃光燈的方式如下:
Process p=Runtime.getRuntime().exec(“su”);//獲得最高權限并進入dos命令模式
DataOutputStream dos=new DataOutputStream(p.getOutputStream());//獲得進程輸出流
//把1寫入brightness文件打開閃光燈
dos.writeByte(“echo 1>/sys/class/leds/torch/brightness”+”\n”);
dos.flush();
//把0寫入brightness文件關閉閃光燈
dos.writeByte(“echo 0>/sys/class/leds/torch/brightness”+”\n”);
dos.flush();
//退出dos命令模式
dos.writeByte(“exit\n”);
dos.flush();
在完成對閃光燈的控制后,操作系統(tǒng)退出DOS命令模式。
步驟1.5中,可以是系統(tǒng)執(zhí)行預先設置的指令,以進入DOS命令模式;也可以是,進程輸出碼流包括進入DOS命令模式的指令,系統(tǒng)執(zhí)行進程輸出碼流時,進入DOS命令模式。
需要說明的是,在某些實施例中,如果手機已設定為當前用戶具有修改brightness系統(tǒng)文件的權限,則可以省略步驟1.2和步驟1.3,不對權限進行判斷。
實施例二
請參考圖2,本實施例提供了一種安卓系統(tǒng)中控制手機閃光燈的模塊,包括查找單元201、權限獲取單元202、碼流獲取單元203和執(zhí)行單元204。
查找單元201用于查找獲取用于控制手機閃光燈開啟或關閉的系統(tǒng)文件,通常,該系統(tǒng)文件為brightness系統(tǒng)文件,且其在手機內的存儲路徑通常為下面三種:
sys/class/leds/torch/brightness;
sys/class/leds/torch-light/brightness;
sys/class/leds/flashlight/brightness。
因此,查找單元201可以直接查詢上述三個路徑,以查找到brightness系統(tǒng)文件,在其他實施例中,也可以采用其他查找方法,例如,查找單元201直接搜索整個手機存儲;或者在查詢上述三個路徑后,依然沒有查找到brightness系統(tǒng)文件,再搜索整個手機存儲。
權限獲取單元202判斷當前用戶是否有修改brightness系統(tǒng)文件的權限,如果沒有,則獲取修改brightness系統(tǒng)文件的權限,通常,可以直接獲取手機ROOT權限(超級用戶權限),例如,權限獲取單元202執(zhí)行手機刷機工具ROOT手機,以得到修改brightness系統(tǒng)文件的權限。
碼流獲取單元203用于獲取用于修改brightness系統(tǒng)文件的進程輸出碼流,進程輸出碼流包括用于控制閃光燈動作的編碼序列。本實施例中,為提高閃光燈的控制效率,編碼序列采用NRZI編碼。
執(zhí)行單元204用于執(zhí)行進程輸出碼流以控制閃光燈根據(jù)編碼序列進行動作,實現(xiàn)循環(huán)控制閃光燈的開和關。進程輸出碼流中采用ECHO命令來修改brightness系統(tǒng)文件,在其他實施例中,亦可以根據(jù)操作系統(tǒng)的不同,選擇不同的修改命令。
在編碼序列中修改brightness系統(tǒng)文件,實現(xiàn)打開和關閉閃光燈的方式如下:
Process p=Runtime.getRuntime().exec(“su”);//獲得最高權限并進入dos命令模式
DataOutputStream dos=new DataOutputStream(p.getOutputStream());//獲得進程輸出流
//把1寫入brightness文件打開閃光燈
dos.writeByte(“echo 1>/sys/class/leds/torch/brightness”+”\n”);
dos.flush();
//把0寫入brightness文件關閉閃光燈
dos.writeByte(“echo 0>/sys/class/leds/torch/brightness”+”\n”);
dos.flush();
//退出dos命令模式
dos.writeByte(“exit\n”);
dos.flush();
執(zhí)行單元204還用于控制操作系統(tǒng)先進入DOS命令模式,再執(zhí)行進程輸出碼流以控制硬件設備動作;在完成對閃光燈的控制后,退出DOS命令模式。
執(zhí)行單元204可以是執(zhí)行預先設置的指令,以進入DOS命令模式;也可以是,進程輸出碼流包括進入DOS命令模式的指令,執(zhí)行進程輸出碼流時,進入DOS命令模式。
需要說明的是,在某些實施例中,如果手機已設定為當前用戶具有修改brightness系統(tǒng)文件的權限,則可以省略權限獲取單元202,不對權限進行判斷。
下面為使用本申請實施例提供的方法和模塊對型號分別為htc x515d和Nx505j的手機的閃光燈進行控制,與使用現(xiàn)有技術對其閃光燈進行控制的對比數(shù)據(jù)。
(1)htc x515d手機:
通過修改brightness系統(tǒng)文件來控制閃光燈開關,設置同一組編碼序列內開和關的時間為8ms,實際的延時是7~10ms;設置兩組編碼序列間開和關的時間為25ms,實際的延時是22~25ms。
通過camera來控制閃光燈開關,設置同一組編碼序列內開和關的時間為1ms,實際的延時是14~34ms;設置兩組編碼序列間開和關的時間為25ms,實際的延時是36~72ms。
(2)Nx505j手機:
通過修改brightness文件來控制閃光燈開關,設置同一組編碼序列內開和關的時間為8ms,實際的延時是7~9ms;設置兩組編碼序列間開和關的時間為25ms,實際的延時是24~26ms,總的發(fā)光時間是1.25s。
通過camera來控制閃光燈開關,設置同一組編碼序列內開和關的時間為1ms,實際的延時是14~45ms;設置兩組編碼序列間開和關的時間為25ms,實際的延時是36~72ms,總的發(fā)光時間是3.2s。
本申請實施例中,通過修改用于控制手機閃光燈開關的brightness系統(tǒng)文件來實現(xiàn)對手機閃光燈開關的準確控制,解決了手機閃光燈閃光速度過慢和閃光總時間過長的問題,即打開和關閉閃光燈動作所耗的時間比較短,可以減少到兩三毫秒。而使用camera打開關閉的動作一般需要消耗十幾毫秒,有的甚至三四十毫秒。
在使用手機閃光燈進行光通信時,要求能夠精準地控制閃光燈的發(fā)光時間,以發(fā)光時間長短代表對應的數(shù)字信號,從而實現(xiàn)數(shù)據(jù)的正確傳輸和正確解碼。通過本實施例提供的閃光燈控制方法和模塊,能夠較好地滿足光通信對閃光燈閃爍頻率和發(fā)光時間的要求。
本領域技術人員可以理解,上述實施方式中各種方法的全部或部分步驟可以通過程序來指令相關硬件完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括:只讀存儲器、隨機存取存儲器、磁盤或光盤等。
以上內容是結合具體的實施方式對本申請所作的進一步詳細說明,不能認定本申請的具體實施只局限于這些說明。對于本申請所屬技術領域的普通技術人員來說,在不脫離本申請發(fā)明構思的前提下,還可以做出若干簡單推演或替換。