// vim: ts=4 sw=4 sts=4 /* ---------------------------------------------------------------------------- * main() * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") * Project located at * ------------------------------------------------------------------------- */ #include #include "lib-other/pjrc/usb_keyboard/usb_keyboard.h" #include "lib/data-types.h" #include "keyboard.h" // note: // - see your keyswitch specification for the necessary value. for cherry mx // switches, bounce time should be <= 5ms. it looks like most switches are // speced between 5 and 8ms. // - if timing is important, balance this value with the main() loop run time // (~5ms, last i checked, nearly all of it in the i2c update() function) #define DEBOUNCE_TIME 5 // in ms int main(void) { kb_init(); // does controller initialization too KB_LED1_ON; KB_LED2_ON; KB_LED3_ON; usb_init(); while (!usb_configured()); _delay_ms(1000); // make sure the OS has had time to load drivers, etc. KB_LED1_OFF; KB_LED2_OFF; KB_LED3_OFF; for (;;) { static uint8_t current_layer = 0; // swap `kb_is_pressed` and `kb_was_pressed`, then update bool (*temp)[KB_ROWS][KB_COLUMNS] = kb_was_pressed; kb_was_pressed = kb_is_pressed; kb_is_pressed = temp; kb_update_matrix(*kb_is_pressed); // call the appropriate function for each key, then send the usb report // if necessary // - everything else is the key function's responsibility; see the // keyboard layout file ("keyboard/ergodox/layout.c") for which key // is assigned which function (per layer), and "lib/key-functions.c" // for their definitions for (uint8_t row=0; row