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

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

?? ser2440_ser.c

?? windows ce 50 drive program
?? C
?? 第 1 頁 / 共 2 頁
字號:
       PHWOBJ  pHWObj      // @parm Pointer to our own HW OBJ for this device
)
{
	return (SerInit(TRUE, Identifier, pMddHead, pHWObj));
}



/*
 @doc OEM
 @func ULONG | SerClose | This routine closes the device identified by the PVOID returned by SerInit.
 *  Not exported to users, only to driver.
 *
 @rdesc The return value is 0.
 */
static
ULONG
SerClose(
        PVOID   pHead   // @parm PVOID returned by SerInit.
        )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;
	ULONG  uTries;

	RETAILMSG (DEBUGMODE,(TEXT("+SerClose\r\n")));
	if ( pHWHead->cOpenCount )
	{
		DEBUGMSG (ZONE_CLOSE, (TEXT("SerClose, closing device\r\n")));
		pHWHead->cOpenCount--;

		// while we are still transmitting, sleep.
		uTries = 0;
		while((pHWHead->s2440COM.s2440SerReg->rUFSTAT & SER2440_FIFOSTAT_MASK) & (uTries++ < 100))		// TxFifo not empty..
		{
			DEBUGMSG (ZONE_CLOSE, (TEXT("SerClose, TX in progress.\r\n")));            
			Sleep(10);
		}

		// When the device is closed, we power it down.
		DEBUGMSG (ZONE_CLOSE, (TEXT("SerClose - Powering down UART\r\n")));
		pHWHead->fIRMode  = FALSE;
		SerSetOutputMode(pHWHead, FALSE, FALSE );

		DEBUGMSG (ZONE_CLOSE, (TEXT("SerClose - Calling SL_Close\r\n")));
		SL_Close( pHWHead );
	}

	RETAILMSG(DEBUGMODE,(TEXT("-SerClose\r\n")));
	return (0);
}

/*
 @doc OEM 
 @func PVOID | SerDeinit | Deinitializes device identified by argument.
 *  This routine frees any memory allocated by SerInit.
 *
 */
static
BOOL
SerDeinit(PVOID   pHead)   // @parm PVOID returned by SerInit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerDeinit \r\n")));
	if ( !pHWHead )
		return (FALSE);

	// Make sure device is closed before doing DeInit
	if ( pHWHead->cOpenCount )
		SerClose( pHead );

	SL_Deinit( pHead );

	if ( pHWHead->pBaseAddress )
		VirtualFree(pHWHead->pBaseAddress, 0, MEM_RELEASE);

	if ( pHWHead->pBootArgs )
		MmUnmapIoSpace( pHWHead->pBootArgs, sizeof(BOOT_ARGS) );

	// Free the HWObj
	LocalFree(pHWHead->pHWObj);

	// And now free the SER_INFO structure.
	LocalFree(pHWHead);

	return (TRUE);
}

/*
 @doc OEM
 @func	VOID | SerGetCommProperties | Retrieves Comm Properties.
 *
 @rdesc	None.
 */
static
VOID
SerGetCommProperties(
                    PVOID   pHead,      // @parm PVOID returned by SerInit. 
                    LPCOMMPROP  pCommProp   // @parm Pointer to receive COMMPROP structure. 
                    )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;
	RETAILMSG(DEBUGMODE,(TEXT("+SerGetCommProperties\r\n")));
	*pCommProp = pHWHead->CommProp;
	return;
}


/*
 @doc OEM
 @func VOID | SerSetBaudRate |
 * This routine sets the baud rate of the device.
 *  Not exported to users, only to driver.
 *
 @rdesc None.
 */
