diff --git a/Debug/print/print.h b/Debug/print/print.h index 801cca1..7b87004 100644 --- a/Debug/print/print.h +++ b/Debug/print/print.h @@ -59,24 +59,30 @@ // Special Msg Constructs (Uses VT100 tags) #define dPrintMsg(colour_code_str,msg,...) \ usb_debug_putstrs("\033[", colour_code_str, "m", msg, "\033[0m - ", __VA_ARGS__, NL, "\0\0\0") -#define printMsg(colour_code_str,msg,str) \ +#define printMsgNL(colour_code_str,msg,str) \ print("\033[" colour_code_str "m" msg "\033[0m - " str NL) +#define printMsg(colour_code_str,msg,str) \ + print("\033[" colour_code_str "m" msg "\033[0m - " str) // Info Messages #define info_dPrint(...) dPrintMsg ("1;32", "INFO", __VA_ARGS__) // Info Msg -#define info_print(str) printMsg ("1;32", "INFO", str) // Info Msg +#define info_print(str) printMsgNL ("1;32", "INFO", str) // Info Msg +#define info_msg(str) printMsg ("1;32", "INFO", str) // Info Msg // Warning Messages #define warn_dPrint(...) dPrintMsg ("1;33", "WARNING", __VA_ARGS__) // Warning Msg -#define warn_print(str) printMsg ("1;33", "WARNING", str) // Warning Msg +#define warn_print(str) printMsgNL ("1;33", "WARNING", str) // Warning Msg +#define warn_msg(str) printMsg ("1;33", "WARNING", str) // Warning Msg // Error Messages #define erro_dPrint(...) dPrintMsg ("1;5;31", "ERROR", __VA_ARGS__) // Error Msg -#define erro_print(str) printMsg ("1;5;31", "ERROR", str) // Error Msg +#define erro_print(str) printMsgNL ("1;5;31", "ERROR", str) // Error Msg +#define erro_msg(str) printMsg ("1;5;31", "ERROR", str) // Error Msg // Debug Messages #define dbug_dPrint(...) dPrintMsg ("1;35", "DEBUG", __VA_ARGS__) // Debug Msg -#define dbug_print(str) printMsg ("1;35", "DEBUG", str) // Debug Msg +#define dbug_print(str) printMsgNL ("1;35", "DEBUG", str) // Debug Msg +#define dbug_msg(str) printMsg ("1;35", "DEBUG", str) // Debug Msg // Static String Printing diff --git a/Scan/avr-capsense/scan_loop.c b/Scan/avr-capsense/scan_loop.c index e7cfd2c..72fdd60 100644 --- a/Scan/avr-capsense/scan_loop.c +++ b/Scan/avr-capsense/scan_loop.c @@ -88,6 +88,7 @@ #define MUXES_COUNT_XSHIFT 3 #define WARMUP_LOOPS ( 1024 ) +#define WARMUP_STOP (WARMUP_LOOPS - 1) #define SAMPLES 10 #define SAMPLE_OFFSET ((SAMPLES) - MUXES_COUNT) @@ -150,9 +151,8 @@ uint16_t adc_mux_averages [MUXES_COUNT]; uint16_t adc_strobe_averages[STROBE_LINES]; uint8_t cur_keymap[STROBE_LINES]; -uint8_t usb_keymap[STROBE_LINES]; -uint8_t usb_dirty; +uint8_t keymap_change; uint16_t threshold = 0x25; // HaaTa Hack -TODO //uint16_t threshold = 0x16; // HaaTa Hack -TODO @@ -162,7 +162,6 @@ uint8_t column = 0; uint16_t keys_averages_acc[KEY_COUNT]; uint16_t keys_averages[KEY_COUNT]; -uint16_t keys_averages_acc_count=0; uint8_t full_samples[KEY_COUNT]; @@ -188,8 +187,7 @@ uint16_t db_threshold = 0; // ----- Function Declarations ----- -void dump ( void ); -void dumpkeys( void ); +void dump( void ); void recovery( uint8_t on ); @@ -222,7 +220,6 @@ inline void scan_setup() // TODO all this code should probably be in scan_resetKeyboard for (int i=0; i < STROBE_LINES; ++i) { cur_keymap[i] = 0; - usb_keymap[i] = 0; } for(int i=0; i < MUXES_COUNT; ++i) { @@ -269,10 +266,26 @@ inline uint8_t scan_loop() if( column != cur_keymap[strober] && ( boot_count >= WARMUP_LOOPS ) ) { cur_keymap[strober] = column; - usb_dirty = 1; + keymap_change = 1; + + // The keypresses on this strobe are now know, send them right away + for ( uint8_t mux = 0; mux < MUXES_COUNT; ++mux ) + { + if ( column & (1 << mux) ) + { + uint8_t key = (strober << MUXES_COUNT_XSHIFT) + mux; + + // Add to the Macro processing buffer + // Automatically handles converting to a USB code and sending off to the PC + //bufferAdd( key ); + + printHex( key ); + print("\n"); + } + } } - idle |= usb_dirty; // if any keys have changed inc. released, then we are not idle. + idle |= keymap_change; // if any keys have changed inc. released, then we are not idle. if ( error == 0x50 ) { @@ -287,7 +300,6 @@ inline uint8_t scan_loop() full_samples[strobe_line + i] = sample; keys_averages_acc[strobe_line + i] += sample; } - keys_averages_acc_count++; strobe_averages[strober] = 0; for ( uint8_t i = SAMPLE_OFFSET; i < ( SAMPLE_OFFSET + MUXES_COUNT ); ++i ) @@ -348,28 +360,44 @@ inline uint8_t scan_loop() idle_count++; idle_count &= IDLE_COUNT_MASK; + // Warm up voltage references if ( boot_count < WARMUP_LOOPS ) { - error = 0x0C; - error_data = boot_count; boot_count++; + + switch ( boot_count ) + { + // First loop + case 1: + // Show msg at first iteration only + info_msg("Warming up the voltage references"); + break; + // Middle iterations + case 300: + case 600: + case 900: + case 1200: + print("."); + break; + // Last loop + case WARMUP_STOP: + print("\n"); + info_msg("Warmup finished using "); + printInt16( WARMUP_LOOPS ); + print(" iterations\n"); + break; + } } else { - if ( usb_dirty ) + // Reset accumulators and idle flag/counter + if ( keymap_change ) { - for ( int i = 0; i < STROBE_LINES; ++i ) - { - usb_keymap[i] = cur_keymap[i]; - } - - dumpkeys(); - usb_dirty = 0; - memset(((void *)keys_averages_acc), 0, (size_t)(KEY_COUNT * sizeof (uint16_t))); - keys_averages_acc_count = 0; + for ( uint8_t c = 0; c < KEY_COUNT; ++c ) { keys_averages_acc[c] = 0; } idle_count = 0; idle = 0; - _delay_us(100); + + keymap_change = 0; } if ( !idle_count ) @@ -389,7 +417,6 @@ inline uint8_t scan_loop() keys_averages_acc[i] = 0; } } - keys_averages_acc_count = 0; if ( boot_count >= WARMUP_LOOPS ) { @@ -401,6 +428,32 @@ inline uint8_t scan_loop() } + // Error case, should not occur in normal operation + if ( error ) + { + erro_msg("Problem detected... "); + + // Keymap scan debug + for ( uint8_t i = 0; i < STROBE_LINES; ++i ) + { + printHex(cur_keymap[i]); + print(" "); + } + + print(" : "); + printHex(error); + error = 0; + print(" : "); + printHex(error_data); + error_data = 0; + + // Display keymaps and other debug information if warmup completede + if ( boot_count >= WARMUP_LOOPS ) + { + dump(); + } + } + // Return non-zero if macro and USB processing should be delayed // Macro processing will always run if returning 0 @@ -880,59 +933,6 @@ uint8_t testColumn( uint8_t strobe ) } -void dumpkeys() -{ - if ( error ) - { - erro_print("Problem detected..."); - - if ( boot_count >= WARMUP_LOOPS ) - { - dump(); - } - - // Key scan debug - for ( uint8_t i = 0; i < STROBE_LINES; ++i ) - { - printHex(usb_keymap[i]); - print(" "); - } - - print(" : "); - printHex(error); - error = 0; - print(" : "); - printHex(error_data); - error_data = 0; - print(" : " NL); - } - - // XXX Will be cleaned up eventually, but this will do for now :P -HaaTa - for ( uint8_t i = 0; i < STROBE_LINES; ++i ) - { - for ( uint8_t j = 0; j < MUXES_COUNT; ++j ) - { - if ( usb_keymap[i] & (1 << j) ) - { - uint8_t key = (i << MUXES_COUNT_XSHIFT) + j; - - // Add to the Macro processing buffer - // Automatically handles converting to a USB code and sending off to the PC - //bufferAdd( key ); - - if ( usb_dirty ) - { - printHex( key ); - print("\n"); - } - } - } - } - - usb_keyboard_send(); -} - - void dump(void) { #ifdef DEBUG_FULL_SAMPLES_AVERAGES