During bluepy-scratch-link handles requests from Scratch, it throws away
notifications from BLE devices. This loses those notifications.
Not to lose the notifications, introduce a queue to keep notifications
from BLE devices. Once request handling completes, flush the
notifications kept in the queue.
The value 'startNotification' is optional for the "read" request.
However, bluepy-scratch-link expects Scratch always set the value in the
requests. This may cause KeyError.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
In the GitHub issue "Scratux support #9", debug message log was required
for analysis. However, script edit by users was required to enable debug
print. This is not handy.
To avoid that the chore by users, add -d debug print option.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
In the GitHub issue "Scratux support #9", it was noticed that
bluepy-scratch-link is not so informative to tell what is happening.
Especially when BLE controllers or BLE devices are not available, no
information is printed.
Enrich log information so that users can tell what is happening easier.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
With previous commit, gencert.sh automatically add the certificate to
FireFox or Chrome using certutil command. Blupy-scratch-link users no
need to allow the certificate explicitly.
Also add NSS to the required package list to install, which includes the
certutil command.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
As of today, bluepy-scratch-link users need to do special action to allow
local server certificates. This is trouble some and James Le Cuirot
suggested to automate the action with certutil tools
To avoid the user action, check if NSS DB of FireFox or Chrome exists. If
NSS DBs exist, add the certificate to those DBs.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
Now gencert.sh generates private key and certificate for the Secure WSS
server in a single file. This is not good to automate certification
addition to NSS databases. Generate them separately into two files and
initialize the Secure WSS server specifying them.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
To have new line after list items with numbers, the list item needs
period following empty line.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
The command lines to generate certificate file for web server are
troublesome and their parameters confuse users. To clean up the steps per
James Le Cuirot suggestions, simplify openssl options and bash commands
in the generation script and README.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
Added "Confirmed devices and distros" section to clarify who confirmed
with which device or distros bluepy-scratch-link working well. Remove
trailing white spaces. Modified git repo URL for installation.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
LEGO Boost communicates with a Scratch extension through Scratch-link.
It was reported that bluepy-scratch-link fails to connect to LEGO Boost.
LEGO Boost advertises adtype 0x7 "Complete List of 128-bit Service Class
UUIDs". However, bluepy-scratch-link checks only adtype 0x3 "Complete
List of 16-bit Service Class UUIDs" which is valid for micro:bit.
To allow bluepy-scratch-link, check both adtypes 0x7 and 0x3. Introduce
constants to note those two adtype values.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
As ngammarano reported in a GitHub issue, Chrome browser has bypass key
sequence to allow local server certificate. Add that description to
README.md merging jazzpecq's patch. Thank goes to the two :)
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
Clarify license of the bluepy-scratch-link script so that those who caring about licenses can take a look in the script code. I chose BSD 3-Clause "New" or "Revised" license, which is same as scratch-link to seek for the opportunity to get integrated into scratch-link, if possible.
It was reported that the bluepy-scratch-link does not run on Ubuntu 16.04
which has python version 3.5. The script stopped with an error about
f-format string, which was introduce with python 3.6.
Even removing f-format string from the script, bluepy-scratch-link still
requires python 3.6 because websockets module requires it. Clarify that
python version requirement to avoid confusion.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
Described why this script was written. Wrote down installation and usage
guide. Confirmed the guide with elementary os 5.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
Implemented Scratch-link[1] feature as a small python script. Confirmed
it is working with Scratch 3.0[2] using a micro:bit as the BLE device to
link. This allows Linux PCs to connect Scratch and micro:bit.
Utilized bluez[3] and bluepy[4] to handle Bluetooth Low Energy connection.
Utilized Websocket module for Secure Web Socket server.
[1] https://github.com/LLK/scratch-link
[2] https://scratch.mit.edu/
[3] http://www.bluez.org/
[4] https://github.com/IanHarvey/bluepy
This is a minimal implementation to support micro:bit. Some of
Scratch-link features are not implemented. For example, Bluetooth (not
BLE) devices are not supported. BLE device support is confirmed only with
micro:bit.
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>