dapm_power_widgets是dapm機制的入口函式。dapm機制介紹見
dapm_power_one_widget
dapm_power_one_widget
-->dapm_widget_power_check
-->dapm_widget_set_power
dapm_up_seq 和 dapm_down_seq 陣列:定義了widget上下電的優先順序,值越小優先順序越高。
dapm_widget_power_check:呼叫widget的power_check()**函式決定其power狀態。不同型別widget有不同的power_check()**函式。判斷乙個widget是否上電或下電基於這個widget是否在完整音訊路徑上。見下面 dapm_generic_check_power()分析。
dapm_widget_set_power:遍歷widget的源path例項和目的path例項,如果path例項connect狀態為真,則更新相鄰widget的power狀態,把相鄰widget新增到dirty鍊錶,重新呼叫dapm_power_one_widget,把power狀態沿著源端方向和目的端方向更新到每個widget。最後把widget按照上下電優先順序新增到up_list和down_list鍊錶。
dapm_widget_update
僅僅只有配置widget kcontrols觸發dapm機制時才會呼叫此函式。此函式流程如下:
遍歷kcontrol相關的所有widget,呼叫每個widget的event()**函式,傳送snd_soc_dapm_pre_reg事件。
更新kcontrol暫存器值,設定音訊路徑。
遍歷kcontrol相關的所有widget,呼叫每個widget的event()**函式,傳送snd_soc_dapm_post_reg事件。
dapm_seq_run
dapm_seq_run
-->dapm_seq_run_coalesced
up_list和down_list儲存了需要上電和下電的widget,佇列元素越靠前,優先順序越高。
dapm_seq_run:遍歷up_list或者down_list鍊錶。把相同優先順序且相同reg且相同dapm context且相同subseq的widgets組織在一起,本來多次寫暫存器操作合併成一次寫暫存器操作。
dapm機制引發的dapm context的bias變化
dapm core為platform、codec、snd card的bias資訊以及set_bias_level()**定義了新的資料結構即dapm context。換句話說就是dapm context分為platform、codec、snd card。
在dapm機制入口函式裡,首先把所有的dapm context的target_bias_level設定為off狀態,在widget上下電檢查後,如果widget的power狀態是on,則把on狀態widget所屬的dapm context的target_bias_level設定為on狀態。強制把音效卡上的所有context的target_bias_level設定為相同狀態,要麼on要麼off。呼叫dapm_pre_sequence_async()函式觸發context朝off或prepare狀態轉換,up_list和down_list的widgets上下電後,呼叫dapm_post_sequence_async()函式觸發context朝on或standby狀態轉換。
dapm_generic_check_power
這個函式通過呼叫is_connected_input_ep()和is_connected_output_ep()檢查widget是否在完整音訊路徑上。
is_connected_input_ep()函式返回widget到input端點widget路徑的個數,is_connected_output_ep()函式返回widget到output端點widget路徑的個數。只有當到輸入端點和輸出端點的路徑都存在時,我們就認為這個widget在完整音訊路徑上,也意味著這個widget需要上電。
ContentProvider啟動流程分析(一)
本片部落格對應時序圖上的step1 5 下接第二篇contentprovider啟動流程分析二!作為安卓設計的四大元件之一,是跨程序共享資料的一把利器,所謂跨程序共享資料,通俗理解就是,應用程式a可以訪問操作應用程式b共享出來的資料,這些共享出來的資料一般都有其對應的uri 統一資源識別符號 那麼就...
專題分綱目錄 android 開機啟動流程分析
android 開機啟動流程分析 01 init之前啟動說明 android 開機啟動流程分析 02 init的啟動流程分析 android 開機啟動流程分析 03 init啟動中關鍵程序 uevent watchdog android 開機啟動流程分析 04 init啟動中關鍵服務 屬性服務 an...
二分模擬賽流程
確認資料是否完整 nan,型別異常 將string型別,換成category 使用onehot或者labelencoder 資料標準化 mirmaxscaler或者standardscaler 儲存資料 因為部分預處理過程會比較耗時,所以需要保留中間結果 一般來說,越新的模型效果越好 lightgb...