diff options
author | Christian Pointner <equinox@spreadspace.org> | 2014-10-22 05:18:55 +0200 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2014-10-22 05:18:55 +0200 |
commit | 81d856fd84e3d06985c1123a47035b45ffedc9c2 (patch) | |
tree | f02d0d36169432331e8138fa090505ffaf1b2b0e | |
parent | updated copyright year (diff) |
keypad layout fixed
-rw-r--r-- | dolmetsch-ctl/dolmetsch-ctl.c | 12 | ||||
-rw-r--r-- | 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; } |