static void init_uinput(struct control *control) { struct audio_device *dev = control->dev; char address[18], name[248 + 1], *uinput_dev_name; device_get_name(dev->btd_dev, name, sizeof(name)); if (g_str_equal(name, "Nokia CK-20W")) { control->key_quirks[FORWARD_OP] |= QUIRK_NO_RELEASE; control->key_quirks[BACKWARD_OP] |= QUIRK_NO_RELEASE; control->key_quirks[PLAY_OP] |= QUIRK_NO_RELEASE; control->key_quirks[PAUSE_OP] |= QUIRK_NO_RELEASE; } control->ignore_pause = FALSE; ba2str(&dev->dst, address); /* Use device name from config file if specified */ uinput_dev_name = input_device_name; if (!uinput_dev_name) uinput_dev_name = address; control->uinput = uinput_create(uinput_dev_name); if (control->uinput < 0) error("AVRCP: failed to init uinput for %s", address); else DBG("AVRCP: uinput initialized for %s", address); }
void epox_presenter(const bdaddr_t *src, const bdaddr_t *dst, uint8_t channel) { unsigned char buf[16]; struct sigaction sa; struct pollfd p; char addr[18]; int i, fd, sk, len; sk = rfcomm_connect(src, dst, channel); if (sk < 0) return; fd = uinput_create("Bluetooth Presenter", 0, 1); if (fd < 0) { close(sk); return; } ba2str(dst, addr); printf("Connected to %s on channel %d\n", addr, channel); printf("Press CTRL-C for hangup\n"); memset(&sa, 0, sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = SIG_IGN; sigaction(SIGCHLD, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); sa.sa_handler = sig_term; sigaction(SIGTERM, &sa, NULL); sigaction(SIGINT, &sa, NULL); sa.sa_handler = sig_hup; sigaction(SIGHUP, &sa, NULL); p.fd = sk; p.events = POLLIN | POLLERR | POLLHUP; while (!__io_canceled) { p.revents = 0; if (poll(&p, 1, 100) < 1) continue; len = read(sk, buf, sizeof(buf)); if (len < 0) break; for (i = 0; i < len; i++) epox_decode(fd, buf[i]); } printf("Disconnected\n"); ioctl(fd, UI_DEV_DESTROY); close(fd); close(sk); }
int init_uinput (void) { char *name = "AVRCP"; BTIF_TRACE_DEBUG1("%s", __FUNCTION__); uinput_fd = uinput_create(name); if (uinput_fd < 0) { BTIF_TRACE_ERROR3("%s AVRCP: Failed to initialize uinput for %s (%d)", __FUNCTION__, name, uinput_fd); } else { BTIF_TRACE_DEBUG3("%s AVRCP: Initialized uinput for %s (fd=%d)", __FUNCTION__, name, uinput_fd); } return uinput_fd; }
static void rfcomm_connect_cb(GIOChannel *chan, GError *err, gpointer user_data) { struct input_conn *iconn = user_data; struct input_device *idev = iconn->idev; struct fake_input *fake = iconn->fake; DBusMessage *reply; if (err) { reply = btd_error_failed(iconn->pending_connect, err->message); goto failed; } fake->rfcomm = g_io_channel_unix_get_fd(chan); /* * FIXME: Some headsets required a sco connection * first to report volume gain key events */ fake->uinput = uinput_create(idev->name); if (fake->uinput < 0) { int err = fake->uinput; g_io_channel_shutdown(chan, TRUE, NULL); reply = btd_error_failed(iconn->pending_connect, strerror(-err)); goto failed; } fake->io = g_io_channel_unix_new(fake->rfcomm); g_io_channel_set_close_on_unref(fake->io, TRUE); g_io_add_watch(fake->io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, (GIOFunc) rfcomm_io_cb, fake); /* Replying to the requestor */ reply = dbus_message_new_method_return(iconn->pending_connect); g_dbus_send_message(idev->conn, reply); dbus_message_unref(iconn->pending_connect); iconn->pending_connect = NULL; return; failed: g_dbus_send_message(idev->conn, reply); dbus_message_unref(iconn->pending_connect); iconn->pending_connect = NULL; }
static void init_uinput(struct avctp *session) { char address[18], *name; GError *err = NULL; ba2str(&session->dst, address); /* use device name from config file if specified */ name = input_device_name; if (!name) name = session->dev->name ? session->dev->name : address; session->uinput = uinput_create(name); if (session->uinput < 0) error("AVRCP: failed to init uinput for %s", name); else debug("AVRCP: uinput initialized for %s", name); }
int avctp_init_uinput(struct avctp *session, const char *name, const char *address) { if (g_str_equal(name, "Nokia CK-20W")) { session->key_quirks[AVC_FORWARD] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_BACKWARD] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_PLAY] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_PAUSE] |= QUIRK_NO_RELEASE; } session->uinput = uinput_create(address); if (session->uinput < 0) { error("AVCTP: failed to init uinput for %s", address); return session->uinput; } return 0; }
static void init_uinput(struct avctp *session) { char address[18], name[248 + 1]; device_get_name(session->device, name, sizeof(name)); if (g_str_equal(name, "Nokia CK-20W")) { session->key_quirks[AVC_FORWARD] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_BACKWARD] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_PLAY] |= QUIRK_NO_RELEASE; session->key_quirks[AVC_PAUSE] |= QUIRK_NO_RELEASE; } ba2str(device_get_address(session->device), address); session->uinput = uinput_create(address); if (session->uinput < 0) error("AVRCP: failed to init uinput for %s", address); else DBG("AVRCP: uinput initialized for %s", address); }
static void init_uinput(struct control *control) { struct audio_device *dev = control->dev; char address[18], name[248 + 1]; device_get_name(dev->btd_dev, name, sizeof(name)); if (g_str_equal(name, "Nokia CK-20W")) { control->key_quirks[FORWARD_OP] |= QUIRK_NO_RELEASE; control->key_quirks[BACKWARD_OP] |= QUIRK_NO_RELEASE; control->key_quirks[PLAY_OP] |= QUIRK_NO_RELEASE; control->key_quirks[PAUSE_OP] |= QUIRK_NO_RELEASE; } ba2str(&dev->dst, address); control->uinput = uinput_create(address); if (control->uinput < 0) error("AVRCP: failed to init uinput for %s", address); else debug("AVRCP: uinput initialized for %s", address); }
static void init_uinput(struct avctp *session) { struct audio_device *dev; char address[18], name[248 + 1]; dev = manager_get_device(&session->server->src, &session->dst, FALSE); device_get_name(dev->btd_dev, name, sizeof(name)); if (g_str_equal(name, "Nokia CK-20W")) { session->key_quirks[FORWARD_OP] |= QUIRK_NO_RELEASE; session->key_quirks[BACKWARD_OP] |= QUIRK_NO_RELEASE; session->key_quirks[PLAY_OP] |= QUIRK_NO_RELEASE; session->key_quirks[PAUSE_OP] |= QUIRK_NO_RELEASE; } ba2str(&session->dst, address); session->uinput = uinput_create(address); if (session->uinput < 0) error("AVRCP: failed to init uinput for %s", address); else DBG("AVRCP: uinput initialized for %s", address); }
int celluon_keyboard(const bdaddr_t *src, const bdaddr_t *dst, uint8_t channel) { unsigned char buf[16]; struct sigaction sa; struct pollfd p; sigset_t sigs; char addr[18]; int i, fd, sk, len; struct celluon_state s; sk = rfcomm_connect(src, dst, channel); if (sk < 0) return -1; fd = uinput_create("Celluon Keyboard", 1, 0); if (fd < 0) { close(sk); return -1; } ba2str(dst, addr); printf("Connected to %s on channel %d\n", addr, channel); printf("Press CTRL-C for hangup\n"); memset(&sa, 0, sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = SIG_IGN; sigaction(SIGCHLD, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); sa.sa_handler = sig_term; sigaction(SIGTERM, &sa, NULL); sigaction(SIGINT, &sa, NULL); sa.sa_handler = sig_hup; sigaction(SIGHUP, &sa, NULL); sigfillset(&sigs); sigdelset(&sigs, SIGCHLD); sigdelset(&sigs, SIGPIPE); sigdelset(&sigs, SIGTERM); sigdelset(&sigs, SIGINT); sigdelset(&sigs, SIGHUP); p.fd = sk; p.events = POLLIN | POLLERR | POLLHUP; memset(&s, 0, sizeof(s)); while (!__io_canceled) { p.revents = 0; if (ppoll(&p, 1, NULL, &sigs) < 1) continue; len = read(sk, buf, sizeof(buf)); if (len < 0) break; for (i = 0; i < len; i++) celluon_decode(fd, &s, buf[i]); } printf("Disconnected\n"); ioctl(fd, UI_DEV_DESTROY); close(fd); close(sk); return 0; }