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

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

?? ccir.c

?? WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
					  (TEXT("PutBytes, flowed on via DSR\n") ) );
            pHWHead->DSRFlowOff = FALSE;
             // DSR is set, so go ahead and resume sending
            OUTB(pHWHead, pIER, IER_NORMAL_INTS | SERIAL_IER_THR); // Enable xmit intr.
             // Then simulate a TX intr to get things moving
			pHWHead->AddTXIntr = TRUE;
        }
        if ( pHWHead->CTSFlowOff && (pHWHead->MSR & SERIAL_MSR_CTS) )
        {
            DEBUGMSG (ZONE_WRITE|ZONE_FLOW,
					  (TEXT("PutBytes, flowed on via CTS\n") ) );
            pHWHead->CTSFlowOff = FALSE;
             // CTS is set, so go ahead and resume sending
            OUTB(pHWHead, pIER, IER_NORMAL_INTS | SERIAL_IER_THR); // Enable xmit intr.
             // Then simulate a TX intr to get things moving
			pHWHead->AddTXIntr = TRUE;
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    
    DEBUGMSG (0,
              (TEXT("-CCIR_OtherIntr 0x%X\r\n"), pHead));
}
        

//  
// @doc OEM
// @func	ULONG | CCIR_GetStatus | This structure is called by the MDD
//   to retrieve the contents of a COMSTAT structure.
//
// @rdesc	The return is a ULONG, representing success (0) or failure (-1).
//
ULONG
CCIR_GetStatus(
    PVOID	pHead,	// @parm PVOID returned by HWInit.
    LPCOMSTAT	lpStat	// Pointer to LPCOMMSTAT to hold status.
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;
    ULONG	  RetVal  = pHWHead->CommErrors;
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_GetStatus 0x%X\r\n"), pHead));

    pHWHead->CommErrors = 0; // Clear old errors each time

    if ( lpStat )
	{
        try
        {
            if (pHWHead->CTSFlowOff)
                pHWHead->Status.fCtsHold = 1;
            else
                pHWHead->Status.fCtsHold = 0;
                    
            if (pHWHead->DSRFlowOff)
                pHWHead->Status.fDsrHold = 1;
            else
                pHWHead->Status.fDsrHold = 0;

             // NOTE - I think what they really want to know here is
             // the amount of data in the MDD buffer, not the amount
             // in the UART itself.  Just set to 0 for now since the
             // MDD doesn't take care of this.
            pHWHead->Status.cbInQue  = 0;
            pHWHead->Status.cbOutQue = 0;

            memcpy(lpStat, &(pHWHead->Status), sizeof(COMSTAT));
        }
        except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
            RetVal = (ULONG)-1;
        }        
	}
    else
        RetVal = (ULONG)-1;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_GetStatus 0x%X\r\n"), pHead));
    return RetVal;
}

//
// @doc OEM
// @func	ULONG | CCIR_Reset | Perform any operations associated
//   with a device reset
//
// @rdesc	None.
//
VOID
CCIR_Reset(
    PVOID   pHead	// @parm PVOID returned by HWInit.
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_Reset 0x%X\r\n"), pHead));

    memset(&pHWHead->Status, 0, sizeof(COMSTAT));
    try
    {
        OUTB(pHWHead, pIER, IER_NORMAL_INTS);
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Do nothing
    }
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_Reset 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func	VOID | CCIR_GetModemStatus | Retrieves modem status.
//
// @rdesc	None.
//
VOID
CCIR_GetModemStatus(
    PVOID   pHead,	    // @parm PVOID returned by HWInit.
    PULONG  pModemStatus    // @parm PULONG passed in by user.
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;
    UINT8 ubModemStatus;

    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_GetModemStatus 0x%X\r\n"), pHead));

    ReadMSR( pHWHead );
    ubModemStatus = pHWHead->MSR;
    
    if ( ubModemStatus & SERIAL_MSR_CTS )
        *pModemStatus |= MS_CTS_ON;

    if ( ubModemStatus & SERIAL_MSR_DSR )
        *pModemStatus |= MS_DSR_ON;

    if ( ubModemStatus & SERIAL_MSR_RI )
        *pModemStatus |= MS_RING_ON;

    if ( ubModemStatus & SERIAL_MSR_DCD )
        *pModemStatus |= MS_RLSD_ON;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_)GetModemStatus 0x%X\r\n"), pHead));
    return;
}

