none
在HTC Touch Cruise P3651上 用RegistrySetDWORD等函式 撰寫手動背光調整的功能 RRS feed

  • 問題

  • 各位前輩好

    我要把一支寫在原本Dopod 900 wm5 上的調整背光的程式移到HTC Touch Cruise P3651 wm6 上執行

    我的開發環境是 VS 2005 , XP SP2 , WM 5.0 SDK , .NET 2.0 SP1

    利用VS 2005 MFC智慧型裝置 所開發

     

    背光的亮度等級分成10級

    在Dopod 900上可以正常執行(可以1級1級的調整背光亮度,漸漸變亮,漸漸變暗)

    如:

    Code Snippet

    //等級1

       // 調適感觀品質

       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"BrightNess", 1);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffBatt", 1);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"ACBrightNess", 1);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffAC", 1);

     

    //等級2

       // 調適感觀品質

       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"BrightNess", 2);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffBatt", 1);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"ACBrightNess", 2);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffAC", 1);

     

    ...

     

     

    但在 P3651 就不行了(亮度不能1級1級微調漸漸變暗,只有微調到低於等級3或2時直接轉為暗)

    而P3651 上內建的微調功能,背光等級確實有跟著做微調(設定 -> 系統 -> 夜光照明 的調整桿有調整)

     

    對於硬體或系統,較底層比較不了解,只知道從Dopod上轉移過來作業系統和硬體都不同而出現問題,但是不知道該如何解決

     

    我將我改變亮度的程式碼貼上

     

    Code Snippet

       // 調整裝置電力供應等級
       SetDevicePower(L"BKL1:", POWER_NAME, D4);
       SetDevicePower(L"BKL1:", POWER_NAME, D1);
      
       // 調適感觀品質
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"BrightNess", 7);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffBatt", 1);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"ACBrightNess", 7);
       RegistrySetDWORD(HKEY_CURRENT_USER, L"ControlPanel\\Backlight", L"OnOffAC", 1);


       // 觸發BackLightChangeEvent事件就可以使系統改變背光
       HANDLE hBL = CreateEvent(NULL, FALSE, FALSE, L"BackLightChangeEvent");
       if (hBL) {
        SetEvent(hBL);
        CloseHandle(hBL);
       }

     

     

     

    因為開發的設備是wm6 開發環境也需要升級到wm6 嗎?

    那是不是需要另外使用wm6 的函式?

     

    還有關於函式的問題

    SetDevicePower函式的

    PVOID pvDevice, "BK1:" 設備的device name要怎麼取得?

     

    RegistrySetDWORD函式的

    HKEY hKey,  HKEY_CURRENT_USER 這Key要怎麼去取得到?

    LPCTSTR pszSubKey, ControlPanel\\Backlight 這個 ControlPanel 要怎麼知道 是不是因設備而異嗎?
    LPCTSTR pszValueName, BrightNess、OnOffBatt、ACBrightNess 、OnOffAC...這些Name 要如何取得 也是因設備而異嗎?

     

    因為是寫嵌入式和C++的新手,對於一些函式使用的技巧不是很懂,和函式裡的參數要放入什麼

    如果前輩們有什麼好的建議和經驗,也希望可以分享

    2008年8月4日 下午 07:34

解答

  • 微調 Backlight 應該可以透過 compare registry 的方法去找出來

    BKL 是 Driver的 Prefix,

    BKL1: 代表 BLK driver index 1

    ControlPanel\\Backlight 是被MSFT規定的所以每台設備都會有

    HKEY_CURRENT_USER 的Root HKEY 是SDK 里面會宣告, 再某個Header Files中

    上面的資料有些是Driver的

    有些是API 的Registry

    不能微調應該是HTC現在用的 Backlight driver 經過修改

     

    另外基本上WM5的App. 開發環境可以正常的開發WM6的Application.

     

     

     

     

    2008年9月15日 上午 07:44