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

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

?? digi.cpp

?? DOS下采用中斷接收數據的串口通訊的例子,很難找到的好東西!
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// the appropriate bit from the MSR and return a boolean value
// to the calling program.

int DigiBoard::Cd( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    return ( r.h.al & MSR_CD ) != 0;
}

int DigiBoard::Ri( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    return ( r.h.al & MSR_RI ) != 0;
}

int DigiBoard::Cts( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    return ( r.h.al & MSR_CTS ) != 0;
}

int DigiBoard::Dsr( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    return ( r.h.al & MSR_DSR ) != 0;
}

// Like the modem status functions, the four line status functions
// use BIOS function 3 to read the LSR from the UART, then mask
// off the appropriate bits and return a logical true or false to
// the calling program.

int DigiBoard::ParityError( int reset )
{
    union REGS r;
    int status;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    status = ( line_status & LSR_PARITY_ERROR ) != 0;
    if ( reset != UNCHANGED && reset != 0 )
        line_status &= ~LSR_PARITY_ERROR;
    return status;
}

int DigiBoard::BreakDetect( int reset )
{
    union REGS r;
    int status;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    status = ( line_status & LSR_BREAK_DETECT ) != 0;
    if ( reset != UNCHANGED && reset != 0 )
        line_status &= ~LSR_BREAK_DETECT;
    return status;
}

int DigiBoard::FramingError( int reset )
{
    union REGS r;
    int status;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    status = ( line_status & LSR_FRAMING_ERROR ) != 0;
    if ( reset != UNCHANGED && reset != 0 )
        line_status &= ~LSR_FRAMING_ERROR;
    return status;
}

int DigiBoard::HardwareOverrunError( int reset )
{
    union REGS r;
    int status;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 3;
    int86( 0x14, &r, &r );
    line_status |= r.h.ah;
    status = ( line_status & LSR_OVERRUN_ERROR ) != 0;
    if ( reset != UNCHANGED && reset != 0 )
        line_status &= ~LSR_OVERRUN_ERROR;
    return status;
}

// The five handshaking and modem control functions are all
// basically lazy. They modify a the appropriate value in
// the settings member, then call write_settings() to do the
// real work.

int DigiBoard::XonXoffHandshaking( int setting )
{
    if ( setting != UNCHANGED ) {
        settings.XonXoff = ( setting != 0 );
        write_settings();
    }
    return settings.XonXoff;
}

int DigiBoard::RtsCtsHandshaking( int setting )
{
    if ( setting != UNCHANGED ) {
        settings.RtsCts = ( setting != 0 );
        write_settings();
    }
    return settings.RtsCts;
}

int DigiBoard::DtrDsrHandshaking( int setting )
{
    if ( setting != UNCHANGED ) {
        settings.DtrDsr = ( setting != 0 );
        write_settings();
    }
    return settings.DtrDsr;
}

int DigiBoard::Dtr( int setting )
{
    if ( setting != UNCHANGED ) {
        settings.Dtr = ( setting != 0 );
        write_settings();
    }
    return ( settings.Dtr != 0 );
}

int DigiBoard::Rts( int setting )
{
    if ( setting != UNCHANGED ) {
        settings.Rts = ( setting != 0 );
        write_settings();
    }
    return ( settings.Rts != 0 );
}

// DigiBoard only lets us peek ahead by one byte into the
// input buffer.  If there is a character there, this function
// reads it in and stores it in the appropriate place.

int DigiBoard::PeekBuffer( void *buffer, unsigned int count )
{
    union REGS r;

    if ( count ) {
        r.h.ah = 3;
        r.x.dx = port_name;
        int86( 0x14, &r, &r );
        line_status |= r.h.ah;
        if ( r.h.ah & 0x80 )
             return RS232_ERROR;
        if ( r.h.ah & 1 ) {
            r.h.ah = 0x14;
            r.x.dx = port_name;
            int86( 0x14, &r, &r );
            line_status |= r.h.ah;
            *( (char *) buffer ) = r.h.al;
            ByteCount = 1;
        } else
            ByteCount = 0;
    }
    return RS232_SUCCESS;
}

// These functions all use private digiboard INT 14 calls to
// return buffer counts.  The only complication is that there
// is no direct way to determine the RX space free.  It has to
// be calculated indirectly as the RX buffer size - the buffer
// space used.

int DigiBoard::TXSpaceUsed( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 0xfd;
    r.h.al = 1;
    int86( 0x14, &r, &r );
    return( r.x.cx );
}

int DigiBoard::TXSpaceFree( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 0x12;
    int86( 0x14, &r, &r );
    return r.x.ax;
}

int DigiBoard::RXSpaceUsed( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 0x0a;
    int86( 0x14, &r, &r );
    return r.x.ax;
}

