From 3f8897547e7e7b611109a6ff82baab45658c9b0a Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 22 Oct 2014 05:18:55 +0200 Subject: keypad layout fixed --- dolmetsch-ctl/dolmetsch-ctl.c | 12 ++--- dolmetsch-ctl/keypad.c | 117 ++++++++++++++---------------------------- 2 files changed, 44 insertions(+), 85 deletions(-) diff --git a/dolmetsch-ctl/dolmetsch-ctl.c b/dolmetsch-ctl/dolmetsch-ctl.c index a04eed4..2bf97f7 100644 --- a/dolmetsch-ctl/dolmetsch-ctl.c +++ b/dolmetsch-ctl/dolmetsch-ctl.c @@ -86,15 +86,14 @@ static void process_incoming_midi(void) uint8_t value = ReceivedMIDIEvent.Data3 & 0x7F; if((note >= KEYPAD_MIDI_NOTE_OFFSET && note < KEYPAD_MIDI_NOTE_OFFSET + KEYPAD_NUM_KEYS) || // KEYPAD note == KEYPAD_MIDI_NOTE_ALL) { - if(cmd == MIDI_COMMAND_NOTE_ON) { + if(cmd == MIDI_COMMAND_CONTROL_CHANGE) { switch(value) { - case 0: keypad_led_on(note - KEYPAD_MIDI_NOTE_OFFSET); break; - case 1: keypad_led_toggle(note - KEYPAD_MIDI_NOTE_OFFSET); break; + case 0: keypad_led_off(note - KEYPAD_MIDI_NOTE_OFFSET); break; + case 1: keypad_led_on(note - KEYPAD_MIDI_NOTE_OFFSET); break; + case 2: keypad_led_toggle(note - KEYPAD_MIDI_NOTE_OFFSET); break; default: keypad_led_blink(note, value); break; } - } else if(cmd == MIDI_COMMAND_NOTE_OFF) - keypad_led_off(note - KEYPAD_MIDI_NOTE_OFFSET); - + } } } } @@ -139,6 +138,7 @@ int main(void) wdt_disable(); cpu_init(); + jtag_disable(); eventqueue_init(); keypad_init(); diff --git a/dolmetsch-ctl/keypad.c b/dolmetsch-ctl/keypad.c index 6034f75..a4bcabc 100644 --- a/dolmetsch-ctl/keypad.c +++ b/dolmetsch-ctl/keypad.c @@ -26,10 +26,6 @@ #include "keypad.h" #include "eventqueue.h" -#define KEYPAD_PIN PINB -#define KEYPAD_PORT PORTB -#define KEYPAD_DDR DDRB - #define KEYPAD_LP_CNT_MAX 200 static struct { uint8_t last_sent; @@ -43,8 +39,9 @@ static struct { void keypad_init(void) { - KEYPAD_DDR = 0x00; - KEYPAD_PORT = 0x0F; + // KEYS are at F4..F7 + DDRF &= 0x0F; + PORTF |= 0xF0; uint8_t i; for(i = 0; i < KEYPAD_NUM_KEYS; ++i) { keypad_state[i].last_sent = 0; @@ -54,95 +51,56 @@ void keypad_init(void) led_blink_state[i].cnt = 0; } - /* DDRC = 0xFF; */ - /* DDRB |= 0xF0; */ - /* DDRD |= 0xF0; */ - - /* PORTC = 0x00; */ - /* PORTB &= 0x0F; */ - /* PORTD &= 0x0F; */ + // LEDS are at D0..D3 + DDRD |= 0x0F; + PORTD &= 0xFC; + PORTD |= 0x0C; } void keypad_led_on(uint8_t led) { - /* switch(led) { */ - /* case 0: */ - /* case 1: */ - /* case 2: */ - /* case 3: */ - /* case 4: */ - /* case 5: */ - /* case 6: */ - /* case 7: PORTC |= (1 << led); break; */ - /* case 8: */ - /* case 9: */ - /* case 10: */ - /* case 11: PORTB |= (1 << (led - 8 + 4)); break; */ - /* case 12: */ - /* case 13: */ - /* case 14: */ - /* case 15: PORTD |= (1 << (led - 12 + 4)); break; */ - /* case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC = 0xFF; PORTB |= 0xF0; PORTD |= 0xF0; break; */ - /* } */ - /* keypad_led_blink(led, 0); */ + switch(led) { + case 0: PORTD |= 0x01; break; + case 1: PORTD |= 0x02; break; + case 2: PORTD &= 0xFB; break; + case 3: PORTD &= 0xF7; break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTD |= 0x03; PORTD &= 0xF3;; break; + } + keypad_led_blink(led, 0); } void keypad_led_off(uint8_t led) { - /* switch(led) { */ - /* case 0: */ - /* case 1: */ - /* case 2: */ - /* case 3: */ - /* case 4: */ - /* case 5: */ - /* case 6: */ - /* case 7: PORTC &= ~(1 << led); break; */ - /* case 8: */ - /* case 9: */ - /* case 10: */ - /* case 11: PORTB &= ~(1 << (led - 8 + 4)); break; */ - /* case 12: */ - /* case 13: */ - /* case 14: */ - /* case 15: PORTD &= ~(1 << (led - 12 + 4)); break; */ - /* case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC = 0x00; PORTB &= 0x0F; PORTD &= 0x0F; break; */ - /* } */ - /* keypad_led_blink(led, 0); */ + switch(led) { + case 0: PORTD &= 0xFE; break; + case 1: PORTD &= 0xFD; break; + case 2: PORTD |= 0x04; break; + case 3: PORTD |= 0x08; break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTD &= 0xFC; PORTD |= 0x0C; break; + } + keypad_led_blink(led, 0); } void keypad_led_toggle(uint8_t led) { - /* switch(led) { */ - /* case 0: */ - /* case 1: */ - /* case 2: */ - /* case 3: */ - /* case 4: */ - /* case 5: */ - /* case 6: */ - /* case 7: PORTC ^= (1 << led); break; */ - /* case 8: */ - /* case 9: */ - /* case 10: */ - /* case 11: PORTB ^= (1 << (led - 8 + 4)); break; */ - /* case 12: */ - /* case 13: */ - /* case 14: */ - /* case 15: PORTD ^= (1 << (led - 12 + 4)); break; */ - /* case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC ^= 0xFF; PORTB ^= 0xF0; PORTD ^= 0xF0; break; */ - /* } */ + switch(led) { + case 0: + case 1: + case 2: + case 3: PORTD ^= (1 << led); break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTD ^= 0x0F; break; + } } void keypad_led_blink(uint8_t led, uint8_t value) { if(led < KEYPAD_NUM_KEYS) { - led_blink_state[led].delay = value * 64; + led_blink_state[led].delay = value * 128; led_blink_state[led].cnt = 0; } else { uint8_t i; for(i = 0; i < KEYPAD_NUM_KEYS; ++i) { - led_blink_state[i].delay = value * 64; + led_blink_state[i].delay = value * 128; led_blink_state[i].cnt = 0; } } @@ -177,18 +135,19 @@ void keypad_task(void) { uint8_t col, row; for(col = 0; col < KEYPAD_NUM_COLS; ++col) { - KEYPAD_DDR = 1 << (col + 4); - KEYPAD_PORT = 0x0F; - _delay_us(10); + /* KEYPAD_DDR = 1 << (col + 4); */ + /* KEYPAD_PORT = 0x0F; */ + _delay_us(20); for(row = 0; row < KEYPAD_NUM_ROWS; ++row) { uint8_t key_idx = col*KEYPAD_NUM_ROWS + row; - uint8_t current_state = KEYPAD_PIN & (1 << row); +// uint8_t current_state = KEYPAD_PIN & (1 << row); + uint8_t current_state = PINF & (1 << (row+4)); keypad_key_lowpass(key_idx, current_state); keypad_led_blinking(key_idx); } } - KEYPAD_DDR = 0x00; +// KEYPAD_DDR = 0x00; } -- cgit v1.2.3