⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 battdrvr.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 2 页
字号:

                // pass back return values
                __try {
                    *pdwBytesTransferred = dwStatus;
                    if(dwStatus == 0) {
                        dwErr = GetLastError();
                    } else {
                        dwErr = ERROR_SUCCESS;
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER) {
                    DEBUGMSG(ZONE_WARN, 
                        (_T("%s: exception writing status in IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX2\r\n"), pszFname));
                }
            }
        }
        break;
        
    case IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX:
        // sanity check parameters
        if(pOutBuf != NULL && OutBufLen == sizeof(SYSTEM_POWER_STATUS_EX)
            && pInBuf != NULL && InBufLen == sizeof(BOOL) && pdwBytesTransferred != NULL) {
            BOOL fOk = FALSE;
            BOOL fForce;

            // get the force parameter
            __try {
                fForce = *((BOOL *) pInBuf);
                fOk = TRUE;
            } 
            __except(EXCEPTION_EXECUTE_HANDLER) {
                DEBUGMSG(ZONE_WARN, 
                    (_T("%s: exception reading fForce in IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX\r\n"), pszFname));
            }

            // did we get the force parameter?
            if(fOk) {
                DEBUGCHK(fForce == TRUE || fForce == FALSE);

                // get the data            
                LOCKBATTERY();
                __try {
                    fOk = BatteryAPIGetSystemPowerStatusEx((PSYSTEM_POWER_STATUS_EX) pOutBuf, fForce);
                }
                __except(EXCEPTION_EXECUTE_HANDLER) {
                    DEBUGMSG(ZONE_WARN, 
                        (_T("%s: exception reading status in IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX\r\n"), pszFname));
                    dwErr = ERROR_GEN_FAILURE;
                }
                UNLOCKBATTERY();

                // pass back return values
                __try {
                    if(fOk) {
                        *pdwBytesTransferred = sizeof(SYSTEM_POWER_STATUS_EX);
                        dwErr = ERROR_SUCCESS;
                    } else {
                        *pdwBytesTransferred = 0;
                        dwErr = GetLastError();
                    }
                }
                __except(EXCEPTION_EXECUTE_HANDLER) {
                    DEBUGMSG(ZONE_WARN, 
                        (_T("%s: exception writing status in IOCTL_BATTERY_GETSYSTEMPOWERSTATUSEX\r\n"), pszFname));
                }
            }
        }
        break;
        
    case IOCTL_BATTERY_GETLIFETIMEINFO:
		// sanity check parameters
        if(pOutBuf != NULL && OutBufLen == sizeof(BATTERYLIFETIMEINFO)) {
            SYSTEMTIME stLastChange = { 0 };
            DWORD cmsCpuUsage = 0, cmsPreviousCpuUsage = 0;
            
            DEBUGCHK(pInBuf == NULL);
            DEBUGCHK(InBufLen == 0);
            DEBUGCHK(pdwBytesTransferred != NULL);

            // assume a good return value from this function, even though it's void
            SetLastError(ERROR_SUCCESS);

            // get the data
            LOCKBATTERY();
            BatteryAPIGetLifeTimeInfo(&stLastChange, &cmsCpuUsage, &cmsPreviousCpuUsage);
            UNLOCKBATTERY();

//						RETAILMSG(1,(_T("cmsCpuUsage:%lu\r\n"), cmsCpuUsage));
                    
            // pass back return values
            __try {
                PBATTERYLIFETIMEINFO pblti = (PBATTERYLIFETIMEINFO) pOutBuf;
                pblti->stLastChange = stLastChange;
                pblti->cmsCpuUsage = cmsCpuUsage;
                pblti->cmsPreviousCpuUsage = cmsPreviousCpuUsage;
				dwErr = GetLastError();
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                DEBUGMSG(ZONE_WARN, 
                    (_T("%s: exception in IOCTL_BATTERY_GETLIFETIMEINFO\r\n"), pszFname));
                dwErr = ERROR_INVALID_PARAMETER;
            }


        }
        break;
        
    case IOCTL_BATTERY_GETLEVELS:
        // sanity check parameters
        if(pOutBuf != NULL && OutBufLen == sizeof(LONG) && pdwBytesTransferred != NULL) {
            DWORD dwLevels;
            
            DEBUGCHK(pInBuf == NULL);
            DEBUGCHK(InBufLen == 0);

            // get the data
            LOCKBATTERY();
            dwLevels = BatteryPDDGetLevels();
            UNLOCKBATTERY();

            // pass back return values
            __try {
                *((PLONG) pOutBuf) = (LONG) dwLevels;
                *pdwBytesTransferred = sizeof(LONG);
                dwErr = ERROR_SUCCESS;
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                DEBUGMSG(ZONE_WARN, 
                    (_T("%s: exception in IOCTL_BATTERY_GETLEVELS\r\n"), pszFname));
                dwErr = ERROR_INVALID_PARAMETER;
            }
        }
        break;
        
    case IOCTL_BATTERY_SUPPORTSCHANGENOTIFICATION:
        // sanity check parameters
        if(pOutBuf != NULL && OutBufLen == sizeof(BOOL) && pdwBytesTransferred != NULL) {
            BOOL fSupportsChange;
            
            DEBUGCHK(pInBuf == NULL);
            DEBUGCHK(InBufLen == 0);

            // get the data
            LOCKBATTERY();
            fSupportsChange = BatteryPDDSupportsChangeNotification();
            UNLOCKBATTERY();

            // pass back return values
            __try {
                *((PBOOL) pOutBuf) = fSupportsChange;
                *pdwBytesTransferred = sizeof(fSupportsChange);
                dwErr = ERROR_SUCCESS;
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                DEBUGMSG(ZONE_WARN, 
                    (_T("%s: exception in IOCTL_BATTERY_SUPPORTSCHANGENOTIFICATION\r\n"), pszFname));
                dwErr = ERROR_INVALID_PARAMETER;
            }
        }
        break;
        
    case IOCTL_BATTERY_NOTIFYOFTIMECHANGE:
        // sanity check parameters
        if(pInBuf != NULL && InBufLen == sizeof(FILETIME) && pOutBuf != NULL 
            && OutBufLen == sizeof(BOOL)) {
            FILETIME ft;
            BOOL fForward;

            // pass back return values
            __try {
                ft = *((PFILETIME) pInBuf);
                fForward = *((PBOOL) pOutBuf);
                dwErr = ERROR_SUCCESS;
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                DEBUGMSG(ZONE_WARN, 
                    (_T("%s: exception in IOCTL_BATTERY_NOTIFYOFTIMECHANGE\r\n"), pszFname));
            }

            // did we get the parameter ok?
            if(dwErr == ERROR_SUCCESS) {
                // assume a good status, even though the function is void
                SetLastError(ERROR_SUCCESS);

                // get the data
                LOCKBATTERY();
                BatteryAPINotifyOfTimeChange(fForward, &ft);
                UNLOCKBATTERY();

                // get the status code
                dwErr = GetLastError();
            }
        }
        break;
        
    default:
        // Pass through to the PDD if enabled.  Note that the PDD function returns an error code,
        // not a boolean.
        if(gpfnBatteryPddIOControl != NULL) {
            dwErr = gpfnBatteryPddIOControl(dwContext, Ioctl, pInBuf, InBufLen, pOutBuf, OutBufLen, pdwBytesTransferred);
            DEBUGMSG(ZONE_IOCTL || ZONE_WARN, (_T("%s: PDD IOControl(%u) returned %d\r\n"), pszFname, Ioctl, dwErr));
        } else {
            DEBUGMSG(ZONE_IOCTL || ZONE_WARN, (_T("%s: Unsupported IOCTL code %u\r\n"), pszFname, Ioctl));
            dwErr = ERROR_NOT_SUPPORTED;
        }
        break;
    }
    
    // pass back appropriate response codes
    SetLastError(dwErr);
    if(dwErr != ERROR_SUCCESS) {
        bRc = FALSE;
    } else {
        bRc = TRUE;
    }

    DEBUGMSG(ZONE_FUNCTION || (!bRc && ZONE_WARN), (_T("%s: returning %d, error %d\r\n"),
        pszFname, bRc, dwErr));
    return bRc;
}

