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

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

?? nled.cpp

?? SMDK2440 s3c2440 WINCE 5.00 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.

Module Name:  

Abstract:  

Notes: 
--*/
#include <windows.h>
#include <nled.h>
#include <led_drvr.h>
#include <types.h>
#include "BSP.h"

BOOL InitializeAddresses(VOID);
void NLED_Thread(void);

// Pointer to device control registers
volatile S3C2440A_IOPORT_REG *v_pIOPregs;

HANDLE gLEDThread;
HANDLE gLEDEvent;
DWORD gLEDTimeout;

BOOL InitializeAddresses(VOID)
{
	BOOL	RetValue = TRUE;
	
	/* IO Register Allocation */
	v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (v_pIOPregs == NULL) 
	{
		ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
		RetValue = FALSE;
	}
	else 
	{
		if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 
		{
			ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
			RetValue = FALSE;
		}
	}
	if (!RetValue) 
	{
		if (v_pIOPregs) 
		{
			VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
		}

		v_pIOPregs = NULL;
	}

	return(RetValue);
}

void NLED_Thread(void)
{
	BOOL LED_Blink=0;

	gLEDTimeout = INFINITE;
	gLEDEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
	
	SetProcPermissions((DWORD)-1);

 	for (;;)
 	{ 	
	 	WaitForSingleObject(gLEDEvent, gLEDTimeout);

   		if (gLEDTimeout == 250)
   		{
   			LED_Blink ^= 1;
          	if (LED_Blink == TRUE)
   				v_pIOPregs->GPFDAT  &= ~(0x1 << 7);
  			else
        		v_pIOPregs->GPFDAT  |=  (0x1 << 7);
        }
 	}
}

// The NLED MDD calls this routine to initialize the underlying NLED hardware.
// This routine should return TRUE if successful.  If there's a problem
// it should return FALSE and call SetLastError() to pass back the reason
// for the failure.
BOOL WINAPI
NLedDriverInitialize(
                    VOID
                    )
{
    DEBUGMSG(ZONE_PDD, (_T("NLedDriverInitialize: invoked\r\n")));
    if (!InitializeAddresses())
    	return (FALSE);

    v_pIOPregs->GPFCON  &= ~(0x3 << 14);
    v_pIOPregs->GPFCON  |=  (0x1 << 14);
    v_pIOPregs->GPFDAT  &= ~(0x1 << 7);
    v_pIOPregs->GPFUP   |=  (0x1 << 7);
   
    gLEDThread= CreateThread(0, 0, (LPTHREAD_START_ROUTINE) NLED_Thread, 0, 0, 0);

    return (TRUE);
}

// The NLED MDD calls this routine to deinitialize the underlying NLED
// hardware as the NLED driver is unloaded.  It should return TRUE if 
// successful.  If there's a problem this routine should return FALSE 
// and call SetLastError() to pass back the reason for the failure.
BOOL WINAPI
NLedDriverDeInitialize(
                    VOID
                    )
{
    DEBUGMSG(ZONE_PDD, (_T("NLedDriverDeInitialize: invoked\r\n")));

	if (v_pIOPregs) 
	{
		VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
		v_pIOPregs = NULL;
	}
	if(gLEDThread)
	{
		CloseHandle(gLEDThread);
		gLEDThread = NULL;	
	}
	if(gLEDEvent)
	{
		CloseHandle(gLEDEvent);
		gLEDEvent = NULL;	
	}
    
    return (TRUE);
}

// This routine retrieves information about the NLED device(s) that
// this driver supports.  The nInfoId parameter indicates what specific
// information is being queried and pOutput is a buffer to be filled in.
// The size of pOutput depends on the type of data being requested.  This
// routine returns TRUE if successful, or FALSE if there's a problem -- in
// which case it also calls SetLastError() to pass back more complete
// error information.  The NLED MDD invokes this routine when an application
// calls NLedGetDeviceInfo().
BOOL
WINAPI
NLedDriverGetDeviceInfo(
                       INT     nInfoId,
                       PVOID   pOutput
                       )
{
    BOOL fOk = TRUE;
    SETFNAME(_T("NLedDriverGetDeviceInfo"));
        
    if ( nInfoId == NLED_COUNT_INFO_ID ) {
        struct NLED_COUNT_INFO  *p = (struct NLED_COUNT_INFO*)pOutput;

        __try {
            p -> cLeds = 1;
        } 
        __except(EXCEPTION_EXECUTE_HANDLER) {
            SetLastError(ERROR_INVALID_PARAMETER);
            fOk = FALSE;
        }
    } else {
        fOk = FALSE;
        SetLastError(ERROR_INVALID_PARAMETER);
    }

    DEBUGMSG(ZONE_PDD || (!fOk && ZONE_WARN), 
        (_T("%s: returning %d\r\n"), pszFname, fOk));
    return (fOk);
}


