Author Topic: TMK keyboard firmware  (Read 826934 times)

0 Members and 1 Guest are viewing this topic.

Offline RavenII

  • Posts: 191
Re: TMK keyboard firmware
« Reply #950 on: Thu, 08 October 2015, 11:45:44 »
If I'm trying to add more levels to the backlight...would it be sufficient enough to replace

Code: [Select]
void tick(void)
{
    if(current_level == 1)
    {
        duty_cycle = 85;
    }
    else if(current_level == 2)
    {
        pos++;
        duty_cycle = pgm_read_byte(&breathing_table[0][pos]);
        if(pos >= 0xff){
            pos = 0;
        }
    }
    else if(current_level == 3)
    {
        duty_cycle = 255;
    }
}

with

Code: [Select]
void tick(void)
{
    if(current_level == 1)
    {
        pos++;
        duty_cycle = pgm_read_byte(&breathing_table[0][pos]);
        if(pos >= 0xff){
            pos = 0;
        }
    }
    else if(current_level == 2)
    {
        duty_cycle = 64;
    }
    else if(current_level == 3)
    {
        duty_cycle = 127;
    }
    else if(current_level == 4)
    {
        duty_cycle = 192;
    }
    else if(current_level == 5)
    {
        duty_cycle = 255;
    }

}

In backlight.c?

Oh, and how would I make it so that the caps lock LED ac....wait, I think I know...let me try first.

Offline TheGlow

  • Posts: 48
Re: TMK keyboard firmware
« Reply #951 on: Thu, 08 October 2015, 13:26:36 »
Ah, I didn't remember that. You can change mouse key parameter using it hopefully.

As I said, use 'hid_listen' tool to see output from magic command. Not text editor.
The Lock command is disabled by default.
Just wanted to confirm, is hid_listen restricted to teensys? I had it running and went to town on lshift+rshift and many keys and didnt have anything show up.

Offline skullydazed

  • * Vendor
  • Posts: 307
  • Location: Bay Area, CA
  • Had to turn PM's off. Email info@clueboard.co!
    • Clueboard
Re: TMK keyboard firmware
« Reply #952 on: Thu, 08 October 2015, 18:27:48 »
Just wanted to confirm, is hid_listen restricted to teensys? I had it running and went to town on lshift+rshift and many keys and didnt have anything show up.

No, I have been using it on my custom PCB's just fine.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #953 on: Thu, 08 October 2015, 18:36:06 »
Hello all, Hasu, thanks for the awesome firmware!

I am seeing an issue that I can't figure out. When playing a game I am holding WASD a lot obviously but occasionally I will have a stuck key press - the key is obviously not stuck but the game will walk me into dangerous territory occasionally.  Is this a debouncing issue or perhaps these 20 year old switches need to be replaced?  Please advise!

Thanks.

Offline deductivemonkee

  • Posts: 572
  • Location: Canada BC
  • Professional Lurker
Re: TMK keyboard firmware
« Reply #954 on: Thu, 08 October 2015, 19:01:47 »
What should I set for rows and cols for alps64 pcb?
oh yeah I saw that crazy **** if that doesn't win I'm deleting my account

/ orthodox - 78g zealios / alps64 - mtsc / sentraq s-60x rgb - gat blues / let's split - 67g zealios / let's split - 67g zealios /

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #955 on: Thu, 08 October 2015, 19:17:07 »
What should I set for rows and cols for alps64 pcb?

https://github.com/tmk/tmk_keyboard

The alps64 folder is complete. Just modify the keymap and compile.

Offline deductivemonkee

  • Posts: 572
  • Location: Canada BC
  • Professional Lurker
Re: TMK keyboard firmware
« Reply #956 on: Thu, 08 October 2015, 19:56:45 »
What should I set for rows and cols for alps64 pcb?

https://github.com/tmk/tmk_keyboard

The alps64 folder is complete. Just modify the keymap and compile.

Thanks, kinda blipped over that... •_•
oh yeah I saw that crazy **** if that doesn't win I'm deleting my account

/ orthodox - 78g zealios / alps64 - mtsc / sentraq s-60x rgb - gat blues / let's split - 67g zealios / let's split - 67g zealios /

Offline hasu

  • Thread Starter
  • Posts: 3472
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
Re: TMK keyboard firmware
« Reply #957 on: Fri, 09 October 2015, 01:08:21 »
Hello all, Hasu, thanks for the awesome firmware!

I am seeing an issue that I can't figure out. When playing a game I am holding WASD a lot obviously but occasionally I will have a stuck key press - the key is obviously not stuck but the game will walk me into dangerous territory occasionally.  Is this a debouncing issue or perhaps these 20 year old switches need to be replaced?  Please advise!

Thanks.

The key stucking smells like your keymap has any problem, I don't think it comes from your hardware or firmware core part.
Post your keymap file.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #958 on: Fri, 09 October 2015, 06:38:22 »
Hello all, Hasu, thanks for the awesome firmware!

I am seeing an issue that I can't figure out. When playing a game I am holding WASD a lot obviously but occasionally I will have a stuck key press - the key is obviously not stuck but the game will walk me into dangerous territory occasionally.  Is this a debouncing issue or perhaps these 20 year old switches need to be replaced?  Please advise!

Thanks.

The key stucking smells like your keymap has any problem, I don't think it comes from your hardware or firmware core part.
Post your keymap file.


