Merge branch '2016-02-hardware'

* 2016-02-hardware:
  Move keymap data structures out of the toplevel sketch
  better implementation/general separation for keyswitch matrix
  We're not using WS2812 in the new implementation
  Make cRGB initialization not depend on struct order.
pull/18/head
Jesse Vincent 9 years ago
commit 024c8f39ab

@ -27,8 +27,6 @@ void setup();
extern HARDWARE_IMPLEMENTATION KeyboardHardware; extern HARDWARE_IMPLEMENTATION KeyboardHardware;
extern uint8_t matrixState[ROWS][COLS];
extern const Key keymaps[KEYMAPS][ROWS][COLS];
extern uint8_t primary_keymap; extern uint8_t primary_keymap;
extern uint8_t temporary_keymap; extern uint8_t temporary_keymap;

@ -7,8 +7,6 @@
#include "KeyboardioHID.h" #include "KeyboardioHID.h"
uint8_t matrixState[ROWS][COLS] = {0};
const Key keymaps[KEYMAPS][ROWS][COLS] = { KEYMAP_LIST };
uint8_t primary_keymap = 0; uint8_t primary_keymap = 0;
uint8_t temporary_keymap = 0; uint8_t temporary_keymap = 0;

@ -1,6 +1,23 @@
#include "LEDControl.h" #include "LEDControl.h"
LEDControl_::LEDControl_(void) { LEDControl_::LEDControl_(void) {
led_off.r = 0;
led_off.g = 0;
led_off.b = 0;
led_steady.r = 0;
led_steady.g = 255;
led_steady.b = 0;
led_blue.r = 0;
led_blue.g = 0;
led_blue.b = 255;
led_dark_blue.r = 0;
led_dark_blue.g = 0;
led_dark_blue .b = 127;
led_bright_red.r = 255;
led_bright_red.g = 0;
led_bright_red.b = 0;
} }
@ -107,7 +124,7 @@ void LEDControl_::led_compute_breath() {
} }
led_breathe.SetHSV(200, 255, breathe_brightness); hsv_to_rgb(&led_breathe,200, 255, breathe_brightness);
} }
void LEDControl_::effect_breathe_update() { void LEDControl_::effect_breathe_update() {

@ -32,17 +32,14 @@ class LEDControl_ {
uint8_t pos = 0; uint8_t pos = 0;
void hsv_to_rgb(cRGB *cRGB, uint16_t h, uint16_t s, uint16_t v); void hsv_to_rgb(cRGB *cRGB, uint16_t h, uint16_t s, uint16_t v);
cRGB led_off;
cRGB led_steady;
cRGB led_off = { .r = 0, .g = 0, .b = 0 }; cRGB led_blue;
cRGB led_steady = { .r = 0, .g = 255, .b = 0}; cRGB led_dark_blue;
cRGB led_blue = { .r = 0, .g = 0, .b = 255 }; cRGB led_bright_red;
cRGB led_dark_blue = { .r = 0, .g = 0, .b = 127 };
cRGB led_bright_red = { .r = 255, .g = 0, .b = 0};
cRGB led_breathe; cRGB led_breathe;
cRGB rainbow; cRGB rainbow;
uint16_t rainbow_hue = 0; //stores 0 to 614 uint16_t rainbow_hue = 0; //stores 0 to 614
static const uint8_t rainbow_steps = 1; //number of hues we skip in a 360 range per update static const uint8_t rainbow_steps = 1; //number of hues we skip in a 360 range per update

@ -1,5 +1,4 @@
#include <Arduino.h> #include <Arduino.h>
#include "WS2812.h"
#include "Model01.h" #include "Model01.h"
Model01::Model01(void) { Model01::Model01(void) {
@ -24,12 +23,13 @@ void Model01::led_sync() {
void Model01::scan_matrix() { void Model01::scan_matrix() {
uint8_t key_data;
//scan the Keyboard matrix looking for connections //scan the Keyboard matrix looking for connections
for (byte row = 0; row < LEFT_ROWS; row++) { for (byte row = 0; row < LEFT_ROWS; row++) {
for (byte col = 0; col < LEFT_COLS; col++) { for (byte col = 0; col < LEFT_COLS; col++) {
handle_key_event(row, col); handle_key_event(row, col, &key_data);
handle_key_event(row, (COLS - 1) - col); handle_key_event(row, (COLS - 1) - col, &key_data);
} }
} }
} }

@ -4,7 +4,6 @@
#include "../keymaps.h" #include "../keymaps.h"
#include "../generated/keymaps.h"
#include "../key_events.h" #include "../key_events.h"

@ -42,11 +42,11 @@ void Model01Beta::scan_matrix() {
for (byte col = 0; col < LEFT_COLS; col++) { for (byte col = 0; col < LEFT_COLS; col++) {
scan_left_col(row,col,&matrixState[row][col]); scan_left_col(row,col,&matrixState[row][col]);
handle_key_event(row, col); handle_key_event(row, col, &matrixState[row][col]);
if (right_hand_connected()) { if (right_hand_connected()) {
scan_right_col(row,col,&matrixState[row][(COLS - 1) - col]); scan_right_col(row,col,&matrixState[row][(COLS - 1) - col]);
handle_key_event(row, (COLS - 1) - col); handle_key_event(row, (COLS - 1) - col, &matrixState[row][(COLS - 1) - col]);
} }
} }
finish_scanning_row(row); finish_scanning_row(row);

@ -2,7 +2,6 @@
#include <Arduino.h> #include <Arduino.h>
#include "../keymaps.h" #include "../keymaps.h"
#include "../generated/keymaps.h"
#include "WS2812.h" #include "WS2812.h"
#include "KeyboardioSX1509.h" #include "KeyboardioSX1509.h"
#include "../key_events.h" #include "../key_events.h"
@ -41,7 +40,7 @@ class Model01Beta {
static WS2812 LED; static WS2812 LED;
int right_initted = 0; int right_initted = 0;
int left_initted = 0; int left_initted = 0;
uint8_t matrixState[ROWS][COLS] = {{0}};
uint8_t left_colpins[LEFT_COLS]= {7,6,5,4,3,2,1,0}; uint8_t left_colpins[LEFT_COLS]= {7,6,5,4,3,2,1,0};
uint8_t left_rowpins[LEFT_ROWS]= {8,9,10,11}; uint8_t left_rowpins[LEFT_ROWS]= {8,9,10,11};

@ -1,6 +1,8 @@
#include "key_events.h" #include "key_events.h"
void handle_synthetic_key_event(byte switchState, Key mappedKey) { const Key keymaps[KEYMAPS][ROWS][COLS] = { KEYMAP_LIST };
void handle_synthetic_key_event(uint8_t switchState, Key mappedKey) {
if (mappedKey.flags & IS_MOUSE_KEY && !( mappedKey.rawKey & KEY_MOUSE_WARP) ) { if (mappedKey.flags & IS_MOUSE_KEY && !( mappedKey.rawKey & KEY_MOUSE_WARP) ) {
handle_mouse_key_event(switchState, mappedKey); handle_mouse_key_event(switchState, mappedKey);
} else if (! (mappedKey.flags & IS_INTERNAL) } else if (! (mappedKey.flags & IS_INTERNAL)
@ -44,19 +46,18 @@ void handle_synthetic_key_event(byte switchState, Key mappedKey) {
} }
} }
void handle_key_event(byte row, byte col) { void handle_key_event(byte row, byte col, uint8_t *switchState) {
//for every newly pressed button, figure out what logical key it is and send a key down event //for every newly pressed button, figure out what logical key it is and send a key down event
// for every newly released button, figure out what logical key it is and send a key up event // for every newly released button, figure out what logical key it is and send a key up event
byte switchState = matrixState[row][col];
Key mappedKey = keymaps[temporary_keymap][row][col]; Key mappedKey = keymaps[temporary_keymap][row][col];
if (keymaps[primary_keymap][row][col].flags & SWITCH_TO_KEYMAP) { if (keymaps[primary_keymap][row][col].flags & SWITCH_TO_KEYMAP) {
handle_keymap_key_event(switchState, keymaps[primary_keymap][row][col]); handle_keymap_key_event(*switchState, keymaps[primary_keymap][row][col]);
} }
if (mappedKey.flags & SYNTHETIC_KEY) { if (mappedKey.flags & SYNTHETIC_KEY) {
handle_synthetic_key_event(switchState, mappedKey); handle_synthetic_key_event(*switchState, mappedKey);
} else if (key_is_pressed(switchState)) { } else if (key_is_pressed(*switchState)) {
press_key(mappedKey); press_key(mappedKey);
} }
} }
@ -78,7 +79,7 @@ void press_key(Key mappedKey) {
} }
void handle_keymap_key_event(byte switchState, Key keymapEntry) { void handle_keymap_key_event(uint8_t switchState, Key keymapEntry) {
if (keymapEntry.flags & MOMENTARY ) { if (keymapEntry.flags & MOMENTARY ) {
if (key_toggled_on(switchState)) { if (key_toggled_on(switchState)) {
if ( keymapEntry.rawKey == KEYMAP_NEXT) { if ( keymapEntry.rawKey == KEYMAP_NEXT) {
@ -100,7 +101,7 @@ void handle_keymap_key_event(byte switchState, Key keymapEntry) {
} }
} }
void handle_mouse_key_event(byte switchState, Key mappedKey) { void handle_mouse_key_event(uint8_t switchState, Key mappedKey) {
if (key_is_pressed(switchState)) { if (key_is_pressed(switchState)) {
if (mappedKey.rawKey & KEY_MOUSE_UP) { if (mappedKey.rawKey & KEY_MOUSE_UP) {
MouseWrapper.move(0,-1); MouseWrapper.move(0,-1);

@ -6,16 +6,17 @@
#include "MouseWrapper.h" #include "MouseWrapper.h"
#include "LEDControl.h" #include "LEDControl.h"
#include "Storage.h" #include "Storage.h"
#include "keymaps.h"
#include "generated/keymaps.h"
extern uint8_t matrixState[ROWS][COLS];
extern const Key keymaps[KEYMAPS][ROWS][COLS]; extern const Key keymaps[KEYMAPS][ROWS][COLS];
extern uint8_t primary_keymap; extern uint8_t primary_keymap;
extern uint8_t temporary_keymap; extern uint8_t temporary_keymap;
// sending events to the computer // sending events to the computer
void handle_synthetic_key_event(byte switchState, Key mappedKey); void handle_synthetic_key_event(uint8_t switchState, Key mappedKey);
void handle_key_event(byte row, byte col); void handle_key_event(byte row, byte col, uint8_t *switch_state);
void press_key(Key mappedKey); void press_key(Key mappedKey);
void handle_keymap_key_event(byte switchState, Key keymapEntry); void handle_keymap_key_event(uint8_t switchState, Key keymapEntry);
void handle_mouse_key_event(byte switchState, Key mappedKey); void handle_mouse_key_event(uint8_t switchState, Key mappedKey);

Loading…
Cancel
Save