// This routine changes the configuration of an LED.  The nInfoId parameter
// indicates what kind of configuration information is being changed.  
// Currently only the NLED_SETTINGS_INFO_ID value is supported.  The pInput
// parameter points to a buffer containing the data to be updated.  The size
// of the buffer depends on the value of nInfoId.  This routine returns TRUE
// if successful or FALSE if there's a problem -- in which case it also calls
// SetLastError().  The NLED MDD invokes this routine when an application 
// calls NLedSetDevice().
BOOL
WINAPI
NLedDriverSetDevice(
                   INT     nInfoId,
                   PVOID   pInput
                   )
{
    DEBUGMSG(ZONE_WARN, (_T("NLedDriverSetDevice: stub driver, can't set LED state\r\n")));
    
    struct NLED_SETTINGS_INFO *pInfo = (struct NLED_SETTINGS_INFO*)pInput;
    
    if(pInfo->OffOnBlink==0)
    {
		gLEDTimeout = INFINITE;
		v_pIOPregs->GPFDAT  |=  (0x1 << 7);		
    }
    else if( pInfo->OffOnBlink==1)
    {
		gLEDTimeout = INFINITE;
     	v_pIOPregs->GPFDAT  &= ~(0x1 << 7);	
    }
    else if( pInfo->OffOnBlink==2)
    {
		gLEDTimeout = 250;
    	SetEvent(gLEDEvent);
    }
    else 
    {
		SetLastError(ERROR_INVALID_PARAMETER);
		return (FALSE);
    }
    return (TRUE);
}


