Russian Qt Forum

Программирование => С/C++ => Тема начата: BuRn от Ноябрь 09, 2011, 01:00



Название: порт в асинхронном режиме(com)
Отправлено: BuRn от Ноябрь 09, 2011, 01:00
Мучаюсь уже который день, приведу свой пример, видимо я работаю не в режиме запрос, ответ сообственно настройки порта и чтение :
Код:
 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