Open source embedded window manager with overlapped windows. This project is actively maintained and free support is provided via the website. New features can be added on request. Consultancy can provided for commercial use.
MiniWin is a generic open source overlapped window manager for small embedded systems with a touch screen. It is written in compliant C99 and is easily portable. The hardware interface is separated out into a small hardware abstraction layer making the rest of the system re-targetable to a wide variety of processors. MiniWin will run easily on ARM Cortex M0 or above, PIC32 or Renesas RX processors. MiniWin has a simple easy to understand API giving access to fully overlapped windows. The standard look and feel is easy to customize to your needs. Included with MiniWin are two sets of standard controls in standard and large sizes and a growing library of standard dialogs windows. All code developed for MiniWin and MiniWin generated code is MISRA 2012 'required' compliant.
Of course, you don't have to use overlapped windows at all. If you want fixed dedicated areas of the display with each area being responsive to user input and having its own message and paint functions, that's possible too. Any window can be created with no border or title bar, and like this it's fixed on the screen.
MiniWin includes a collection of pre-defined standard dialogs. You don't have to do any window definition or coding to use these, just call the utility function to get it displayed. Each dialog can have its appearance controlled from the utility function parameters, for example the message to display in the message box dialogs and the text shown in the title bar.
See https://miniwinwm.wixsite.com/miniwinwm/quick-start-guide for a quick start guide using STM32CubeIDE.
See https://github.com/miniwinwm/miniwinwm/blob/master/MiniWin/docs/MiniWin.pdf for extensive documentation.
See https://miniwinwm.wixsite.com/miniwinwm/window-management-api for an overview of the window management API.
MiniWin comes with all source for the window manager, graphics library and user interface components. It also comes with 8 example projects - a simple getting started example, a non-overlapped fixed windows example, an example that integrates a USB pen drive or SD card to read and show text and image files, an example integrated with FreeRTOS, a TrueType font demonstration, an example showing root window capabilities, a project showing usage of all MiniWin's user interface components and a project that interfaces with a video camera showing a video stream in a MiniWin window. MiniWin comes with 14 HAL layer samples:
Atmel: This contains project files and application code specific to example applications that run on Microchip/Atmel processors and are built using the Microchip/Atmel Studio. Under this folder are sub-folders for each targeted processor (ATSAM3X8E). Under these folders are further sub-folder for each application example. In these folders are Microchip/Atmel Studio project files, the required BSP for that application and under the src folder source files that are both application and hardware variant specific.
Renesas: This contains project files and application code specific to example applications that run on Renesas processors (currently RX65N) and are built using the Renesas e2 Studio IDE and the Renesas RX-CC or GCC-RX compilers. Under this folder is a sub-folder for each targeted Renesas processor/compiler, RX65N or RX65N_GCC, and under each of these a further sub-folder for each application example. In these folders are e2 Studio project files and the start-up code for that application. Under the src folder are source files that are both application and hardware variant specific. In the root folder for each RX-CC compiler project is a .scfg file used to configure the hardware.
Espressif: This contains project files and application code specific to example applications that run on ESP32 processors and are built using the ESP supplied IDF build system. Under this folder is a sub-folder for each targeted ESP32 development board (DevKitC). Under this folder is a further sub-folder for each application example. In these folders are the main and the component CMake files, the SDK configuration file for that application and under the main folder source files that are both application and hardware variant specific.
NXP: This contains project files, BSP and application code specific to example applications that run on NXP processors and are built using the NXP MCUXpresso IDE. Under this folder is a sub-folder for each targeted NXP processor (LPC54628). Under this folder are further sub-folder for each application example. In these folders are MCUXpresso project files, the required BSP for that application and under the src folder source files that are both application and hardware variant specific.
ST: This contains project files, BSP and application code specific to example applications that run on ST processors and are built using the STM32CubeIDE. Under this folder are 2 sub-folders for each targeted processor (STM32F407 ands STM32F429). Under these folders are further sub-folder for each application example. In these folders are STM32CubeIDE project files, the required BSP for that application and under the src folder source files that are both application and hardware variant specific.
Microchip: This contains project files and application code specific to example applications that run on Microchip processors and are built using the MPLAB X. Under this folder are 2 sub-folders for each targeted processor (PIC32MX470F512H and PIC32MZ2048EFM100). Under these folders are further sub-folder for each application example. In these folders are MPLAB X project files, the required BSP for that application and under the src folder source files that are both application and hardware variant specific.
RaspberryPi: This contains project files and application code specific to example applications that run on Raspberry Pi boards and are built using make and GCC natively on the Raspberry Pi. Under this folder are sub-folders for each targeted board (Zero W and Pico). Under this folder is a further sub-folder for each application example. This contains project files that are built using make and GCC. In Raspberry Pi OS GCC will always be available.
Simulation: This contains project files for example applications that are built to run on a computer as a simulation rather than on embedded hardware. Under this folder are sub-folders for each targeted simulation platform (Windows and Linux). Under these folders are further sub-folder for each application example. These sub-folders each contain a makefile/nmakefile to build the example application using GCC/Visual Studio CL.
MiniWin: This contains the MiniWin embedded window manager source code which is common to all example applications for all platforms and processors. It contains the following sub-folders:
bitmaps: Bitmaps and their C99 file encodings used by MiniWin
dialogs: Standard dialogs provided by MiniWin
docs: All documentation
gl: The graphics library incorporated in MiniWin including fonts
templates: Templates of required application files
ui: Standard user interface controls. User code can add to this for further controls if required
hal: Source files common to all hal implementations and then further source files in sub-folder for different currently supported platforms and processors. Each set of drivers for a particular target builds only for that target. Other different target files compile to nothing through the use of #defines.
In addition the following source files are in the MiniWin folder:
calibrate.h/c: Third party touch screen calibration routines
miniwin_debug.h/c: Implementation of assert functionality, debug build only
miniwin_message_queue.h/c: Simple message queue code for MiniWin messages
miniwin_settings.h/c: Simple non-volatile storage routines for settings
miniwin_touch.h/c: Interface between touch driver code under hal and the touch client code in MiniWin
miniwin_tree_container.h/c: Tree container storage utility
miniwin_utilities.h/c: Generic utility routines
miniwin.h/c: The main window manager code
MiniWinTest_Common: This contains application source files for the comprehensive MiniWinTest example that are common to all platform/processor variants.
MiniWinSimple_Common: This contains the application example source files described later in this document.
MiniWinFixedWindows_Common: As above but for the fixed windows example project.
MiniWinRoot_Common: As above but for the root window example project.
MiniWinFile_Common: As above but for the file example project.
MiniWinTTFonts_Common: As above but for the TrueType font rendering example project.
MiniWinFreeRTOS: As above but for the FreeRTOS integration example project.
MiniWinCamera: As above but for the video camera integration example project.
Tools: This contains the utility applications that are part of MiniWin that are built for Linux or Windows using GCC. This folder contains the following sub-folders:
BMPConv24Colour: This is a command line utility for converting a Windows 24 bit per pixel .bmp file to a 3 bytes per per pixel C99 source file. It uses EasyBMP.
BMPConvMono: This is a command line utility for converting a Windows 2 bit per pixel .bmp file to an 8 pixels per byte C99 source file. It uses EasyBMP.
CodeGen: This contains the MiniWin code generator utility. It is described later in this document.
FontEncoder: This is a command line utility for converting a TrueType font file to a run-length encoded C99 source file. It comes as part of the mcufonts library.
EasyBMP: This is source code for a third party Windows .bmp file handling library. It is used by the utility applications, not MiniWin.