Russian Qt Forum
Ноябрь 25, 2024, 22:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4 5 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 787039 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #30 : Июль 24, 2009, 07:45 »

Цитировать
Хм, что-то и QextSerialPort, и эта библиотека незаслуженно обходят темы девятибитного режима. Чувствую понапишу я своих велосипедов с квадратными колесами.

это что за режим такой? ссылку в студию!
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #31 : Июль 24, 2009, 08:35 »

en.wikipedia.org search:Serial port

У меня вот есть девайс с которым нужно общаться по протоколу 9N1 (девять бит данных -- без контрольного бита (parity) -- один стоповый).
Кстати почитал я исходники немного... включать windows.h в заголовки это жестоко.
А еще надо было не слепо копировать реализацию для posix, а хотя бы почитать /usr/include/bits/termios.h (это я к предупреждениям по поводу непереносимости mark/space parity). Я конечно тоже не сразу прочитал его, сначала рыл статьи, потом дошел до исходников вайна Улыбающийся а потом только вернулся.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #32 : Июль 24, 2009, 09:10 »

вот нашел по этому поводу кое что http://www.lothosoft.ch/thomas/libmip/markspaceparity.php

добавлю для *.nix эту фичу Улыбающийся

только все-же непонятно как из 8M2 или 8S2 получить 9N1 ... т.к. байт максимум составляет 8 бит.. и ф-я read хз что вернет.. но тож попробую

хотя под 9N1 скорее подразумевается 8M1 или 8S1 .. т.к. девайсы на микроконтроллерах и т.п. это используют.. но редко.. там 9-й бит программируемый

Цитировать
Кстати почитал я исходники немного... включать windows.h в заголовки это жестоко.
что имеется ввиду?
« Последнее редактирование: Июль 24, 2009, 10:51 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #33 : Июль 24, 2009, 09:37 »

1. У меня есть legacy исходники, где 9N1 эмулируется через переключение 8M1/8S1 и обработкой ошибки parity (ага, wtf, но обычно эти девайсы не с компьютерами общаются, а между собой)
2. включение windows.h в файл winserialdevice.h вываливает дофига символов в глобальное пространство имен. Я бы вообще сделал это Qt-way - перенести все платформозависимые функции и данные в приватный класс, определять его отдельно.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #34 : Июль 24, 2009, 09:41 »

Цитировать
1. У меня есть legacy исходники, где 9N1 эмулируется через переключение 8M1/8S1 и обработкой ошибки parity (ага, wtf, но обычно эти девайсы не с компьютерами общаются, а между собой)
скиньте ка на мыло исходнички то Улыбающийся
Цитировать
включение windows.h в файл winserialdevice.h вываливает дофига символов в глобальное пространство имен. Я бы вообще сделал это Qt-way - перенести все платформозависимые функции и данные в приватный класс, определять его отдельно.
аха.. попробуем..
Записан

ArchLinux x86_64 / Win10 64 bit
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #35 : Июль 24, 2009, 10:39 »

>>скиньте ка на мыло исходнички то
А губа-ТО у тебя не дура Улыбающийся
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #36 : Июль 24, 2009, 10:49 »

Цитировать
А губа-ТО у тебя не дура Улыбающийся
а шо такого то? Улыбающийся
шо так шо так я всё-равно докопаюсь до истины.. просто будет быстрее.. и всё

и еще, я так понял, что этот режим можно врубить только на передачу.. на прием думаю не получится..  хотя...
« Последнее редактирование: Июль 24, 2009, 10:54 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #37 : Июль 24, 2009, 11:14 »

Думаю все же не место девятибитному режиму в библиотеке, ибо такие символы не укладываются в интерфейс QIODevice. Лучше потратить время на допиливание более общих вещей.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #38 : Июль 24, 2009, 11:54 »

Цитировать
Лучше потратить время на допиливание более общих вещей.
например?
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #39 : Июль 24, 2009, 12:05 »

Например допилить определение портов (в qextserialport 1.2 alpha есть реализация для windows, правда со своими тараканами), в том числе при добавлении/удалении.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #40 : Июль 24, 2009, 12:23 »

Цитировать
Например допилить определение портов (в qextserialport 1.2 alpha есть реализация для windows, правда со своими тараканами), в том числе при добавлении/удалении.
а в QSerialDevice разве не работает этот метод?
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #41 : Август 17, 2009, 19:51 »

Я решил переделать библиотеку так, чтобы она "соответствовала" идеологии QT4.
За основу взял реализацию QAbstractSocket и т.п. . Решил пока что начать реализацию библиотеки "чисто" для Unix. (хотя и для Windows есть куски)

