@@ -81,17 +81,45 @@ mp_obj_t ble_obj_address(void) {
81
81
return mac_str ;
82
82
}
83
83
84
+ /// \method address_set()
85
+ /// Set device address
86
+ mp_obj_t ble_obj_address_set (mp_obj_t ble_obj_address_set_obj ) {
87
+
88
+ mp_buffer_info_t bufinfo ;
89
+ mp_get_buffer_raise (ble_obj_address_set_obj , & bufinfo , MP_BUFFER_READ );
90
+
91
+ // Check if the buffer has at least 6 bytes
92
+ if (bufinfo .len != 6 ) {
93
+ mp_raise_ValueError (MP_ERROR_TEXT ("Not a valid MAC address" ));
94
+ return mp_const_none ;
95
+ }
96
+
97
+ ble_drv_addr_t new_ble_addr ;
98
+
99
+ // Manually copy the bytes from the buffer to the addr field
100
+ for (int i = 0 ; i < 6 ; i ++ ) {
101
+ new_ble_addr .addr [5 - i ] = ((uint8_t * )bufinfo .buf )[i ];
102
+ }
103
+
104
+ ble_drv_address_set (& new_ble_addr );
105
+
106
+ return mp_const_none ;
107
+ }
108
+
109
+
84
110
static MP_DEFINE_CONST_FUN_OBJ_0 (ble_obj_enable_obj , ble_obj_enable ) ;
85
111
static MP_DEFINE_CONST_FUN_OBJ_0 (ble_obj_disable_obj , ble_obj_disable ) ;
86
112
static MP_DEFINE_CONST_FUN_OBJ_0 (ble_obj_enabled_obj , ble_obj_enabled ) ;
87
113
static MP_DEFINE_CONST_FUN_OBJ_0 (ble_obj_address_obj , ble_obj_address ) ;
114
+ static MP_DEFINE_CONST_FUN_OBJ_1 (ble_obj_address_set_obj , ble_obj_address_set ) ;
88
115
89
116
static const mp_rom_map_elem_t ble_module_globals_table [] = {
90
117
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_ble ) },
91
118
{ MP_ROM_QSTR (MP_QSTR_enable ), MP_ROM_PTR (& ble_obj_enable_obj ) },
92
119
{ MP_ROM_QSTR (MP_QSTR_disable ), MP_ROM_PTR (& ble_obj_disable_obj ) },
93
120
{ MP_ROM_QSTR (MP_QSTR_enabled ), MP_ROM_PTR (& ble_obj_enabled_obj ) },
94
121
{ MP_ROM_QSTR (MP_QSTR_address ), MP_ROM_PTR (& ble_obj_address_obj ) },
122
+ { MP_ROM_QSTR (MP_QSTR_address_set ), MP_ROM_PTR (& ble_obj_address_set_obj ) },
95
123
};
96
124
97
125
0 commit comments