ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
23 декабря
1005899
Evgeny_CDАрхитектор (20.05.2020 03:01, просмотров: 31541)
[VNC или RDP клиент на MCU] - делал ли кто? Интересная штука привиделась мне. 

Задача

-- Linux платочка

-- хотим дисплей для юзеровского интерфейса. 2D, нет видео, 3D и прочего. Просто качественный не сверхбыстрый 2D

-- недорогие дисплеи 7" http://caxapa.ru/1005817/

-- питание + данные по одной витой паре http://caxapa.ru/1005772/

-- в качестве "контроллера дисплея" хотим использовать N9H30F61IEC или N9H30F71IEC http://caxapa.ru/976837


VNC

https://ru.wikipedia.org/wiki/Virtual_Network_Computing

имеет в основе простой протокол RFB

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_RFB

https://tools.ietf.org/html/rfc6143

Примеры использования

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-18-04-ru

https://www.tightvnc.com/

RDP

https://ru.wikipedia.org/wiki/Remote_Desktop_Protocol

M$ намешала в нем кучу некрофилических протоколов, однако описание доступно

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c


Хороший обзор

https://www.goodfirms.co/blog/best-free-open-source-Remote-Desktop-Software


FreeRDP - клиент и сервер, все на plain C

https://github.com/FreeRDP/FreeRDP

https://www.freerdp.com/


Сборка тонкого клиента RDP на базе Raspberry Pi

https://habr.com/ru/post/479504/


Нечто похожее народ делал, причем довольно давно. На VNC, ибо он сильно проще

MicroVNC

http://www.embedded-creations.com/projects/microvnc-revisited


Segger имеет аж emWin VNC Server, правда стоит там все нездоровых денег.

https://www.segger.com/products/user-interface/emwin/add-ons/vnc-server/

имеет вполне терпимое быстродействие

STM32F4, 168MHz, internal RAM, WQVGA, 16bpp, HexTile - 32 ms

И скромные аппетиты

36.4 RAM and ROM requirements

ROM - About 4.9 KB on ARM7 with hextile encoding, about 3.5 KB without hextile encoding.

RAM - The VNC support does not use static data. For each instance one GUI_VNC_CONTEXT structure (approx. 60 bytes) is used.

Others - Each instance needs one TCP/IP socket and one thread.


Решение.

Реализации VNC и RDP доступны в исходниках, и в принципе, если у MCU достаточно ОЗУ и есть хотя бы простая OS, то это оборимо на bare metal. Особенно VNC, который суть просто пиксельный, там пересылаются кусочки экрана .


На Linux доступно море всяких красивых графических фреймворков, и ОЗУ там поболее, так что можно соорудить красивый GUI с умеренными затратами (теоретически).


Вынесенный по одной витой паре дисплей имеет существенные потребительские преимущества (в своем классе)


Решение получается предельно простым, нет промежуточных IP стеков, Ethernet коммутаторов и прочего. Протокол по "одной паре" можно сделать очень очень дубовым.


Если добиться Host -> slave в однопарном решении 10Мбит (а в эту сторону это реально, наоборот несколько хуже картина), то 800*480*3 = 1 152 000 байт, полный экран передастся за 1 сек. Но такое будет случаться нечасто, а обновление части экрана за 30-50 мс (если делать по уму, отрисовывать во втором фрейм-буфере, и потом переключать кадр) будет незаметно.


По опыту могу сказать, что в варианте RDP при мегабитном подключении работа на удаленной венде в режиме при 16 битном цвете обычного 2D меню комфортна и не напрягает вообще. Но RDP он сложнее, хотя там примитивы более качественные.


Есть ли у кого соображения и опыт?