Я за бан
Всем добрый день!
Не нашёл функционала удаления профиля, поэтому прошу администрацию удалить мой профиль.
Всем добрый день!
Не нашёл функционала удаления профиля, поэтому прошу администрацию удалить мой профиль.
Так получилось, что через некоторое время буду вынужден переехать в Украину, причём достаточно на долгий период. Хотелось бы узнать как обстоят дела с возможностью работы для гражданина РФ. Официальные источники повсюду твердят о получении разрешения на работу, которое делается не всегда очень быстро. Незаконные способы получения такого разрешения меня не интересуют. Соответсвенно вопрос, как быть сразу после переезда (намереваюсь переехать в Киев)? И если придётся ждать заветных бумажек, скажем, два месяца, то сколько при себе нужно иметь денег в среднем, чтобы прожить без работы?
Всем здравствуйте.
С 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. Заранее спасибо.