diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-09-11 23:11:11 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-09-11 23:11:11 +0200 |
commit | a3fbc8a1d14cd97eb9d59db2fcf9ce9fd4c64ec7 (patch) | |
tree | 60c89809992bb11cb55c64901be1a5c806a5bdd2 /src | |
parent | 151046c5165860ddea6e84498cc0a0e191de1c40 (diff) |
Move link mode and policy setting before bringing up the device
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 44 |
1 files changed, 18 insertions, 26 deletions
@@ -66,8 +66,6 @@ enum { HCID_SET_CLASS, HCID_SET_PAGETO, HCID_SET_DISCOVTO, - HCID_SET_LM, - HCID_SET_LP, }; struct main_opts main_opts; @@ -183,11 +181,9 @@ static void parse_config(GKeyFile *config) } main_opts.link_mode = HCI_LM_ACCEPT; - main_opts.flags |= (1 << HCID_SET_LM); main_opts.link_policy = HCI_LP_RSWITCH | HCI_LP_SNIFF | HCI_LP_HOLD | HCI_LP_PARK; - main_opts.flags |= (1 << HCID_SET_LP); } static void update_service_classes(const bdaddr_t *bdaddr, uint8_t value) @@ -332,7 +328,6 @@ static void at_child_exit(void) static void configure_device(int dev_id) { - struct hci_dev_req dr; struct hci_dev_info di; pid_t pid; int dd; @@ -364,27 +359,6 @@ static void configure_device(int dev_id) exit(1); } - memset(&dr, 0, sizeof(dr)); - dr.dev_id = dev_id; - - /* Set link mode */ - if ((main_opts.flags & (1 << HCID_SET_LM))) { - dr.dev_opt = main_opts.link_mode; - if (ioctl(dd, HCISETLINKMODE, (unsigned long) &dr) < 0) { - error("Can't set link mode on hci%d: %s (%d)", - dev_id, strerror(errno), errno); - } - } - - /* Set link policy */ - if ((main_opts.flags & (1 << HCID_SET_LP))) { - dr.dev_opt = main_opts.link_policy; - if (ioctl(dd, HCISETLINKPOL, (unsigned long) &dr) < 0) { - error("Can't set link policy on hci%d: %s (%d)", - dev_id, strerror(errno), errno); - } - } - /* Set device name */ if ((main_opts.flags & (1 << HCID_SET_NAME)) && main_opts.name) { change_local_name_cp cp; @@ -432,6 +406,7 @@ static void configure_device(int dev_id) static void init_device(int dev_id) { + struct hci_dev_req dr; struct hci_dev_info di; pid_t pid; int dd; @@ -457,6 +432,23 @@ static void init_device(int dev_id) exit(1); } + memset(&dr, 0, sizeof(dr)); + dr.dev_id = dev_id; + + /* Set link mode */ + dr.dev_opt = main_opts.link_mode; + if (ioctl(dd, HCISETLINKMODE, (unsigned long) &dr) < 0) { + error("Can't set link mode on hci%d: %s (%d)", + dev_id, strerror(errno), errno); + } + + /* Set link policy */ + dr.dev_opt = main_opts.link_policy; + if (ioctl(dd, HCISETLINKPOL, (unsigned long) &dr) < 0) { + error("Can't set link policy on hci%d: %s (%d)", + dev_id, strerror(errno), errno); + } + /* Start HCI device */ if (ioctl(dd, HCIDEVUP, dev_id) < 0 && errno != EALREADY) { error("Can't init device hci%d: %s (%d)", |