static
BOOL
SerSetBaudRate(
              PVOID   pHead,  // @parm     PVOID returned by SerInit
              ULONG   BaudRate    // @parm     ULONG representing decimal baud rate.
              )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("IRDA : SerSetBaudRate \r\n")));
	// If we are running in IR mode, try to set the IR baud
	// first, since it supports a subset of the rates supported
	// by the UART.  If we fail setting the IR rate, then
	// return an error and leave the UART alone.
	if ( IRDA )
	{
		if ( ! SerSetIRBaudRate( pHWHead, BaudRate ) )
		{
			DEBUGMSG (ZONE_ERROR, 
				(TEXT("Unsupported IR BaudRate\r\n")));
			// We should return an error, but vtbl doesn't expect one
			return (FALSE); 
		}
	}

	// Now set buadrate on the UART
	return ( SL_SetBaudRate( pHead, BaudRate ) );    
}

/*
 @doc OEM
 @func BOOL | SerPowerOff |
 *  Called by driver to turn off power to serial port.
 *  Not exported to users, only to driver.
 *
 @rdesc This routine returns a status.
 */
BOOL
SerPowerOff(PVOID   pHead)       // @parm	PVOID returned by SerInit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerPowerOff\r\n")));
	SerClose( pHWHead );
	// First, power down the UART
	SL_PowerOff( pHWHead );

	// And then disable our IR and 9 Pin interface
	SerSetOutputMode( pHWHead, FALSE, FALSE );

	return (TRUE);
}

/*
 @doc OEM
 @func BOOL | SerPowerOn |
 *  Called by driver to turn on power to serial port.
 *  Not exported to users, only to driver.
 *
 @rdesc This routine returns a status.
 */
BOOL
SerPowerOn(PVOID   pHead)       // @parm	PVOID returned by SerInit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerPowerOn\r\n")));
	// First, power up the UART
	SL_PowerOn( pHWHead );

	// And then enable our IR interface (if needed)
	SerSetOutputMode( pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );
	return (TRUE);
}

/*
 @doc OEM
 @func BOOL | SerEnableIR | This routine enables ir.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 */
static
BOOL
SerEnableIR(
           PVOID   pHead, // @parm PVOID returned by Serinit.
           ULONG   BaudRate  // @parm PVOID returned by HWinit.
           )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerEnableIR\r\n")));
	pHWHead->fIRMode  = TRUE;
	SerSetOutputMode( pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );
	return (TRUE);
}

/*
 @doc OEM
 @func BOOL | SerDisableIR | This routine disable the ir.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 */
static
BOOL
SerDisableIR(PVOID   pHead)		// @parm PVOID returned by Serinit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerDisableIR\r\n")));
	pHWHead->fIRMode  = FALSE;
	SerSetOutputMode( pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );
	return (TRUE);
}

/*
 @doc OEM
 @func BOOL | SerEnableIR | This routine enables ir.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 */
static
BOOL
SerEnableSerial(
           PVOID   pHead, // @parm PVOID returned by Serinit.
           ULONG   BaudRate  // @parm PVOID returned by HWinit.
           )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerEnableSerial\r\n")));
	pHWHead->fIRMode  = FALSE;
	SerSetOutputMode( pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );
	return (TRUE);
}

/*
 @doc OEM
 @func BOOL | SerDisableIR | This routine disable the ir.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 */
static
BOOL
SerDisableSerial(PVOID   pHead)		// @parm PVOID returned by Serinit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerDisableSerial\r\n")));

	pHWHead->fIRMode  = TRUE;
	SerSetOutputMode( pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );
	return (TRUE);
}


/*
 @doc OEM
 @func BOOL | SerOpen | This routine is called when the port is opened.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 */
static
BOOL
SerOpen(PVOID   pHead)		// @parm PVOID returned by Serinit.
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	// Disallow multiple simultaneous opens
	if ( pHWHead->cOpenCount )
		return (FALSE);

#ifdef EXAMINE_BOOTARGS
	RETAILMSG(DEBUGMODE, (TEXT("SerOpen - Bootargs ComPort %x\r\n"), pHWHead->pBootArgs->ucComPort));
	// If the port is in use as a debugger port, don't allow opens.
	if ( ((pHWHead->pBootArgs->ucComPort == 1) && (pHWHead->dwIOBase == COM1_BASE)) ||
		((pHWHead->pBootArgs->ucComPort == 2) && (pHWHead->dwIOBase == COM2_BASE)) || 
		((pHWHead->pBootArgs->ucComPort == 3) && (pHWHead->dwIOBase == COM3_BASE)) ||
		((pHWHead->pBootArgs->ucComPort == 4) && (pHWHead->dwIOBase == COM4_BASE)) )
	{
		RETAILMSG (DEBUGMODE, (TEXT("SerOpen - Fail open of debug port\r\n")));        
		return (FALSE);        
	}
