diff options
-rw-r--r-- | software/rhmixxx/gpio.c | 10 | ||||
-rw-r--r-- | software/rhmixxx/gpio.h | 5 | ||||
-rw-r--r-- | software/rhmixxx/keypad.c | 11 | ||||
-rw-r--r-- | software/rhmixxx/keypad.h | 6 | ||||
-rw-r--r-- | software/rhmixxx/rhmixxx.c | 25 |
5 files changed, 34 insertions, 23 deletions
diff --git a/software/rhmixxx/gpio.c b/software/rhmixxx/gpio.c index 4b3171a..bd4906a 100644 --- a/software/rhmixxx/gpio.c +++ b/software/rhmixxx/gpio.c @@ -26,8 +26,6 @@ #define GPIO_PIN PINE #define GPIO_PORT PORTE #define GPIO_DDR DDRE -#define GPIO_NUM_INPUTS 4 -#define GPIO_NUM_OUTPUTS 4 uint8_t input_last_sent[GPIO_NUM_INPUTS]; @@ -45,18 +43,24 @@ void gpio_out_on(uint8_t num) { if(num < GPIO_NUM_OUTPUTS) GPIO_PORT |= (1 << num); + else + GPIO_PORT |= 0x0F; } void gpio_out_off(uint8_t num) { if(num < GPIO_NUM_OUTPUTS) GPIO_PORT &= ~(1 << num); + else + GPIO_PORT &= 0xF0; } void gpio_out_toggle(uint8_t num) { if(num < GPIO_NUM_OUTPUTS) GPIO_PORT ^= (1 << num); + else + GPIO_PORT ^= 0x0F; } void gpio_task(void) @@ -66,7 +70,7 @@ void gpio_task(void) uint8_t current_state = GPIO_PIN & (1<<(i+4)); if(current_state != input_last_sent[i]) { input_last_sent[i] = current_state; - eventqueue_push(i + 64, ((current_state) ? 0 : 1)); // TODO: offset should be defined somewhere + eventqueue_push(i + GPIO_MIDI_NOTE_OFFSET, ((current_state) ? 0 : 1)); } } } diff --git a/software/rhmixxx/gpio.h b/software/rhmixxx/gpio.h index 3c27d78..710c4e0 100644 --- a/software/rhmixxx/gpio.h +++ b/software/rhmixxx/gpio.h @@ -22,6 +22,11 @@ #ifndef RHMIXXX_gpio_h_INCLUDED #define RHMIXXX_gpio_h_INCLUDED +#define GPIO_NUM_INPUTS 4 +#define GPIO_NUM_OUTPUTS 4 +#define GPIO_MIDI_NOTE_OFFSET 32 +#define GPIO_MIDI_NOTE_ALL_OUTPUTS GPIO_MIDI_NOTE_OFFSET + 31 + void gpio_init(void); void gpio_out_on(uint8_t num); diff --git a/software/rhmixxx/keypad.c b/software/rhmixxx/keypad.c index f27c711..57a6380 100644 --- a/software/rhmixxx/keypad.c +++ b/software/rhmixxx/keypad.c @@ -28,9 +28,6 @@ #define KEYPAD_PIN PINA #define KEYPAD_PORT PORTA #define KEYPAD_DDR DDRA -#define KEYPAD_NUM_COLS 4 -#define KEYPAD_NUM_ROWS 4 -#define KEYPAD_NUM_KEYS KEYPAD_NUM_COLS * KEYPAD_NUM_ROWS #define KEYPAD_LP_CNT_MAX 200 static struct { @@ -84,7 +81,7 @@ void keypad_led_on(uint8_t led) case 13: case 14: case 15: PORTD |= (1 << (led - 12 + 4)); break; - case 127: PORTC = 0xFF; PORTB |= 0xF0; PORTD |= 0xF0; break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC = 0xFF; PORTB |= 0xF0; PORTD |= 0xF0; break; } keypad_led_blink(led, 0); } @@ -108,7 +105,7 @@ void keypad_led_off(uint8_t led) case 13: case 14: case 15: PORTD &= ~(1 << (led - 12 + 4)); break; - case 127: PORTC = 0x00; PORTB &= 0x0F; PORTD &= 0x0F; break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC = 0x00; PORTB &= 0x0F; PORTD &= 0x0F; break; } keypad_led_blink(led, 0); } @@ -132,7 +129,7 @@ void keypad_led_toggle(uint8_t led) case 13: case 14: case 15: PORTD ^= (1 << (led - 12 + 4)); break; - case 127: PORTC ^= 0xFF; PORTB ^= 0xF0; PORTD ^= 0xF0; break; + case KEYPAD_MIDI_NOTE_ALL - KEYPAD_MIDI_NOTE_OFFSET: PORTC ^= 0xFF; PORTB ^= 0xF0; PORTD ^= 0xF0; break; } } @@ -160,7 +157,7 @@ static inline void keypad_key_lowpass(uint8_t key_idx, uint8_t current_state) if(current_state != keypad_state[key_idx].last_sent) { keypad_state[key_idx].last_sent = current_state; - eventqueue_push(key_idx, ((current_state) ? 0 : 1)); + eventqueue_push(KEYPAD_MIDI_NOTE_OFFSET + key_idx, ((current_state) ? 0 : 1)); } } } diff --git a/software/rhmixxx/keypad.h b/software/rhmixxx/keypad.h index 92c4188..87ab9c8 100644 --- a/software/rhmixxx/keypad.h +++ b/software/rhmixxx/keypad.h @@ -22,6 +22,12 @@ #ifndef RHMIXXX_keypad_h_INCLUDED #define RHMIXXX_keypad_h_INCLUDED +#define KEYPAD_NUM_COLS 4 +#define KEYPAD_NUM_ROWS 4 +#define KEYPAD_NUM_KEYS KEYPAD_NUM_COLS * KEYPAD_NUM_ROWS +#define KEYPAD_MIDI_NOTE_OFFSET 0 +#define KEYPAD_MIDI_NOTE_ALL KEYPAD_MIDI_NOTE_OFFSET + 31 + void keypad_init(void); void keypad_led_on(uint8_t led); diff --git a/software/rhmixxx/rhmixxx.c b/software/rhmixxx/rhmixxx.c index d5ac080..f94b67b 100644 --- a/software/rhmixxx/rhmixxx.c +++ b/software/rhmixxx/rhmixxx.c @@ -83,24 +83,23 @@ static void process_incoming_midi(void) uint8_t cmd = ReceivedMIDIEvent.Data1 & 0xF0;
uint8_t note = ReceivedMIDIEvent.Data2;
uint8_t value = ReceivedMIDIEvent.Data3 & 0x7F;
- if(note < 16 || note == 0x7F) { // KEYPAD
+ 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(value <= 2) {
- switch(value) {
- case 0: keypad_led_off(note); break;
- case 1: keypad_led_on(note); break;
- case 2: keypad_led_toggle(note); break;
- }
- } else if(value <= 0x7F) {
- keypad_led_blink(note, value);
+ switch(value) {
+ 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(note >= 64 && note <= 68) { // GPIO
+ } else if((note >= GPIO_MIDI_NOTE_OFFSET && note < GPIO_MIDI_NOTE_OFFSET + GPIO_NUM_OUTPUTS) || // GPIO
+ note == GPIO_MIDI_NOTE_ALL_OUTPUTS) {
if(cmd == MIDI_COMMAND_NOTE_ON) {
switch(value) {
- case 0: gpio_out_off(note - 64); break;
- case 1: gpio_out_on(note - 64); break;
- case 2: gpio_out_toggle(note - 64); break;
+ case 0: gpio_out_off(note - GPIO_MIDI_NOTE_OFFSET); break;
+ case 1: gpio_out_on(note - GPIO_MIDI_NOTE_OFFSET); break;
+ case 2: gpio_out_toggle(note - GPIO_MIDI_NOTE_OFFSET); break;
}
}
}
|