Here you go. All the files I have touched:

keymap.c
Code: [Select]
#include "keymap_common.h"

const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* 0: colemak */
    KEYMAP(ESC,  1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, CAPS,      \
           TAB,  Q,   W,   F,   P,   G,   J,   L,   U,   Y,   SCLN, LBRC,RBRC,BSLS,      \
           BSPC, A,   R,   S,   T,   D,   H,   N,   E,   I,   O,QUOT,ENT,            \
                      Z,   X,   C,   V,   B,   K,   M,   COMM,DOT, SLSH,RSFT,          \
           LCTL, LSFT,LALT,LGUI,           FN0,                     RGUI,FN4,FN1),

    /* 1: colemak */
    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, MINS,EQL, CAPS,      \
           TAB,  Q,   W,   E,   FN3,   T,   Y, PGUP,  UP,PGDN,    P,LBRC,RBRC,BSPC,      \
           DEL, FN2,   S,   D,   F,   G,   H, LEFT,DOWN,RGHT, SCLN,QUOT,      ENT,            \
                      Z,   X,   C,   V,   B,   K,   M,   COMM,DOT, SLSH,RSFT,          \
           LCTL, LSFT,LALT,LGUI,           FN0,                     RGUI,FN4,FN1),
 /* 1: Gaming */
    KEYMAP(ESC,  1,   2,   3,   4,   5,   6,   7,   8,   9,   0, MINS,EQL, CAPS,      \
           TAB,  Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P, LBRC,RBRC,BSLS,      \
           BSPC, A,   S,   D,   F,  G,   H,   J,   K,   L,   SCLN,QUOT,ENT,            \
                      Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,          \
           LCTL, LSFT,LALT,LGUI,           SPC,                     RGUI,RALT,FN1),

};

enum macro_id {
    AIDS,
    PRISM,
};


const uint16_t PROGMEM fn_actions[] = {
    ACTION_LAYER_TAP_KEY(1, KC_SPC),            // FN0
    ACTION_LAYER_MOMENTARY(2),                  // FN1
    ACTION_MACRO(AIDS),    // Types aids
    ACTION_MACRO(PRISM),    // Types “/prism “
    ACTION_LAYER_MOMENTARY(1),    // Same as FN0 but does not sent tab on tap
};


const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
    keyevent_t event = record->event;
    //uint8_t tap_count = record->tap_count;

    switch (id) {
        case AIDS:
            return (event.pressed ?
                   MACRO(T(A), T(I), T(D), T(S), END ) :
                    MACRO( END ) );
      case PRISM:
            return (event.pressed ?
                   MACRO(T(SLSH), T(P), T(R), T(I), T(S), T(M), T(SPC), END ) :
                    MACRO( END ) );
     
    }
    return MACRO_NONE;
};

tapping.h
Code: [Select]
/*
Copyright 2013 Jun Wako <wakojun@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ACTION_TAPPING_H
#define ACTION_TAPPING_H



/* period of tapping(ms) */
#ifndef TAPPING_TERM
#define TAPPING_TERM    325
#endif

/* tap count needed for toggling a feature */
#ifndef TAPPING_TOGGLE
#define TAPPING_TOGGLE  5
#endif

#define WAITING_BUFFER_SIZE 8


#ifndef NO_ACTION_TAPPING
void action_tapping_process(keyrecord_t record);
#endif

#endif

matrix.c
Code: [Select]
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
 * scan matrix
 */
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"


#ifndef DEBOUNCE
#   define DEBOUNCE 5
#endif
static uint8_t debouncing = DEBOUNCE;

/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];

static matrix_row_t read_cols(void);
static void init_cols(void);
static void unselect_rows(void);
static void select_row(uint8_t row);


inline
uint8_t matrix_rows(void)
{
    return MATRIX_ROWS;
}

inline
uint8_t matrix_cols(void)
{
    return MATRIX_COLS;
}

void matrix_init(void)
{
    // initialize row and col
    unselect_rows();
    init_cols();

    // initialize matrix state: all keys off
    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
        matrix[i] = 0;
        matrix_debouncing[i] = 0;
    }
}

uint8_t matrix_scan(void)
{
    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
        select_row(i);
        _delay_us(30);  // without this wait read unstable value.
        matrix_row_t cols = read_cols();
        if (matrix_debouncing[i] != cols) {
            matrix_debouncing[i] = cols;
            if (debouncing) {
                debug("bounce!: "); debug_hex(debouncing); debug("\n");
            }
            debouncing = DEBOUNCE;
        }
        unselect_rows();
    }

    if (debouncing) {
        if (--debouncing) {
            _delay_ms(1);
        } else {
            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
                matrix[i] = matrix_debouncing[i];
            }
        }
    }

    return 1;
}

bool matrix_is_modified(void)
{
    if (debouncing) return false;
    return true;
}

inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
    return (matrix[row] & ((matrix_row_t)1<<col));
}

inline
matrix_row_t matrix_get_row(uint8_t row)
{
    return matrix[row];
}

void matrix_print(void)
{
    print("\nr/c 0123456789ABCDEF\n");
    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
        phex(row); print(": ");
        pbin_reverse16(matrix_get_row(row));
        print("\n");
    }
}