Реализовал "с горем пополам" это:
abstractserialengine.cpp
nativeserialengine.cpp
nativeserialengine_unix.cpp
nativeserialengine_win.cpp
abstractserialengine_p.h
nativeserialengine_p.h
datatypes.h
(архив прилагается)

Но застопорился на реализации :
abstractserial_p.h
abstractserial.h
abstractserial.cpp
(назвал по аналогии с сокетами)

Как видно, я старался придерживаться структуры файлов такой же как и в реализации сокетов

Стопор у меня в том, что у меня нет сил больше разбираться в исходниках сокетов, т.к. тролли нагородили и навертели  там так, что я не могу отсеять уже лишнее и добавить то что нужно..

Меня интересуют следующие вопросы:
1. Зачем они  и в qabstractsocketengine_p.h и в qabstractsocket_p.h два раза определяют одни и теже переменные:
Код:
..
    QString hostName;
    quint16 port;
    QHostAddress host;
    QList<QHostAddress> addresses;

    quint16 localPort;
    quint16 peerPort;
    QHostAddress localAddress;
    QHostAddress peerAddress;
    QString peerName;
..
??

2. Для чего используется метод :    static QAbstractSocketEngine *createSocketEngine(int socketDescripter, QObject *parent); ?
Он меня вводит в ступор ...

И вообще, чо-то я в себе разочаровался Грустный

Не знаю как разгрести всё это. Грустный

Помогите хто нить в чем нить! На путь истинный наставте!

ЗЫ: решил занятся переделкой для того чтобы иметь возможность получения сигналов readyRead из евент лоопа. Но т.к. то что мне советовали на этом форуме в части использования нотификаторов - это мне показалось слишком простым, т.к. нужно еще и блокировать сообщения при вызове waitForReadyRead и т.п. В общем хотел сделать "все правильно" Грустный
« Последнее редактирование: Июнь 28, 2011, 14:38 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #42 : Август 17, 2009, 21:26 »

Не надо было копировать архитектуру сокетов Qt. Там такое разделение необходимо для прозрачной поддержки прокси соединений. Для последовательного порта прокси не бывает и не нужно усложнять структуру на ровном месте. Завтра посмотрю, может чего придумаю.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #43 : Август 18, 2009, 07:17 »

Улыбающийся оч жду! У меня "затык" в правильном применении нотификаторов в основном...  не знаю как подступится.

я тут подумал, а что если при вызове waitForReadyRead блокировать сигнал readyRead из петли сообщений путем времменного отключения нотификатора:
(используя void QSocketNotifier::setEnabled ( bool enable )   [slot] )
Код:
bool waitForReadyRead ( int msecs )
{
    readNotifier->setEnabled (false);
    /*
        тут выполняем действия
    */
    readNotifier->setEnabled (true);
}
но тут опять чо-то не так...
« Последнее редактирование: Август 18, 2009, 12:48 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #44 : Август 26, 2009, 18:54 »

Я тут вроде как реализовал практически все что хотел ... и как хоьел, НО что-то не собирается проект, пишет:
Цитировать
[den@myhost src]$ make
g++ -c -pipe -march=x86-64 -mtune=generic -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include -Ibuild/moc -I. -o build/obj/abstractserial.o abstractserial.cpp
g++ -c -pipe -march=x86-64 -mtune=generic -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include -Ibuild/moc -I. -o build/obj/abstractserialengine.o abstractserialengine.cpp
g++ -c -pipe -march=x86-64 -mtune=generic -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include -Ibuild/moc -I. -o build/obj/nativeserialengine.o nativeserialengine.cpp
nativeserialengine.cpp: In constructor ‘NativeSerialEngine::NativeSerialEngine(QObject*)’:
nativeserialengine.cpp:13: ошибка: нет подходящей функции для вызова ‘AbstractSerialEngine::AbstractSerialEngine(NativeSerialEnginePrivate&, QObject*&)’
abstractserialengine.h:13: замечание: претенденты: AbstractSerialEngine::AbstractSerialEngine(QObject*)
abstractserialengine.h:10: замечание:              AbstractSerialEngine::AbstractSerialEngine(const AbstractSerialEngine&)
make: *** [build/obj/nativeserialengine.o] Ошибка 1
[den@myhost src]$  
Что компилятору не нравится? Я уже с этим измучился весь Грустный Подскажите, что не так?

И еще принимаю советы Улыбающийся

ЗЫ: архив прилагается
« Последнее редактирование: Июнь 28, 2011, 14:38 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: 1 2 [3] 4 5 ... 88   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.