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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ser2410_ser.c

?? 增加串口,主要是wince方面的
?? C
?? 第 1 頁 / 共 2 頁
字號:
		// 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 );

	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("SerSetBaudRate \r\n")));
	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.
 */
static
BOOL
SerPowerOff(
           PVOID   pHead       // @parm	PVOID returned by SerInit.
           )
{
	PSER_INFO   pHWHead = (PSER_INFO)pHead;

	RETAILMSG(DEBUGMODE,(TEXT("SerPowerOff\r\n")));
	// 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.
 */
static
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 SER2410 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
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
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
HW_VTBL IrVTbl = {
	SerInitIR,
	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,
	SerEnableIR,
	SerDisableIR,
	SL_ClearBreak,
	SL_SetBreak,
	SL_XmitComChar,
	SL_GetStatus,
	SL_Reset,
	SL_GetModemStatus,
	SerGetCommProperties,
	SL_PurgeComm,
	SL_SetDCB,
	SL_SetCommTimeouts,
	};
extern const HW_VTBL SerCardIrVTbl;

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
};

/*const HWOBJ IrObj = {
	THREAD_AT_INIT,
	SYSINTR_IR,
	(PHW_VTBL) &IrVTbl
};*/

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("GetSerialObject : DeviceArrayIndex = %d\r\n"), 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);

	else
		pSerObj = (PHWOBJ)(&IoObj);


	return (pSerObj);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久久男人的天堂| 亚洲视频一区二区在线| 久久国产三级精品| 久久综合久久综合久久| 国产精品资源在线观看| 亚洲欧美一区二区三区国产精品| 欧美专区日韩专区| 日韩激情一二三区| 国产欧美精品日韩区二区麻豆天美| proumb性欧美在线观看| 亚洲电影你懂得| 国产精品三级视频| 日韩午夜电影在线观看| 91黄视频在线| 色视频欧美一区二区三区| 国产麻豆精品久久一二三| 麻豆视频观看网址久久| 亚洲午夜精品17c| 夜夜爽夜夜爽精品视频| 国产精品国产馆在线真实露脸| 日韩免费观看高清完整版在线观看| 欧美亚洲国产一区二区三区 | 99久久综合狠狠综合久久| 免费人成在线不卡| 亚洲一区在线观看网站| 午夜av区久久| 玖玖九九国产精品| 日韩激情一二三区| 精品一区精品二区高清| 九九在线精品视频| 国产一二精品视频| 国产一区二区在线观看免费| 国产在线日韩欧美| 国产成人av福利| 国产精品99久久久久久久女警| 成人免费视频网站在线观看| 91丨九色丨蝌蚪富婆spa| 91国在线观看| 日韩一区二区在线看片| 久久蜜桃av一区二区天堂 | 色综合久久综合网97色综合 | 久久99精品国产麻豆不卡| 成人午夜大片免费观看| 91久久精品一区二区| 欧美日韩成人综合在线一区二区| 丝袜美腿亚洲一区二区图片| 日产欧产美韩系列久久99| 国产精品一二三在| 欧美日韩国产在线播放网站| 亚洲精品一区二区三区影院| 亚洲日本电影在线| 久久激情五月激情| 欧美午夜寂寞影院| 国产精品乱码人人做人人爱 | 欧美日韩国产高清一区二区三区| 日韩一区二区三区观看| 国产精品黄色在线观看| 日韩成人午夜电影| 色婷婷av一区二区三区大白胸| 日韩视频在线一区二区| 婷婷中文字幕综合| 欧美日韩国产首页在线观看| 2023国产精品自拍| 国产资源在线一区| 精品国产91久久久久久久妲己| 亚洲国产aⅴ天堂久久| 欧美主播一区二区三区| 一区二区激情视频| 欧美三日本三级三级在线播放| 亚洲精品成人悠悠色影视| 色综合婷婷久久| 亚洲日本va午夜在线影院| 成人精品国产一区二区4080| 国产精品久久久久久久第一福利 | 欧美一卡二卡三卡四卡| 久久99热99| 久久久久久久久免费| 国产suv精品一区二区6| 欧美韩日一区二区三区| 日本丶国产丶欧美色综合| 亚洲综合视频在线| 欧美成人三级电影在线| 成人精品视频一区二区三区尤物| 精品福利在线导航| 国产传媒日韩欧美成人| 亚洲午夜在线电影| 久久婷婷久久一区二区三区| 成人免费毛片app| 日韩av中文字幕一区二区三区| 久久午夜老司机| 欧美人xxxx| 欧美三级中文字| 欧美日韩国产欧美日美国产精品| 在线综合亚洲欧美在线视频| 亚洲女人小视频在线观看| av毛片久久久久**hd| 黄一区二区三区| 国产精品1区二区.| 成人av网站在线观看免费| 成人av电影在线观看| 日本不卡高清视频| 亚洲欧美日韩国产手机在线| 久久久电影一区二区三区| 欧美另类变人与禽xxxxx| 国产成人福利片| 国产99久久久国产精品潘金| 丝袜诱惑亚洲看片| 亚洲一区二区视频在线观看| 久久婷婷色综合| 日韩欧美国产系列| 欧美性受极品xxxx喷水| 97精品超碰一区二区三区| 国产盗摄一区二区| 欧美综合天天夜夜久久| 一本色道综合亚洲| 欧美日韩视频专区在线播放| 欧美成人女星排行榜| 欧美成人a∨高清免费观看| 国产超碰在线一区| 国产一区二区0| 亚洲精品高清视频在线观看| 亚洲精品久久嫩草网站秘色| 欧美mv日韩mv| 欧美日韩免费一区二区三区视频| 欧美日韩日日摸| 精品国产乱码久久久久久1区2区| 国产精品白丝在线| 奇米色一区二区| 黑人巨大精品欧美黑白配亚洲| 粉嫩嫩av羞羞动漫久久久| 在线这里只有精品| 国产欧美日韩在线看| 久久69国产一区二区蜜臀| heyzo一本久久综合| 欧美一区日本一区韩国一区| 91精品蜜臀在线一区尤物| 色综合色狠狠综合色| 成人网在线免费视频| 亚洲欧美激情小说另类| 成人免费毛片a| 亚洲小少妇裸体bbw| 欧美哺乳videos| 国产精品中文欧美| 色综合天天性综合| 最新日韩av在线| av日韩在线网站| 一区二区三区日韩精品视频| 国产成人啪免费观看软件| 欧美一级在线观看| 日韩高清一区二区| 欧美精品久久天天躁| 亚洲国产成人av| 成人sese在线| 亚洲一区二区在线观看视频| 91色视频在线| 亚洲国产精品ⅴa在线观看| 国产一区二区三区四| 欧美成人在线直播| 成人一区二区视频| 一区二区三区在线视频观看| 欧美老女人在线| 国产乱码字幕精品高清av| 久久久精品天堂| 91麻豆精品国产91久久久| 麻豆国产欧美一区二区三区| 自拍av一区二区三区| 精品欧美一区二区久久| 日韩免费视频一区| 欧美伊人久久久久久久久影院| 亚洲成av人片| 中文字幕视频一区| 4438成人网| 国产成人在线视频网站| 一区二区不卡在线播放| 7777精品伊人久久久大香线蕉经典版下载| 日本不卡的三区四区五区| 一区免费观看视频| 精品少妇一区二区三区在线视频| 成人91在线观看| 国产一区二区视频在线| 亚洲一区二区三区四区在线| 国产精品麻豆一区二区| 欧美v亚洲v综合ⅴ国产v| 色综合久久天天| 成人免费视频免费观看| 国产精品一二三四| 国产99久久久国产精品| 99麻豆久久久国产精品免费 | 经典三级一区二区| 国产91精品一区二区麻豆网站| 豆国产96在线|亚洲| 日本精品裸体写真集在线观看| 欧美日韩一区二区三区在线看| 欧美日韩国产大片| 久久精品一级爱片| 一区二区三区在线视频播放 | 国产区在线观看成人精品| 日韩欧美中文字幕精品| 欧美一二区视频| 久久欧美中文字幕|