Browse Source

Adding Kaypro1 functional support

- Uses USART instead of polling
- Supports two way communication (only 3 commands to the keyboard
  though)
- Kaypro sends data as ASCII, which severely limits the handling of
  modifiers
- No release signal is sent, so even faking modifiers is next to
  impossible outside of Shift and Ctrl
- Includes default QWERTY and Colemak layouts
- Developed a new buffer macro, which will become the basic macro module
  once all the other modules have been ported (much more efficient, as
  it keeps serial scanning schemes serial, and parallel scanning schemes
  such as matrix, that already serialized into a sort of buffer for the
  debouncing evaluation)
- This module is quite efficient, and would be able to handle very
  excessive macro processing in the future.
- If more of the keypboard communication protocol is desired, I have a
  rom dump of the microcontroller (M5L8049)
simple
Jacob Alexander 12 years ago
parent
commit
a017d2f270
6 changed files with 709 additions and 114 deletions
  1. 551
    0
      Keymap/kaypro1.h
  2. 1
    0
      Keymap/keymap.h
  3. 150
    107
      Scan/Kaypro1/scan_loop.c
  4. 3
    4
      Scan/Kaypro1/scan_loop.h
  5. 3
    2
      Scan/Kaypro1/setup.cmake
  6. 1
    1
      setup.cmake

+ 551
- 0
Keymap/kaypro1.h View File