VOID
PowerDown(
              DWORD dwContext
              )
{
    // notify the PDD
    BatteryPDDPowerHandler(TRUE);

		PM_BackLight(0);

		//保存电量到NORFLASH
		SaveQAcc();
	
		PM_PowerOff();
}


VOID
PowerUp(
            DWORD dwContext
            )
{
    // notify the PDD
    BatteryPDDPowerHandler(FALSE);
    
    // schedule our resume thread
    if(ghevResume != NULL) {
        CeSetPowerOnEvent(ghevResume);
    }


}


DWORD
Open(
         DWORD Context, 
         DWORD Access,
         DWORD ShareMode)
{
    
    DEBUGMSG(ZONE_FUNCTION,(_T("Open(%x, 0x%x, 0x%x)\r\n"),Context, Access, ShareMode));
    
    UNREFERENCED_PARAMETER(Access);
    UNREFERENCED_PARAMETER(ShareMode);
    
    // pass back the device handle
    return Context;     // 0 indicates failure
}


BOOL  
Close(
          DWORD Context
          ) 
{
    DEBUGMSG(ZONE_FUNCTION,(_T("Close(%x)\r\n"), Context));
    
    return TRUE;
}


DWORD
Read(
         DWORD  dwContext,
         LPVOID pBuf,
         DWORD  Len
         ) 
{
    UNREFERENCED_PARAMETER(dwContext);
    UNREFERENCED_PARAMETER(pBuf);
    UNREFERENCED_PARAMETER(Len);
    
    DEBUGMSG(ZONE_ERROR | ZONE_FUNCTION,(_T("Read\r\n")));
    SetLastError(ERROR_INVALID_FUNCTION);
    return  0;
}

