From 98c3c859e56c570a905dc0107b289cca2a668a89 Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Sun, 24 Jun 2018 01:01:34 +0900 Subject: [PATCH] refine debug macros --- keyboards/helix/serial.c | 208 +++++++++++++++------------------------ keyboards/helix/serial.h | 14 +-- 2 files changed, 85 insertions(+), 137 deletions(-) diff --git a/keyboards/helix/serial.c b/keyboards/helix/serial.c index b6fb263d41..353fdfa436 100644 --- a/keyboards/helix/serial.c +++ b/keyboards/helix/serial.c @@ -31,6 +31,50 @@ uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; #define SLAVE_DATA_CORRUPT (1<<0) volatile uint8_t status = 0; +#ifdef SERIAL_DEBUG_MODE + #define serial_debug_init() SERIAL_DBGPIN_DDR |= SERIAL_DBGPIN_MASK +#else + #define serial_debug_init() +#endif + +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_OUTMODE + #define debug_output_mode() SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK + #define debug_input_mode() SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK +#else + #define debug_output_mode() + #define debug_input_mode() +#endif + +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE + #define debug_recvsample() SERIAL_DBGPIN_PORT ^= SERIAL_DBGPIN_MASK +#else + #define debug_recvsample() +#endif + +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH + #define debug_bytewidth_start() SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK + #define debug_bytewidth_end() SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK +#else + #define debug_bytewidth_start() + #define debug_bytewidth_end() +#endif + +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC + #define debug_sync_start() SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK + #define debug_sync_end() SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK +#else + #define debug_sync_start() + #define debug_sync_end() +#endif + +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG + #define debug_iochg_on() SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; _delay_us(1) + #define debug_iochg_off() SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK +#else + #define debug_iochg_on() + #define debug_iochg_off() +#endif + inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); @@ -48,18 +92,14 @@ void serial_delay_half2(void) { inline static void serial_output(void) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_OUTMODE - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif + debug_output_mode(); SERIAL_PIN_DDR |= SERIAL_PIN_MASK; } // make the serial pin an input with pull-up resistor inline static void serial_input(void) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_OUTMODE - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_input_mode(); SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } @@ -79,15 +119,6 @@ void serial_high(void) { SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } -#ifdef SERIAL_DEBUG_MODE -inline static -void serial_debug_init(void) { - SERIAL_DBGPIN_DDR |= SERIAL_DBGPIN_MASK; -} -#else -#define serial_debug_init() -#endif - void serial_master_init(void) { serial_debug_init(); serial_output(); @@ -114,44 +145,21 @@ void serial_slave_init(void) { // Used by the master to synchronize timing with the slave. static void sync_recv(void) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif - serial_input(); + debug_sync_start(); // This shouldn't hang if the slave disconnects because the // serial line will float to high if the slave does disconnect. while (!serial_read_pin()); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; - //_delay_us(3); - //SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif -#if 0 - //serial_delay(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC - _delay_us(SERIAL_DELAY-8); - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#else - _delay_us(SERIAL_DELAY-5); -#endif -#endif + debug_sync_end(); } // Used by the slave to send a synchronization signal to the master. static void sync_send(void) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif - serial_output(); - + debug_sync_start(); serial_low(); serial_delay(); - serial_high(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_sync_end(); } // Reads a byte from the serial line @@ -162,17 +170,10 @@ uint8_t serial_read_byte(void) { for ( uint8_t i = 0; i < 8; ++i) { serial_delay_half1(); // read the middle of pulses byte = (byte << 1) | serial_read_pin(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE - SERIAL_DBGPIN_PORT ^= SERIAL_DBGPIN_MASK; - //_delay_us(1); + debug_recvsample(); _delay_sub_us(READ_WRITE_WIDTH_ADJUST); - SERIAL_DBGPIN_PORT ^= SERIAL_DBGPIN_MASK; + debug_recvsample(); serial_delay_half2(); -#else - serial_delay_half2(); - //_delay_us(1); - _delay_sub_us(READ_WRITE_WIDTH_ADJUST); -#endif } return byte; } @@ -181,7 +182,6 @@ uint8_t serial_read_byte(void) { static void serial_write_byte(uint8_t data) { uint8_t b = 1<<7; - //serial_output(); while( b ) { if(data & b) { serial_high(); @@ -189,30 +189,24 @@ void serial_write_byte(uint8_t data) { serial_low(); } b >>= 1; -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE - SERIAL_DBGPIN_PORT ^= SERIAL_DBGPIN_MASK; -#endif + debug_recvsample(); serial_delay(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE - SERIAL_DBGPIN_PORT ^= SERIAL_DBGPIN_MASK; -#endif + debug_recvsample() } - serial_low(); + serial_low(); // sync_recv() need low } // interrupt handle to be used by the slave device ISR(SERIAL_PIN_INTERRUPT) { + serial_output(); sync_send(); + // slave send phase uint8_t checksum = 0; for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_start(); serial_write_byte(serial_slave_buffer[i]); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_end(); sync_send(); checksum += serial_slave_buffer[i]; } @@ -220,47 +214,25 @@ ISR(SERIAL_PIN_INTERRUPT) { serial_low(); // slave switch to input -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //1 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //1 sync_send(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); serial_delay_half1(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //2 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //2 serial_low(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); serial_input(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //3 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //3 serial_delay(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); // slave recv phase sync_recv(); uint8_t checksum_computed = 0; for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_start(); serial_master_buffer[i] = serial_read_byte(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_end(); sync_recv(); checksum_computed += serial_master_buffer[i]; } @@ -315,13 +287,9 @@ int serial_update_buffers(void) { uint8_t checksum_computed = 0; // receive data from the slave for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_start(); serial_slave_buffer[i] = serial_read_byte(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_end(); sync_recv(); checksum_computed += serial_slave_buffer[i]; } @@ -335,48 +303,26 @@ int serial_update_buffers(void) { } // master switch to output -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //1 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //1 sync_recv(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); serial_delay(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //2 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //2 serial_output(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); serial_low(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - //3 - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; - _delay_us(1); -#endif + debug_iochg_on(); //3 serial_delay_half1(); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_IOCHG - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_iochg_off(); // master send phase uint8_t checksum = 0; sync_send(); for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_start(); serial_write_byte(serial_master_buffer[i]); -#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH - SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; -#endif + debug_bytewidth_end(); sync_send(); checksum += serial_master_buffer[i]; } diff --git a/keyboards/helix/serial.h b/keyboards/helix/serial.h index 5f185f3137..db3edf8342 100644 --- a/keyboards/helix/serial.h +++ b/keyboards/helix/serial.h @@ -33,20 +33,22 @@ void serial_slave_init(void); int serial_update_buffers(void); bool serial_slave_data_corrupt(void); -#define SERIAL_DEBUG_MODE_WATCH_OUTMODE 1 -#define SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE 2 -#define SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH 4 -#define SERIAL_DEBUG_MODE_WATCH_SYNC 8 -#define SERIAL_DEBUG_MODE_WATCH_IOCHG 16 +// debug flags +#define SERIAL_DEBUG_MODE_WATCH_OUTMODE 0x1 +#define SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE 0x2 +#define SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH 0x4 +#define SERIAL_DEBUG_MODE_WATCH_SYNC 0x8 +#define SERIAL_DEBUG_MODE_WATCH_IOCHG 0x10 //#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_OUTMODE -#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE +//#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE //#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH //#define SERIAL_DEBUG_MODE (SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE|SERIAL_DEBUG_MODE_WATCH_BYTEWIDTH) //#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_SYNC //#define SERIAL_DEBUG_MODE (SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE|SERIAL_DEBUG_MODE_WATCH_SYNC) //#define SERIAL_DEBUG_MODE SERIAL_DEBUG_MODE_WATCH_IOCHG +// Helix keyboard unused port (for Logic analyzer or oscilloscope) #ifdef SERIAL_DEBUG_MODE #define SERIAL_DBGPIN_DDR DDRB #define SERIAL_DBGPIN_PORT PORTB