Lines Matching refs:handle

52     MidiDeviceHandle* handle = (MidiDeviceHandle*) dwInstance;
71 if (handle!=NULL && handle->queue!=NULL && handle->platformData) {
72 MIDI_QueueAddShort(handle->queue,
80 SetEvent((HANDLE) handle->platformData);
87 if (handle!=NULL && handle->queue!=NULL && handle->platformData) {
90 MIDI_QueueAddLong(handle->queue,
99 SetEvent((HANDLE) handle->platformData);
119 midiInAddBuffer((HMIDIIN)handle->deviceHandle, hdr, sizeof(MIDIHDR));
141 static MMRESULT midiInOpen(INT32 deviceID, MidiDeviceHandle* handle);
158 // data to process; (handle == null) is command to thread terminating
160 volatile MidiDeviceHandle* handle;
184 handle = NULL;
198 if (data.handle == NULL) {
199 // (data.handle == NULL) is a signal to terminate thread
203 data.err = ::midiInOpen((HMIDIIN*)&(data.handle->deviceHandle),
205 (UINT_PTR)data.handle,
213 MMRESULT MidiIn_OpenHelper::midiInOpen(INT32 deviceID, MidiDeviceHandle* handle) {
221 data.handle = handle;
288 INT32 prepareBuffers(MidiDeviceHandle* handle) {
293 if (!handle || !handle->longBuffers || !handle->deviceHandle) {
294 ERROR0("MIDI_IN_prepareBuffers: handle, or longBuffers, or deviceHandle==NULL\n");
297 sysex = (SysExQueue*) handle->longBuffers;
300 midiInPrepareHeader((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR));
301 err = midiInAddBuffer((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR));
307 INT32 unprepareBuffers(MidiDeviceHandle* handle) {
312 if (!handle || !handle->longBuffers || !handle->deviceHandle) {
313 ERROR0("MIDI_IN_unprepareBuffers: handle, or longBuffers, or deviceHandle==NULL\n");
316 sysex = (SysExQueue*) handle->longBuffers;
318 err = midiInUnprepareHeader((HMIDIIN) handle->deviceHandle, &(sysex->header[i]), sizeof(MIDIHDR));
324 INT32 MIDI_IN_OpenDevice(INT32 deviceID, MidiDeviceHandle** handle) {
333 (*handle) = (MidiDeviceHandle*) malloc(sizeof(MidiDeviceHandle));
334 if (!(*handle)) {
338 memset(*handle, 0, sizeof(MidiDeviceHandle));
341 (*handle)->queue = MIDI_CreateQueue(MIDI_IN_MESSAGE_QUEUE_SIZE);
342 if (!(*handle)->queue) {
344 free(*handle);
345 (*handle) = NULL;
350 if (!MIDI_WinCreateLongBufferQueue(*handle, MIDI_IN_LONG_QUEUE_SIZE, MIDI_IN_LONG_MESSAGE_SIZE, NULL)) {
352 MIDI_DestroyQueue((*handle)->queue);
353 free(*handle);
354 (*handle) = NULL;
359 err = MidiIn_OpenHelper::midiInOpen(deviceID, *handle);
361 if ((err != MMSYSERR_NOERROR) || (!(*handle)->deviceHandle)) {
363 MIDI_WinDestroyLongBufferQueue(*handle);
364 MIDI_DestroyQueue((*handle)->queue);
365 free(*handle);
366 (*handle) = NULL;
370 prepareBuffers(*handle);
371 MIDI_SetStartTime(*handle);
377 INT32 MIDI_IN_CloseDevice(MidiDeviceHandle* handle) {
381 if (!handle) {
382 ERROR0("ERROR: MIDI_IN_CloseDevice: handle is NULL\n");
385 midiInReset((HMIDIIN) handle->deviceHandle);
386 unprepareBuffers(handle);
387 err = midiInClose((HMIDIIN) handle->deviceHandle);
388 handle->deviceHandle=NULL;
390 MIDI_WinDestroyLongBufferQueue(handle);
392 if (handle->queue!=NULL) {
393 MidiMessageQueue* queue = handle->queue;
394 handle->queue = NULL;
397 free(handle);
404 INT32 MIDI_IN_StartDevice(MidiDeviceHandle* handle) {
407 if (!handle || !handle->deviceHandle || !handle->queue) {
408 ERROR0("ERROR: MIDI_IN_StartDevice: handle or queue is NULL\n");
413 MIDI_QueueClear(handle->queue);
415 handle->platformData = (void*) CreateEvent(NULL, FALSE /*manual reset*/, FALSE /*signaled*/, NULL);
416 if (!handle->platformData) {
421 err = midiInStart((HMIDIIN) handle->deviceHandle);
427 MIDI_SetStartTime(handle);
435 INT32 MIDI_IN_StopDevice(MidiDeviceHandle* handle) {
440 if (!handle || !handle->platformData) {
441 ERROR0("ERROR: MIDI_IN_StopDevice: handle or event is NULL\n");
445 event = handle->platformData;
446 handle->platformData = NULL;
449 err = midiInStop((HMIDIIN) handle->deviceHandle);
452 while (handle->isWaiting) Sleep(0);
462 INT64 MIDI_IN_GetTimeStamp(MidiDeviceHandle* handle) {
463 return MIDI_GetTimeStamp(handle);
468 MidiMessage* MIDI_IN_GetMessage(MidiDeviceHandle* handle) {
469 if (handle == NULL) {
472 while (handle->queue!=NULL && handle->platformData!=NULL) {
473 MidiMessage* msg = MIDI_QueueRead(handle->queue);
480 handle->isWaiting = TRUE;
481 res = WaitForSingleObject((HANDLE) handle->platformData, 2000);
482 handle->isWaiting = FALSE;
493 void MIDI_IN_ReleaseMessage(MidiDeviceHandle* handle, MidiMessage* msg) {
495 if (handle == NULL || handle->queue == NULL) {
498 sysex = (SysExQueue*) handle->longBuffers;
503 midiInAddBuffer((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR));
505 MIDI_QueueRemove(handle->queue, TRUE /*onlyLocked*/);