Difference between revisions of "Platform:new:LEDs"

From DiLab
Jump to: navigation, search
(Define a LED)
 
(2 intermediate revisions by one other user not shown)
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 ===
Line 36: Line 37:
</source>
</source>


<code>LED_ON_PIN_VALUE</code> 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 <code>LED_ON_PIN_VALUE</code> value.


==== Default LED ====
==== Default LED ====
Line 49: Line 51:
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 80:
}
}
</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.



Latest revision as of 21:56, 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)

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.