//
// @doc OEM
// @func	VOID | CCIR_PurgeComm | Purge RX and/or TX
// 
// @rdesc	None.
//

VOID
CCIR_PurgeComm(
    PVOID   pHead,	    // @parm PVOID returned by HWInit.
    DWORD   fdwAction	    // @parm Action to take. 
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_PurgeComm 0x%X\r\n"), pHead));

    try
    {
#ifdef TODO
        // REVIEW THIS - I don't see how this could have terminated a pending read,
        // nor how RX interrupts would ever get turned back on.  I suspect that
        // RXABORT and TXABORT would both be better implemented inthe MDD.
        if ( fdwAction & PURGE_RXABORT )
            OUTB(pHWHead, pIER, IER_NORMAL_INTS & ~SERIAL_IER_RDA);
#endif    
        if ( fdwAction & PURGE_TXCLEAR )
        {
            OUTB(pHWHead, pIIR_FCR, SERIAL_FCR_TXMT_RESET);
            OUTB(pHWHead, pIIR_FCR, pHWHead->FCR);
        }

        if ( fdwAction & PURGE_RXCLEAR )
        {
            OUTB(pHWHead, pIIR_FCR, SERIAL_FCR_RCVR_RESET);
            OUTB(pHWHead, pIIR_FCR, pHWHead->FCR);
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_PurgeComm 0x%X\r\n"), pHead));
    return;
}

//
// @doc OEM
// @func	BOOL | CCIR_XmitComChar | Transmit a char immediately
// 
// @rdesc	TRUE if succesful
//
BOOL
CCIR_XmitComChar(
    PVOID   pHead,    // @parm PVOID returned by HWInit.
    UCHAR   ComChar   // @parm Character to transmit. 
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_XmitComChar 0x%X\r\n"), pHead));

     // Get critical section, then transmit when buffer empties
    DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar wait for CritSec %x.\r\n"),
                           &(pHWHead->TransmitCritSec)));
    EnterCriticalSection(&(pHWHead->TransmitCritSec));
    DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar got CritSec %x.\r\n"),
                           &(pHWHead->TransmitCritSec)));
    try
    {
		 // Enable xmit intr.
		OUTB(pHWHead, pIER, IER_NORMAL_INTS | SERIAL_IER_THR);

        while( TRUE )  // We know THR will eventually empty
        {
			DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar wait THRE ier=%x\r\n"),
				INB(pHWHead,pIER) ));
            // Write the character if we can
            ReadLSR( pHWHead );
            if( pHWHead->LSR & SERIAL_LSR_THRE )
            {
                OUTB(pHWHead, pData, ComChar);
                break;
            }
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
		DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar exception!\r\n") ));
    }
	DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar sent char\r\n")));
    
    LeaveCriticalSection(&(pHWHead->TransmitCritSec));
    DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar released CritSec %x.\r\n"),
                           &(pHWHead->TransmitCritSec)));
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_XmitComChar 0x%X\r\n"), pHead));
    
    return TRUE;
}

//
// @doc OEM
// @func	BOOL | CCIR_PowerOff | Perform powerdown sequence.
// 
// @rdesc	TRUE if succesful
//
VOID
CCIR_PowerOff(
    PVOID   pHead	    // @parm	PVOID returned by HWInit.
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;

     // Current FCR is already saved in a shadow
    
     // Current IER is not normally shadowed, save it
    pHWHead->IER = INB(pHWHead, pIER);

     // Current LCR is not normally shadowed, save it
    pHWHead->LCR = INB(pHWHead, pLCR);

     // Current MCR is not normally shadowed, save it
    pHWHead->MCR = INB(pHWHead, pMCR);

     // Current Scratch is not normally shadowed, save it
    pHWHead->Scratch = INB(pHWHead, pScratch);
}

