/* opens a MIDI-In device, returns handle */ int mididrv_in_open(void) { MMRESULT ret; log_message(mididrv_log, "Opening MIDI-In device #%d", midi_in_dev); if (handle_in) { mididrv_in_close(); } if (midi_in_dev != -1) { ret = midiInOpen(&handle_in, midi_in_dev, (DWORD_PTR)midi_callback, 0, CALLBACK_FUNCTION); if (ret != MMSYSERR_NOERROR) { log_error(mididrv_log, "Cannot open MIDI-In device #%d!", midi_in_dev); handle_in = 0; return -1; } } else { handle_in = 0; return -1; } /* reset FIFO */ reset_fifo(); /* can theoretically return MMSYSERR_INVALHANDLE */ ret = midiInStart(handle_in); return (DWORD)handle_in; }
static void midi_suspend(void) { #ifdef DEBUG log_message(midi_log, "suspend"); #endif status = MIDI_STATUS_DEFAULT; intx = 0; if (fd_in >= 0) { mididrv_in_close(); } fd_in = -1; if (fd_out >= 0) { mididrv_out_close(); } fd_out = -1; alarm_unset(midi_alarm); alarm_active = 0; intx = 0; midi_set_int(midi_irq, midi_int_num, 0); irq = 0; }