mirror of
https://github.com/kawasaki/pyscrlink.git
synced 2025-09-05 17:20:20 +02:00
scratch_link.py: Support COMPLETE_LOCAL_NAME for 'namePrefix' filter
Current implementation of match() does filter matching for 'namePrefix' keyword only for SHORT_LOCAL_NAME of the device. When the device does not provide SHORT_LOCAL_NAME but provides COMPLETE_LOCAL_NAME, match() for 'namePrefix' fails. For example, MicroBit More v2 [1] does not provide the SHORT_LOCAL_NAME. To support 'namePrefix' filter match with COMPLETE_LOCAL_NAME, add support for it. While at it, replace the SHORT_LOCAL_NAME identifier constant with the definition in btle.ScanEntry. [1] https://lab.yengawa.com/project/microbit-more-v2/ Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
This commit is contained in:
@@ -18,7 +18,7 @@ import traceback
|
|||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
# for BLESession (e.g. BBC micro:bit)
|
# for BLESession (e.g. BBC micro:bit)
|
||||||
from bluepy.btle import Scanner, UUID, Peripheral, DefaultDelegate
|
from bluepy.btle import Scanner, UUID, Peripheral, DefaultDelegate, ScanEntry
|
||||||
from bluepy.btle import BTLEDisconnectError, BTLEManagementError
|
from bluepy.btle import BTLEDisconnectError, BTLEManagementError
|
||||||
from pyscrlink import bluepy_helper_cap
|
from pyscrlink import bluepy_helper_cap
|
||||||
|
|
||||||
@@ -292,15 +292,19 @@ class BLESession(Session):
|
|||||||
logger.debug("match...")
|
logger.debug("match...")
|
||||||
return True
|
return True
|
||||||
if 'namePrefix' in f:
|
if 'namePrefix' in f:
|
||||||
# 0x08: Shortened Local Name
|
logger.debug(f"given namePrefix: {f['namePrefix']}")
|
||||||
deviceName = dev.getValueText(0x08)
|
deviceName = dev.getValueText(ScanEntry.SHORT_LOCAL_NAME)
|
||||||
if not deviceName:
|
if deviceName:
|
||||||
continue
|
logger.debug(f"SHORT_LOCAL_NAME: {deviceName}")
|
||||||
logger.debug(f"Name of \"{deviceName}\" begins with: \"{f['namePrefix']}\"?")
|
if deviceName.startswith(f['namePrefix']):
|
||||||
if(deviceName.startswith(f['namePrefix'])):
|
logger.debug(f"match...")
|
||||||
logger.debug("Yes")
|
return True
|
||||||
return True
|
deviceName = dev.getValueText(ScanEntry.COMPLETE_LOCAL_NAME)
|
||||||
logger.debug("No")
|
if deviceName:
|
||||||
|
logger.debug(f"COMPLETE_LOCAL_NAME: {deviceName}")
|
||||||
|
if deviceName.startswith(f['namePrefix']):
|
||||||
|
logger.debug(f"match...")
|
||||||
|
return True
|
||||||
if 'name' in f or 'manufactureData' in f:
|
if 'name' in f or 'manufactureData' in f:
|
||||||
logger.error("name/manufactureData filters not implemented")
|
logger.error("name/manufactureData filters not implemented")
|
||||||
# TODO: implement other filters defined:
|
# TODO: implement other filters defined:
|
||||||
|
Reference in New Issue
Block a user