From 8c7cd9adcd2380f92dc1293f36fa5d8ba56fcf51 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Sat, 27 Jun 2020 21:40:34 +0200 Subject: [PATCH] feat(ble): pycardium support for scanning --- pycardium/modules/qstrdefs.h | 3 +++ pycardium/modules/sys_ble.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index eb52eba6b..d5039a5a9 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 34278be17..3ea10d5f6 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); -- GitLab