~ruther/qmk_firmware

28aeef231b95f15ad0ddbc368781e986f559aaa8 — Mathias Andersson 12 years ago 9e84c89
Fix Phantom sleep LED.
3 files changed, 33 insertions(+), 10 deletions(-)

M keyboard/phantom/config.h
M keyboard/phantom/led.c
M keyboard/phantom/matrix.c
M keyboard/phantom/config.h => keyboard/phantom/config.h +4 -0
@@ 39,6 39,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if need no debouncing */
#define DEBOUNCE    7

/* Set LED brightness 0-255.
 * This have no effect if sleep LED is enabled. */
#define LED_BRIGHTNESS  250

/* key combination for command */
#define IS_COMMAND() ( \
    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \

M keyboard/phantom/led.c => keyboard/phantom/led.c +21 -6
@@ 16,19 16,34 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <avr/io.h>
#include "stdint.h"
#include "led.h"


void led_set(uint8_t usb_led)
{
    if (!(usb_led & (1<<USB_LED_CAPS_LOCK)))
        DDRB &= ~(1<<6);
    else
    if (usb_led & (1<<USB_LED_CAPS_LOCK))
    {
        // Output high.
        DDRB |= (1<<6);
        PORTB |= (1<<6);
    }
    else
    {
        // Output low.
        DDRB &= ~(1<<6);
        PORTB &= ~(1<<6);
    }

    if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)))
    if (usb_led & (1<<USB_LED_SCROLL_LOCK))
    {
        // Output high.
        DDRB &= ~(1<<7);
        PORTB |= (1<<7);
    }
    else
        DDRB |= (1<<7);
    {
        // Output low.
        DDRB &= ~(1<<7);
        PORTB &= ~(1<<7);
    }
}

M keyboard/phantom/matrix.c => keyboard/phantom/matrix.c +8 -4
@@ 32,6 32,7 @@ static void init_rows(void);
static void unselect_cols(void);
static void select_col(uint8_t col);

#ifndef SLEEP_LED_ENABLE
/* LEDs are on output compare pins OC1B OC1C
   This activates fast PWM mode on them.
   Prescaler 256 and 8-bit counter results in


@@ 51,12 52,13 @@ void setup_leds(void)
    TCCR1B |=      // Timer control register 1B
        (1<<WGM12) | // Fast PWM 8-bit
        (1<<CS12);   // Prescaler 256
    OCR1B = 250;    // Output compare register 1B
    OCR1C = 250;    // Output compare register 1C
    OCR1B = LED_BRIGHTNESS;    // Output compare register 1B
    OCR1C = LED_BRIGHTNESS;    // Output compare register 1C
    // LEDs: LED_A -> PORTB6, LED_B -> PORTB7
    DDRB  &= 0x3F;
    PORTB &= 0x3F;
    DDRB  |= (1<<6) | (1<<7);
    PORTB  &= ~((1<<6) | (1<<7));
}
#endif

inline
uint8_t matrix_rows(void)


@@ 79,7 81,9 @@ void matrix_init(void)
    // initialize row and col
    unselect_cols();
    init_rows();
#ifndef SLEEP_LED_ENABLE
    setup_leds();
#endif

    // initialize matrix state: all keys off
    for (uint8_t i = 0; i < MATRIX_ROWS; i++)  {