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

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

?? ser2410_hw.c

?? 增加串口,主要是wince方面的
?? C
?? 第 1 頁 / 共 5 頁
字號:
	pHWHead->UART_INTSUBSRCPND = (volatile unsigned int *)(INTSUB_BASE);
#endif
	pHWHead->vUMSTAT = 0;

#if USEVIRTUAL
	if ( pHWHead->UseIrDA )
	{
		pHWHead->pUFTXH = (volatile unsigned char *)&(v_pUART2regs->rUTXH);
		pHWHead->pUFRXH = (volatile unsigned char *)&(v_pUART2regs->rURXH);    
	}
	else
	{
		if(pHWHead1->dwIOBase == 0x50000000)
		{
			pHWHead->pUFTXH = (volatile unsigned char *)&(v_pUART0regs->rUTXH);
			pHWHead->pUFRXH = (volatile unsigned char *)&(v_pUART0regs->rURXH);
		}
		else if(pHWHead1->dwIOBase == 0x50004000)	// add by perry
		{
			pHWHead->pUFTXH = (volatile unsigned char *)&(v_pUART1regs->rUTXH);
			pHWHead->pUFRXH = (volatile unsigned char *)&(v_pUART1regs->rURXH); 
		}
		else if(pHWHead1->dwIOBase == 0x50008000)
		{
			pHWHead->pUFTXH = (volatile unsigned char *)&(v_pUART2regs->rUTXH);
			pHWHead->pUFRXH = (volatile unsigned char *)&(v_pUART2regs->rURXH);    
		}
	}
#else
	pHWHead->pUFTXH = (volatile unsigned char *)&(pHWHead->s2410SerReg->rUTXH);
	pHWHead->pUFRXH = (volatile unsigned char *)&(pHWHead->s2410SerReg->rURXH);    
#endif

	InitializeCriticalSection(&(pHWHead->TransmitCritSec));
	InitializeCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("+ S2410_SetIrDAIOP \r\n")));
	S2410_SetIrDAIOP(pHead);
	RETAILMSG(DEBUGMODE, (TEXT("- S2410_SetIrDAIOP \r\n")));

	// Store info for callback function
	pHWHead->EventCallback = EventCallback;
	pHWHead->pMddHead = pMddHead;

	// Now set up remaining fields
	if ( pBaudTable != NULL )
		pHWHead->pBaudTable = (LOOKUP_TBL *) pBaudTable;
	else
		pHWHead->pBaudTable = (LOOKUP_TBL *) &LS_BaudTable;
	pHWHead->FlushDone      = CreateEvent(0, FALSE, FALSE, NULL);

	pHWHead->OpenCount = 0;

	// Don't allow any interrupts till PostInit.
	DisEnINT(pHWHead, pHWHead->bINT);
	DisEnSubINT(pHWHead, pHWHead->bTxINT | pHWHead->bRxINT | pHWHead->bErrINT);

	pHWHead->fSW_EnTxINT = FALSE;
	pHWHead->RxDiscard = FALSE;

	// Clear any interrupts which may be pending.  Normally only
	// happens if we were warm reset.
	ClearPendingInts( pHWHead );
}

//
// @doc OEM
// @func void | SL_PostInit | This routine takes care of final initialization.
//
// @rdesc None.
//
BOOL
SL_PostInit(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("SL_PostInit \r\n")));
	// Since we are just a library which might get used for 
	// builtin ports which init at boot, or by PCMCIA ports
	// which init at Open, we can't do anything too fancy.
	// Lets just make sure we cancel any pending interrupts so
	// that if we are being used with an edge triggered PIC, he
	// will see an edge after the MDD hooks the interrupt.
	ClearPendingInts( pHWHead );
	return(TRUE);
}

//
// @doc OEM 
// @func PVOID | SL_Deinit | De-initializes 16550 device head.  
//
VOID
SL_Deinit(
         PVOID   pHead // @parm points to device head
         )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("SL_Deinit \r\n")));
	DeleteCriticalSection(&(pHWHead->TransmitCritSec));
	DeleteCriticalSection(&(pHWHead->RegCritSec));

	// Free the flushdone event
	if ( pHWHead->FlushDone )
	    CloseHandle( pHWHead->FlushDone );
}

