A user interface through the serial channel (menus, sub-menus, input requests and command execution) and a GUI back-end, with support for navigation through the menu hierarchy and online help. With SerialUI, you can create a hierarchy of menus and submenus of arbitrary depth (limited only by ROM/RAM space). Each menu contains a list of menu items, which are either sub-menus (lead you to another level of menu items), requests for user input or commands (that actually perform some type of action). Exactly what happens when a user issues a command is determined by your callbacks. You can control the device through the terminal, or through a GUI using the Device Druid interface.