LINUX.ORG.RU

Чтение двумя процессами одного СОМ порта. Что будет?

 com порт gps ntpd gpsd


2

2

Есть GPS приёмник «Garmin» с одним COM портом, подключенный к компьютеру на COM1. С приёмника идут пакеты в формате NMEA, и с помощью cutecom (запущенную под пользователем) всё это видно. Далее запускаем NTP:
# ntpd
# gpsd -n -b /dev/ttyS0
# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.          10 l  170   64  374    0.000    0.000   0.000
*SHM(0)          .GPS.            0 l    9   16  377    0.000  -1574.3  20.888
Всё работает.
Теперь нужно другой программкой читать координаты с GPS приёмника. Запускаем, для примера, cutecom под пользователем и видим ошибку «Устройство занято». Запускаем cutecom под root, порт открывается, данные с порта читаются.
Обьясните, пожалуйста, популярно, что происходит с данными? Будет ли cutecom получать все пакеты или часть пакетов пойдёт в ntp, а часть в cutecom? Можно ли открывать один порт двумя приложениями?

Всем спасибо, решено, буду получать данные GPS через демон gpsd, а не на прямую с порта... http://catb.org/gpsd/



Последнее исправление: Demitreus (всего исправлений: 1)

Можно ли открывать один порт двумя приложениями?

Нельзя. Чревато.

Лучше заведи демона, который будет буферизовать пакеты и раздавать клиентам.

// либо блокировки используй

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Лучше заведи демона, который будет буферизовать пакеты и раздавать клиентам

Идея понятна, но есть ли готовые демоны для реализации такой буферизации, задача то не новая. Наверняка многие уже сталкивались с этим?

Demitreus
() автор топика
Ответ на: комментарий от Demitreus

Я ни разу не сталкивался. У меня обычно демон обслуживает железяку, а данные выкладывает в shm или отправляет в message queue (смотря что за задача). То, что надо записать, берет из другой очереди. А клиентов можно хоть сотню запустить.

P.S. Теоретически, можно написать свой serial-модуль, который будет создавать пару устройств ttyS0_0 и ttyS0_1, эмулирующих порт, но на деле раздающих лишь нужную информацию клиентам.

P.P.S. Проще сделать на дешевой макетке USB-хрень, эмулирующую хаб, на котором висят 2 разных устройства.

P.P.P.S. А если таки заморачиваться с аппаратным решением, можно вообще накинуть на этот «хаб» HID-устройство, управляя которым можно будет менять количество «устройств».

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 3)

ты настолько любишь костыли??? правильно тебе говорят - пиши демона и уже оттуда любыми другими средствами типа IPC раздавай клиентам

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.