changeset 92:090a60405c0f

Removed a keyscan layer and added more debug information - Added a print macro for colourful convenience - Removed the usb_keymap variable as it is no longer needed - Changed usb_dirty to keymap_change (more accurate description) - Removed the dumpkeys function and now detect key changes much sooner as well as displaying error messages more often - Added a warming up information message and removed its error status (as it's not an error)
author Jacob Alexander <triplehaata@gmail.com>
date Sun, 17 Nov 2013 19:17:54 -0500
parents 8c7c3a48220c
children 0bc9c6b347c8
files Debug/print/print.h Scan/avr-capsense/scan_loop.c
diffstat 2 files changed, 87 insertions(+), 81 deletions(-) [+]
line wrap: on
line diff
--- a/Debug/print/print.h	Sun Nov 17 16:42:41 2013 -0500
+++ b/Debug/print/print.h	Sun Nov 17 19:17:54 2013 -0500
@@ -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 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 NL)
+                          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
--- a/Scan/avr-capsense/scan_loop.c	Sun Nov 17 16:42:41 2013 -0500
+++ b/Scan/avr-capsense/scan_loop.c	Sun Nov 17 19:17:54 2013 -0500
@@ -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_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 @@
 
 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 @@
 
 // ----- Function Declarations -----
 
-void dump    ( void );
-void dumpkeys( void );
+void dump( void );
 
 void recovery( uint8_t on );
 
@@ -222,7 +220,6 @@
 	// 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 @@
 		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 @@
 			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 @@
 	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 @@
 					keys_averages_acc[i] = 0;
 				}
 			}
-			keys_averages_acc_count = 0;
 
 			if ( boot_count >= WARMUP_LOOPS )
 			{
@@ -401,6 +428,32 @@
 
 	}
 
+	// 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 @@
 }
 
 
-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