uint8_t matrix_key_count(void)
{
    uint8_t count = 0;
    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
        count += bitpop16(matrix[i]);
    }
    return count;
}

/* Column pin configuration
 * col: 0   1   2   3   4   5   6   7   8   9   10  11  12  13
 * pin: B6  F7  F6  F5  F4  F1  F0  B0  B1  B2  B3  B7  D0  D1  (Rev.A)
 */
static void  init_cols(void)
{
    // Input with pull-up(DDR:0, PORT:1)
    DDRB  &= ~(1<<6 | 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
    PORTB |=  (1<<6 | 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7);
    DDRF  &= ~(1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
    PORTF |=  (1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
    DDRD  &= ~(1<<0 | 1<<1);
    PORTD |=  (1<<0 | 1<<1);
   
}

static matrix_row_t read_cols(void)
{
    return (PINB&(1<<6) ? 0 : (1<<0)) |
           (PINF&(1<<7) ? 0 : (1<<1)) |
           (PINF&(1<<6) ? 0 : (1<<2)) |
           (PINF&(1<<5) ? 0 : (1<<3)) |
           (PINF&(1<<4) ? 0 : (1<<4)) |
           (PINF&(1<<1) ? 0 : (1<<5)) |
           (PINF&(1<<0) ? 0 : (1<<6)) |
           (PINB&(1<<0) ? 0 : (1<<7)) |
           (PINB&(1<<1) ? 0 : (1<<8)) |
           (PINB&(1<<2) ? 0 : (1<<9)) |
           (PINB&(1<<3) ? 0 : (1<<10)) |
           (PINB&(1<<7) ? 0 : (1<<11)) |
           (PIND&(1<<0) ? 0 : (1<<12)) |
           (PIND&(1<<1) ? 0 : (1<<13));
}

/* Row pin configuration
 * row: 0   1   2   3   4
 * pin: D2  D3  C6  C7  D5
 */
static void unselect_rows(void)
{
    // Hi-Z(DDR:0, PORT:0) to unselect
    DDRD  &= ~0b00101100;
    PORTD &= ~0b00101100;
    DDRC  &= ~0b11000000;
    PORTC &= ~0b11000000;
}

static void select_row(uint8_t row)
{
    // Output low(DDR:1, PORT:0) to select
    switch (row) {
        case 0:
            DDRD  |= (1<<2);
            PORTD &= ~(1<<2);
            break;
        case 1:
            DDRD  |= (1<<3);
            PORTD &= ~(1<<3);
            break;
        case 2:
            DDRC  |= (1<<6);
            PORTC &= ~(1<<6);
            break;
        case 3:
            DDRC  |= (1<<7);
            PORTC &= ~(1<<7);
            break;
        case 4:
            DDRD  |= (1<<5);
            PORTD &= ~(1<<5);
            break;
    }
}

config.h
Code: [Select]
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef CONFIG_H
#define CONFIG_H


/* USB Device descriptor parameter */
#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x6060
#define DEVICE_VER      0x0001
#define MANUFACTURER    geekhack
#define PRODUCT         GH60
#define DESCRIPTION     t.m.k. keyboard firmware for GH60

/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14

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

/* Set 0 if debouncing isn't needed */
#define DEBOUNCE    5

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

/* key combination for command */
#define IS_COMMAND() ( \
    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)



/*
 * Feature disable options
 *  These options are also useful to firmware size reduction.
 */

/* disable debug print */
//#define NO_DEBUG

/* disable print */
//#define NO_PRINT

/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

#endif

Offline RavenII

  • Posts: 191
Re: TMK keyboard firmware
« Reply #959 on: Fri, 09 October 2015, 10:41:15 »
Well my experiment failed...but I figured I could just use the 3 levels at 85, 170, 255 instead and ditch the pulsating, I'm fine with that....my question now is...

With the caps lock PB2 and the rest of my LEDs being on PB6, how would I disable the caps lock LED functionality and make PB2 work with PB6?...?

I know thought I could comment out the led.c file in the Makefile, but what do I do with PORTB |= (1<<6); and PORTB &= ~(1<<6); in the backlight.c file?

Could I just do something like PORTB |= (1<<6);(1<<2) ?? Didn't work...
« Last Edit: Fri, 09 October 2015, 11:24:39 by RavenII »

Offline RavenII

  • Posts: 191
Re: TMK keyboard firmware
« Reply #960 on: Fri, 09 October 2015, 10:41:55 »
Double post...

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #961 on: Fri, 09 October 2015, 12:16:38 »
Well my experiment failed...but I figured I could just use the 3 levels at 85, 170, 255 instead and ditch the pulsating, I'm fine with that....my question now is...

With the caps lock PB2 and the rest of my LEDs being on PB6, how would I disable the caps lock LED functionality and make PB2 work with PB6?...?

I know thought I could comment out the led.c file in the Makefile, but what do I do with PORTB |= (1<<6); and PORTB &= ~(1<<6); in the backlight.c file?

Could I just do something like PORTB |= (1<<6);(1<<2) ?? Didn't work...

B6 is a PWM pin. B2 is not. So you will not be able to do the same brightness control. B2 is on or off only, you could try simulating PWM by turning it on and off rapidly, but that eats CPU cycles.

B2 is also wired differently. B6 is driving a transistor to source current to the LEDs. B2 is the opposite sinking current. http://www.petervis.com/Raspberry_PI/Driving_LEDs_with_CMOS_and_TTL_Outputs/Current_Sinking_and_Sourcing_in_Digital_Circuits.html

This makes it difficult to 'disconnect' the caps lock LED from B2 and connect it to B6. The trace you need to cut is on the top side of the PCB (under the plate).

Offline RavenII

  • Posts: 191
Re: TMK keyboard firmware
« Reply #962 on: Fri, 09 October 2015, 13:06:47 »
B6 is a PWM pin. B2 is not. So you will not be able to do the same brightness control. B2 is on or off only, you could try simulating PWM by turning it on and off rapidly, but that eats CPU cycles.

B2 is also wired differently. B6 is driving a transistor to source current to the LEDs. B2 is the opposite sinking current. http://www.petervis.com/Raspberry_PI/Driving_LEDs_with_CMOS_and_TTL_Outputs/Current_Sinking_and_Sourcing_in_Digital_Circuits.html

This makes it difficult to 'disconnect' the caps lock LED from B2 and connect it to B6. The trace you need to cut is on the top side of the PCB (under the plate).
Show Image


Interesting, that was a great explanation. Thanks for the response. I suppose I could repurpose the caps lock as some sort of indicator...layer/function...etc. Maybe I'll tackle that one of these days. For now, I'll move on to my next idea...and that is to install a capacitor in the circuit to minimize the flickering that PWM causes due to the on/off switching......

Thanks again a-c

Offline hasu

  • Thread Starter
  • Posts: 3472
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
Re: TMK keyboard firmware
« Reply #963 on: Sat, 10 October 2015, 00:18:08 »
Hello all, Hasu, thanks for the awesome firmware!

I am seeing an issue that I can't figure out. When playing a game I am holding WASD a lot obviously but occasionally I will have a stuck key press - the key is obviously not stuck but the game will walk me into dangerous territory occasionally.  Is this a debouncing issue or perhaps these 20 year old switches need to be replaced?  Please advise!

Thanks.

The key stucking smells like your keymap has any problem, I don't think it comes from your hardware or firmware core part.
Post your keymap file.


Here you go. All the files I have touched:

How do you change to layer 2(gaming)? you have a mechanical lock switch on FN1? or use command Lshift+Rshift+2?

Your gaming layer is almost ok and you won't have key stucking as long as you don't touch FN1 accidentally. If you touch FN1 and space at same time space can be stuck. But other keys won't be stuck.

What's your keyboard and OS? And how do you walk in the game?

You have #define MATRIX_HAS_GHOST in config.h, your keyobard doesn't have diodes on matrix? It enalbs TMK ghost blocking code for a lame keyboard without diodes. The ghost blocking code is not used much, may have bug.

Are you using USB NKRO? If so disable it and test it again.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #964 on: Sat, 10 October 2015, 08:03:17 »
Hello all, Hasu, thanks for the awesome firmware!

I am seeing an issue that I can't figure out. When playing a game I am holding WASD a lot obviously but occasionally I will have a stuck key press - the key is obviously not stuck but the game will walk me into dangerous territory occasionally.  Is this a debouncing issue or perhaps these 20 year old switches need to be replaced?  Please advise!

Thanks.

The key stucking smells like your keymap has any problem, I don't think it comes from your hardware or firmware core part.
Post your keymap file.


Here you go. All the files I have touched:

How do you change to layer 2(gaming)? you have a mechanical lock switch on FN1? or use command Lshift+Rshift+2?

Your gaming layer is almost ok and you won't have key stucking as long as you don't touch FN1 accidentally. If you touch FN1 and space at same time space can be stuck. But other keys won't be stuck.

What's your keyboard and OS? And how do you walk in the game?

You have #define MATRIX_HAS_GHOST in config.h, your keyobard doesn't have diodes on matrix? It enalbs TMK ghost blocking code for a lame keyboard without diodes. The ghost blocking code is not used much, may have bug.

Are you using USB NKRO? If so disable it and test it again.

Layer 2 is switched with a locking alps switch.

I'm on OS X and the keyboard is a handwired 60% using alps switches.

I have a full diode array so I should switch this. Just needs commented out right?

I was not using NKRO so I will try it with.

I had initially built the board up without diodes so thats why there's some oddity with the ghosting thing. The board has diodes now. I will report if it seems to help.
« Last Edit: Sat, 10 October 2015, 08:10:05 by tominabox1 »

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #965 on: Sat, 10 October 2015, 09:57:52 »
Well I made the changes suggested and the problem still cropped up. It seems like it's only with the D key so I end up strafing. I replaced the switch and that didn't help.

I will try swapping between NKRO and non- and see if that helps.

Offline nephiel

  • Posts: 129
  • Location: Spain
Re: TMK keyboard firmware
« Reply #966 on: Mon, 12 October 2015, 07:00:55 »
Sizes: full cygwin is a beast, you don't need all that stuff; there should be a way to select a "base" installation, plus "development tools". But msys should be fine as well.

Times: it should definitely not take 3-4 minutes to compile, but something like 10 seconds on modern computers (and most of *that* time might be locating, reading and writing files ;)

Commenting: '#' in C does not mean a comment, but a special type of "command" (which is actually not a C command, it is processed by the C preprocessor). Commenting in C (plus plus) is done by 'double slash':
Code: [Select]
// this is a comment
or more traditionally by
Code: [Select]
/* this is a comment */

EDIT: yea, got owned again.
Many thanks. I know enough to shamble my way through some things.
I'll try to compile again after a reboot perhaps. I don't have much running but I would expect an i7 with 16gb memory meet the recommended specs.
Just odd the others were faster and this msys clearly not same speed.
Rebooted, about 1 min, 3 seconds now. A bit better.

I've been on the bare build all day and its seeming pretty good. Just a few extra spaces on occasion but i think that just might be user error.

Edit: heres why I thought that. In the linked how to, he clearly states # is to comment out.
http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html

Just to clarify: that specific file in the linked how to is a Makefile, not a C source file. Makefiles do use # to comment out a line. https://www.gnu.org/software/make/manual/make.html#Makefile-Contents
Stop wasting space! Chop your spacebar into bits!
NPH60: a custom 60% w/TrackPoint & split spacebar

Offline TheGlow

  • Posts: 48
Re: TMK keyboard firmware
« Reply #967 on: Mon, 12 October 2015, 13:11:29 »
Just to clarify: that specific file in the linked how to is a Makefile, not a C source file. Makefiles do use # to comment out a line. https://www.gnu.org/software/make/manual/make.html#Makefile-Contents
Thanks for that. I noticed it after but good hear confirmation on it.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #968 on: Mon, 12 October 2015, 15:10:53 »
Little update on my key sticking problem.  I made some changes but I still seem to get some occasional sticking. At least now if I tap the sticking key a few times it goes away.  It does not seem to be limited to a single key either.  Right now with NKRO turned OFF and the debouncing at 7, the sticking is rare.  I am using 30 year old switches so there may be something to the debouncing being the problem, but its only when I have been holding the key for a long period of time (>1 second) when the issue seems to pop up.

I'm not quite sure where else to look. Disassembling the switches and lubricating is an option if it may help. I wish I had my scope so I could check the debouncing but everything is in storage right now.

Offline hasu

  • Thread Starter
  • Posts: 3472
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
Re: TMK keyboard firmware
« Reply #969 on: Mon, 12 October 2015, 16:12:56 »
hmm, did you try other os than OSX? On Windows or Linux, can you see the sticking keys?
"Holding key long" reminds me OSX key repeating problem which was fixed in ad hoc way.

What is version of your OSX? 10.11? They might have made change there in the latest update, perhapse.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #970 on: Mon, 12 October 2015, 16:14:30 »
hmm, did you try other os than OSX? On Windows or Linux, can you see the sticking keys?
"Holding key long" reminds me OSX key repeating problem which was fixed in ad hoc way.

What is version of your OSX? 10.11? They might have made change there in the latest update, perhapse.
I have not tried another system. I am on 10.11.

I have not had this problem with other keyboards though

Offline hasu

  • Thread Starter
  • Posts: 3472
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
Re: TMK keyboard firmware
« Reply #971 on: Mon, 12 October 2015, 16:23:16 »
Yep, the repeating problem is specifice to tmk. Try windows or linux, to see if you see your problem on those.
EDIT: the other keyboards also use TMK firmware?

And use hid_listen on OSX to see matrix state and key report. You can enable debug output with magic commands; X and K. By default these are assigned to LShift+RShift+x and LShift+RShift+k. You will see output like the following.

Code: [Select]
r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0010000000000000
04: 0000010000000000
05: 0000000000000000
06: 0000000000000000
07: 0000000000000000
keyboard_report: 01 00 08 00 00 00 00 00

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0010000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0000000000000000
keyboard_report: 01 00 00 00 00 00 00 00

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0000000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0000000000000000
keyboard_report: 00 00 00 00 00 00 00 00

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0001000000000000
03: 0000000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0000000000000000

r/c 0123456789ABCDEF
00: 0000000000000000
01: 0000000000000000
02: 0000000000000000
03: 0000000000000000
04: 0000000000000000
05: 0000000000000000
06: 0000000000000000
07: 0000000000000000
keyboard_report: 00 00 28 00 00 00 00 00
keyboard_report: 00 00 00 00 00 00 00 00



Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #972 on: Mon, 12 October 2015, 17:26:13 »
OK I have HID listen running but I'm not sure what to be looking for.

Edit: no the other keyboards to not use TMK.  I am seeing a lot of "bounce!" messages in the hid_listen but I'm not sure that is bad.
« Last Edit: Tue, 13 October 2015, 15:27:38 by tominabox1 »

Offline TheGlow

  • Posts: 48
Re: TMK keyboard firmware
« Reply #973 on: Tue, 13 October 2015, 09:07:02 »
Is there much different between the keymap.h and .c?
For the frosty flake theres a keymap.c which is very basic but then keymap_ansi.h which is where I applied my configs and so far its working fine.
In trying to get the macros to work I see the example in keymap_hasu.c
I tried to copy/paste into my ansi.h. It compiled without errors but doesnt look like it did anything.

At least for the LED I realized the F9 winlock was actually indicating the numlock status. I removed those lines and it doesn't light up now. I think thats good enough for me for now.

Just an inquiry for macros before I put too much effort in and find out it doesnt do what I'd like.
I can modify wait times between inputs and what not? I have some online forms that sometimes you need to wait 1 or so seconds from a previous entry before it processes and populates choices for the next field. so simple stuff like a text string, tab x7, text, wait, tab, text, etc.

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #974 on: Wed, 14 October 2015, 07:37:42 »
well i'm in over my head i think. i have the keyboard wired and mounted but for the life of me i can't get any keystrokes to be returned when i use my modified code. when i use the phantom un changed code i get keystrokes but not the right ones and not for all keys. i blame my lack of understanding of the firmware. have pity on me.

what i've done and or included:
made the hex file
included wiring map with pinout
entire keyboard folder with all current files.

if i can just get alittle help getting started on the firmware keymap or what ever is stopping me from getting keystrokes i can likely figure the rest out. please help.  :-[
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #975 on: Wed, 14 October 2015, 11:22:02 »
well i'm in over my head i think. i have the keyboard wired and mounted but for the life of me i can't get any keystrokes to be returned when i use my modified code. when i use the phantom un changed code i get keystrokes but not the right ones and not for all keys. i blame my lack of understanding of the firmware. have pity on me.

what i've done and or included:
made the hex file
included wiring map with pinout
entire keyboard folder with all current files.

if i can just get alittle help getting started on the firmware keymap or what ever is stopping me from getting keystrokes i can likely figure the rest out. please help.  :-[

Which direction did you install your diodes?

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #976 on: Wed, 14 October 2015, 11:49:26 »
well i'm in over my head i think. i have the keyboard wired and mounted but for the life of me i can't get any keystrokes to be returned when i use my modified code. when i use the phantom un changed code i get keystrokes but not the right ones and not for all keys. i blame my lack of understanding of the firmware. have pity on me.

what i've done and or included:
made the hex file
included wiring map with pinout
entire keyboard folder with all current files.

if i can just get alittle help getting started on the firmware keymap or what ever is stopping me from getting keystrokes i can likely figure the rest out. please help.  :-[

Which direction did you install your diodes?
Black bar down towards the run. They keyboard does return incorrect keystrokes when using the default phantom firmware. So something is done right at least
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #977 on: Wed, 14 October 2015, 12:41:10 »
well i'm in over my head i think. i have the keyboard wired and mounted but for the life of me i can't get any keystrokes to be returned when i use my modified code. when i use the phantom un changed code i get keystrokes but not the right ones and not for all keys. i blame my lack of understanding of the firmware. have pity on me.

what i've done and or included:
made the hex file
included wiring map with pinout
entire keyboard folder with all current files.

if i can just get alittle help getting started on the firmware keymap or what ever is stopping me from getting keystrokes i can likely figure the rest out. please help.  :-[

Which direction did you install your diodes?
Black bar down towards the run. They keyboard does return incorrect keystrokes when using the default phantom firmware. So something is done right at least

You have more than 16 columns. See the section under Misc in the FAQ. https://github.com/tmk/tmk_keyboard/wiki/FAQ

You could also just put the two keys 1 and t on the first or last column since they have unused rows. Then you would only have 16 columns and save a pin for something else.

Though you should still get output from the other columns. Post a picture of your wiring.
« Last Edit: Wed, 14 October 2015, 12:47:07 by a-c »

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #978 on: Wed, 14 October 2015, 16:42:51 »
well i'm in over my head i think. i have the keyboard wired and mounted but for the life of me i can't get any keystrokes to be returned when i use my modified code. when i use the phantom un changed code i get keystrokes but not the right ones and not for all keys. i blame my lack of understanding of the firmware. have pity on me.

what i've done and or included:
made the hex file
included wiring map with pinout
entire keyboard folder with all current files.

if i can just get alittle help getting started on the firmware keymap or what ever is stopping me from getting keystrokes i can likely figure the rest out. please help.  :-[

Which direction did you install your diodes?
Black bar down towards the run. They keyboard does return incorrect keystrokes when using the default phantom firmware. So something is done right at least

You have more than 16 columns. See the section under Misc in the FAQ. https://github.com/tmk/tmk_keyboard/wiki/FAQ

You could also just put the two keys 1 and t on the first or last column since they have unused rows. Then you would only have 16 columns and save a pin for something else.

Though you should still get output from the other columns. Post a picture of your wiring.

i added 1UL<< replacing all the 1<< in the column definition section. still nothing.

the keyboard has a standard ANSI layout more or less. all the data files will be attached in a ZIP
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline VinnyCordeiro

  • Posts: 432
Re: TMK keyboard firmware
« Reply #979 on: Wed, 14 October 2015, 18:24:24 »
Atmel Studio 7 was recently released. Does anyone use this IDE to compile TMK? The manual says that it supports:

Quote
ARM GCC Toolchain 4.9.3 with upstream versions:
  • gcc 4.9 (revision 221220)
  • Binutils 2.24
  • gdb 7.8.0.20150304-cvs

Theoretically speaking, it is possible. While I wait for an answer I'll try it myself.
« Last Edit: Wed, 14 October 2015, 18:26:56 by VinnyCordeiro »

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #980 on: Wed, 14 October 2015, 20:32:17 »
i added 1UL<< replacing all the 1<< in the column definition section. still nothing.

the keyboard has a standard ANSI layout more or less. all the data files will be attached in a ZIP

An actual photograph of your wiring.

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #981 on: Wed, 14 October 2015, 21:43:31 »
You laugh I cry
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline a-c

  • Posts: 196
  • Location: USA
Re: TMK keyboard firmware
« Reply #982 on: Wed, 14 October 2015, 22:39:34 »
You laugh I cry

The Phantom PCB is wired opposite of what most TMK handwire jobs are done. If all your diodes were installed backwards it would work. You could start with a different keyboard like the GH60 which is wired the way you did, or just switch all the rows to cols and cols to rows in your current matrix. You will have to adjust your keymap to make sense.

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #983 on: Wed, 14 October 2015, 22:43:27 »
You laugh I cry

The Phantom PCB is wired opposite of what most TMK handwire jobs are done. If all your diodes were installed backwards it would work. You could start with a different keyboard like the GH60 which is wired the way you did, or just switch all the rows to cols and cols to rows in your current matrix. You will have to adjust your keymap to make sense.
Hmmm. I'll give the GH60 a shot and see if I have any luck. All the layouts are new to me as this is my first project. I'll update tomorrow if I can.
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline mrbishop

  • * Maker
  • Posts: 799
  • Location: South Carolina USA
  • Evil Genius
    • Bishop Computer Design web
Re: TMK keyboard firmware
« Reply #984 on: Thu, 15 October 2015, 07:03:09 »
Haha that kinda worked. Its super off but it’s a start. Most of the keys are returning keystrokes now however they are pretty backwards. But it’s a start.

For refference
2= home
5=’=’
6=-
7=0
8=9
9=8
0=7
-=6
==5
G=;
F=‘
J=k
K=J
L=H
;=G
‘=f
U=
Enter=d
Backspace=4
N=m
M=n
T=
Y=[
Projects
Build to give back, 40% | Alps/Matias Removal ToolUltraHack 67% Hackdura  | ErgoDox case
                             
    

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #985 on: Thu, 15 October 2015, 07:37:04 »
Hasu, I think I figured out my problem with the key sticking - I was changing the wrong debouncing value in the config.h.

I also have the code working to have an LED come on when an alternate layer is activated, as well as a single toggleable backlight LED.  Once I figure out how to fork the code on git, I will post a link.

Offline justinyhuang

  • Posts: 31
Re: TMK keyboard firmware
« Reply #986 on: Fri, 16 October 2015, 11:27:42 »
i am not sure if this has been discussed before:
is there a way to toggle the LED/backlights when a new layer has been switched to, or a key has been pressed?
i see in the code that there are macros to manipulate the LED status, but wonder how to use the macros to achieve the requirement above...
any pointers would be appeciated.

thanks,

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #987 on: Fri, 16 October 2015, 11:51:29 »
i am not sure if this has been discussed before:
is there a way to toggle the LED/backlights when a new layer has been switched to, or a key has been pressed?
i see in the code that there are macros to manipulate the LED status, but wonder how to use the macros to achieve the requirement above...
any pointers would be appeciated.

thanks,

I have code that will light up an LED when a layer that is not the default layer is selected.  I will try to figure out how to upload my code to git tonight. I have been meaning to.

Offline justinyhuang

  • Posts: 31
Re: TMK keyboard firmware
« Reply #988 on: Fri, 16 October 2015, 11:58:17 »
I have code that will light up an LED when a layer that is not the default layer is selected.  I will try to figure out how to upload my code to git tonight. I have been meaning to.

thank you tominabox1! that would be very helpful.

Offline nephiel

  • Posts: 129
  • Location: Spain
Re: TMK keyboard firmware
« Reply #989 on: Fri, 16 October 2015, 16:24:40 »
i am not sure if this has been discussed before:
is there a way to toggle the LED/backlights when a new layer has been switched to, or a key has been pressed?
i see in the code that there are macros to manipulate the LED status, but wonder how to use the macros to achieve the requirement above...
any pointers would be appeciated.

thanks,


I have a LED set up to turn on while the Fn layer is active.
In addition my CapsLock key LED turns into NumLock LED while the Numpad layer is active.
Code here and here.

There probably is a more elegant way to do it, but this one worked for me.
Stop wasting space! Chop your spacebar into bits!
NPH60: a custom 60% w/TrackPoint & split spacebar

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #990 on: Fri, 16 October 2015, 20:29:03 »
I finally figured out how to get my changes up but its a bit confusing because I didn't do the commit right but you can see where some of the changes are

https://github.com/tominabox1/tmk_keyboard/commit/5e1625db3ad92c23bb17b3fde1e3a226370a9df0

Offline KHAANNN

  • Posts: 1660
Re: TMK keyboard firmware
« Reply #991 on: Sat, 17 October 2015, 13:49:00 »
Would it be possible to:

1) Switch a layer-activator-key to be right-shift until it's switched back
2) Report NumLock while this mode is activated with the usb-usb converter

Pretty much like how KBParadise V60's let arrow-mode and modifier-mode to be switched, when the arrow mode is on, the side-led lights up, so it's easy to differentiate modes (2) is for this reason

I normally don't use the right shift, yet I rarely need it, and the layer change shortcomings of tmk doesn't let me put the R-Shift on a layer (it seemed impossible to do it with consistency, when you release the layer key before the assigned shift, the shift gets stuck etc.)
Endgame | 1.25 Cmd for GMK Sets Please | Or Just 1.25 Blanks Like The Good Old Days

Offline building_an_ergo

  • Posts: 90
  • Location: Kyoto, Japan
Re: TMK keyboard firmware
« Reply #992 on: Sun, 18 October 2015, 05:45:11 »
Hello,

I am trying to figure out tmkkeyboard for the first time.

I figured out how to edit to keymap.c to make it what I want, and how to compile it in windows (which was a pain). 

My question is how to make a key macro however.  What I want is for one key to act as if I had pressed Shift+Alt.  This is the windows shortcut to change languages, and is pretty much the last thing I need to make my perfect layout.

Does anyone know how to do this?  The documentation isn't exactly clear (at least not to me).

If it makes any difference, I am using the cub-unic ergodox fork.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #993 on: Sun, 18 October 2015, 07:05:00 »
Hello,

I am trying to figure out tmkkeyboard for the first time.

I figured out how to edit to keymap.c to make it what I want, and how to compile it in windows (which was a pain). 

My question is how to make a key macro however.  What I want is for one key to act as if I had pressed Shift+Alt.  This is the windows shortcut to change languages, and is pretty much the last thing I need to make my perfect layout.

Does anyone know how to do this?  The documentation isn't exactly clear (at least not to me).

If it makes any difference, I am using the cub-unic ergodox fork.

if you made a macro key it would still have to be a 2 key operation unless you put it on your default layer I guess... if it were me I would just leave it.

Offline building_an_ergo

  • Posts: 90
  • Location: Kyoto, Japan
Re: TMK keyboard firmware
« Reply #994 on: Sun, 18 October 2015, 07:40:30 »
if you made a macro key it would still have to be a 2 key operation unless you put it on your default layer I guess... if it were me I would just leave it.

Which is exactly what I would like to do.  I have one free space on my current default layer it would be perfect for.

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #995 on: Sun, 18 October 2015, 08:43:40 »
if you made a macro key it would still have to be a 2 key operation unless you put it on your default layer I guess... if it were me I would just leave it.

Which is exactly what I would like to do.  I have one free space on my current default layer it would be perfect for.

Should be something like this:
Code: [Select]
/*
 * Macro definition
 */
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
    switch (id) {
        case SHIFT_ALT:
            return (record->event.pressed ?
                    MACRO( D(LALT), D(LSHFT), END ) :
                    MACRO( U(LALT), U(LSHFT), END ));
    }
    return MACRO_NONE;
}

Then in your fn definitions you would put:

Code: [Select]
[8] = ACTION_MACRO(SHIFT_ALT),
Where the number in brackets is your Fn number (FN8) here - then that goes in your keymap.

Offline building_an_ergo

  • Posts: 90
  • Location: Kyoto, Japan
Re: TMK keyboard firmware
« Reply #996 on: Sun, 18 October 2015, 10:09:20 »
I think I have done fn actions before.  It would be something like this in the keymap.c?
Code: [Select]
/*
 * Fn action definition
 */
static const uint16_t PROGMEM fn_actions[] = {
    ACTION_FUNCTION(TEENSY_KEY),                    // FN0 - Teensy key
    ACTION_LAYER_MOMENTARY(1),                      // FN1 - switch to Layer1
    ACTION_LAYER_SET(2, ON_PRESS),                  // FN2 - set Layer2
    ACTION_LAYER_TOGGLE(3),                         // FN3 - toggle Layer3 aka Numpad layer
    ACTION_LAYER_SET(0, ON_PRESS),                  // FN4 - set Layer0
    ACTION_LAYER_TOGGLE(1),                         // FN5 - toggle Layer1 aka F Keys
    ACTION_MACRO(SHIFT_ALT),     // FN6 - Language Change
};

Would the macro definition also be in the keymap?

Offline flabbergast

  • Posts: 234
  • Location: UK
Re: TMK keyboard firmware
« Reply #997 on: Sun, 18 October 2015, 10:23:15 »
Correct. All of this is happening in keymap.c file. To assign the macro to a key, just use 'FN6' for that key in the definition of your keymap. Similar example is also referenced in the official TMK keymap FAQ file, namely this one.

Offline building_an_ergo

  • Posts: 90
  • Location: Kyoto, Japan
Re: TMK keyboard firmware
« Reply #998 on: Sun, 18 October 2015, 10:42:53 »
So after looking at the example, I assumed the macro definition should look like this:

Code: [Select]
/*
 * Macro definition
 */
enum macro_id {
    SHIFT_ALT,
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
    switch (id) {
        case SHIFT_ALT:
            return (record->event.pressed ?
                    MACRO( D(LALT), D(LSFT), END ) :
                    MACRO( U(LALT), U(LSFT), END ));
    }
    return MACRO_NONE;
}

It compiled, but doesn't seem to output anything at all.  :confused:

Offline tominabox1

  • Posts: 288
Re: TMK keyboard firmware
« Reply #999 on: Sun, 18 October 2015, 10:44:52 »
So after looking at the example, I assumed the macro definition should look like this:

Code: [Select]
/*
 * Macro definition
 */
enum macro_id {
    SHIFT_ALT,
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
    switch (id) {
        case SHIFT_ALT:
            return (record->event.pressed ?
                    MACRO( D(LALT), D(LSFT), END ) :
                    MACRO( U(LALT), U(LSFT), END ));
    }
    return MACRO_NONE;
}

It compiled, but doesn't seem to output anything at all.  :confused:

Can you post your whole keymap file