//
// @doc OEM
// @func	BOOL | CCIR_PowerOn | Perform poweron sequence.
// 
// @rdesc	TRUE if succesful
//
VOID
CCIR_PowerOn(
    PVOID   pHead	    // @parm	PVOID returned by HWInit.
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;

     // Restore any registers that we need
    OUTB(pHWHead, pIIR_FCR, pHWHead->FCR);
    OUTB(pHWHead, pIER, pHWHead->IER);
    OUTB(pHWHead, pLCR, pHWHead->LCR);
    OUTB(pHWHead, pMCR, pHWHead->MCR);
    OUTB(pHWHead, pScratch, pHWHead->Scratch);

     // And we didn't save the Divisor Reg, so set baud rate
    CCIR_SetBaudRate( pHWHead, pHWHead->dcb.BaudRate );
}

//
// @doc OEM
// @func	BOOL | CCIR_SetDCB | Sets new values for DCB.  This
// routine gets a DCB from the MDD.  It must then compare
// this to the current DCB, and if any fields have changed take
// appropriate action.
// 
// @rdesc	ULONG
//
ULONG
CCIR_SetDCB(
    PVOID   pHead,	    // @parm	PVOID returned by HWInit.
    LPDCB   lpDCB       // @parm    Pointer to DCB structure
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;
    ULONG retval = 1;
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_SetDCB 0x%X\r\n"), pHead));

     // If the device is open, scan for changes and do whatever
     // is needed for the changed fields.  if the device isn't
     // open yet, just save the DCB for later use by the open.
    if( pHWHead->OpenCount )
    {
         // Note, fparity just says whether we should check
         // receive parity.  And the 16550 won't let us NOT
         // check parity if we generate it.  So this field
         // has no effect on the hardware.
    
        if( lpDCB->BaudRate != pHWHead->dcb.BaudRate )
        {
            CCIR_SetBaudRate( pHWHead, lpDCB->BaudRate );
        }
    
        if( lpDCB->ByteSize != pHWHead->dcb.ByteSize )
        {
            CCIR_SetByteSize( pHWHead, lpDCB->ByteSize );
        }
    
        if( lpDCB->Parity != pHWHead->dcb.Parity )
        {
            CCIR_SetParity( pHWHead, lpDCB->Parity );
        }
    
        if( lpDCB->StopBits != pHWHead->dcb.StopBits )
        {
            CCIR_SetStopBits( pHWHead, lpDCB->StopBits );
        }

         // Don't worry about fOutxCtsFlow.  It is a flag which
         // will be examined every time we load the TX buffer.
         // No special action required here.
    }
    
     // Now that we have done the right thing, store this DCB
    pHWHead->dcb = *lpDCB;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_SetDCB 0x%X\r\n"), pHead));

    return retval;
}

//
// @doc OEM
// @func	BOOL | CCIR_SetCommTimeouts | Sets new values for the
// CommTimeouts structure. routine gets a DCB from the MDD.  It
// must then compare this to the current DCB, and if any fields
// have changed take appropriate action.
// 
// @rdesc	ULONG
//
ULONG
CCIR_SetCommTimeouts(
    PVOID   pHead,	    // @parm	PVOID returned by HWInit.
    LPCOMMTIMEOUTS   lpCommTimeouts // @parm Pointer to CommTimeout structure
    )
{
    PSER16550_INFO pHWHead = (PSER16550_INFO)pHead;
    ULONG retval = 0;
    
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+CCIR_SetCommTimeout 0x%X\r\n"), pHead));

     // OK, first check for any changes and act upon them
    if( lpCommTimeouts->WriteTotalTimeoutMultiplier !=
        pHWHead->CommTimeouts.WriteTotalTimeoutMultiplier )
    {
    }
    
     // Now that we have done the right thing, store this DCB
    pHWHead->CommTimeouts = *lpCommTimeouts;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-CCIR_SetCommTimeout 0x%X\r\n"), pHead));

    return retval;
}



