Difference between revisions of "Platform:new:LEDs"

From DiLab
Jump to: navigation, search
m (ledslist.h)
Line 15: Line 15:
# 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 ===
Line 35: Line 36:
LED_DEFINE(blueLed, LEDS_PORT, 6, LEDS_ON_PIN_VALUE)
LED_DEFINE(blueLed, LEDS_PORT, 6, LEDS_ON_PIN_VALUE)
</source>
</source>



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


=== LED aliases ===
==== LED aliases ====


You may create one or several aliases for any LED using the LED_ALIAS( alias, original-name ) macro.
You may create one or several aliases for any LED using the LED_ALIAS( alias, original-name ) macro.
Line 78: Line 78:
}
}
</source>
</source>



== Hardware interface notes ==
== Hardware interface notes ==

=== GPIO LEDs ===
=== GPIO LEDs ===

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



=== Custom interface for LEDs ===
=== 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.
If LEDs have a different hardware interface, such as dedicated I2C controller, you may need to write code to implement the main functions.



Revision as of 14:39, 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.