diff options
-rw-r--r-- | software/rhmixxx/rhmixxx.c | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/software/rhmixxx/rhmixxx.c b/software/rhmixxx/rhmixxx.c index 79a3e48..1a10a03 100644 --- a/software/rhmixxx/rhmixxx.c +++ b/software/rhmixxx/rhmixxx.c @@ -75,18 +75,27 @@ void EVENT_USB_Device_ControlRequest(void) #include "keypad.h"
#include "eventqueue.h"
-int main(void)
+static void process_incoming_midi(void)
{
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- cpu_init();
- eventqueue_init();
- keypad_init();
-
- USB_Init();
- sei();
+ MIDI_EventPacket_t ReceivedMIDIEvent;
+ while(MIDI_Device_ReceiveEventPacket(&MIDI_Interface, &ReceivedMIDIEvent)) {
+ uint8_t cmd = ReceivedMIDIEvent.Data1 & 0xF0;
+ uint8_t note = ReceivedMIDIEvent.Data2;
+ uint8_t value = ReceivedMIDIEvent.Data3 & 0x7F;
+ if(note < 16 || note == 0x7F) { // TODO: hardcoded value
+ if(cmd == MIDI_COMMAND_NOTE_ON) {
+ switch(value) {
+ case 0: keypad_led_off(note); break;
+ case 1: keypad_led_on(note); break;
+ case 2: keypad_led_toggle(note); break;
+ }
+ }
+ }
+ }
+}
+static void process_outgoing_midi(void)
+{
MIDI_EventPacket_t MIDIEventOn = (MIDI_EventPacket_t)
{
.CableNumber = 0, // TODO: hardcoded value
@@ -104,34 +113,36 @@ int main(void) .Data3 = 0,
};
- for(;;) {
- MIDI_EventPacket_t ReceivedMIDIEvent;
- while(MIDI_Device_ReceiveEventPacket(&MIDI_Interface, &ReceivedMIDIEvent)) {
- uint8_t cmd = ReceivedMIDIEvent.Data1 & 0xF0;
- uint8_t note = ReceivedMIDIEvent.Data2;
- uint8_t value = ReceivedMIDIEvent.Data3 & 0x7F;
- if(note < 16 || note == 0x7F) { // TODO: hardcoded value
- if(cmd == MIDI_COMMAND_NOTE_ON) {
- switch(value) {
- case 0: keypad_led_off(note); break;
- case 1: keypad_led_on(note); break;
- case 2: keypad_led_toggle(note); break;
- }
- }
- }
+ uint8_t key, state;
+ while(eventqueue_pop(&key, &state)) {
+ if (USB_DeviceState == DEVICE_STATE_Configured) {
+ MIDI_EventPacket_t* MIDIEvent = state ? &MIDIEventOn : &MIDIEventOff;
+ MIDIEvent->Data2 = key;
+ MIDI_Device_SendEventPacket(&MIDI_Interface, MIDIEvent);
}
+ }
+ if (USB_DeviceState == DEVICE_STATE_Configured)
+ MIDI_Device_Flush(&MIDI_Interface);
+}
+
+int main(void)
+{
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ cpu_init();
+ eventqueue_init();
+ keypad_init();
+
+ USB_Init();
+ sei();
+
+ for(;;) {
+ process_incoming_midi();
+
keypad_task();
- uint8_t key, state;
- while(eventqueue_pop(&key, &state)) {
- if (USB_DeviceState == DEVICE_STATE_Configured) {
- MIDI_EventPacket_t* MIDIEvent = state ? &MIDIEventOn : &MIDIEventOff;
- MIDIEvent->Data2 = key;
- MIDI_Device_SendEventPacket(&MIDI_Interface, MIDIEvent);
- }
- }
- if (USB_DeviceState == DEVICE_STATE_Configured)
- MIDI_Device_Flush(&MIDI_Interface);
+ process_outgoing_midi();
MIDI_Device_USBTask(&MIDI_Interface);
USB_USBTask();
|