@@ -0,0 +1,551 @@
/* 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 __KAYPRO1_H
#define __KAYPRO1_H

// This file contains various key layouts for the Kaypro 1 keyboard


// ----- Variables -----

static uint8_t kaypro1_ModifierMask[] = { 0xF5, 0xF6 };

static uint8_t kaypro1_DefaultMap[] = { 0,
0, // 0x01
0, // 0x02
0, // 0x03
0, // 0x04
0, // 0x05
0, // 0x06
0, // 0x07
KEY_BACKSPACE, // 0x08
KEY_TAB, // 0x09
0, // 0x0A
0, // 0x0B
0, // 0x0C
KEY_ENTER, // 0x0D
0, // 0x0E
0, // 0x0F
0, // 0x10
0, // 0x11
0, // 0x12
0, // 0x13
0, // 0x14
0, // 0x15
0, // 0x16
0, // 0x17
0, // 0x18
0, // 0x19
0, // 0x1A
KEY_ESC, // 0x1B
0, // 0x1C
0, // 0x1D
0, // 0x1E
0, // 0x1F
KEY_SPACE, // 0x20
0, // 0x21
0, // 0x22
0, // 0x23
0, // 0x24
0, // 0x25
0, // 0x26
KEY_QUOTE, // 0x27
0, // 0x28
0, // 0x29
0, // 0x2A
0, // 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
0, // 0x41
0, // 0x42
0, // 0x43
0, // 0x44
0, // 0x45
0, // 0x46
0, // 0x47
0, // 0x48
0, // 0x49
0, // 0x4A
0, // 0x4B
0, // 0x4C
0, // 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_LEFT_BRACE, // 0x5B
KEY_BACKSLASH, // 0x5C
KEY_RIGHT_BRACE, // 0x5D
0, // 0x5E
0, // 0x5F
KEY_TILDE, // 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
0, // 0x7B
0, // 0x7C
0, // 0x7D
0, // 0x7E
KEY_DELETE, // 0x7F
0, // 0x80
0, // 0x81
0, // 0x82
0, // 0x83
0, // 0x84
0, // 0x85
0, // 0x86
0, // 0x87
0, // 0x88
0, // 0x89
0, // 0x8A
0, // 0x8B
0, // 0x8C
0, // 0x8D
0, // 0x8E
0, // 0x8F
0, // 0x90
0, // 0x91
0, // 0x92
0, // 0x93
0, // 0x94
0, // 0x95
0, // 0x96
0, // 0x97
0, // 0x98
0, // 0x99
0, // 0x9A
0, // 0x9B
0, // 0x9C
0, // 0x9D
0, // 0x9E
0, // 0x9F
0, // 0xA0
0, // 0xA1
0, // 0xA2
0, // 0xA3
0, // 0xA4
0, // 0xA5
0, // 0xA6
0, // 0xA7
0, // 0xA8
0, // 0xA9
0, // 0xAA
0, // 0xAB
0, // 0xAC
0, // 0xAD
0, // 0xAE
0, // 0xAF
0, // 0xB0
KEYPAD_0, // 0xB1
KEYPAD_PERIOD, // 0xB2
0, // 0xB3
0, // 0xB4
0, // 0xB5
0, // 0xB6
0, // 0xB7
0, // 0xB8
0, // 0xB9
0, // 0xBA
0, // 0xBB
0, // 0xBC
0, // 0xBD
0, // 0xBE
0, // 0xBF
KEYPAD_1, // 0xC0
KEYPAD_2, // 0xC1
KEYPAD_3, // 0xC2
KEYPAD_ENTER, // 0xC3
0, // 0xC4
0, // 0xC5
0, // 0xC6
0, // 0xC7
0, // 0xC8
0, // 0xC9
0, // 0xCA
0, // 0xCB
0, // 0xCC
0, // 0xCD
0, // 0xCE
0, // 0xCF
KEYPAD_4, // 0xD0
KEYPAD_5, // 0xD1
KEYPAD_6, // 0xD2
KEYPAD_COMMA, // 0xD3
0, // 0xD4
0, // 0xD5
0, // 0xD6
0, // 0xD7
0, // 0xD8
0, // 0xD9
0, // 0xDA
0, // 0xDB
0, // 0xDC
0, // 0xDD
0, // 0xDE
0, // 0xDF
0, // 0xE0
KEYPAD_7, // 0xE1
KEYPAD_8, // 0xE2
KEYPAD_9, // 0xE3
KEYPAD_MINUS, // 0xE4
0, // 0xE5
0, // 0xE6
0, // 0xE7
0, // 0xE8
0, // 0xE9
0, // 0xEA
0, // 0xEB
0, // 0xEC
0, // 0xED
0, // 0xEE
0, // 0xEF
0, // 0xF0
KEY_UP, // 0xF1
KEY_DOWN, // 0xF2
KEY_LEFT, // 0xF3
KEY_RIGHT, // 0xF4
KEY_LEFT_SHIFT, // 0xF5
KEY_CTRL, // 0xF6
0, // 0xF7
0, // 0xF8
0, // 0xF9
0, // 0xFA
0, // 0xFB
0, // 0xFC
0, // 0xFD
0, // 0xFE
0, // 0xFF
};

static uint8_t kaypro1_ColemakMap[] = { 0,
0, // 0x01
0, // 0x02
0, // 0x03
0, // 0x04
0, // 0x05
0, // 0x06
0, // 0x07
KEY_BACKSPACE, // 0x08
KEY_TAB, // 0x09
0, // 0x0A
0, // 0x0B
0, // 0x0C
KEY_ENTER, // 0x0D
0, // 0x0E
0, // 0x0F
0, // 0x10
0, // 0x11
0, // 0x12
0, // 0x13
0, // 0x14
0, // 0x15
0, // 0x16
0, // 0x17
0, // 0x18
0, // 0x19
0, // 0x1A
KEY_ESC, // 0x1B
0, // 0x1C
0, // 0x1D
0, // 0x1E
0, // 0x1F
KEY_SPACE, // 0x20
0, // 0x21
0, // 0x22
0, // 0x23
0, // 0x24
0, // 0x25
0, // 0x26
KEY_QUOTE, // 0x27
0, // 0x28
0, // 0x29
0, // 0x2A
0, // 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
0, // 0x41
0, // 0x42
0, // 0x43
0, // 0x44
0, // 0x45
0, // 0x46
0, // 0x47
0, // 0x48
0, // 0x49
0, // 0x4A
0, // 0x4B
0, // 0x4C
0, // 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_LEFT_BRACE, // 0x5B
KEY_BACKSLASH, // 0x5C
KEY_RIGHT_BRACE, // 0x5D
0, // 0x5E
0, // 0x5F
KEY_TILDE, // 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
0, // 0x7B
0, // 0x7C
0, // 0x7D
0, // 0x7E
KEY_DELETE, // 0x7F
0, // 0x80
0, // 0x81
0, // 0x82
0, // 0x83
0, // 0x84
0, // 0x85
0, // 0x86
0, // 0x87
0, // 0x88
0, // 0x89
0, // 0x8A
0, // 0x8B
0, // 0x8C
0, // 0x8D
0, // 0x8E
0, // 0x8F
0, // 0x90
0, // 0x91
0, // 0x92
0, // 0x93
0, // 0x94
0, // 0x95
0, // 0x96
0, // 0x97
0, // 0x98
0, // 0x99
0, // 0x9A
0, // 0x9B
0, // 0x9C
0, // 0x9D
0, // 0x9E
0, // 0x9F
0, // 0xA0
0, // 0xA1
0, // 0xA2
0, // 0xA3
0, // 0xA4
0, // 0xA5
0, // 0xA6
0, // 0xA7
0, // 0xA8
0, // 0xA9
0, // 0xAA
0, // 0xAB
0, // 0xAC
0, // 0xAD
0, // 0xAE
0, // 0xAF
0, // 0xB0
KEYPAD_0, // 0xB1
KEYPAD_PERIOD, // 0xB2
0, // 0xB3
0, // 0xB4
0, // 0xB5
0, // 0xB6
0, // 0xB7
0, // 0xB8
0, // 0xB9
0, // 0xBA
0, // 0xBB
0, // 0xBC
0, // 0xBD
0, // 0xBE
0, // 0xBF
KEYPAD_1, // 0xC0
KEYPAD_2, // 0xC1
KEYPAD_3, // 0xC2
KEYPAD_ENTER, // 0xC3
0, // 0xC4
0, // 0xC5
0, // 0xC6
0, // 0xC7
0, // 0xC8
0, // 0xC9
0, // 0xCA
0, // 0xCB
0, // 0xCC
0, // 0xCD
0, // 0xCE
0, // 0xCF
KEYPAD_4, // 0xD0
KEYPAD_5, // 0xD1
KEYPAD_6, // 0xD2
KEYPAD_COMMA, // 0xD3
0, // 0xD4
0, // 0xD5
0, // 0xD6
0, // 0xD7
0, // 0xD8
0, // 0xD9
0, // 0xDA
0, // 0xDB
0, // 0xDC
0, // 0xDD
0, // 0xDE
0, // 0xDF
0, // 0xE0
KEYPAD_7, // 0xE1
KEYPAD_8, // 0xE2
KEYPAD_9, // 0xE3
KEYPAD_MINUS, // 0xE4
0, // 0xE5
0, // 0xE6
0, // 0xE7
0, // 0xE8
0, // 0xE9
0, // 0xEA
0, // 0xEB
0, // 0xEC
0, // 0xED
0, // 0xEE
0, // 0xEF
0, // 0xF0
KEY_UP, // 0xF1
KEY_DOWN, // 0xF2
KEY_LEFT, // 0xF3
KEY_RIGHT, // 0xF4
KEY_LEFT_SHIFT, // 0xF5
KEY_CTRL, // 0xF6
0, // 0xF7
0, // 0xF8
0, // 0xF9
0, // 0xFA
0, // 0xFB
0, // 0xFC
0, // 0xFD
0, // 0xFE
0, // 0xFF
};



#endif


+ 1
- 0
Keymap/keymap.h View File

@@ -43,6 +43,7 @@
// See files for full layout descriptions
#include "budkeypad.h"
#include "heathzenith.h"
#include "kaypro1.h"
#include "tandy1000.h"



+ 150
- 107
Scan/Kaypro1/scan_loop.c View File

@@ -40,11 +40,17 @@

// ----- Macros -----

// Make sure we haven't overflowed the buffer
#define bufferAdd(byte) \
if ( KeyIndex_BufferUsed < KEYBOARD_BUFFER ) \
KeyIndex_Buffer[KeyIndex_BufferUsed++] = byte



// ----- Variables -----

uint8_t KeyIndex_Array[KEYBOARD_SIZE + 1];
volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
volatile uint8_t KeyIndex_BufferUsed;


// Known signals
@@ -83,112 +89,12 @@ inline void scan_setup()


// Main Detection Loop
// Nothing is needed here for the Kaypro, but the function is available as part of the api to be called in a polling fashion
// TODO
// - Add songs :D
inline uint8_t scan_loop()
{
/*
// Packet Read
if ( packet_index == 8 )
{
// Disable Error LED, proper key found
errorLED( 0 );

//#ifdef MAX_DEBUG
// Crazy Debug (Read the Scan Code)
char tmpStr[3];
hexToStr_op( inputData, tmpStr, 2 );
dPrintStrsNL( "Read Data: 0x", tmpStr );
//#endif
// - Map the scan code to the index array -
// If the 8th bit is high, remove the keypress, else, add the keypress
// The lower 7 bits are the array index
KeyIndex_Array[(inputData & 0x7F)] = (inputData & 0x80) ? 0x00 : 0x80;

// Reset Containers
packet_index = 0;
inputData = 0xFF;
}
// Bad Packet
else if ( packet_index > 8 )
{
// Signal Error
errorLED( 1 );

char tmpStr[3];
int8ToStr( packet_index, tmpStr );
erro_dPrint( "Big packet? Mismatched... ", tmpStr );

packet_index = 0;
inputData = 0xFF;
}
*/
/*
// Disable keyboard interrupt (does nothing if already off)
UNSET_INTR();

// Read the clock 8 times
if ( READ_CLK )
{
// Mis-read packet, set back to 0
if ( packet_index == -1 )
packet_index = 0;

// Append 1 bit of data
inputData &= ~(READ_DATA << packet_index);
packet_index++;

// 8 Bits have been read
if ( packet_index == 8 )
{
// Wait till clock edge falls
while ( READ_CLK );

// Sample both lines to make sure this is not a data value
// and definitely the end of packet data blip
uint16_t badDataCounter = 0;
while ( !( READ_DATA ) && !( READ_CLK ) )
badDataCounter++;

if ( badDataCounter < 25 )
{
//#ifdef MAX_DEBUG
// Crazy Debug (Read the Scan Code)
char tmpStr[3];
hexToStr_op( inputData, tmpStr, 2 );
dbug_dPrint( "Read Data: 0x", tmpStr );
//#endif
// - Map the scan code to the index array -
// If the 8th bit is high, remove the keypress, else, add the keypress
// The lower 7 bits are the array index
KeyIndex_Array[(inputData & 0x7F)] = (inputData & 0x80) ? 0x00 : 0x80;
}
// Even though this is a mis-read packet, we still know what the value is
else
{
// Signal Error
errorLED( 1 );
char tmpStr[3];
hexToStr_op( inputData, tmpStr, 2 );
erro_dPrint( "Bad packet? Mismatched... 0x", tmpStr );
}

// Reset Containers
inputData = 0xFF;
packet_index = 0;

// Interrupt the keyboard, so we don't get packet pieces...
SET_INTR();

// Do not wait for next clock, let USB do it's thing (if desired)
return packet_index;
}

// Wait till clock edge falls
while ( READ_CLK );
}

// Interrupt keyboard if there is no pending packet
SET_INTR();
*/
// We *could* do extra offline processing here, but, it's not really needed for the Kaypro 1 keyboard
return 0;
}

