|
Вопрос # 1 154/ вопрос открыт / |
|
Здравствуйте, эксперты!
Тема: "Взаимодействие с мобильным телефоном через Com-порт".
Функции чтения, записи, открытия и настройки порта работают (см. прикреплённый файл - мой вариант). Но есть один момент: если просто читать сразу или через небольшой таймаут, то ответ может быть неполным
В статьях на эту тему советуют организовать потоки для этого, но не получается. Приложение зависает...
В приложении привожу выдержки из лога PortMon двух программ SiMoCo и исходника с delphikingdom.com.
А также исходник моего варианта (прикреплённый).
Принцип работы исходника мне не подходит. Подскажите, как сделать вариант как у SiMoCo.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим-
-
-
-
-
- IRP_MJ_WRITE Length 5: ATE0.
- IOCTL_SERIAL_GET_COMMSTATUS
- IOCTL_SERIAL_WAIT_ON_MASK
- IOCTL_SERIAL_GET_COMMSTATUS
- IRP_MJ_READ Length 6: ..OK..
- IOCTL_SERIAL_PURGE Purge: RXABORT RXCLEAR
- IOCTL_SERIAL_WAIT_ON_MASK
- IOCTL_SERIAL_PURGE Purge: TXABORT TXCLEAR
- IRP_MJ_WRITE Length 5: AT+CGMM.
-
-
-
- IOCTL_SERIAL_GET_COMMSTATUS
- IOCTL_SERIAL_WAIT_ON_MASK
-
-
-
-
-
-
- http://www.delphikingdom.com/zip/comport.zip
-
-
- IOCTL_SERIAL_GET_MODEMSTATUS
- IRP_MJ_READ
-
-
 |
Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 29 ноября 2007, 07:48
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, Emfs!
Не знаю как при работе с телефоном, но когда мне приходилось писать драйвер для электронных весов, то логика такая: в документации для оборудования описан формат команды (в частности ее длина), поэтому в цикле считывает порт до тех пор, пока не прочитаем нужное число байт или не прийдет интервал времени (например секунда) и тогда если нужное число байт не пришло, то выдаем таймаут.
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 29 ноября 2007, 11:09
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Emfs!
К сожалению, прикреплённый файл почему то не открывается.
По поводу "шлёт постоянно". Есть разные способы работы с портом. Например в порт постоянно посылаются запросы на наличие новых данных. Если есть, то генериться сообщение, которое в конце концов выливается в событие компонента.
Есть другой способ - передающее устройство генерит специальное сообщение, а приёмник (тоесть компьютер) ждет его. Каждый способ по своему хорош.
Почему же не приходят все данные? очень просто. вы их просто "недочитываете". Дело в том, что если вы работаете в неблокирующем режиме, то данные не обязаны приходить одним пакетом! они могут приходить в несколько пакетов. Вот нужно и собирать данные. если вы воспользуетесь библиотекой synapser, которую я предлагал, то вы решите эти проблемы
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 29 ноября 2007, 13:46
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 30 ноября 2007, 17:37; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 30 ноября 2007, 16:57 [#1]:
Я посмотрел исходники. Зачем было реализовывать ручками, к тому же с ошибками, если есть готовая библиотека?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Фамилия Имя Отчество (статус: Посетитель), 30 ноября 2007, 17:37 [#2]:
Это где-то в сети готовый вариант был...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|