Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Вопросы системного уровня проектирования _ Как верблюду пройти сквозь игольное ушко или Способы управления/конфигурирования устройства через единственное SPP-соединение.

Автор: jcxz Sep 24 2018, 11:22

Имеется устройство. Устройство имеет bluetooth (BT). Выбор профилей в использованном BT-модуле небогат и, похоже, придётся обходиться одним только SPP.
Через это SPP нужно делать конфигурирование устройства + изредка скачивать с него файлы (а может в будущем и закачивать на него понадобится).
SPP - потому что должна быть возможность конфигурить "в поле", с телефона. Устройство в роли SPP-сервера - принимает входящие подключения, само не инициирует их.
Так как:
1) необходима возможность конфигурирования из разных ОС: винда, линух, Андроид, АйОС, ...;
2) штат команды разработки предельно мал и бюджет соответствующий;
то для конфигурирования нужно использовать только готовое ПО/протоколы, и самый простой путь - написание конфигураторов для всех ОС, работающих через SPP-канал - отпадает.
В свете вышеизложенных соображений решил конфигурирование построить на базе эмулятора ANSI-терминала: устройство будет генерить текстовый вывод, со всеми менюшками, чекбоксами, edit-контролами и прочим. В цвете, мерцаниях и т.д. Реагируя на нажимаемые пользователем клавиши.
Т.е. - интерактивный интерфейс с юзером. Параметров конфигурации не так уж и много - думаю будет 2-3 десятка. Несколько разных экранов.
В принципе всё работает, если не считать того, что хороших эмуляторов терминалов - не так уж и много. А ведь ещё нужно будет подобрать нормальные терминалы для всех ОС.... sad.gif((
Да - ещё нужно будет принимать с устройства файлы. Для этого думал использовать ZModem. Здесь с эмуляторами терминала ещё хуже оказалось.

Но меня посещают мысли, что возможно я не вижу какого-то более удобного варианта, сделать работу по-другому, удобнее и красивше.
В плане удобства пользователя, было бы гораздо лучше использовать HTML. Но как это сделать через SPP (COM-порт)? Причём чтобы даже не продвинутый юзер смог пользоваться.
Я уже думал о таком:
Под виндой - сделать удалённое подключение к сети через этот COM-порт, запустить через него SLIP-протокол, внутри которого - IP-фреймы. Ну и поднять HTTP-сервер в устройстве на этом канале. Возможно так можно сделать. И будет красиво и круто. И с передачей файлов тогда нет проблем. Да и даже графику на странице можно сделать.
Но вот мне кажется, что это будет через одно известное место. И не факт, что будет работать в последующих версиях винды. А тем более - на других ОС.

Вопрос к тем, кто был в аналогичной ситуации: Какое Вы выбрали решение задачи и почему?

Автор: megajohn Sep 24 2018, 11:27

Цитата(jcxz @ Sep 24 2018, 15:22) *
Вопрос к тем, кто был в аналогичной ситуации: Какое Вы выбрали решение задачи и почему?


вот как раз все что Вы описываете, вижу в одной железке.
реализовано через простой COM-порт, а там на нижнем уровне PPP/LCP/IPCP/IP ну и далее SNMP/TELNET/HTTP:80/FTP

Автор: jcxz Sep 24 2018, 11:31

Цитата(megajohn @ Sep 24 2018, 14:27) *
вот как раз все что Вы описываете, вижу в одной железке.
реализовано через простой COM-порт, а там на нижнем уровне PPP/LCP/IPCP/IP ну и далее SNMP/TELNET/HTTP:80/FTP

Каким образом осуществляется подключение к этой железке?

Автор: megajohn Sep 24 2018, 11:45

Цитата(jcxz @ Sep 24 2018, 15:31) *
Каким образом осуществляется подключение к этой железке?


так же, как вы и пишите, через модемное соединение =)

то есть ставится inf + dll. Ну и далее мышкой на соединение или через WinApi http://electronix.ru/redirect.php?https://docs.microsoft.com/en-us/windows/desktop/api/ras/nf-ras-rasdiala

Цитата(jcxz @ Sep 24 2018, 15:31) *
И не факт, что будет работать в последующих версиях винды.

такой метод изначально работал на WinXP, но так же работает на Win7 и Win8.1 ( на Win10 не пробывал - нет такого под рукой )

Автор: AlexandrY Sep 24 2018, 11:58

Цитата(megajohn @ Sep 24 2018, 14:45) *
такой метод изначально работал на WinXP, но так же работает на Win7 и Win8.1 ( на Win10 не пробывал - нет такого под рукой )

Никак он не работает.
Нет давно уже под виндой Direct Cable connection через PPP. Так что можно забыть.

Автор: megajohn Sep 24 2018, 12:11

Цитата(AlexandrY @ Sep 24 2018, 15:58) *
Нет давно уже под виндой Direct Cable connection через PPP. Так что можно забыть.


Ну может в Win10 и нет, но вот скрин из Win7 x64 SP1

http://electronix.ru/redirect.php?https://postimages.org/


P.S. ADD:
это не оно ? http://electronix.ru/redirect.php?https://iihelp.iinet.net.au/Dialup_setup_for_Windows_10

Автор: AlexandrY Sep 24 2018, 12:18

Цитата(megajohn @ Sep 24 2018, 15:11) *
это не оно ? http://electronix.ru/redirect.php?https://iihelp.iinet.net.au/Dialup_setup_for_Windows_10

Нет, то было именно Direct Cable connection через PPP.
Оно не требовало никакого номера и могло активизироваться самим дивайсом.

Автор: megajohn Sep 24 2018, 12:22

Цитата(AlexandrY @ Sep 24 2018, 16:18) *
Оно не требовало никакого номера и могло активизироваться самим дивайсом.


но автору нужно "Устройство в роли SPP-сервера - принимает входящие подключения, само не инициирует их."

Автор: _pv Sep 24 2018, 12:32

Цитата(jcxz @ Sep 24 2018, 17:22) *
В свете вышеизложенных соображений решил конфигурирование построить на базе эмулятора ANSI-терминала: устройство будет генерить текстовый вывод, со всеми менюшками, чекбоксами, edit-контролами и прочим. В цвете, мерцаниях и т.д. Реагируя на нажимаемые пользователем клавиши.
Т.е. - интерактивный интерфейс с юзером. Параметров конфигурации не так уж и много - думаю будет 2-3 десятка. Несколько разных экранов.
Да - ещё нужно будет принимать с устройства файлы. Для этого думал использовать ZModem. Здесь с эмуляторами терминала ещё хуже оказалось.

имхо менюшки/чекбоксы в цвете и мерцаниях - как раз лишнее,
сделайте минимум командную строку:

>read paramname\n
>write paramname value\n
>upload filename <base64_encoded_data><EOF> с проверкой контрольной суммы.
если файлы не особо большие, чтобы в случае ошибки просто переслать заново целиком.

совсем тупых терминалов, без zmodem, под любую платформу думаю куда больше чем хотя бы тех кто разные цвета и vt100 умеет.
потом уже, на жалобы юзеров, под самые ходовые платформы поверх этого можно будет и морду покрасивее нарисовать.


Цитата(megajohn @ Sep 24 2018, 18:11) *
Ну может в Win10 и нет, но вот скрин из Win7 x64 SP1
http://electronix.ru/redirect.php?https://postimages.org/

ага, а теперь то же, для iOS ещё продемонстрируйте sm.gif

Автор: AlexandrY Sep 24 2018, 12:40

Цитата(megajohn @ Sep 24 2018, 15:22) *
но автору нужно "Устройство в роли SPP-сервера - принимает входящие подключения, само не инициирует их."

Тогда делайте полный эмулятор AT команд настоящего модема. Желаю удачи. biggrin.gif

Автор: jcxz Sep 24 2018, 12:57

Цитата(megajohn @ Sep 24 2018, 14:45) *
то есть ставится inf + dll. Ну и далее мышкой на соединение или через WinApi http://electronix.ru/redirect.php?https://docs.microsoft.com/en-us/windows/desktop/api/ras/nf-ras-rasdiala
...
такой метод изначально работал на WinXP, но так же работает на Win7 и Win8.1 ( на Win10 не пробывал - нет такого под рукой )

Мне нужен метод работающий не только под виндой (см. первый пост). А dll уже намекает, что "win only" sad.gif
Можно ли такое соединение создать под Андроид например?

Цитата(_pv @ Sep 24 2018, 15:32) *
имхо менюшки/чекбоксы в цвете и мерцаниях - как раз лишнее,
сделайте минимум командную строку:

Нет - кондовой командной строки точно не будет. на дворе давно уже не 1980-е гг.
Конфигурирование должно быть интерактивным, как можно более user-frendly. Так как клиентом надо дорожить.
Менюшки и в цвете - уже есть и работают. И ничего сложного в этом нет. Почти. "Почти" - потому что выбор нормальных терминалок бедный.

Цитата(AlexandrY @ Sep 24 2018, 15:40) *
Тогда делайте полный эмулятор AT команд настоящего модема. Желаю удачи. biggrin.gif

Если-б проблема была только в этом, это была бы ерунда...

Автор: megajohn Sep 24 2018, 13:09

Цитата(AlexandrY @ Sep 24 2018, 16:40) *
Тогда делайте полный эмулятор AT команд настоящего модема. Желаю удачи. biggrin.gif


этого вообще не требуется !
вот так кратко выглядит иннициализация dialup
http://electronix.ru/redirect.php?https://postimages.org/



>Можно ли такое соединение создать под Андроид например?
увы, это проморгал. Посчитал что по Linux уж должно быть dial, поэтому и написал. Тогда больше не вмешиваюсь

Автор: jcxz Sep 24 2018, 13:19

Цитата(megajohn @ Sep 24 2018, 16:09) *
>Можно ли такое соединение создать под Андроид например?
увы, это проморгал. Посчитал что по Linux уж должно быть dial, поэтому и написал. Тогда больше не вмешиваюсь

Линух нам не настолько критичен как Ведроид и Яблокофон. Так как устройство обязательно должно иметь возможность конфигурирования со смартфонов. sad.gif

Автор: amaora Sep 24 2018, 13:42

Цитата(jcxz @ Sep 24 2018, 15:57) *
Нет - кондовой командной строки точно не будет. на дворе давно уже не 1980-е гг.
Конфигурирование должно быть интерактивным, как можно более user-frendly. Так как клиентом надо дорожить.
Менюшки и в цвете - уже есть и работают. И ничего сложного в этом нет. Почти. "Почти" - потому что выбор нормальных терминалок бедный.


Давно не видели командной строки? В зависимости от задачи она бывает и удобнее, с дополнениями, подсказками и историей. И требует при этом лишь самого примитивного эмулятора терминала. Файлы я бы передавал в base64 или другом подобном кодировании.

Делать PPP через SPP это как-то уж слишком странно, много возни для пользователя может оказаться.

+ Под сматрфоны решение только в написании своего приложения, так у них там устроено.

Автор: _pv Sep 24 2018, 13:43

Цитата(jcxz @ Sep 24 2018, 18:57) *
Нет - кондовой командной строки точно не будет. на дворе давно уже не 1980-е гг.
Конфигурирование должно быть интерактивным, как можно более user-frendly. Так как клиентом надо дорожить.
Менюшки и в цвете - уже есть и работают. И ничего сложного в этом нет. Почти. "Почти" - потому что выбор нормальных терминалок бедный.

cisco об этом расскажите.
да сложного конечно ничего нет, но в текстовом режиме все эти цветные менюшки если у пользователя только экранная клавиатура в смартфоне очень вероятно будут ещё хуже простой командной строки.
ну и я это "почти" и имел ввиду, что даже цветной терминал может оказаться не очень доступен, а вся ваша цветная/мигающая красота нарисованная в обычном терминале который этого не понимает выглядеть будет так себе sm.gif
и на простую командную строку свою отдельную морду поверх сделать потом всегда можно которая в порт команды посылать будет, а вот если там уже цветные мигающие менюшки, с ними уже будет гораздо сложнее.

з.ы.
а если взять и рядом поставить ещё отдельный esp32 за 3$ только с питанием, чтобы он подсоединялся к девайсу по BT, а сам при этом по wifi раздавал красивую веб-морду?

Автор: AlexandrY Sep 24 2018, 14:34

Цитата(megajohn @ Sep 24 2018, 16:09) *
этого вообще не требуется !
вот так кратко выглядит иннициализация dialup

Я знаю отлично как делается dialup при прямом кабельном соединении.
Вы мне под Win 10 покажите именно фазу AT обмена.

Автор: jcxz Sep 24 2018, 14:40

Цитата(_pv @ Sep 24 2018, 16:43) *
да сложного конечно ничего нет, но в текстовом режиме все эти цветные менюшки если у пользователя только экранная клавиатура в смартфоне очень вероятно будут ещё хуже простой командной строки.

Да главное - не цветность. И без неё можно.
Главное - интерактивность и дружественный интерфейс! Неужто непонятно?: меню из нескольких пунктов, юзер двигает по нему курсор (подсвеченная любым способом строка) до нужного пункта, это например чекбокс - жмёт на него включая и выключая. Или это какой-то слайдер - двигает его меняя значение. И т.п.
Т.е. - конфигурирование интерактивное. И на экране видна вся текущая конфигурация (или её часть, относящаяся к этому экрану). Можно оглядеть её, переместиться к нужному пункту и исправить.
А не вводом каких то команд в командной строке, которые нужно ещё запоминать, запоминать их формат, набирать и т.д.

Цитата(_pv @ Sep 24 2018, 16:43) *
а если взять и рядом поставить ещё отдельный esp32 за 3$ только с питанием, чтобы он подсоединялся к девайсу по BT, а сам при этом по wifi раздавал красивую веб-морду?

Это уже конкретный костыль. Если уж делать WiFi, то подключать его по проводному интерфейсу. Но и так есть BT - хотелось бы через него. Тем более что свободных интерфейсов уже не осталось почти. Да и все эти ESP - очень ненадёжная вещь для наших условий эксплуатации.

Автор: AlexandrY Sep 24 2018, 14:40

Цитата(_pv @ Sep 24 2018, 16:43) *
ну и я это "почти" и имел ввиду, что даже цветной терминал может оказаться не очень доступен, а вся ваша цветная/мигающая красота нарисованная в обычном терминале который этого не понимает выглядеть будет так себе sm.gif

Красивую веб-морду делать затратно, особенно под разные варианты и разрешения экранов. Сизифов труд.
Под терминал правильное решение. Я сам так делаю.
Не понял только проблему с Андроидом. Под него же туча есть эмуляторов терминалов с поддержкой VT100. У меня отлично работает через BT

И еще, в RAD студио есть компонент Bluetooth с одинаковым API под Win, Android, iOS.
Так что универсальное приложение можно сделать из одной кодовой базы за пару дней.

Автор: Сергей Борщ Sep 24 2018, 14:50

putty есть под андроид. Мой начальник так на наши устройства заходит. У меня "телефон здорового человека", мне это не актуально, я через minicom хожу из-под линуха или через тот же putty из-под винды.

Автор: Arlleex Sep 24 2018, 17:09

В догонку хочу поинтересоваться.
Обычно если мне нужна локальная сеть, я беру МК с Ethernet MAC и работаю с ним.
Но эта тема натолкнула на давно интересующий меня вопрос: можно ли как-то перенаправлять данные из COM-порта ПК в сетевые сообщения... Не знаю как правильно выразиться. Ну, допустим, хочу веб-морду из браузера для девайса, а Ethernet-а нет. UART только торчит. Нужно же как-то сказать ОС, что вот такой-то COM-порт это полноценная сетевая карточка. Пусть звучит наивно, конечно, но вопрос чисто спортивного интереса (из разряда "поиграться на выходных"). Вернее, я знаю, что это сделать можно. Но как? Windows 7, XP, браузер Chrome, Mozilla, Opera, да разные.

Автор: Сергей Борщ Sep 24 2018, 17:32

QUOTE (Arlleex @ Sep 24 2018, 20:09) *
Windows 7, XP,
Гуглите "поднять PPP на этих виндовсах", что-то должно быть. В линухе точно есть.

Автор: jcxz Sep 24 2018, 18:36

Цитата(AlexandrY @ Sep 24 2018, 17:40) *
Под терминал правильное решение. Я сам так делаю.
Не понял только проблему с Андроидом. Под него же туча есть эмуляторов терминалов с поддержкой VT100. У меня отлично работает через BT

Проблема именно в куче: трудно в ней найти что-то работающее. Уже поставил с десяток разных - ни один нормально не работает.
Тестирую на простой менюшке из 4 строк (серым на чёрном), одна строка подсвечена яркостью и синим фоном + заголовок + текущее время в правом верхнем углу.
Putty и TeraTerm (винда) нормально отображают, ни один из опробованных терминалов не смог: или пустой экран, или в углу что-то мелькает, или esc-последовательности не понимает. Даже без всяких UTF-8. Самый лучший понимает только esc-последовательности установки курсора. Может я плохо ищу, но как искать в этой куче? Если у всех в описании указано: VT100, а не воспринимаются даже esc-последовательности. Цветовые esc вообще ни один не отработал. sad.gif((
Вот такая менюшка оказалась не по зубам ни одному:


Цитата(AlexandrY @ Sep 24 2018, 17:40) *
И еще, в RAD студио есть компонент Bluetooth с одинаковым API под Win, Android, iOS.
Так что универсальное приложение можно сделать из одной кодовой базы за пару дней.

Пока есть сильное желание использовать готовое. Может даже заплатим.

Цитата(AlexandrY @ Sep 24 2018, 17:40) *
Красивую веб-морду делать затратно, особенно под разные варианты и разрешения экранов. Сизифов труд.

Не сизифов. Юзер сейчас привык к браузерам и веб-мордам. Я говорю про обычного, не программиста или ардуинщика.
И удобный и привычный интерфейс конфигурирования - это сильное конкурентное преимущество устройства.

Цитата(Arlleex @ Sep 24 2018, 20:09) *
Нужно же как-то сказать ОС, что вот такой-то COM-порт это полноценная сетевая карточка. Пусть звучит наивно, конечно, но вопрос чисто спортивного интереса (из разряда "поиграться на выходных"). Вернее, я знаю, что это сделать можно. Но как? Windows 7, XP, браузер Chrome, Mozilla, Opera, да разные.

Вы прочитайте сначала - я ещё в самом первом сообщении писал как. И многие сообщения в начале треда были посвящены этому.
Нужно просто создать удалённое подключение к сети. На целевом компе делаете такое подключение в режиме "сервер". Оно открывает COM-порт и ждёт входящих соединений. В начале темы люди выкладывали скриншоты даже.
Лет 20-30 назад многие так и выходили в инет. sm.gif

Цитата(Сергей Борщ @ Sep 24 2018, 17:50) *
putty есть под андроид. Мой начальник так на наши устройства заходит. У меня "телефон здорового человека", мне это не актуально, я через minicom хожу из-под линуха или через тот же putty из-под винды.

Ну есть. Bluetooth он не понимает, только TCP.

Автор: AlexandrY Sep 25 2018, 04:53

Цитата(Arlleex @ Sep 24 2018, 20:09) *
В догонку хочу поинтересоваться.
Обычно если мне нужна локальная сеть, я беру МК с Ethernet MAC и работаю с ним.
Но эта тема натолкнула на давно интересующий меня вопрос: можно ли как-то перенаправлять данные из COM-порта ПК в сетевые сообщения... Не знаю как правильно выразиться. Ну, допустим, хочу веб-морду из браузера для девайса, а Ethernet-а нет. UART только торчит. Нужно же как-то сказать ОС, что вот такой-то COM-порт это полноценная сетевая карточка. Пусть звучит наивно, конечно, но вопрос чисто спортивного интереса (из разряда "поиграться на выходных"). Вернее, я знаю, что это сделать можно. Но как? Windows 7, XP, браузер Chrome, Mozilla, Opera, да разные.

Раньше было можно.
На заданный COM порт устанавливался слушающий драйвер в Win XP и как только к порту подключали дивайс с PPP протоколом
драйвер сразу устанавливал через него TCP соединение, получали выход в сеть.
Т.е. просто втыкали дивайс и дальше оставалось только кликнуть на браузер. Никаких dialup-ов и проч возни не требовалось.
Но теперь все COM порты соединяются через USB, а USB имеет свои классы (CDC-RNDIS, CDC-ECM) для автоматической организации TCP соединения.
Поэтому рудимент COM порта стал ненужен.
Т.е. по сути кто до сих пор использует чисто COM для связи с PC немного как бы отстал от времени.

Автор: jcxz Sep 25 2018, 11:30

Цитата(AlexandrY @ Sep 25 2018, 07:53) *
Раньше было можно.
На заданный COM порт устанавливался слушающий драйвер в Win XP и как только к порту подключали дивайс с PPP протоколом
драйвер сразу устанавливал через него TCP соединение, получали выход в сеть.

Думаю что и сейчас можно, только нужно что-то дополнительно поставить. Какой-нить драйвер.

Автор: AlexandrY Sep 25 2018, 12:16

Цитата(jcxz @ Sep 25 2018, 14:30) *
Думаю что и сейчас можно, только нужно что-то дополнительно поставить. Какой-нить драйвер.

Я подозреваю это можно в enterprise версии, которая для предприятий.
Специально так сегментировали юзеров. И если это так, то они в home edition никак не дадут этому драйверу работать.

А сторонние платные драйвера конечно есть, на том же RAD studio написать не проблема.
Я юзаю VT100 без разукрашек и не знаю проблем.
Пошло нормально на первом же попавшемся эмуляторе под андроидом.
Просто сейчас не в этой теме и сказать конкретней ничего не могу.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)