summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYihui Xiong <yihui.xiong@hotmail.com>2020-08-14 17:48:15 +0800
committerYihui Xiong <yihui.xiong@hotmail.com>2020-08-14 17:48:15 +0800
commit52990a332d602db17564ae3b1d27444f25f4531e (patch)
tree9eabf050f1cf6465d5365e6347137c1a6de9b861
parente7da652711f8d7ccdffce1a4da2a25aaf61ae150 (diff)
fix
-rw-r--r--ports/nrf/common-hal/_bleio/Adapter.c12
-rw-r--r--shared-bindings/_bleio/Adapter.c4
-rw-r--r--shared-bindings/_bleio/Adapter.h2
3 files changed, 11 insertions, 7 deletions
diff --git a/ports/nrf/common-hal/_bleio/Adapter.c b/ports/nrf/common-hal/_bleio/Adapter.c
index d34f5d287..6d6669c5e 100644
--- a/ports/nrf/common-hal/_bleio/Adapter.c
+++ b/ports/nrf/common-hal/_bleio/Adapter.c
@@ -386,13 +386,15 @@ bleio_address_obj_t *common_hal_bleio_adapter_get_address(bleio_adapter_obj_t *s
return address;
}
-uint32_t common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, bleio_address_obj_t *address)
-{
+bool common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, bleio_address_obj_t *address) {
ble_gap_addr_t local_address;
+ mp_buffer_info_t bufinfo;
+ if (!mp_get_buffer(address->bytes, &bufinfo, MP_BUFFER_READ)) {
+ return false;
+ }
local_address.addr_type = address->type;
- const char *data = mp_obj_str_get_str(address->bytes);
- memcpy(local_address.addr, data, NUM_BLEIO_ADDRESS_BYTES);
- return sd_ble_gap_addr_set(&local_address);
+ memcpy(local_address.addr, bufinfo.buf, NUM_BLEIO_ADDRESS_BYTES);
+ return sd_ble_gap_addr_set(&local_address) == NRF_SUCCESS;
}
mp_obj_str_t* common_hal_bleio_adapter_get_name(bleio_adapter_obj_t *self) {
diff --git a/shared-bindings/_bleio/Adapter.c b/shared-bindings/_bleio/Adapter.c
index 861b640b5..3ffe65be3 100644
--- a/shared-bindings/_bleio/Adapter.c
+++ b/shared-bindings/_bleio/Adapter.c
@@ -105,7 +105,9 @@ STATIC mp_obj_t bleio_adapter_get_address(mp_obj_t self) {
MP_DEFINE_CONST_FUN_OBJ_1(bleio_adapter_get_address_obj, bleio_adapter_get_address);
STATIC mp_obj_t bleio_adapter_set_address(mp_obj_t self, mp_obj_t new_address) {
- common_hal_bleio_adapter_set_address(self, new_address);
+ if (!common_hal_bleio_adapter_set_address(self, new_address)) {
+ mp_raise_bleio_BluetoothError(translate("Could not set address"));
+ }
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(bleio_adapter_set_address_obj, bleio_adapter_set_address);
diff --git a/shared-bindings/_bleio/Adapter.h b/shared-bindings/_bleio/Adapter.h
index ad84bf9aa..352373357 100644
--- a/shared-bindings/_bleio/Adapter.h
+++ b/shared-bindings/_bleio/Adapter.h
@@ -42,7 +42,7 @@ extern bool common_hal_bleio_adapter_get_enabled(bleio_adapter_obj_t *self);
extern void common_hal_bleio_adapter_set_enabled(bleio_adapter_obj_t *self, bool enabled);
extern bool common_hal_bleio_adapter_get_connected(bleio_adapter_obj_t *self);
extern bleio_address_obj_t *common_hal_bleio_adapter_get_address(bleio_adapter_obj_t *self);
-extern uint32_t common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, bleio_address_obj_t *address);
+extern bool common_hal_bleio_adapter_set_address(bleio_adapter_obj_t *self, bleio_address_obj_t *address);
extern mp_obj_str_t* common_hal_bleio_adapter_get_name(bleio_adapter_obj_t *self);
extern void common_hal_bleio_adapter_set_name(bleio_adapter_obj_t *self, const char* name);