classic.cpp

来自「DOS下采用中断接收数据的串口通讯的例子,很难找到的好东西!」· C++ 代码 · 共 59 行

CPP
59
字号
// ******************** START OF CLASSIC.CPP ********************
//
//

#include <dos.h>
#include "rs232.h"
#include "pc8250.h"
#include "_pc8250.h"
#include "pcirq.h"
#include "classic.h"

void classic_isr( struct classic_data *isr_info )
{
    _enable();
    int port = inp( isr_info->status_register );
    port &= 7;
    if ( isr_info->data_pointers[ port ] )
        isr_8250( isr_info->data_pointers[ port ] );
}

ClassicHandler::ClassicHandler( irq_name irq_line,
                                int status_register_address )
{
    int i;

    isr_info.status_register = status_register_address;
    for ( i = 0 ; i < 8 ; i++ )
        isr_info.data_pointers[ i ] = 0;
    irq = irq_line;
    connected = ConnectToIrq( irq,
                              &isr_info,
                              (void (*)( void *)) classic_isr );
}

ClassicHandler::~ClassicHandler( void )
{
    if ( connected == RS232_SUCCESS )
        DisconnectFromIRQ( irq );
}

RS232Error ClassicHandler::AddPort( RS232PortName port_name,
                                    struct isr_data_block *data )
{
    if ( connected != RS232_SUCCESS )
        return connected;
    if ( isr_info.data_pointers[ port_name - COM5 ] )
        return RS232_PORT_IN_USE;
    isr_info.data_pointers[ port_name - COM5 ] = data;
    return RS232_SUCCESS;
}

void ClassicHandler::DeletePort( RS232PortName port_name )
{
    isr_info.data_pointers[ port_name - COM5 ] = 0;
}

// ******************** END OF CLASSIC.CPP ********************

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?