Platform:new:LEDs

From DiLab
Revision as of 21:56, 26 November 2011 by Girts (talk | contribs) (Define a LED)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

How to define or add LEDs for a platform "xxx".

  • Find a template for a ledslist.h file, for example, from telosb, pc or some other platform.
  • Place it in mos/platforms/xxx/
  • Edit as appropriate.


ledslist.h

LEDs are identified by their names, for example, redLed, or led1, led2, and so on. These names need to appear in two places:

  1. where the LEDs are defined. look for the LEDS_DEFINE macro section
  2. where the LEDs are listed to be used in the code that iterates through all the available LEDs. Look for the macro DOIT section.


LEDS_DEFINE

Please provide here the following:

  • define a LED hardware interface.
  • add aliases to some LEDs, as needed
  • define a default led.

Define a LED

Use LED_DEFINE(name, port, pin, led-on-pin-value) macro to define the hardware interface for each LED. For example:

 #define LEDS_ON_PIN_VALUE 0 
 #define LEDS_PORT 5 
 LED_DEFINE(redLed,   LEDS_PORT, 4, LEDS_ON_PIN_VALUE)
 LED_DEFINE(greenLed, LEDS_PORT, 5, LEDS_ON_PIN_VALUE)
 LED_DEFINE(blueLed,  LEDS_PORT, 6, LEDS_ON_PIN_VALUE)

LED_ON_PIN_VALUE means "on what level (0/1) LED is on". For example, if the LED is on, when 0 is set on the MCU pin, use 0 as LED_ON_PIN_VALUE value.

Default LED

The default led is named "led". Therefore, any application, such as apps/demo/Blink, may use the standard functions such as ledToggle().

The default LED name is provided by defining the DEFAULT_LED macro as follows:

 #define LED_DEFAULT redLed

If no default LED ia specified, the led* interface function calls are created as empty calls and ignored by the compiler.

LED aliases

You may create one or several aliases for any LED using the LED_ALIAS( alias, original-name ) macro. For example:

 LED_ALIAS(myFavoriteLedNickname, redLed)


DOIT

DOIT(led) is a macro that is iterated for each LED every time the "ledslist.h" file is included. Therefore, you must provide a list of DOIT() calls for each LED name. Note, you do not need to include the LED alias names in this list. For example:

 #define DOIT_FIRST_LINE __LINE__
 DOIT(redLed)
 DOIT(greenLed)
 DOIT(blueLed)

Here is the example usage of the LED iterator, as used in leds.c:

 void ledsInit()
 {
 #  define DOIT(_led) _led##Init();
 #  include "ledslist.h"
 }


Hardware interface notes

GPIO LEDs

If LEDs in your platform are attached to GPIO pins - you are in luck. Just list their names.


Custom interface for LEDs

If LEDs have a different hardware interface, such as dedicated I2C controller, you may need to write code to implement the main functions.

The LED functions are declared in mos/hil/leds.h file. In particular, pay attention to the LED_DEFINE macro, that lists all the individual LED functions that have to be implemented.