потеря данных при передаче через com port

NightSpider
Дата: 14.10.2006 15:20:01
Данные с одной машины (win) передаются на другую(unix). Все замечательно работает, но заметил, что при передаче символа с кодом 13 с машины Win, Unix принимает символ с кодом 10. Все остальные символы передаются без изменении.

Проверил портмоном передачу из винды - от программы в порт уходит символ 13, как и положено.

В чем может быть причина?
mayton
Дата: 14.10.2006 15:34:25
А какой софт принимает данные на стороне unix?
YurikGL
Дата: 14.10.2006 20:52:09
Проверь на стороне Unix.... врдруг не доходит :)

А так, скорее всего ПО на юнихе виновато...

_________________________________________________________________________
Разработка и производство аппаратуры связи
NightSpider
Дата: 14.10.2006 22:29:07
На втором компе установлен Linux XP, на чистом c++ написана функция открытия порта и чтения всего подряд с выводом на экран.

В понедельник попробую поперекидывать данные по нульмодемному шнурку с Unix->Unix и Win->Win

Появилась мысль, что это может быть связано с Hardware и Software flow Control.
YurikGL
Дата: 14.10.2006 23:06:37
Если бы стоял Hardware и Software flow Control у тебя бы не только символы с кодом 13 не проходили... у тебя бы вообще ничего не ходило.
Подозреваю, что проблемы связаны с тем, что читаешь на юнихе функциями, которые читают строками до ближайшего #10#13 или что-то в этом духе. Читай на юнихе посимвольно и анализируй.


_________________________________________________________________________
Разработка и производство аппаратуры связи
Dimitry Sibiryakov
Дата: 16.10.2006 09:25:02

YurikGL

Читай на юнихе посимвольно и анализируй.

Не поможет если канал открыт в текстовом режиме. Надо открывать в двоичном.

Posted via ActualForum NNTP Server 1.3

NightSpider
Дата: 16.10.2006 13:50:11
Проблема на стороне Unix. Выяснил путем переброса симолов с одного на другой порт по нуль модемному кабелю.

YurikGL
Подозреваю, что проблемы связаны с тем, что читаешь на юнихе функциями, которые читают строками до ближайшего #10#13 или что-то в этом духе. Читай на юнихе посимвольно и анализируй.


Читаю блоками
block_len=read(handle, &block_from, block_len); 
Dimitry Sibiryakov
Дата: 16.10.2006 13:56:47

NightSpider

Читаю блоками

block_len=read(handle, &block_from, block_len);

Покажи как вызываешь fopen.

Posted via ActualForum NNTP Server 1.3

NightSpider
Дата: 16.10.2006 15:24:11
//---------------------------------------------------------------------------
int TComPortFunctions::OpenPort()
{
struct termios options;
printf("Bus System communication device name: %s\n",devicename) ;
printf("Befor open: handle = %d\n",handle) ;
if(handle != -1) return -1; // Порт уже открыт нашей программой
/* open the port */
handle = open(devicename, O_RDWR | O_NOCTTY| O_NDELAY);
printf("After open: handle = %d\n",handle) ;
if(handle < 0) return -2; // Какая-то другая проблема

fcntl(handle, F_SETFL, 0);

/* get the current options */
tcgetattr(handle, &options);
/* Устанавливаем скорость приема и предачи */
cfsetispeed(&options, B9600); // Установили скорость приема сообщений
cfsetospeed(&options, B9600); // Установили скорость отправки сообщений
/* set raw input, 1 second timeout */
options.c_cflag |= (CLOCAL | CREAD);

//No parity (8N1)
options.c_cflag &=~PARENB;
options.c_cflag &=~CSTOPB;
options.c_cflag &=~CSIZE;
options.c_cflag |=CS8;


//Устанавливаем RAW INPUT
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

// Отключаем режим обработанного вывода (замена LR->CR и прочее. См. инструкцию)
options.c_oflag &~OPOST;

//Установка аппаратного контроля передачи данных
options.c_cflag |=CRTSCTS;
options.c_iflag &=~(IXON|IXOFF|IXANY);

options.c_cc[VMIN] = 0; // Минимальное количество символов для чтения
options.c_cc[VTIME] = timeout; //Время ожидания
/* set the options */


tcsetattr(handle, TCSANOW, &options);
ioctl(handle,TCFLSH,2); // Сбарываем очереди ввода вывода
return 0;
}
Dimitry Sibiryakov
Дата: 16.10.2006 15:49:42

Лучше задать этот вопрос в юниховом форуме. Лично я могу только от балды
предположить что надо задействовать третий параметр у open().

Posted via ActualForum NNTP Server 1.3