亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bak_hw.cpp

?? SMDK2440 s3c2440 WINCE 5.00 bsp 編譯通過
?? CPP
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

*/

#include <windows.h>
#include <nkintr.h>

#include <pm.h>
#include "bsp.h"
#include "bak_hw.h"

//  Globals
const TCHAR szevtBacklightChange[] = TEXT("BackLightChangeEvent");
const TCHAR szevtPowerChanged[] = TEXT("PowerChangedEvent");
const TCHAR szevtUserInput[] = TEXT("UserInputEvent");


const TCHAR szregRootKey[] = TEXT("ControlPanel\\Backlight");
const TCHAR szregBatteryTimeout[] = TEXT("BatteryTimeout");
const TCHAR szregACTimeout[] = TEXT("ACTimeout");
const TCHAR szregBatteryAuto[] = TEXT("BacklightOnTap");
const TCHAR szregACAuto[] = TEXT("ACBacklightOnTap");

HANDLE   g_evtSignal[NUM_EVENTS];


//  Global structure
BLStruct g_BLInfo;

//
// Perform all one-time initialization of the backlight
//
BOOL 
BacklightInitialize()
{
    BOOL    bRet = TRUE;

	BL_PowerOn(TRUE);

    return bRet;
}


//  Utility function to read from registry for the parameters
void BL_ReadRegistry(BLStruct *pBLInfo)
{
    HKEY    hKey;
    LONG    lResult;
    DWORD   dwType;
    DWORD   dwVal;
    DWORD   dwLen;

    lResult = RegOpenKeyEx(HKEY_CURRENT_USER, szregRootKey, 0, KEY_ALL_ACCESS, &hKey);
    if(ERROR_SUCCESS == lResult) {
        dwType = REG_DWORD;
        dwLen = sizeof(DWORD);

        lResult = RegQueryValueEx(hKey, szregBatteryTimeout, NULL, &dwType, 
                                  (LPBYTE)&dwVal, &dwLen);
        if(ERROR_SUCCESS == lResult) {
            pBLInfo->m_dwBatteryTimeout = dwVal;
        }

        lResult = RegQueryValueEx(hKey, szregACTimeout, NULL, &dwType, (LPBYTE)&dwVal,
                                  &dwLen);
        if(ERROR_SUCCESS == lResult) {
            pBLInfo->m_dwACTimeout = dwVal;
        }

        lResult = RegQueryValueEx(hKey, szregBatteryAuto, NULL, &dwType, (LPBYTE)&dwVal,
                                  &dwLen);
        if(ERROR_SUCCESS == lResult) {
            pBLInfo->m_bBatteryAuto = (BOOL) dwVal;
        }

        lResult = RegQueryValueEx(hKey, szregACAuto, NULL, &dwType, (LPBYTE)&dwVal,
                                  &dwLen);
        if(ERROR_SUCCESS == lResult) {
            pBLInfo->m_bACAuto = (BOOL) dwVal;
        }

        RegCloseKey(hKey);
    }
    else {
        RETAILMSG(1, (TEXT("BAK : HKEY_CURRENT_USER\\%s key doesn't exist!\r\n"), szregRootKey));
    }
}


// uninitialize the backlight
void BL_Deinit()
{
    int i;

    //  Clean up
    for(i=0; i<NUM_EVENTS; i++) {
        if(g_evtSignal[i]) {
            CloseHandle(g_evtSignal[i]);
        }
    }
}


//
// initialize the backlight
//
BOOL BL_Init()
{
    //  Set up all the events we need. 
    g_evtSignal[0] = CreateEvent(NULL, FALSE, FALSE, szevtBacklightChange);
    g_evtSignal[1] = CreateEvent(NULL, FALSE, FALSE, szevtUserInput);
    g_evtSignal[BL_POWEREVT] = CreateEvent(NULL, FALSE, FALSE, szevtPowerChanged);

    if(!g_evtSignal[0] || !g_evtSignal[1] || !g_evtSignal[2]) {
        BL_Deinit();
        return FALSE;
    }
    return TRUE;
}


//
//  find out if AC power is plugged in
//
BOOL IsACOn()
{
//    if (g_pDriverGlobals->power.ACLineStatus == AC_LINE_ONLINE)
//		return TRUE;
//    else
		return FALSE;
}


//
// turn on/off the backlight
//
void BL_On(BOOL bOn)
{
    if(bOn) {
		if (g_BLInfo.m_dwStatus != BL_ON)
		{
			g_BLInfo.m_dwStatus = BL_ON;
		}
    }
    else {
		if (g_BLInfo.m_dwStatus != BL_OFF)
		{
			g_BLInfo.m_dwStatus = BL_OFF;
		}
    }
}


//
// restore power to the backlight
//
void BL_PowerOn(BOOL bInit)
{
    //
    //  Add power-on GPIO register setting
    //

    BL_On(TRUE);
}


