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

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

Страниц: 1 ... 36 37 [38] 39 40 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 786693 раз)
asvil
Гость
« Ответ #555 : Июль 21, 2011, 09:22 »

Так это же синтаксичны цукар.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #556 : Июль 21, 2011, 09:38 »

Лан, парни, хорош флеймить.

Ну а по делу кто что скажет?
Имею ввиду: как быть с AbstractSerialPortPrivate + AbstractSerialPortNotifier и с SerialPortPrivate + SerialPortNotifier (см. исходники).
Или может как-то по другому это сделать? Но как?
Записан

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #557 : Июль 21, 2011, 23:11 »

>>Совершенно не Qt Style.
А как же
Код
C++ (Qt)
    QString i;           // current file's number
    QString total;       // number of files to process
    QString fileName;    // current file's name
 
    QString status = QString("Processing file %1 of %2: %3")
                    .arg(i).arg(total).arg(fileName);
??
Записан

Юра.
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #558 : Июль 22, 2011, 00:35 »

А как же??
Я про предложения z.yu.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #559 : Июль 22, 2011, 22:31 »

Qt Style не панацея, лишь бы была удобность и однозначность понимания кода (я не против принятых правил).
Вот с понятностью-то и проблема. От функции baudrate ожидаешь, что она будет возвращать значение параметра, а не устанавливать его (должно быть setBaudrate).
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #560 : Июль 23, 2011, 17:28 »

>>От функции baudrate ожидаешь, что она будет возвращать значение параметра, а не устанавливать его
с этим согласен
Записан

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

Сообщений: 2812


Просмотр профиля
« Ответ #561 : Июль 28, 2011, 17:43 »

Я тут закомитил много чего, уже библиотека в принципе наполовину работает:
- Windows - класс SerialPort + SerialPortInfo работают.
- .nix - только SerialPortInfo работают.

На что хотел бы заакцентировать внимание:
1. Нужна правильная реализация методов: setDataErrorPolicy(), dataErrorPolicy() .

Жду реализацию от тов. b-s-a.

2. Нужна правильная реализация отлова ошибок. В текущем варианте она криво реализована.
Для Windows: Реально они ловятся через CrearCommError, так вот, непонятно куда его сунуть в код (сунул пока
в bytesAvailable() и read()) - но некрасиво получается.

Жду реализацию от тов. b-s-a.

По п. 1. и 2. я там набросал на скорую примерный вариант - но, чую, что ерундово. Улыбающийся
Почему от b-s-a - потому, что он предложил использовать Policy.

Так что, b-s-a, тебе и флаг в руки, т.к. я не оч. понимаю что требуется! Улыбающийся

3. Так же от всех заинтересованных лиц хотел бы услышать в общем комментарии по поводу текущей структуры классов и их взаимодействия между собой.
Годится ли такая структура или нет?


Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #562 : Июль 28, 2011, 22:26 »

1. Нужна правильная реализация методов: setDataErrorPolicy(), dataErrorPolicy() .
Могу реализовать только под *nix
2. Нужна правильная реализация отлова ошибок. В текущем варианте она криво реализована.
Опять же, только под *nix
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #563 : Июль 29, 2011, 07:20 »

Аха, пойдёт.
Я хоть тогда уловлю основную суть.
Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #564 : Июль 29, 2011, 10:25 »

Реализовать просто. Главное, чтобы ОС позволяла точно определить место ошибки (*nix это позволяет). В этом случае все режимы реакции на ошибки эмулируются очень просто. Но, скорее всего, эмуляцию делать даже не придется, так как ОС позволяют ошибку игнорировать, опускать или заменять нулем. Остается реализовать только StopReceiving. Можно это сделать через unix подобный стек (если делается упреждающее чтение в фоновом режиме) - если возникла ошибка четности, то перед байтом данных пишется код 0xff, если пришел сам код 0xff, то перед ним тоже пишется 0xff (правда, тут есть одна проблема, если пришел битый код 0xff, то узнать об этом будет невозможно). Когда данные передаются пользователю, то этот код парсится и чтение прерывается ПЕРЕД кодом данных. Вот только необходимо еще проверить, как будет работать встроенный код буферизации. А то я долго ловил из-за него глюки.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #565 : Июль 29, 2011, 10:45 »

