* Progress towards: #1671: Close web socket before making a new one for hardware extensions.
* Always disconnect before scanning for new peripheral. Removing console logs.
* Removing unused test code.
* Use scratch locales internally, with adapter for polly
* Save and load text2pseech language
* Only localize default input to “speak” if in a supported language
* Beginning refactor: renaming 'device' to 'peripheral', shortening function names, reordering functions, etc.
* Continuing refactoring: renaming some functions to be more verbose in the runtime, adding JSDocs, etc.
* Changing 'device' to 'peripheral', etc.
* Changing 'session' to 'socket'.
* Fixing EV3 menus and menu arg validation, reordering functions, etc.
* Add _send, add some references to documentation, etc.
* Factored out _outputCommand and _inputCommand, renamed some enums, etc.
* Fixed _outputCommand, some other minor cleanup.
* Make _outputCommand and _inputCommand public.
* Added TODO.
* Renamed BLE UUID enums to be clearer.
* Change WeDo2 in comments to WeDo 2.0, etc.
* Changed some WeDo2Motor command names, cleaned up some JSDocs.
* Beginning a major EV3 refactor.
* WeDo2 formatting and comment changes.
* Motor refactoring in EV3: motorTurnClockwise and motorTurnCounterClockwise initial working state.
* Add reminders to possibly cast motor menu args in WeDo2.
* Continue to move motor commands in EV3 to EV3Motor class, don't create new EV3Motor on every poll cycle, etc.
* Factoring EV3 polling value commands, etc.
* Fixing EV3 motor power, position and button pressed, and some commenting, etc.
* Move EV3 motor position parsing to EV3Motor class, move directCommand and directCompoundCommand functions, some commenting, etc.
* Changed WeDo2 motor label enum name.
* Removed some EV3 motor functions that aren't needed, changed menu label enum names, moved some opcodes up to enums.
* Fixing comments and documentation.
* Some commenting.
* Adding further documentation and references to PDFs, changed reply check to be safer, etc.
* Some comment changes.
* Moving some functions around in EV3 and WeDo2 to match.
* Commenting, etc.
* Some renaming of session, etc.
* Fix stopAllMotors in EV3.
* Fixing clearing of motors in EV3.
* Some comment changes.
* Change runtime .extensions/registerExtension to .peripheralExtensions/registerPeripheralExtension.
* Renaming outputCommand/inputCommand to generateOutputCommand/generateInputCommand, etc.
* Moved motorCommandIDs to EV3Motor class, renamed directCommand to generateCommand, etc.
* Adding a reminder to rename something.
* JSDoc fix in EV3Motor class.
* Fixing microbit function name.
* Adding a todo item.
* Changing Ev3 menu formats to be backwards compatible, moving a BLE function up.
* Fixing EV3 ports again, and button pressed returning a boolean.
* Fixing menu value to be a string in EV3.
* Initial version of token bucket
* Add rateLimiter util
* Remove check for motor.isOn in stopAllMotors
* Fix unit test
* Fix unit test with stubbed timer, and cleanup
* Add comment
* Reduce WeDo rate limit to 20 sends/sec
* Move rate limit into a constant
* Stop button stops motors and tone even if rate limit exceeded
* Resolving #1492: No longer trying to make WeDo2 backwards compatible with Scratch Link API v1.0.
* Closing the socket on all BLE/BT errors.
* Adding BT disconnection.
* Fixing #1353: Stop button should stop EV3 beep sound.
* Fixing #1358: EV3 and Microbit: shouldn't send requests if not connected?.
* Fixing #1373: EV3 motor does not brake at the end of a motor command.
* Starting on #1491: use 'startNotifications' instead of 'read'. Still need to make backwards compatible.
* Fixing #1489: WeDo2 set light color block should wrap values to 0-100.
* Fixing #1488: WeDo2 should not clear LED light on stop button.
* Fixing to support negative LED light color inputs.
* Removing a binding.
* Using wrapClamp for inputHue for LED color block.
* Replace micro:bit block text with formatMessage calls
* Add l10n support to micro:bit block menus
* Remove A, B button translation, update some l10n descriptions
* Fix mismatched l10n description
* Adding WeDo2 connection/disconnection over Scratch Link BLE.
* Testing motor and LED output.
* Reading sensor attachment and registering for sensor notifications.
* Motor indexing.
* Some refactoring notes. Moving some functions around.
* Refactoring and enums.
* Removing some comments
* Fixing linting error.
* Fixing tilt reporter values and added stopAll bound to stop button to stop piezo, LED and motors.
* Add set voice block
* Store voice in custom state
* Use a regex to preserve punctuation in kitten language
* cleanup
* don’t re-use args
* add todo comment about locale
* Use voice Id strings and add puppy
* Cleanup and comments
* Use extension name “Text-to-Speech”
* Add issue link in comment