psych_bool PsychHIDDeleteEventBuffer(int deviceIndex) { if (deviceIndex < 0) deviceIndex = PsychHIDGetDefaultKbQueueDevice(); if (hidEventBuffer[deviceIndex]) { // Empty the buffer, reset read/writepointers: PsychHIDFlushEventBuffer(deviceIndex); // Release it: free(hidEventBuffer[deviceIndex]); hidEventBuffer[deviceIndex] = NULL; PsychDestroyMutex(&hidEventBufferMutex[deviceIndex]); PsychDestroyCondition(&hidEventBufferCondition[deviceIndex]); } return(TRUE); }
psych_bool PsychHIDCreateEventBuffer(int deviceIndex, int numValuators, int numSlots) { unsigned int bufferSize; if (deviceIndex < 0) deviceIndex = PsychHIDGetDefaultKbQueueDevice(); if (numSlots < 0) { printf("PTB-ERROR: PsychHIDCreateEventBuffer(): numSlots %i invalid. Must be at least 0.\n", numSlots); return(FALSE); } // Non-zero numSlots ==> Set new capacity, otherwise leave at default/last capacity: if (numSlots > 0) hidEventBufferCapacity[deviceIndex] = numSlots; bufferSize = hidEventBufferCapacity[deviceIndex]; // Already created? If so, nothing to do: if (hidEventBuffer[deviceIndex] || (bufferSize < 1)) return(FALSE); if (numValuators > PSYCH_HID_MAX_VALUATORS) { printf("PTB-ERROR: PsychHIDCreateEventBuffer(): numValuators %i > current compile time maximum of %i!\n", numValuators, PSYCH_HID_MAX_VALUATORS); return(FALSE); } hidEventBuffer[deviceIndex] = (PsychHIDEventRecord*) calloc(sizeof(PsychHIDEventRecord), bufferSize); if (NULL==hidEventBuffer[deviceIndex]) { printf("PTB-ERROR: PsychHIDCreateEventBuffer(): Insufficient memory to create KbQueue event buffer!"); return(FALSE); } // Prepare mutex for buffer: PsychInitMutex(&hidEventBufferMutex[deviceIndex]); PsychInitCondition(&hidEventBufferCondition[deviceIndex], NULL); // Init & Flush it: hidEventBufferWritePos[deviceIndex] = 0; PsychHIDFlushEventBuffer(deviceIndex); return(TRUE); }
psych_bool PsychHIDCreateEventBuffer(int deviceIndex) { unsigned int bufferSize; if (deviceIndex < 0) deviceIndex = PsychHIDGetDefaultKbQueueDevice(); bufferSize = hidEventBufferCapacity[deviceIndex]; // Already created? If so, nothing to do: if (hidEventBuffer[deviceIndex] || (bufferSize < 1)) return(FALSE); hidEventBuffer[deviceIndex] = (PsychHIDEventRecord*) calloc(sizeof(PsychHIDEventRecord), bufferSize); if (NULL == hidEventBuffer[deviceIndex]) PsychErrorExitMsg(PsychError_outofMemory, "Insufficient memory to create KbQueue event buffer!"); // Prepare mutex for buffer: PsychInitMutex(&hidEventBufferMutex[deviceIndex]); PsychInitCondition(&hidEventBufferCondition[deviceIndex], NULL); // Flush it: PsychHIDFlushEventBuffer(deviceIndex); return(TRUE); }
PsychError PSYCHHIDKbQueueFlush(void) { int deviceIndex, flushType; PsychPushHelp(useString, synopsisString, seeAlsoString); if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);}; PsychErrorExit(PsychCapNumOutputArgs(1)); PsychErrorExit(PsychCapNumInputArgs(2)); deviceIndex = -1; PsychCopyInIntegerArg(1, kPsychArgOptional, &deviceIndex); flushType = 1; PsychCopyInIntegerArg(2, kPsychArgOptional, &flushType); // Return current count of contained events pre-flush: PsychCopyOutDoubleArg(1, FALSE, (double) PsychHIDAvailEventBuffer((PSYCH_SYSTEM != PSYCH_OSX) ? deviceIndex : 0, (flushType & 4) ? 1 : 0)); if (flushType & 1) PsychHIDOSKbQueueFlush(deviceIndex); if (flushType & 2) PsychHIDFlushEventBuffer((PSYCH_SYSTEM != PSYCH_OSX) ? deviceIndex : 0); return(PsychError_none); }