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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? battif.c

?? realtek562x系列驅動源碼。wince
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// 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 module contains a stub implementation of the battery PDD.  OEMs
// that want to support the battery APIs on their platform can copy this
// file to their platform and link it into their own version of the power
// manager DLL.
//
// If the platform-specific power manager provides its own version of these
// entry points, this module will not be pulled into the link map from
// the pm_battapi library.
//
// To simplify testing the behavior of battery-sensitive applications on
// platforms (like CEPC or EMULATOR) that don't include physical batteries,
// this driver uses a memory-mapped file to store power information.  This
// file is shared with the SETSTUBBAT test program in 
// public\common\oak\drivers\battdrvr\test\setstubbat, which can update 
// arbitrary battery values.  Note that memory-mapped files require that
// the OS image include the "nkmapfile" component.
//

#include <battimpl.h>
#include <devload.h>
#include "battery.h"
#include "aclink.h"
#include "touch.h"

// typedefs for APIs that require the "nkmapfile" component
typedef WINBASEAPI HANDLE (WINAPI *PFN_CreateFileMappingW) (
    HANDLE hFile,
    LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
    DWORD flProtect,
    DWORD dwMaximumSizeHigh,
    DWORD dwMaximumSizeLow,
    LPCWSTR lpName
    );
typedef LPVOID (WINAPI *PFN_MapViewOfFile) (
    HANDLE hFileMappingObject,
    DWORD dwDesiredAccess,
    DWORD dwFileOffsetHigh,
    DWORD dwFileOffsetLow,
    DWORD dwNumberOfBytesToMap
    );
typedef BOOL (WINAPI *PFN_UnmapViewOfFile) (
    LPCVOID lpBaseAddress
    );


typedef BOOL (WINAPI * PFN_GwesPowerDown)(void);

#define MUTEX_TIMEOUT 5000

static PBATTERY_STATUS gpStatus;
static HANDLE ghMutex;
static HANDLE ghFileMap;
static PFN_CreateFileMappingW gpfnCreateFileMappingW;
static PFN_MapViewOfFile gpfnMapViewOfFile;
static PFN_UnmapViewOfFile gpfnUnmapViewOfFile;

#define BATTERY_ADC_USE_AUX3	TRUE
#define BATTERY_ADC_USE_AUX4	FALSE
static HANDLE gADCMutex;
//point to the AC97 read/write functions based on
//the needs for the power handler
BOOL (*g_pfnReadAc97)  (BYTE Offset, UINT16 * Data, BYTE DevId);
BOOL (*g_pfnWriteAc97) (BYTE Offset, UINT16 Data, BYTE DevId);
//----------------------------------------------------------------------------------------------------------------
//local function
//----------------------------------------------------------------------------------------------------------------
BOOL g_pfnWriteAc97Mask(BYTE Offset, unsigned short int Data,unsigned short int Mask)
{
	BOOL RetVal=FALSE;
	unsigned short CodecData;

	if(!Mask)
		return RetVal; 

	if(Mask!=0xFFFF)
	 {
		if(g_pfnReadAc97(Offset,&CodecData,DEV_BATTERY))
		{
			CodecData&=~Mask;
			CodecData|=(Data&Mask);
			RetVal=g_pfnWriteAc97(Offset,CodecData,DEV_BATTERY);
		}
	 }		
	else
	{
		RetVal=g_pfnWriteAc97(Offset,Data,DEV_BATTERY);
	}

	return RetVal;
}
//----------------------------------------------------------------------------------------------------------------
//
// Function ADC_Lock()
//
// Purpose: This function will ensure that the AC 97 Link Controller is being used mutually exclusively.
// Either a read of a write operation is in progress at anytime.
//
//----------------------------------------------------------------------------------------------------------------

short int ADC_Lock()
{	
	DWORD  retval;
	retval=WaitForSingleObject(gADCMutex, 3000);

	if(retval==WAIT_OBJECT_0)
    {
		return(TRUE);
    }
	else
	{	
        DEBUGCHK(1);
		return(FALSE);
	}
}

//----------------------------------------------------------------------------------------------------------------
//
// Function ADC_Unlock()
//
// Purpose: To Unlock the ADC .
//
//----------------------------------------------------------------------------------------------------------------

