X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=main.c;h=3b48941dfca0ed1e647378b51b8998fa1138362c;hb=a848a6bc79285a2e5b3705f126c36e5c5037d5ef;hp=2b5494835f06e53440afa5d12e1bcaee6429cbc3;hpb=1bee2a6dc966993075ad75d88fd7f7e5baea233c;p=kiibohd-controller.git diff --git a/main.c b/main.c index 2b54948..3b48941 100644 --- a/main.c +++ b/main.c @@ -1,15 +1,15 @@ -/* Copyright (C) 2011 by Jacob Alexander - * +/* Copyright (C) 2011-2014 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 @@ -19,115 +19,57 @@ * THE SOFTWARE. */ -#include -#include -#include -#include -#include "usb_keyboard.h" +// ----- Includes ----- -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) +// Compiler Includes +#include -#define PRE_DRIVE_SLEEP -#define POST_DRIVE_SLEEP +// Project Includes +#include +#include +#include +#include +#include +#include -#define DRIVE_reg_1 PORTB -#define DRIVE_reg_2 PORTB -#define DRIVE_reg_3 PORTB -#define DRIVE_reg_4 PORTC -#define DRIVE_reg_5 PORTE -#define DRIVE_reg_6 PORTE -#define DRIVE_reg_7 PORTF -#define DRIVE_reg_8 PORTF -#define DRIVE_reg_9 PORTF -#define DRIVE_reg_10 -#define DRIVE_reg_11 -#define DRIVE_reg_12 -#define DRIVE_pin_1 0 -#define DRIVE_pin_2 1 -#define DRIVE_pin_3 2 -#define DRIVE_pin_4 7 -#define DRIVE_pin_5 6 -#define DRIVE_pin_6 7 -#define DRIVE_pin_7 0 -#define DRIVE_pin_8 4 -#define DRIVE_pin_9 5 -#define DRIVE_pin_10 -#define DRIVE_pin_11 -#define DRIVE_pin_12 -#define DETECT_group_1 0 -#define DETECT_group_2 0 -#define DETECT_group_3 0 -#define DETECT_group_4 0 -#define DETECT_group_5 0 -#define DETECT_group_6 0 -#define DETECT_group_7 0 -#define DETECT_group_8 0 -#define DETECT_group_9 0 -#define DETECT_group_10 -#define DETECT_group_11 -#define DETECT_group_12 +// ----- Functions ----- -// Change number of ORDs if number of lines differ -#define DD_LOOP \ - for ( int c = 0;; c++ ) { \ - switch ( c ) { \ - DD_CASE_ORD(1) \ - DD_CASE_ORD(2) \ - DD_CASE_ORD(3) \ - DD_CASE_ORD(4) \ - DD_CASE_ORD(5) \ - DD_CASE_ORD(6) \ - DD_CASE_ORD(7) \ - DD_CASE_ORD(8) \ - DD_CASE_END(9,c) \ - } \ - } - -#define DRIVE_DETECT(reg,pin,group) \ - reg |= (1 << pin);\ - detection(group);\ - reg &= (0 << pin); - -#define DD_CASE(number) \ - case number:\ - DRIVE_DETECT(DRIVE_reg##_##number, DRIVE_pin##_##number, DETECT_group##_##number) - -#define DD_CASE_ORD(number) \ - DD_CASE(number) \ - break; - -#define DD_CASE_END(number,var) \ - DD_CASE(number) \ - default: \ - var = -1; \ - break; - -int main(void) +int main() { - // set for 16 MHz clock - CPU_PRESCALE( 0 ); - - // Configuring Pins + // AVR - Teensy Set Clock speed to 16 MHz +#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) + CLKPR = 0x80; + CLKPR = 0x00; +#endif - // TODO + // Enable CLI + CLI_init(); - // 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 */ ; - - // Wait an extra second for the PC's operating system to load drivers - // and do whatever it does to actually be ready for input - _delay_ms(1000); + // Setup Modules + Output_setup(); + Macro_setup(); + Scan_setup(); // Main Detection Loop - DD_LOOP - - // usb_keyboard_press(KEY_B, KEY_SHIFT); - return 0; + while ( 1 ) + { + // Process CLI + CLI_process(); + + // Acquire Key Indices + // Loop continuously until scan_loop returns 0 + cli(); + while ( Scan_loop() ); + sei(); + + // Run Macros over Key Indices and convert to USB Keys + Macro_process(); + + // Sends USB data only if changed + Output_send(); + } }