aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Sung <nattyman@gmail.com>2012-10-08 22:44:12 +0900
committerJeffrey Sung <nattyman@gmail.com>2012-10-08 22:44:12 +0900
commitd1117dca320c09d4cbb34a9ad6c24550d37ae81f (patch)
treefead3422d2b68b616cbb03b03607b5bba8aa58b2
parent3830de7839890e78c150971e4fa2649968f3ed2a (diff)
downloadqmk_firmware-d1117dca320c09d4cbb34a9ad6c24550d37ae81f.tar.gz
qmk_firmware-d1117dca320c09d4cbb34a9ad6c24550d37ae81f.zip
Power key support
debounce issue exists
-rw-r--r--keyboard/IIgs_Standard/README16
-rw-r--r--keyboard/IIgs_Standard/keymap.c278
-rw-r--r--keyboard/IIgs_Standard/matrix.c17
3 files changed, 160 insertions, 151 deletions
diff --git a/keyboard/IIgs_Standard/README b/keyboard/IIgs_Standard/README
index c3f0da3ba..48d9470f6 100644
--- a/keyboard/IIgs_Standard/README
+++ b/keyboard/IIgs_Standard/README
@@ -1,4 +1,4 @@
1Alternative Controller for Apple IIgs/Standard(M0116) 1Replacable USB Controller for Apple IIgs/Standard(M0116)
2JeffreySung(nattyman@gmail.com) 2JeffreySung(nattyman@gmail.com)
3 3
4=============================== 4===============================
@@ -8,14 +8,14 @@ Feature
8- Replaceable keyboard controller for Apple IIgs(A9M0330)/Standard(M0116) 8- Replaceable keyboard controller for Apple IIgs(A9M0330)/Standard(M0116)
9- Teensy++ 2.0 required 9- Teensy++ 2.0 required
10- Some signal bypass required 10- Some signal bypass required
11- ADB keyboard doesn't use matrix for modifier keys. With virtual row for modifier keys, these keys are merged into key matrix. 11- ADB keyboard doesn't use matrix for modifier keys. With virtual row for modifier keys,
12- Power key couldn't be used because power key is not connected to controller. 12 these keys are merged into key matrix using virtual row.
13 13
14History 14History
15======= 15=======
16- 2012.09.17 First Release 16- 2012.09.17 First Release
17- 2012.09.17 CapsLock support 17- 2012.09.17 CapsLock support
18 18- 2012.09.19 Power button added
19Build 19Build
20===== 20=====
210. Just Type "Make" and return. 210. Just Type "Make" and return.
@@ -29,9 +29,9 @@ PJRC Teensy
29 -7,26(in keyboard PCB, these pins are VDD,GND) 29 -7,26(in keyboard PCB, these pins are VDD,GND)
30 -30,31(in Teensy++, these pins are Ref,GND respectively) 30 -30,31(in Teensy++, these pins are Ref,GND respectively)
31 -5,6(D2,D3 for bluetooth in future) 31 -5,6(D2,D3 for bluetooth in future)
321. Bypass 31 pin(from board) to E4(Teensy) 321. Bypass #31 pin(from board) to E4(Teensy)
332. Bypass 30 pin(from board) to F2(Teensy) 332. Bypass #30 pin(from board) to F2(Teensy)
343. Bypass 6 pin(from board) to A0(Teensy) 343. Bypass #6 pin(from board) to A0(Teensy)
354. Refer doc directory 354. Refer doc directory
36 36
37To Do 37To Do
diff --git a/keyboard/IIgs_Standard/keymap.c b/keyboard/IIgs_Standard/keymap.c
index 8efd2ee0e..77f3cd4d3 100644
--- a/keyboard/IIgs_Standard/keymap.c
+++ b/keyboard/IIgs_Standard/keymap.c
@@ -1,136 +1,142 @@
1/* 1/*
2Copyright 2012 Jeffrey Sung <nattyman@gmail.com> 2Copyright 2012 Jeffrey Sung <nattyman@gmail.com>
3 3
4This program is free software: you can redistribute it and/or modify 4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by 5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or 6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version. 7(at your option) any later version.
8 8
9This program is distributed in the hope that it will be useful, 9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of 10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details. 12GNU General Public License for more details.
13 13
14You should have received a copy of the GNU General Public License 14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>. 15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/ 16*/
17 17
18/* 18/*
19 * Keymap for Apple IIgs/Standard Keyboard 19 * Keymap for Apple IIgs/Standard Keyboard
20 */ 20 */
21#include <stdint.h> 21#include <stdint.h>
22#include <stdbool.h> 22#include <stdbool.h>
23#include <avr/pgmspace.h> 23#include <avr/pgmspace.h>
24#include "usb_keycodes.h" 24#include "usb_keycodes.h"
25#include "print.h" 25#include "print.h"
26#include "debug.h" 26#include "debug.h"
27#include "util.h" 27#include "util.h"
28#include "keymap.h" 28#include "keymap.h"
29 29
30 30
31// Convert physical keyboard layout to matrix array. 31// Convert physical keyboard layout to matrix array.
32// This is a macro to define keymap easily in keyboard layout form. 32// This is a macro to define keymap easily in keyboard layout form.
33#define KEYMAP( \ 33#define KEYMAP( R10C5, \
34 R3C7, R3C6, R3C5, R3C4, R3C3, R3C2, R3C1, R8C1, R8C0, R3C0, R0C0, R0C1, R0C2, R0C3, R4C4, R4C5, R4C6, R4C7, \ 34 R3C7, R3C6, R3C5, R3C4, R3C3, R3C2, R3C1, R8C1, R8C0, R3C0, R0C0, R0C1, R0C2, R0C3, R4C4, R4C5, R4C6, R4C7, \
35 R9C7, R9C6, R9C5, R9C4, R9C3, R9C2, R9C1, R9C0, R1C0, R1C1, R1C2, R1C3, R1C4, R2C4, R2C5, R2C6, R2C3, \ 35 R9C7, R9C6, R9C5, R9C4, R9C3, R9C2, R9C1, R9C0, R1C0, R1C1, R1C2, R1C3, R1C4, R2C4, R2C5, R2C6, R2C3, \
36 R10C0,R7C7, R7C6, R7C5, R7C4, R7C3, R7C2, R7C1, R7C0, R0C4, R1C6, R1C7, R1C5, R2C0, R2C1, R2C2, R2C7, \ 36 R10C0,R7C7, R7C6, R7C5, R7C4, R7C3, R7C2, R7C1, R7C0, R0C4, R1C6, R1C7, R1C5, R2C0, R2C1, R2C2, R2C7, \
37 R10C1,R6C7, R6C6, R6C5, R6C4, R6C3, R6C2, R6C1, R6C0, R0C5, R0C6, R4C0, R4C1, R4C2, \ 37 R10C1,R6C7, R6C6, R6C5, R6C4, R6C3, R6C2, R6C1, R6C0, R0C5, R0C6, R4C0, R4C1, R4C2, \
38 R10C4,R10C2,R10C3,R5C4, R5C7, R5C5, R5C6, R5C0, R5C2, R0C7, R5C1, R5C3, R4C3 \ 38 R10C4,R10C2,R10C3,R5C4, R5C7, R5C5, R5C6, R5C0, R5C2, R0C7, R5C1, R5C3, R4C3 \
39) { \ 39) { \
40 { R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \ 40 { R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \
41 { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \ 41 { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \
42 { R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7 }, \ 42 { R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, R2C7 }, \
43 { R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \ 43 { R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \
44 { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7 }, \ 44 { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7 }, \
45 { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \ 45 { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \
46 { R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, R6C7 }, \ 46 { R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, R6C7 }, \
47 { R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, R7C7 }, \ 47 { R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, R7C7 }, \
48 { R8C0, R8C1, KB_NO, KB_NO, KB_NO,KB_NO, KB_NO, KB_NO }, \ 48 { R8C0, R8C1, KB_NO, KB_NO, KB_NO,KB_NO, KB_NO, KB_NO }, \
49 { R9C0, R9C1, R9C2, R9C3, R9C4, R9C5, R9C6, R9C7 }, \ 49 { R9C0, R9C1, R9C2, R9C3, R9C4, R9C5, R9C6, R9C7 }, \
50 { R10C0,R10C1, R10C2, R10C3, R10C4,KB_NO, KB_NO, KB_NO} \ 50 { R10C0,R10C1, R10C2, R10C3, R10C4,R10C5, KB_NO, KB_NO} \
51} 51}
52 52
53#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) 53#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
54 54
55 55
56// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. 56// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
57static const uint8_t PROGMEM fn_layer[] = { 57static const uint8_t PROGMEM fn_layer[] = {
58 0, // Fn0 58 0, // Fn0
59 1, // Fn1 59 1, // Fn1
60 2, // Fn2 60 2, // Fn2
61 3, // Fn3 61 3, // Fn3
62 4, // Fn4 62 4, // Fn4
63 0, // Fn5 63 0, // Fn5
64 3, // Fn6 64 3, // Fn6
65 3 // Fn7 65 3 // Fn7
66}; 66};
67 67
68// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer. 68// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
69// See layer.c for details. 69// See layer.c for details.
70static const uint8_t PROGMEM fn_keycode[] = { 70static const uint8_t PROGMEM fn_keycode[] = {
71 KB_NO, // Fn0 71 KB_NO, // Fn0
72 KB_NO, // Fn1 72 KB_NO, // Fn1
73 KB_SLSH, // Fn2 73 KB_SLSH, // Fn2
74 KB_SCLN, // Fn3 74 KB_SCLN, // Fn3
75 KB_SPC, // Fn4 75 KB_SPC, // Fn4
76 KB_NO, // Fn5 76 KB_NO, // Fn5
77 KB_NO, // Fn6 77 KB_NO, // Fn6
78 KB_NO // Fn7 78 KB_NO // Fn7
79}; 79};
80 80
81static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 81static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
82 /* Layer 0: Default Layer 82 /* Layer 0: Default Layer
83 * ,-----------------------------------------------------------. ,---------------, 83 * ,-----------------------------------------------------------. ,---------------,
84 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |FN0| = | / | * | 84 * | POWER | | |
85 * |-----------------------------------------------------------| |---------------| 85 * |-----------------------------------------------------------| |---------------|
86 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7 | 8 | 9 | + | 86 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |FN0| = | / | * |
87 * |-----------------------------------------------------' | |---------------| 87 * |-----------------------------------------------------------| |---------------|
88 * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | | 4 | 5 | 6 | - | 88 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7 | 8 | 9 | + |
89 * |-----------------------------------------------------------| |---------------| 89 * |-----------------------------------------------------' | |---------------|
90 * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | | 1 | 2 | 3 | E | 90 * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | | 4 | 5 | 6 | - |
91 * |-----------------------------------------------------------| |-----------| N | 91 * |-----------------------------------------------------------| |---------------|
92 * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | 92 * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | | 1 | 2 | 3 | E |
93 * `-----------------------------------------------------------' |---------------' 93 * |-----------------------------------------------------------| |-----------| N |
94 */ 94 * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T |
95 KEYMAP(KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSPC, KB_FN1, KB_PEQL, KB_PSLS, KB_PAST, \ 95 * `-----------------------------------------------------------' |---------------'
96 KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC, KB_P7, KB_P8, KB_P9, KB_PPLS, \ 96 */
97 KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_SCLN, KB_QUOT,KB_ENT, KB_P4, KB_P5, KB_P6, KB_PMNS, \ 97 KEYMAP( KB_PWR,
98 KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_SLSH, KB_P1, KB_P2, KB_P3, \ 98 KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSPC, KB_FN1, KB_PEQL, KB_PSLS, KB_PAST, \
99 KB_CAPS,KB_LALT,KB_LGUI,KB_GRV, KB_SPC, KB_BSLS,KB_LEFT,KB_RGHT,KB_DOWN,KB_UP, KB_P0, KB_PDOT, KB_PENT), 99 KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC, KB_P7, KB_P8, KB_P9, KB_PPLS, \
100 100 KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_SCLN, KB_QUOT,KB_ENT, KB_P4, KB_P5, KB_P6, KB_PMNS, \
101 101 KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_SLSH, KB_P1, KB_P2, KB_P3, \
102 /* Layer 1: Tenkey use Layer 102 KB_CAPS,KB_LALT,KB_LGUI,KB_GRV, KB_SPC, KB_BSLS,KB_LEFT,KB_RGHT,KB_DOWN,KB_UP, KB_P0, KB_PDOT, KB_PENT),
103 * ,-----------------------------------------------------------. ,---------------, 103
104 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |NLK| = | / | * | 104
105 * |-----------------------------------------------------------| |---------------| 105 /* Layer 1: Tenkey use Layer
106 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |INS| 8 |PGU|V+ | 106 * ,-----------------------------------------------------------. ,---------------,
107 * |-----------------------------------------------------' | |---------------| 107 * | POWER | | |
108 * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | |DEL|UP |PGD|V- | 108 * |-----------------------------------------------------------| |---------------|
109 * |-----------------------------------------------------------| |---------------| 109 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |NLK| = | / | * |
110 * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | |LFT|DN |RGT| E | 110 * |-----------------------------------------------------------| |---------------|
111 * |-----------------------------------------------------------| |-----------| N | 111 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |INS| 8 |PGU|V+ |
112 * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T | 112 * |-----------------------------------------------------' | |---------------|
113 * `-----------------------------------------------------------' `---------------' 113 * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return | |DEL|UP |PGD|V- |
114 */ 114 * |-----------------------------------------------------------| |---------------|
115 KEYMAP(KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSPC, KB_FN0, KB_PEQL, KB_PSLS, KB_MUTE, \ 115 * |Shift | Z| X| C| V| B| N| M| ,| .| / |Shift | |LFT|DN |RGT| E |
116 KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC, KB_INS, KB_P8, KB_PGUP, KB_VOLU, \ 116 * |-----------------------------------------------------------| |-----------| N |
117 KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_SCLN, KB_QUOT,KB_ENT, KB_DEL, KB_UP, KB_PGDN, KB_VOLD, \ 117 * |CAPS|Alt |Gui |` |SPC |BSLS |LFT|RGT|DN|UP| | 0 | . | T |
118 KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_SLSH, KB_LEFT, KB_DOWN, KB_RIGHT, \ 118 * `-----------------------------------------------------------' `---------------'
119 KB_CAPS,KB_LALT,KB_LGUI,KB_GRV, KB_SPC, KB_BSLS,KB_LEFT,KB_RGHT,KB_DOWN,KB_UP, KB_P0, KB_PDOT, KB_PENT), 119 */
120}; 120 KEYMAP( KB_PWR, \
121 121 KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSPC, KB_FN1, KB_PEQL, KB_PSLS, KB_MUTE, \
122 122 KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC, KB_INS, KB_P8, KB_PGUP, KB_VOLU, \
123uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) 123 KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_SCLN, KB_QUOT,KB_ENT, KB_DEL, KB_UP, KB_PGDN, KB_VOLD, \
124{ 124 KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_SLSH, KB_LEFT, KB_DOWN, KB_RIGHT, \
125 return KEYCODE(layer, row, col); 125 KB_CAPS,KB_LALT,KB_LGUI,KB_GRV, KB_SPC, KB_BSLS,KB_LEFT,KB_RGHT,KB_DOWN,KB_UP, KB_P0, KB_PDOT, KB_PENT),
126} 126};
127 127
128uint8_t keymap_fn_layer(uint8_t fn_bits) 128
129{ 129uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
130 return pgm_read_byte(&fn_layer[biton(fn_bits)]); 130{
131} 131 return KEYCODE(layer, row, col);
132 132}
133uint8_t keymap_fn_keycode(uint8_t fn_bits) 133
134{ 134uint8_t keymap_fn_layer(uint8_t fn_bits)
135 return pgm_read_byte(&fn_keycode[(biton(fn_bits))]); 135{
136} 136 return pgm_read_byte(&fn_layer[biton(fn_bits)]);
137}
138
139uint8_t keymap_fn_keycode(uint8_t fn_bits)
140{
141 return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
142}
diff --git a/keyboard/IIgs_Standard/matrix.c b/keyboard/IIgs_Standard/matrix.c
index 89a09877d..6cd806e2d 100644
--- a/keyboard/IIgs_Standard/matrix.c
+++ b/keyboard/IIgs_Standard/matrix.c
@@ -86,6 +86,8 @@ void matrix_init(void)
86 PORTC |= 0b01111111; 86 PORTC |= 0b01111111;
87 DDRE &= ~0b00000010; 87 DDRE &= ~0b00000010;
88 PORTE |= 0b00000010; 88 PORTE |= 0b00000010;
89 //DDRB &= ~0b00000100;
90 //PORTB |= 0b00000100;
89 // modifier B3/4,F4/5,E4 always input 91 // modifier B3/4,F4/5,E4 always input
90 // A0 92 // A0
91 //DDRA |= 0b00000001; 93 //DDRA |= 0b00000001;
@@ -255,12 +257,13 @@ static uint8_t read_col(uint8_t row)
255 // Modifier would be copied to report->mods except E4(CAPSLOCK) 257 // Modifier would be copied to report->mods except E4(CAPSLOCK)
256 uint8_t tmp; 258 uint8_t tmp;
257 if ( row == 10 ) { 259 if ( row == 10 ) {
258 tmp = 0xE0; 260 tmp = 0xC0;
259 tmp |= (PINB >> 3 ) & 0b00000011; // LEFT CTRL is 0bit in modifier (HID Spec) 261 tmp |= (PINB >> 3 ) & 0b00000011; // LEFT CTRL is 0bit in modifier (HID Spec)
260 // LEFT SHIFT is 1bit in modifier (HID Spec) 262 // LEFT SHIFT is 1bit in modifier (HID Spec)
261 tmp |= (PINF >> 3 ) & 0b00000100; // LEFT ALT is 2bit in modifier (HID Spec) 263 tmp |= (PINF >> 3 ) & 0b00000100; // LEFT ALT is 2bit in modifier (HID Spec)
262 tmp |= (PINF >> 1 ) & 0b00001000; // LEFT GUI is 3bit in modifier (HID Spec) 264 tmp |= (PINF >> 1 ) & 0b00001000; // LEFT GUI is 3bit in modifier (HID Spec)
263 tmp |= (PINA << 4 ) & 0b00010000; // 265 tmp |= (PINA << 4 ) & 0b00010000; // CAPSLOCK
266 tmp |= (PINB << 3 ) & 0b00100000; // POWER
264 //tmp |= (PINE << 1 ) & 0b00010000; // Caps Lock(Should not be in modifier 267 //tmp |= (PINE << 1 ) & 0b00010000; // Caps Lock(Should not be in modifier
265 } else { 268 } else {
266 tmp = 0x00; 269 tmp = 0x00;
@@ -284,10 +287,10 @@ static void unselect_rows(void)
284 DDRF &= ~0b11000111; // PF: 7,6,2,1,0 287 DDRF &= ~0b11000111; // PF: 7,6,2,1,0
285 PORTF &= ~0b11000111; 288 PORTF &= ~0b11000111;
286 // to unselect virtual row(modifier), set port to output with low 289 // to unselect virtual row(modifier), set port to output with low
287 DDRA |= 0b00000001; // PA: 0 290 DDRA |= 0b00000001; // PA: 0 for CAPSLOCK
288 PORTA &= ~0b00000001; 291 PORTA &= ~0b00000001;
289 DDRB |= 0b00011000; // PB: 3,4 for modifier(row10) 292 DDRB |= 0b00011100; // PB: 3,4 for modifier(row10)
290 PORTB &= ~0b00011000; 293 PORTB &= ~0b00011100; // PB: 2 for power
291 DDRF |= 0b00110000; // PF: 4,5 for modifier 294 DDRF |= 0b00110000; // PF: 4,5 for modifier
292 PORTF &= ~0b00110000; 295 PORTF &= ~0b00110000;
293} 296}
@@ -345,8 +348,8 @@ static void select_row(uint8_t row)
345 // to select virtual row, set port as input 348 // to select virtual row, set port as input
346 DDRA &= ~0b00000001; 349 DDRA &= ~0b00000001;
347 PORTA |= 0b00000001; 350 PORTA |= 0b00000001;
348 DDRB &= ~0b00011000; 351 DDRB &= ~0b00011100;
349 PORTB |= 0b00011000; 352 PORTB |= 0b00011100;
350 DDRF &= ~0b00110000; 353 DDRF &= ~0b00110000;
351 PORTF |= 0b00110000; 354 PORTF |= 0b00110000;
352 break; 355 break;