int DigiBoard::RXSpaceFree( void )
{
    union REGS r;
    int buffer_size;

    if ( error_status < RS232_SUCCESS )
        return error_status;

    r.x.dx = port_name;
    r.h.ah = 0x1b;
    r.h.al = 1;
    int86( 0x14, &r, &r );
    buffer_size = r.x.bx;
    r.h.ah = 10;
    r.x.dx = port_name;
    int86( 0x14, &r, &r );
    return( buffer_size - r.x.ax );
}

// DigiBoard provides two private INT 14 calls to handle flushing
// the TX and RX buffers.

int DigiBoard::FlushRXBuffer( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 0x10;
    int86( 0x14, &r, &r );
    return RS232_SUCCESS;
}

int DigiBoard::FlushTXBuffer( void )
{
    union REGS r;

    if ( error_status < RS232_SUCCESS )
        return error_status;
    r.x.dx = port_name;
    r.h.ah = 0x11;
    int86( 0x14, &r, &r );
    return RS232_SUCCESS;
}

int DigiBoard::FormatDebugOutput( char *buffer, int line_number )
{
    union REGS r;

    if ( buffer == 0 )
        return( first_debug_output_line +  4 );
    if ( line_number < first_debug_output_line )
        return RS232::FormatDebugOutput( buffer, line_number );
    switch( line_number - first_debug_output_line ) {
        case 0 :
            r.x.dx = port_name;
            r.h.ah = 6;
            r.h.al = 1;
            int86( 0x14, &r, &r );
            sprintf( buffer,
                     "Derived class: DigiBoard  Boards/Channels: %2d/%2d  "
                     "Ver: %2x.%02x  1st Port: COM%-2d",
                     r.x.cx,
                     r.x.ax,
                     r.h.bh, r.h.bl,
                     r.x.dx + 1 );
            break;
        case 1 :
           ParityError( UNCHANGED );
           sprintf( buffer,
                     "Parity Err: %d  "
                     "Break Det: %d  "
                     "Overrun Err: %d  "
                     "Framing Err: %d  ",
                     ( line_status & LSR_PARITY_ERROR ) ? 1 : 0,
                     ( line_status & LSR_BREAK_DETECT ) ? 1 : 0,
                     ( line_status & LSR_OVERRUN_ERROR ) ? 1 : 0,
                     ( line_status & LSR_FRAMING_ERROR ) ? 1 : 0 );
           break;
        case 2 :
            sprintf( buffer,
                     "Buffer Counts: RX Used/Free: %5u/%5u  "
                     "TX Used/Free: %5u/%5u",
                     RXSpaceUsed(),
                     RXSpaceFree(),
                     TXSpaceUsed(),
                     TXSpaceFree() );
             break;
        case 3 :
            sprintf( buffer,
                     "RI: %2d  CD: %2d  CTS: %2d  DSR: %2d",
                     Ri(), Cd(), Cts(), Dsr() );
            break;
        default :
            return RS232_ILLEGAL_LINE_NUMBER;
    }
    return RS232_SUCCESS;
}

