return FALSE;
}
-static int uinput_create(char *name)
+static int uinput_create(struct btd_device *device, const char *name,
+ const char *phys)
{
struct uinput_dev dev;
int fd, err, i;
strncpy(dev.name, name, UINPUT_MAX_NAME_SIZE - 1);
dev.id.bustype = BUS_BLUETOOTH;
- dev.id.vendor = 0x0000;
- dev.id.product = 0x0000;
- dev.id.version = 0x0000;
+ dev.id.vendor = btd_device_get_vendor(device);
+ dev.id.product = btd_device_get_product(device);
+ dev.id.version = btd_device_get_version(device);
if (write(fd, &dev, sizeof(dev)) < 0) {
err = -errno;
ioctl(fd, UI_SET_EVBIT, EV_REL);
ioctl(fd, UI_SET_EVBIT, EV_REP);
ioctl(fd, UI_SET_EVBIT, EV_SYN);
+
+ /* Also set the phys */
+ ioctl(fd, UI_SET_PHYS, phys);
+
#ifdef TIZEN_FEATURE_BLUEZ_MODIFY
ioctl(fd, UI_SET_EVBIT, EV_ABS);
#endif
static void init_uinput(struct avctp *session)
{
- char address[18], name[248 + 1];
+ char address[18], phy[18], name[248 + 1];
device_get_name(session->device, name, sizeof(name));
if (g_str_equal(name, "Nokia CK-20W")) {
session->key_quirks[AVC_PAUSE] |= QUIRK_NO_RELEASE;
}
- ba2str(device_get_address(session->device), address);
+ ba2strlc(device_get_address(session->device), address);
+ ba2strlc(btd_adapter_get_address(device_get_adapter(session->device)),
+ phys);
+
/*
* Make sucre address to prevent to print privacy log
*/
#ifdef TIZEN_FEATURE_BLUEZ_MODIFY
address[6] = address[7] = address[9] = address[10] = 'X';
#endif
- session->uinput = uinput_create(address);
+ session->uinput = uinput_create(session->device, address, phys);
if (session->uinput < 0)
error("AVRCP: failed to init uinput for %s", address);
else
memset(&ev, 0, sizeof(ev));
ev.type = UHID_CREATE;
strncpy((char *) ev.u.create.name, req->name, sizeof(ev.u.create.name));
- ba2str(&idev->src, (char *) ev.u.create.phys);
- ba2str(&idev->dst, (char *) ev.u.create.uniq);
+ ba2strlc(&idev->src, (char *) ev.u.create.phys);
+ ba2strlc(&idev->dst, (char *) ev.u.create.uniq);
ev.u.create.vendor = req->vendor;
ev.u.create.product = req->product;
ev.u.create.version = req->version;
#include <stdbool.h>
#include <errno.h>
#include <unistd.h>
+#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
BT_IO_OPT_SOURCE, ev.u.create.phys,
BT_IO_OPT_DEST, ev.u.create.uniq,
BT_IO_OPT_INVALID);
+
+ /* Phys + uniq are the same size (hw address type) */
+ for (i = 0;
+ i < (int)sizeof(ev.u.create.phys) && ev.u.create.phys[i] != 0;
+ ++i) {
+ ev.u.create.phys[i] = tolower(ev.u.create.phys[i]);
+ ev.u.create.uniq[i] = tolower(ev.u.create.uniq[i]);
+ }
+
if (gerr) {
error("Failed to connection details: %s", gerr->message);
g_error_free(gerr);