// The backlight handling is done by a thread, which monitors those 
// three event and performs some actions based on the parameters specified
// in HKLM/ControlPanel/Backlight
//
// backlight service thread
//
DWORD BL_MonitorThread(PVOID pParms)
{
    DWORD   dwResult;
    DWORD   dwTimeout;
    
    //  Initialization stuff is here
    //
    //  Initialize the events
    //  Initialize the BLInfo data structure
    //  Those are default values. Modify them if necessary
    g_BLInfo.m_bACAuto = TRUE;
    g_BLInfo.m_bBatteryAuto = TRUE;
    g_BLInfo.m_dwBatteryTimeout = 20;   // 20 Seconds
    g_BLInfo.m_dwACTimeout = 60;       // 1 minutes

    //  Now read from the registry to see what they say
    BL_ReadRegistry(&g_BLInfo);

    //  Initialize BL
    if(!BL_Init()) {
        RETAILMSG(1, (TEXT("BL_Init() Failed! Exit from BL_MonitorThread!\r\n")));
        return 0;
    }
    while(1) {
		__try { 
			//  If we are using AC now, use m_dwACTimeout as the timeout
			//  otherwise, use m_dwBatteryTimeout
			if(IsACOn()) {
				dwTimeout = g_BLInfo.m_dwACTimeout * 1000;
			}
			else {
				dwTimeout = g_BLInfo.m_dwBatteryTimeout * 1000;
			}

			//  However, if user wants BL on all the time, we have to let him
			//  do that. Or if we come back here, and BL is off, we want to 
			//  put this thread to sleep until other event happens.
			if(dwTimeout == 0 || g_BLInfo.m_dwStatus == BL_OFF) {
				dwTimeout = INFINITE;
			}

			//  Now let's wait for either there is an update on registry, or
			//  there is user action on the device, or there is activity on
			//  AC power supply.
			dwResult = WaitForMultipleObjects(NUM_EVENTS, &g_evtSignal[0], FALSE, dwTimeout);

			//  If we are signaled by registry event
			if(WAIT_OBJECT_0 == dwResult) {
				//  All we need to do is to read from registry and update the tick count
				BL_ReadRegistry(&g_BLInfo);

				//  Always turn on the Backlight after a change to registry
				BL_On(TRUE);
			}
			else if(dwResult == WAIT_OBJECT_0+1) {
				//  User activity, depending on the situation, we may / may not update 
				//  the tick count

				if(IsACOn()) {
					if(g_BLInfo.m_bACAuto) {
						//  Turn on backlight
						BL_On(TRUE);
					}
				}
				else {
					if(g_BLInfo.m_bBatteryAuto) {
						BL_On(TRUE);
					}
				}  
			}
			else if(dwResult == WAIT_OBJECT_0+2) {
				//  When AC is plugged or un-plugged, we don't really need to do anything
				//  We continue the loop. The correct timeout value will be assigned at
				//  the top of the while loop.
			}
			else if(dwResult == WAIT_TIMEOUT) {
				//  Time out, let's turn the device off
				BL_On(FALSE);
			}
		}
		__except(EXCEPTION_EXECUTE_HANDLER){
			// do nothing
			RETAILMSG(1, (TEXT("an exception is raised in BL_MonitorThread... \r\n")));
		}
	}
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕乱码久久午夜不卡| 国产精品综合二区| 日韩一区二区三区精品视频| 国产日韩欧美制服另类| 免费欧美在线视频| 日韩欧美精品在线视频| 激情欧美日韩一区二区| 综合av第一页| 国产精品99久久久| 亚洲第一电影网| 国产精品乱子久久久久| 韩国v欧美v日本v亚洲v| 中文字幕在线播放不卡一区| 欧美一区二区三区在线观看| 国产99久久久国产精品| 亚洲aaa精品| 国产精品视频观看| 日韩欧美一区二区视频| 91日韩精品一区| 国产丶欧美丶日本不卡视频| 爽好多水快深点欧美视频| 国产人成亚洲第一网站在线播放| 欧美男男青年gay1069videost | 欧美三电影在线| 成人av在线影院| 国产福利一区二区三区视频在线| 老司机精品视频线观看86| 亚洲欧洲制服丝袜| 国产精品久99| 亚洲欧美国产高清| 欧美激情一区不卡| 欧美一区二区视频观看视频| 欧美日本一道本| 欧美高清性hdvideosex| 欧美精品日韩一区| 精品三级av在线| 精品裸体舞一区二区三区| 久久精品视频在线免费观看| 精品国产123| 国产精品成人网| 伊人色综合久久天天| 亚洲福利电影网| 另类小说欧美激情| 国产91丝袜在线观看| 95精品视频在线| 欧美三级一区二区| 精品国产网站在线观看| 国产精品毛片大码女人| 午夜av电影一区| 激情av综合网| 色网站国产精品| 色婷婷精品大在线视频| 欧美亚洲国产一区二区三区va | 亚洲自拍与偷拍| 水蜜桃久久夜色精品一区的特点| 国产在线精品国自产拍免费| av一本久道久久综合久久鬼色| 欧美日韩一区二区在线视频| 精品国产三级a在线观看| 国产精品国产三级国产专播品爱网| 亚洲在线视频一区| 国内精品伊人久久久久av影院| 99国产精品久| 91精品国产乱码| 亚洲欧美色图小说| 一区二区三区**美女毛片| 国产剧情av麻豆香蕉精品| 在线观看视频一区| 国产精品美女久久久久久久网站| 日韩黄色小视频| 在线免费观看不卡av| 国产精品久久久久久久久图文区 | 91精品欧美一区二区三区综合在 | 亚洲成年人影院| 一本色道久久综合亚洲精品按摩| www成人在线观看| 日本三级亚洲精品| 欧美专区日韩专区| 亚洲综合激情网| 欧美这里有精品| 亚洲国产精品久久人人爱| 91福利国产成人精品照片| 亚洲免费色视频| 在线免费观看视频一区| 亚洲精品国产成人久久av盗摄| 成人一道本在线| 自拍偷在线精品自拍偷无码专区| www.66久久| 伊人色综合久久天天| 91福利资源站| 免费国产亚洲视频| 精品奇米国产一区二区三区| 激情五月播播久久久精品| 精品欧美一区二区三区精品久久 | 欧美日韩一级片网站| 亚洲色图色小说| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久久久永久免费观看| 99久久夜色精品国产网站| 最新中文字幕一区二区三区| 日韩免费观看高清完整版| 久久精品国产澳门| 亚洲欧美日韩一区| 精品国内片67194| 欧美少妇xxx| 99这里只有久久精品视频| 美女一区二区在线观看| 亚洲综合区在线| 国产精品成人一区二区艾草| 日韩欧美精品在线视频| 欧美系列一区二区| 色诱亚洲精品久久久久久| 成人综合在线观看| 精品亚洲国内自在自线福利| 午夜精品一区二区三区免费视频| 国产精品乱码人人做人人爱| 久久综合资源网| 日韩欧美激情在线| 日韩欧美一区在线| 日韩欧美国产一区二区三区 | 久久国内精品自在自线400部| 一区二区三区免费网站| 亚洲精品国产高清久久伦理二区| 国产精品国产三级国产aⅴ原创 | 成人h精品动漫一区二区三区| 亚洲va韩国va欧美va| 亚洲综合激情另类小说区| 亚洲一区二区欧美日韩| 亚洲成a人v欧美综合天堂| 亚洲成av人片一区二区梦乃| 日韩电影在线一区二区| 日本不卡视频在线观看| 国产在线一区观看| 东方aⅴ免费观看久久av| 成人动漫在线一区| 91国偷自产一区二区三区成为亚洲经典 | 国产精品国产自产拍高清av| 国产精品毛片a∨一区二区三区| 亚洲人成7777| 日韩国产欧美在线观看| 狠狠色丁香婷综合久久| 国产成人综合精品三级| 91丝袜美腿高跟国产极品老师| 欧美综合天天夜夜久久| 欧美一区二区三区成人| 国产精品久久久久久久久免费桃花 | 日韩美女视频19| 国产欧美日产一区| 亚洲综合在线第一页| 五月综合激情网| 成人午夜看片网址| 欧美日韩卡一卡二| 国产精品网曝门| 图片区日韩欧美亚洲| 国产精品一区在线观看乱码 | 日韩欧美一卡二卡| 夜夜亚洲天天久久| 亚洲欧美一区二区三区孕妇| 成人免费在线播放视频| 日韩欧美国产三级电影视频| 精品国产人成亚洲区| 亚洲视频在线一区| 精品亚洲免费视频| 91精品国产色综合久久久蜜香臀| 久久精品视频一区| 久久疯狂做爰流白浆xx| 欧美久久免费观看| 亚洲黄色小说网站| 99久久精品国产麻豆演员表| 精品国产一区久久| 日韩精品每日更新| 欧美日韩精品三区| 亚洲超碰精品一区二区| 色综合久久天天综合网| 亚洲少妇中出一区| 在线国产电影不卡| 亚洲一级不卡视频| 欧美日韩国产首页| 亚洲自拍都市欧美小说| 欧美影院一区二区| 亚洲国产中文字幕| 欧美一区二区三区性视频| 日韩成人免费电影| 精品剧情在线观看| 国产真实乱偷精品视频免| 欧美r级电影在线观看| 国产精品综合一区二区三区| 中文字幕国产一区二区| 一本一道久久a久久精品| 亚洲一级片在线观看| 欧美精品黑人性xxxx| 精一区二区三区| 国产精品久久99| 欧美高清你懂得| 成人午夜视频免费看| 亚洲第一主播视频| 久久新电视剧免费观看| 色噜噜久久综合| 精品综合久久久久久8888| 亚洲色图视频网|