4dddcb4f0300f79d8fbfc462ff8d6b360e99989e

Author
Ryan <fauxpark@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

Telophase cleanup (#13225)

Diff

This diff is truncated to protect this page.

  1diff --git a/keyboards/telophase/config.h b/keyboards/telophase/config.h
  2index c67dd939bffb9ab82e96311afa549fe2798e71ca..51718da9d4c1cfef64b190ec49596816006143e6 100644
  3--- a/keyboards/telophase/config.h
  4+++ b/keyboards/telophase/config.h
  5@@ -1,5 +1,5 @@
  6 /*
  7-Copyright 2012 Jun Wako <wakojun@gmail.com>
  8+Copyright 2021
  9 
 10 This program is free software: you can redistribute it and/or modify
 11 it under the terms of the GNU General Public License as published by
 12@@ -15,31 +15,44 @@ You should have received a copy of the GNU General Public License
 13 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 14 */
 15 
 16-#ifndef CONFIG_H
 17-#define CONFIG_H
 18+#pragma once
 19 
 20 #include "config_common.h"
 21 
 22 /* USB Device descriptor parameter */
 23-
 24-#define VENDOR_ID       0xFEED
 25-#define PRODUCT_ID      0x6060
 26-#define DEVICE_VER      0x0001
 27-#define MANUFACTURER    unknown
 28-#define PRODUCT         Telophase
 29+#define VENDOR_ID    0xFEED
 30+#define PRODUCT_ID   0x6060
 31+#define DEVICE_VER   0x0001
 32+#define MANUFACTURER unknown
 33+#define PRODUCT      Telophase
 34 
 35 /* key matrix size */
 36 #define MATRIX_ROWS 4
 37 #define MATRIX_COLS 12
 38 
 39-/* define if matrix has ghost */
 40-//#define MATRIX_HAS_GHOST
 41-
 42-/* number of backlight levels */
 43-//#define BACKLIGHT_LEVELS 3
 44-
 45 #define ONESHOT_TIMEOUT 500
 46 
 47+/*
 48+ * Force NKRO
 49+ *
 50+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 51+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 52+ * makefile for this to work.)
 53+ *
 54+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 55+ * until the next keyboard reset.
 56+ *
 57+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 58+ * fully operational during normal computer usage.
 59+ *
 60+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 61+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 62+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 63+ * power-up.
 64+ *
 65+ */
 66+//#define FORCE_NKRO
 67+
 68 /*
 69  * Feature disable options
 70  *  These options are also useful to firmware size reduction.
 71@@ -55,10 +68,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 72 //#define NO_ACTION_LAYER
 73 //#define NO_ACTION_TAPPING
 74 //#define NO_ACTION_ONESHOT
 75-//#define NO_ACTION_MACRO
 76-//#define NO_ACTION_FUNCTION
 77 
 78-//UART settings for communication with the RF microcontroller
 79+/* disable these deprecated features by default */
 80+#define NO_ACTION_MACRO
 81+#define NO_ACTION_FUNCTION
 82+
 83+// UART settings for communication with the RF microcontroller
 84 #define SERIAL_UART_BAUD 1000000
 85 #define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
 86 #define SERIAL_UART_INIT_CUSTOM       \
 87@@ -66,5 +81,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 88     UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
 89     /* 8-bit data */                  \
 90     UCSR1C = _BV(UCSZ11) | _BV(UCSZ10);
 91-
 92-#endif
 93diff --git a/keyboards/telophase/keymaps/default/keymap.c b/keyboards/telophase/keymaps/default/keymap.c
 94index 9cc6c1bb00dfaf55de4bc9a3daf793de07edec6f..163f754d4378406f53f67248833aa4b30fdef429 100644
 95--- a/keyboards/telophase/keymaps/default/keymap.c
 96+++ b/keyboards/telophase/keymaps/default/keymap.c
 97@@ -1,99 +1,55 @@
 98-// this is the style you want to emulate.
 99-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
100+/*
101+Copyright 2021
102 
103-#include QMK_KEYBOARD_H
104+This program is free software: you can redistribute it and/or modify
105+it under the terms of the GNU General Public License as published by
106+the Free Software Foundation, either version 2 of the License, or
107+(at your option) any later version.
108 
109-// Each layer gets a name for readability, which is then used in the keymap matrix below.
110-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
111-// Layer names don't all need to be of the same length, obviously, and you can also skip them
112-// entirely and just use numbers.
113-enum telophase_layers
114-{
115-	_QWERTY,
116-	_LOWER,
117-	_RAISE,
118-	_ADJUST,
119-};
120+This program is distributed in the hope that it will be useful,
121+but WITHOUT ANY WARRANTY; without even the implied warranty of
122+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
123+GNU General Public License for more details.
124+
125+You should have received a copy of the GNU General Public License
126+along with this program.  If not, see <http://www.gnu.org/licenses/>.
127+*/
128+
129+#include QMK_KEYBOARD_H
130 
131-enum telophase_keycodes
132-{
133-  LOWER = SAFE_RANGE,
134-  RAISE,
135-  ADJUST
136+enum layer_names {
137+    _QWERTY,
138+    _LOWER,
139+    _RAISE,
140+    _ADJUST
141 };
142 
143 #define LONGPRESS_DELAY 150
144 #define LAYER_TOGGLE_DELAY 300
145 
146 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
147-[_QWERTY] = { /*QWERTY*/
148-	{KC_ESC,    KC_Q,      KC_W,    KC_E,    KC_R,    KC_T,      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC },
149-	{KC_TAB,    KC_A,      KC_S,    KC_D,    KC_F,    KC_G,      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT },
150-	{KC_LSFT,   KC_Z,      KC_X,    KC_C,    KC_V,    KC_B,      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT  },
151-	{KC_LCTL,   KC_LGUI,   KC_LALT, ADJUST,  LOWER,   KC_SPC,    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT }
152-},
153-
154-
155-[_LOWER] = { /*Lower*/
156-	{KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL    },
157- 	{KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE   },
158- 	{_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______ },
159- 	{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY   }
160-},
161-
162-
163-
164-[_RAISE] = { /*Raise*/
165-  	{KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL   },
166-  	{KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS  },
167-  	{_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______  },
168-  	{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  }
169-
170-},
171-
172-
173-[_ADJUST] = { /*Adjust*/
174-  	{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
175-  	{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
176-  	{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
177-  	{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
178-
179-},
180-};
181-
182-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
183-  switch (keycode) {
184-    case LOWER:
185-      if (record->event.pressed) {
186-        layer_on(_LOWER);
187-      } else {
188-        layer_off(_LOWER);
189-      }
190-      return false;
191-      break;
192-
193-    case RAISE:
194-      if (record->event.pressed) {
195-        layer_on(_RAISE);
196-      } else {
197diff --git a/keyboards/telophase/matrix.c b/keyboards/telophase/matrix.c
198index bc7a125e076c3135743fecde8b86ab90e3c2ca22..a153dd4bf140e581e7e848d22b0d0cfef66d4e8e 100644
199--- a/keyboards/telophase/matrix.c
200+++ b/keyboards/telophase/matrix.c
201@@ -15,86 +15,18 @@ GNU General Public License for more details.
202 You should have received a copy of the GNU General Public License
203 along with this program.  If not, see <http://www.gnu.org/licenses/>.
204 */
205-#include <stdint.h>
206-#include <stdbool.h>
207-#if defined(__AVR__)
208-#include <avr/io.h>
209-#endif
210-#include "wait.h"
211-#include "print.h"
212-#include "debug.h"
213-#include "util.h"
214+
215+#include "quantum.h"
216 #include "matrix.h"
217-#include "timer.h"
218 #include "protocol/serial.h"
219 
220-#if (MATRIX_COLS <= 8)
221-#    define print_matrix_header()  print("\nr/c 01234567\n")
222-#    define print_matrix_row(row)  print_bin_reverse8(matrix_get_row(row))
223-#    define matrix_bitpop(i)       bitpop(matrix[i])
224-#    define ROW_SHIFTER ((uint8_t)1)
225-#elif (MATRIX_COLS <= 16)
226-#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF\n")
227-#    define print_matrix_row(row)  print_bin_reverse16(matrix_get_row(row))
228-#    define matrix_bitpop(i)       bitpop16(matrix[i])
229-#    define ROW_SHIFTER ((uint16_t)1)
230-#elif (MATRIX_COLS <= 32)
231-#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
232-#    define print_matrix_row(row)  print_bin_reverse32(matrix_get_row(row))
233-#    define matrix_bitpop(i)       bitpop32(matrix[i])
234-#    define ROW_SHIFTER  ((uint32_t)1)
235-#endif
236-
237-/* matrix state(1:on, 0:off) */
238-static matrix_row_t matrix[MATRIX_ROWS];
239-
240-__attribute__ ((weak))
241-void matrix_init_quantum(void) {
242-    matrix_init_kb();
243-}
244-
245-__attribute__ ((weak))
246-void matrix_scan_quantum(void) {
247-    matrix_scan_kb();
248-}
249-
250-__attribute__ ((weak))
251-void matrix_init_kb(void) {
252-    matrix_init_user();
253-}
254-
255-__attribute__ ((weak))
256-void matrix_scan_kb(void) {
257-    matrix_scan_user();
258-}
259-
260-__attribute__ ((weak))
261-void matrix_init_user(void) {
262-}
263-
264-__attribute__ ((weak))
265-void matrix_scan_user(void) {
266-}
267-
268-inline
269-uint8_t matrix_rows(void) {
270-    return MATRIX_ROWS;
271-}
272-
273-inline
274-uint8_t matrix_cols(void) {
275-    return MATRIX_COLS;
276-}
277-
278-void matrix_init(void) {
279-
280-    matrix_init_quantum();
281+void matrix_init_custom(void) {
282     serial_init();
283 }
284 
285-uint8_t matrix_scan(void)
286-{
287+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
288     uint32_t timeout = 0;
289+    bool changed = false;
290 
291     //the s character requests the RF slave to send the matrix
292     SERIAL_UART_DATA = 's';
293@@ -107,9 +39,9 @@ uint8_t matrix_scan(void)
294         //wait for the serial data, timeout if it's been too long
295         //this only happened in testing with a loose wire, but does no
296         //harm to leave it in here
297-        while(!SERIAL_UART_RXD_PRESENT){
298+        while (!SERIAL_UART_RXD_PRESENT) {
299             timeout++;
300-            if (timeout > 10000){
301diff --git a/keyboards/telophase/readme.md b/keyboards/telophase/readme.md
302index 97bce57bb8e8d2a53b6033062bef207e86f1895b..26b623ca16d4b5549847980d03ff03e7553c3ecb 100644
303--- a/keyboards/telophase/readme.md
304+++ b/keyboards/telophase/readme.md
305@@ -1,16 +1,13 @@
306-Telophase
307-=========
308+# Telophase
309 
310 A wireless split compact keyboard.
311 
312-Hardware Supported: Telophase PCB
313diff --git a/keyboards/telophase/rules.mk b/keyboards/telophase/rules.mk
314index 614d90918102ff250a154e0edcda47a4f1ba61d8..d475836b7bdf4ce271619c6dc36a12bd3beefde5 100644
315--- a/keyboards/telophase/rules.mk
316+++ b/keyboards/telophase/rules.mk
317@@ -2,34 +2,27 @@
318 MCU = atmega32u4
319 
320 # Bootloader selection
321-#   Teensy       halfkay
322-#   Pro Micro    caterina
323-#   Atmel DFU    atmel-dfu
324-#   LUFA DFU     lufa-dfu
325-#   QMK DFU      qmk-dfu
326-#   ATmega32A    bootloadHID
327-#   ATmega328P   USBasp
328 BOOTLOADER = caterina
329 
330 # Build Options
331-#   comment out to disable the options.
332+#   change yes to no to disable
333 #
334-#BOOTMAGIC_ENABLE = full	# Virtual DIP switch configuration
335-MOUSEKEY_ENABLE = yes	# Mouse keys
336-EXTRAKEY_ENABLE = yes	# Audio control and System control
337-CONSOLE_ENABLE = yes	# Console for debug
338-COMMAND_ENABLE = yes   # Commands for debug and configuration
339-CUSTOM_MATRIX = yes    # Remote matrix from the wireless bridge
340-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
341-# SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
342-NKRO_ENABLE = yes		# USB Nkey Rollover - not yet supported in LUFA
343-# BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
344-# MIDI_ENABLE = YES 		# MIDI controls
345-UNICODE_ENABLE = YES 		# Unicode
346-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
347+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration
348+MOUSEKEY_ENABLE = yes       # Mouse keys
349+EXTRAKEY_ENABLE = yes       # Audio control and System control
350+CONSOLE_ENABLE = yes        # Console for debug
351+COMMAND_ENABLE = yes        # Commands for debug and configuration
352+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
353+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
354+NKRO_ENABLE = yes           # USB Nkey Rollover
355+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
356+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
357+BLUETOOTH_ENABLE = no       # Enable Bluetooth
358+AUDIO_ENABLE = no           # Audio output
359+CUSTOM_MATRIX = lite
360 
361-# # project specific files
362-SRC = matrix.c serial_uart.c
363+# project specific files
364+SRC += matrix.c serial_uart.c
365 
366 # Disable unsupported hardware
367 RGBLIGHT_SUPPORTED = no
368diff --git a/keyboards/telophase/telophase.c b/keyboards/telophase/telophase.c
369index 7484551c919436124c70eaf5193431c8cea816e1..334cc7697b755ae3651321f8ad51c8d3496ec0c6 100644
370--- a/keyboards/telophase/telophase.c
371+++ b/keyboards/telophase/telophase.c
372@@ -1,26 +1,44 @@
373+/*
374+Copyright 2021
375+
376+This program is free software: you can redistribute it and/or modify
377+it under the terms of the GNU General Public License as published by
378+the Free Software Foundation, either version 2 of the License, or
379+(at your option) any later version.
380+
381+This program is distributed in the hope that it will be useful,
382+but WITHOUT ANY WARRANTY; without even the implied warranty of
383+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
384+GNU General Public License for more details.
385+
386+You should have received a copy of the GNU General Public License
387+along with this program.  If not, see <http://www.gnu.org/licenses/>.
388+*/
389+
390 #include "telophase.h"
391 
392 void led_init(void) {
393-	DDRD  |= (1<<1);
394-	PORTD |= (1<<1);
395-	DDRF  |= (1<<4) | (1<<5);
396-	PORTF |= (1<<4) | (1<<5);
397+    setPinOutput(D1);
398+    setPinOutput(F4);
399+    setPinOutput(F5);
400+    writePinHigh(D1);
401+    writePinHigh(F4);
402+    writePinHigh(F5);
403 }
404 
405-
406 void matrix_init_kb(void) {
407-	// put your keyboard start-up code here
408-	// runs once when the firmware starts up
409-	matrix_init_user();
410-	led_init();
411+    // put your keyboard start-up code here
412+    // runs once when the firmware starts up
413+    matrix_init_user();
414+    led_init();
415 }
416 
417 #ifdef SWAP_HANDS_ENABLE
418 __attribute__ ((weak))
419 const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
420-{{12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
421-{{12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
422-{{12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
423-{{12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
424+    {{12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
425+    {{12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
426+    {{12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
427+    {{12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}
428 };
429 #endif
430diff --git a/keyboards/telophase/telophase.h b/keyboards/telophase/telophase.h
431index 458ea35da727523d11597c7338dd1be40c59b87f..8ca6744176042cd9d98181634942f1ddc9bf3fde 100644
432--- a/keyboards/telophase/telophase.h
433+++ b/keyboards/telophase/telophase.h
434@@ -1,14 +1,30 @@
435-#ifndef TELOPHASE_H
436-#define TELOPHASE_H
437+/*
438+Copyright 2021
439+
440+This program is free software: you can redistribute it and/or modify
441+it under the terms of the GNU General Public License as published by
442+the Free Software Foundation, either version 2 of the License, or
443+(at your option) any later version.
444+
445+This program is distributed in the hope that it will be useful,
446+but WITHOUT ANY WARRANTY; without even the implied warranty of
447+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
448+GNU General Public License for more details.
449+
450+You should have received a copy of the GNU General Public License
451+along with this program.  If not, see <http://www.gnu.org/licenses/>.
452+*/
453+
454+#pragma once
455 
456 #include "quantum.h"
457 
458-#define red_led_off   PORTF |= (1<<5)
459-#define red_led_on    PORTF &= ~(1<<5)
460-#define blu_led_off   PORTF |= (1<<4)
461-#define blu_led_on    PORTF &= ~(1<<4)
462-#define grn_led_off   PORTD |= (1<<1)
463-#define grn_led_on    PORTD &= ~(1<<1)
464+#define red_led_off writePinHigh(F5)
465+#define red_led_on  writePinLow(F5)
466+#define blu_led_off writePinHigh(F4)
467+#define blu_led_on  writePinLow(F4)
468+#define grn_led_off writePinHigh(D1)
469+#define grn_led_on  writePinLow(D1)
470 
471 #define set_led_off     red_led_off; grn_led_off; blu_led_off
472 #define set_led_red     red_led_on;  grn_led_off; blu_led_off
473@@ -19,46 +35,19 @@
474 #define set_led_cyan    red_led_off; grn_led_on;  blu_led_on
475 #define set_led_white   red_led_on;  grn_led_on;  blu_led_on
476 
477-/*
478-#define LED_B 5
479-#define LED_R 6
480-#define LED_G 7
481-
482-#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
483-
484-#define red_led_on   PORTF |= (1<<LED_R)
485-#define red_led_off  PORTF &= ~(1<<LED_R)
486-#define grn_led_on   PORTF |= (1<<LED_G)
487-#define grn_led_off  PORTF &= ~(1<<LED_G)
488-#define blu_led_on   PORTF |= (1<<LED_B)
489-#define blu_led_off  PORTF &= ~(1<<LED_B)
490-
491-#define set_led_off     PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
492-#define set_led_red     PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
493-#define set_led_blue    PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
494-#define set_led_green   PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
495-#define set_led_yellow  PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
496-#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
497-#define set_led_cyan    PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
498-#define set_led_white   PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
499-*/
500-
501 // This a shortcut to help you visually see your layout.
502 // The first section contains all of the arguements
503 // The second converts the arguments into a two-dimensional array
504 #define LAYOUT_ortho_4x12( \
505-  k00, k01, k02, k03, k04, k05,      k06, k07, k08, k09, k10, k11, \
506-  k12, k13, k14, k15, k16, k17,      k18, k19, k20, k21, k22, k23, \
507-  k24, k25, k26, k27, k28, k29,      k30, k31, k32, k33, k34, k35, \
508-  k36, k37, k38, k39, k40, k41,      k42, k43, k44, k45, k46, k47  \
509-) \
510-{ \
511-	{ k00, k01, k02, k03, k04, k05,      k06, k07, k08, k09, k10, k11 }, \
512-	{ k12, k13, k14, k15, k16, k17,      k18, k19, k20, k21, k22, k23 }, \
513-	{ k24, k25, k26, k27, k28, k29,      k30, k31, k32, k33, k34, k35 }, \
514-	{ k36, k37, k38, k39, k40, k41,      k42, k43, k44, k45, k46, k47 }, \
515+    k00, k01, k02, k03, k04, k05,      k06, k07, k08, k09, k0A, k0B, \
516+    k10, k11, k12, k13, k14, k15,      k16, k17, k18, k19, k1A, k1B, \
517+    k20, k21, k22, k23, k24, k25,      k26, k27, k28, k29, k2A, k2B, \
518+    k30, k31, k32, k33, k34, k35,      k36, k37, k38, k39, k3A, k3B \
519+) { \
520+    { k00, k01, k02, k03, k04, k05,      k06, k07, k08, k09, k0A, k0B }, \
521+    { k10, k11, k12, k13, k14, k15,      k16, k17, k18, k19, k1A, k1B }, \
522+    { k20, k21, k22, k23, k24, k25,      k26, k27, k28, k29, k2A, k2B }, \
523+    { k30, k31, k32, k33, k34, k35,      k36, k37, k38, k39, k3A, k3B } \
524 }
525 
526 #define LAYOUT LAYOUT_ortho_4x12
527-
528-#endif