summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2014-10-22 05:18:55 +0200
committerChristian Pointner <equinox@spreadspace.org>2015-02-24 19:02:39 +0100
commit3f8897547e7e7b611109a6ff82baab45658c9b0a (patch)
tree62a5858b0119b12854d423e713eae8c704e47e7c
parentupdated copyright year (diff)
keypad layout fixed
-rw-r--r--dolmetsch-ctl/dolmetsch-ctl.c12
-rw-r--r--dolmetsch-ctl/keypad.c117
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;
}