@@ -197,10 +103,149 @@ ISR(USART1_RX_vect)
{
cli(); // Disable Interrupts

// Get key from USART
uint8_t keyValue = UDR1;

//#ifdef MAX_DEBUG
// Debug print key
char tmpStr1[6];
hexToStr( keyValue, tmpStr1 );
dPrintStrs( tmpStr1, " " );
//#endif

// Add key(s) to processing buffer
// First split out Shift and Ctrl
// Reserved Codes:
// Shift - 0xF5
// Ctrl - 0xF6
switch ( keyValue )
{
// - Ctrl Keys -
// Exception keys
case 0x08: // ^H
case 0x09: // ^I
case 0x0D: // ^M
case 0x1B: // ^[
bufferAdd( keyValue );
break;
// 0x40 Offset Keys
// Add Ctrl key and offset to the lower alphabet
case 0x00: // ^@
case 0x1C: // "^\"
case 0x1D: // ^]
case 0x1E: // ^^
case 0x1F: // ^_
bufferAdd( 0xF6 );
bufferAdd( keyValue + 0x40 );
break;

// - Add Shift key and offset to non-shifted key -
// 0x10 Offset Keys
case 0x21: // !
case 0x23: // #
case 0x24: // $
case 0x25: // %
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x10 );
break;
// 0x11 Offset Keys
case 0x26: // &
case 0x28: // (
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x11 );
break;
// 0x07 Offset Keys
case 0x29: // )
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x07 );
break;
// -0x0E Offset Keys
case 0x40: // @
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x0E );
break;
// 0x0E Offset Keys
case 0x2A: // *
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x0E );
break;
// 0x12 Offset Keys
case 0x2B: // +
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x12 );
break;
// 0x05 Offset Keys
case 0x22: // "
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x05 );
break;
// 0x01 Offset Keys
case 0x3A: // :
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x01 );
break;
// -0x10 Offset Keys
case 0x3C: // <
case 0x3E: // >
case 0x3F: // ?
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x10 );
break;
// -0x28 Offset Keys
case 0x5E: // ^
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x28 );
break;
// -0x32 Offset Keys
case 0x5F: // _
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x32 );
break;
// -0x20 Offset Keys
case 0x7B: // {
case 0x7C: // |
case 0x7D: // }
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x20 );
break;
// -0x1E Offset Keys
case 0x7E: // ~
bufferAdd( 0xF5 );
bufferAdd( keyValue - 0x1E );
break;
// All other keys
default:
// Ctrl Characters are from 0x00 to 0x1F, excluding:
// 0x08 - Backspace
// 0x09 - [Horizontal] Tab
// 0x0D - [Carriage] Return
// 0x1B - Escape
// 0x7F - Delete (^?) (Doesn't need to be split out)