// This routine is invoked by the driver MDD when the system suspends or
// resumes.  The power_down flag indicates whether the system is powering 
// up or powering down.
VOID WINAPI
NLedDriverPowerDown(
                   BOOL power_down
                   )
{
    return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久 | 秋霞影院一区二区| 美女爽到高潮91| 色综合咪咪久久| 久久夜色精品一区| 亚洲综合成人在线| 成人国产精品免费观看| 精品美女在线播放| 日韩影视精彩在线| 91精品福利在线| 中文字幕日本乱码精品影院| 久久精品国产秦先生| 欧美男女性生活在线直播观看| 欧美国产精品中文字幕| 日本aⅴ精品一区二区三区| 成人av资源站| 国产精品久久网站| 丝袜a∨在线一区二区三区不卡| 不卡视频一二三四| 26uuu另类欧美亚洲曰本| 亚洲综合一二三区| 色综合中文字幕国产| 久久品道一品道久久精品| 蜜臀久久99精品久久久久宅男| 欧美在线不卡一区| 亚洲国产毛片aaaaa无费看| 色美美综合视频| 一区二区成人在线观看| 色噜噜狠狠色综合中国| 亚洲精品视频在线观看免费| 99综合电影在线视频| 1区2区3区精品视频| 99精品视频一区二区三区| 国产欧美精品在线观看| 国产精品一二三四区| 欧美精品一区二区三区四区 | 久久亚洲影视婷婷| 国产伦精一区二区三区| 久久蜜臀精品av| 成人动漫av在线| 亚洲嫩草精品久久| 在线观看一区二区精品视频| 亚洲自拍都市欧美小说| 欧美日韩精品欧美日韩精品| 亚洲视频每日更新| 91福利视频在线| 婷婷综合久久一区二区三区| 欧美精品777| 久久激五月天综合精品| 亚洲精品在线免费播放| 成人深夜视频在线观看| 亚洲黄色小说网站| 777欧美精品| 国产成人在线视频播放| 亚洲四区在线观看| 欧美男生操女生| 国产精品一区二区在线播放| 日韩一区欧美一区| 欧美日韩成人一区| 国产成人综合亚洲网站| 一区二区三区.www| 日韩精品一区二区在线观看| 国产凹凸在线观看一区二区| 亚洲免费伊人电影| 国产亚洲一区字幕| 一本到三区不卡视频| 免费久久精品视频| 日韩一区有码在线| 欧美videos大乳护士334| 99久久国产综合精品色伊| 丝袜a∨在线一区二区三区不卡| 国产色产综合色产在线视频| 欧美色涩在线第一页| 狠狠色综合播放一区二区| 亚洲欧美日韩国产中文在线| 精品不卡在线视频| 欧美日韩亚洲国产综合| av在线不卡免费看| 欧美aaaaaa午夜精品| 亚洲日本成人在线观看| 久久亚洲一区二区三区明星换脸 | 亚洲日本在线天堂| 精品欧美久久久| 欧美日韩国产美女| 91视视频在线观看入口直接观看www| 美国毛片一区二区三区| 亚洲久草在线视频| 亚洲国产精品99久久久久久久久| 51精品秘密在线观看| 色综合久久88色综合天天6| 国内精品国产成人国产三级粉色| 亚洲国产精品久久不卡毛片| 国产精品久久国产精麻豆99网站 | 国产日韩精品视频一区| 日韩欧美在线网站| 欧美日韩一区二区电影| 99久久免费国产| 国产成人aaa| 国产一区二区三区四区五区入口| 亚洲一区av在线| 亚洲乱码日产精品bd| 中文字幕亚洲一区二区av在线 | 国产裸体歌舞团一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲久本草在线中文字幕| 亚洲一区二区成人在线观看| 国产精品乱码人人做人人爱 | 国产69精品久久久久毛片| 国产综合久久久久影院| 美国一区二区三区在线播放| 日本色综合中文字幕| 首页国产欧美久久| 婷婷激情综合网| 亚洲国产精品久久不卡毛片 | 国产**成人网毛片九色| 国产一区二区三区美女| 国产老妇另类xxxxx| 国产一区二区伦理| 国产成人自拍高清视频在线免费播放| 国产一区二区三区四区五区美女| 狠狠色丁香久久婷婷综合丁香| 久久精品国产99国产| 激情伊人五月天久久综合| 九九久久精品视频 | 日本欧美肥老太交大片| 免费成人在线观看| 国产精品夜夜嗨| 波多野结衣欧美| 色婷婷精品久久二区二区蜜臀av | 亚洲精品在线免费观看视频| 久久女同互慰一区二区三区| 国产精品欧美精品| 亚洲欧美日韩小说| 亚洲无人区一区| 麻豆91在线播放| 岛国精品在线播放| 色呦呦日韩精品| 欧美一级淫片007| 久久久噜噜噜久久中文字幕色伊伊| 国产精品色婷婷久久58| 亚洲综合免费观看高清在线观看 | 蜜臀va亚洲va欧美va天堂 | 亚洲午夜影视影院在线观看| 婷婷成人激情在线网| 国产一区美女在线| 日本久久电影网| 日韩视频一区二区三区| 欧美国产综合色视频| 亚洲一区二区三区美女| 精品亚洲porn| 91美女在线视频| 精品国产伦理网| 一区二区三区精品在线| 国产综合久久久久影院| 色综合天天做天天爱| 日韩精品中文字幕在线不卡尤物| 国产精品久久三| 久久国产剧场电影| 色噜噜狠狠色综合中国| 欧美精品一区二| 亚洲地区一二三色| 国产精品亚洲专一区二区三区| 欧美日韩一区视频| 中文字幕一区二区视频| 老司机精品视频线观看86| 色婷婷国产精品久久包臀| 亚洲精品一区在线观看| 亚洲电影一级片| heyzo一本久久综合| 精品国产三级电影在线观看| 亚洲电影激情视频网站| 99久久久免费精品国产一区二区| 日韩午夜电影av| 香蕉成人伊视频在线观看| 成人av免费观看| 2023国产精华国产精品| 图片区小说区国产精品视频| 99免费精品在线| 国产人伦精品一区二区| 久久国产福利国产秒拍| 717成人午夜免费福利电影| 亚洲免费毛片网站| 99久久精品国产毛片| 国产日韩精品一区| 国产一区二区视频在线| 日韩视频在线一区二区| 国产毛片一区二区| 日韩免费高清电影| 日韩电影在线一区二区| 在线观看亚洲一区| 一级特黄大欧美久久久| 99久久精品国产毛片| 中日韩免费视频中文字幕| 国产在线精品一区二区三区不卡 | 欧美日韩一区 二区 三区 久久精品| 国产精品无人区| 成人教育av在线| 中文字幕国产一区二区| 处破女av一区二区| 中文字幕国产精品一区二区|