|
52 | 52 | #include "shared-bindings/_bleio/ScanEntry.h" |
53 | 53 | #include "shared-bindings/time/__init__.h" |
54 | 54 |
|
| 55 | +#if CIRCUITPY_DOTENV |
| 56 | +#include "shared-module/dotenv/__init__.h" |
| 57 | +#endif |
| 58 | + |
55 | 59 | #define BLE_MIN_CONN_INTERVAL MSEC_TO_UNITS(15, UNIT_0_625_MS) |
56 | 60 | #define BLE_MAX_CONN_INTERVAL MSEC_TO_UNITS(15, UNIT_0_625_MS) |
57 | 61 | #define BLE_SLAVE_LATENCY 0 |
@@ -329,18 +333,30 @@ STATIC void get_address(bleio_adapter_obj_t *self, ble_gap_addr_t *address) { |
329 | 333 | char default_ble_name[] = { 'C', 'I', 'R', 'C', 'U', 'I', 'T', 'P', 'Y', 0, 0, 0, 0, 0}; |
330 | 334 |
|
331 | 335 | STATIC void bleio_adapter_reset_name(bleio_adapter_obj_t *self) { |
332 | | - uint8_t len = sizeof(default_ble_name) - 1; |
| 336 | + // setup the default name |
| 337 | + ble_gap_addr_t addr; // local_address |
| 338 | + get_address(self, &addr); |
| 339 | + mp_int_t len = sizeof(default_ble_name) - 1; |
| 340 | + default_ble_name[len - 4] = nibble_to_hex_lower[addr.addr[1] >> 4 & 0xf]; |
| 341 | + default_ble_name[len - 3] = nibble_to_hex_lower[addr.addr[1] & 0xf]; |
| 342 | + default_ble_name[len - 2] = nibble_to_hex_lower[addr.addr[0] >> 4 & 0xf]; |
| 343 | + default_ble_name[len - 1] = nibble_to_hex_lower[addr.addr[0] & 0xf]; |
| 344 | + default_ble_name[len] = '\0'; // for now we add null for compatibility with C ASCIIZ strings |
333 | 345 |
|
334 | | - ble_gap_addr_t local_address; |
335 | | - get_address(self, &local_address); |
| 346 | + mp_int_t name_len = 0; |
336 | 347 |
|
337 | | - default_ble_name[len - 4] = nibble_to_hex_lower[local_address.addr[1] >> 4 & 0xf]; |
338 | | - default_ble_name[len - 3] = nibble_to_hex_lower[local_address.addr[1] & 0xf]; |
339 | | - default_ble_name[len - 2] = nibble_to_hex_lower[local_address.addr[0] >> 4 & 0xf]; |
340 | | - default_ble_name[len - 1] = nibble_to_hex_lower[local_address.addr[0] & 0xf]; |
341 | | - default_ble_name[len] = '\0'; // for now we add null for compatibility with C ASCIIZ strings |
| 348 | + #if CIRCUITPY_DOTENV |
| 349 | + char ble_name[32]; |
| 350 | + name_len = dotenv_get_key("/.env", "CIRCUITPY_BLE_NAME", ble_name, sizeof(ble_name) - 1); |
| 351 | + if (name_len > 0) { |
| 352 | + ble_name[name_len] = '\0'; |
| 353 | + common_hal_bleio_adapter_set_name(self, (char *)ble_name); |
| 354 | + } |
| 355 | + #endif |
342 | 356 |
|
343 | | - common_hal_bleio_adapter_set_name(self, (char *)default_ble_name); |
| 357 | + if (name_len <= 0) { |
| 358 | + common_hal_bleio_adapter_set_name(self, (char *)default_ble_name); |
| 359 | + } |
344 | 360 | } |
345 | 361 |
|
346 | 362 | static void bluetooth_adapter_background(void *data) { |
@@ -448,7 +464,11 @@ void common_hal_bleio_adapter_set_name(bleio_adapter_obj_t *self, const char *na |
448 | 464 | ble_gap_conn_sec_mode_t sec; |
449 | 465 | sec.lv = 0; |
450 | 466 | sec.sm = 0; |
451 | | - sd_ble_gap_device_name_set(&sec, (const uint8_t *)name, strlen(name)); |
| 467 | + uint16_t len = strlen(name); |
| 468 | + if (len > BLE_GAP_DEVNAME_MAX_LEN) { |
| 469 | + len = BLE_GAP_DEVNAME_MAX_LEN; |
| 470 | + } |
| 471 | + sd_ble_gap_device_name_set(&sec, (const uint8_t *)name, len); |
452 | 472 | } |
453 | 473 |
|
454 | 474 | STATIC uint32_t _update_identities(bool is_central) { |
|
0 commit comments