From b2dc8c816953c6a2d0481e621c0a93d12d4853df Mon Sep 17 00:00:00 2001 From: wangjianyu3 Date: Sun, 26 Apr 2026 02:11:24 +0800 Subject: [PATCH] boards/lckfb-szpi-esp32s3: add vncviewer defconfig and documentation Add vncviewer board configuration and documentation: - boards: add lckfb-szpi-esp32s3:vncviewer defconfig - Documentation: add system/vncviewer application doc with host VNC server setup examples (Xvfb, clip, scale modes) and images Assisted-by: GitHubCopilot:claude-4.6-opus Signed-off-by: wangjianyu3 --- .../applications/system/vncviewer/index.rst | 128 ++++++++++++++++++ .../system/vncviewer/vncviewer_xvfb.png | Bin 0 -> 16873 bytes .../system/vncviewer/vncviewer_xvfb_lcd.jpg | Bin 0 -> 10770 bytes .../configs/vncviewer/defconfig | 111 +++++++++++++++ 4 files changed, 239 insertions(+) create mode 100644 Documentation/applications/system/vncviewer/index.rst create mode 100644 Documentation/applications/system/vncviewer/vncviewer_xvfb.png create mode 100644 Documentation/applications/system/vncviewer/vncviewer_xvfb_lcd.jpg create mode 100644 boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig diff --git a/Documentation/applications/system/vncviewer/index.rst b/Documentation/applications/system/vncviewer/index.rst new file mode 100644 index 0000000000000..fb8836d8a7684 --- /dev/null +++ b/Documentation/applications/system/vncviewer/index.rst @@ -0,0 +1,128 @@ +=========================== +``vncviewer`` VNC Viewer +=========================== + +A lightweight VNC viewer that renders a remote desktop on an LCD display via +the NuttX LCD character device interface (``/dev/lcd0``). + +Features: + +- RFB 3.8 protocol with VNC Authentication (pure software DES, no external library) +- Auto-detect pixel format from LCD driver +- Raw encoding with row-by-row rendering — minimal RAM usage +- Automatic reconnection on disconnect + +Prepare +========================== + +- Enable the VNC Viewer application (Device): + + .. code-block:: bash + + CONFIG_NET_TCP=y + CONFIG_LCD=y + CONFIG_SYSTEM_VNCVIEWER=y + +- Ensure the device has a working LCD driver (``/dev/lcd0``) and TCP/IP network connectivity. + +- Install a VNC server on the host. For example, on Ubuntu: + + .. code-block:: bash + + sudo apt install x11vnc xvfb openbox xterm + +Usage +========================== + +.. code-block:: bash + + vncviewer [options] [port] + +Options: + +- ``-p `` — VNC password +- ``-d `` — LCD device number (default: 0) +- ``-h`` — Show help + +Default port: 5900 + +Host VNC Server Configuration +============================== + +Three server modes are supported: + +1. Xvfb Virtual Desktop (Pixel-Perfect 1:1) +--------------------------------------------- + +Create a virtual framebuffer matching the LCD resolution (e.g., 320×240): + +.. code-block:: bash + + # Start virtual display + Xvfb :1 -screen 0 320x240x16 & + DISPLAY=:1 openbox & + DISPLAY=:1 xterm -geometry 38x11+0+0 -fa Monospace -fs 10 & + + # Start VNC server + x11vnc -display :1 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg + +On the device: + +.. code-block:: bash + + vncviewer -p mypasswd 5901 + +.. figure:: vncviewer_xvfb.png + :align: center + + Xvfb virtual desktop — host side (320×240 xterm in VNC viewer) + +.. figure:: vncviewer_xvfb_lcd.jpg + :align: center + + Xvfb virtual desktop — device side (rendered on ST7789 LCD) + +2. Physical Desktop Clip (Top-Left Region) +------------------------------------------- + +Clip a region of the physical desktop matching the LCD resolution: + +.. code-block:: bash + + x11vnc -display :0 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg -clip 320x240+0+0 + +On the device: + +.. code-block:: bash + + vncviewer -p mypasswd 5901 + +3. Physical Desktop Scaled +------------------------------------------- + +Scale the full desktop down to the LCD resolution: + +.. code-block:: bash + + x11vnc -display :0 -rfbport 5901 -passwd mypasswd -shared -forever -xkb -add_keysyms -bg -scale 320x240 + +On the device: + +.. code-block:: bash + + vncviewer -p mypasswd 5901 + +Examples +========================== + +Connect to a VNC server with password: + +.. code-block:: bash + + vncviewer -p mypasswd 192.168.1.100 5901 + +Connect using a different LCD device: + +.. code-block:: bash + + vncviewer -d 1 -p mypasswd 192.168.1.100 5900 diff --git a/Documentation/applications/system/vncviewer/vncviewer_xvfb.png b/Documentation/applications/system/vncviewer/vncviewer_xvfb.png new file mode 100644 index 0000000000000000000000000000000000000000..792a45cca77941bb45d7fd0a54e499cfb989545b GIT binary patch literal 16873 zcmeIaWmFwew=H;ZmjnnBG`PFF6WrYi?(Pl;LeK=4;2JczJ0!TfySv-z%KgTD?{$yv z(cM4#Uo#GaqN+~G-fPV{*WA16tFodr8ZrSg2n0g=EF+-`0zs(*zto8Ez?wUX)+OK% ztgF~(bwuFD5AjPR@IStrq_&%yqlKHNiHkYN(!tT*oYB?H#oXM%)ymQB9HvtU*opDq zPU0@+CT`Y_4y5YV_U0gUD|b>hc2ZF%7g9DBHZD?D7CtsEK46Wq0;#x~IswaA1PDY5 z`Ya);?v;7E8t8}R{!{p3o`P0BM}$r?T{rQfmr_GttzxQrwveHv0Hrak_k6MPOe|Qi zp`=*SQA=6LZdI^hqw2$X;ue#xTYqx9IW0Ydq>3)AJx;Zx$w%yD^->BkYxwk?>sPaM zj!w((ilQ5@egap2;{J~KS$yw!O8YzF%LAgj*)m-jeCC<*KiHNTM2RC=GE>WIydS4kMFPt)zSysK311bl&hkFcU-k zD&6)hXBJM4d&P&zumAe2C+=IKDoSuDq*_fyP!>#Mj6^mmbE~`yE=BI{K0=x9QkG1- zj~HE^7mxW+Gzrad^GFJ!1%aXPK*ppX&QAz*Vumm@0!U>3xJz;|x8jKiT{@tBkRM7H zR1Qk}A~s%S?(_wmt#*kN%8V5m0YQ;CC_0_P`upQo>Yu5u#}$pSlQ#7*GdA^6+ce}z zWa|pitX=}dRl~b{jlTD14ZFiBjtlL+o-jeoP;PmRDMzi3J?t#uUMmOiJ^U!v8`rb&_hWnegTG@hx=;bt4V3&GtQOme#5=G$@#~f_Ha!f9y>R zNyKzvHID8+zU?{n*gjdT#S`#i>2%ucp#^@l>{nZEF@w}1{gngp&_Qtr!DZ;)9LZVC=l{Ech`^`m>^(Pk_pHuBim>?Wg4WiLW`nWqE`5>jtQ|XF?}Q?Sb^ku8M8f2R zyQP*vq5d5k`}sP?e=hLZL>94m291CN(W3UTMoH-L3wh8q;#sNGO6QQMzz(fyDj5DK ztf8Sn7@dgkMs{h0I!ynFCpL8Y@Wp1O$yr$Xp(yac0mKY)Ea)u~!?!g(Hl`tf=r-;qnL zxePP%`re)JB5$Dj#F^dh=AW}71YN({kl3@Ydt!GbjSD@Wh~wkqljG>vh{6I7ERdu+hXkaipk&jM)b^ga1eUX;%s-WSeJRDpSqY`zulYl>~v-N7|GOk z&ksI3I}7tM&GmbJS4!kuPtF39uQ7dnuN-_JdZe^fEnc`1p?tq3=T&ckAmsY9xbwTr zwOe2m_i(^BOQSMLHED?djL8#U3yi}4xksje#trWi_qhJ?pRYvaTK&32s78=mRtCf6kerxzqqnJ@ zPoK3_gU5RHE|-1<_MeS+hR6w`Y8i0j&-tDWV6eeQou4-3o4o429Ih%&o)JVQ4Cs%f zX+`Rb*lRwPX3<&rC>H0U44extUS!+ar$G@sFxa zp4D*I2@!q@oI|s!!2Z= z3?oK;;fe$`ze;kWM+;T(G_N{%2@Kim008DC@Utn$R?udxezPt`G>M>9@@#y4AXyU% zFEcdF(=bND1N^Hp9sG!*Z{-v{5a;qKoc7x!6MAR|1Z%})A^6t5^>W^`bD%;PKW!l; z3hChCO0JGyaDxX&oeo2PeaZQOoFAQ=bE~TdGVq)KcIY0|MD}NBRO|}jeEX(G>g3H7 z9o5XwcIsPxOzUMKg0cZGQlmk!ek%0AbdfX1{#aHhkc)Lh31V20L=CbH;)SZ4b9#>b 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 ZE@}h0_vqSW4m~lKo31efNjXnT{|`!)d9wfj literal 0 HcmV?d00001 diff --git a/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig b/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig new file mode 100644 index 0000000000000..3371ee8920bc1 --- /dev/null +++ b/boards/xtensa/esp32s3/lckfb-szpi-esp32s3/configs/vncviewer/defconfig @@ -0,0 +1,111 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_ARCH_LEDS is not set +# CONFIG_NSH_ARGCAT is not set +# CONFIG_NSH_CMDOPT_HEXDUMP is not set +CONFIG_ALLOW_BSD_COMPONENTS=y +CONFIG_ARCH="xtensa" +CONFIG_ARCH_BOARD="lckfb-szpi-esp32s3" +CONFIG_ARCH_BOARD_COMMON=y +CONFIG_ARCH_BOARD_ESP32S3_LCKFB_SZPI=y +CONFIG_ARCH_CHIP="esp32s3" +CONFIG_ARCH_CHIP_ESP32S3=y +CONFIG_ARCH_CHIP_ESP32S3WROOM1N16R8=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_IRQ_TO_NDX=y +CONFIG_ARCH_MINIMAL_VECTORTABLE_DYNAMIC=y +CONFIG_ARCH_NUSER_INTERRUPTS=2 +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARCH_XTENSA=y +CONFIG_BOARD_LOOPSPERMSEC=16717 +CONFIG_BUILTIN=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEV_GPIO=y +CONFIG_DRIVERS_IEEE80211=y +CONFIG_DRIVERS_VIDEO=y +CONFIG_DRIVERS_WIRELESS=y +CONFIG_ESP32S3_GPIO_IRQ=y +CONFIG_ESP32S3_I2C0=y +CONFIG_ESP32S3_SPI2=y +CONFIG_ESP32S3_SPI2_CLKPIN=41 +CONFIG_ESP32S3_SPI2_CSPIN=-1 +CONFIG_ESP32S3_SPI2_MISOPIN=-1 +CONFIG_ESP32S3_SPI2_MOSIPIN=40 +CONFIG_ESP32S3_SPIFLASH=y +CONFIG_ESP32S3_SPIFLASH_SPIFFS=y +CONFIG_ESP32S3_SPI_SWCS=y +CONFIG_ESP32S3_SPI_UDCS=y +CONFIG_ESP32S3_UART0=y +CONFIG_ESPRESSIF_LEDC=y +CONFIG_ESPRESSIF_LEDC_CHANNEL0_PIN=42 +CONFIG_ESPRESSIF_LEDC_TIMER0=y +CONFIG_ESPRESSIF_WIFI=y +CONFIG_FS_PROCFS=y +CONFIG_GPIO_LOWER_HALF=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_IDLETHREAD_STACKSIZE=3072 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=3072 +CONFIG_INTELHEX_BINARY=y +CONFIG_IOB_BUFSIZE=400 +CONFIG_IOB_NBUFFERS=100 +CONFIG_IOB_NCHAINS=32 +CONFIG_IOB_THROTTLE=40 +CONFIG_IOEXPANDER=y +CONFIG_IOEXPANDER_NPINS=8 +CONFIG_IOEXPANDER_PCA9557=y +CONFIG_LCD=y +CONFIG_LCD_DEV=y +CONFIG_LCD_FRAMEBUFFER=y +CONFIG_LCD_ST7789=y +CONFIG_LCD_ST7789_DATA_ENDIAN_LITTLE=y +CONFIG_LCD_ST7789_FREQUENCY=40000000 +CONFIG_LINE_MAX=64 +CONFIG_NETDB_DNSCLIENT=y +CONFIG_NETDEV_LATEINIT=y +CONFIG_NETDEV_PHY_IOCTL=y +CONFIG_NETDEV_WIRELESS_IOCTL=y +CONFIG_NET_ETH_PKTSIZE=1514 +CONFIG_NET_ICMP_SOCKET=y +CONFIG_NET_TCP=y +CONFIG_NET_TCP_DELAYED_ACK=y +CONFIG_NET_TCP_WRITE_BUFFERS=y +CONFIG_NET_UDP=y +CONFIG_NET_UDP_WRITE_BUFFERS=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_READLINE=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_PTHREAD_MUTEX_TYPES=y +CONFIG_RAM_SIZE=114688 +CONFIG_RAM_START=0x20000000 +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_SPI_CMDDATA=y +CONFIG_START_DAY=6 +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2011 +CONFIG_SYSLOG_BUFFER=y +CONFIG_SYSTEM_DHCPC_RENEW=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_PING=y +CONFIG_SYSTEM_VNCVIEWER=y +CONFIG_TIMER=y +CONFIG_TLS_TASK_NELEM=4 +CONFIG_UART0_SERIAL_CONSOLE=y +CONFIG_VIDEO=y +CONFIG_VIDEO_FB=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_WAPI=y +CONFIG_WIRELESS_WAPI_CMDTOOL=y +CONFIG_WIRELESS_WAPI_STACKSIZE=4096