static void EvdevPtrRead(int evdevPort, void *closure) { KdPointerInfo *pi = closure; Kevdev *ke = pi->driverPrivate; int i; struct input_event events[NUM_EVENTS]; int n; n = read(evdevPort, &events, NUM_EVENTS * sizeof(struct input_event)); if (n <= 0) { if (errno == ENODEV) DeleteInputDeviceRequest(pi->dixdev); return; } n /= sizeof(struct input_event); for (i = 0; i < n; i++) { switch (events[i].type) { case EV_SYN: break; case EV_KEY: EvdevPtrBtn(pi, &events[i]); break; case EV_REL: ke->rel[events[i].code] += events[i].value; EvdevPtrMotion(pi, &events[i]); break; case EV_ABS: ke->abs[events[i].code] = events[i].value; EvdevPtrMotion(pi, &events[i]); break; } } }
static void remove_device(DeviceIntPtr dev) { DebugF("[config/hal] removing device %s\n", dev->name); /* Call PIE here so we don't try to dereference a device that's * already been removed. */ OsBlockSignals(); ProcessInputEvents(); DeleteInputDeviceRequest(dev); OsReleaseSignals(); }
static void remove_device(DeviceIntPtr dev) { /* this only gets called for devices that have already been added */ LogMessage(X_INFO, "config/hal: removing device %s\n", dev->name); /* Call PIE here so we don't try to dereference a device that's * already been removed. */ OsBlockSignals(); ProcessInputEvents(); DeleteInputDeviceRequest(dev); OsReleaseSignals(); }
static void remove_device(const char *backend, DeviceIntPtr dev) { /* this only gets called for devices that have already been added */ LogMessage(X_INFO, "config/%s: removing device %s\n", backend, dev->name); /* Call PIE here so we don't try to dereference a device that's * already been removed. */ input_lock(); ProcessInputEvents(); DeleteInputDeviceRequest(dev); input_unlock(); }
static int remove_device(DBusMessage *message, DBusMessage *reply, DBusError *error) { int deviceid, ret, err; DeviceIntPtr dev; DBusMessageIter iter, reply_iter; dbus_message_iter_init_append(reply, &reply_iter); if (!dbus_message_iter_init(message, &iter)) { ErrorF("[config/dbus] failed to init iterator\n"); MALFORMED_MESSAGE(); } if (!dbus_message_get_args(message, error, DBUS_TYPE_UINT32, &deviceid, DBUS_TYPE_INVALID)) { MALFORMED_MESSAGE_ERROR(); } dev = LookupDeviceIntRec(deviceid); if (!dev) { DebugF("[config/dbus] bogus device id %d given\n", deviceid); ret = BadMatch; goto unwind; } DebugF("[config/dbus] removing device %s (id %d)\n", dev->name, deviceid); /* Call PIE here so we don't try to dereference a device that's * already been removed. */ OsBlockSignals(); ProcessInputEvents(); DeleteInputDeviceRequest(dev); OsReleaseSignals(); ret = Success; unwind: err = (ret == Success) ? ret : -ret; dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, &err); return ret; }
static void EvdevKbdRead(int evdevPort, void *closure) { KdKeyboardInfo *ki = closure; struct input_event events[NUM_EVENTS]; int i, n; n = read(evdevPort, &events, NUM_EVENTS * sizeof(struct input_event)); if (n <= 0) { if (errno == ENODEV) DeleteInputDeviceRequest(ki->dixdev); return; } n /= sizeof(struct input_event); for (i = 0; i < n; i++) { if (events[i].type == EV_KEY) KdEnqueueKeyboardEvent(ki, events[i].code, !events[i].value); /* FIXME: must implement other types of events else ErrorF("Event type (%d) not delivered\n", events[i].type); */ } }
static int add_master(ClientPtr client, xXIAddMasterInfo *c, int flags[MAXDEVICES]) { DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd; char* name; int rc; name = calloc(c->name_len + 1, sizeof(char)); strncpy(name, (char*)&c[1], c->name_len); rc = AllocDevicePair(client, name, &ptr, &keybd, CorePointerProc, CoreKeyboardProc, TRUE); if (rc != Success) goto unwind; if (!c->send_core) ptr->coreEvents = keybd->coreEvents = FALSE; /* Allocate virtual slave devices for xtest events */ rc = AllocXTestDevice(client, name, &XTestptr, &XTestkeybd, ptr, keybd); if (rc != Success) { DeleteInputDeviceRequest(ptr); DeleteInputDeviceRequest(keybd); goto unwind; } ActivateDevice(ptr, FALSE); ActivateDevice(keybd, FALSE); flags[ptr->id] |= XIMasterAdded; flags[keybd->id] |= XIMasterAdded; ActivateDevice(XTestptr, FALSE); ActivateDevice(XTestkeybd, FALSE); flags[XTestptr->id] |= XISlaveAdded; flags[XTestkeybd->id] |= XISlaveAdded; if (c->enable) { EnableDevice(ptr, FALSE); EnableDevice(keybd, FALSE); flags[ptr->id] |= XIDeviceEnabled; flags[keybd->id] |= XIDeviceEnabled; EnableDevice(XTestptr, FALSE); EnableDevice(XTestkeybd, FALSE); flags[XTestptr->id] |= XIDeviceEnabled; flags[XTestkeybd->id] |= XIDeviceEnabled; } /* Attach the XTest virtual devices to the newly created master device */ AttachDevice(NULL, XTestptr, ptr); AttachDevice(NULL, XTestkeybd, keybd); flags[XTestptr->id] |= XISlaveAttached; flags[XTestkeybd->id] |= XISlaveAttached; unwind: free(name); return rc; }