Adding support for the Micro Switch 8304 Hall Effect Keyboard
- Full support (NKRO, provided the USB module can handle it) - Full LED support (available to the macro modules per input signals) - Reset/Hold line support - Handles repeat rate issues (keyboard does not send key updates as most keyboards do...)
This commit is contained in:
parent
a017d2f270
commit
0c562995c7
@ -13,6 +13,10 @@ cmake_force_c_compiler ( avr-gcc AVRCCompiler )
|
|||||||
cmake_force_cxx_compiler( avr-g++ AVRCxxCompiler )
|
cmake_force_cxx_compiler( avr-g++ AVRCxxCompiler )
|
||||||
|
|
||||||
|
|
||||||
|
#| Add Dependency Macro
|
||||||
|
include( AddFileDependencies )
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# Project Description
|
# Project Description
|
||||||
#
|
#
|
||||||
@ -38,7 +42,13 @@ cmake_minimum_required( VERSION 2.8 )
|
|||||||
|
|
||||||
#| Instead, include the module source selector
|
#| Instead, include the module source selector
|
||||||
include( setup.cmake )
|
include( setup.cmake )
|
||||||
set( SRCS main.c ${SCAN_SRCS} ${MACRO_SRCS} ${USB_SRCS} ${DEBUG_SRCS} )
|
set( SRCS
|
||||||
|
main.c
|
||||||
|
${SCAN_SRCS}
|
||||||
|
${MACRO_SRCS}
|
||||||
|
${USB_SRCS}
|
||||||
|
${DEBUG_SRCS}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +64,7 @@ set( SRCS main.c ${SCAN_SRCS} ${MACRO_SRCS} ${USB_SRCS} ${DEBUG_SRCS} )
|
|||||||
#| "atmega32u4" # Teensy 2.0
|
#| "atmega32u4" # Teensy 2.0
|
||||||
#| "at90usb646" # Teensy++ 1.0
|
#| "at90usb646" # Teensy++ 1.0
|
||||||
#| "at90usb1286" # Teensy++ 2.0
|
#| "at90usb1286" # Teensy++ 2.0
|
||||||
set( MCU "at90usb1286" )
|
set( MCU "atmega32u4" )
|
||||||
|
|
||||||
|
|
||||||
#| Compiler flag to set the C Standard level.
|
#| Compiler flag to set the C Standard level.
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "budkeypad.h"
|
#include "budkeypad.h"
|
||||||
#include "heathzenith.h"
|
#include "heathzenith.h"
|
||||||
#include "kaypro1.h"
|
#include "kaypro1.h"
|
||||||
|
#include "microswitch8304.h"
|
||||||
#include "tandy1000.h"
|
#include "tandy1000.h"
|
||||||
|
|
||||||
|
|
||||||
|
296
Keymap/microswitch8304.h
Normal file
296
Keymap/microswitch8304.h
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
/* Copyright (C) 2011 by Jacob Alexander
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __TANDY1000_H
|
||||||
|
#define __TANDY1000_H
|
||||||
|
|
||||||
|
// This file contains various key layouts for the Tandy 1000 keyboard
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Variables -----
|
||||||
|
static uint8_t microswitch8304_ModifierMask[] = { 0x48, 0x49, 0x4C, 0x4D, 0x45, 0x14 };
|
||||||
|
|
||||||
|
static uint8_t microswitch8304_DefaultMap[] = {
|
||||||
|
KEY_TILDE, // 0x00
|
||||||
|
KEY_UP, // 0x01
|
||||||
|
0, // 0x02
|
||||||
|
0, // 0x03
|
||||||
|
KEY_PRINTSCREEN, // 0x04
|
||||||
|
KEY_PAGE_DOWN, // 0x05
|
||||||
|
KEY_LEFT_BRACE, // 0x06
|
||||||
|
KEY_F11, // 0x07
|
||||||
|
KEY_BACKSPACE, // 0x08
|
||||||
|
KEY_TAB, // 0x09
|
||||||
|
KEY_ENTER, // 0x0A
|
||||||
|
KEY_DOWN, // 0x0B
|
||||||
|
KEY_PAGE_UP, // 0x0C
|
||||||
|
KEYPAD_ENTER, // 0x0D
|
||||||
|
KEY_LEFT, // 0x0E
|
||||||
|
KEY_RIGHT, // 0x0F
|
||||||
|
0, // 0x10
|
||||||
|
KEY_PAGE_UP, // 0x11
|
||||||
|
KEY_F12, // 0x12
|
||||||
|
KEY_PAGE_DOWN, // 0x13
|
||||||
|
KEY_GUI, // 0x14
|
||||||
|
KEY_F1, // 0x15
|
||||||
|
KEY_F2, // 0x16
|
||||||
|
KEY_F3, // 0x17
|
||||||
|
KEY_F4, // 0x18
|
||||||
|
KEY_F5, // 0x19
|
||||||
|
KEY_F6, // 0x1A
|
||||||
|
KEY_ESC, // 0x1B
|
||||||
|
KEY_F7, // 0x1C
|
||||||
|
KEY_F8, // 0x1D
|
||||||
|
KEY_F9, // 0x1E
|
||||||
|
KEY_F10, // 0x1F
|
||||||
|
KEY_SPACE, // 0x20
|
||||||
|
KEYPAD_9, // 0x21
|
||||||
|
0, // 0x22
|
||||||
|
0, // 0x23
|
||||||
|
0, // 0x24
|
||||||
|
0, // 0x25
|
||||||
|
0, // 0x26
|
||||||
|
KEY_QUOTE, // 0x27
|
||||||
|
0, // 0x28
|
||||||
|
0, // 0x29
|
||||||
|
0, // 0x2A
|
||||||
|
KEY_EQUAL, // 0x2B
|
||||||
|
KEY_COMMA, // 0x2C
|
||||||
|
KEY_MINUS, // 0x2D
|
||||||
|
KEY_PERIOD, // 0x2E
|
||||||
|
KEY_SLASH, // 0x2F
|
||||||
|
KEY_0, // 0x30
|
||||||
|
KEY_1, // 0x31
|
||||||
|
KEY_2, // 0x32
|
||||||
|
KEY_3, // 0x33
|
||||||
|
KEY_4, // 0x34
|
||||||
|
KEY_5, // 0x35
|
||||||
|
KEY_6, // 0x36
|
||||||
|
KEY_7, // 0x37
|
||||||
|
KEY_8, // 0x38
|
||||||
|
KEY_9, // 0x39
|
||||||
|
0, // 0x3A
|
||||||
|
KEY_SEMICOLON, // 0x3B
|
||||||
|
0, // 0x3C
|
||||||
|
KEY_EQUAL, // 0x3D
|
||||||
|
0, // 0x3E
|
||||||
|
0, // 0x3F
|
||||||
|
0, // 0x40
|
||||||
|
KEYPAD_6, // 0x41
|
||||||
|
KEYPAD_MINUS, // 0x42
|
||||||
|
KEY_PAUSE, // 0x43
|
||||||
|
KEY_INSERT, // 0x44
|
||||||
|
KEY_CTRL, // 0x45
|
||||||
|
KEYPAD_2, // 0x46
|
||||||
|
KEYPAD_3, // 0x47
|
||||||
|
KEY_LEFT_SHIFT, // 0x48
|
||||||
|
KEY_RIGHT_SHIFT, // 0x49
|
||||||
|
KEYPAD_0, // 0x4A
|
||||||
|
KEYPAD_PERIOD, // 0x4B
|
||||||
|
KEY_LEFT_ALT, // 0x4C
|
||||||
|
KEY_RIGHT_ALT, // 0x4D
|
||||||
|
0, // 0x4E
|
||||||
|
0, // 0x4F
|
||||||
|
0, // 0x50
|
||||||
|
0, // 0x51
|
||||||
|
0, // 0x52
|
||||||
|
0, // 0x53
|
||||||
|
0, // 0x54
|
||||||
|
0, // 0x55
|
||||||
|
0, // 0x56
|
||||||
|
0, // 0x57
|
||||||
|
0, // 0x58
|
||||||
|
0, // 0x59
|
||||||
|
0, // 0x5A
|
||||||
|
KEY_RIGHT_BRACE, // 0x5B
|
||||||
|
KEYPAD_7, // 0x5C
|
||||||
|
KEY_BACKSLASH, // 0x5D
|
||||||
|
KEY_ESC, // 0x5E
|
||||||
|
0, // 0x5F
|
||||||
|
KEYPAD_1, // 0x60
|
||||||
|
KEY_A, // 0x61
|
||||||
|
KEY_B, // 0x62
|
||||||
|
KEY_C, // 0x63
|
||||||
|
KEY_D, // 0x64
|
||||||
|
KEY_E, // 0x65
|
||||||
|
KEY_F, // 0x66
|
||||||
|
KEY_G, // 0x67
|
||||||
|
KEY_H, // 0x68
|
||||||
|
KEY_I, // 0x69
|
||||||
|
KEY_J, // 0x6A
|
||||||
|
KEY_K, // 0x6B
|
||||||
|
KEY_L, // 0x6C
|
||||||
|
KEY_M, // 0x6D
|
||||||
|
KEY_N, // 0x6E
|
||||||
|
KEY_O, // 0x6F
|
||||||
|
KEY_P, // 0x70
|
||||||
|
KEY_Q, // 0x71
|
||||||
|
KEY_R, // 0x72
|
||||||
|
KEY_S, // 0x73
|
||||||
|
KEY_T, // 0x74
|
||||||
|
KEY_U, // 0x75
|
||||||
|
KEY_V, // 0x76
|
||||||
|
KEY_W, // 0x77
|
||||||
|
KEY_X, // 0x78
|
||||||
|
KEY_Y, // 0x79
|
||||||
|
KEY_Z, // 0x7A
|
||||||
|
KEYPAD_4, // 0x7B
|
||||||
|
KEYPAD_8, // 0x7C
|
||||||
|
KEYPAD_5, // 0x7D
|
||||||
|
0, // 0x7E
|
||||||
|
KEY_DELETE, // 0x7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint8_t microswitch8304_ColemakMap[] = {
|
||||||
|
KEY_TILDE, // 0x00
|
||||||
|
KEY_UP, // 0x01
|
||||||
|
0, // 0x02
|
||||||
|
0, // 0x03
|
||||||
|
KEY_PRINTSCREEN, // 0x04
|
||||||
|
KEY_PAGE_DOWN, // 0x05
|
||||||
|
KEY_LEFT_BRACE, // 0x06
|
||||||
|
KEY_F11, // 0x07
|
||||||
|
KEY_BACKSPACE, // 0x08
|
||||||
|
KEY_TAB, // 0x09
|
||||||
|
KEY_ENTER, // 0x0A
|
||||||
|
KEY_DOWN, // 0x0B
|
||||||
|
KEY_PAGE_UP, // 0x0C
|
||||||
|
KEYPAD_ENTER, // 0x0D
|
||||||
|
KEY_LEFT, // 0x0E
|
||||||
|
KEY_RIGHT, // 0x0F
|
||||||
|
0, // 0x10
|
||||||
|
KEY_PAGE_UP, // 0x11
|
||||||
|
KEY_F12, // 0x12
|
||||||
|
KEY_PAGE_DOWN, // 0x13
|
||||||
|
KEY_GUI, // 0x14
|
||||||
|
KEY_F1, // 0x15
|
||||||
|
KEY_F2, // 0x16
|
||||||
|
KEY_F3, // 0x17
|
||||||
|
KEY_F4, // 0x18
|
||||||
|
KEY_F5, // 0x19
|
||||||
|
KEY_F6, // 0x1A
|
||||||
|
KEY_ESC, // 0x1B
|
||||||
|
KEY_F7, // 0x1C
|
||||||
|
KEY_F8, // 0x1D
|
||||||
|
KEY_F9, // 0x1E
|
||||||
|
KEY_F10, // 0x1F
|
||||||
|
KEY_SPACE, // 0x20
|
||||||
|
KEYPAD_9, // 0x21
|
||||||
|
0, // 0x22
|
||||||
|
0, // 0x23
|
||||||
|
0, // 0x24
|
||||||
|
0, // 0x25
|
||||||
|
0, // 0x26
|
||||||
|
KEY_QUOTE, // 0x27
|
||||||
|
0, // 0x28
|
||||||
|
0, // 0x29
|
||||||
|
0, // 0x2A
|
||||||
|
KEY_EQUAL, // 0x2B
|
||||||
|
KEY_COMMA, // 0x2C
|
||||||
|
KEY_MINUS, // 0x2D
|
||||||
|
KEY_PERIOD, // 0x2E
|
||||||
|
KEY_SLASH, // 0x2F
|
||||||
|
KEY_0, // 0x30
|
||||||
|
KEY_1, // 0x31
|
||||||
|
KEY_2, // 0x32
|
||||||
|
KEY_3, // 0x33
|
||||||
|
KEY_4, // 0x34
|
||||||
|
KEY_5, // 0x35
|
||||||
|
KEY_6, // 0x36
|
||||||
|
KEY_7, // 0x37
|
||||||
|
KEY_8, // 0x38
|
||||||
|
KEY_9, // 0x39
|
||||||
|
0, // 0x3A
|
||||||
|
KEY_O, // 0x3B
|
||||||
|
0, // 0x3C
|
||||||
|
KEY_EQUAL, // 0x3D
|
||||||
|
0, // 0x3E
|
||||||
|
0, // 0x3F
|
||||||
|
0, // 0x40
|
||||||
|
KEYPAD_6, // 0x41
|
||||||
|
KEYPAD_MINUS, // 0x42
|
||||||
|
KEY_PAUSE, // 0x43
|
||||||
|
KEY_INSERT, // 0x44
|
||||||
|
KEY_CTRL, // 0x45
|
||||||
|
KEYPAD_2, // 0x46
|
||||||
|
KEYPAD_3, // 0x47
|
||||||
|
KEY_LEFT_SHIFT, // 0x48
|
||||||
|
KEY_RIGHT_SHIFT, // 0x49
|
||||||
|
KEYPAD_0, // 0x4A
|
||||||
|
KEYPAD_PERIOD, // 0x4B
|
||||||
|
KEY_LEFT_ALT, // 0x4C
|
||||||
|
KEY_RIGHT_ALT, // 0x4D
|
||||||
|
0, // 0x4E
|
||||||
|
0, // 0x4F
|
||||||
|
0, // 0x50
|
||||||
|
0, // 0x51
|
||||||
|
0, // 0x52
|
||||||
|
0, // 0x53
|
||||||
|
0, // 0x54
|
||||||
|
0, // 0x55
|
||||||
|
0, // 0x56
|
||||||
|
0, // 0x57
|
||||||
|
0, // 0x58
|
||||||
|
0, // 0x59
|
||||||
|
0, // 0x5A
|
||||||
|
KEY_RIGHT_BRACE, // 0x5B
|
||||||
|
KEYPAD_7, // 0x5C
|
||||||
|
KEY_BACKSLASH, // 0x5D
|
||||||
|
KEY_ESC, // 0x5E
|
||||||
|
0, // 0x5F
|
||||||
|
KEYPAD_1, // 0x60
|
||||||
|
KEY_A, // 0x61
|
||||||
|
KEY_B, // 0x62
|
||||||
|
KEY_C, // 0x63
|
||||||
|
KEY_S, // 0x64
|
||||||
|
KEY_F, // 0x65
|
||||||
|
KEY_T, // 0x66
|
||||||
|
KEY_D, // 0x67
|
||||||
|
KEY_H, // 0x68
|
||||||
|
KEY_U, // 0x69
|
||||||
|
KEY_N, // 0x6A
|
||||||
|
KEY_E, // 0x6B
|
||||||
|
KEY_I, // 0x6C
|
||||||
|
KEY_M, // 0x6D
|
||||||
|
KEY_K, // 0x6E
|
||||||
|
KEY_Y, // 0x6F
|
||||||
|
KEY_SEMICOLON, // 0x70
|
||||||
|
KEY_Q, // 0x71
|
||||||
|
KEY_P, // 0x72
|
||||||
|
KEY_R, // 0x73
|
||||||
|
KEY_G, // 0x74
|
||||||
|
KEY_L, // 0x75
|
||||||
|
KEY_V, // 0x76
|
||||||
|
KEY_W, // 0x77
|
||||||
|
KEY_X, // 0x78
|
||||||
|
KEY_J, // 0x79
|
||||||
|
KEY_Z, // 0x7A
|
||||||
|
KEYPAD_4, // 0x7B
|
||||||
|
KEYPAD_8, // 0x7C
|
||||||
|
KEYPAD_5, // 0x7D
|
||||||
|
0, // 0x7E
|
||||||
|
KEY_DELETE, // 0x7F
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -25,237 +25,237 @@
|
|||||||
// ----- Defines -----
|
// ----- Defines -----
|
||||||
|
|
||||||
// List of Modifiers
|
// List of Modifiers
|
||||||
#define KEY_CTRL 0x01
|
#define KEY_CTRL 0x01
|
||||||
#define KEY_SHIFT 0x02
|
#define KEY_SHIFT 0x02
|
||||||
#define KEY_ALT 0x04
|
#define KEY_ALT 0x04
|
||||||
#define KEY_GUI 0x08
|
#define KEY_GUI 0x08
|
||||||
#define KEY_LEFT_CTRL 0x01
|
#define KEY_LEFT_CTRL 0x01
|
||||||
#define KEY_LEFT_SHIFT 0x02
|
#define KEY_LEFT_SHIFT 0x02
|
||||||
#define KEY_LEFT_ALT 0x04
|
#define KEY_LEFT_ALT 0x04
|
||||||
#define KEY_LEFT_GUI 0x08
|
#define KEY_LEFT_GUI 0x08
|
||||||
#define KEY_RIGHT_CTRL 0x10
|
#define KEY_RIGHT_CTRL 0x10
|
||||||
#define KEY_RIGHT_SHIFT 0x20
|
#define KEY_RIGHT_SHIFT 0x20
|
||||||
#define KEY_RIGHT_ALT 0x40
|
#define KEY_RIGHT_ALT 0x40
|
||||||
#define KEY_RIGHT_GUI 0x80
|
#define KEY_RIGHT_GUI 0x80
|
||||||
|
|
||||||
// List of Keycodes
|
// List of Keycodes
|
||||||
#define KEY_A 4
|
#define KEY_A 4
|
||||||
#define KEY_B 5
|
#define KEY_B 5
|
||||||
#define KEY_C 6
|
#define KEY_C 6
|
||||||
#define KEY_D 7
|
#define KEY_D 7
|
||||||
#define KEY_E 8
|
#define KEY_E 8
|
||||||
#define KEY_F 9
|
#define KEY_F 9
|
||||||
#define KEY_G 10
|
#define KEY_G 10
|
||||||
#define KEY_H 11
|
#define KEY_H 11
|
||||||
#define KEY_I 12
|
#define KEY_I 12
|
||||||
#define KEY_J 13
|
#define KEY_J 13
|
||||||
#define KEY_K 14
|
#define KEY_K 14
|
||||||
#define KEY_L 15
|
#define KEY_L 15
|
||||||
#define KEY_M 16
|
#define KEY_M 16
|
||||||
#define KEY_N 17
|
#define KEY_N 17
|
||||||
#define KEY_O 18
|
#define KEY_O 18
|
||||||
#define KEY_P 19
|
#define KEY_P 19
|
||||||
#define KEY_Q 20
|
#define KEY_Q 20
|
||||||
#define KEY_R 21
|
#define KEY_R 21
|
||||||
#define KEY_S 22
|
#define KEY_S 22
|
||||||
#define KEY_T 23
|
#define KEY_T 23
|
||||||
#define KEY_U 24
|
#define KEY_U 24
|
||||||
#define KEY_V 25
|
#define KEY_V 25
|
||||||
#define KEY_W 26
|
#define KEY_W 26
|
||||||
#define KEY_X 27
|
#define KEY_X 27
|
||||||
#define KEY_Y 28
|
#define KEY_Y 28
|
||||||
#define KEY_Z 29
|
#define KEY_Z 29
|
||||||
#define KEY_1 30
|
#define KEY_1 30
|
||||||
#define KEY_2 31
|
#define KEY_2 31
|
||||||
#define KEY_3 32
|
#define KEY_3 32
|
||||||
#define KEY_4 33
|
#define KEY_4 33
|
||||||
#define KEY_5 34
|
#define KEY_5 34
|
||||||
#define KEY_6 35
|
#define KEY_6 35
|
||||||
#define KEY_7 36
|
#define KEY_7 36
|
||||||
#define KEY_8 37
|
#define KEY_8 37
|
||||||
#define KEY_9 38
|
#define KEY_9 38
|
||||||
#define KEY_0 39
|
#define KEY_0 39
|
||||||
#define KEY_ENTER 40
|
#define KEY_ENTER 40
|
||||||
#define KEY_ESC 41
|
#define KEY_ESC 41
|
||||||
#define KEY_BACKSPACE 42
|
#define KEY_BACKSPACE 42
|
||||||
#define KEY_TAB 43
|
#define KEY_TAB 43
|
||||||
#define KEY_SPACE 44
|
#define KEY_SPACE 44
|
||||||
#define KEY_MINUS 45
|
#define KEY_MINUS 45
|
||||||
#define KEY_EQUAL 46
|
#define KEY_EQUAL 46
|
||||||
#define KEY_LEFT_BRACE 47
|
#define KEY_LEFT_BRACE 47
|
||||||
#define KEY_RIGHT_BRACE 48
|
#define KEY_RIGHT_BRACE 48
|
||||||
#define KEY_BACKSLASH 49
|
#define KEY_BACKSLASH 49
|
||||||
#define KEY_NUMBER 50
|
#define KEY_NUMBER 50
|
||||||
#define KEY_SEMICOLON 51
|
#define KEY_SEMICOLON 51
|
||||||
#define KEY_QUOTE 52
|
#define KEY_QUOTE 52
|
||||||
#define KEY_TILDE 53
|
#define KEY_TILDE 53
|
||||||
#define KEY_COMMA 54
|
#define KEY_COMMA 54
|
||||||
#define KEY_PERIOD 55
|
#define KEY_PERIOD 55
|
||||||
#define KEY_SLASH 56
|
#define KEY_SLASH 56
|
||||||
#define KEY_CAPS_LOCK 57
|
#define KEY_CAPS_LOCK 57
|
||||||
#define KEY_F1 58
|
#define KEY_F1 58
|
||||||
#define KEY_F2 59
|
#define KEY_F2 59
|
||||||
#define KEY_F3 60
|
#define KEY_F3 60
|
||||||
#define KEY_F4 61
|
#define KEY_F4 61
|
||||||
#define KEY_F5 62
|
#define KEY_F5 62
|
||||||
#define KEY_F6 63
|
#define KEY_F6 63
|
||||||
#define KEY_F7 64
|
#define KEY_F7 64
|
||||||
#define KEY_F8 65
|
#define KEY_F8 65
|
||||||
#define KEY_F9 66
|
#define KEY_F9 66
|
||||||
#define KEY_F10 67
|
#define KEY_F10 67
|
||||||
#define KEY_F11 68
|
#define KEY_F11 68
|
||||||
#define KEY_F12 69
|
#define KEY_F12 69
|
||||||
#define KEY_PRINTSCREEN 70
|
#define KEY_PRINTSCREEN 70
|
||||||
#define KEY_SCROLL_LOCK 71
|
#define KEY_SCROLL_LOCK 71
|
||||||
#define KEY_PAUSE 72
|
#define KEY_PAUSE 72
|
||||||
#define KEY_INSERT 73
|
#define KEY_INSERT 73
|
||||||
#define KEY_HOME 74
|
#define KEY_HOME 74
|
||||||
#define KEY_PAGE_UP 75
|
#define KEY_PAGE_UP 75
|
||||||
#define KEY_DELETE 76
|
#define KEY_DELETE 76
|
||||||
#define KEY_END 77
|
#define KEY_END 77
|
||||||
#define KEY_PAGE_DOWN 78
|
#define KEY_PAGE_DOWN 78
|
||||||
#define KEY_RIGHT 79
|
#define KEY_RIGHT 79
|
||||||
#define KEY_LEFT 80
|
#define KEY_LEFT 80
|
||||||
#define KEY_DOWN 81
|
#define KEY_DOWN 81
|
||||||
#define KEY_UP 82
|
#define KEY_UP 82
|
||||||
#define KEY_NUM_LOCK 83
|
#define KEY_NUM_LOCK 83
|
||||||
#define KEYPAD_SLASH 84
|
#define KEYPAD_SLASH 84
|
||||||
#define KEYPAD_ASTERIX 85
|
#define KEYPAD_ASTERIX 85
|
||||||
#define KEYPAD_MINUS 86
|
#define KEYPAD_MINUS 86
|
||||||
#define KEYPAD_PLUS 87
|
#define KEYPAD_PLUS 87
|
||||||
#define KEYPAD_ENTER 88
|
#define KEYPAD_ENTER 88
|
||||||
#define KEYPAD_1 89
|
#define KEYPAD_1 89
|
||||||
#define KEYPAD_2 90
|
#define KEYPAD_2 90
|
||||||
#define KEYPAD_3 91
|
#define KEYPAD_3 91
|
||||||
#define KEYPAD_4 92
|
#define KEYPAD_4 92
|
||||||
#define KEYPAD_5 93
|
#define KEYPAD_5 93
|
||||||
#define KEYPAD_6 94
|
#define KEYPAD_6 94
|
||||||
#define KEYPAD_7 95
|
#define KEYPAD_7 95
|
||||||
#define KEYPAD_8 96
|
#define KEYPAD_8 96
|
||||||
#define KEYPAD_9 97
|
#define KEYPAD_9 97
|
||||||
#define KEYPAD_0 98
|
#define KEYPAD_0 98
|
||||||
#define KEYPAD_PERIOD 99
|
#define KEYPAD_PERIOD 99
|
||||||
#define KEY_ISO_BACKSLASH 100
|
#define KEY_ISO_BACKSLASH 100
|
||||||
#define KEY_APP 101
|
#define KEY_APP 101
|
||||||
#define KEYBOARD_ERROR 102 // See spec
|
#define KEYBOARD_ERROR 102 // See spec
|
||||||
#define KEYPAD_EQUAL 103
|
#define KEYPAD_EQUAL 103
|
||||||
#define KEY_F13 104
|
#define KEY_F13 104
|
||||||
#define KEY_F14 105
|
#define KEY_F14 105
|
||||||
#define KEY_F15 106
|
#define KEY_F15 106
|
||||||
#define KEY_F16 107
|
#define KEY_F16 107
|
||||||
#define KEY_F17 108
|
#define KEY_F17 108
|
||||||
#define KEY_F18 109
|
#define KEY_F18 109
|
||||||
#define KEY_F19 110
|
#define KEY_F19 110
|
||||||
#define KEY_F20 111
|
#define KEY_F20 111
|
||||||
#define KEY_F21 112
|
#define KEY_F21 112
|
||||||
#define KEY_F22 113
|
#define KEY_F22 113
|
||||||
#define KEY_F23 114
|
#define KEY_F23 114
|
||||||
#define KEY_F24 115
|
#define KEY_F24 115
|
||||||
#define KEY_EXEC 116
|
#define KEY_EXEC 116
|
||||||
#define KEY_HELP 117
|
#define KEY_HELP 117
|
||||||
#define KEY_MENU 118
|
#define KEY_MENU 118
|
||||||
#define KEY_SELECT 119
|
#define KEY_SELECT 119
|
||||||
#define KEY_STOP 120
|
#define KEY_STOP 120
|
||||||
#define KEY_AGAIN 121
|
#define KEY_AGAIN 121
|
||||||
#define KEY_UNDO 122
|
#define KEY_UNDO 122
|
||||||
#define KEY_CUT 123
|
#define KEY_CUT 123
|
||||||
#define KEY_COPY 124
|
#define KEY_COPY 124
|
||||||
#define KEY_PASTE 125
|
#define KEY_PASTE 125
|
||||||
#define KEY_FIND 126
|
#define KEY_FIND 126
|
||||||
#define KEY_MUTE 127
|
#define KEY_MUTE 127
|
||||||
#define KEY_VOL_UP 128
|
#define KEY_VOL_UP 128
|
||||||
#define KEY_VOL_DOWN 129
|
#define KEY_VOL_DOWN 129
|
||||||
#define KEY_CAPS_LLOCK 130 // "Locking" Scroll Lock (Old keyboards with Locking Caps Lock)
|
#define KEY_CAPS_LLOCK 130 // "Locking" Scroll Lock (Old keyboards with Locking Caps Lock)
|
||||||
#define KEY_NUM_LLOCK 131
|
#define KEY_NUM_LLOCK 131
|
||||||
#define KEY_SCROLL_LLOCK 132
|
#define KEY_SCROLL_LLOCK 132
|
||||||
#define KEYPAD_COMMA 133 // Brazillian (See spec)
|
#define KEYPAD_COMMA 133 // Brazillian (See spec)
|
||||||
#define KEYPAD_EQUAL_AS 134 // AS/400 Keyboard (See spec)
|
#define KEYPAD_EQUAL_AS 134 // AS/400 Keyboard (See spec)
|
||||||
#define KEY_INTER1 135 // Brazillian and Japanese "Ru"
|
#define KEY_INTER1 135 // Brazillian and Japanese "Ru"
|
||||||
#define KEY_INTER2 136 // Japanese Katakana/Hiragana
|
#define KEY_INTER2 136 // Japanese Katakana/Hiragana
|
||||||
#define KEY_INTER3 137 // Japanese Yen
|
#define KEY_INTER3 137 // Japanese Yen
|
||||||
#define KEY_INTER4 138 // Japanese Henkan
|
#define KEY_INTER4 138 // Japanese Henkan
|
||||||
#define KEY_INTER5 139 // Japanese Muhenkan
|
#define KEY_INTER5 139 // Japanese Muhenkan
|
||||||
#define KEY_INTER6 140 // PC98 Comma (Ka-m-ma)
|
#define KEY_INTER6 140 // PC98 Comma (Ka-m-ma)
|
||||||
#define KEY_INTER7 141 // Double-Byte/Single-Byte Toggle
|
#define KEY_INTER7 141 // Double-Byte/Single-Byte Toggle
|
||||||
#define KEY_INTER8 142 // Undefined
|
#define KEY_INTER8 142 // Undefined
|
||||||
#define KEY_INTER9 143 // Undefined
|
#define KEY_INTER9 143 // Undefined
|
||||||
#define KEY_LANG1 144 // Korean Hangul/English Toggle
|
#define KEY_LANG1 144 // Korean Hangul/English Toggle
|
||||||
#define KEY_LANG2 145 // Korean Hanja Conversion
|
#define KEY_LANG2 145 // Korean Hanja Conversion
|
||||||
#define KEY_LANG3 146 // Japanese Katakana Key (USB)
|
#define KEY_LANG3 146 // Japanese Katakana Key (USB)
|
||||||
#define KEY_LANG4 147 // Japanese Hiragana Key (USB)
|
#define KEY_LANG4 147 // Japanese Hiragana Key (USB)
|
||||||
#define KEY_LANG5 148 // Japanese Zenkaku/Hankaku Key (USB)
|
#define KEY_LANG5 148 // Japanese Zenkaku/Hankaku Key (USB)
|
||||||
#define KEY_LANG6 149 // Reserved (Application Specific)
|
#define KEY_LANG6 149 // Reserved (Application Specific)
|
||||||
#define KEY_LANG7 150 // Reserved (Application Specific)
|
#define KEY_LANG7 150 // Reserved (Application Specific)
|
||||||
#define KEY_LANG8 151 // Reserved (Application Specific)
|
#define KEY_LANG8 151 // Reserved (Application Specific)
|
||||||
#define KEY_LANG9 152 // Reserved (Application Specific)
|
#define KEY_LANG9 152 // Reserved (Application Specific)
|
||||||
#define KEY_ALT_ERASE 153 // Special Erase (See Spec)
|
#define KEY_ALT_ERASE 153 // Special Erase (See Spec)
|
||||||
#define KEY_SYSREQ_ATT 154 // Modifier Type
|
#define KEY_SYSREQ_ATT 154 // Modifier Type
|
||||||
#define KEY_CANCEL 155
|
#define KEY_CANCEL 155
|
||||||
#define KEY_CLEAR 156
|
#define KEY_CLEAR 156
|
||||||
#define KEY_PRIOR 157
|
#define KEY_PRIOR 157
|
||||||
#define KEY_RETURN 158
|
#define KEY_RETURN 158
|
||||||
#define KEY_SEPARATOR 159
|
#define KEY_SEPARATOR 159
|
||||||
#define KEY_OUT 160
|
#define KEY_OUT 160
|
||||||
#define KEY_OPER 161
|
#define KEY_OPER 161
|
||||||
#define KEY_CLEAR_AGAIN 162
|
#define KEY_CLEAR_AGAIN 162
|
||||||
#define KEY_CRSEL_PROPS 163
|
#define KEY_CRSEL_PROPS 163
|
||||||
#define KEY_EXSEL 164
|
#define KEY_EXSEL 164
|
||||||
// 165 - 175 Reserved
|
// 165 - 175 Reserved
|
||||||
#define KEYPAD_00 176
|
#define KEYPAD_00 176
|
||||||
#define KEYPAD_000 177
|
#define KEYPAD_000 177
|
||||||
#define KEY_1000_SEP 178
|
#define KEY_1000_SEP 178
|
||||||
#define KEY_DECIMAL_SEP 179
|
#define KEY_DECIMAL_SEP 179
|
||||||
#define KEY_CURRENCY_MAIN 180
|
#define KEY_CURRENCY_MAIN 180
|
||||||
#define KEY_CURRENCY_SUB 181
|
#define KEY_CURRENCY_SUB 181
|
||||||
#define KEYPAD_LPAREN 182
|
#define KEYPAD_LPAREN 182
|
||||||
#define KEYPAD_RPAREN 183
|
#define KEYPAD_RPAREN 183
|
||||||
#define KEYPAD_LBRACE 184
|
#define KEYPAD_LBRACE 184
|
||||||
#define KEYPAD_RBRACE 185
|
#define KEYPAD_RBRACE 185
|
||||||
#define KEYPAD_TAB 186
|
#define KEYPAD_TAB 186
|
||||||
#define KEYPAD_BACKSPACE 187
|
#define KEYPAD_BACKSPACE 187
|
||||||
#define KEYPAD_A 188
|
#define KEYPAD_A 188
|
||||||
#define KEYPAD_B 189
|
#define KEYPAD_B 189
|
||||||
#define KEYPAD_C 190
|
#define KEYPAD_C 190
|
||||||
#define KEYPAD_D 191
|
#define KEYPAD_D 191
|
||||||
#define KEYPAD_E 192
|
#define KEYPAD_E 192
|
||||||
#define KEYPAD_F 193
|
#define KEYPAD_F 193
|
||||||
#define KEYPAD_XOR 194
|
#define KEYPAD_XOR 194
|
||||||
#define KEYPAD_CHEVRON 195
|
#define KEYPAD_CHEVRON 195
|
||||||
#define KEYPAD_PERCENT 196
|
#define KEYPAD_PERCENT 196
|
||||||
#define KEYPAD_LTHAN 197
|
#define KEYPAD_LTHAN 197
|
||||||
#define KEYPAD_GTHAN 198
|
#define KEYPAD_GTHAN 198
|
||||||
#define KEYPAD_AND 199
|
#define KEYPAD_AND 199
|
||||||
#define KEYPAD_AND_AND 200
|
#define KEYPAD_AND_AND 200
|
||||||
#define KEYPAD_OR 201
|
#define KEYPAD_OR 201
|
||||||
#define KEYPAD_OR_OR 202
|
#define KEYPAD_OR_OR 202
|
||||||
#define KEYPAD_COLON 203
|
#define KEYPAD_COLON 203
|
||||||
#define KEYPAD_POUND 204
|
#define KEYPAD_POUND 204
|
||||||
#define KEYPAD_SPACE 205
|
#define KEYPAD_SPACE 205
|
||||||
#define KEYPAD_AT 206
|
#define KEYPAD_AT 206
|
||||||
#define KEYPAD_EXCLAIM 207
|
#define KEYPAD_EXCLAIM 207
|
||||||
#define KEYPAD_MEM_STORE 208
|
#define KEYPAD_MEM_STORE 208
|
||||||
#define KEYPAD_MEM_RECALL 209
|
#define KEYPAD_MEM_RECALL 209
|
||||||
#define KEYPAD_MEM_CLEAR 210
|
#define KEYPAD_MEM_CLEAR 210
|
||||||
#define KEYPAD_MEM_ADD 211
|
#define KEYPAD_MEM_ADD 211
|
||||||
#define KEYPAD_MEM_SUB 212
|
#define KEYPAD_MEM_SUB 212
|
||||||
#define KEYPAD_MEM_MULT 213
|
#define KEYPAD_MEM_MULT 213
|
||||||
#define KEYPAD_MEM_DIV 214
|
#define KEYPAD_MEM_DIV 214
|
||||||
#define KEYPAD_PLUS_MINUS 215
|
#define KEYPAD_PLUS_MINUS 215
|
||||||
#define KEYPAD_CLEAR 216
|
#define KEYPAD_CLEAR 216
|
||||||
#define KEYPAD_CLEAR_ENTRY 217
|
#define KEYPAD_CLEAR_ENTRY 217
|
||||||
#define KEYPAD_BINARY 218
|
#define KEYPAD_BINARY 218
|
||||||
#define KEYPAD_OCTAL 219
|
#define KEYPAD_OCTAL 219
|
||||||
#define KEYPAD_DECIMAL 220
|
#define KEYPAD_DECIMAL 220
|
||||||
#define KEYPAD_HEX 221
|
#define KEYPAD_HEX 221
|
||||||
// 222 - 223 Reserved
|
// 222 - 223 Reserved
|
||||||
#define KEYS_LCTRL 224
|
#define KEYS_LCTRL 224
|
||||||
#define KEYS_LSHIFT 225
|
#define KEYS_LSHIFT 225
|
||||||
#define KEYS_LALT 226
|
#define KEYS_LALT 226
|
||||||
#define KEYS_LGUI 227
|
#define KEYS_LGUI 227
|
||||||
#define KEYS_RCTRL 228
|
#define KEYS_RCTRL 228
|
||||||
#define KEYS_RSHIFT 229
|
#define KEYS_RSHIFT 229
|
||||||
#define KEYS_RALT 230
|
#define KEYS_RALT 230
|
||||||
#define KEYS_RGUI 231
|
#define KEYS_RGUI 231
|
||||||
// 232 - 65535 Reserved
|
// 232 - 65535 Reserved
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
244
Macro/buffer/macro.c
Normal file
244
Macro/buffer/macro.c
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
/* Copyright (C) 2011 by Jacob Alexander
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ----- Includes -----
|
||||||
|
|
||||||
|
// AVR Includes
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
// Project Includes
|
||||||
|
#include <led.h>
|
||||||
|
#include <print.h>
|
||||||
|
#include <scan_loop.h>
|
||||||
|
#include <usb_com.h>
|
||||||
|
|
||||||
|
// Keymaps
|
||||||
|
#include <keymap.h>
|
||||||
|
#include <usb_keys.h>
|
||||||
|
|
||||||
|
// Local Includes
|
||||||
|
#include "macro.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Variables -----
|
||||||
|
|
||||||
|
// Keeps track of the sequence used to reflash the teensy in software
|
||||||
|
static uint8_t Bootloader_ConditionSequence[] = {1,16,6,11};
|
||||||
|
uint8_t Bootloader_ConditionState = 0;
|
||||||
|
uint8_t Bootloader_NextPositionReady = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Functions -----
|
||||||
|
|
||||||
|
void jumpToBootloader(void)
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
// disable watchdog, if enabled
|
||||||
|
// disable all peripherals
|
||||||
|
UDCON = 1;
|
||||||
|
USBCON = (1<<FRZCLK); // disable USB
|
||||||
|
UCSR1B = 0;
|
||||||
|
_delay_ms(5);
|
||||||
|
|
||||||
|
#if defined(__AVR_AT90USB162__) // Teensy 1.0
|
||||||
|
EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
|
||||||
|
DDRB = 0; DDRC = 0; DDRD = 0;
|
||||||
|
PORTB = 0; PORTC = 0; PORTD = 0;
|
||||||
|
asm volatile("jmp 0x3E00");
|
||||||
|
#elif defined(__AVR_ATmega32U4__) // Teensy 2.0
|
||||||
|
EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
|
||||||
|
DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
|
||||||
|
PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
|
||||||
|
asm volatile("jmp 0x7E00");
|
||||||
|
#elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
|
||||||
|
EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
|
||||||
|
DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
|
||||||
|
PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
|
||||||
|
asm volatile("jmp 0xFC00");
|
||||||
|
#elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
|
||||||
|
EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
|
||||||
|
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
|
||||||
|
DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
|
||||||
|
PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
|
||||||
|
asm volatile("jmp 0x1FC00");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Given a sampling array, and the current number of detected keypress
|
||||||
|
// Add as many keypresses from the sampling array to the USB key send array as possible.
|
||||||
|
/*
|
||||||
|
inline void keyPressDetection( uint8_t *keys, uint8_t numberOfKeys, uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t *map )
|
||||||
|
{
|
||||||
|
uint8_t Bootloader_KeyDetected = 0;
|
||||||
|
uint8_t processed_keys = 0;
|
||||||
|
|
||||||
|
// Parse the detection array starting from 1 (all keys are purposefully mapped from 1 -> total as per typical PCB labels)
|
||||||
|
for ( uint8_t key = 0; key < numberOfKeys + 1; key++ )
|
||||||
|
{
|
||||||
|
if ( keys[key] & (1 << 7) )
|
||||||
|
{
|
||||||
|
processed_keys++;
|
||||||
|
|
||||||
|
// Display the detected scancode
|
||||||
|
char tmpStr[4];
|
||||||
|
int8ToStr( key, tmpStr );
|
||||||
|
dPrintStrs( tmpStr, " " );
|
||||||
|
|
||||||
|
// Is this a bootloader sequence key?
|
||||||
|
if ( !Bootloader_KeyDetected
|
||||||
|
&& Bootloader_NextPositionReady
|
||||||
|
&& key == Bootloader_ConditionSequence[Bootloader_ConditionState] )
|
||||||
|
{
|
||||||
|
Bootloader_KeyDetected = 1;
|
||||||
|
Bootloader_NextPositionReady = 0;
|
||||||
|
Bootloader_ConditionState++;
|
||||||
|
}
|
||||||
|
else if ( Bootloader_ConditionState > 0 && key == Bootloader_ConditionSequence[Bootloader_ConditionState - 1] )
|
||||||
|
{
|
||||||
|
Bootloader_KeyDetected = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine if the key is a modifier
|
||||||
|
uint8_t modFound = 0;
|
||||||
|
for ( uint8_t mod = 0; mod < numberOfModifiers; mod++ ) {
|
||||||
|
// Modifier found
|
||||||
|
if ( modifiers[mod] == key ) {
|
||||||
|
USBKeys_Modifiers |= map[key];
|
||||||
|
modFound = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modifier, already done this loop
|
||||||
|
if ( modFound )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Too many keys
|
||||||
|
if ( USBKeys_Sent >= USBKeys_MaxSize )
|
||||||
|
{
|
||||||
|
info_print("USB Key limit reached");
|
||||||
|
errorLED( 1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow ignoring keys with 0's
|
||||||
|
if ( map[key] != 0 )
|
||||||
|
USBKeys_Array[USBKeys_Sent++] = map[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Boot loader sequence state handler
|
||||||
|
switch ( processed_keys )
|
||||||
|
{
|
||||||
|
// The next bootloader key can now be pressed, if there were no keys processed
|
||||||
|
case 0:
|
||||||
|
Bootloader_NextPositionReady = 1;
|
||||||
|
break;
|
||||||
|
// If keys were detected, and it wasn't in the sequence (or there was multiple keys detected), start bootloader sequence over
|
||||||
|
// This case purposely falls through
|
||||||
|
case 1:
|
||||||
|
if ( Bootloader_KeyDetected )
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Bootloader_ConditionState = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add debug separator if keys sent via USB
|
||||||
|
if ( USBKeys_Sent > 0 )
|
||||||
|
print("\033[1;32m|\033[0m\n");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Given a list of keypresses, translate into the USB key codes
|
||||||
|
// The buffer is cleared after running
|
||||||
|
// If the buffer doesn't fit into the USB send array, the extra keys are dropped
|
||||||
|
void keyPressBufferRead( uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t *map )
|
||||||
|
{
|
||||||
|
// Loop through input buffer
|
||||||
|
for ( uint8_t index = 0; index < KeyIndex_BufferUsed; index++ )
|
||||||
|
{
|
||||||
|
// Get the keycode from the buffer
|
||||||
|
uint8_t key = KeyIndex_Buffer[index];
|
||||||
|
|
||||||
|
// Determine if the key is a modifier
|
||||||
|
uint8_t modFound = 0;
|
||||||
|
for ( uint8_t mod = 0; mod < numberOfModifiers; mod++ ) {
|
||||||
|
// Modifier found
|
||||||
|
if ( modifiers[mod] == key ) {
|
||||||
|
USBKeys_Modifiers |= map[key];
|
||||||
|
modFound = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modifier, already done this loop
|
||||||
|
if ( modFound )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Too many keys
|
||||||
|
if ( USBKeys_Sent >= USBKeys_MaxSize )
|
||||||
|
{
|
||||||
|
info_print("USB Key limit reached");
|
||||||
|
errorLED( 1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow ignoring keys with 0's
|
||||||
|
if ( map[key] != 0 )
|
||||||
|
{
|
||||||
|
USBKeys_Array[USBKeys_Sent++] = map[key];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Key was not mapped
|
||||||
|
// TODO Add dead key map
|
||||||
|
char tmpStr[6];
|
||||||
|
hexToStr( key, tmpStr );
|
||||||
|
erro_dPrint( "Key not mapped... - ", tmpStr );
|
||||||
|
errorLED( 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signal buffer that we've used it
|
||||||
|
scan_finishedWithBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void process_macros(void)
|
||||||
|
{
|
||||||
|
// Online process macros once (if some were found), until the next USB send
|
||||||
|
if ( USBKeys_Sent != 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Query the input buffer for keypresses
|
||||||
|
keyPressBufferRead( MODIFIER_MASK, sizeof(MODIFIER_MASK), KEYINDEX_MASK );
|
||||||
|
|
||||||
|
// Check for bootloader condition
|
||||||
|
//if ( Bootloader_ConditionState == sizeof( Bootloader_ConditionSequence ) )
|
||||||
|
// jumpToBootloader();
|
||||||
|
}
|
||||||
|
|
38
Macro/buffer/macro.h
Normal file
38
Macro/buffer/macro.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright (C) 2011 by Jacob Alexander
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __macro_h
|
||||||
|
#define __macro_h
|
||||||
|
|
||||||
|
// ----- Includes -----
|
||||||
|
|
||||||
|
// Compiler Includes
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Functions -----
|
||||||
|
|
||||||
|
void keyPressDetection( uint8_t *keys, uint8_t numberOfKeys, uint8_t *modifiers, uint8_t numberOfModifiers, uint8_t *map );
|
||||||
|
void process_macros(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
22
Macro/buffer/setup.cmake
Normal file
22
Macro/buffer/setup.cmake
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
###| CMake Kiibohd Controller Macro Module |###
|
||||||
|
#
|
||||||
|
# Written by Jacob Alexander in 2011 for the Kiibohd Controller
|
||||||
|
#
|
||||||
|
# Released into the Public Domain
|
||||||
|
#
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Module C files
|
||||||
|
#
|
||||||
|
|
||||||
|
set( MACRO_SRCS
|
||||||
|
macro.c
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Module Specific Options
|
||||||
|
#
|
||||||
|
|
225
Scan/MicroSwitch8304/scan_loop.c
Normal file
225
Scan/MicroSwitch8304/scan_loop.c
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
/* Copyright (C) 2011 by Jacob Alexander
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ----- Includes -----
|
||||||
|
|
||||||
|
// AVR Includes
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
// Project Includes
|
||||||
|
#include <led.h>
|
||||||
|
#include <print.h>
|
||||||
|
|
||||||
|
// Local Includes
|
||||||
|
#include "scan_loop.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Defines -----
|
||||||
|
|
||||||
|
// Pinout Defines
|
||||||
|
#define RESET_PORT PORTB
|
||||||
|
#define RESET_DDR DDRD
|
||||||
|
#define RESET_PIN 0
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Macros -----
|
||||||
|
|
||||||
|
// Make sure we haven't overflowed the buffer
|
||||||
|
#define bufferAdd(byte) \
|
||||||
|
if ( KeyIndex_BufferUsed < KEYBOARD_BUFFER ) \
|
||||||
|
KeyIndex_Buffer[KeyIndex_BufferUsed++] = byte
|
||||||
|
|
||||||
|
#define UNSET_RESET() RESET_DDR &= ~(1 << RESET_PIN)
|
||||||
|
#define SET_RESET() RESET_DDR |= (1 << RESET_PIN)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Variables -----
|
||||||
|
|
||||||
|
// Buffer used to inform the macro processing module which keys have been detected as pressed
|
||||||
|
volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
|
||||||
|
volatile uint8_t KeyIndex_BufferUsed;
|
||||||
|
|
||||||
|
|
||||||
|
// Buffer Signals
|
||||||
|
volatile uint8_t BufferReadyToClear;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Functions -----
|
||||||
|
|
||||||
|
// Setup
|
||||||
|
inline void scan_setup()
|
||||||
|
{
|
||||||
|
// Setup the the USART interface for keyboard data input
|
||||||
|
// NOTE: The input data signal needs to be inverted for the Teensy USART to properly work
|
||||||
|
|
||||||
|
// Setup baud rate
|
||||||
|
// 16 MHz / ( 16 * Baud ) = UBRR
|
||||||
|
// Baud <- 0.82020 ms per bit, thus 1000 / 0.82020 = 1219.2
|
||||||
|
// Thus baud = 820
|
||||||
|
uint16_t baud = 820; // Max setting of 4095
|
||||||
|
UBRR1H = (uint8_t)(baud >> 8);
|
||||||
|
UBRR1L = (uint8_t)baud;
|
||||||
|
|
||||||
|
// Enable the receiver, transitter, and RX Complete Interrupt
|
||||||
|
UCSR1B = 0x98;
|
||||||
|
|
||||||
|
// Set frame format: 8 data, no stop bits or parity
|
||||||
|
// Asynchrounous USART mode
|
||||||
|
// 8304 sends encoded scancodes (for example Alphanumeric 0-9 follows their keypad encoding scheme)
|
||||||
|
// Separate line is for reset
|
||||||
|
UCSR1C = 0x06;
|
||||||
|
|
||||||
|
// Initially buffer doesn't need to be cleared (it's empty...)
|
||||||
|
BufferReadyToClear = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Main Detection Loop
|
||||||
|
// Not needed for the Micro Switch 8304, this is just a busy loop
|
||||||
|
inline uint8_t scan_loop()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void processKeyValue( uint8_t keyValue )
|
||||||
|
{
|
||||||
|
// Finalize output buffer
|
||||||
|
// Mask 8th bit
|
||||||
|
keyValue &= 0x7F;
|
||||||
|
|
||||||
|
// Interpret scan code
|
||||||
|
switch ( keyValue )
|
||||||
|
{
|
||||||
|
case 0x40: // Clear buffer command
|
||||||
|
info_print("CLEAR!");
|
||||||
|
|
||||||
|
BufferReadyToClear = 1;
|
||||||
|
break;
|
||||||
|
case 0x7F:
|
||||||
|
scan_lockKeyboard();
|
||||||
|
_delay_ms(3000);
|
||||||
|
scan_unlockKeyboard();
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Make sure the key isn't already in the buffer
|
||||||
|
for ( uint8_t c = 0; c < KeyIndex_BufferUsed + 1; c++ )
|
||||||
|
{
|
||||||
|
// Key isn't in the buffer yet
|
||||||
|
if ( c == KeyIndex_BufferUsed )
|
||||||
|
{
|
||||||
|
bufferAdd( keyValue );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key already in the buffer
|
||||||
|
if ( KeyIndex_Buffer[c] == keyValue )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// USART Receive Buffer Full Interrupt
|
||||||
|
ISR(USART1_RX_vect)
|
||||||
|
{
|
||||||
|
cli(); // Disable Interrupts
|
||||||
|
|
||||||
|
uint8_t keyValue = 0x00;
|
||||||
|
|
||||||
|
// The interrupt is always for the first item of the packet set, reset the buffer
|
||||||
|
KeyIndex_BufferUsed = 0;
|
||||||
|
|
||||||
|
// Only the first 7 bits have scancode data
|
||||||
|
// The last packet of the packet set has the 8th bit high, all the others are low
|
||||||
|
//
|
||||||
|
// Interrupts are too slow for the rest of the packet set, poll for the rest
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
// Read the raw packet from the USART
|
||||||
|
keyValue = UDR1;
|
||||||
|
|
||||||
|
// Debug
|
||||||
|
char tmpStr[6];
|
||||||
|
hexToStr( keyValue, tmpStr );
|
||||||
|
dPrintStrs( tmpStr, " " );
|
||||||
|
|
||||||
|
// Process the scancode
|
||||||
|
processKeyValue( keyValue );
|
||||||
|
|
||||||
|
// Last packet of the set
|
||||||
|
if ( keyValue & 0x80 )
|
||||||
|
{
|
||||||
|
dPrintStrs( "**" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delay enough so we don't run into the same packet (or the previous buffered packet)
|
||||||
|
_delay_us(10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
sei(); // Re-enable Interrupts
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send data
|
||||||
|
//
|
||||||
|
// Keyboard Input Guide for Micro Switch 8304
|
||||||
|
// 0xBX is for LED F1,F2,Over Type,Lock
|
||||||
|
// 0xAX is for LED F3,F8,F9,F10
|
||||||
|
// 0x92 resets keyboard (LED off, echo scancode mode off)
|
||||||
|
// 0x9E sets echo scancode mode from (0x81 to 0xFF; translates to 0x01 to 0x7F)
|
||||||
|
// Other echos: 0x15~0x19 send 0x15~0x19, 0x40 sends 0x40 (as well as 0x44,0x45, 0x80)
|
||||||
|
// 0x8C Acks the keyboard and gets 0x70 sent back (delayed)
|
||||||
|
uint8_t scan_sendData( uint8_t dataPayload )
|
||||||
|
{
|
||||||
|
UDR1 = dataPayload;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signal KeyIndex_Buffer that it has been properly read
|
||||||
|
// In the case of the Micro Switch 8304, we leave the buffer alone until more scancode data comes in
|
||||||
|
void scan_finishedWithBuffer( void )
|
||||||
|
{
|
||||||
|
// We received a Clear code from the 8304, clear the buffer now that we've used it
|
||||||
|
if ( BufferReadyToClear )
|
||||||
|
{
|
||||||
|
KeyIndex_BufferUsed = 0;
|
||||||
|
BufferReadyToClear = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset/Hold keyboard
|
||||||
|
// Warning! This will cause the keyboard to not send any data, so you can't disable with a keypress
|
||||||
|
// The Micro Switch 8304 has a dedicated reset line
|
||||||
|
void scan_lockKeyboard( void )
|
||||||
|
{
|
||||||
|
UNSET_RESET();
|
||||||
|
}
|
||||||
|
|
||||||
|
void scan_unlockKeyboard( void )
|
||||||
|
{
|
||||||
|
SET_RESET();
|
||||||
|
}
|
||||||
|
|
64
Scan/MicroSwitch8304/scan_loop.h
Normal file
64
Scan/MicroSwitch8304/scan_loop.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* Copyright (C) 2011 by Jacob Alexander
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SCAN_LOOP_H
|
||||||
|
#define __SCAN_LOOP_H
|
||||||
|
|
||||||
|
// ----- Includes -----
|
||||||
|
|
||||||
|
// Compiler Includes
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// Local Includes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Defines -----
|
||||||
|
|
||||||
|
#define KEYBOARD_SIZE 0x62 // 76 - Size of the array space for the keyboard(max index)
|
||||||
|
#define KEYBOARD_BUFFER 24 // Max number of key signals to buffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Variables -----
|
||||||
|
|
||||||
|
extern volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
|
||||||
|
extern volatile uint8_t KeyIndex_BufferUsed;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----- Functions -----
|
||||||
|
|
||||||
|
// Functions used by main.c
|
||||||
|
void scan_setup( void );
|
||||||
|
uint8_t scan_loop( void );
|
||||||
|
|
||||||
|
|
||||||
|
// Functions available to macro.c
|
||||||
|
uint8_t scan_sendData( uint8_t dataPayload );
|
||||||
|
|
||||||
|
void scan_finishedWithBuffer( void );
|
||||||
|
void scan_lockKeyboard( void );
|
||||||
|
void scan_unlockKeyboard( void );
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __SCAN_LOOP_H
|
||||||
|
|
48
Scan/MicroSwitch8304/setup.cmake
Normal file
48
Scan/MicroSwitch8304/setup.cmake
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
###| CMake Kiibohd Controller Scan Module |###
|
||||||
|
#
|
||||||
|
# Written by Jacob Alexander in 2011 for the Kiibohd Controller
|
||||||
|
#
|
||||||
|
# Released into the Public Domain
|
||||||
|
#
|
||||||
|
# For the Micro Switch 8304 Keyboard (No Branding)
|
||||||
|
#
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Module C files
|
||||||
|
#
|
||||||
|
|
||||||
|
set( SCAN_SRCS
|
||||||
|
scan_loop.c
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Module H files
|
||||||
|
#
|
||||||
|
set( SCAN_HDRS
|
||||||
|
scan_loop.h
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# File Dependency Setup
|
||||||
|
#
|
||||||
|
ADD_FILE_DEPENDENCIES( scan_loop.c ${SCAN_HDRS} )
|
||||||
|
#add_file_dependencies( scan_loop.c ${SCAN_HDRS} )
|
||||||
|
#add_file_dependencies( macro.c keymap.h microswitch8304.h )
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Module Specific Options
|
||||||
|
#
|
||||||
|
add_definitions( -I${HEAD_DIR}/Keymap )
|
||||||
|
|
||||||
|
#| Keymap Settings
|
||||||
|
add_definitions(
|
||||||
|
-DMODIFIER_MASK=microswitch8304_ModifierMask
|
||||||
|
-DKEYINDEX_MASK=microswitch8304_ColemakMap
|
||||||
|
#-DKEYINDEX_MASK=microswitch8304_DefaultMap
|
||||||
|
)
|
||||||
|
|
1
main.c
1
main.c
@ -146,6 +146,7 @@ int main(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// USB Keyboard Data Send Counter Interrupt
|
||||||
ISR( TIMER0_OVF_vect )
|
ISR( TIMER0_OVF_vect )
|
||||||
{
|
{
|
||||||
sendKeypressCounter++;
|
sendKeypressCounter++;
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones
|
#| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones
|
||||||
|
|
||||||
##| Deals with acquiring the keypress information and turning it into a key index
|
##| Deals with acquiring the keypress information and turning it into a key index
|
||||||
set( ScanModule "Kaypro1" )
|
set( ScanModule "MicroSwitch8304" )
|
||||||
|
|
||||||
##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code
|
##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code
|
||||||
set( MacroModule "buffer" )
|
set( MacroModule "buffer" )
|
||||||
@ -78,6 +78,7 @@ macro( PathPrepend Output SourcesPath )
|
|||||||
|
|
||||||
# Loop through items
|
# Loop through items
|
||||||
foreach( item ${ARGN} )
|
foreach( item ${ARGN} )
|
||||||
|
# Set the path
|
||||||
set( tmpSource ${tmpSource} "${SourcesPath}/${item}" )
|
set( tmpSource ${tmpSource} "${SourcesPath}/${item}" )
|
||||||
endforeach( item )
|
endforeach( item )
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user