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

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

?? nt_com.c

?? DD sample implements serial port support for the Virtual DOS Machine (VDM). Driver for windows. Tool
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*::::::::::::::::::::::::::: RX routines ::::::::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
DWORD host_com_get_error( tAdapter adapter )
{
    register pHostCom current = & host_com[adapter];     // Set ptr to current adapter
    DWORD error;

    if (current->host_adapter_status == HOST_ADAPTER_NOT_OPEN && !host_com_open( adapter ))
        return FALSE;                             /* Exit, unable to open adapter */

    if (current->rx_curr == current->rx_end)
    {
        error = current->rx_error;
        current->rx_error = 0;
        return error;
    }
    else
        return 0;
}

BOOL host_com_rx_avail( tAdapter adapter )
{
    register pHostCom current = & host_com[adapter];     // Set ptr to current adapter
    DWORD bytesread = 0;
    DWORD error = 0;

    if (current->host_adapter_status != HOST_ADAPTER_OPEN && !host_com_open( adapter ))
        return FALSE;                             /* Exit, unable to open adapter */

    if (current->rx_curr != current->rx_end)
        return TRUE;

    read_comm( current, &bytesread );

    // get communication error status
    ClearCommError( current->handle, &(current->rx_error), NULL );

    current->rx_curr = current->rx_buffer;
    current->rx_end = current->rx_buffer + bytesread;

    return (current->rx_curr != current->rx_end);
}

BOOL host_com_read_rx( tAdapter adapter, BYTE *data )
{
    if (host_com_rx_avail( adapter ))
    {
        *data = *(host_com[adapter].rx_curr++);
#if (XMIT_BUFFER)
        shrink_TX_buffer( adapter );
#endif

        return TRUE;
    }
    else
    {
        return FALSE;
    }
}


/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:::::::::::::::::::::::: Write to comms port :::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
BOOL host_com_write_tx( tAdapter adapter, BYTE data )
{
    if (host_com[adapter].host_adapter_status == HOST_ADAPTER_NOT_OPEN && !host_com_open( adapter ))
        return FALSE;                             /* Exit, unable to open adapter */

#if (XMIT_BUFFER)
    post_transmit( adapter, data );
#else //(XMIT_BUFFER)
    write_comm( &host_com[adapter], &data, 1 );
#endif //(XMIT_BUFFER)
    return TRUE;
}