char * DigiBoard::ErrorName( int error )
{
    if ( error < RS232_NEXT_FREE_ERROR && error >= RS232_ERROR )
        return RS232::ErrorName( error );
    if ( error < RS232_NEXT_FREE_WARNING && error >= RS232_WARNING )
        return RS232::ErrorName( error );
    if ( error >= RS232_SUCCESS )
        return RS232::ErrorName( error );
    switch ( error ) {
        case DIGIBOARD_DRIVER_NOT_FOUND   : return( "Driver not found" );
        default                           : return( "Undefined error" );
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久黑人| 成人美女在线视频| 国产东北露脸精品视频| 欧美曰成人黄网| 久久精品一区蜜桃臀影院| 亚洲自拍另类综合| 成人精品国产免费网站| 日韩一区和二区| 一区二区欧美精品| 成人黄色电影在线| 精品国产乱码久久久久久图片| 亚洲综合免费观看高清完整版| 国产主播一区二区三区| 欧美日本韩国一区二区三区视频 | 日本中文字幕一区二区有限公司| 懂色av一区二区三区免费观看| 91麻豆精品国产91久久久久| 怡红院av一区二区三区| 成人黄页在线观看| 欧美国产日韩a欧美在线观看| 蜜桃精品视频在线观看| 91精品国产综合久久小美女| 亚洲在线一区二区三区| 91福利国产精品| 亚洲欧美激情一区二区| 色婷婷综合久久| 亚洲天堂av老司机| 一本大道久久a久久精二百 | 视频一区二区国产| 欧美性生活一区| 一区二区三区av电影| 在线观看免费一区| 亚洲高清不卡在线观看| 欧美精品久久天天躁| 日韩成人午夜电影| 制服丝袜在线91| 精彩视频一区二区三区| 久久久精品tv| 成人黄色在线视频| 亚洲精品成人天堂一二三| 欧美三片在线视频观看| 日日摸夜夜添夜夜添精品视频| 欧美高清视频不卡网| 青青草国产成人av片免费| 精品国免费一区二区三区| 国产激情一区二区三区| 综合婷婷亚洲小说| 欧美视频一区二区三区四区| 喷水一区二区三区| 久久久久久久综合| 不卡一区在线观看| 亚洲高清一区二区三区| 精品捆绑美女sm三区| 国产福利精品导航| 亚洲女子a中天字幕| 3751色影院一区二区三区| 国产成人精品午夜视频免费 | 久久久久久亚洲综合| 91在线一区二区三区| 午夜精品一区二区三区电影天堂| 日韩午夜精品视频| 99久久综合色| 日韩经典一区二区| 国产精品久久毛片av大全日韩| 在线视频国产一区| 紧缚捆绑精品一区二区| 国产精品成人在线观看| 51午夜精品国产| 成人深夜在线观看| 秋霞国产午夜精品免费视频| 中文字幕av资源一区| 91精品午夜视频| 99在线精品一区二区三区| 日本欧美在线观看| 中文字幕一区二区三区乱码在线| 欧美高清精品3d| 91丨九色丨尤物| 精品中文字幕一区二区小辣椒| 亚洲三级视频在线观看| 亚洲精品在线电影| 在线免费观看成人短视频| 国产91丝袜在线18| 免费欧美日韩国产三级电影| 亚洲三级在线看| 久久久91精品国产一区二区三区| 欧美视频日韩视频在线观看| 国产成a人亚洲精| 美腿丝袜一区二区三区| 亚洲国产另类精品专区| 国产精品福利一区二区三区| 日韩久久精品一区| 欧美区一区二区三区| 91亚洲精品久久久蜜桃网站| 国产成人aaa| 国产一区二区三区在线观看免费| 日韩av电影天堂| 亚洲第一主播视频| 一区二区三区中文免费| 成人欧美一区二区三区在线播放| 久久影院电视剧免费观看| 欧美精品三级在线观看| 欧美美女激情18p| 欧美性一区二区| 一本大道综合伊人精品热热| 97精品久久久午夜一区二区三区 | 久久99精品久久久久久动态图 | 国产一区二区女| 美女视频一区二区| 免费成人在线影院| 人人狠狠综合久久亚洲| 日韩成人伦理电影在线观看| 日本三级亚洲精品| 奇米影视一区二区三区小说| 丝袜美腿成人在线| 午夜精品免费在线| 日韩高清一区二区| 美腿丝袜亚洲一区| 久久精品国产网站| 国产麻豆成人传媒免费观看| 国产经典欧美精品| 成人av资源在线观看| 99国产精品久久| 欧美性做爰猛烈叫床潮| 这里只有精品电影| 欧美一区二区在线播放| 精品国产一区二区在线观看| 久久久久久久久久久电影| 欧美韩日一区二区三区四区| ...xxx性欧美| 一区二区三区在线高清| 午夜激情久久久| 久久成人18免费观看| 国产高清精品在线| 色悠悠亚洲一区二区| 欧美日本在线播放| 26uuu久久天堂性欧美| 国产精品午夜免费| 亚洲韩国一区二区三区| 久久成人免费网| 成人伦理片在线| 欧美日韩午夜影院| 精品第一国产综合精品aⅴ| 国产精品高清亚洲| 石原莉奈一区二区三区在线观看| 国产综合成人久久大片91| 91视频免费播放| 欧美精品一卡两卡| 国产精品久久久久久亚洲伦 | 东方欧美亚洲色图在线| 色丁香久综合在线久综合在线观看| 欧美精品一二三区| 欧美激情中文不卡| 图片区小说区区亚洲影院| 懂色一区二区三区免费观看| 欧美狂野另类xxxxoooo| 国产日韩欧美高清在线| 婷婷久久综合九色国产成人| 国产成人在线色| 欧美日韩国产综合久久| 国产精品国产三级国产aⅴ无密码| 天天色综合成人网| av激情亚洲男人天堂| 日韩午夜精品视频| 亚洲一区二区三区四区五区中文| 精品一区二区在线视频| 欧日韩精品视频| 国产精品视频免费看| 麻豆成人久久精品二区三区红| 在线观看日韩高清av| 国产精品电影院| 久久97超碰色| 在线播放中文一区| 亚洲精品综合在线| 播五月开心婷婷综合| 日韩欧美亚洲另类制服综合在线 | 在线免费观看一区| 国产精品家庭影院| 国产一区二区0| 精品噜噜噜噜久久久久久久久试看 | 韩国精品一区二区| 日韩亚洲欧美中文三级| 亚洲图片欧美综合| 91网站最新地址| 国产精品私人自拍| 欧美人伦禁忌dvd放荡欲情| 国产精品伦理在线| 成人免费毛片嘿嘿连载视频| 欧美精品一区二| 精品写真视频在线观看| 精品区一区二区| 久久精品国产久精国产爱| 91精品国产色综合久久不卡电影| 亚洲一区二区三区国产| 在线一区二区三区四区| 一区二区三区日韩在线观看| 色拍拍在线精品视频8848| 亚洲综合色丁香婷婷六月图片| 欧美影视一区二区三区| 亚洲一区二区四区蜜桃| 欧美午夜精品一区二区蜜桃|