Software
RTOS options
Below is a list of RTOSes supporting the EFM32 microcontroller.
FreeRTOS has been selected as the RTOS for the Freewatch.*
Name | Footprint | Licence | Remarks |
---|---|---|---|
FreeRTOS | to be tested | Modified GPL | Tickless mode example project available |
No integrated USB stack, need to port CMSIS stack example | |||
FAT FS example exists (not for EFM32) | |||
Power management for EFM32 | |||
uCOS-II/III | to be determined | restrictive in commercial cases | Examples exist (but not for GCC) |
USB stack available (not free, not with EFM32-targeted example) | |||
FAT FS library available (not free, not with EFM32-targeted example) | |||
RTX | < 4.0 KB | BSD | Tickless mode example projects exist |
*Compliant with CMSIS-RTOS standard | |||
No integrated USB stack, need to port CMSIS stack | |||
No integrated FAT FS | |||
TNKernel | to be tested | BSD | No apparent direct support for EFM32 (but supports Cortex-M3) |
MSc thesis using TNKernel on EFM32 | |||
USB stack available (unkown quality) | |||
file system available (unkown quality) |
Device drivers
All devices need implementation of initalization and power control routines. Below is a list of required features for particular devices that are expected to be used in higher layers of software:
LCD (Sharp LS013B7DH03)
- sending pixel data
GPS (ANTENOVA M10478-A1)
- fetching NMEA frames over serial port
- handling private protocol (system messages, commands, settings, etc.)
Accelerometer & compass (ST LSM303C)
- reading sensor values (raw & human readable values in appropriate units)
- interrupt settings
- FIFO reading & control
- selftest
- calibration
Compass calibration
Pressure & temperature sensor (Meas. Spec. MS5806-02BA)
- reading sensor values (raw & human readable values in appropriate units)
- interrupt settings
- altitude calibration
Ambient light sensor (Maxim 44009)
- reading sensor values (raw & human readable values in appropriate units)
- interrupt settings
- control of sensitivity
- selftest
Fuel gauge (Maxim MAX17047)
- reading voltage, drawn current, average current, remaining time to
empty, remaining capacity, temperature of battery
- reading/writing values of other registers
SD card
- checking status (presence, write-lock)
- reading/writing blocks
Backlight
- setting level (preferrably controlled by hardware with PWM)
Libraries
Functionality expected to be offered by respective libraries:
UI
- drawing primitives (lines, boxes, circles)
- displaying text
- reading state of buttons
- playing simple sounds (or just beeping)
Sensors
- collecting data from sensors
- conversion between units
- modifying settings
- gestures detection? (maybe should be done as a separate library)
GPS
- reading current location
- getting time
- logging/following routes
- connection quality information
- direction (0-360^ or N, W, E, S)
NMEA parsers:
Filesystem
Operations on SD card (probably in FAT file system):
- listing/copying/moving/deleting of files & directories
- reading/writing files
- formatting?
To be evaluated:
- http://elm-chan.org/fsw/ff/00index_e.html
- https://code.google.com/p/fullfat/
- http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_FAT_SL/FreeRTOS_Plus_FAT_SL.shtml
- http://www.silabs.com/Support%20Documents/TechnicalDocs/AN0030.pdf
Settings
- time (set manually/fetched from GPS; 12h/24h format)
- units (metric/imperial)
- backlight level (manual/auto)
- buzzer volume
- sensors/applications specific settings
Applications
Main menu
- choice of application
- displayed as text list, icons or scrollable with big icons (one
application per screen, think of Nokia 3310 main menu)
Watch
Modes:
- analog
- digital
- eggtimer (countdown)
- stopwatch
- alarm clock
Features:
- auto DST adjustment
Navigation
- show current position/altitude
- show speed/acceleration/distance
- show compass
- route logging
- route following (using stored .kml/.gpx files)
Calendar/todo/notes (optionally)
- read-only
- synchronized through USB connection
- audible reminders
Settings
- interface to settings library
- software version information
- detailed information about battery state
- debug mode activation (reading raw sensor data, devices state, NMEA
frames over USB)