/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
ULONG host_com_ioctl( tAdapter adapter, int request, long arg )
{
    DWORD ModemState;
    ULONG ReturnState = 0;
    register pHostCom current = & host_com[adapter];      /* Define and set 'current' adaptor pointer */

    /*:::::::::::::::::::::::::::::::::: Are we dealing with a null adapter */

    if (current->host_adapter_status != HOST_ADAPTER_OPEN)
    {
        // Attempt to open adapter !

        if (request == HOST_COM_MSTATUS || !host_com_open(adapter))
        {
            return ReturnState;
        }
    }

    /*:::::::::::::::::::::::::::::::::::::::::::::: Identify ioctl request */

    switch (request)
    {
        /*:::::::::::::::::::::::::::::::::::::::::: Process break requests */

        case HOST_COM_SBRK:         /* Set BREAK */
            SetCommBreak(current->handle);
            break;

        case HOST_COM_CBRK:        /* Clear BREAK */
            ClearCommBreak(current->handle);
            break;

        /*::::::::::::::::::::::::::::::::::::::::: Process baud rate change */
        case HOST_COM_BAUD:
            if (GetCommState( current->handle, &(current->dcb) ))
            {
                current->dcb.BaudRate = arg;
                SetCommState( current->handle, &(current->dcb) );
            }
            break;


        /*:::::::::::::::::::::::::::::::::: Process modem control requests */
        case HOST_COM_MODEM_CTRL:                 /* DTR & RTS lines */
            if (arg & HOST_MC_DTR)
                EscapeCommFunction( current->handle, SETDTR );
            else
                EscapeCommFunction( current->handle, CLRDTR );

            if (arg & HOST_MC_RTS)
                EscapeCommFunction( current->handle, CLRRTS );
            else
                EscapeCommFunction( current->handle, SETRTS );
            break;

        /*::::::::::::::::::::::::::::::::::::::::::::: Return modem status */

        case HOST_COM_MSTATUS:              /* Get modem state */
            GetCommModemStatus( current->handle, &ModemState );

            if (ModemState & MS_CTS_ON)  ReturnState |= HOST_MS_CTS;
            if (ModemState & MS_RING_ON) ReturnState |= HOST_MS_RI;
            if (ModemState & MS_DSR_ON)  ReturnState |= HOST_MS_DSR;
            if (ModemState & MS_RLSD_ON) ReturnState |= HOST_MS_RLSD;

            current->modem_status = ReturnState;

            break;

        /*:::::::::::::::::::::::::::::::::::::::::::::::: Set line control */
        case HOST_COM_LINE_CTRL:
            if (GetCommState( current->handle, &(current->dcb) ))
            {
                current->dcb.ByteSize = (BYTE)arg & HOST_LC_DATABITS;

                switch (arg & HOST_LC_STOPBITS)
                {
                    case HOST_LC_STOP_1:
                        current->dcb.StopBits = ONESTOPBIT; 
                        break;
                    case HOST_LC_STOP_2:  
                        current->dcb.StopBits = TWOSTOPBITS;
                        break;
                    case HOST_LC_STOP_15:  
                        current->dcb.StopBits = ONE5STOPBITS;
                        break;
                    default:
                        break;
                }

                switch (arg & HOST_LC_PARITY)
                {
                    case HOST_LC_PARITY_EVEN:
                        current->dcb.Parity=EVENPARITY;
                        current->dcb.fParity=1;   /* ensure parity enabled */
                        break;

                    case HOST_LC_PARITY_ODD:
                        current->dcb.Parity=ODDPARITY;
                        current->dcb.fParity=1;   /* ensure parity enabled */
                        break;

                    case HOST_LC_PARITY_MARK:
                        current->dcb.Parity=MARKPARITY;
                        current->dcb.fParity=1;   /* ensure parity enabled */
                        break;

                    case HOST_LC_PARITY_SPACE:
                        current->dcb.Parity=SPACEPARITY;
                        current->dcb.fParity=1;   /* ensure parity enabled */
                        break;

                    case HOST_LC_PARITY_NONE:
                        current->dcb.Parity=NOPARITY;
                        current->dcb.fParity=0;   /* disable parity */
                        break;
                }

                SetCommState( current->handle, &(current->dcb) );
            }
            break;

        /*::::::::::::::::::::::::::::::::::::::: Unrecognised host_com ioctl */

        default:
            break;
    }

    return ReturnState;
}

/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:::::::::::::::::::::: Initialize comms port :::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void host_com_init()
{
    tAdapter adapter;
    register pHostCom current;

#if (XMIT_BUFFER)
    int buffer_num;
    // set up transmit buffer free pool
    TX_queue[TX_FREE_QUEUE].head = NULL;
    TX_queue[TX_FREE_QUEUE].tail = NULL;
    TX_queue[TX_FREE_QUEUE].wait[0] = CreateMutex( NULL, FALSE, NULL);
    TX_queue[TX_FREE_QUEUE].wait[1] = CreateSemaphore( NULL, 0, NUM_TX_BUFFERS, NULL);

    // set up transmit buffers
    for (buffer_num = 0; buffer_num < NUM_TX_BUFFERS; buffer_num++)
    {
        TX_q_buff[buffer_num].buffer.wait[0] = CreateMutex( NULL, FALSE, NULL);
        TX_q_buff[buffer_num].buffer.wait[1] = CreateEvent( NULL, TRUE, FALSE, NULL);
        TX_q_buff[buffer_num].buffer.adapter = TX_FREE_QUEUE;
        TX_q_buff[buffer_num].buffer.Overlap.hEvent = CreateEvent( NULL, TRUE, TRUE, NULL );
        TX_enqueue( TX_FREE_QUEUE, &TX_q_buff[buffer_num] );
    }
#endif //(XMIT_BUFFER)

    // set up ports
    for (adapter = 0; adapter < NUM_SERIAL_PORTS; adapter++)
    {
        current = & host_com[adapter];

        current->host_adapter_status = HOST_ADAPTER_NOT_OPEN;
        current->handle = (HANDLE) -1;
        current->ReOpenCounter = 0;
        current->RXThreadHandle = NULL;

        /* critical section used to lock access to adapter from the base */
        InitializeCriticalSection(&current->AdapterLock);
        current->AdapterLockCnt = 0;

        current->WaitOverlap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
        current->RXOverlap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
#if (!XMIT_BUFFER)
        current->TXOverlap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
#endif

        com_init( adapter );
    }
}

