~ruther/qmk_firmware

d2b9489a5e19fabb5d6ec285192b19dc25b36d5e — tmk 14 years ago 60052ac
fixed hhkb to comply new API.
8 files changed, 33 insertions(+), 123 deletions(-)

M command.c
M hhkb/Makefile
M hhkb/config.h
M hhkb/keymap.c
M hhkb/matrix.c
M host.h
M pjrc/host.c
D tmk.c
M command.c => command.c +3 -2
@@ 32,7 32,7 @@ uint8_t command_proc(void)
    uint8_t processed = 1;
    bool last_print_enable = print_enable;
    print_enable = true;
    switch (keyboard_report->keys[0]) {
    switch (host_get_first_key()) {
        case KB_H:
            help();
            break;


@@ 89,7 89,7 @@ uint8_t command_proc(void)
            print("timer: "); phex16(timer_count); print("\n");
            break;
        case KB_P: // print toggle
            if (print_enable) {
            if (last_print_enable) {
                print("print disabled.\n");
                last_print_enable = false;
            } else {


@@ 107,6 107,7 @@ uint8_t command_proc(void)
            break;
#ifdef USB_NKRO_ENABLE
        case KB_N:
            // send empty report before change
            host_clear_keyboard_report();
            host_send_keyboard_report();
            keyboard_nkro = !keyboard_nkro;

M hhkb/Makefile => hhkb/Makefile +9 -1
@@ 8,11 8,13 @@ COMMON_DIR = ..
TARGET_DIR = .

# keyboard dependent files
TARGET_SRC =	tmk.c \
TARGET_SRC =	main_pjrc.c \
		keymap.c \
  	        matrix.c \
		led.c

CONFIG_H = config.h


# MCU name, you MUST set this to match the board you are using
# type "make clean" after changing this, so all files will be rebuilt


@@ 38,5 40,11 @@ USB_EXTRA_ENABLE = yes	# Enhanced feature for Windows(Audio control and System c
USB_NKRO_ENABLE = yes	# USB Nkey Rollover



#---------------- Programming Options --------------------------
PROGRAM_CMD = teensy_loader_cli.exe -mmcu=$(MCU) -w -v $(TARGET).hex



include $(COMMON_DIR)/Makefile.pjrc
include $(COMMON_DIR)/Makefile.common

M hhkb/config.h => hhkb/config.h +7 -6
@@ 10,26 10,27 @@
#define PRODUCT         HHKB mod
#define DESCRIPTION     t.m.k. keyboard firmware for HHKB mod


/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 8

/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST

/* key combination for command */
#define IS_COMMAND() (keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT))

/* key combination for command */
#define IS_COMMAND() ( \
    keyboard_report->mods == (BIT_LSHIFT | BIT_RSHIFT) || \
    keyboard_report->mods == (BIT_LCTRL | BIT_RSHIFT) \
)

/* USB NKey Rollover */
#ifdef USB_NKRO_ENABLE
#endif

/* mouse keys */
#ifdef MOUSEKEY_ENABLE
#   define MOUSEKEY_DELAY_TIME 192
#endif


/* PS/2 mouse */
#ifdef PS2_MOUSE_ENABLE
/*

M hhkb/keymap.c => hhkb/keymap.c +1 -7
@@ 9,7 9,7 @@
#include "print.h"
#include "debug.h"
#include "util.h"
#include "keymap_skel.h"
#include "keymap.h"


// Convert physical keyboard layout to matrix array.


@@ 193,9 193,3 @@ uint8_t keymap_fn_keycode(uint8_t fn_bits)
{
    return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
}

// define a condition to enter special function mode
bool keymap_is_special_mode(uint8_t fn_bits)
{
    return host_get_mods() == (BIT_LSHIFT | BIT_RSHIFT) || host_get_mods() == (BIT_LCTRL | BIT_RSHIFT);
}

M hhkb/matrix.c => hhkb/matrix.c +1 -1
@@ 7,7 7,7 @@
#include <util/delay.h>
#include "print.h"
#include "util.h"
#include "matrix_skel.h"
#include "matrix.h"


#if (MATRIX_COLS > 16)

M host.h => host.h +1 -2
@@ 70,8 70,7 @@ void host_add_code(uint8_t code);
void host_swap_keyboard_report(void);
void host_clear_keyboard_report(void);
uint8_t host_has_anykey(void);
uint8_t *host_get_keys(void);
uint8_t host_get_mods(void);
uint8_t host_get_first_key(void);


void host_send_keyboard_report(void);

M pjrc/host.c => pjrc/host.c +11 -7
@@ 4,6 4,7 @@
#include "usb_mouse.h"
#include "debug.h"
#include "host.h"
#include "util.h"


#ifdef USB_NKRO_ENABLE


@@ 80,14 81,17 @@ uint8_t host_has_anykey(void)
    return cnt;
}

uint8_t *host_get_keys(void)
uint8_t host_get_first_key(void)
{
    return keyboard_report->keys;
}

uint8_t host_get_mods(void)
{
    return keyboard_report->mods;
#ifdef USB_NKRO_ENABLE
    if (keyboard_nkro) {
        uint8_t i = 0;
        for (; i < REPORT_KEYS && !keyboard_report->keys[i]; i++)
            ;
        return i<<3 | biton(keyboard_report->keys[i]);
    }
#endif
    return keyboard_report->keys[0];
}



D tmk.c => tmk.c +0 -97
@@ 1,97 0,0 @@
/* 2010/08/23 noname
 * keyboard firmware based on PJRC USB keyboard example
 */
/* Keyboard example with debug channel, for Teensy USB Development Board
 * http://www.pjrc.com/teensy/usb_keyboard.html
 * Copyright (c) 2008 PJRC.COM, LLC
 * 
 * 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.
 */

#include <stdbool.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "keyboard.h"
#include "usb.h"
#include "matrix.h"
#include "print.h"
#include "debug.h"
#include "util.h"
#include "jump_bootloader.h"
#ifdef PS2_MOUSE_ENABLE
#   include "ps2_mouse.h"
#endif


#define CPU_PRESCALE(n)    (CLKPR = 0x80, CLKPR = (n))


bool debug_enable = false;
bool debug_matrix = false;
bool debug_keyboard = false;
bool debug_mouse = false;


int main(void)
{
    DEBUG_LED_CONFIG;
    DEBUG_LED_OFF;

    // set for 16 MHz clock
    CPU_PRESCALE(0);

    // Initialize the USB, and then wait for the host to set configuration.
    // If the Teensy is powered without a PC connected to the USB port,
    // this will wait forever.
    usb_init();
    while (!usb_configured()) /* wait */ ;

    keyboard_init();
    matrix_scan();
    if (matrix_key_count() >= 3) {
#ifdef DEBUG_LED
        for (int i = 0; i < 6; i++) {
            DEBUG_LED_CONFIG;
            DEBUG_LED_ON;
            _delay_ms(500);
            DEBUG_LED_OFF;
            _delay_ms(500);
        }
#else
        _delay_ms(5000);
#endif
        print_enable = true;
        debug_enable = true;
        debug_matrix = true;
        debug_keyboard = true;
        debug_mouse = true;
        print("debug enabled.\n");
    }
    if (matrix_key_count() >= 4) {
        print("jump to bootloader...\n");
        _delay_ms(1000);
        jump_bootloader(); // not return
    }


    while (1) {
       keyboard_proc(); 
    }
}