Я работаю с внутренним программным инструментом, который отображает & журналы, отформатированные диагностические данные, собранные из последовательного порта отладки продукта, для которого я разрабатываю встроенное программное обеспечение. Он в С и очень старый. Он построен с использованием Borland Turbo-C v1.01 (авторское право 1990!). Если возможно, я предпочел бы изменить, а не переписывать инструмент для современной среды.Как получить доступ к нестандартным COM-портам (USB-> Serial, COM5 +) в DOS/C?
Я хочу собирать данные отладки сразу с нескольких устройств. Я предусмотрел несколько устройств, подключенных через USB-> последовательные адаптеры к концентратору, подключенному к ПК (под управлением Windows XP). Запустите один экземпляр диагностического инструмента на каждое устройство (опять же, в Windows), указав на соответствующий COM-порт. Легко, правда?
Не совсем. Обратите внимание на функцию инициализации последовательного порта Я работаю с:
void serinit(int baudrate, char paristat, char adaptnum) {
int hibcon, lobcon, paricon;
if(adaptnum == '3') {
sioreg = lowbaud = 0x3E8; // SIO (Serial I/O Reg.)
intenreg = highbaud = 0x3E9; // IER (Interrupt Enable Reg.)
intidreg = 0x3EA; // IIR (Interrupt Ident. Reg.)
linecon = 0x3EB; // LCR (Line Control Reg.)
modemcon = 0x3EC; // MCR (Modem Control Reg.)
linestat = 0x3ED; // LSR (Line Status Reg.)
modemstat = 0x3EE; // MSR (Modem Status Reg.)
sintvect = 0x0C;
sintmask = 0x10;
} else if(adaptnum == '2') {
//omitted for brevity, similar to above w/ different magic numbers
} else {
//ditto
}
outportb(linecon, 0x80); // LCR - set up to set baud rate
switch(baudrate) {
case 9600: hibcon = 0x00; lobcon = 0x0C; break;
//more magic numbers for other baud rates
}
outportb(lowbaud, lobcon); // Baud Rate Divisor LSB
outportb(highbaud, hibcon); // Baud Rate Divisor MSB
switch(paristat) {
case 'o': //odd parity, 2 stop, 7 data
case 'O': paricon = 0x0E; break;
//more magic numbers for other parity settings
}
outportb(linecon, paricon); //Line Control Register
outportb(intenreg, 0x01); //IER - receive enabled
outportb(modemcon, 0x09); //x x x x +out2 x -rts +dtr
imodemcon = 0x09; //update image
inportb(sioreg); //Just in case there's anything lurking in the register
intvsave = getvect(sintvect);
setvect(sintvect, serint); //Set up interrupt vector.
outportb(0x21, inportb(0x21) & !sintmask); //OCW 1 - enable serial interrupts
}
мои варианты О чем для адаптации такого рода конфигурации для COM-портов 5+ как USB-> Серийные адаптеры будут отображаться как? Я могу видеть их, как ожидалось, с помощью команды DOS mode
(и в диспетчере устройств Windows, как у обычного человека), но я не уверен, как получить к ним доступ из диагностической программы.
Кроме того, многие USB-последовательные адаптеры не реализуют все линии контроля состояния (или реализуют их должным образом) –