Хочу портировать некий проект, работающий с ком-портом, написанный в boost'e на Qt
В этом проекте они пустили на устройстве самописный драйвер и для установления опций там (кроме всего прочего) вызывается boost::asio::serial_port::set_option() с параметром объекта класса, который пользуется данными из некоего бинарного файла, который сотворил автор этого драйвера.
На вопрос, есть ли альтернатива в виде "отдельных" опций, записанному в этом файле, автор драйвера отвечает, что единственный способ установить опции, это прочитать этот его файл.
И вот моя задача использовать данные из этого файла в классе QSerialPort
В QSerialPort
, для установлений его опций есть только функции типа setЧтоНибудь
, но не нашел аналога такой интересной функции буста, как boost::asio::serial_port::set_option(SettableSerialPortOption)
. Это такая template'ная функция, в котору надо вставить объект класса, который содержит функцию вида store(termios &storage, boost::system::error_code &ec) const;
Есть идеи как это осуществить?
Вот, например, что делает store()
оригинального проекта:
boost::system::error_code
DataFrameSocketSAS::SASParityAlternative::store(termios &storage, boost::system::error_code &ec) const
{
ec = boost::system::error_code();
bool error = false;
std::ifstream termios_in(TermiosSettingsFilename.c_str(), std::ifstream::binary);
if (!termios_in)
{
error = true;
ec = boost::system::error_code(boost::system::errc::no_such_file_or_directory, boost::system::generic_category());
}
if (!error)
{
termios_in.seekg(0, termios_in.end);
int size = termios_in.tellg();
termios_in.seekg(0, termios_in.beg);
if (size != sizeof(termios))
{
error = true;
ec = boost::system::error_code(boost::system::errc::invalid_argument, boost::system::generic_category());
}
if (!error)
{
termios_in.read(reinterpret_cast<char*>(&storage), sizeof(storage));
if (!termios_in)
ec = boost::system::error_code(boost::system::errc::io_error, boost::system::generic_category());
}
termios_in.close();
}
return ec;
}
(TermiosSettingsFilename.c_str()
, как вы понимаете - имя "авторского" файла)
Ссылки:
http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/basic_serial_port/get_option.html
http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/basic_serial_port/set_option.html
http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/SettableSerialPortOption.html
P.S. Нашел, что можно использовать handle()
: https://bugreports.qt.io/browse/QTBUG-38812
Хочу теперь получить хэндл и использовать tcsetattr
чтобы установить опции через termios
. Если получится, тут отчитаюсь
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создал приложение Qt Widgets, создал класс для рисования, который называется MainScene, в этом классе переопределил три метода базового класса QGLWidget:...
Есть таблица, пусть для "синтетического" примера - просто таблица целых чиселЧисла могут повторяться и не могут принимать значение NULL
Задача не практическаяХочется оценить, какими подходами ее можно решить на SQL'ях разных диалектов (PostgreSQL, SQLite3, MySQL)
Может заголовок вопроса и не совсем правильный, извинитеСуть в том, что я пытаюсь реализовать нахождение определённого интеграла (используя...