diff options
Diffstat (limited to 'hcid/main.c')
-rw-r--r-- | hcid/main.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/hcid/main.c b/hcid/main.c index 45b8231d..f4736940 100644 --- a/hcid/main.c +++ b/hcid/main.c @@ -222,8 +222,18 @@ static void configure_device(int hdev) hdev, strerror(errno), errno); } + /* Set device name */ + if ((device_opts->flags & (1 << HCID_SET_NAME)) && device_opts->name) { + change_local_name_cp cp; + memset(cp.name, 0, sizeof(cp.name)); + expand_name(cp.name, sizeof(cp.name), device_opts->name, hdev); + + hci_send_cmd(s, OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME, + CHANGE_LOCAL_NAME_CP_SIZE, (void *) &cp); + } + /* Set device class */ - if (device_opts->class) { + if ((device_opts->flags & (1 << HCID_SET_CLASS))) { uint32_t class = htobl(device_opts->class); write_class_of_dev_cp cp; @@ -232,18 +242,18 @@ static void configure_device(int hdev) WRITE_CLASS_OF_DEV_CP_SIZE, (void *) &cp); } - /* Set device name */ - if (device_opts->name) { - change_local_name_cp cp; - memset(cp.name, 0, sizeof(cp.name)); - expand_name(cp.name, sizeof(cp.name), device_opts->name, hdev); + /* Set voice setting */ + if ((device_opts->flags & (1 << HCID_SET_VOICE))) { + write_voice_setting_cp cp; - hci_send_cmd(s, OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME, - CHANGE_LOCAL_NAME_CP_SIZE, (void *) &cp); + cp.voice_setting = htobl(device_opts->voice); + hci_send_cmd(s, OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING, + WRITE_VOICE_SETTING_CP_SIZE, (void *) &cp); } /* Set inquiry mode */ - if (di.features[3] & LMP_RSSI_INQ) { + if ((device_opts->flags & (1 << HCID_SET_INQMODE)) && + (di.features[3] & LMP_RSSI_INQ)) { write_inquiry_mode_cp cp; cp.mode = device_opts->inqmode; @@ -298,7 +308,7 @@ static void init_device(int hdev) device_opts = get_device_opts(s, hdev); /* Set packet type */ - if (device_opts->pkt_type) { + if ((device_opts->flags & (1 << HCID_SET_PTYPE))) { dr.dev_opt = device_opts->pkt_type; if (ioctl(s, HCISETPTYPE, (unsigned long) &dr) < 0) { syslog(LOG_ERR, "Can't set packet type on hci%d: %s (%d)", @@ -307,7 +317,7 @@ static void init_device(int hdev) } /* Set link mode */ - if (device_opts->link_mode) { + if ((device_opts->flags & (1 << HCID_SET_LM))) { dr.dev_opt = device_opts->link_mode; if (ioctl(s, HCISETLINKMODE, (unsigned long) &dr) < 0) { syslog(LOG_ERR, "Can't set link mode on hci%d: %s (%d)", @@ -316,7 +326,7 @@ static void init_device(int hdev) } /* Set link policy */ - if (device_opts->link_policy) { + if ((device_opts->flags & (1 << HCID_SET_LP))) { dr.dev_opt = device_opts->link_policy; if (ioctl(s, HCISETLINKPOL, (unsigned long) &dr) < 0) { syslog(LOG_ERR, "Can't set link policy on hci%d: %s (%d)", |