本發(fā)明實施例涉及機頂盒的技術領域,尤其涉及一種機頂盒強制待機的方法及裝置。
背景技術:
Android待機喚醒基本原理:當啟動一個應用程序時,可以申請一個wake_lock喚醒鎖,每申請成功之后都會在內(nèi)核中注冊一次,以通知系統(tǒng)內(nèi)核,現(xiàn)在已有鎖被申請,系統(tǒng)內(nèi)核的wake_lock_store將其加入紅黑樹中。當應用程序在某種情況下釋放wake_lock的時候,會注銷之前所申請的wake_lock。特別要注意的是:只要是系統(tǒng)中有一個wake_lock的時候,系統(tǒng)此時都不能進行睡眠。但此時各個模塊可以進行early_suspend。當系統(tǒng)中所有的wake_lock都被釋放之后,系統(tǒng)就會進入真正的kernel的睡眠狀態(tài)。
在系統(tǒng)啟動的時候會創(chuàng)建一個主喚醒鎖main_wake_lock,該鎖是內(nèi)核初始化并持有的一個WAKE_LOCK_SUSPEND屬性的非限時喚醒鎖。因此,系統(tǒng)正常工作時,將始終因為該鎖被內(nèi)核持有而無法進入睡眠狀態(tài)。即在不添加新鎖的情況下,只需將main_wake_lock解鎖,系統(tǒng)便可進入睡眠狀態(tài)。
目前有很多原因會導致用戶按下遙控器的待機鍵后機頂盒無法進入真機,其中最主要的原因就是應用或進程獲取了喚醒鎖,待機前沒有釋放,就導致機頂盒無法進入真待機,盒子不進入真待機的話功耗自然就會偏高,對用戶來說就是耗電。而且如果盒子長時間工作且未進入真待機還可能導致盒子溫度偏高;另外,元器件長時間工作也會使盒子有壽命損耗。
技術實現(xiàn)要素:
本發(fā)明實施例的目的在于提出一種機頂盒強制待機的方法及裝置旨在解決如何保證機頂盒能進入真待機的問題。
為達此目的,本發(fā)明實施例采用以下技術方案:
第一方面,一種機頂盒強制待機的方法,所述方法包括:
在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;
通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;
通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
優(yōu)選地,所述通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口,包括:
通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口。
優(yōu)選地,所述通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作,包括:
通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;
再向“/sys/power/wake_unlock”中寫入“force_suspend”字段。
優(yōu)選地,所述通過內(nèi)核層的第三強制待機接口中的待機函數(shù)進行所述強制待機操作,包括:
通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
若檢測到“/sys/power/wake_unlock”有字段寫入,則通過所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)。
優(yōu)選地,所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)之前,還包括:
通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;
若不存在,則不繼續(xù)操作。
優(yōu)選地,所述若檢測到“/sys/power/wake_unlock”有字段寫入,則調(diào)回所述內(nèi)核層中的wake_unlock_store函數(shù),包括:
若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機;
其中,所述強制待機函數(shù)用于在檢測wake_lock喚醒鎖時若有預設的全局強制待機標識則不檢測所述wake_lock喚醒鎖,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機。
優(yōu)選地,所述直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機之前,還包括:
設置所述內(nèi)核層的全局變量為真待機模式。
優(yōu)選地,所述方法還包括:
在系統(tǒng)進入所述真待機模式時,通過所述內(nèi)核層再調(diào)用power_suspend_late函數(shù)檢測所述wake_lock喚醒鎖是否存在;
如果所述wake_lock喚醒鎖存在,則喚醒所述系統(tǒng)。
第二方面,一種機頂盒強制待機的裝置,所述裝置包括:
增加模塊,用于在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
調(diào)用模塊,用于通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;
寫入模塊,用于通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;
待機模塊,用于通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
優(yōu)選地,所述調(diào)用模塊,具體用于:
通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口。
優(yōu)選地,所述寫入模塊,具體用于:
通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;
再向“/sys/power/wake_unlock”中寫入“force_suspend”字段。
優(yōu)選地,所述待機模塊,具體用于:
通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
若檢測到“/sys/power/wake_unlock”有字段寫入,則通過所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)。
優(yōu)選地,所述裝置還包括:
查找模塊,用于在所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)之前,通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;若不存在,則不繼續(xù)操作。
優(yōu)選地,所述待機模塊,還具體用于:
若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機;
其中,所述強制待機函數(shù)用于在檢測wake_lock喚醒鎖時若有預設的全局強制待機標識則不檢測所述wake_lock喚醒鎖,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機。
優(yōu)選地,所述裝置還包括:
設置模塊,用于直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機之前,設置所述內(nèi)核層的全局變量為真待機模式。
優(yōu)選地,所述裝置還包括:
喚醒模塊,用于在系統(tǒng)進入所述真待機模式時,通過所述內(nèi)核層再調(diào)用power_suspend_late函數(shù)檢測所述wake_lock喚醒鎖是否存在;如果所述wake_lock喚醒鎖存在,則喚醒所述系統(tǒng)。
本發(fā)明實施例提供一種機頂盒強制待機的方法及裝置,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。本發(fā)明中的機頂盒可以實現(xiàn)強制待機,只要按下電源鍵,不論當前是否有應用或者進程獲取了喚醒鎖,機頂盒都能進入真待機,從而確保機頂盒的功耗和使用壽命。
附圖說明
圖1是本發(fā)明實施例提供的一種機頂盒強制待機的方法的流程示意圖;
圖2是本發(fā)明實施例提供的一種機頂盒強制待機的方法示意圖;
圖3是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖;
圖4是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖;
圖5是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖;
圖6是本發(fā)明實施例提供的一種機頂盒強制待機的裝置的功能模塊示意圖。
具體實施方式
下面結合附圖和實施例對本發(fā)明實施例作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋本發(fā)明實施例,而非對本發(fā)明實施例的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明實施例相關的部分而非全部結構。
參考圖1,圖1是本發(fā)明實施例提供的一種機頂盒強制待機的方法的流程示意圖。
如圖1所示,所述機頂盒強制待機的方法包括:
步驟101,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
步驟102,通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;
優(yōu)選地,所述通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口,包括:
通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口。
步驟103,通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;
優(yōu)選地,所述通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作,包括:
通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;
再向“/sys/power/wake_unlock”中寫入“force_suspend”字段。
步驟104,通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
優(yōu)選地,所述通過內(nèi)核層的第三強制待機接口中的待機函數(shù)進行所述強制待機操作,包括:
通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
若檢測到“/sys/power/wake_unlock”有字段寫入,則調(diào)回所述內(nèi)核層中的wake_unlock_store函數(shù)。
優(yōu)選地,所述若檢測到“/sys/power/wake_unlock”有字段寫入,則調(diào)回所述內(nèi)核層中的wake_unlock_store函數(shù),包括:
若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機;
其中,所述強制待機函數(shù)用于在檢測wake_lock喚醒鎖時若有預設的全局強制待機標識則不檢測所述wake_lock喚醒鎖,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機。
具體的,如圖2所示,圖2是本發(fā)明實施例提供的一種機頂盒強制待機的方法示意圖。
在PowerManager中添加強制待機接口forcesuspend,該接口直接提供給上層應用和系統(tǒng)調(diào)用。
與其他接口例如reboot的調(diào)用流程一樣,forcesuspend的實現(xiàn)也在PowerManagerService中,最終通過jni調(diào)到hardware層的power.c中的force_suspend接口。
force_suspend接口先往“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,即進行關屏操作;然后往“/sys/power/wake_unlock”里面寫入“force_suspend”字段。
在內(nèi)核中實現(xiàn)一個接口force_suspend,該接口里面將suspend函數(shù)加入工作隊列并立即執(zhí)行。
一旦“/sys/power/wake_unlock”有字段寫入,內(nèi)核中wake_unlock_store函數(shù)最終會被回調(diào),這里在調(diào)用真正的wake_unlock前會它會先在紅黑數(shù)鏈表中尋找該鎖是否存在,如果不存在則直接返回,不繼續(xù)操作。所以,我們在這里加個判斷,如果傳進來的字段(即從“/sys/power/wake_unlock”中讀出來的字段)是“force_suspend”,則不用判斷鎖在紅黑數(shù)鏈表中的存在性,直接調(diào)用上一步實現(xiàn)的接口force_suspend,進入真待機。
當然,由于待機模式的不同,內(nèi)核中有個全局變量來控制待機模式,由于我們的強制待機屬于真待機,所以,在調(diào)用suspend前需要將其設置為真待機模式。
內(nèi)核中有多處檢測鎖的機制,即使在suspend函數(shù)中也不例外,所以還要改造suspend函數(shù):在force_suspend函數(shù)中設置一個全局強制待機標識,在suspend函數(shù)檢測鎖的地方新加一個判斷,一旦檢測到強制待機標識,就不檢測鎖,繼續(xù)往下執(zhí)行。
另外,在各項待機準備工作就緒即將進入系統(tǒng)待機的時候,內(nèi)核還會最后一次調(diào)用power_suspend_late函數(shù)檢測鎖的存在,如果有鎖,則喚醒系統(tǒng)。所以在這里也要通過上一步添加的強制待機標識新添加一個判斷來判斷否需要檢測鎖。
上述方式可以實現(xiàn)正常待機成功,驗證包括正常情況和異常情況,正常情況包括播放各種視頻時強制待機、包括各個界面操作時強制待機、插拔外設。異常情況包括通過應用獲取鎖后不釋放鎖而進行強制待機、通過應用循環(huán)獲取鎖而進行強制待機。
本發(fā)明實施例提供一種機頂盒強制待機的方法,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
參考圖3,圖3是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖。
如圖3所示,所述機頂盒強制待機的方法包括:
步驟301,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
步驟302,通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口;
步驟303,通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;再向“/sys/power/wake_unlock”中寫入“force_suspend”字段;
步驟304,通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
步驟305,通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;若不存在,則不繼續(xù)操作;
步驟306,若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機。
參考圖4,圖4是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖。
如圖4所示,所述機頂盒強制待機的方法包括:
步驟401,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
步驟402,通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口;
步驟403,通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;再向“/sys/power/wake_unlock”中寫入“force_suspend”字段;
步驟404,通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
步驟405,通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;若不存在,則不繼續(xù)操作;
步驟406,若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口;
步驟407,設置所述內(nèi)核層的全局變量為真待機模式;
步驟408,進入真待機。
參考圖5,圖5是本發(fā)明實施例提供的另一種機頂盒強制待機的方法的流程示意圖。
如圖5所示,所述機頂盒強制待機的方法包括:
步驟501,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
步驟502,通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口;
步驟503,通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;再向“/sys/power/wake_unlock”中寫入“force_suspend”字段;
步驟504,通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
步驟505,通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;若不存在,則不繼續(xù)操作;
步驟506,若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機;
步驟507,在系統(tǒng)進入所述真待機模式時,通過所述內(nèi)核層再調(diào)用power_suspend_late函數(shù)檢測所述wake_lock喚醒鎖是否存在;如果所述wake_lock喚醒鎖存在,則喚醒所述系統(tǒng)。
參考圖6,圖6是本發(fā)明實施例提供的一種機頂盒強制待機的裝置的功能模塊示意圖。
如圖6所示,所述裝置包括:
增加模塊601,用于在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);
調(diào)用模塊602,用于通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;
優(yōu)選地,所述調(diào)用模塊602,具體用于:
通過所述架構層的PowerManagerService,再通過jni調(diào)到所述硬件層的power.c中的第二強制待機接口。
寫入模塊603,用于通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;
優(yōu)選地,所述寫入模塊603,具體用于:
通過所述第二強制接口向“/sys/class/amhdmitx/amhdmitx0/config”中寫入“video_off”字段,所述“video_off”字段用于關屏操作;
再向“/sys/power/wake_unlock”中寫入“force_suspend”字段。
待機模塊604,用于通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
優(yōu)選地,所述待機模塊604,具體用于:
通過所述內(nèi)核層檢測“/sys/power/wake_unlock”是否有字段寫入;
若檢測到“/sys/power/wake_unlock”有字段寫入,則通過所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)。
優(yōu)選地,所述待機模塊604,還具體用于:
若檢測到“/sys/power/wake_unlock”有“force_suspend”字段寫入,則不用在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機;
其中,所述強制待機函數(shù)用于在檢測wake_lock喚醒鎖時若有預設的全局強制待機標識則不檢測所述wake_lock喚醒鎖,直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機。
優(yōu)選地,所述裝置還包括:
查找模塊,用于在所述內(nèi)核層中的wake_unlock_store函數(shù)被回調(diào)之前,通過所述內(nèi)核層先在紅黑數(shù)鏈表中查找所述wake_lock喚醒鎖是否存在;若不存在,則不繼續(xù)操作。
優(yōu)選地,所述裝置還包括:
設置模塊,用于直接調(diào)用所述內(nèi)核層的第三強制待機接口,進入真待機之前,設置所述內(nèi)核層的全局變量為真待機模式。
優(yōu)選地,所述裝置還包括:
喚醒模塊,用于在系統(tǒng)進入所述真待機模式時,通過所述內(nèi)核層再調(diào)用power_suspend_late函數(shù)檢測所述wake_lock喚醒鎖是否存在;如果所述wake_lock喚醒鎖存在,則喚醒所述系統(tǒng)。
本發(fā)明實施例提供一種機頂盒強制待機的裝置,在架構層增加第一強制待機接口,所述第一強制待機接口用于連接上層應用和系統(tǒng);通過所述第一強制待機接口和預設調(diào)用方法調(diào)用硬件層的第二強制待機接口;通過所述第二強制待機接口在內(nèi)核層中寫入第一字段和第二字段,所述第一字段用于關屏操作,所述第二字段用于強制待機操作;通過所述內(nèi)核層的第三強制待機接口中的強制待機函數(shù)進行所述強制待機操作。
以上結合具體實施例描述了本發(fā)明實施例的技術原理。這些描述只是為了解釋本發(fā)明實施例的原理,而不能以任何方式解釋為對本發(fā)明實施例保護范圍的限制?;诖颂幍慕忉?,本領域的技術人員不需要付出創(chuàng)造性的勞動即可聯(lián)想到本發(fā)明實施例的其它具體實施方式,這些方式都將落入本發(fā)明實施例的保護范圍之內(nèi)。