6 Commits

Author SHA1 Message Date
Shin'ichiro Kawasaki
e6d63a5c97 Tag version 0.2.4
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-10-16 11:09:28 +09:00
Shin'ichiro Kawasaki
6f7da4f720 README.md: Add description about "-s 1" option for toio
For toio, it is recommended to add "-s 1" option to scratch_link
command. It reduces scan wait duration, and allows toio Do Visual
Programming to connect toio devices automatically. Document it for toio
users.

Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-10-16 11:09:28 +09:00
Shin'ichiro Kawasaki
32da72492f 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>
2021-10-10 15:32:06 +09:00
Shin'ichiro Kawasaki
1af4baa7d6 README.md: Clarify bluepy-helper capability setup requirement
@n3storm reported that it is not clear which device is BLE, and requires
bluepy-helper capability setup. Improve description to note that most of
devices require the setup since BLE devices are getting the majority.

Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-09-25 09:38:37 +09:00
Néstor Díaz Valencia
39587b497b Update README.md 2021-09-25 09:30:55 +09:00
Néstor Díaz Valencia
f506bbcaab Update README.md 2021-09-25 09:30:55 +09:00
3 changed files with 28 additions and 13 deletions

View File

@@ -42,7 +42,7 @@ Linux distros:
* elementary OS 5.1 Hera * elementary OS 5.1 Hera
Browsers: Browsers:
* FireFox * Firefox
* Chromium * Chromium
It was reported that pyscrlink (former bluepy-scratch-link) working with It was reported that pyscrlink (former bluepy-scratch-link) working with
@@ -51,7 +51,7 @@ following devices and Linux distros.
Devices: Devices:
* LEGO Mindstorm EV3 by @chrisglencross * LEGO Mindstorm EV3 by @chrisglencross
* LEGO WeDo by @zhaowe, @KingBBQ * LEGO WeDo by @zhaowe, @KingBBQ
* LEGO Boost by @laurentchar, @miguev, @jacquesdt * LEGO Boost and compatible devices by @laurentchar, @miguev, @jacquesdt, @n3storm
* Intelino Smart Train by @ErrorJan * Intelino Smart Train by @ErrorJan
* toio by @shimodash * toio by @shimodash
@@ -59,6 +59,7 @@ Linux distros:
* Raspbian by @chrisglencross * Raspbian by @chrisglencross
* Ubuntu 16.04 @jacquesdt * Ubuntu 16.04 @jacquesdt
* Ubuntu Studio 20.04 @miguev * Ubuntu Studio 20.04 @miguev
* Debian 11 @n3storm
Installation Installation
------------ ------------
@@ -87,7 +88,8 @@ Installation
$ pip3 install pyscrlink $ pip3 install pyscrlink
``` ```
4. For Bluetooth Low Energy (BLE) devices, set bluepy-helper capability. 4. Set bluepy-helper capability.
This step is required for most of devices except LEGO Mindstorm EV3.
``` ```
$ bluepy_helper_cap $ bluepy_helper_cap
@@ -159,6 +161,8 @@ Usage
```sh ```sh
$ scratch_link $ scratch_link
``` ```
If your device is toio, add "-s 1" option to the scratch_link command. It
allows the toio Do Visual Programming to connect to toio automatically.
3. Connect scratch to the target device such as micro:bit or LEGO Mindstorms: 3. Connect scratch to the target device such as micro:bit or LEGO Mindstorms:
* Open FireFox or Chrome. (Make sure to run as the same user for scratch-link python script.) * Open FireFox or Chrome. (Make sure to run as the same user for scratch-link python script.)
@@ -202,6 +206,11 @@ Please file issues to [GitHub issue tracker](https://github.com/kawasaki/pyscrli
Releases Releases
-------- --------
Release 0.2.4
* Added -s option to specify BLE scan duration
* Improved README.md
Release 0.2.3 Release 0.2.3
* Fixed eternal loop caused by hostname resolve failure * Fixed eternal loop caused by hostname resolve failure

View File

@@ -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()

View File

@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup( setuptools.setup(
name="pyscrlink", name="pyscrlink",
version="0.2.3", version="0.2.4",
author="Shin'ichiro Kawasaki", author="Shin'ichiro Kawasaki",
author_email='kawasaki@juno.dti.ne.jp', author_email='kawasaki@juno.dti.ne.jp',
description='Scratch-link for Linux with Python', description='Scratch-link for Linux with Python',