diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index eb52eba6bb0334b3c02ef5857b64d7c86cf58800..d5039a5a90a28d144b1f05139de0001eae9758ce 100644 --- a/pycardium/modules/qstrdefs.h +++ b/pycardium/modules/qstrdefs.h @@ -199,11 +199,14 @@ Q(get_string) Q(BLE) Q(ble) Q(get_compare_value) +Q(get_scan_report) Q(confirm_compare_value) Q(set_bondable) +Q(scan_start) Q(get_event) Q(EVENT_NONE) Q(EVENT_HANDLE_NUMERIC_COMPARISON) Q(EVENT_PAIRING_COMPLETE) Q(EVENT_PAIRING_FAILED) +Q(EVENT_SCAN_REPORT) diff --git a/pycardium/modules/sys_ble.c b/pycardium/modules/sys_ble.c index 34278be17cb7916d7500bbd63ba5b27dbd2c3b0f..3ea10d5f63cfb5298739b4d0952da095f7b3276f 100644 --- a/pycardium/modules/sys_ble.c +++ b/pycardium/modules/sys_ble.c @@ -24,6 +24,29 @@ static MP_DEFINE_CONST_FUN_OBJ_0( ble_get_compare_value_obj, mp_ble_get_compare_value ); +static mp_obj_t mp_ble_get_scan_report(void) +{ + struct epic_scan_report scan_report; + int ret = epic_ble_get_scan_report(&scan_report); + + if (ret < 0) { + return mp_const_none; + } + + mp_obj_t data = mp_obj_new_bytes(scan_report.data, scan_report.len); + mp_obj_t rssi = MP_OBJ_NEW_SMALL_INT(scan_report.rssi); + mp_obj_t eventType = MP_OBJ_NEW_SMALL_INT(scan_report.eventType); + mp_obj_t addrType = MP_OBJ_NEW_SMALL_INT(scan_report.addrType); + mp_obj_t addr = mp_obj_new_bytes(scan_report.addr, 6); + + mp_obj_t values_list[] = { data, rssi, eventType, addrType, addr }; + return mp_obj_new_tuple(5, values_list); +} + +static MP_DEFINE_CONST_FUN_OBJ_0( + ble_get_scan_report_obj, mp_ble_get_scan_report +); + static mp_obj_t mp_ble_get_event(void) { return mp_obj_new_int(epic_ble_get_event()); @@ -38,15 +61,25 @@ static mp_obj_t mp_ble_set_bondable(mp_obj_t bondable_obj) } static MP_DEFINE_CONST_FUN_OBJ_1(ble_set_bondable_obj, mp_ble_set_bondable); +static mp_obj_t mp_ble_scan_start() +{ + epic_ble_set_mode(false, true); + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_0(ble_scan_start_obj, mp_ble_scan_start); + static const mp_rom_map_elem_t ble_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sys_ble) }, { MP_ROM_QSTR(MP_QSTR_confirm_compare_value), MP_ROM_PTR(&ble_confirm_compare_value_obj) }, { MP_ROM_QSTR(MP_QSTR_get_compare_value), MP_ROM_PTR(&ble_get_compare_value_obj) }, + { MP_ROM_QSTR(MP_QSTR_get_scan_report), + MP_ROM_PTR(&ble_get_scan_report_obj) }, { MP_ROM_QSTR(MP_QSTR_get_event), MP_ROM_PTR(&ble_get_event_obj) }, { MP_ROM_QSTR(MP_QSTR_set_bondable), MP_ROM_PTR(&ble_set_bondable_obj) }, + { MP_ROM_QSTR(MP_QSTR_scan_start), MP_ROM_PTR(&ble_scan_start_obj) }, /* Event Numbers */ { MP_ROM_QSTR(MP_QSTR_EVENT_NONE), @@ -57,6 +90,8 @@ static const mp_rom_map_elem_t ble_module_globals_table[] = { MP_OBJ_NEW_SMALL_INT(BLE_EVENT_PAIRING_FAILED) }, { MP_ROM_QSTR(MP_QSTR_EVENT_PAIRING_COMPLETE), MP_OBJ_NEW_SMALL_INT(BLE_EVENT_PAIRING_COMPLETE) }, + { MP_ROM_QSTR(MP_QSTR_EVENT_SCAN_REPORT), + MP_OBJ_NEW_SMALL_INT(BLE_EVENT_SCAN_REPORT) }, }; static MP_DEFINE_CONST_DICT(ble_module_globals, ble_module_globals_table);