]> git.sur5r.net Git - freertos/blob - Demo/Common/drivers/Atmel/at91lib/utility/led.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / Common / drivers / Atmel / at91lib / utility / led.c
1 /* ----------------------------------------------------------------------------\r
2  *         ATMEL Microcontroller Software Support \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2008, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /*\r
31     Title: LED implementation\r
32 \r
33     About: Purpose\r
34         Implementation of LED-related functionalities.\r
35 */\r
36 \r
37 //------------------------------------------------------------------------------\r
38 //         Headers\r
39 //------------------------------------------------------------------------------\r
40 \r
41 #include "led.h"\r
42 #include <board.h>\r
43 #include <pio/pio.h>\r
44 \r
45 //------------------------------------------------------------------------------\r
46 //         Internal variables\r
47 //------------------------------------------------------------------------------\r
48 \r
49 #ifdef PINS_LEDS\r
50 static const Pin pinsLeds[] = {PINS_LEDS};\r
51 static const unsigned int numLeds = PIO_LISTSIZE(pinsLeds);\r
52 #endif\r
53 \r
54 //------------------------------------------------------------------------------\r
55 //         Exported functions\r
56 //------------------------------------------------------------------------------\r
57 /*\r
58     Function: LED_Configure\r
59         Configures the pin associated with the given LED number.\r
60 \r
61     Parameters:\r
62         led - Number of the LED to configure.\r
63 \r
64     Returns:\r
65         1 if the LED exists and has been configured; otherwise 0.\r
66 */\r
67 unsigned char LED_Configure(unsigned int led)\r
68 {\r
69 #ifdef PINS_LEDS\r
70     // Check that LED exists\r
71     if (led >= numLeds) {\r
72 \r
73         return 0;\r
74     }\r
75 \r
76     // Configure LED\r
77     return (PIO_Configure(&pinsLeds[led], 1));\r
78 #else\r
79     return 0;\r
80 #endif\r
81 }\r
82 \r
83 /*\r
84     Function: LED_Set\r
85         Turns a LED on.\r
86 \r
87     Parameters:\r
88         led - Number of the LED to turn on.\r
89 \r
90     Returns:\r
91         1 if the LED has been turned on; 0 otherwise.\r
92 */\r
93 unsigned char LED_Set(unsigned int led)\r
94 {\r
95 #ifdef PINS_LEDS\r
96     // Check if LED exists\r
97     if (led >= numLeds) {\r
98 \r
99         return 0;\r
100     }\r
101 \r
102     // Turn LED on\r
103     if (pinsLeds[led].type == PIO_OUTPUT_0) {\r
104 \r
105         PIO_Set(&pinsLeds[led]);\r
106     }\r
107     else {\r
108 \r
109         PIO_Clear(&pinsLeds[led]);\r
110     }\r
111 \r
112     return 1;\r
113 #else\r
114     return 0;\r
115 #endif\r
116 }\r
117 \r
118 /*\r
119     Function: LED_Clear\r
120         Turns a LED off.\r
121 \r
122     Parameters:\r
123         led - Number of the LED to turn off.\r
124 \r
125     Returns:\r
126         1 if the LED has been turned off; 0 otherwise.\r
127 */\r
128 unsigned char LED_Clear(unsigned int led)\r
129 {\r
130 #ifdef PINS_LEDS\r
131     // Check if LED exists\r
132     if (led >= numLeds) {\r
133 \r
134         return 0;\r
135     }\r
136 \r
137     // Turn LED off\r
138     if (pinsLeds[led].type == PIO_OUTPUT_0) {\r
139 \r
140         PIO_Clear(&pinsLeds[led]);\r
141     }\r
142     else {\r
143 \r
144         PIO_Set(&pinsLeds[led]);\r
145     }\r
146 \r
147     return 1;\r
148 #else\r
149     return 0;\r
150 #endif\r
151 }\r
152 \r
153 /*\r
154     Function: LED_Toggle\r
155         Toggles the current state of a LED.\r
156 \r
157     Parameters:\r
158         led - Number of the LED to toggle.\r
159 \r
160     Returns:\r
161         1 if the LED has been toggled; otherwise 0.\r
162 */\r
163 unsigned char LED_Toggle(unsigned int led)\r
164 {\r
165 #ifdef PINS_LEDS\r
166     // Check if LED exists\r
167     if (led >= numLeds) {\r
168 \r
169         return 0;\r
170     }\r
171 \r
172     // Toggle LED\r
173     if (PIO_GetOutputDataStatus(&pinsLeds[led])) {\r
174 \r
175         PIO_Clear(&pinsLeds[led]);\r
176     }\r
177     else {\r
178 \r
179         PIO_Set(&pinsLeds[led]);\r
180     }\r
181 \r
182     return 1;\r
183 #else\r
184     return 0;\r
185 #endif\r
186 }\r
187 \r