Difference between revisions of "Platform:new:LEDs"

From DiLab
Jump to: navigation, search
m (ledslist.h)
Line 13: Line 13:
LEDs are identified by their names, for example, ''redLed'', or ''led1'', ''led2'', and so on.
LEDs are identified by their names, for example, ''redLed'', or ''led1'', ''led2'', and so on.
These names need to appear in two places:
These names need to appear in two places:
# where the LEDs are defined. look for the LEDS_DEFINE macro section
# where the LEDs are defined. look for the '''LEDS_DEFINE''' macro section
# where the LEDs are listed to be used in the code that iterates through all the available LEDs. Look for the macro DOIT section.
# 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 ===
=== LEDS_DEFINE ===

Revision as of 15:38, 26 November 2011

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)


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.