From 281b7faf534499175f6b16c5a3b4ad838695dc4b Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Sat, 23 Jun 2018 01:18:57 +0900 Subject: [PATCH] add helix serial debug code --- .../helix/rev2/keymaps/five_rows/config.h | 8 +++ keyboards/helix/serial.c | 67 ++++++++++++++++++- keyboards/helix/serial.h | 6 ++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/keyboards/helix/rev2/keymaps/five_rows/config.h b/keyboards/helix/rev2/keymaps/five_rows/config.h index 10d9fc1c4b..4d70cbce23 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/config.h +++ b/keyboards/helix/rev2/keymaps/five_rows/config.h @@ -119,4 +119,12 @@ along with this program. If not, see . #define USB_MAX_POWER_CONSUMPTION 100 #endif +#define SERIAL_DEBUG_MODE_WATCH_OUTMODE 0 +#define SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE 1 +#define SERIAL_DEBUG_MODE_WATCH_SYNC 2 +//#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_SYNC +#define SERIAL_DEBUG_MODE (SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE|SERIAL_DEBUG_MODE_WATCH_SYNC) + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/serial.c b/keyboards/helix/serial.c index 51ab67fb3d..7b4b8ceeb8 100644 --- a/keyboards/helix/serial.c +++ b/keyboards/helix/serial.c @@ -28,17 +28,31 @@ inline static void serial_delay(void) { _delay_us(SERIAL_DELAY); } -void serial_delay_short(void) { - _delay_us(SERIAL_DELAY-1); + +inline static +void serial_delay_half(void) { + _delay_us(SERIAL_DELAY/2); } + +inline static +void serial_delay_quart(void) { + _delay_us(SERIAL_DELAY/4); +} + inline static void serial_output(void) { +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_OUTMODE + SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; +#endif 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 SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; SERIAL_PIN_PORT |= SERIAL_PIN_MASK; } @@ -58,12 +72,23 @@ 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(); serial_high(); } void serial_slave_init(void) { + serial_debug_init(); serial_input(); #ifndef USE_SERIAL_PD2 @@ -82,23 +107,42 @@ 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(); // 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 //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 } // 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(); serial_low(); serial_delay(); serial_high(); +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_SYNC + SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; +#endif } // Reads a byte from the serial line @@ -108,8 +152,15 @@ uint8_t serial_read_byte(void) { serial_input(); for ( uint8_t i = 0; i < 8; ++i) { byte = (byte << 1) | serial_read_pin(); +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE + SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; + _delay_us(1); + SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; + serial_delay(); +#else serial_delay(); _delay_us(1); +#endif } return byte; @@ -126,7 +177,13 @@ void serial_write_byte(uint8_t data) { } else { serial_low(); } +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE + SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; +#endif serial_delay(); +#if SERIAL_DEBUG_MODE & SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE + SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; +#endif } } @@ -147,7 +204,13 @@ ISR(SERIAL_PIN_INTERRUPT) { serial_delay(); // read the middle of pulses +#if SERIAL_DEBUG_MODE & (SERIAL_DEBUG_MODE_WATCH_SYNC|SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE) + SERIAL_DBGPIN_PORT |= SERIAL_DBGPIN_MASK; +#endif _delay_us(SERIAL_DELAY/2); +#if SERIAL_DEBUG_MODE & (SERIAL_DEBUG_MODE_WATCH_SYNC|SERIAL_DEBUG_MODE_WATCH_RCVSAMPLE) + SERIAL_DBGPIN_PORT &= ~SERIAL_DBGPIN_MASK; +#endif uint8_t checksum_computed = 0; for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { diff --git a/keyboards/helix/serial.h b/keyboards/helix/serial.h index 8f15d66753..8e48f5e094 100644 --- a/keyboards/helix/serial.h +++ b/keyboards/helix/serial.h @@ -24,6 +24,12 @@ #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2 #endif +#ifdef SERIAL_DEBUG_MODE +#define SERIAL_DBGPIN_DDR DDRB +#define SERIAL_DBGPIN_PORT PORTB +#define SERIAL_DBGPIN_MASK _BV(PB5) +#endif + // Buffers for master - slave communication extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];