Software Architecture



The eWatch system was designed as a platform for developing context aware applications. The main goals that influenced the design decisions were ease of use and flexibility. eWatch provides the developer with an API that enables rapid prototyping. The eWatch software system consists of three layers: Application, System Functionality, and Hardware Abstraction.

Applications access functionality of lower layers to render screen images, interact with the user and retrieve information from the storage, sensors or wireless network. The System Functionality Layer provides an API for shell, task and power management. The Hardware Abstraction Layer contains the drivers for all the hardware components providing access to all eWatch functionality.

The layered architecture helps to achieve our goal of flexibity by reducing the effort necessary to port to another hardware or software environment. For example, we developed a Linux port of the software system that replaces the hardware abstraction layer with simulated hardware. This enables rapid development cycles since the code can be tested on the developers machine without actually updating the eWatch firmware.


eWatch offers two interfaces for a user or developer to control its functionality: the eWatch shell and the Graphical User Interface (GUI) on the built-in display.

The eWatch shell allows users to execute functions and configure variables via Bluetooth. A text-based protocol is used to transmit commands similar to a Unix shell. The applications on eWatch can register functions and variables, making them accessible through the shell. The commands can be typed by a user or developer through a keyboard or sent from a program running on the PC. This enables automated scripting of the system and allows remote applications to access eWatch functionality.

The primary GUI of eWatch is the menu system. As shown above, the menus allow the user to scroll through lists of items and select entries to activate them. The menu structure is organized hierarchically - entries can be modified, added, or removed during runtime. Each menu entry is linked to a shell command that is executed when the entry is selected. The eWatch GUI library supports TrueType fonts, drawing of geometric shapes, and displaying bitmaps.


The current eWatch applications are

  • sensor visualization to give a graphical view of the current sensor values
  • sensor data can be received wirelessly in realtime over bluetooth or it can be recorded to the flash memory and read later
  • eWatch shell to execute commands and to control environment variables
  • calendar gives an overview about todays activities and will notify with approriate notification mechanisms
  • email client receives emails and notify the user
  • vnc server allows a remote vnc viewer to show the content of the lcd screen
  • games: pong 3d demonstrates how the accelerometers can be used as input device


Libraries provide additional functionality for the applications, like a graphic library for the user interface and a library for the common libc functions.

  • graphic library
    • support for multiple fonts, variable font width, tool to export from free type fonts
    • offscreen rendering
    • lines, boxes, rectangles
    • vertical/horizontal dotted lines
    • scrollbars, progress bars
  • simple libc library
    • output functions
    • string functions
    • math functions


The eWatch driver layer provides a clean API to access all functionality that is provided by the hardware, mainly the ARM7 processor (including the realtime clock and the UART communication), the ADC with the sensors, the LCD controller, the FLASH memory, and the accelerometer.

2004 Carnegie Mellon University