BLESession: Refactor cached characteristics handling

To improve readability a bit, introduce _get_characteristic_cached().
Added some failure handlings in the method for robustness.
Also rename _get_all_characteristics() to _cache_characteristics() for
simplification.

Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
This commit is contained in:
Shin'ichiro Kawasaki
2020-12-19 11:43:45 +09:00
parent 73523120b9
commit 1e7f81906e

View File

@@ -491,12 +491,24 @@ class BLESession(Session):
charas = self.perip.getCharacteristics(uuid=chara_id)
return charas[0]
def _get_all_characteristics(self):
def _cache_characteristics(self):
if not self.perip:
return
with self.lock:
self.characteristics_cache = self.perip.getCharacteristics()
if not self.characteristics_cache:
logger.debug("Characteristics are not cached")
def _get_characteristic_cached(self, chara_id):
if not self.perip:
return None
with self.lock:
characteristics = self.perip.getCharacteristics()
return characteristics
if not self.characteristics_cache:
self._cache_characteristics()
if self.characteristics_cache:
for characteristic in self.characteristics_cache:
if characteristic.uuid == chara_id:
return characteristic
return _get_characteristic(chara_id)
def handle_request(self, method, params):
"""Handle requests from Scratch"""
@@ -566,7 +578,7 @@ class BLESession(Session):
self.status = self.CONNECTED
self.delegate = self.BLEDelegate(self)
self.perip.withDelegate(self.delegate)
self.characteristics_cache = self._get_all_characteristics()
self._cache_characteristics()
else:
err_msg = f"BLE connect failed: {self.deviceName}"
res["error"] = { "message": err_msg }
@@ -604,11 +616,7 @@ class BLESession(Session):
logger.debug("handle write request")
service_id = params['serviceId']
chara_id = params['characteristicId']
c = None
for characteristic in self.characteristics_cache:
if characteristic.uuid == chara_id:
c = characteristic
break
c = self._get_characteristic_cached(chara_id)
if not c or c.uuid != UUID(chara_id):
logger.error(f"Failed to get characteristic {chara_id}")
self.status = self.DONE