#endif

	pHWHead->cOpenCount++;

	if ( pHWHead->fIRMode == TRUE )
		RETAILMSG(DEBUGMODE,(TEXT("Use IrDA \r\n")));
	else
		RETAILMSG(DEBUGMODE,(TEXT("Use Serail \r\n")));
	SerSetOutputMode(pHWHead, pHWHead->fIRMode, !pHWHead->fIRMode );  

	// NOTE: - If we wanted to support 16450s, we'll could dynamically
	// identify them here.

	// Init SER2440 info
	RETAILMSG(DEBUGMODE, (TEXT("SerOpen - Calling SL_Open\r\n")));
	SL_Open( pHWHead );
	RETAILMSG(DEBUGMODE, (TEXT("SerOpen - Return TRUE\r\n")));

	return (TRUE);
}

const
HW_VTBL IoVTbl = {
	SerInitSerial,
	SL_PostInit,
	SerDeinit,
	SerOpen,
	SerClose,
	SL_GetInterruptType,
	SL_RxIntr,
	SL_TxIntrEx,
	SL_ModemIntr,
	SL_LineIntr,
	SL_GetRxBufferSize,
	SerPowerOff,
	SerPowerOn,
	SL_ClearDTR,
	SL_SetDTR,
	SL_ClearRTS,
	SL_SetRTS,
	SerEnableSerial,
	SerDisableSerial,
	SL_ClearBreak,
	SL_SetBreak,
	SL_XmitComChar,
	SL_GetStatus,
	SL_Reset,
	SL_GetModemStatus,
	SerGetCommProperties,
	SL_PurgeComm,
	SL_SetDCB,
	SL_SetCommTimeouts,
	};

const		//use of UART1		
HW_VTBL IoVTbl2 = {
	SerInitSerial2,
	SL_PostInit,
	SerDeinit,
	SerOpen,
	SerClose,
	SL_GetInterruptType,
	SL_RxIntr,
	SL_TxIntrEx,
	SL_ModemIntr,
	SL_LineIntr,
	SL_GetRxBufferSize,
	SerPowerOff,
	SerPowerOn,
	SL_ClearDTR,
	SL_SetDTR,
	SL_ClearRTS,
	SL_SetRTS,
	SerEnableSerial,
	SerDisableSerial,
	SL_ClearBreak,
	SL_SetBreak,
	SL_XmitComChar,
	SL_GetStatus,
	SL_Reset,
	SL_GetModemStatus,
	SerGetCommProperties,
	SL_PurgeComm,
	SL_SetDCB,
	SL_SetCommTimeouts,
	};

const		//use of UART2		
HW_VTBL IoVTbl3 = {
	SerInitSerial3,
	SL_PostInit,
	SerDeinit,
	SerOpen,
	SerClose,
	SL_GetInterruptType,
	SL_RxIntr,
	SL_TxIntrEx,
	SL_ModemIntr,
	SL_LineIntr,
	SL_GetRxBufferSize,
	SerPowerOff,
	SerPowerOn,
	SL_ClearDTR,
	SL_SetDTR,
	SL_ClearRTS,
	SL_SetRTS,
	SerEnableSerial,
	SerDisableSerial,
	SL_ClearBreak,
	SL_SetBreak,
	SL_XmitComChar,
	SL_GetStatus,
	SL_Reset,
	SL_GetModemStatus,
	SerGetCommProperties,
	SL_PurgeComm,
	SL_SetDCB,
	SL_SetCommTimeouts,
	};

extern const HW_VTBL SerCardIoVTbl;


const HWOBJ IoObj = {
	THREAD_AT_INIT,
	SYSINTR_SERIAL,
	(PHW_VTBL) &IoVTbl
};

