thinkpad t4x的風扇轉速在一般的情況下由bios負責自動調整,其實我們也可以通過讀寫嵌入式控制器的0x62、0x66號埠實現對其的手動控制,這可以用來解決某些bios不盡如人意所導致的問題,如抑制轉動雜音、預熱風扇電機等。*自程式設計控制風扇轉速具有一定危險性,可能損壞硬體,請謹慎使用!*
[常數定義]
#define ec_dataport 0x62 //控制埠號
#define ec_ctrlport 0x66 //資料埠號
#define ec_cmd_write 0x81 //寫指令位元組
#define tp_fan_contrl 0x2f //寫指令引數1,設定風扇轉速檔位
#define tp_fan_levels n //寫指令引數2,風扇檔位的具體取值
[設定步驟]
1. 輪詢控制埠,確保輸入、輸出緩衝區為空
2*. 向控制埠寫入乙個寫指令位元組,其值為ec_cmd_write
3. 輪詢控制埠,直到輸入緩衝區為空,確保寫指令位元組被取走
4*. 向資料埠寫入乙個位元組,該位元組為寫指令的第乙個引數,其值為tp_fan_contrl
5. 輪詢控制埠,直到輸入緩衝區為空,確保第乙個引數被取走
6*. 向資料埠寫入乙個位元組,該位元組為寫指令的第二個引數,其值為tp_fan_levels
7. 輪詢控制埠,直到輸入緩衝區為空,確保第二個引數被取走
8. 設定完畢,把耳朵趴在鍵盤上聽聽風扇的聲音吧!
[附加說明a]關於tp_fan_levels的取值
a. 從低速檔到高速檔,通常取值為0x0-0x7,0為風扇停轉
b. 特殊值0x80表示由thinkpad bios自動調節轉速,推薦值
c. 特殊值0x40表示風扇超高速運轉,某些機型不支援,可能會損壞風扇,慎用
d. 其他取值產生的結果要麼沒定義,要麼尚未確定,慎用
[附加說明b]檢驗輸入或輸出緩衝區為空的方式
#define ec_stat_obf 0x01 //輸出緩衝區滿標誌
#define ec_stat_ibf 0x02 //輸入緩衝區滿標誌
從控制埠中讀取出乙個dword,將其低位位元組分別與上述標誌位相與,若為0,則對應緩衝區為空,反之則緩衝區滿。
4x4矩陣求逆
最近學習自定義光柵化渲染器,在學習矩陣變換的時候,求矩陣的逆矩陣的時候遇到的一些問題,特記錄在此。typedef struct matrix3x3 type 3 3矩陣 matrix3x3,matrix3x3 ptr typedef struct matrix4x4 type 4 4矩陣 matri...
4X4矩陣鍵盤掃瞄程式
4x4矩陣鍵盤掃瞄 1.4根行線的gio均設為output,根列線的gio均設為input 2.4根行線的gio分別置為0111 1011 1101 1110,讀逐一讀取列線gio的值,可確定是哪乙個按鍵 電路圖如下 注意 1.圖中用作輸入的gio,一定要有乙個上拉電阻。2.晶元中的每乙個引腳是否用...
Unity 中的4X4矩陣
1 為什麼模型的變換是4x4而不是3x3的矩陣變換?我們知道,在空間裡的點的座標是vector3型別的,即是三維的,那為什麼要用4維矩陣才能進行旋轉平移和縮放呢?要解決這個問題就要從變換的本質來談起。我們知道,在變換裡分為線性變換和非線性變換,比如 我們対模型進行縮放,那麼縮放後的點座標是 pn a...