//
// @doc OEM
// @func void | SL_ClearDtr | This routine clears DTR.
//
// @rdesc None.
//
VOID
SL_ClearDTR(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_ClearDTR, 0x%X\r\n"), pHead));
	RETAILMSG(DEBUGMODE, (TEXT("UseIrDA, %d\r\n"), pHWHead->UseIrDA));
	// RETAILMSG(DEBUGMODE,  (TEXT("SL_ClearDTR:\r\n")));     
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		// Low active pin.
		if ( !pHWHead->UseIrDA )
			*(pHWHead->rDTRport) |= (1<<(pHWHead->DtrPortNum));
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Just exit
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_ClearDTR, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_SetDTR | This routine sets DTR.
// 
// @rdesc None.
//
VOID
SL_SetDTR(
         PVOID   pHead // @parm PVOID returned by HWinit.
         )
{    
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_SetDTR, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		// Low active
		if ( !pHWHead->UseIrDA )
			*(pHWHead->rDTRport) &= ~(1<<(pHWHead->DtrPortNum));
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Just exit
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetDTR, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_ClearRTS | This routine clears RTS.
// 
// @rdesc None.
// 
VOID
SL_ClearRTS(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_ClearRTS, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		CLEARREG(pHWHead, rUMCON, SER2410_RTS);
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Just exit
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));
	RETAILMSG(DEBUGMODE, (TEXT("-SL_ClearRTS, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_SetRTS | This routine sets RTS.
// 
// @rdesc None.
//
VOID
SL_SetRTS(
         PVOID   pHead // @parm PVOID returned by HWinit.
         )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_SetRTS, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		SETREG(pHWHead, rUMCON, SER2410_RTS);
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Just exit
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));
	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetRTS, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_ClearBreak | This routine clears break.
// 
// @rdesc None.
// 
VOID
SL_ClearBreak(
             PVOID   pHead // @parm PVOID returned by HWinit.
             )
{
	PS2410_UART_INFO   pHWHead   = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE,  (TEXT("SL_ClearBreak:\r\n"))); 
	// S2410 does not need to clear break signal, for cleared by automatic.
}

//
// @doc OEM
// @func VOID | SL_SetBreak | This routine sets break.
// 
// @rdesc None.
//
VOID
SL_SetBreak(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_SetBreak, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		SETREG(pHWHead,rUCON,BS_SEND);
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		// Just exit
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));
	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetBreak, 0x%X\r\n"), pHead));
}

//
// SetBaudRate
//
// Internal function.  The only real reason for splitting this out
// is so that we can call it from PowerOn and still allow SL_SetBaud
// to do debug messages, acquire critical sections, etc.
//
BOOL
SetBaudRate(
           PVOID   pHead,
           ULONG   BaudRate
           )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("SetBaudRate -> %d\r\n"), BaudRate));
	if ( (pHWHead->s2410SerReg->rUCON & CS_MASK) == CS_PCLK )
		OUTREG(pHWHead,rUBRDIV,( (int)(S2410PCLK/16.0/BaudRate) -1 ));
	else		// if  ( (pHWHead2->s2410SerReg->rUCON & CS_MASK) == CS_UCLK )
		OUTREG(pHWHead,rUBRDIV,( (int)(S2410UCLK/16.0/BaudRate) -1 ));

	return( TRUE );
}

//
// @doc OEM
// @func BOOL | SL_SetBaudRate |
//  This routine sets the baud rate of the device.
//
// @rdesc None.
//
BOOL
SL_SetBaudRate(
              PVOID   pHead,    // @parm     PVOID returned by HWInit
              ULONG   BaudRate    // @parm     ULONG representing decimal baud rate.
              )
{
	BOOL fRet;
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;

	RETAILMSG (DEBUGMODE, (TEXT("+SL_SetbaudRate 0x%X, %d\r\n"), pHead, BaudRate));

	try {
		// Enter critical section before calling function, since
		// we can't make sys calls inside SetBaudRate
		EnterCriticalSection(&(pHWHead->RegCritSec));
		fRet = SetBaudRate(pHead, BaudRate);
		LeaveCriticalSection(&(pHWHead->RegCritSec));
	}except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		return( FALSE );
	}

	if ( fRet ) {
		pHWHead->dcb.BaudRate = BaudRate;

		RETAILMSG(DEBUGMODE,
			(TEXT("-SL_SetbaudRate 0x%X (%d Baud)\r\n"),
			pHead, BaudRate));
		return( TRUE );
	} else {
		RETAILMSG(DEBUGMODE,
			(TEXT("-SL_SetbaudRate - Error setting %d, failing to %d\r\n"),
			BaudRate, pHWHead->dcb.BaudRate) );
		return( FALSE );
	}
}