const HWOBJ IoObj2 = {		
	THREAD_AT_INIT,
	SYSINTR_SERIAL2,
	(PHW_VTBL) &IoVTbl2
};


const HWOBJ IoObj3 = {	
	THREAD_AT_INIT,
	SYSINTR_SERIAL3,
	(PHW_VTBL) &IoVTbl3
};


typedef HWOBJ const *PCHWOBJ;


const PCHWOBJ HWObjects[] = {		
	&IoObj,
	&IoObj2,
	&IoObj3
};

// GetSerialObj : The purpose of this function is to allow multiple PDDs to be
// linked with a single MDD creating a multiport driver.  In such a driver, the
// MDD must be able to determine the correct vtbl and associated parameters for
// each PDD.  Immediately prior to calling HWInit, the MDD calls GetSerialObject
// to get the correct function pointers and parameters.
//
PHWOBJ
GetSerialObject(DWORD DeviceArrayIndex)
{
	PHWOBJ pSerObj;

	RETAILMSG(DEBUGMODE,(TEXT("IRDA : GetSerialObject\r\n")));

	IRDA = DeviceArrayIndex;

	// Now return this structure to the MDD.
	if ( DeviceArrayIndex == 0 )
		pSerObj = (PHWOBJ)(&IoObj);

	else if( DeviceArrayIndex == 1 )		
		pSerObj = (PHWOBJ)(&IoObj2);


	else if( DeviceArrayIndex == 2 )
		pSerObj = (PHWOBJ)(&IoObj3);

	return (pSerObj);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
白白色 亚洲乱淫| 亚洲欧美日韩中文播放| 欧美aaaaa成人免费观看视频| 欧美视频中文字幕| 天堂影院一区二区| 欧美精品日日鲁夜夜添| 午夜视频一区二区| 欧美成人bangbros| 国产·精品毛片| 亚洲欧洲韩国日本视频| 国产精一品亚洲二区在线视频| 欧洲精品一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 3d动漫精品啪啪| 国产精品一区一区三区| ...xxx性欧美| 制服丝袜一区二区三区| 国产一区视频网站| 亚洲精品一二三| 欧美一区二区国产| 不卡一区二区中文字幕| 午夜国产不卡在线观看视频| 一本色道a无线码一区v| 国产精品国产三级国产| 制服丝袜国产精品| 国产aⅴ综合色| 午夜精品久久久久久| 欧美激情艳妇裸体舞| 欧美日韩精品一区二区三区蜜桃 | 一区二区三区精品| 日韩午夜激情免费电影| 成人精品免费看| 婷婷夜色潮精品综合在线| 欧美军同video69gay| 亚洲va韩国va欧美va精品| 成人动漫在线一区| 国产精品一卡二卡| 欧美一级国产精品| 午夜电影一区二区三区| 91麻豆精品在线观看| 国产精品久久毛片a| 国产成人av影院| 久久蜜桃av一区精品变态类天堂 | 亚洲国产高清aⅴ视频| 奇米色一区二区三区四区| 欧美美女视频在线观看| 亚洲精品成人悠悠色影视| 91在线视频官网| 亚洲免费在线视频一区 二区| 北条麻妃国产九九精品视频| 国产精品午夜电影| a4yy欧美一区二区三区| 中文字幕一区二区在线播放 | 久久超碰97中文字幕| 欧美成va人片在线观看| 九一久久久久久| 久久先锋影音av| 丰满白嫩尤物一区二区| 国产精品乱人伦| 在线亚洲免费视频| 亚洲777理论| 欧美一区二区三区四区视频| 久久不见久久见免费视频1| 欧美高清精品3d| 亚洲另类在线一区| 欧美丝袜自拍制服另类| 蜜桃久久av一区| 国产人伦精品一区二区| 97se亚洲国产综合自在线不卡| 国产精品久久精品日日| 欧美天堂一区二区三区| 免费高清成人在线| 国产精品视频在线看| 日韩视频中午一区| 国产激情一区二区三区桃花岛亚洲| 亚洲国产高清不卡| 欧美丝袜丝交足nylons图片| 日本欧美肥老太交大片| 国产欧美视频在线观看| 欧美三级蜜桃2在线观看| 麻豆91精品视频| 亚洲天堂免费看| 日韩一卡二卡三卡四卡| 国产精品一级片| 午夜精品久久一牛影视| 国产精品色呦呦| 欧美日韩一区二区三区高清| 国产乱码一区二区三区| 一区二区成人在线| 久久综合九色欧美综合狠狠| av在线这里只有精品| 日韩和的一区二区| 中文字幕一区不卡| 欧美电影精品一区二区| 色94色欧美sute亚洲线路一久| 韩国av一区二区三区四区| 亚洲自拍欧美精品| 国产色91在线| 日韩亚洲电影在线| 在线视频一区二区免费| 丁香婷婷综合色啪| 免费欧美在线视频| 亚洲精品免费播放| 欧美经典一区二区三区| 日韩一二在线观看| 欧美日韩亚洲综合一区| www.久久久久久久久| 久久99精品一区二区三区三区| 国产精品免费丝袜| 精品欧美一区二区在线观看| 欧美优质美女网站| 99精品视频一区二区| 国产盗摄精品一区二区三区在线| 日韩有码一区二区三区| 亚洲一二三专区| 中文字幕一区二区5566日韩| 精品欧美一区二区久久| 欧美日韩亚洲综合一区二区三区| 成人高清免费观看| 国产高清不卡二三区| 午夜不卡av免费| 亚洲美女免费在线| 国产欧美日韩精品在线| 欧美私人免费视频| 99在线精品一区二区三区| 激情综合亚洲精品| 亚洲乱码中文字幕| 国产精品免费久久| 日韩欧美一二区| 91精品国产综合久久精品图片| 大陆成人av片| 丰满少妇在线播放bd日韩电影| 日韩1区2区日韩1区2区| 亚洲bt欧美bt精品| 婷婷中文字幕综合| 亚洲美女淫视频| 亚洲精品视频免费看| 久久久久久夜精品精品免费| 日韩欧美一卡二卡| 久久久精品免费观看| 亚洲国产精品久久人人爱| 日韩欧美第一区| 欧美电影免费观看高清完整版在线| 成人av在线播放网址| 风流少妇一区二区| 国内成人精品2018免费看| 日本va欧美va欧美va精品| 亚洲国产精品自拍| 亚洲va欧美va天堂v国产综合| 亚洲高清久久久| 亚洲男人电影天堂| 国产亚洲综合av| 欧美午夜精品一区二区三区| 欧美日韩精品欧美日韩精品| 一本色道久久综合亚洲91| 国产成人免费网站| 久久综合中文字幕| 91久久精品一区二区三区| 激情都市一区二区| 午夜精品福利一区二区蜜股av| 亚洲国产精品欧美一二99| 美女脱光内衣内裤视频久久影院| 日韩精品一级中文字幕精品视频免费观看 | 精品国产免费视频| 久久综合九色欧美综合狠狠 | 亚洲一级二级在线| 2023国产精品视频| 制服视频三区第一页精品| 欧美一级黄色片| 日韩亚洲电影在线| 欧美制服丝袜第一页| 奇米影视7777精品一区二区| 亚洲综合小说图片| 视频在线在亚洲| 久久精品国产77777蜜臀| 国产欧美精品一区二区色综合| 久久亚洲欧美国产精品乐播| 99国产精品国产精品久久| 国产精品资源网| 成人18视频日本| 精品久久久久久最新网址| 最新国产成人在线观看| 午夜私人影院久久久久| 成人福利视频网站| 日韩一区二区三| 最近中文字幕一区二区三区| 久久国产视频网| 99这里都是精品| 精品国产伦一区二区三区观看方式| 日本一区二区视频在线| 日韩**一区毛片| 91免费版pro下载短视频| 日韩免费视频线观看| 亚洲国产一区二区在线播放| 国产iv一区二区三区| 精品免费日韩av| 婷婷综合五月天| 欧美亚洲高清一区| 国产精品国产三级国产| 国产裸体歌舞团一区二区|