diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2010-12-23 14:38:52 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2010-12-23 14:38:52 +0200 |
commit | 27c58425af807521e618f29b08e7a99496aeda3b (patch) | |
tree | 204464f368e82a2c0dfe2da2d3f510ada291b9ce | |
parent | 8250668371587efe555d9383a8980f0893f85845 (diff) | |
download | bluez-27c58425af807521e618f29b08e7a99496aeda3b.tar.gz |
Change power_on & power_off adapter_ops callbacks to set_powered
The current idea is to have a single set_powered management command
which for the switching on case would leave the controller in a
non-connectable, non-pairable and non-discoverable state.
-rw-r--r-- | doc/mgmt-api.txt | 10 | ||||
-rw-r--r-- | lib/mgmt.h | 12 | ||||
-rw-r--r-- | plugins/hciops.c | 10 | ||||
-rw-r--r-- | plugins/mgmtops.c | 63 | ||||
-rw-r--r-- | src/adapter.c | 10 | ||||
-rw-r--r-- | src/adapter.h | 3 |
6 files changed, 40 insertions, 68 deletions
diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt index 34421eea8..b76549e49 100644 --- a/doc/mgmt-api.txt +++ b/doc/mgmt-api.txt @@ -76,14 +76,14 @@ Read Controller Information Command 0x02 802.11 (AMP) -Read Controller Statistics Command -================================== +Set Powered Command +=================== Command Code: 0x0005 Command Parameters: Controller_Index (2 Octets) - Return Paramters: Status (1 Octet) - Controller_Index (2 Octets) - .... + Powered (1 Octet) + Return Paramters: Controller_Index (2 Octets) + Read Tracing Buffer Size Command diff --git a/lib/mgmt.h b/lib/mgmt.h index cc1be34f8..aa8f1c8da 100644 --- a/lib/mgmt.h +++ b/lib/mgmt.h @@ -67,16 +67,10 @@ struct mgmt_rp_read_info { uint16_t hci_rev; } __packed; -#define MGMT_OP_POWER_ON 0x0005 -struct mgmt_cp_power_on { - uint16_t index; - uint8_t discoverable; - uint8_t pairable; -} __packed; - -#define MGMT_OP_POWER_OFF 0x0006 -struct mgmt_cp_power_off { +#define MGMT_OP_SET_POWERED 0x0005 +struct mgmt_cp_set_powered { uint16_t index; + uint8_t powered; } __packed; #define MGMT_EV_CMD_COMPLETE 0x0001 diff --git a/plugins/hciops.c b/plugins/hciops.c index be143e9c5..38ade5ebb 100644 --- a/plugins/hciops.c +++ b/plugins/hciops.c @@ -2452,12 +2452,15 @@ static void hciops_cleanup(void) } } -static int hciops_power_on(int index, gboolean discoverable) +static int hciops_set_powered(int index, gboolean powered) { struct dev_info *dev = &devs[index]; int err; - DBG("hci%d", index); + DBG("hci%d powered %d", index, powered); + + if (powered == FALSE) + return hciops_power_off(index); if (ioctl(dev->sk, HCIDEVUP, index) == 0) return 0; @@ -3164,8 +3167,7 @@ static int hciops_load_keys(int index, GSList *keys, gboolean debug_keys) static struct btd_adapter_ops hci_ops = { .setup = hciops_setup, .cleanup = hciops_cleanup, - .power_on = hciops_power_on, - .power_off = hciops_power_off, + .set_powered = hciops_set_powered, .set_connectable = hciops_set_connectable, .set_discoverable = hciops_set_discoverable, .set_pairable = hciops_set_pairable, diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c index a9c1b2f40..7dfd3d877 100644 --- a/plugins/mgmtops.c +++ b/plugins/mgmtops.c @@ -233,19 +233,32 @@ static void read_index_list_complete(int sk, void *buf, size_t len) } } -static int mgmt_power_off(int index) +static int mgmt_set_discoverable(int index, gboolean discoverable) { - char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_power_off)]; + DBG("index %d discoverable %d", index, discoverable); + return -ENOSYS; +} + +static int mgmt_set_pairable(int index, gboolean pairable) +{ + DBG("index %d pairable %d", index, pairable); + return -ENOSYS; +} + +static int mgmt_set_powered(int index, gboolean powered) +{ + char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_set_powered)]; struct mgmt_hdr *hdr = (void *) buf; - struct mgmt_cp_power_off *cp = (void *) &buf[sizeof(*hdr)]; + struct mgmt_cp_set_powered *cp = (void *) &buf[sizeof(*hdr)]; - DBG("index %d", index); + DBG("index %d powered %d", index, powered); memset(buf, 0, sizeof(buf)); - hdr->opcode = MGMT_OP_POWER_OFF; + hdr->opcode = MGMT_OP_SET_POWERED; hdr->len = htobs(sizeof(*cp)); cp->index = htobs(index); + cp->powered = powered; if (write(mgmt_sock, buf, sizeof(buf)) < 0) return -errno; @@ -253,18 +266,6 @@ static int mgmt_power_off(int index) return 0; } -static int mgmt_set_discoverable(int index, gboolean discoverable) -{ - DBG("index %d discoverable %d", index, discoverable); - return -ENOSYS; -} - -static int mgmt_set_pairable(int index, gboolean pairable) -{ - DBG("index %d pairable %d", index, pairable); - return -ENOSYS; -} - static void read_info_complete(int sk, void *buf, size_t len) { struct mgmt_rp_read_info *rp = buf; @@ -317,7 +318,7 @@ static void read_info_complete(int sk, void *buf, size_t len) btd_adapter_get_state(adapter, &mode, NULL, &pairable); if (mode == MODE_OFF) { - mgmt_power_off(index); + mgmt_set_powered(index, FALSE); return; } @@ -526,29 +527,6 @@ static void mgmt_cleanup(void) } } -static int mgmt_power_on(int index, gboolean discoverable) -{ - struct controller_info *info = &controllers[index]; - char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_power_on)]; - struct mgmt_hdr *hdr = (void *) buf; - struct mgmt_cp_power_on *cp = (void *) &buf[sizeof(*hdr)]; - - DBG("index %d discoverable %d", index, discoverable); - - memset(buf, 0, sizeof(buf)); - hdr->opcode = MGMT_OP_POWER_ON; - hdr->len = htobs(sizeof(*cp)); - - cp->index = htobs(index); - cp->discoverable = discoverable; - cp->pairable = info->pairable; - - if (write(mgmt_sock, buf, sizeof(buf)) < 0) - return -errno; - - return 0; -} - static int mgmt_set_connectable(int index, gboolean connectable) { DBG("index %d connectable %d", index, connectable); @@ -829,8 +807,7 @@ static int mgmt_load_keys(int index, GSList *keys, gboolean debug_keys) static struct btd_adapter_ops mgmt_ops = { .setup = mgmt_setup, .cleanup = mgmt_cleanup, - .power_on = mgmt_power_on, - .power_off = mgmt_power_off, + .set_powered = mgmt_set_powered, .set_connectable = mgmt_set_connectable, .set_discoverable = mgmt_set_discoverable, .set_pairable = mgmt_set_pairable, diff --git a/src/adapter.c b/src/adapter.c index ff1f0a472..69d3da093 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -459,7 +459,7 @@ static int set_mode(struct btd_adapter *adapter, uint8_t new_mode, discoverable = new_mode == MODE_DISCOVERABLE; if (!adapter->up && new_mode != MODE_OFF) { - err = adapter_ops->power_on(adapter->dev_id, discoverable); + err = adapter_ops->set_powered(adapter->dev_id, TRUE); if (err < 0) return err; @@ -467,7 +467,7 @@ static int set_mode(struct btd_adapter *adapter, uint8_t new_mode, } if (adapter->up && new_mode == MODE_OFF) { - err = adapter_ops->power_off(adapter->dev_id); + err = adapter_ops->set_powered(adapter->dev_id, FALSE); if (err < 0) return err; @@ -3318,7 +3318,7 @@ int btd_adapter_restore_powered(struct btd_adapter *adapter) discoverable = get_mode(&adapter->bdaddr, mode) == MODE_DISCOVERABLE; - return adapter_ops->power_on(adapter->dev_id, discoverable); + return adapter_ops->set_powered(adapter->dev_id, TRUE); } int btd_adapter_switch_online(struct btd_adapter *adapter) @@ -3333,7 +3333,7 @@ int btd_adapter_switch_online(struct btd_adapter *adapter) discoverable = get_mode(&adapter->bdaddr, "on") == MODE_DISCOVERABLE; - return adapter_ops->power_on(adapter->dev_id, discoverable); + return adapter_ops->set_powered(adapter->dev_id, TRUE); } int btd_adapter_switch_offline(struct btd_adapter *adapter) @@ -3344,7 +3344,7 @@ int btd_adapter_switch_offline(struct btd_adapter *adapter) if (!adapter->up) return 0; - return adapter_ops->power_off(adapter->dev_id); + return adapter_ops->set_powered(adapter->dev_id, FALSE); } int btd_register_adapter_ops(struct btd_adapter_ops *ops, gboolean priority) diff --git a/src/adapter.h b/src/adapter.h index ebbe633ab..ab8301105 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -199,8 +199,7 @@ typedef void (*bt_hci_result_t) (uint8_t status, gpointer user_data); struct btd_adapter_ops { int (*setup) (void); void (*cleanup) (void); - int (*power_on) (int index, gboolean powered); - int (*power_off) (int index); + int (*set_powered) (int index, gboolean powered); int (*set_connectable) (int index, gboolean connectable); int (*set_discoverable) (int index, gboolean discoverable); int (*set_pairable) (int index, gboolean pairable); |