@@ -321,8 +321,7 @@ STATIC mp_obj_t bluetooth_ble_config(size_t n_args, const mp_obj_t *args, mp_map
321
321
case MP_QSTR_gap_name : {
322
322
mp_buffer_info_t bufinfo ;
323
323
mp_get_buffer_raise (e -> value , & bufinfo , MP_BUFFER_READ );
324
- int ret = mp_bluetooth_gap_set_device_name (bufinfo .buf , bufinfo .len );
325
- bluetooth_handle_errno (ret );
324
+ bluetooth_handle_errno (mp_bluetooth_gap_set_device_name (bufinfo .buf , bufinfo .len ));
326
325
break ;
327
326
}
328
327
case MP_QSTR_rxbuf : {
@@ -663,17 +662,25 @@ STATIC mp_obj_t bluetooth_ble_gatts_notify(size_t n_args, const mp_obj_t *args)
663
662
if (n_args == 4 ) {
664
663
mp_buffer_info_t bufinfo = {0 };
665
664
mp_get_buffer_raise (args [3 ], & bufinfo , MP_BUFFER_READ );
666
- size_t len = bufinfo .len ;
667
- int err = mp_bluetooth_gatts_notify_send (conn_handle , value_handle , bufinfo .buf , & len );
665
+ int err = mp_bluetooth_gatts_notify_send (conn_handle , value_handle , bufinfo .buf , bufinfo .len );
668
666
bluetooth_handle_errno (err );
669
- return MP_OBJ_NEW_SMALL_INT ( len ) ;
667
+ return mp_const_none ;
670
668
} else {
671
669
int err = mp_bluetooth_gatts_notify (conn_handle , value_handle );
672
670
return bluetooth_handle_errno (err );
673
671
}
674
672
}
675
673
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (bluetooth_ble_gatts_notify_obj , 3 , 4 , bluetooth_ble_gatts_notify );
676
674
675
+ STATIC mp_obj_t bluetooth_ble_gatts_indicate (mp_obj_t self_in , mp_obj_t conn_handle_in , mp_obj_t value_handle_in ) {
676
+ mp_int_t conn_handle = mp_obj_get_int (conn_handle_in );
677
+ mp_int_t value_handle = mp_obj_get_int (value_handle_in );
678
+
679
+ int err = mp_bluetooth_gatts_indicate (conn_handle , value_handle );
680
+ return bluetooth_handle_errno (err );
681
+ }
682
+ STATIC MP_DEFINE_CONST_FUN_OBJ_3 (bluetooth_ble_gatts_indicate_obj , bluetooth_ble_gatts_indicate );
683
+
677
684
STATIC mp_obj_t bluetooth_ble_gatts_set_buffer (size_t n_args , const mp_obj_t * args ) {
678
685
mp_int_t value_handle = mp_obj_get_int (args [1 ]);
679
686
mp_int_t len = mp_obj_get_int (args [2 ]);
@@ -765,6 +772,7 @@ STATIC const mp_rom_map_elem_t bluetooth_ble_locals_dict_table[] = {
765
772
{ MP_ROM_QSTR (MP_QSTR_gatts_read ), MP_ROM_PTR (& bluetooth_ble_gatts_read_obj ) },
766
773
{ MP_ROM_QSTR (MP_QSTR_gatts_write ), MP_ROM_PTR (& bluetooth_ble_gatts_write_obj ) },
767
774
{ MP_ROM_QSTR (MP_QSTR_gatts_notify ), MP_ROM_PTR (& bluetooth_ble_gatts_notify_obj ) },
775
+ { MP_ROM_QSTR (MP_QSTR_gatts_indicate ), MP_ROM_PTR (& bluetooth_ble_gatts_indicate_obj ) },
768
776
{ MP_ROM_QSTR (MP_QSTR_gatts_set_buffer ), MP_ROM_PTR (& bluetooth_ble_gatts_set_buffer_obj ) },
769
777
#if MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
770
778
// GATT Client (i.e. central/scanner role)
@@ -1147,47 +1155,58 @@ mp_bluetooth_gatts_db_entry_t *mp_bluetooth_gatts_db_lookup(mp_gatts_db_t db, ui
1147
1155
}
1148
1156
1149
1157
int mp_bluetooth_gatts_db_read (mp_gatts_db_t db , uint16_t handle , uint8_t * * value , size_t * value_len ) {
1158
+ MICROPY_PY_BLUETOOTH_ENTER
1150
1159
mp_bluetooth_gatts_db_entry_t * entry = mp_bluetooth_gatts_db_lookup (db , handle );
1151
- if (!entry ) {
1152
- return MP_EINVAL ;
1153
- }
1154
-
1155
- * value = entry -> data ;
1156
- * value_len = entry -> data_len ;
1157
- if (entry -> append ) {
1158
- entry -> data_len = 0 ;
1160
+ if (entry ) {
1161
+ * value = entry -> data ;
1162
+ * value_len = entry -> data_len ;
1163
+ if (entry -> append ) {
1164
+ entry -> data_len = 0 ;
1165
+ }
1159
1166
}
1160
-
1161
- return 0 ;
1167
+ MICROPY_PY_BLUETOOTH_EXIT
1168
+ return entry ? 0 : MP_EINVAL ;
1162
1169
}
1163
1170
1164
1171
int mp_bluetooth_gatts_db_write (mp_gatts_db_t db , uint16_t handle , const uint8_t * value , size_t value_len ) {
1172
+ MICROPY_PY_BLUETOOTH_ENTER
1165
1173
mp_bluetooth_gatts_db_entry_t * entry = mp_bluetooth_gatts_db_lookup (db , handle );
1166
- if (!entry ) {
1167
- return MP_EINVAL ;
1168
- }
1174
+ if (entry ) {
1175
+ if (value_len > entry -> data_alloc ) {
1176
+ uint8_t * data = m_new_maybe (uint8_t , value_len );
1177
+ if (data ) {
1178
+ entry -> data = data ;
1179
+ entry -> data_alloc = value_len ;
1180
+ } else {
1181
+ MICROPY_PY_BLUETOOTH_EXIT
1182
+ return MP_ENOMEM ;
1183
+ }
1184
+ }
1169
1185
1170
- if (value_len > entry -> data_alloc ) {
1171
- entry -> data = m_new (uint8_t , value_len );
1172
- entry -> data_alloc = value_len ;
1186
+ memcpy (entry -> data , value , value_len );
1187
+ entry -> data_len = value_len ;
1173
1188
}
1174
-
1175
- memcpy (entry -> data , value , value_len );
1176
- entry -> data_len = value_len ;
1177
-
1178
- return 0 ;
1189
+ MICROPY_PY_BLUETOOTH_EXIT
1190
+ return entry ? 0 : MP_EINVAL ;
1179
1191
}
1180
1192
1181
1193
int mp_bluetooth_gatts_db_resize (mp_gatts_db_t db , uint16_t handle , size_t len , bool append ) {
1194
+ MICROPY_PY_BLUETOOTH_ENTER
1182
1195
mp_bluetooth_gatts_db_entry_t * entry = mp_bluetooth_gatts_db_lookup (db , handle );
1183
- if (!entry ) {
1184
- return MP_EINVAL ;
1196
+ if (entry ) {
1197
+ uint8_t * data = m_renew_maybe (uint8_t , entry -> data , entry -> data_alloc , len , true);
1198
+ if (data ) {
1199
+ entry -> data = data ;
1200
+ entry -> data_alloc = len ;
1201
+ entry -> data_len = 0 ;
1202
+ entry -> append = append ;
1203
+ } else {
1204
+ MICROPY_PY_BLUETOOTH_EXIT
1205
+ return MP_ENOMEM ;
1206
+ }
1185
1207
}
1186
- entry -> data = m_renew (uint8_t , entry -> data , entry -> data_alloc , len );
1187
- entry -> data_alloc = len ;
1188
- entry -> data_len = 0 ;
1189
- entry -> append = append ;
1190
- return 0 ;
1208
+ MICROPY_PY_BLUETOOTH_EXIT
1209
+ return entry ? 0 : MP_EINVAL ;
1191
1210
}
1192
1211
1193
1212
#endif // MICROPY_PY_BLUETOOTH
0 commit comments