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

📄 backlight.cpp

📁 三星2440原版bsp
💻 CPP
字号:
//
// 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 <pm.h>

CEDEVICE_POWER_STATE bklPS;

BOOL BacklightInitialize();

void BL_On(BOOL bOn);

DWORD 
BKL_Init(DWORD dwContext)
{
	bklPS = D0;
	// Perform all one-time initialization of the backlight
	if (!BacklightInitialize())
	{
		RETAILMSG(1, (TEXT("BKL_Init:couldn't initialize backlight hardware \r\n")));
		return 0;
	}
 
    RETAILMSG(1,(TEXT("Backlight Driver is initialized. \r\n")));
     
	return TRUE;
}

BOOL 
BacklightInitialize()
{
    BOOL    bRet = TRUE;

	BL_On(TRUE);

    return bRet;
}

void BL_On(BOOL bOn)
{
    if(bOn) {
    			if(bklPS != D0)
    			{
    				RETAILMSG(1,(TEXT("Backlight turn ON \r\n")));
			    	//
    				//  Add power-on GPIO register setting
    				//
    				bklPS = D0;
    			}
           }
    else {
    			if(bklPS != D4)
    			{
					RETAILMSG(1,(TEXT("Backlight turn OFF \r\n")));
					//
    				//  Add power-off GPIO register setting
    				//
    				bklPS = D4;
    			}
		}
    
}


BOOL 
BKL_Deinit(DWORD dwContext)
{
    return TRUE;
}



DWORD 
BKL_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
	return dwData;
}



BOOL 
BKL_Close(DWORD Handle)
{
    return TRUE;
}



void 
BKL_PowerDown(void)
{
    BL_On(FALSE);
}



void
BKL_PowerUp(void)
{
	BL_On(TRUE);
}



BOOL 
BKL_IOControl(
			  DWORD Handle, 
			  DWORD dwCode, 
			  PBYTE pBufIn, 
			  DWORD dwLenIn,
			  PBYTE pBufOut, 
			  DWORD dwLenOut, 
			  PDWORD pdwActualOut
			  )
{
    BOOL RetVal = TRUE;
    DWORD dwErr = ERROR_SUCCESS;    

    switch (dwCode) 
	{
        //
        // Power Management
        //
		case IOCTL_POWER_CAPABILITIES: 
        {
            PPOWER_CAPABILITIES ppc;
            
			if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(POWER_CAPABILITIES)) ) {
                RetVal = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                break;
            }
			
            ppc = (PPOWER_CAPABILITIES)pBufOut;
            
            memset(ppc, 0, sizeof(POWER_CAPABILITIES));

            // support D0, D4 
            ppc->DeviceDx = 0x11;

   
			// 25 m = 25000 uA
            // TODO: find out a more accurate value
			ppc->Power[D0] = 25000;
            
            *pdwActualOut = sizeof(POWER_CAPABILITIES);
        } break;

		case IOCTL_POWER_SET: 
        {
            CEDEVICE_POWER_STATE NewDx;

            if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) {
                RetVal = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                break;
            }
            
            NewDx = *(PCEDEVICE_POWER_STATE)pBufOut;
            
            RETAILMSG(1,(TEXT("BackLight IOCTL_POWER_SET  PowerSate = D%d \r\n"),NewDx)); 
            
            if ( VALID_DX(NewDx) ) {
                switch ( NewDx ) {
                case D0:
                    //  Power changed, we need to notify the monitor thread to resync
                    //  the timer
                    BL_On(TRUE);
                    break;

                default:
                    BL_On(FALSE);
                    break;
                }

                *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
            } else {
                RetVal = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
            }
            
        } break;

        case IOCTL_POWER_GET: 
            if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) {
                RetVal = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                break;
            }

			CEDEVICE_POWER_STATE Dx;


			if (bklPS == D4){
				Dx = D4;
			}
			else {
				Dx = D0;
			}
            RETAILMSG(1,(TEXT("BackLight IOCTL_POWER_GET  PowerSate = D%d \r\n"),Dx));            
			*(PCEDEVICE_POWER_STATE)pBufOut = Dx;

            *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
	        break;

		default:
            RetVal = FALSE;
            break;
	}
	
	return(RetVal);
}



BOOL
WINAPI
DllMain(
    HANDLE  hinstDll,
    DWORD   dwReason,
    LPVOID  lpReserved
    )
{
	switch(dwReason)
	{
		case DLL_PROCESS_ATTACH:
			break;

		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}

⌨️ 快捷键说明

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