>>так как ОС позволяют ошибку игнорировать, опускать или заменять нулем
В Windows можно только игнорировать, заменять нулем, блокировать операции чтения/записи (судя по MSDN),
а вот опускать/пропускать не получится наверное.

Эти опции устанавливаются в DCB:

StopReceiving
Цитировать
fAbortOnError

    If this member is TRUE, the driver terminates all read and write operations with an error status if an error occurs. The driver will not accept any further communications operations until the application has acknowledged the error by calling the ClearCommError function.


PassZero
Цитировать
fErrorChar

    Indicates whether bytes received with parity errors are replaced with the character specified by the ErrorChar member. If this member is TRUE and the fParity member is TRUE, replacement occurs.
Цитировать
ErrorChar

    The value of the character used to replace bytes received with a parity error.


Но!  Все эти опции в винде работают через Ж.. .

К примеру, если устанавливаю PassZero, то WaitCommEvent не генерирует событий на приход некоторых символов (например '6'),
и если набрав/жмакнув несколько раз '6666' а потом '7' - то событие появляется и класс читает все 5 символов (замененных нулями).

Если устанавливаю StopReceiving - то не получается остановить чтение, т.к.
перед тем как прочитать данные в классе вызывается метод bytesAvailable(), который содержит ClearCommError(), который
сбрасывает ошибку и разрешает чтение/запись. Поэтому чтение данных не останавливается (я так предполагаю).

В общем, в Windows много непонятных моментов ещё. И как ухитриться прикрутить её особенности к логике SerialPort для меня еще та загадка.

>>В этом случае все режимы реакции на ошибки эмулируются очень просто.
Не хотельсь бы заморачиваться с эмуляцией, т.к. это трата проц. времени и увеличение вычислительных ресурсов + замедление работы.
Хотельсь бы всё сделать нативными средствами.
Но посмотрим что получится.

-----

b-s-a, ок, делай что планировал, идеи в принципе понятны.
« Последнее редактирование: Июль 29, 2011, 10:52 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #566 : Июль 29, 2011, 12:04 »

Значит под Windows не получится сделать большинство режимов без эмуляции. С другой стороны, их мало кто будет использовать, поэтому можно пренебречь. А потом, все равно поддержка четности Mark и Space будет эмулироваться на большинстве *nix (в т.ч. и MacOS X). Тебя же это никак не тревожит?  Подмигивающий

На данный момент у меня к сожалению нет времени (да и вдохновения тоже). Думаю, в сентябре возьмусь за реализацию поддержки *nix.
Записан
eugene
Гость
« Ответ #567 : Август 03, 2011, 07:21 »

Я юзаю библу на линухе на платформе ARM и у меня возникла следующая проблема. При подключении через библиотеку переходника USB-COM от профилинка периодически всё зависает. Данных гоняется через интерфейс немного и данные из буфер забираются каждые пару секунд. Причем после зависания система уже не реагирует на включение-отключение переходника и спасает только ребут. Версия библы 0.3.0, qt4.6.3. Никто не сталкивался с подобным поведением?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #568 : Август 03, 2011, 07:27 »

2 eugene ,
попробуй не 0.3.0 а текущую из мастера.

Да и код в студию.
Записан

ArchLinux x86_64 / Win10 64 bit
eugene
Гость
« Ответ #569 : Август 03, 2011, 07:58 »

Ок, вечером будет код. Пробовал 0.4.0 и новую, с ней вообще не заводится, не может открыть порт, поэтому вынужден был остаться на 0.3.
Записан
Страниц: 1 ... 36 37 [38] 39 40 ... 88   Вверх
  Печать  
 
Перейти в:  


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