Fix LED driver for the Arduino Leonardo board.
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 30 Apr 2014 10:36:42 +0000 (20:36 +1000)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 30 Apr 2014 10:36:49 +0000 (20:36 +1000)
LUFA/DoxygenPages/ChangeLog.txt
LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h

index 2fd980f..b5f70ad 100644 (file)
@@ -11,6 +11,7 @@
   *  - Core:
   *   - Fixed device class driver pipe configuration routines returning success with a partially constructed instance
   *     when a pipe configuration failed (thanks to Helge Suess)
   *  - Core:
   *   - Fixed device class driver pipe configuration routines returning success with a partially constructed instance
   *     when a pipe configuration failed (thanks to Helge Suess)
+  *   - Fixed incorrect LED driver definitions for the Arduino Leonardo board (thanks to Zoltán Szőke)
   *
   *  \section Sec_ChangeLog140302 Version 140302
   *  <b>New:</b>
   *
   *  \section Sec_ChangeLog140302 Version 140302
   *  <b>New:</b>
index 28a4802..c336190 100644 (file)
@@ -98,9 +98,9 @@
                        static inline void LEDs_Init(void)
                        {
                                DDRB  |=  LEDS_PORTB_LEDS;
                        static inline void LEDs_Init(void)
                        {
                                DDRB  |=  LEDS_PORTB_LEDS;
-                               PORTB |=  LEDS_PORTB_LEDS;
+                               PORTB &=  LEDS_PORTB_LEDS;
                                DDRD  |=  LEDS_PORTD_LEDS;
                                DDRD  |=  LEDS_PORTD_LEDS;
-                               PORTD |=  LEDS_PORTD_LEDS;
+                               PORTD &=  LEDS_PORTD_LEDS;
                                DDRC  |=  LEDS_PORTC_LEDS;
                                PORTC &= ~LEDS_PORTC_LEDS;
                        }
                                DDRC  |=  LEDS_PORTC_LEDS;
                                PORTC &= ~LEDS_PORTC_LEDS;
                        }
 
                        static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
                        {
 
                        static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
                        {
-                               PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
-                               PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
+                               PORTB |=  (LEDMask & LEDS_PORTB_LEDS);
+                               PORTD |=  (LEDMask & LEDS_PORTD_LEDS);
                                PORTC |=  (LEDMask & LEDS_PORTC_LEDS);
                        }
 
                        static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
                        {
                                PORTC |=  (LEDMask & LEDS_PORTC_LEDS);
                        }
 
                        static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
                        {
-                               PORTB |=  (LEDMask & LEDS_PORTB_LEDS);
-                               PORTD |=  (LEDMask & LEDS_PORTD_LEDS);
+                               PORTB &= ~(LEDMask & LEDS_PORTB_LEDS);
+                               PORTD &= ~(LEDMask & LEDS_PORTD_LEDS);
                                PORTC &= ~(LEDMask & LEDS_PORTC_LEDS);
                        }
 
                        static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
                        {
                                PORTC &= ~(LEDMask & LEDS_PORTC_LEDS);
                        }
 
                        static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
                        {
-                               PORTB = ((PORTB |  LEDS_PORTB_LEDS) & ~(LEDMask & LEDS_PORTB_LEDS));
-                               PORTD = ((PORTD |  LEDS_PORTD_LEDS) & ~(LEDMask & LEDS_PORTD_LEDS));
+                               PORTB = ((PORTB & ~LEDS_PORTB_LEDS) |  (LEDMask & LEDS_PORTB_LEDS));
+                               PORTD = ((PORTD & ~LEDS_PORTD_LEDS) |  (LEDMask & LEDS_PORTD_LEDS));
                                PORTC = ((PORTC & ~LEDS_PORTC_LEDS) |  (LEDMask & LEDS_PORTC_LEDS));
                        }
 
                        static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
                                                           const uint8_t ActiveMask)
                        {
                                PORTC = ((PORTC & ~LEDS_PORTC_LEDS) |  (LEDMask & LEDS_PORTC_LEDS));
                        }
 
                        static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
                                                           const uint8_t ActiveMask)
                        {
-                               PORTB = ((PORTB |  (LEDMask & LEDS_PORTB_LEDS)) & ~(ActiveMask & LEDS_PORTB_LEDS));
-                               PORTD = ((PORTD |  (LEDMask & LEDS_PORTD_LEDS)) & ~(ActiveMask & LEDS_PORTD_LEDS));
-                               PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) |  (ActiveMask & LEDS_PORTC_LEDS));
+                               PORTB = ((PORTB & ~(LEDMask & LEDS_PORTB_LEDS)) | (ActiveMask & LEDS_PORTB_LEDS));
+                               PORTD = ((PORTD & ~(LEDMask & LEDS_PORTD_LEDS)) | (ActiveMask & LEDS_PORTD_LEDS));
+                               PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS));
                        }
 
                        static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
                        {
                        }
 
                        static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
                        {
-                               PINB  = (LEDMask & LEDS_PORTB_LEDS);
-                               PIND  = (LEDMask & LEDS_PORTD_LEDS);
-                               PINC  = (LEDMask & LEDS_PORTC_LEDS);
+                               PORTB ^= (LEDMask & LEDS_PORTB_LEDS);
+                               PORTD ^= (LEDMask & LEDS_PORTD_LEDS);
+                               PORTC ^= (LEDMask & LEDS_PORTC_LEDS);
                        }
 
                        static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
                        static inline uint8_t LEDs_GetLEDs(void)
                        {
                        }
 
                        static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
                        static inline uint8_t LEDs_GetLEDs(void)
                        {
-                               return ((PORTB & LEDS_PORTB_LEDS) | (PORTD & LEDS_PORTD_LEDS) | (~PORTC & LEDS_PORTC_LEDS));
+                               return ((PORTB & LEDS_PORTB_LEDS) | (PORTD & LEDS_PORTD_LEDS) | (PORTC & LEDS_PORTC_LEDS));
                        }
                #endif
 
                        }
                #endif