short int ADC_Unlock()
{
	ReleaseMutex(gADCMutex);
	
	return(TRUE);
}
//----------------------------------------------------------------------------------------------------------------
//
// Function Get_Battery_ADCValue()
//
// Purpose: Get ADC value from AUX
//
//----------------------------------------------------------------------------------------------------------------
BOOL Get_Battery_ADCValue(unsigned Battery_Channel,unsigned short int *ADCValue)
{

	unsigned short int BackupCB1,BackupCB2;
    unsigned short adccr,adcDataReg;
	BOOL noError=FALSE;

	if(!PrimaryCodecReady())
	{	
		return FALSE;
	}

	//backup touch panel control byte1 and control byte2
	g_pfnReadAc97(RT_TP_CTRL_BYTE1,&BackupCB1,DEV_BATTERY);
	g_pfnReadAc97(RT_TP_CTRL_BYTE2,&BackupCB2,DEV_BATTERY);

	//set touch panel control byte 1
    adccr=POW_TP_CTRL_3 | CB1_CR2 | CB1_CLK_DIV64 | CB1_DEL_8F;
	g_pfnWriteAc97(RT_TP_CTRL_BYTE1,adccr, DEV_BATTERY); 
 	//set touch panel control byte 2
	adccr =CB2_AUX_EN | (Battery_Channel == CB2_AUX_SEL_AUX3 ? CB2_AUX_SEL_AUX3 : CB2_AUX_SEL_AUX4);
	g_pfnWriteAc97(RT_TP_CTRL_BYTE2,adccr, DEV_BATTERY); //write to polling mode    
	//set Polling trigger
   	adccr |=CB2_POLL_TRIG;
  
	//start to ADC convert
   	if(g_pfnWriteAc97(RT_TP_CTRL_BYTE2,adccr, DEV_BATTERY))
   	{
	
		do
    	{
           if(!g_pfnReadAc97(RT_TP_CTRL_BYTE2,(UINT16 *) &adcDataReg,DEV_BATTERY))
			break;

       	} while (TEST(adcDataReg,CB2_POLL_TRIG));     

       	g_pfnReadAc97(RT_TP_INDICATION,(UINT16 *) &adcDataReg,DEV_BATTERY);
		
		if((adcDataReg&CB3_ADCSRC_AUX)==CB3_ADCSRC_AUX)
       	{
       		*ADCValue=adcDataReg & CB3_ADC_DATA;
       		noError=TRUE;
       	}	        		
    }	  
	
	//restore touch panel control 1 and control 2
	g_pfnWriteAc97(RT_TP_CTRL_BYTE1,BackupCB1, DEV_BATTERY); 
	g_pfnWriteAc97(RT_TP_CTRL_BYTE2,BackupCB2, DEV_BATTERY);    	 
   
    return(noError);

}


// this routine takes the battery mutex
DWORD
LockBattery(void)
{
    DWORD dwStatus;
    SETFNAME(_T("LockBattery"));

    DEBUGCHK(ghMutex != NULL);

    dwStatus = WaitForSingleObject(ghMutex, MUTEX_TIMEOUT);
    if(dwStatus == WAIT_OBJECT_0) {
        dwStatus = ERROR_SUCCESS;
    } else {
        dwStatus = GetLastError();
        DEBUGCHK(dwStatus != ERROR_SUCCESS);
    }
    
    DEBUGMSG(dwStatus != ERROR_SUCCESS && ZONE_WARN,
        (_T("%s: WaitForSingleObject() failed %d\r\n"), pszFname, 
        GetLastError()));
    DEBUGCHK(dwStatus == ERROR_SUCCESS);

    return dwStatus;
}

// this routine releases the battery mutex
DWORD
UnlockBattery(void)
{
    DWORD dwStatus = ERROR_SUCCESS;
    BOOL fOk;
    SETFNAME(_T("UnlockBattery"));

    DEBUGCHK(ghMutex != NULL);

    fOk = ReleaseMutex(ghMutex);
    if(!fOk) {
        dwStatus = GetLastError();
        DEBUGCHK(dwStatus != ERROR_SUCCESS);
    }
    
    DEBUGMSG(dwStatus != ERROR_SUCCESS && ZONE_WARN,
        (_T("%s: ReleaseMutex() failed %d\r\n"), pszFname, GetLastError()));
    DEBUGCHK(dwStatus == ERROR_SUCCESS);

    return dwStatus;
}

