Implement drivers for microwindows#3624
Conversation
…to NuttX The Microwidows/Nano-X (https://microwindows.org/) is project developed and maintained by Gregory Haerr. It is heavily extended from predecessor NanoGUI and supports multiple APIs. The initial integration build only core parts engine, drivers and basic/included precompiled bitmap fonts. The source files are derived from list provided by Objects.rules files in appropriate Microwindows directories. The build requires fix includes in src/engine/devfont.c where #include <strings.h> is missing for strcasecmp(). Only dummy keyboard and mouse drivers are compiled. Screen driver has to be implemented/ported for NuttX FrameBuffer device API. Signed-off-by: Pavel Pisa <ppisa@pikron.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
|
Thanks to @Acfboy for the work and this draft request for discussion and @ghaerr for consultations and support on Microwidows side. I am leaving for four days now, but there are some my thoughts, the NuttX Microwidows screen, mouse and keyboard drivers should be submitted with appropriate build enable options to the mainline Microwindows https://github.com/ghaerr/microwindows before the final nuttx-apps pull request. |
| @@ -1,5 +1,5 @@ | |||
| ############################################################################ | |||
| # apps/examples/rng90/Make.defs | |||
| # apps/examples/hello/Make.defs | |||
|
@Acfboy please fix the issues on mwdemo: |
|
Hi @Acfboy , could you also add support for building with CMake? |
Thank you for the reminder. I will add CMake support later. |
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
… in mou_nuttx.c Signed-off-by: Acfboy <AcfboyU@outlook.com>
|
@Acfboy could you spend some time fixing and improving this PR? It still as Draft. It is important to get it merged and let more people to test and review it. Also please remember to include a proper nuttx/Documentation about nanox/microwindows support on NuttX |
|
Hi @acassis , thank for the reminder. I agree I should submit the previous work as a proper PR for the community to review. However, for it to be a proper PR, I think I need to merge the existing NuttX drivers into the Microwindows mainline first. I apologize for postponing this part of the work earlier. I will submit a PR for upstream MW review soon. |
|
Yes, this what I have proposed and expect as well. You should set something like Same for the As for the keyboard, there can be space to think how to map it the best way. The NnuttX provides its You provide translation in You should try even if Nano-X server and clients can be run on NuttX. I do not see X11 graphics option as the main priority, but it would prove that even complex setup can be build and check if it is stable on NuttX. |
Hi, @ppisa . I have a question about this statement. It seems to me that the ranges of the
Two drivers makes the code cleaner. But specify the device path/name via Kconfig risks inconsistency with the real device. Alternatively, if Microwindows auto-selects the device based on NuttX config, then we have to keep both sides in sync — which adds maintenance overhead.
Okay, I'll try server and client of NanoX. |
Yes, you are right, I expected that for where So this seems to be call for priority issue. @acassis @gregory-nutt Please, do you have some some insight what is right? The simple fix is to push
Yes but NuttX is based on configuration and it is better to fail then to do lot of testing of different device names and even deciding if it is raw driver or event based. But in general it seems that there is pace for some discussion and making KBD simple on the NuttX side.
Thanks. |

Hello the community! Here is the work I have done in the early stage of GSoC.
Work Completed So Far
The GDI‑level Microwindows core, drivers, and
mwdemoare functional on QEMU x86‑64 and the simulator.Build System Integration
ERRORmacro inwingdi.hclashes with NuttX’senum { ERROR = -1 }. The fix was to compile with-DNOGDI, a solution accepted by ghaerr and implemented upstream.mwdemo.care compiled into binary using theconvbmptool during the build.NuttX Hardware Drivers
Framebuffer driver (
scr_nuttx.c), Keyboard driver(kbd_nuttx.c), Mouse driver (mou_nuttx.c), have been implemented to connect Microwindows to NuttX’s input/output subsystems.Demo Application
Ported
mwdemo.c(a complex Windows‑like demo) into a standalone NuttX example application. The demo runs successfully on bothqemu‑intel64:mwand the NuttX simulator (sim:mw).I have also tested the demo with #define CONTROL 1 enabled in mwdemo.c, which represents a more complex use case.
Upstream Bug Fixes
Several issues were discovered, analysed, and fixed – most of them already merged upstream:
MwSelect()blocked forever when a timer had already expired, because the code assumed no timer existed whenGdGetNextTimeoutreturned false.timeout == 0and return immediately.#if defined(ELKS)inmwtypes.hforcedMWPIXELVALHWtounsigned chareven whenELKS=0(intended to disable it). This truncated 32‑bit pixel values read from the framebuffer.#if ELKSin ghaerr/microwindows@7a2ff57.MwSelectswitches to polling (select(…, timeout=0)). The USB input thread had a lower priority (50) than the application (100), so it never got CPU time to generate events.NUTTX-specific patch will be prepared.Remaining Issues
However, despite resolving several issues, two discovered problems are still under investigation. Due to a brief interruption while preparing for final exams, I have not yet fully diagnosed them. I will resume work soon and address the following:
#define CONTROL 1is enabled inmwdemoand input is tested in an edit box, backspace handling does not work correctly under QEMU.sim), after dragging a window, the mouse cursor jumps outside the screen and drags the window off-screen as well.Both issues appear to be related to the input drivers of the respective platforms. For instance, adding
sample.point[0].x = x; sample.point[0].y = y;before the code at sim_touchscreen.c#L198-L220 resolves the mouse drift problem. It seems thatsample.point[0]was previously uninitialized; however, the code branch in question never setsTOUCH_POS_VALID, so that value should not have been read in the first place. The root cause may lie elsewhere.How to Reproduce (QEMU / Simulator)
qemu-intel64:mw
defconfigsim:mw
defconfigNotice
You can set
#define CONTROL 1manually inmwdemo.cto test more complex case.Plan for the Second Half of GSoC