From 57a43ed48e2603de3951ad3d8310d4062b06ebf3 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 5 Oct 2013 08:15:41 -0700 Subject: [PATCH] emulator: Add special Virtual HCI setup command --- emulator/vhci.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/emulator/vhci.c b/emulator/vhci.c index 1d198e46c..d32d5e576 100644 --- a/emulator/vhci.c +++ b/emulator/vhci.c @@ -33,6 +33,9 @@ #include #include +#include +#include + #include "monitor/mainloop.h" #include "monitor/bt.h" #include "btdev.h" @@ -93,20 +96,27 @@ struct vhci *vhci_open(enum vhci_type type) { 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)); @@ -122,6 +132,15 @@ struct vhci *vhci_open(enum vhci_type type) 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); -- 2.47.3