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

📄 cspslcdcclass.cpp

📁 i.mx27 soc for wince 6.0
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//------------------------------------------------------------------------------
//
//  Copyright (c) Microsoft Corporation.  All rights reserved.
//
//------------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Copyright (C) 2005-2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT 
//---------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
// File:        CSPSlcdcClass.cpp
// Implementation of class CSPSlcdc.
//
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// INCLUDE FILES  
//------------------------------------------------------------------------------
#include <windows.h>
#include <winddi.h>
#include <ceddk.h>
#include <gpe.h>
#include <emul.h>
#include <Winreg.h>
#include <Pwingdi.h>
#include <pm.h>
#include "csp.h"
#include "slcdc.h"
#include "CSPSlcdcClass.h"

//------------------------------------------------------------------------------
// GLOBAL OR STATIC VARIABLES  
//------------------------------------------------------------------------------
static GPE *gGPE  = (GPE *) NULL;

static DHPDEV (*pOldDrvEnablePDEV)(
      DEVMODEW *pdm,
      LPWSTR    pwszLogAddress,
      ULONG     cPat,
      HSURF    *phsurfPatterns,
      ULONG     cjCaps,
      ULONG    *pdevcaps,
      ULONG     cjDevInfo,
      DEVINFO  *pdi,
      HDEV      hdev,
      LPWSTR    pwszDeviceName,
      HANDLE    hDriver );


//------------------------------------------------------------------------------
// FUNCTION PROTOTYPES  
//------------------------------------------------------------------------------
// This prototype is missing from the GPE headers
BOOL APIENTRY GPEEnableDriver(ULONG engineVersion, ULONG cj, DRVENABLEDATA *data, 
    PENGCALLBACKS  engineCallbacks);

//------------------------------------------------------------------------------
// Smart LCDC driver entry point
//------------------------------------------------------------------------------
DHPDEV CSPSlcdcDrvEnablePDEV (DEVMODEW *pdm, LPWSTR pwszLogAddress, ULONG cPat,
    HSURF *phsurfPatterns, ULONG cjCaps, ULONG *pdevcaps, ULONG cjDevInfo, DEVINFO *pdi,
    HDEV hdev, LPWSTR pwszDeviceName, HANDLE hDriver)
{
    DHPDEV pDev;
    
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("++CSPSlcdcDrvEnablePDEV\r\n")));
 
    // Pallete is not supported
    ((GDIINFO *)pdevcaps)->flRaster &= ~(RC_PALETTE);

    // Return the Old driver function
    pDev = (*pOldDrvEnablePDEV) (pdm, pwszLogAddress, cPat, phsurfPatterns, cjCaps, pdevcaps,
        cjDevInfo, pdi, hdev, pwszDeviceName, hDriver);
    
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("--CSPSlcdcDrvEnablePDEV\r\n")));
    return (pDev);
}

//------------------------------------------------------------------------------
//
//  FUNCTION:     DrvEnableDriver
//
//  DESCRIPTION:  This function is the initial driver entry point exported 
//        by the driver DLL for devices that link directly to GWES
//
//  PARAMETERS:     
//
//  RETURNS:        
//
//------------------------------------------------------------------------------
BOOL APIENTRY DrvEnableDriver(ULONG engineVersion, ULONG cj, DRVENABLEDATA *data,
    PENGCALLBACKS  engineCallbacks)
{
    BOOL result = FALSE;
    
    // Enable GPE
    if(!GPEEnableDriver(engineVersion, cj, data, engineCallbacks))
    {
        DEBUGMSG(GPE_ZONE_ERROR, (TEXT("DrvEnableDriver:GPEEnableDriver failed 0x%x\r\n"), GetLastError()));
        goto cleanup;
    }       

    // Keep MS's EnablePDev function
    pOldDrvEnablePDEV = data->DrvEnablePDEV;
    
    // Set enable function pointer
    data->DrvEnablePDEV = CSPSlcdcDrvEnablePDEV;
    
    result = TRUE;

cleanup:
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("--DrvEnableDriver\r\n")));
    return (result);
}