// 0x60 Offset Keys
// Add Ctrl key and offset to the lower alphabet
if ( keyValue >= 0x00 && keyValue <= 0x1F )
{
bufferAdd( 0xF6 );
bufferAdd( keyValue + 0x60 );
}

// Shift Characters are from 0x41 to 0x59
// No exceptions here :D
// Add Shift key and offset to the lower alphabet
else if ( keyValue >= 0x41 && keyValue <= 0x5A )
{
bufferAdd( 0xF5 );
bufferAdd( keyValue + 0x20 );
}

// Everything else
else
{
bufferAdd( keyValue );
}
break;
}

// Special keys - For communication to the keyboard
// TODO Try to push this functionality into the macros...somehow
@@ -225,8 +270,6 @@ ISR(USART1_RX_vect)
break;
}

// Add key to processing buffer

sei(); // Re-enable Interrupts
}


+ 3
- 4
Scan/Kaypro1/scan_loop.h View File

@@ -34,15 +34,14 @@
// ----- Defines -----

#define KEYBOARD_SIZE 0x4c // 76 - Size of the array space for the keyboardr(max index)
#define KEYBOARD_BUFFER 24 // Max number of key signals to buffer



// ----- Variables -----

// NOTE: Highest Bit: Valid keypress (0x80 is valid keypress)
// Other Bits: Pressed state sample counter
extern uint8_t KeyIndex_Array [KEYBOARD_SIZE + 1];
static const uint8_t KeyIndex_Size = KEYBOARD_SIZE;
extern volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
extern volatile uint8_t KeyIndex_BufferUsed;




+ 3
- 2
Scan/Kaypro1/setup.cmake View File

@@ -23,7 +23,8 @@ add_definitions( -I${HEAD_DIR}/Keymap )

#| Keymap Settings
add_definitions(
-DMODIFIER_MASK=tandy1000_modifierMask
-DKEYINDEX_MASK=tandy1000_colemak
-DMODIFIER_MASK=kaypro1_ModifierMask
-DKEYINDEX_MASK=kaypro1_ColemakMap
#-DKEYINDEX_MASK=kaypro1_DefaultMap
)


+ 1
- 1
setup.cmake View File

@@ -23,7 +23,7 @@
set( ScanModule "Kaypro1" )

##| Uses the key index and potentially applies special conditions to it, mapping it to a usb key code
set( MacroModule "basic" )
set( MacroModule "buffer" )

##| Sends the current list of usb key codes through USB HID
set( USBModule "pjrc" )