mirror of
https://github.com/kawasaki/pyscrlink.git
synced 2025-09-05 17:20:20 +02:00
scratch_link.py: Add -s option to specify BLE scan duration
Pyscrlink scans BLE devices for 10 seconds. This is a safe number to cover various environments and devices. However, this is too long for specific devices. One example is toio. Toio's Visual Programming environment has automated connection to toio devices via Scratch-link, at it assumes that the scan finishes with shorter time. To allow users to specify shorter scan duration, add -s, or --scan_seconds option. To simplify this new option support, utilize argparse library. Rewrite option parser with argparse. Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
This commit is contained in:
@@ -15,6 +15,7 @@ import logging
|
|||||||
import sys
|
import sys
|
||||||
import signal
|
import signal
|
||||||
import traceback
|
import traceback
|
||||||
|
import argparse
|
||||||
|
|
||||||
# for Bluetooth (e.g. Lego EV3)
|
# for Bluetooth (e.g. Lego EV3)
|
||||||
import bluetooth
|
import bluetooth
|
||||||
@@ -44,6 +45,7 @@ logger.addHandler(handler)
|
|||||||
logger.propagate = False
|
logger.propagate = False
|
||||||
|
|
||||||
HOSTNAME="device-manager.scratch.mit.edu"
|
HOSTNAME="device-manager.scratch.mit.edu"
|
||||||
|
scan_seconds=10.0
|
||||||
|
|
||||||
class Session():
|
class Session():
|
||||||
"""Base class for BTSession and BLESession"""
|
"""Base class for BTSession and BLESession"""
|
||||||
@@ -495,6 +497,7 @@ class BLESession(Session):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _scan_devices(self, params):
|
def _scan_devices(self, params):
|
||||||
|
global scan_seconds
|
||||||
if BLESession.nr_connected > 0:
|
if BLESession.nr_connected > 0:
|
||||||
return len(BLESession.found_devices) > 0
|
return len(BLESession.found_devices) > 0
|
||||||
found = False
|
found = False
|
||||||
@@ -505,7 +508,8 @@ class BLESession(Session):
|
|||||||
for i in range(self.MAX_SCANNER_IF):
|
for i in range(self.MAX_SCANNER_IF):
|
||||||
scanner = Scanner(iface=i)
|
scanner = Scanner(iface=i)
|
||||||
try:
|
try:
|
||||||
devices = scanner.scan(10.0)
|
logger.debug(f"start BLE scan: {scan_seconds} seconds")
|
||||||
|
devices = scanner.scan(scan_seconds)
|
||||||
for dev in devices:
|
for dev in devices:
|
||||||
if self.matches(dev, params['filters']):
|
if self.matches(dev, params['filters']):
|
||||||
BLESession.found_devices.append(dev)
|
BLESession.found_devices.append(dev)
|
||||||
@@ -718,18 +722,20 @@ def stack_trace():
|
|||||||
print(line)
|
print(line)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
opts = [opt for opt in sys.argv[1:] if opt.startswith("-")]
|
global scan_seconds
|
||||||
if "-h" in opts:
|
parser = argparse.ArgumentParser(description='start Scratch-link')
|
||||||
print((f"Usage: {sys.argv[0]} [OPTS]\n"
|
parser.add_argument('-d', '--debug', action='store_true',
|
||||||
"OPTS:\t-h Show this help.\n"
|
help='print debug messages')
|
||||||
"\t-d Print debug messages."
|
parser.add_argument('-s', '--scan_seconds', type=float, default=10.0,
|
||||||
))
|
help='specifiy duration to scan BLE devices in seconds')
|
||||||
sys.exit(1)
|
args = parser.parse_args()
|
||||||
elif "-d" in opts:
|
if args.debug:
|
||||||
print("Print debug messages")
|
print("Print debug messages")
|
||||||
logLevel = logging.DEBUG
|
logLevel = logging.DEBUG
|
||||||
handler.setLevel(logLevel)
|
handler.setLevel(logLevel)
|
||||||
logger.setLevel(logLevel)
|
logger.setLevel(logLevel)
|
||||||
|
scan_seconds = args.scan_seconds
|
||||||
|
logger.debug(f"set scan_seconds: {scan_seconds}")
|
||||||
|
|
||||||
# Prepare certificate of the WSS server
|
# Prepare certificate of the WSS server
|
||||||
gencert.prep_cert()
|
gencert.prep_cert()
|
||||||
|
Reference in New Issue
Block a user