SASGIS - SAS.Планета
View Issue Details
0000720SAS.Планета[All Projects] Хотелкаpublic09-05-2011 09:0410-10-2012 11:50
gpsMax 
vasketsov 
noneminorhave not tried
closedfixed 
110418 
120808120808 
0000720: Функция автоопределения com-порта, на котором сидит gps-приёмник
Сейчас SAS.Планета не умеет узнавать номер порта и требует это от пользователя. А задача-то рутинная и вполне автоматизируемая, нужно лишь найти, с какого порта идут похожие на нужные данные.

На формочке настроек GPS поместить кнопку "Автоопределение". При её нажатии выдать окошко, где будет прогрессбар (текущий номер com, деленный на 256 и выраженный в процентах) и под ним номер текущего пробуемого com.

Проба com: пытаемся подключиться и считывать оттуда данные. Если данные идут, то надо смотреть, относятся ли они к gps. SAS ведь это уже умеет делать.

Возможно, отдельного окошка и не надо, достаточно разместить в этом же диалоге настроек скрытый прогрессбар, показываемый по нажатию кнопки "Автоопределение". Если есть нужные компоненты, то номер порта можно писать прямо на прогрессбаре

[####..12/256......]

(Из комментов к версии 110418: http://sasgis.org/2011/04/18/versiya-110418/comment-page-3/#comment-7123)
com, gps, автоопределение, плагины
Issue History
09-05-2011 09:04gpsMaxNew Issue
09-05-2011 09:04gpsMaxDescription Updatedbug_revision_view_page.php?rev_id=1167#r1167
09-05-2011 09:05gpsMaxTag Attached: gps
09-05-2011 09:05gpsMaxTag Attached: com
09-05-2011 09:05gpsMaxTag Attached: автоопределение
09-05-2011 09:06gpsMaxStatusnew => acknowledged
09-05-2011 09:06gpsMaxProduct Version => 110418
09-05-2011 09:18vdemidovNote Added: 0002478
09-05-2011 09:19vdemidovStatusacknowledged => confirmed
09-05-2011 09:19vdemidovTarget Version => 50xxxx
19-05-2011 05:21vdemidovTag Attached: плагины
19-05-2011 11:33gpsMaxDescription Updatedbug_revision_view_page.php?rev_id=1246#r1246
20-05-2011 06:25feyaNote Added: 0002620
25-05-2011 06:37ELITENote Added: 0002646
06-06-2011 21:39gpsMaxPrioritynormal => none
23-10-2011 12:57vasketsovNote Added: 0004167
23-10-2011 12:59vasketsovNote Edited: 0004167bug_revision_view_page.php?bugnote_id=4167#r2106
25-10-2011 22:07vasketsovAssigned To => vasketsov
25-10-2011 22:07vasketsovStatusconfirmed => assigned
16-12-2011 13:54vasketsovStatusassigned => resolved
16-12-2011 13:54vasketsovFixed in Version => 24xxxx
16-12-2011 13:54vasketsovResolutionopen => fixed
23-01-2012 08:17vdemidovFixed in Version24xxxx => 120808
23-01-2012 08:17vdemidovTarget Version50xxxx => 120808
10-10-2012 11:50TolikStatusresolved => closed

Notes
(0002478)
vdemidov   
09-05-2011 09:18   
Пользователям Гарминовских навигаторов, навигаторов на WinCE и тп. это не поможет, а остальные и так достаточно легко угадают номер порта. Но если кто-то напишет детектор, я непротив.
(0002620)
feya   
20-05-2011 06:25   
Дык, а был же, зачем убрали?)
(0002646)
ELITE   
25-05-2011 06:37   
был, и работал, и даже с ГАРМИНОМ (если в гармите в настройке передачи данных поставить протокол не гармин а изо (ну или по другому может обзываться, но не родной гарминовский)
проверено на стрит рейсинг 3 (который 3 а не i3, более старый и амерекос)
(0004167)
vasketsov   
23-10-2011 12:57   
(edited on: 23-10-2011 12:59)
Сделаю для COM, только имхо достаточно без проверки похожести данных (с этим есть техническая проблема, см. ниже сноску), лишь был данные читались. С некоторыми опциями для ограничения количества проверяемых портов. И без прогрессбаров, ибо автоопределение порта вполне может быть частью процедуры подключения.
Кстати, и вовсе не 256 портов надо просматривать, а на порядок меньше, а то и вообще несколько штук. А скорость проверки по большому счёту не зависит от этого количества, ибо проверять по одному порту некошерно, можно сразу назапускать потоков по числу портов, всё равно через полторы секунды они все умрут.
*) При чтении из ком-порта устанавливается таймаут. Если не вдаваться в подробности, то процедура чтения вернётся не позже этого таймаута. Но никто не гарантирует, что буфер будет заполнен полностью корректным текстом в соответствии со спецификацией nmea. В случае небольших таймаутов ситуация простая: чем больше таймаут, тем больше вероятность найти нормальную команду nmea в прочитанном буфере. В итоге для проверки в худшем случае может потребоваться не одна-полторы секунды (ибо из ком-портов в системе при отсутствии подключённого оборудования ничего не сыплется), а минимум три-четыре. Оно надо? Ну если реально надо - то разве что как опция. Либо читаем хоть что-то за полторы секунды, либо ждём 5 секунд и ищем хотя бы одну нормальную команду (впрочем, это тоже не гарантирует, что это gps-приёмник). Но имхо баловство это, порты и так эксклюзивно открываются, чужой используемый не получится открыть.