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

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

?? pl010ser.c

?? 收集到的orion_ep93xx_wince_bsp_1-3-507串行通訊驅(qū)動(dòng)源碼,未作測試
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):

    //  OK, now lets actually transmit some data.
    DEBUGMSG (ZONE_WRITE, (TEXT("SL_TxIntrEx wait for CritSec %x.\r\n"),
                           &(pSer16550->TransmitCritSec)));
    EnterCriticalSection(&(pSer16550->TransmitCritSec));
    DEBUGMSG (ZONE_WRITE, (TEXT("SL_TxIntrEx got CritSec %x.\r\n"),
                           &(pSer16550->TransmitCritSec)));

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try
    {
        if ((INB(pSerAMBA, pUART_FR) & AMBA_UARTFR_TXFE))
        {
            if (INB(pSerAMBA, pUART_LCR_H) & AMBA_UARTLCR_H_FEN)
                byteCount = SERIAL_FIFO_DEPTH;
            else
                byteCount = 1;

            DEBUGMSG (ZONE_WRITE | ZONE_THREAD,
                      (TEXT("SL_TxIntrEx - Write max of %d bytes\r\n"),
                       byteCount));
            for ( *pBufflen=0; NumberOfBytes && byteCount; NumberOfBytes--, byteCount-- ) {
                DEBUGLED( ZONE_WRITE, (1, 0x10200000 | *pTxBuffer) );
                OUTB(pSerAMBA, pUART_DR, *pTxBuffer);
                ++pTxBuffer;
                (*pBufflen)++;
            }

        }

        // Enable xmit intr. We need to do this no matter what, 
        // since the MDD relies on one final interrupt before
        // returning to the application. 
        DEBUGMSG (ZONE_WRITE, (TEXT("SL_TxIntrEx: Enable INTR_TX.\r\n")));
        ucCR = CR_NORMAL_INTS | AMBA_UARTCR_TIE;
        if(((PSER_INFO)pHead)->fIRMode)
        {
            ucCR |= CR_SIREN;
        }
        OUTB(pSerAMBA, pUART_CR, ucCR ); 
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Hmm, not sure what would cause this.  Lets just tell
        // the MDD to go away until we get another TX
        // interrupt.
    }

    LeaveCriticalSection(&(pSer16550->RegCritSec));

    LeaveCriticalSection(&(pSer16550->TransmitCritSec));
    DEBUGMSG (ZONE_WRITE, (TEXT("SL_TxIntrEx released CritSec %x.\r\n"),
                           &(pSer16550->TransmitCritSec)));

    DEBUGMSG (ZONE_WRITE, (TEXT("-SL_TxIntrEx - sent %d.\r\n"),
                           *pBufflen));
    return;

}

