TcMenu organisation documentation for our libraries

There are several core libraries that we keep in lock step in terms of compatibility and board support. These libraries are:

The above libraries support a wide range of hardware, including nearly every official Arduino board, most ESP boards, along with many mbed version 5 and 6 boards with or without an RTOS. We test with everything from Uno to ESP32 and large STM32F4 boards.

What boards do our libraries support?

ProcessorPlatformLibrariesLockingDACDeveloper boards we test with
AVRArduinoFully testedAtomicNoUno - some features limited
AVRArduinoFully testedAtomicNoMEGA 2560, WifiR2
SAMDArduinoFully testedAtomicYesMKR1300
SAMDSeeed ArduinoFully testedAtomicYesMG126 board
nrf52840Arduino(mbed)Fully testedCASYesNano 33 BLE devices
RPI PicoArduino(mbed)Fully testedCASNoRaspberry PI pico, TFT, encoder
RPI PicoArduino(EarlePH)Fully testedCASNoRaspberry PI pico, TFT, encoder
ESP8266ArduinoFully testedAtomicNoNode MCU, Heltek Wifi 8
ESP32ArduinoFully testedCASYesWifi32, AZ Dev Kit
ESP32S2ArduinoFully testedCASYesESP32S2 Saloma
ESP32S3ArduinoFully testedCASNoESP32S3 Tiny
STM32F4Stm32DuinoFully testedHybridYesNucleo STM32F4x9ZI OLED
ParticlePhotonUser testedAtomicNoUnknown, user tested
SAMArduinoCompilationAtomicYesArduino Due compile test only
STM32F4mbed RTOSFully testedCASYesNucleo/Disc1 STM32F4x9ZI LTDC/OLED
RP2040Pico-SDK/CMakeFully testedCASNoTested fully within TcLibSDK

Although we only test on some Arduino mbed boards, it should work on nearly all that we know of, you can take a look at the list of mbed boards we check for here, if another springs to light that we haven’t added please try adding it to that define statement, and if it works let us know.

Defining Build Flags and Platform settings

Most of our libraries support adding a file locally in the root of your source called zio_local_definitions.h, once added this will be included by the platform determination before doing anything else. This allows two ways of setting build level flags, firstly by providing them in the build options, secondly within this file. This means that you can easily define build options when using Arduino 1.x IDE.

In TaskManagerIO

Whenever you include TaskManagerIO.h this pulls in TaskPlatformDeps.h to work out what platform you’re building for, and to create suitable thread safety and CAS or Atomic based locking constructs for that platform. Again the thread safety is so that you can put events into task manager from any thread, or trigger events from interrupts. You should only ever call runLoop from a single thread, usually for the default taskManager instance that would be the loop() method on Arduino, or main() on mbed.

The follow build flags can be set either in your build tool or in zio_local_definitions.h:

In IoAbstraction

Whenever you include IoAbstraction.h or include PlatformDetermination.h directly, then IoAbstraction need to work out how to provide all input output features that it supports. This allows the rest of IoAbstraction not to concern itself with platform differences. This goes right down to GPIO, the way I2C works, and even analog IO support. For ESP32 we provide analog input and output using IDF functions, allowing the analog support on ESP32 to support the inbuilt DAC, ADC and PWM (using LEDC).

Platform related settings:

Logging compile time settings:

Switches and encoder settings:

Touch specific settings:

In TcUnicode library

Whenever you use TcMenu, TcUnicode is always included as well. It provides UTF-8 unicode support to many display libraries. Here are the configurable options:

In TcMenu library

Whenever you include tcMenu.h you include IoAbstraction, SimpleCollections and TaskManagerIO by default. There are a few compile time settings for tcMenu itself, but you can also adjust all the settings for the dependant libraries too.

Menu item and iteration settings:

Remote connectivity settings:

Should you need serial number management, (IE you have more than one board):

Drawing specific:

In SimpleCollections

Simple collections circular buffer is thread and interrupt safe, this is achieved by checking the board type we have compiled to providing a suitable atomic compare and update facility for that platform. On mbed it uses mbed atomic, on STM32Duino F4 it uses LDREX, on ESP32 it uses the RTOS constructs. On other boards it uses standard Arduino atomic functions. It should be safe on all the boards listed in the supported section, and probably more besides.

Java UIs and frameworks

In addition to this the Java UI framework which is heavily based on JavaFX is used for the designer, embedCONTROL UI and embedded java apps is tested on a wide range of hardware, we suggest using the excellent Liberica JDK as it has JavaFX built in, and a 32bit build for Raspberry PI available.

PlatformDesignerembedCONTROLJava EmbeddedJDK Used
Windows 10/11Fully testedFully testedFully testedLiberica
MacOSFully testedFully testedFully testedLiberica
Ubuntu desktopFully testedFully testedFully testedLiberica
Raspberry PIFully testedFully testedFully testedLiberica

JavaScript embedCONTROL.JS

The webserver version of embedCONTROL is built in TypeScript, we target most modern browsers and test with desktop and mobile version of both Chrome and Safari. The generated website is highly standards compliant, based on React.JS, and therefore should work with a very wide range of browsers.

Are there differences between platforms

We have tried as hard as we can to avoid any user-level differences in core features between platforms. It should work close to identically on all platforms that we support. There are obviously a few extra features on some platforms that are available to use, but when using these it should be pretty clear they platform specific.

This site uses cookies to analyse traffic, and to record consent. We also embed Twitter and Youtube content on some pages, these companies have their own privacy policies.

Our privacy policy applies to all pages on our site

Should you need further guidance on how to proceed: External link for information about cookie management.