From 44951ee75e0ce9316b218a74a2149581616a2d53 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Tue, 22 Dec 2020 02:57:20 +0100 Subject: [PATCH] change(hid): Keep trying to type if queue is full --- pycardium/modules/py/ble_hid.py | 8 +++++++- pycardium/modules/sys_ble_hid.c | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pycardium/modules/py/ble_hid.py b/pycardium/modules/py/ble_hid.py index 9869f017b..3a1bcda03 100644 --- a/pycardium/modules/py/ble_hid.py +++ b/pycardium/modules/py/ble_hid.py @@ -1,4 +1,5 @@ import sys_ble_hid +import time class Report: @@ -8,7 +9,12 @@ class Report: self.usage = usage def send_report(self, data): - sys_ble_hid.send_report(self.report_id, data) + while True: + try: + sys_ble_hid.send_report(self.report_id, data) + break + except MemoryError: + time.sleep(0.1) # Reports as defined in the HID report map in epicardium/ble/hid.c diff --git a/pycardium/modules/sys_ble_hid.c b/pycardium/modules/sys_ble_hid.c index 47e0228ab..f7cf77f48 100644 --- a/pycardium/modules/sys_ble_hid.c +++ b/pycardium/modules/sys_ble_hid.c @@ -12,6 +12,15 @@ static mp_obj_t mp_sys_ble_hid_send_report(mp_obj_t report_id, mp_obj_t data) int ret = epic_ble_hid_send_report( mp_obj_get_int(report_id), bufinfo.buf, bufinfo.len ); + + if (ret == -EAGAIN) { + mp_raise_msg(&mp_type_MemoryError, NULL); + } + + if (ret < 0) { + mp_raise_OSError(-ret); + } + return mp_obj_new_int(ret); } static MP_DEFINE_CONST_FUN_OBJ_2( -- GitLab