diff --git a/emulator/btdev.c b/emulator/btdev.c
index 718920b..188ecf3 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
#define cpu_to_le16(val) (val)
#define cpu_to_le32(val) (val)
+#define has_bredr(btdev) (!((btdev)->features[4] & 0x20))
+#define has_le(btdev) (!!((btdev)->features[4] & 0x40))
+
struct btdev {
enum btdev_type type;
static void set_le_features(struct btdev *btdev)
{
+ btdev->features[4] |= 0x20; /* BR/EDR Not Supported */
btdev->features[4] |= 0x40; /* LE Supported */
btdev->features[7] |= 0x80; /* Extended features */
}
diff --git a/emulator/main.c b/emulator/main.c
index 84d7cf5..bcb2db3 100644
--- a/emulator/main.c
+++ b/emulator/main.c
struct vhci *vhci;
struct server *server1;
struct server *server2;
+ struct server *server3;
sigset_t mask;
mainloop_init();
if (!server1)
fprintf(stderr, "Failed to open BR/EDR server channel\n");
- server2 = server_open_unix(SERVER_TYPE_BREDR, "/tmp/bt-server-amp");
+ server2 = server_open_unix(SERVER_TYPE_AMP, "/tmp/bt-server-amp");
if (!server2)
fprintf(stderr, "Failed to open AMP server channel\n");
+ server3 = server_open_unix(SERVER_TYPE_LE, "/tmp/bt-server-le");
+ if (!server3)
+ fprintf(stderr, "Failed to open LE server channel\n");
+
return mainloop_run();
}
diff --git a/emulator/server.c b/emulator/server.c
index 2436e56..61f2275 100644
--- a/emulator/server.c
+++ b/emulator/server.c
case SERVER_TYPE_BREDR:
type = BTDEV_TYPE_BREDR;
break;
+ case SERVER_TYPE_LE:
+ type = BTDEV_TYPE_LE;
+ break;
case SERVER_TYPE_AMP:
type = BTDEV_TYPE_AMP;
break;
diff --git a/emulator/server.h b/emulator/server.h
index 412ea68..e63e2b2 100644
--- a/emulator/server.h
+++ b/emulator/server.h
enum server_type {
SERVER_TYPE_BREDR,
+ SERVER_TYPE_LE,
SERVER_TYPE_AMP,
};