int Tread::readATS(void) {std::cout <<"начало работы readATS"<<std::endl;QChar ch;QString str;QTime t;int value = 0;int timeout =5000; /**Время ожидания приглашения ввода пароля или команды**/t.start();while(t.elapsed() <= timeout) { ch=fgetc(port); std::cout<<ch.toAscii(); str=str+ch; if(str.contains("<",Qt::CaseInsensitive)) { if(str.contains("PASSWORD",Qt::CaseSensitive)) { value=1; std::cout<<"Запрос пароля"<<std::endl; break; } value=2; std::cout<<"Введите команду"<<std::endl; break; } } std::cout <<"Завершение работы readATS"<<std::endl; return value;}
void Tread::run(){answer=rd_wr_port( zapros);}
QString Tread::rd_wr_port(QString zapros){QString otvet;desc_port=open_port();init_raw_tty( desc_port);port = fdopen( desc_port, "w+b" );tcsendbreak(desc_port,400);tcflush(desc_port, TCIFLUSH);int v=readATS(); // Вызов функции readATS()tcflush(desc_port,TCIFLUSH);std::cout<<"v="<<v<<std::endl;tcflush(desc_port,TCIFLUSH);switch(v) { case 0: { std::cout<<"readATS() вернула 0, истек период ожидания"<<std::endl; break; } case 1: { //PASSWORD sendpassword(port); usleep(500000); sendcommand(zapros); otvet=getreport(); break; } case 2: { //Команда sendcommand(zapros); otvet=getreport(); break; } default: { std::cout<<"Функция readATS() вернула "<<v<<" неизвестный ответ."<<std::endl; } }fclose(port);close(desc_port);return otvet;}
void Tread::init_raw_tty(int desc_port){struct termios newtio;bzero(&newtio,sizeof(newtio)); //Очищаем структуру newtio//---------------------------------------------------------1200 BOD,cs7|1,parenb newtio.c_cc[VTIME] = 1; newtio.c_cc[VMIN] = 0;newtio.c_cflag &=~(CSTOPB|CS5|CS6|CS7|CS8|PARENB|PARODD);newtio.c_cflag |=(CS7|PARENB|CREAD|CLOCAL);cfsetospeed(&newtio, B1200);cfsetispeed(&newtio, B1200);//------------------------------------------------------------------------------------------------------------------------------ tcflush(desc_port, TCIFLUSH); tcsetattr(desc_port,TCSANOW,&newtio);}
if(str.contains("<",Qt::CaseInsensitive)) { if(str.contains("PASSWORD",Qt::CaseSensitive)) { value=1; std::cout<<"Запрос пароля"<<std::endl; break; // РАЗ } value=2; std::cout<<"Введите команду"<<std::endl; break; // ДВАЗ }