Как читать из Com-порта?
Linux у меня установлен на VirtualBox. Виртуальную машину я настроил на 1 com port и связал с ним файл на хосте. Записывать данные побайтово у меня получается (Открыл мой файл на основной машине для проверки), а вот читать — нет. Выводит одни нули в терминал. Вот код:
#include <sys/io.h>
#include <stdio.h>
void initPort (int port){
if (ioperm (port, 3, 1)){
perror ("ioperm");
}
else {
outb(0x0C, port+2);
outb(0x08, port+2);
printf ("OK start\n");
}
}
int writeByteToPort (int port, char ch){
outb(ch, port);
outb(0x0D, port+2);
outb(0x0c, port+2);
}
int readByteFromPort (int port){
int codeBuffer;
int time =10000;
while (--time > 0){
codeBuffer = inb(port+1);
if (codeBuffer & 0x08 == 0x00) return 2;
if (codeBuffer & 0x08 == 0x01) break;
if (time < 1) return 1;
}
printf ("%d", codeBuffer);
return codeBuffer;
}
int main(int argc, char const *argv[])
{
initPort (0x3f8);
char datainPort [12]= "some String\0";
for (int i =0; i < 12; i++) writeByteToPort(0x3f8, datainPort[i]);
int codeBuffer =0;
char dataFromPort [12];
for (int i =0; i < 12; i++){
codeBuffer = readByteFromPort(0x3f8);
dataFromPort[i] = (char)codeBuffer;
}
for (int i = 0 ; i<12; i++) printf("%c", dataFromPort[i]);
printf("\n");
return 0;
}
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Файл - не поддерживает чтение в гостя, нужен пайп или сокет.
Сокет удобнее.
Поставь port mode в tcp, а не файл. Используй PuTTY в режиме telnet чтоб подключиться к этому порту и послать символы с клавиатуры. (отсылаются после нажатия enter).
Для отправки и приёма сырых байтов подойдет старый добрый netcat или socat.
Сэмулировать протокол на стороне хоста можно в пару строчек на питоне.