//
//  @doc OEM
//  @func	BOOL | CCIR_Ioctl | Device IO control routine.  
//  @parm DWORD | dwOpenData | value returned from COM_Open call
//	@parm DWORD | dwCode | io control code to be performed
//	@parm PBYTE | pBufIn | input data to the device
//	@parm DWORD | dwLenIn | number of bytes being passed in
//	@parm PBYTE | pBufOut | output data from the device
//	@parm DWORD | dwLenOut |maximum number of bytes to receive from device
//	@parm PDWORD | pdwActualOut | actual number of bytes received from device
//
//	@rdesc		Returns TRUE for success, FALSE for failure
//
//  @remark  The MDD will pass any unrecognized IOCTLs through to this function.
//
BOOL
CCIR_Ioctl(PVOID pHead, DWORD dwCode,PBYTE pBufIn,DWORD dwLenIn,
              PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut)
{
    BOOL RetVal = TRUE;
    DEBUGMSG (ZONE_FUNCTION, (TEXT("+CCIR_Ioctl 0x%X\r\n"), pHead));
    switch (dwCode) {

        // Currently, no defined IOCTLs
        default:
            RetVal = FALSE;
            DEBUGMSG (ZONE_FUNCTION, (TEXT(" Unsupported ioctl 0x%X\r\n"), dwCode));
            break;            
	}
    DEBUGMSG (ZONE_FUNCTION, (TEXT("-CCIR_Ioctl 0x%X\r\n"), pHead));
    return RetVal;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合清纯丝袜自拍| 亚洲bt欧美bt精品| 欧美性受xxxx| 国产一区二区三区免费观看| 免费在线一区观看| 国产精品欧美精品| 欧美一区二区三区在| 成人黄页毛片网站| 久久精工是国产品牌吗| 亚洲精品国产无套在线观| 久久一夜天堂av一区二区三区| 色av成人天堂桃色av| 国产精品资源在线观看| 亚洲aⅴ怡春院| 亚洲人妖av一区二区| 26uuu久久天堂性欧美| 在线观看视频一区二区欧美日韩| 国产精品综合视频| 蜜桃一区二区三区在线观看| 一区二区三区高清在线| 国产精品女上位| 精品国产一二三| 欧美日韩亚洲综合在线| 99久久婷婷国产| 国产经典欧美精品| 久久66热偷产精品| 日日夜夜精品视频免费| 一区二区三区在线免费视频| 国产欧美精品一区aⅴ影院| 日韩欧美成人激情| 欧美日韩在线播| 在线看国产一区| 91麻豆国产香蕉久久精品| 国产一区二区免费看| 美女一区二区视频| 日韩不卡在线观看日韩不卡视频| 亚洲韩国一区二区三区| 亚洲伦理在线精品| 日韩理论电影院| 中文字幕一区日韩精品欧美| 欧美激情在线看| 欧美国产日本视频| 久久蜜桃av一区二区天堂| 精品嫩草影院久久| 欧美va在线播放| 欧美va亚洲va在线观看蝴蝶网| 日韩午夜电影在线观看| 56国语精品自产拍在线观看| 欧美美女黄视频| 欧美精品乱码久久久久久| 欧美日韩一区二区三区四区| 欧美系列日韩一区| 欧美人牲a欧美精品| 欧美区视频在线观看| 欧美一级久久久久久久大片| 欧美一区二区三区四区五区 | 欧美国产精品久久| 国产欧美日韩精品a在线观看| 国产欧美一区二区三区沐欲 | 亚洲欧美一区二区不卡| 亚洲精品乱码久久久久久黑人| 一级精品视频在线观看宜春院| 亚洲综合丁香婷婷六月香| 亚洲高清不卡在线| 日韩av电影一区| 国产在线视视频有精品| 成人免费高清在线观看| 91丨九色丨国产丨porny| 欧美又粗又大又爽| 在线不卡一区二区| 久久久久久免费网| 亚洲人成网站影音先锋播放| 一级女性全黄久久生活片免费| 青娱乐精品在线视频| 国产在线精品一区二区不卡了| 成人综合在线观看| 欧美系列一区二区| 精品国产乱码久久久久久久| 国产精品成人免费| 亚洲高清久久久| 激情av综合网| 色综合久久天天综合网| 宅男在线国产精品| 国产欧美久久久精品影院| 亚洲日本一区二区三区| 日韩精品免费专区| caoporn国产精品| 欧美丰满嫩嫩电影| 中文字幕成人网| 亚洲国产aⅴ天堂久久| 国产91精品免费| 欧美日韩视频一区二区| 久久精品视频一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 日本不卡一二三| 成人午夜视频在线观看| 欧美日韩aaaaa| 中文天堂在线一区| 青青草视频一区| 91天堂素人约啪| 26uuu另类欧美亚洲曰本| 一区二区三区四区视频精品免费| 久久99精品国产| 欧洲在线/亚洲| 国产日产欧美精品一区二区三区| 亚洲高清免费视频| 91在线视频免费观看| 欧美tickle裸体挠脚心vk| 一区二区在线观看免费视频播放| 国产综合久久久久久鬼色 | 69堂成人精品免费视频| **网站欧美大片在线观看| 久久丁香综合五月国产三级网站| 91精品福利视频| 欧美韩国日本一区| 久久精品国产77777蜜臀| 在线观看日韩一区| 国产精品黄色在线观看| 久久草av在线| 91精品免费在线| 一区二区三区免费看视频| 成人免费视频免费观看| 2020日本不卡一区二区视频| 天堂在线一区二区| 在线观看亚洲一区| 国产精品入口麻豆九色| 国产一区二区在线影院| 日韩免费观看高清完整版在线观看| 一级女性全黄久久生活片免费| 91亚洲精华国产精华精华液| 中文字幕欧美区| 国产成人在线电影| 国产亚洲精品bt天堂精选| 狠狠网亚洲精品| 精品久久久网站| 久久国产尿小便嘘嘘尿| 91精品国产欧美一区二区成人 | 中日韩免费视频中文字幕| 国产精品1024久久| 国产欧美精品国产国产专区| 国产剧情一区二区| 国产日产欧产精品推荐色| 国产一区二区日韩精品| 国产欧美综合在线观看第十页| 国产福利一区在线| 国产日韩欧美电影| 国产高清精品在线| 国产精品欧美一区二区三区| 不卡大黄网站免费看| 亚洲欧洲av另类| 色哟哟在线观看一区二区三区| 亚洲欧美一区二区三区国产精品| 色偷偷成人一区二区三区91| 亚洲欧美日韩国产中文在线| 欧洲精品视频在线观看| 亚洲高清视频在线| 日韩欧美一卡二卡| 韩国av一区二区三区| 久久久99精品久久| 成人国产电影网| 亚洲免费看黄网站| 欧美日韩国产另类一区| 日本aⅴ免费视频一区二区三区| 亚洲精品在线一区二区| 国产精品12区| 一区二区三区在线影院| 欧美精品123区| 韩国午夜理伦三级不卡影院| 欧美国产日本视频| 欧美做爰猛烈大尺度电影无法无天| 婷婷中文字幕综合| 日韩精品一区二区三区蜜臀| 国产成人一区在线| 亚洲九九爱视频| 日韩一区二区在线播放| 成人免费视频视频| 午夜国产不卡在线观看视频| 国产日产亚洲精品系列| 欧美亚洲国产一区在线观看网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 中文字幕成人av| 欧美日韩国产小视频在线观看| 久久97超碰色| 亚洲欧美乱综合| 日韩欧美www| 欧美中文字幕不卡| 国产一区二区三区不卡在线观看 | 国产一区二区三区综合| 亚洲久本草在线中文字幕| 精品日韩成人av| 欧美视频在线观看一区二区| 国产高清无密码一区二区三区| 亚洲va欧美va国产va天堂影院| 欧美精品一区二区三区蜜桃视频 | 一本到高清视频免费精品| 午夜不卡av免费| www国产成人免费观看视频 深夜成人网| 99精品一区二区三区| 日本91福利区| 欧美成人性战久久|