diff --git a/keyboard/gnap/FLASH.bin b/keyboard/gnap/FLASH.bin
index 0baac822..a1c16488 100644
Binary files a/keyboard/gnap/FLASH.bin and b/keyboard/gnap/FLASH.bin differ
diff --git a/keyboard/gnap/gnap.bin b/keyboard/gnap/gnap.bin
index 0baac822..a1c16488 100644
Binary files a/keyboard/gnap/gnap.bin and b/keyboard/gnap/gnap.bin differ
diff --git a/keyboard/gnap/led.c b/keyboard/gnap/led.c
index 58ef4eb5..4de282d5 100644
--- a/keyboard/gnap/led.c
+++ b/keyboard/gnap/led.c
@@ -22,5 +22,17 @@ along with this program. If not, see .
void led_set(uint8_t usb_led)
{
-
-}
+ if (usb_led & (1<
+#include "backlight.h"
+
+#define FET OCR1A
+
+uint8_t led_counter = 0;
+uint8_t led_level = 0;
+
+
+void backlight_init_ports()
+{
+ DDRB |= (1<<5);
+ PORTB &= ~(1<<5);
+
+ TCCR1A = _BV(COM1A1) | _BV(WGM11); // = 0b10000010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ ICR1 = 0xFFFF;
+
+ FET = 0x0000;
+
+ backlight_init();
+}
+
+void backlight_set(uint8_t level)
+{
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB5, revert to output low.
+ TCCR1A &= ~(_BV(COM1A1));
+ FET = 0x0000;
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB5));
+ }
+ else if ( level == BACKLIGHT_LEVELS )
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB5));
+ // Turn on PWM control of PB5
+ TCCR1A |= _BV(COM1A1);
+ // Set the brightness
+ FET = 0xFFFF;
+ }
+ else
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB5));
+ // Turn on PWM control of PB5
+ TCCR1A |= _BV(COM1A1);
+ // Set the brightness
+ FET = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+}
\ No newline at end of file
diff --git a/keyboard/mf68/config.h b/keyboard/mf68/config.h
new file mode 100644
index 00000000..74f9b0f6
--- /dev/null
+++ b/keyboard/mf68/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2012 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0068
+#define MANUFACTURER di0ib
+#define PRODUCT The mf68 Keyboard
+#define DESCRIPTION A 68 key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 9
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 4
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/mf68/keymap_common.h b/keyboard/mf68/keymap_common.h
new file mode 100644
index 00000000..22898cfa
--- /dev/null
+++ b/keyboard/mf68/keymap_common.h
@@ -0,0 +1,48 @@
+/*
+Copyright 2012,2013 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include
+#include
+#include "keycode.h"
+#include "action.h"
+#include "action_macro.h"
+#include "report.h"
+#include "host.h"
+#include "print.h"
+#include "debug.h"
+#include "keymap.h"
+
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \
+ K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \
+ K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, \
+ K64, K65, K66, K67, K68, K70, K71, K72, K73, K74 \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08 }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18 }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28 }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38 }, \
+ { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48 }, \
+ { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, KC_##K58 }, \
+ { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68 }, \
+ { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 } \
+}
+#endif
diff --git a/keyboard/mf68/keymap_mf68.c b/keyboard/mf68/keymap_mf68.c
new file mode 100644
index 00000000..e7ca5ac7
--- /dev/null
+++ b/keyboard/mf68/keymap_mf68.c
@@ -0,0 +1,31 @@
+#include "keymap_common.h"
+#include "backlight.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+KEYMAP(
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, INS, PGUP,
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, PGDN,
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP,
+ LCTL, LGUI, LALT, SPC, FN0, RALT, RCTL, LEFT, DOWN, RGHT
+),
+KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, HOME,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, CALC, TRNS, TRNS, END,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, TRNS, TRNS,
+ TRNS, MSEL, MPLY, MSTP, MPRV, MNXT, VOLD, VOLU, MUTE, TRNS, END, TRNS, FN3,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, APP, FN2, FN1, TRNS
+),
+};
+
+const action_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1),
+ [1] = ACTION_BACKLIGHT_DECREASE(),
+ [2] = ACTION_BACKLIGHT_TOGGLE(),
+ [3] = ACTION_BACKLIGHT_INCREASE()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+
+}
diff --git a/keyboard/mf68/led.c b/keyboard/mf68/led.c
new file mode 100644
index 00000000..9458c038
--- /dev/null
+++ b/keyboard/mf68/led.c
@@ -0,0 +1,38 @@
+/*
+Copyright 2012 Jun Wako
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include
+#include "stdint.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+ if (usb_led & (1<
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+/*
+ * scan matrix
+ */
+#include
+#include
+#include
+#include
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
+ MCUCR |= (1<