/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::::::::::::::::::::: Deinitialize comms port ::::::::::::::::::::::::::::*/
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void host_com_exit()
{
    tAdapter adapter;
    int buffer_num;

    // close ports
    for (adapter = 0; adapter < NUM_SERIAL_PORTS; adapter++)
    {
        com_close( adapter );
        host_com_close( adapter );

        CloseHandle( host_com[adapter].WaitOverlap.hEvent );
        CloseHandle( host_com[adapter].RXOverlap.hEvent );
#if (!XMIT_BUFFER)
        CloseHandle( host_com[adapter].TXOverlap.hEvent );
#endif

        /*............... Delete RX critical section and RX control objects */
        DeleteCriticalSection( &host_com[adapter].AdapterLock );
    }

#if (XMIT_BUFFER)
    // close transmit buffers
    for (buffer_num = 0; buffer_num < NUM_TX_BUFFERS; buffer_num++)
    {
        CloseHandle( TX_q_buff[buffer_num].buffer.wait[0] );
        CloseHandle( TX_q_buff[buffer_num].buffer.wait[1] );
    }

    // close transmit buffer free pool
    CloseHandle( TX_queue[TX_FREE_QUEUE].wait[0] );
    CloseHandle( TX_queue[TX_FREE_QUEUE].wait[1] );
#endif //(XMIT_BUFFER)
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区在线| 精品久久久久久久人人人人传媒| 国产亚洲综合在线| 一本到不卡精品视频在线观看| 一区二区三区在线视频播放| 欧美精品免费视频| 福利一区福利二区| 色哟哟精品一区| 亚洲精品乱码久久久久久黑人| 国产成人av一区| 国产午夜精品一区二区| 成人国产精品免费网站| 亚洲色图色小说| 欧美性xxxxxxxx| 日韩成人免费在线| 中文字幕一区二区三区四区| 久久精品国产一区二区三 | 亚洲五码中文字幕| 精品一二三四在线| 久久综合精品国产一区二区三区| 中文字幕成人av| 激情欧美日韩一区二区| 中文一区二区在线观看| 欧美亚洲综合色| 蜜臀国产一区二区三区在线播放 | 成+人+亚洲+综合天堂| 亚洲五月六月丁香激情| 2023国产精华国产精品| 色视频成人在线观看免| 精品一区二区三区免费毛片爱| 国产精品久久一卡二卡| 欧美一区二区三区在| 91在线视频免费观看| 美国十次了思思久久精品导航| 综合电影一区二区三区| 久久亚洲捆绑美女| 欧美电影免费观看高清完整版| 国产在线精品不卡| 欧美日韩精品系列| 成人欧美一区二区三区小说| 国产69精品久久久久毛片| 亚洲欧洲精品天堂一级 | 国产欧美中文在线| 欧美日韩国产高清一区| av在线不卡观看免费观看| 美女视频一区二区| 亚洲国产日日夜夜| 一区二区三区鲁丝不卡| 欧美日韩免费一区二区三区| 蜜臀久久99精品久久久画质超高清 | 国产在线麻豆精品观看| 1024成人网色www| 久久久午夜精品| 日韩视频一区二区三区在线播放| 色婷婷久久久综合中文字幕| 91在线视频18| 欧美在线一区二区三区| jvid福利写真一区二区三区| 成人aa视频在线观看| 波多野结衣精品在线| 色综合久久综合| 91首页免费视频| 欧美三级韩国三级日本三斤| 欧美日韩在线播放| 91精品国产91综合久久蜜臀| 日韩一级免费观看| 国产三级一区二区| 日韩理论在线观看| 夜夜嗨av一区二区三区网页| 亚洲国产一区二区三区青草影视| 亚洲成人tv网| 国内精品视频666| 韩国成人福利片在线播放| 懂色av一区二区夜夜嗨| 91视视频在线观看入口直接观看www | 国产成人精品亚洲午夜麻豆| 91麻豆视频网站| 精品国产乱码久久久久久图片| 亚洲国产高清在线观看视频| 一区二区三区欧美| 国产一区二区调教| 欧美性猛交xxxxxx富婆| 国产人久久人人人人爽| 亚洲第一激情av| av一区二区三区在线| 日韩欧美在线网站| 亚洲一区日韩精品中文字幕| 国产精品一级黄| 日韩午夜中文字幕| 一区二区三区四区国产精品| 国产91富婆露脸刺激对白| 精品久久一区二区三区| 国产又黄又大久久| 在线视频国产一区| 亚洲国产精品成人综合色在线婷婷| ...xxx性欧美| 国产剧情在线观看一区二区| 色噜噜狠狠色综合中国| 久久久不卡影院| 热久久国产精品| 国产精品自拍网站| 欧美一二三区在线观看| 亚洲高清中文字幕| 色婷婷综合五月| 亚洲女子a中天字幕| 国产成人精品免费视频网站| 欧美性一二三区| 亚洲欧美韩国综合色| av一本久道久久综合久久鬼色| 日韩欧美的一区| 激情成人午夜视频| 欧美三级电影在线看| 亚洲国产毛片aaaaa无费看| 97久久超碰国产精品电影| 亚洲精品一区二区三区精华液| 免费欧美在线视频| 高清日韩电视剧大全免费| 国产欧美一区二区精品忘忧草 | 亚洲一区自拍偷拍| av在线不卡观看免费观看| 国产精品久久久久9999吃药| 久久99蜜桃精品| 欧美激情在线看| 免费在线欧美视频| 捆绑调教一区二区三区| 懂色中文一区二区在线播放| 国产精品久久久久天堂| 在线观看免费亚洲| 日韩高清国产一区在线| 亚洲精品在线三区| 国产在线视频一区二区| 国产欧美久久久精品影院| 97se狠狠狠综合亚洲狠狠| 一区二区三区四区不卡视频| 日韩午夜三级在线| 99国产麻豆精品| 精品中文av资源站在线观看| 中文字幕亚洲欧美在线不卡| 91精品国产综合久久久久| 成人高清免费观看| 久久国产精品72免费观看| 亚洲日本在线看| 精品成人一区二区三区四区| 99国内精品久久| 国产一区二区美女| 亚洲与欧洲av电影| www国产精品av| 欧美精品一二三| 99久久777色| 福利视频网站一区二区三区| 亚洲va国产va欧美va观看| 亚洲视频在线观看一区| 国产视频一区二区三区在线观看| 9191国产精品| 在线免费观看日本一区| k8久久久一区二区三区| 国产乱色国产精品免费视频| 日韩1区2区日韩1区2区| 亚洲午夜免费电影| 夜夜亚洲天天久久| 国产精品国产精品国产专区不蜜 | 《视频一区视频二区| 日本一区二区综合亚洲| 91麻豆精品国产91久久久使用方法| 色婷婷激情一区二区三区| 欧美视频在线观看一区二区| 欧美日韩久久久| 精品伦理精品一区| 精品久久人人做人人爰| 国产亚洲一区二区三区四区 | 国产在线麻豆精品观看| 国产大片一区二区| jizzjizzjizz欧美| 91在线观看地址| 欧美视频在线播放| 精品国产精品网麻豆系列| 久久久影视传媒| 亚洲美腿欧美偷拍| 加勒比av一区二区| 日本精品视频一区二区| 一本一道波多野结衣一区二区 | 亚洲高清免费视频| 久久精品国产999大香线蕉| 美女一区二区久久| av亚洲精华国产精华精| 欧美一区二区三区播放老司机| 日韩精品影音先锋| 亚洲美女精品一区| 国产高清视频一区| 欧美一区二区精品在线| 久久久久久麻豆| 婷婷久久综合九色综合绿巨人| 国产伦精品一区二区三区在线观看| 在线免费观看一区| 综合激情网...| 久久99精品国产麻豆不卡| 日本道免费精品一区二区三区| 久久久久久久av麻豆果冻| 天使萌一区二区三区免费观看| 国产成人精品网址|