DWORD
Write(
          DWORD  dwContext,
          LPVOID pBuf,
          DWORD  Len
          ) 
{
    UNREFERENCED_PARAMETER(dwContext);
    UNREFERENCED_PARAMETER(pBuf);
    UNREFERENCED_PARAMETER(Len);
    
    DEBUGMSG(ZONE_ERROR | ZONE_FUNCTION,(_T("Read\r\n")));
    SetLastError(ERROR_INVALID_FUNCTION);
    return  0;
}

ULONG
Seek(
         PVOID Context,
         LONG Position,
         DWORD Type
         )
{
    UNREFERENCED_PARAMETER(Context);
    UNREFERENCED_PARAMETER(Position);
    UNREFERENCED_PARAMETER(Type);
    
    return (DWORD)-1;
}

BOOL WINAPI
DllMain(
         HINSTANCE hDllHandle, 
         DWORD  dwReason, 
         LPVOID lpreserved
         ) 
{
    BOOL bRc = TRUE;
    
    UNREFERENCED_PARAMETER(hDllHandle);
    UNREFERENCED_PARAMETER(lpreserved);
    
    switch (dwReason) {
    case DLL_PROCESS_ATTACH: 
        {
            DEBUGREGISTER(hDllHandle);
            DEBUGMSG(ZONE_INIT,(_T("*** DLL_PROCESS_ATTACH - Current Process: 0x%x, ID: 0x%x ***\r\n"),
                GetCurrentProcess(), GetCurrentProcessId()));
            DisableThreadLibraryCalls((HMODULE) hDllHandle);
        } 
        break;
        
    case DLL_PROCESS_DETACH: 
        {
            DEBUGMSG(ZONE_INIT,(_T("*** DLL_PROCESS_DETACH - Current Process: 0x%x, ID: 0x%x ***\r\n"),
                GetCurrentProcess(), GetCurrentProcessId()));
        } 
        break;
        
    default:
        break;
    }
    
    return bRc;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -