Skip to content

Commit

Permalink
Initial support for M0116 with multiple keymaps
Browse files Browse the repository at this point in the history
Working, but very slow, dropping keys all over the place
  • Loading branch information
tufty committed Dec 4, 2012
1 parent b6e07aa commit 97d7ca3
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 9 deletions.
3 changes: 3 additions & 0 deletions common/keyboard.c
Expand Up @@ -204,6 +204,9 @@ static void register_code(uint8_t code)
case KC_MEDIA_SELECT:
usage = AL_CC_CONFIG;
break;
case KC_MEDIA_EJECT:
usage = TRANSPORT_STOP_EJECT;
break;
case KC_MAIL:
usage = AL_EMAIL;
break;
Expand Down
4 changes: 3 additions & 1 deletion common/keycode.h
Expand Up @@ -137,6 +137,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define KC_MSTP KC_MEDIA_STOP
#define KC_MPLY KC_MEDIA_PLAY_PAUSE
#define KC_MSEL KC_MEDIA_SELECT
#define KC_EJCT KC_MEDIA_EJECT
#define KC_MAIL KC_MAIL
#define KC_CALC KC_CALCULATOR
#define KC_MYCM KC_MY_COMPUTER
Expand Down Expand Up @@ -410,7 +411,8 @@ enum internal_special_keycodes {
KC_WWW_STOP,
KC_WWW_REFRESH, /* 0xC0 */
KC_WWW_FAVORITES, /* 0xC1 */
/* 0xC2-DF vacant for future use */
KC_MEDIA_EJECT,
/* 0xC3-DF vacant for future use */

/* 0xE0-E7 for Modifiers. DO NOT USE. */

Expand Down
1 change: 1 addition & 0 deletions common/report.h
Expand Up @@ -41,6 +41,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TRANSPORT_NEXT_TRACK 0x00B5
#define TRANSPORT_PREV_TRACK 0x00B6
#define TRANSPORT_STOP 0x00B7
#define TRANSPORT_STOP_EJECT 0x00CC
#define TRANSPORT_PLAY_PAUSE 0x00CD
#define AL_CC_CONFIG 0x0183
#define AL_EMAIL 0x018A
Expand Down
19 changes: 11 additions & 8 deletions converter/adb_usb/config.h
Expand Up @@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 8 // keycode bit: 6-4

/* Locking Caps Lock support */
#define MATRIX_HAS_LOCKING_CAPS
//#define MATRIX_HAS_LOCKING_CAPS

#define MATRIX_ROW(code) ((code)>>3&0x0F)
#define MATRIX_COL(code) ((code)&0x07)
Expand All @@ -44,19 +44,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define MOUSEKEY_DELAY_TIME 192
#endif

/* keyboard type */
#define ADB_M0116

/* ADB port setting */
#define ADB_PORT PORTF
#define ADB_PIN PINF
#define ADB_DDR DDRF
#define ADB_DATA_BIT 0
#define ADB_PORT PORTC
#define ADB_PIN PINC
#define ADB_DDR DDRC
#define ADB_DATA_BIT 7
//#define ADB_PSW_BIT 1 // optional

/* key combination for command */
#include "adb.h"
#include "matrix.h"
#define IS_COMMAND() ( \
matrix_is_on(MATRIX_ROW(ADB_POWER), MATRIX_COL(ADB_POWER)) \
)
#define IS_COMMAND() false
//#define IS_COMMAND() ( \
// matrix_is_on(MATRIX_ROW(ADB_POWER), MATRIX_COL(ADB_POWER)) \
//)

#endif
108 changes: 108 additions & 0 deletions converter/adb_usb/keymap.c
Expand Up @@ -31,6 +31,113 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.

#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))

#ifdef ADB_M0116

// Keymap for ADB M0116 (compact mac) keyboard
#define KEYMAP( \
K7F, \
K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K4E, \
K36,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K53,K54,K55, \
K39,K3A,K37,K32, K31, K2A,K3B,K3C,K3D,K3E, K52, K41,K4C \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
{ KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
{ KC_NO, KC_##K41, KC_NO, KC_##K43, KC_NO, KC_##K45, KC_NO, KC_##K47 }, \
{ KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_NO }, \
{ KC_NO, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO , KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO , KC_NO, KC_NO , KC_##K7B, KC_NO, KC_NO, KC_NO, KC_##K7F } \
}

// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
static const uint8_t PROGMEM fn_layer[] = {
0, // Fn0
1, // Fn1
0, // Fn2
0, // Fn3
0, // Fn4
0, // Fn5
0, // Fn6
0 // Fn7
};

// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
// See layer.c for details.
static const uint8_t PROGMEM fn_keycode[] = {
KC_NO, // Fn0
KC_NO, // Fn1
KC_NO, // Fn2
KC_NO, // Fn3
KC_NO, // Fn4
KC_NO, // Fn5
KC_NO, // Fn6
KC_NO // Fn7
};

static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer : plain keymap
* +-------+
* | power |
* +-------+
* +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+
* |esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | bks | |clr| = | / | * |
* +---------------------------------------------------------+ +---+---+---+---+
* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | + |
* +-----------------------------------------------------+ | +---+---+---+---+
* | ctrl | a | s | d | f | g | h | j | k | l | ; | ' |return| | 4 | 5 | 6 | - |
* +---------------------------------------------------------+ +---+---+---+---+
* | shift | z | x | c | v | b | n | m | , | . | / | shift | | 1 | 2 | 3 | |
* +---------------------------------------------------------+ +-------+---|ent|
* |Fn1|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
* +---------------------------------------------------------+ +-------+---+---+
*/
KEYMAP(
PWR,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, DEL, EQL, PSLS,PAST,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, P7, P8, P9, PPLS,
LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, P4, P5, P6, PMNS,
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, P1, P2, P3,
FN1,LALT,LGUI,GRV, SPC, BSLS,LEFT,RGHT,DOWN,UP, P0, PDOT,PENT
),
/* Layer 1 :
* +-------+
* | Eject |
* +-------+
* +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+
* |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| | | | | |Mut|
* +---------------------------------------------------------+ +---+---+---+---+
* | | | | | | | | | | | | | | | | | | |VoU|
* +-----------------------------------------------------+ | +---+---+---+---+
* | | | | | | | | | | | | | | | | | |VoD|
* +---------------------------------------------------------+ +---+---+---+---+
* |Capslock| | | | | | | | | | |Capslock| | | | | |
* +---------------------------------------------------------+ +-------+---| |
* |Fn1| | | | | |Hom|End|PgD|PgU| | | | |
* +---------------------------------------------------------+ +-------+---+---+
*/
KEYMAP(
EJCT,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10,F11,F12, NO, NO, NO, NO, MUTE,
NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, VOLD,
NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, VOLU,
CAPS, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, CAPS, NO, NO, NO,
FN1,NO , NO, NO, NO, NO, HOME,END,PGDN,PGUP, NO, NO, NO
),
};


#else
// Convert physical keyboard layout to matrix array.
// This is a macro to define keymap easily in keyboard layout form.
/* Apple Extended Keyboard */
Expand Down Expand Up @@ -113,6 +220,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};

#endif

uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
{
Expand Down

0 comments on commit 97d7ca3

Please sign in to comment.