BOOL WINAPI 
BatteryPDDInitialize(LPCTSTR pszRegistryContext)
{
    BOOL fOk = TRUE;
    HKEY hk;
    SYSTEM_POWER_STATUS_EX2 sps;
    WORD wMainLevels = 3, wBackupLevels = 3;
    BOOL fSupportsChange = FALSE;
    SETFNAME(_T("BatteryPDDInitialize"));
    
    DEBUGCHK(ghMutex == NULL);
    DEBUGCHK(ghFileMap == NULL);
    DEBUGCHK(gpStatus == NULL);
    DEBUGCHK(pszRegistryContext != NULL);
	
    // intialize the battery status structure -- assume AC power, no battery info
    sps.ACLineStatus               = AC_LINE_ONLINE;
    sps.BatteryFlag                = BATTERY_FLAG_HIGH;
    sps.BatteryLifePercent         = BATTERY_PERCENTAGE_UNKNOWN;
    sps.Reserved1                  = 0;
    sps.BatteryLifeTime            = BATTERY_LIFE_UNKNOWN;
    sps.BatteryFullLifeTime        = BATTERY_LIFE_UNKNOWN;
    sps.Reserved2                  = 0;
    sps.BackupBatteryFlag          = BATTERY_FLAG_HIGH;
    sps.BackupBatteryLifePercent   = BATTERY_PERCENTAGE_UNKNOWN;
    sps.Reserved3                  = 0;
    sps.BackupBatteryLifeTime      = BATTERY_LIFE_UNKNOWN;
    sps.BackupBatteryFullLifeTime  = BATTERY_LIFE_UNKNOWN;
    sps.BatteryChemistry           = BATTERY_CHEMISTRY_UNKNOWN;
    sps.BatteryVoltage             = 0;
    sps.BatteryCurrent             = 0;
    sps.BatteryAverageCurrent      = 0;
    sps.BatteryAverageInterval     = 0;
    sps.BatterymAHourConsumed      = 0;
    sps.BatteryTemperature         = 0;
    sps.BackupBatteryVoltage       = 0;
	
    // get registry values, if present
    hk = OpenDeviceKey(pszRegistryContext);
    if(hk != NULL) {
        DWORD dwSize, dwStatus, dwType, dwValue;
        SYSTEM_POWER_STATUS_EX2 spstemp;
		
        // get the number of main levels
        dwSize = sizeof(dwValue);
        dwStatus = RegQueryValueEx(hk, _T("MainLevels"), NULL, &dwType, (LPBYTE) &dwValue, &dwSize);
        if(dwStatus == ERROR_SUCCESS && dwType == REG_DWORD) {
            wMainLevels = (WORD) dwValue;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
伊人开心综合网| 久久久精品国产免大香伊| 亚洲老司机在线| 波多野结衣的一区二区三区| 欧美激情一区二区三区全黄| 韩国av一区二区三区四区| 欧美zozozo| 韩国中文字幕2020精品| 久久这里只有精品视频网| 精彩视频一区二区| 久久久久久久综合色一本| 国产精品午夜久久| 69堂精品视频| 亚洲精品视频免费观看| 激情久久久久久久久久久久久久久久| 色94色欧美sute亚洲13| 亚洲视频免费看| 91免费看片在线观看| 自拍偷拍国产亚洲| 欧美自拍偷拍午夜视频| 午夜婷婷国产麻豆精品| 91精品国产高清一区二区三区蜜臀 | 色婷婷精品久久二区二区蜜臀av| 国产精品久久久久久久裸模| av亚洲产国偷v产偷v自拍| 中文字幕中文字幕在线一区| 色欧美日韩亚洲| 亚洲国产成人av| 91精品国产欧美一区二区| 狠狠色伊人亚洲综合成人| 国产欧美日韩亚州综合| 91亚洲精华国产精华精华液| 一区二区日韩av| 3d动漫精品啪啪一区二区竹菊| 美女在线视频一区| 国产亚洲综合在线| 91在线观看免费视频| 亚洲图片自拍偷拍| 精品国产乱码久久久久久浪潮| 日韩一区在线免费观看| 国产午夜久久久久| eeuss鲁片一区二区三区| 欧美一级爆毛片| 国产麻豆精品theporn| 国产精品美女久久福利网站 | 亚洲成人精品一区二区| 日韩一级二级三级精品视频| 国产精品一区二区在线播放| 国产精品久久久久久久午夜片| 欧美伊人久久久久久久久影院| 秋霞成人午夜伦在线观看| 国产欧美日韩在线观看| 在线观看国产精品网站| 久久99精品久久久久久动态图| 日韩av电影天堂| 精品国产青草久久久久福利| www.视频一区| 亚洲成a人v欧美综合天堂下载| 精品国产乱码久久久久久老虎| 成人免费视频一区二区| 五月激情六月综合| 久久九九全国免费| 欧美色图天堂网| 国产精品一级二级三级| 亚洲综合男人的天堂| 欧美精品一区二区在线播放| 91视频免费播放| 久久99精品久久久久久动态图| 亚洲人成人一区二区在线观看| 日韩一区二区在线观看视频播放| 成人激情av网| 国产清纯美女被跳蛋高潮一区二区久久w| 国产真实精品久久二三区| 中文一区在线播放 | 成人自拍视频在线| 石原莉奈在线亚洲三区| 综合久久久久综合| 日韩欧美国产综合| 99re视频精品| 韩国欧美国产1区| 亚洲va欧美va人人爽午夜| 欧美国产一区二区在线观看| 制服丝袜日韩国产| 99久久婷婷国产综合精品| 久久电影网电视剧免费观看| 一区二区在线看| 欧美国产乱子伦 | 欧美一区二区三区不卡| 91香蕉视频mp4| 国产乱码精品一区二区三区忘忧草| 午夜免费久久看| 日韩理论片中文av| 久久精品一二三| 欧美变态凌虐bdsm| 欧美日韩国产免费一区二区| 99re热视频精品| 国产成人自拍网| 毛片基地黄久久久久久天堂| 亚洲一区二区三区美女| 亚洲日本va午夜在线影院| 久久精品人人做人人爽97| 日韩欧美一区二区久久婷婷| 欧美日韩免费电影| 色婷婷激情综合| 91在线一区二区| 高清国产一区二区| 国产一区三区三区| 蜜桃视频免费观看一区| 亚洲mv在线观看| 亚洲最大成人网4388xx| 1000部国产精品成人观看| 国产人妖乱国产精品人妖| 日韩你懂的在线播放| 在线播放日韩导航| 欧美日韩在线观看一区二区 | 99视频一区二区| 国产成人精品影视| 国产一区二区三区久久久 | 成人蜜臀av电影| 丰满少妇久久久久久久| 国产精品自拍在线| 国产乱人伦精品一区二区在线观看 | 国产精品伦理在线| 欧美经典一区二区| 国产欧美日韩综合精品一区二区| 精品国产一区二区亚洲人成毛片| 日韩欧美一二区| 精品国产伦一区二区三区观看方式| 日韩一区二区在线看| 日韩欧美黄色影院| 精品国产第一区二区三区观看体验| 欧美一级淫片007| 日韩欧美国产综合一区| 精品日韩av一区二区| 精品国产区一区| 久久久久久久久久久久久夜| 欧美精品一区二区三区在线播放| 欧美videofree性高清杂交| 欧美tk—视频vk| 337p日本欧洲亚洲大胆色噜噜| 久久亚洲精精品中文字幕早川悠里 | 最新欧美精品一区二区三区| 国产精品成人免费精品自在线观看 | 国产精品你懂的| 国产精品拍天天在线| 国产精品久久久久毛片软件| 中文字幕一区二区在线播放| 国产精品欧美极品| 亚洲精选一二三| 亚洲动漫第一页| 蜜桃久久久久久久| 国产盗摄一区二区三区| 成人午夜又粗又硬又大| 91免费精品国自产拍在线不卡| 色av一区二区| 7799精品视频| 精品成人在线观看| 亚洲国产高清在线| 一区二区三区日韩| 日本午夜精品视频在线观看| 国产一区二区三区观看| 成+人+亚洲+综合天堂| 欧美性视频一区二区三区| 欧美一级黄色录像| 久久精品水蜜桃av综合天堂| 自拍偷拍国产精品| 天堂在线亚洲视频| 国产麻豆精品久久一二三| av色综合久久天堂av综合| 欧美日韩在线精品一区二区三区激情| 日韩欧美电影在线| 国产精品久久久久久户外露出| 亚洲一区二区四区蜜桃| 美日韩一区二区| 99久久综合狠狠综合久久| 欧美日韩在线观看一区二区| 久久久亚洲精品一区二区三区| 中文字幕在线视频一区| 午夜精品在线视频一区| 国产自产v一区二区三区c| 91欧美激情一区二区三区成人| 欧美丝袜丝交足nylons图片| 欧美一区二区三区男人的天堂| 欧美日韩高清在线| 中文字幕国产一区| 亚洲欧洲成人自拍| 美腿丝袜亚洲三区| 91影视在线播放| 欧美一区二区三区公司| 国产精品国产三级国产aⅴ中文| 午夜视频一区在线观看| 成人免费视频免费观看| 69堂国产成人免费视频| 国产精品久久久久永久免费观看| 日韩黄色一级片| a级高清视频欧美日韩| 欧美一区二区三区四区高清| 最好看的中文字幕久久| 久久电影网电视剧免费观看| 在线观看欧美黄色|