//
// @doc OEM
// @func BOOL | SL_SetByteSize |
//  This routine sets the WordSize of the device.
//
// @rdesc None.
//
BOOL
SL_SetByteSize(
              PVOID   pHead,        // @parm     PVOID returned by HWInit
              ULONG   ByteSize    // @parm     ULONG ByteSize field from DCB.
              )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;
	UINT32 lcr;
	BOOL bRet;

	RETAILMSG(DEBUGMODE,(TEXT("+SL_SetByteSize 0x%X, 0x%X\r\n"), pHead, ByteSize));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {      
		lcr = (UINT32)INREG(pHWHead,rULCON);
		lcr &= ~SER2410_DATABIT_MASK;

		switch ( ByteSize ) {
		case 5:
			lcr |= 0;//SERIAL_5_DATA;
		break;
		case 6:
			lcr |= 1;//SERIAL_6_DATA;
		break;
		case 7:
			lcr |= 2;//SERIAL_7_DATA;
		break;
		case 8:
			lcr |= 3;//SERIAL_8_DATA;
		break;
		default:
			bRet = FALSE;
		break;
		}
		if (bRet) {
			OUTREG(pHWHead,rULCON,lcr); 
		}
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
		bRet = FALSE;
	}
	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE,(TEXT("-SL_SetByteSize 0x%X\r\n"), pHead));

	return(bRet);
}

