Мучаюсь уже который день, приведу свой пример, видимо я работаю не в режиме запрос, ответ сообственно настройки порта и чтение :
int fd;
struct termios oldtio,newtio;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY );
if (fd <0) {perror(MODEMDEVICE); return 0; }
tcgetattr(fd,&oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag =0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
return fd;
теперь как читаю или пишу в него
n = select(fd+1, &input, NULL, NULL, &timeout);
if(n > 0)
{
res = read(fd,buf,1);
if(res<=0)
return -1;
}
else
return -1;
n = write(fd,"\x06",1);
if(n<=0)
return -1;
n = select(fd+1, &input, NULL, NULL, &timeout);
if(n > 0)
{
res = read(fd,buf,255);
if(res<=0)
return -1;
if(buf[2]!='\x00')
{
ErrorKKM(buf);
return -1;
}
}
else
return -1;
n = write(fd,"\x06",1);
if(n!=1)
return -1;
n = select(fd+1, &input, NULL, NULL, &timeout);
if(n > 0)
{
res = read(fd,buf,1);
if(res<=0)
return -1;
}
else
return -1;
return 0;
логика такая
прочитать от устройства запрос , после отправить ему что все ок , после прочитать у него данные , данные , после отправить ему подтверждение что все ок и после он присылает байт о том что передача закончена
strace показывает мне совсем другое
ответ о том что нет ошибок должен быть вида \2\U\0\0\3\CRC но я получаю \2 и после сразу же отправляю ему о том что все ок , хотя селектом вроде ставлю таймаут
вообщем подскажите кто что может
этот пример частный случай, подтверждение о какой-либо команде выполнения, т.е. выполнилась с ошибками или нет, что говорит как раз 3 байт что 0 ошибок нет либо там будет не 0