/** Signal that an input device event is being waited for. * @param _device Device to wait for. * @param data Handle-specific data pointer (unused). * @param event Event to wait for. * @param sync Synchronisation pointer. * @return Status code describing result of the operation. */ static status_t input_device_wait(device_t *_device, void *data, int event, void *sync) { input_device_t *device = _device->data; switch(event) { case DEVICE_EVENT_READABLE: if(semaphore_count(&device->sem)) { object_wait_signal(sync); } else { notifier_register(&device->data_notifier, object_wait_notifier, sync); } return STATUS_SUCCESS; default: return STATUS_INVALID_EVENT; } }
void object_wait_notifier(void *data) { object_wait_signal(data); }