//------------------------------------------------------------------------------
//
//  FUNCTION:     DrvGetMasks
//
//  DESCRIPTION:  
//
//  PARAMETERS:     
//
//  RETURNS:        
//
//------------------------------------------------------------------------------
ULONG *APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
    return BSPGetSLCDCBitMasks();
}


//------------------------------------------------------------------------------
//
//  FUNCTION:     GetGPE
//
//  DESCRIPTION:  Main entry point for a GPE-compliant driver.
//
//  PARAMETERS:     
//
//  RETURNS:        
//        GPE class pointer
//
//------------------------------------------------------------------------------
GPE *GetGPE(void)
{
    // Only instanciate GPE once
    if (gGPE == NULL)
    {
        gGPE = new CSPSlcdcClass;
    }
    
    return (gGPE);
}

//------------------------------------------------------------------------------
//
//  FUNCTION:     RegisterDDHALAPI
//
//  DESCRIPTION:  
//
//  PARAMETERS:     
//
//  RETURNS:        
//
//------------------------------------------------------------------------------
void RegisterDDHALAPI(void)
{
    return; // no DDHAL support
}

//------------------------------------------------------------------------------
// CSP GPE Class Constructor
//------------------------------------------------------------------------------
CSPSlcdcClass::CSPSlcdcClass(void)
{
    PHYSICAL_ADDRESS phyAddr;
    
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("++CSPSlcdcClass::CSPSlcdcClass\r\n")));
    
    // Map the SLCDC registers space for user access    
    phyAddr.QuadPart = CSP_BASE_REG_PA_SLCDC;   
    slcdc = (CSP_SLCDC_REGS *)MmMapIoSpace(phyAddr, sizeof(CSP_SLCDC_REGS), FALSE);
    if(!slcdc) 
    {
        DEBUGMSG(GPE_ZONE_ERROR, (TEXT("CSPSlcdcCalss: MmMapIoSpace failed!\r\n")));
    }
    
    BSPSlcdcClassInit();

    mode = BspGetMode();
    video_mem = BspGetVideoMem();
    
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("--CSPSlcdcClass::CSPSlcdcClass\r\n"))); 
}
    
//------------------------------------------------------------------------------
//  CSP GPE Class Destructor
//------------------------------------------------------------------------------
CSPSlcdcClass::~CSPSlcdcClass(void)
{
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("++CSPSlcdcClass::~CSPSlcdcClass\r\n")));
    
    BSPSlcdcClassDeInit();
    // Free mapped SLCDC module space
    if (slcdc != NULL)
    {
        MmUnmapIoSpace ((PVOID) slcdc, sizeof(CSP_SLCDC_REGS));
        slcdc = NULL;
    }
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("--CSPSlcdcClass::~CSPSlcdcClass\r\n")));
}


//------------------------------------------------------------------------------
// The following methods implement the default functions, the derived-class
// can override it if the device supports them
// CSP GPE Class method returns the default number of display modes 
// supported by the driver. 
//------------------------------------------------------------------------------
int CSPSlcdcClass::NumModes(void)
{
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("++CSPSlcdcClass::NumModes\r\n")));
    DEBUGMSG(GPE_ZONE_ENTER, (TEXT("--CSPSlcdcClass::NumModes\r\n")));
    // Only one mode supported by default
    int modenumber;
    modenumber = BspNumModes();
    return (modenumber);
}   

//------------------------------------------------------------------------------
// CSP GPE Class SetMode method to enable the device driver based on the
// Graphics Primitive Engine (GPE) and to request a specific mode for 
// the display.
//------------------------------------------------------------------------------
SCODE CSPSlcdcClass::SetMode(int modeId, HPALETTE *pPalette)
{
    SCODE result = S_OK;
    

⌨️ 快捷键说明

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