diff --git a/emulator/vhci.c b/emulator/vhci.c
index 1d198e4..d32d5e5 100644
--- a/emulator/vhci.c
+++ b/emulator/vhci.c
#include <stdlib.h>
#include <string.h>
+#include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
+
#include "monitor/mainloop.h"
#include "monitor/bt.h"
#include "btdev.h"
{
struct vhci *vhci;
enum btdev_type uninitialized_var(btdev_type);
+ unsigned char uninitialized_var(ctrl_type);
+ unsigned char setup_cmd[2];
static uint8_t id = 0x23;
switch (type) {
case VHCI_TYPE_BREDRLE:
btdev_type = BTDEV_TYPE_BREDRLE;
+ ctrl_type = HCI_BREDR;
break;
case VHCI_TYPE_BREDR:
btdev_type = BTDEV_TYPE_BREDR;
+ ctrl_type = HCI_BREDR;
break;
case VHCI_TYPE_LE:
btdev_type = BTDEV_TYPE_LE;
+ ctrl_type = HCI_BREDR;
break;
case VHCI_TYPE_AMP:
- return NULL;
+ btdev_type = BTDEV_TYPE_AMP;
+ ctrl_type = HCI_AMP;
+ break;
}
vhci = malloc(sizeof(*vhci));
return NULL;
}
+ setup_cmd[0] = HCI_VENDOR_PKT;
+ setup_cmd[1] = ctrl_type;
+
+ if (write(vhci->fd, setup_cmd, sizeof(setup_cmd)) < 0) {
+ close(vhci->fd);
+ free(vhci);
+ return NULL;
+ }
+
vhci->btdev = btdev_create(btdev_type, id++);
if (!vhci->btdev) {
close(vhci->fd);