//
// @doc OEM
// @func ULONG | SL_LineIntr | This routine is called from the MDD
//   whenever INTR_LINE is returned by SL_GetInterruptType.
// 
// @rdesc None
//
VOID
SL_LineIntr(
           PVOID pHead                // Hardware Head
           )
{
    DEBUGMSG (0,
              (TEXT("+SL_LineIntr 0x%X\r\n"), pHead));

    ReadRSR((PSER_INFO)pHead);

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

//
// @doc OEM
// @func ULONG | SL_OtherIntr | This routine is called from the MDD
//   whenever INTR_MODEM is returned by SL_GetInterruptType.
// 
// @rdesc None
//
VOID
SL_OtherIntr(
            PVOID pHead                // Hardware Head
            )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UCHAR ucCR;

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

    ReadFR( (PSER_INFO)pHead );

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try
    {
        // Clear modem status interrupt.
        //
        OUTB(pSerAMBA, pUART_ICR, 1);

        // If we are currently flowed off via CTS or DSR, then
        // we better signal the TX thread when one of them changes
        // so that TX can resume sending.
        if (pSer16550->DSRFlowOff && (INB(pSerAMBA, pUART_FR) & AMBA_UARTFR_DSR))
        {
            DEBUGMSG (ZONE_WRITE|ZONE_FLOW,
                      (TEXT("PutBytes, flowed on via DSR\n") ) );
            pSer16550->DSRFlowOff = FALSE;
            // DSR is set, so go ahead and resume sending
            ucCR = CR_NORMAL_INTS | AMBA_UARTCR_TIE;
            if(((PSER_INFO)pHead)->fIRMode)
            {
                ucCR |= CR_SIREN;
            }
            OUTB(pSerAMBA, pUART_CR, ucCR ); // Enable xmit intr.

            // Then simulate a TX intr to get things moving
            pSer16550->AddTXIntr = TRUE;
        }
        if ( pSer16550->CTSFlowOff && (INB(pSerAMBA, pUART_FR) & AMBA_UARTFR_CTS))
        {
            DEBUGMSG (ZONE_WRITE|ZONE_FLOW,
                      (TEXT("PutBytes, flowed on via CTS\n") ) );
            pSer16550->CTSFlowOff = FALSE;
            // CTS is set, so go ahead and resume sending
            ucCR = CR_NORMAL_INTS | AMBA_UARTCR_TIE;
            if(((PSER_INFO)pHead)->fIRMode)
            {
                ucCR |= CR_SIREN;
            }
            OUTB(pSerAMBA, pUART_CR, ucCR ); // Enable xmit intr.
            // Then simulate a TX intr to get things moving
            pSer16550->AddTXIntr = TRUE;
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }

    LeaveCriticalSection(&(pSer16550->RegCritSec));

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

//
// @doc OEM
// @func ULONG | SL_OtherIntr | This routine is called from the MDD
//   whenever INTR_MODEM is returned by SL_GetInterruptType.
// 
// @rdesc None
//
VOID
SL_ModemIntr(
            PVOID pHead                // Hardware Head
            )
{
    SL_OtherIntr(pHead);
}

//  
// @doc OEM
// @func    ULONG | SL_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
SL_GetStatus(
            PVOID    pHead,    // @parm PVOID returned by HWInit.
            LPCOMSTAT    lpStat    // Pointer to LPCOMMSTAT to hold status.
            )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    ULONG      RetVal  = pSer16550->CommErrors;

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

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

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

            if (pSer16550->DSRFlowOff)
                pSer16550->Status.fDsrHold = 1;
            else
                pSer16550->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.
            pSer16550->Status.cbInQue  = 0;
            pSer16550->Status.cbOutQue = 0;

            memcpy(lpStat, &(pSer16550->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("-SL_GetStatus 0x%X\r\n"), pHead));
    return(RetVal);
}

//
// @doc OEM
// @func    ULONG | SL_Reset | Perform any operations associated
//   with a device reset
//
// @rdesc    None.
//
VOID
SL_Reset(
        PVOID   pHead    // @parm PVOID returned by HWInit.
        )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

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

    memset(&pSer16550->Status, 0, sizeof(COMSTAT));

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try
    {
        OUTB(pSerAMBA, pUART_CR, CR_NORMAL_INTS);
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Do nothing
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

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

//
// @doc OEM
// @func    VOID | SL_GetModemStatus | Retrieves modem status.
//
// @rdesc    None.
//
VOID
SL_GetModemStatus(
                 PVOID   pHead,        // @parm PVOID returned by HWInit.
                 PULONG  pModemStatus    // @parm PULONG passed in by user.
                 )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UINT8 ubModemStatus = 0;

    if (pModemStatus)
        *pModemStatus = 0;
    else
    {
        DEBUGMSG (ZONE_ERROR, (TEXT("SL_GetModemStatus - bad parameter.\r\n")));
        return;
    }

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

    ubModemStatus = INB(pSerAMBA, pUART_FR);

    if (ubModemStatus & AMBA_UARTFR_CTS)
        *pModemStatus |= MS_CTS_ON;

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

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

    DEBUGMSG (ZONE_FUNCTION | ZONE_EVENTS,
              (TEXT("-SL_GetModemStatus 0x%X (stat x%X) \r\n"), pHead, *pModemStatus));
    return;
}

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

VOID
SL_PurgeComm(
            PVOID   pHead,        // @parm PVOID returned by HWInit.
            DWORD   fdwAction        // @parm Action to take. 
            )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

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

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try
    {
        // ?.
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

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

//
// @doc OEM
// @func    BOOL | SL_XmitComChar | Transmit a char immediately
// 
// @rdesc    TRUE if succesful
//
BOOL
SL_XmitComChar(
              PVOID   pHead,    // @parm PVOID returned by HWInit.
              UCHAR   ComChar   // @parm Character to transmit. 
              )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);
    UCHAR ucCR;

    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+SL_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"),
                           &(pSer16550->TransmitCritSec)));
    EnterCriticalSection(&(pSer16550->TransmitCritSec));
    DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar got CritSec %x.\r\n"),
                           &(pSer16550->TransmitCritSec)));
    try
    {
        while ( TRUE ) {  // We know THR will eventually empty
            EnterCriticalSection(&(pSer16550->RegCritSec));
            // Write the character if we can (if it's not full)...
            //
            if (!(INB(pSerAMBA, pUART_FR) & AMBA_UARTFR_TXFF))
            {
                // FIFO is empty, send this character
                OUTB(pSerAMBA, pUART_DR, ComChar);
                // Make sure we release the register critical section
                LeaveCriticalSection(&(pSer16550->RegCritSec));

                DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar wrote x%X\r\n"),
                                       ComChar));
                break;
            }

            // If we couldn't write the data yet, then wait for a
            // TXINTR to come in and try it again.

            // Enable xmit intr.
            ucCR = CR_NORMAL_INTS | AMBA_UARTCR_TIE;
            if(((PSER_INFO)pHead)->fIRMode)
            {
                ucCR |= CR_SIREN;
            }
            OUTB(pSerAMBA, pUART_CR, ucCR ); 
            LeaveCriticalSection(&(pSer16550->RegCritSec));

            // Wait until the txintr has signalled.
            DEBUGMSG (ZONE_WRITE, (TEXT("XmitComChar WaitIntr x%X\r\n"),
                                   pSer16550->FlushDone));
            WaitForSingleObject(pSer16550->FlushDone, (ULONG)1000);
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Make sure we release the register critical section
        LeaveCriticalSection(&(pSer16550->RegCritSec));
    }

    LeaveCriticalSection(&(pSer16

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美中文字幕制服| 欧美一区二区福利在线| 欧美va在线播放| 亚洲欧美一区二区三区极速播放| 麻豆精品视频在线观看免费| 色综合婷婷久久| 国产网红主播福利一区二区| 日本在线不卡视频一二三区| 色综合天天综合网国产成人综合天 | 香蕉成人啪国产精品视频综合网| 国产精品亚洲а∨天堂免在线| 777xxx欧美| 一区二区三区在线免费播放| 风间由美性色一区二区三区| 91精品国产综合久久精品| 亚洲精品国产a久久久久久| 国产suv精品一区二区883| 欧美一级日韩不卡播放免费| 亚洲制服丝袜av| 99视频一区二区三区| 久久久欧美精品sm网站| 日韩国产高清在线| 欧美少妇xxx| 亚洲黄色免费电影| 91网上在线视频| 中文子幕无线码一区tr | 亚洲视频在线观看一区| 国产一区二区不卡在线| 精品久久久久久久久久久久包黑料| 丝袜国产日韩另类美女| 欧美日韩国产首页| 亚洲国产精品久久人人爱蜜臀| 色综合天天综合色综合av| 国产精品国产自产拍高清av | 亚洲成人在线网站| 日本丶国产丶欧美色综合| 亚洲欧洲99久久| av亚洲精华国产精华精华| 国产精品网站在线播放| 国产成人精品免费网站| 国产日韩视频一区二区三区| 国产suv一区二区三区88区| 中文字幕免费一区| 99久久精品国产观看| 自拍偷自拍亚洲精品播放| 91免费观看视频在线| 亚洲免费观看高清| 欧美在线免费观看亚洲| 亚洲国产精品一区二区久久恐怖片 | 99国内精品久久| 亚洲欧美精品午睡沙发| 欧美性猛片xxxx免费看久爱| 午夜精品久久久久久久久久| 91精品国产黑色紧身裤美女| 久久99久久久欧美国产| 久久久久综合网| 成人动漫中文字幕| 亚洲色图丝袜美腿| 欧美三级在线视频| 蜜桃视频一区二区| 久久久精品黄色| 99精品视频一区二区三区| 一区二区三区不卡在线观看 | 欧美一区二区精美| 国产自产v一区二区三区c| 国产日产欧美精品一区二区三区| 成人国产电影网| 亚洲综合区在线| 日韩精品中文字幕一区二区三区| 国产精品99久久久久久久vr| 1024成人网| 在线电影一区二区三区| 国产在线播放一区| 国产精品久久久久9999吃药| 欧美探花视频资源| 久久国产精品99久久久久久老狼| 国产亚洲精品超碰| 色哟哟日韩精品| 日本在线不卡视频| 国产片一区二区| 在线观看成人免费视频| 美女视频一区在线观看| 中国色在线观看另类| 欧美在线免费播放| 九九精品视频在线看| 国产精品久久毛片av大全日韩| 欧洲国产伦久久久久久久| 久久国产夜色精品鲁鲁99| 欧美国产激情二区三区| 欧美又粗又大又爽| 韩国三级电影一区二区| 日韩美女精品在线| 日韩欧美中文字幕制服| 99v久久综合狠狠综合久久| 日本欧美在线观看| 国产精品免费av| 欧美一级欧美一级在线播放| 国产91在线观看丝袜| 亚洲成av人影院在线观看网| 国产亚洲一区字幕| 欧美丝袜丝交足nylons图片| 国产乱码精品1区2区3区| 一区二区三区精品| 国产欧美久久久精品影院| 欧美日韩国产精选| 成人久久久精品乱码一区二区三区| 亚洲午夜精品网| 日本一二三四高清不卡| 91精品中文字幕一区二区三区| 从欧美一区二区三区| 美女精品自拍一二三四| 亚洲精品高清在线观看| 久久日一线二线三线suv| 欧美日韩亚洲综合在线 | 日本va欧美va欧美va精品| 成人欧美一区二区三区白人 | 欧美精品一二三| 91在线视频在线| 国产一区三区三区| 日韩中文字幕麻豆| 亚洲男女一区二区三区| 国产调教视频一区| 欧美tk—视频vk| 欧美群妇大交群中文字幕| 91视频免费看| 粉嫩高潮美女一区二区三区| 激情五月激情综合网| 日av在线不卡| 天堂蜜桃一区二区三区 | 中文字幕一区在线观看| 久久久影视传媒| 欧美不卡一二三| 欧美一区二区女人| 欧美精品一卡两卡| 欧美性一区二区| 在线视频中文字幕一区二区| 99国产精品久久久久| 成人福利电影精品一区二区在线观看 | 中文字幕第一区二区| 久久久91精品国产一区二区三区| 日韩你懂的在线播放| 欧美电影影音先锋| 欧美日韩久久不卡| 欧美日韩卡一卡二| 欧美影片第一页| 欧美亚日韩国产aⅴ精品中极品| 色综合天天在线| 91网站最新网址| 色综合色综合色综合色综合色综合 | 日韩电影一二三区| 婷婷六月综合亚洲| 日韩精品国产欧美| 图片区日韩欧美亚洲| 亚洲aaa精品| 亚洲成a人片在线观看中文| 亚洲国产精品久久人人爱蜜臀| 亚洲激情图片小说视频| 亚洲在线观看免费| 亚洲一区影音先锋| 亚洲丶国产丶欧美一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品精品国产色婷婷| 中文字幕一区二区三区av| 亚洲色图在线看| 亚洲在线中文字幕| 日韩高清一区在线| 久久99久久99小草精品免视看| 韩国女主播成人在线| 国产一区二三区| 成人丝袜高跟foot| 91亚洲精华国产精华精华液| 91在线国产观看| 欧美午夜一区二区三区免费大片| 欧美日韩成人一区| 日韩欧美不卡在线观看视频| 久久久久久97三级| 国产精品免费人成网站| 一区二区三区日韩在线观看| 亚洲成人一二三| 奇米精品一区二区三区在线观看一| 久久国产免费看| 成人污污视频在线观看| 欧洲生活片亚洲生活在线观看| 91精品国产综合久久久蜜臀图片| 久久亚洲二区三区| 亚洲免费大片在线观看| 午夜视频一区二区| 韩国v欧美v日本v亚洲v| 成人免费三级在线| 欧美综合视频在线观看| 日韩精品在线网站| 国产精品久久久久久久久果冻传媒| 亚洲精品国产a久久久久久| 免费在线看一区| 99riav一区二区三区| 欧美一区二区三区视频在线观看| 欧美高清在线视频| 手机精品视频在线观看| 国产精品66部| 欧美午夜在线观看|