summaryrefslogtreecommitdiff
path: root/tools/3dsp.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2014-01-03 20:20:23 -0800
committerMarcel Holtmann <marcel@holtmann.org>2014-01-03 20:20:23 -0800
commit4b31ab4e37977cde5953b1b734677a375b8d90fc (patch)
treeeec0e6c96ef24bd50009e96161a48f685b90bccf /tools/3dsp.c
parent8a73184567ed2a110a1742555a2857f3ca8e996d (diff)
downloadbluez-4b31ab4e37977cde5953b1b734677a375b8d90fc.tar.gz
tools: Allow using raw interface for 3DSP utility
Diffstat (limited to 'tools/3dsp.c')
-rw-r--r--tools/3dsp.c56
1 files changed, 43 insertions, 13 deletions
diff --git a/tools/3dsp.c b/tools/3dsp.c
index ba5b9dbdc..a96c422ee 100644
--- a/tools/3dsp.c
+++ b/tools/3dsp.c
@@ -47,6 +47,9 @@
static struct bt_hci *hci_dev;
+static bool reset_on_init = false;
+static bool reset_on_shutdown = false;
+
static void shutdown_timeout(int id, void *user_data)
{
mainloop_remove_timeout(id);
@@ -65,12 +68,15 @@ static void shutdown_device(void)
{
unsigned int id;
- id = mainloop_add_timeout(5, shutdown_timeout, NULL, NULL);
-
bt_hci_flush(hci_dev);
- bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0, shutdown_complete,
- UINT_TO_PTR(id), NULL);
+ if (reset_on_shutdown) {
+ id = mainloop_add_timeout(5, shutdown_timeout, NULL, NULL);
+
+ bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0,
+ shutdown_complete, UINT_TO_PTR(id), NULL);
+ } else
+ mainloop_quit();
}
static void slave_broadcast_receive(const void *data, uint8_t size,
@@ -189,9 +195,13 @@ static void start_glasses(void)
uint8_t evtmask2[] = { 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t inqmode = 0x02;
- bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0, NULL, NULL, NULL);
- bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK, evtmask1, 8,
+ if (reset_on_init) {
+ bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0,
+ NULL, NULL, NULL);
+ bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK, evtmask1, 8,
NULL, NULL, NULL);
+ }
+
bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK_PAGE2, evtmask2, 8,
NULL, NULL, NULL);
bt_hci_send(hci_dev, BT_HCI_CMD_WRITE_INQUIRY_MODE, &inqmode, 1,
@@ -294,9 +304,13 @@ static void start_display(void)
uint8_t sspmode = 0x01;
uint8_t ltaddr = LT_ADDR;
- bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0, NULL, NULL, NULL);
- bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK, evtmask1, 8,
+ if (reset_on_init) {
+ bt_hci_send(hci_dev, BT_HCI_CMD_RESET, NULL, 0,
NULL, NULL, NULL);
+ bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK, evtmask1, 8,
+ NULL, NULL, NULL);
+ }
+
bt_hci_send(hci_dev, BT_HCI_CMD_SET_EVENT_MASK_PAGE2, evtmask2, 8,
NULL, NULL, NULL);
bt_hci_send(hci_dev, BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE, &sspmode, 1,
@@ -363,6 +377,7 @@ static const struct option main_options[] = {
{ "display", no_argument, NULL, 'D' },
{ "glasses", no_argument, NULL, 'G' },
{ "index", required_argument, NULL, 'i' },
+ { "raw", no_argument, NULL, 'r' },
{ "version", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
{ }
@@ -373,13 +388,14 @@ int main(int argc, char *argv[])
bool display_role = false, glasses_role = false;
uint16_t index = 0;
const char *str;
+ bool use_raw = false;
sigset_t mask;
int exit_status;
for (;;) {
int opt;
- opt = getopt_long(argc, argv, "DGi:vh", main_options, NULL);
+ opt = getopt_long(argc, argv, "DGi:rvh", main_options, NULL);
if (opt < 0)
break;
@@ -401,6 +417,9 @@ int main(int argc, char *argv[])
}
index = atoi(str);
break;
+ case 'r':
+ use_raw = true;
+ break;
case 'v':
printf("%s\n", VERSION);
return EXIT_SUCCESS;
@@ -432,10 +451,21 @@ int main(int argc, char *argv[])
printf("3D Synchronization Profile testing ver %s\n", VERSION);
- hci_dev = bt_hci_new_user_channel(index);
- if (!hci_dev) {
- fprintf(stderr, "Failed to open HCI user channel\n");
- return EXIT_FAILURE;
+ if (use_raw) {
+ hci_dev = bt_hci_new_raw_device(index);
+ if (!hci_dev) {
+ fprintf(stderr, "Failed to open HCI raw device\n");
+ return EXIT_FAILURE;
+ }
+ } else {
+ hci_dev = bt_hci_new_user_channel(index);
+ if (!hci_dev) {
+ fprintf(stderr, "Failed to open HCI user channel\n");
+ return EXIT_FAILURE;
+ }
+
+ reset_on_init = true;
+ reset_on_shutdown = true;
}
if (display_role)