//
// @doc OEM
// @func BOOL | SL_SetParity |
//  This routine sets the parity of the device.
//
// @rdesc None.
//
BOOL
SL_SetParity(
            PVOID   pHead,    // @parm     PVOID returned by HWInit
            ULONG   Parity    // @parm     ULONG parity field from DCB.
            )
{
	PS2410_UART_INFO    pHWHead = (PS2410_UART_INFO)pHead;

	UINT32 lcr;
	BOOL bRet;

	RETAILMSG(DEBUGMODE,(TEXT("+SL_SetParity 0x%X, 0x%X\r\n"), pHead, Parity));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));
	try {
		lcr = (UINT32)INREG(pHWHead,rULCON);      
		lcr &= ~SER2410_PARITY_MASK;

		switch ( Parity ) {
		case ODDPARITY:
			lcr |= 0x20;//SERIAL_ODD_PARITY;
		break;

		case EVENPARITY:
			lcr |= 0x28;//SERIAL_EVEN_PARITY;
		break;

		case MARKPARITY:
			lcr |= 0x30;//SERIAL_MARK_PARITY;
		break;

		case SPACEPARITY:
			lcr |= 0x38;//SERIAL_SPACE_PARITY;
		break;

		case NOPARITY:
			lcr |= 0;//SERIAL_NONE_PARITY;
		break;
		default:
			bRet = FALSE;
		break;
		}
		if (bRet) {
			OUTREG(pHWHead,rULCON,lcr) ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青青爽久久午夜综合久久午夜| 日韩午夜精品视频| 国产精品美女一区二区三区| 国产成人av资源| 国产精品视频你懂的| 99久久免费国产| 亚洲国产欧美一区二区三区丁香婷| 一本到不卡精品视频在线观看| 亚洲国产精品久久艾草纯爱| 91精品国产综合久久精品app| 日本三级亚洲精品| 2023国产精华国产精品| 99久久伊人精品| 婷婷六月综合网| 欧美久久久一区| 怡红院av一区二区三区| www.欧美亚洲| 国产精品久久久久久久久久久免费看| 91丨porny丨蝌蚪视频| 一区二区三区欧美| 欧美成人艳星乳罩| 成人黄页毛片网站| 日韩av一级片| 亚洲欧洲精品一区二区精品久久久| 欧美性色欧美a在线播放| 久久99国产精品免费网站| 日韩精品一二区| 久久精品视频在线看| 91麻豆精品在线观看| 日韩国产精品大片| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产精品久久久久久一区二区三区 | av不卡在线播放| 丝袜诱惑亚洲看片| 亚洲欧美在线视频观看| 这里是久久伊人| 色偷偷久久人人79超碰人人澡| 美女看a上一区| 亚洲综合一区二区三区| 国产亚洲一区二区三区| 欧美日韩精品三区| 国产成人三级在线观看| 日韩经典一区二区| 中文字幕一区视频| 精品国产一区a| 欧美精品粉嫩高潮一区二区| 91在线码无精品| 国产又黄又大久久| 日韩电影网1区2区| 亚洲精品视频在线看| 国产精品网曝门| 精品国产百合女同互慰| 91.xcao| 欧美性xxxxxxxx| 北条麻妃国产九九精品视频| 国产精品系列在线播放| 精品中文字幕一区二区小辣椒| 亚洲高清不卡在线| 亚洲一区在线观看免费观看电影高清| 国产午夜亚洲精品理论片色戒 | 亚洲天堂2016| 国产精品久久三| 国产日韩v精品一区二区| 日韩视频免费直播| 欧美精品 国产精品| 色噜噜狠狠一区二区三区果冻| 国产.欧美.日韩| 国内欧美视频一区二区| 日本一区中文字幕| 亚洲v中文字幕| 亚洲一区欧美一区| 一区二区三区欧美激情| 亚洲精品综合在线| 国产精品国产三级国产| 国产丝袜在线精品| 国产亚洲精久久久久久| 久久久不卡网国产精品二区| 久久精品亚洲精品国产欧美kt∨| 久久老女人爱爱| 国产日产欧美一区| 久久99精品一区二区三区三区| 日韩av一区二| 国内精品在线播放| 国产精品亚洲成人| 成人高清视频免费观看| 91丨porny丨在线| 欧洲日韩一区二区三区| 欧美日韩一级二级三级| 欧美一区二区精品在线| 日韩精品中文字幕一区二区三区 | 日本一区二区三区在线观看| 国产欧美一区二区三区网站 | 精品国产伦一区二区三区免费| 欧美精品一区二区不卡| 国产精品无人区| 亚洲三级在线看| 午夜欧美一区二区三区在线播放| 日韩激情中文字幕| 国内一区二区在线| 99久久99久久精品国产片果冻| 欧美在线你懂的| 欧美电影精品一区二区| 久久精品一二三| 亚洲国产欧美日韩另类综合| 人人爽香蕉精品| 国产99久久久国产精品潘金| 91在线观看污| 日韩一二三区视频| 国产欧美一区二区三区鸳鸯浴| 一区二区三区av电影| 青青草国产精品97视觉盛宴| 国产99久久久国产精品免费看 | 欧美日韩精品一区二区在线播放| 日韩一级免费一区| 国产精品久久久久毛片软件| 视频一区中文字幕国产| 国产精品一区二区在线观看不卡 | 国模一区二区三区白浆| 色综合色综合色综合 | 一区二区在线观看不卡| 日韩av一区二区三区四区| 成人国产精品免费网站| 91精品国产欧美一区二区18| 亚洲国产成人私人影院tom| 亚洲国产欧美另类丝袜| 成人午夜看片网址| 91精品麻豆日日躁夜夜躁| 国产精品久久久久影院老司 | 激情图区综合网| 日本久久一区二区| 久久众筹精品私拍模特| 亚洲午夜国产一区99re久久| 成人免费毛片片v| 日韩欧美亚洲国产另类| 一区二区高清在线| 国产一区欧美一区| 337p亚洲精品色噜噜噜| 亚洲欧美日韩成人高清在线一区| 久久精品噜噜噜成人88aⅴ| 在线视频综合导航| 亚洲欧洲日韩av| 成人h动漫精品一区二区| 日韩精品专区在线影院重磅| 亚洲人成网站影音先锋播放| 国产精品一线二线三线| 日韩视频不卡中文| 亚洲国产精品久久艾草纯爱| 99re视频精品| 中文天堂在线一区| 国产美女娇喘av呻吟久久| 日韩一区二区三区高清免费看看| 亚洲国产va精品久久久不卡综合| 不卡视频免费播放| 久久精品一级爱片| 韩国v欧美v亚洲v日本v| 精品国精品自拍自在线| 青青草91视频| 日韩亚洲电影在线| 日韩精品1区2区3区| 欧美伦理电影网| 亚洲已满18点击进入久久| 91麻豆国产福利精品| 日韩毛片视频在线看| 99国产欧美久久久精品| 亚洲色欲色欲www在线观看| 成人黄色777网| 亚洲视频一二三区| 91丨九色丨国产丨porny| 亚洲婷婷国产精品电影人久久| 99精品久久久久久| 亚洲欧美日韩人成在线播放| 97久久超碰精品国产| ...av二区三区久久精品| 色婷婷国产精品久久包臀| 亚洲精品国产成人久久av盗摄 | 成人av高清在线| 亚洲国产精品ⅴa在线观看| fc2成人免费人成在线观看播放| 国产精品入口麻豆九色| 91小视频免费看| 亚洲一区二区三区美女| 在线播放日韩导航| 精品一区二区久久| 国产女主播一区| 日本韩国一区二区| 日韩精品电影在线| 国产日韩成人精品| 欧美精品久久久久久久多人混战| 久久99精品久久久久婷婷| 国产亚洲精品7777| 日本韩国欧美一区| 日韩在线卡一卡二| 久久久久久一级片| 91丨porny丨国产| 婷婷综合另类小说色区| 精品国产精品网麻豆系列| 成人开心网精品视频| 亚洲综合免费观看高清在线观看| 欧美一级午夜免费电影| 成人国产免费视频|