LINUX.ORG.RU

Сообщения zorlog

 

Я за бан

Всем добрый день!

Не нашёл функционала удаления профиля, поэтому прошу администрацию удалить мой профиль.

 

zorlog
()

Иммиграция в Украину

Так получилось, что через некоторое время буду вынужден переехать в Украину, причём достаточно на долгий период. Хотелось бы узнать как обстоят дела с возможностью работы для гражданина РФ. Официальные источники повсюду твердят о получении разрешения на работу, которое делается не всегда очень быстро. Незаконные способы получения такого разрешения меня не интересуют. Соответсвенно вопрос, как быть сразу после переезда (намереваюсь переехать в Киев)? И если придётся ждать заветных бумажек, скажем, два месяца, то сколько при себе нужно иметь денег в среднем, чтобы прожить без работы?

 ,

zorlog
()

Serial Port Communication Problem [QT4+/POSIX/В гугле искал]

Всем здравствуйте.

С Qt, C++ и ОПП знаком в принципе всего несколько недель, поэтому если не сложно объясните пожалуйста (или дайте ссылки) некоторые странности в работе моего кода.

Кратко опишу, что к чему. Есть USB устройство, которое на самом деле является «USB to Virtual COM-port» преобразователем. Соответственно под Linux'oм (Ubuntu 9.10, если это важно) есть корректно установленные драйвера и устройство обнаруживает себя как /dev/ttyUSB0. Дальше с помощью вот этого кода мне удаётся подключиться к устройству:

void main_window::on_pBushbuttonConnect_toggled(bool checked)
{
   struct termios comConf;
   if(checked)
   {
      //serial port there
      port.setFileName("/dev/ttyUSB0");
      if(!port.open(QIODevice::ReadWrite))
      {
         //error
      }
      else
      {
         tcgetattr(port.handle(), &comConf);

         cfmakeraw(&comConf);

         //params
         comConf.c_cflag |= CLOCAL;
         //baud rate - 38400
         cfsetispeed(&comConf, B38400);
         cfsetospeed(&comConf, B38400);
         //data bits - 8
         comConf.c_cflag &= (~CSIZE);
         comConf.c_cflag |= CS8;
         //parity - none
         comConf.c_cflag &= (~PARENB);
         //stop bits - 1
         comConf.c_cflag &= (~CSTOPB);
         //flow control - off
         comConf.c_cflag&=(~CRTSCTS);
         comConf.c_iflag&=(~(IXON|IXOFF|IXANY));

         if(tcsetattr(port.handle(), TCSANOW, &comConf) == -1)
         {
             //error
         }

      }
   }
   else
   {
      port.close();
   }
}

а вот с помощью этого куска кода, отправляю байт в устройство:

bool main_window::sendValue(int value)
{
   if(port.isOpen())
   {
      if(port.isWritable())
      {
         port.flush(); // <------ Вот этот момент
         port.putChar(value);
         return true;
      }
   } 
   return false;
}

Меня очень смущает наличее обозначенного стрелкой вызова. Дело в том, что без него байты не посылаются. И проблема заключается точно не в устройстве, так как сигнальные светодиоды не начинают моргать, а значит передача не началась. Собственно это и есть первый вопрос, почему для отправки байта надо очищать буфер? (кстати, принять байт вообще не получается)

Второй вопрос заключается в пропаже некоторых байтов, не все байты доходят до устройства, то есть если я подряд вызову пять или шесть функций «sendValue(120)», то из пяти байт в лучшем случае доходят три. И эта проблема опять же на стороне ПК или софта. То есть второй вопрос, как исключить пропажу байтов? (методы типа waitReadyWritten(-1) не работают... либо я их неправильно вызывал)

PS Аргументированные оскорбления и посылы курить маны принимаются :) QextSerialPort не подходит, так как GPL. Заранее спасибо.

zorlog
()

RSS подписка на новые темы