Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No winnus error with no access #4

Conversation

OwenBrotherwood
Copy link
Contributor

Fixes: espruino/EspruinoTools#57

Impementation:
Very simple test of var paths = winnus.getDevicePaths(); to ensure that winnus is truly active.

@gfwilliams
Copy link
Member

Did you see my comment about if (paths.length === 'undefined') {? I don't believe that code will work.

@OwenBrotherwood
Copy link
Contributor Author

Sorry: didn't see the comment
javascript and undefined caused me a lot of googling, it is allways "interesting" with undefined !null etc in javascript.
In the end, I felt it best to do a head up and push the code that worked ie tested with and without a bluetooth available to winnus.


Bluetooth adapter available
image

Bluetooth adapter NOT available: "Error: DevicePaths"
image

@gfwilliams
Copy link
Member

Huh, odd. All I can think is this is actually comparing to see if the length is 0 - in which case this will also fail if you don't have any available BLE devices found. Were you able to test that?

@OwenBrotherwood
Copy link
Contributor Author

Examine the two screen shots, taken one after the other.
First, shows bluetooth adapter between biometric and computer on the system map and result of hellowinusnode: sucess
The next, shows that the VM has started, taking ownership of the bluetooth and making inaccessible to windows, bluetooth adapter is not on the system map and the result of hellowinusnode: "Error: DevicePaths"

A simple setup to test the if statement.

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 22, 2017

Hmm, why isn't it on the PR: looking

It was a long night the other night doing the research :)

  innusnode\node_modules\winnus\winnus.js:11:11)
    at Object.<anonymous> (C:\source\repos\github\OwenBrotherwood\winnus\examples\hellowinnusnode\hellowinnus.js:12:20)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:418:7)
    at startup (bootstrap_node.js:139:9)

C:\source\repos\github\OwenBrotherwood\winnus\examples\hellowinnusnode>ls
README.md  hellowinnus.js  node_modules  package.json

C:\source\repos\github\OwenBrotherwood\winnus\examples\hellowinnusnode>more node_modules\winnus\winnus.js
const winnus = require('./build/Release/winnus');
var rxInterval;
var rxCallback;

exports.getDevices = function() {
  // Merge the 2 sets of data we have
  var names = winnus.getDeviceNames();
  var paths = winnus.getDevicePaths();
  var devices = [];
  if (typeof paths[0] === 'undefined') {
    throw new Error("DevicePaths");
  }

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 22, 2017

Multiple PR's with also some wip are no fun late at night.
Work checked with npm pack and npm install \source\npm\winnus-0.0.3.tgz


Let's get this Pulled as I have found other stuff that is "interesting" plus corrections to doc: I have too many branches to handle safely just now

@OwenBrotherwood
Copy link
Contributor Author

@gfwilliams I need this pulled.
It is a stopper for step by step improvements in:

  • doc
  • easy methods to create IDE
  • further tests of winnus, with WIP on hold as I need to ensure a good step by step progression to achieve what I had already noted a long time ago, puck.js is hard to connect to as you also found out in de.

Surrounding issues concerning pre NTDDI_WINBLUE

Possible interesting issues for pre NTDDI_WINBLUE need to be analysed to see if relevant for Espruino IDE
There are probably others, this one's title was very near this work concerning winnus
The issue concerns Linux and as such, is only included here to indicate that I would like to ensure Espruino IDE every success in npm dependancy hell.

My main concern when starting with Espruino was the IDE as it was impossible to create from source, learning curve and dependencies.
I have now worked the problem, with many side issues, and believe that the IDE can get to the next level very soon.
Note:
I love the EspruinoTools, and as such, it is the Tools that make the IDE "work": the IDE is just presenting the work of Tools and allowing for really cool things due to the excellent work done in Espruino project.

Yours very sincerely,
Owen Brotherwood

@gfwilliams
Copy link
Member

Is this tested when the adaptor is enabled but there are no Bluetooth devices available?

Also, is this tested on EspruinoTools/EspruinoWebIDE to see if it doesn't completely break them when no adaptor is available?

Because as far as I can see from the code, this will cause an exception in the Web IDE/EspruinoTools if no devices are found - which will crash it rather than causing it just to keep polling for more devices as it should.

So I can't pull this in, because it'll break every 'real' piece of code that uses it

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 23, 2017

The tests so far with EspruinoTools and IDE show, as far as I remember, no ports found as a result of the winnus alteration or just access to a usb dependant on test scenario


usb notes here as usb was the biggest issue and need to check my notes

node-usb/node-usb#162 (comment)

Basically, one get's to about this picture (note that this picture is after the one below as I am trying to document how to get usb to behave in the setup I have for Windows 10
At this stage I look at the usb DLL errors: until they are away, noble won't play and winnus neither.

image


  • various tests at each level before hitting the final pull together.

Pull altogether with sweet spot of nwjs SDK at intersection of node v7 and released nwjs to minimise gyp work reference https://nwjs.io/versions.json

Documentation:
IDE logs of NTDDI_WINBLUE installation with and without access to bluetooth adapter
Pre NTDDI_WINBLUE is also possible reuse of my own doc from work with noble/node-bluetooth-hci-socket#54

And probably some more issues along the way.


npm pack of all the gyp modules I remember seeing and EspurinoTools (espurino) from current repos with winnus-0.0.3

C:\source\npm>ls
bluetooth-hci-socket-0.5.2.tgz  espruino-0.0.32.tgz  noble-1.8.0.tgz  serialport-5.0.0-beta3.tgz  usb-1.2.2.tgz  winnus-0.0.3.tgz

An example of usb hell that I have to look into my note for: ie nw-gyp is probably required at this stage to fix up usb.
EspruinoWebIDE finished initialisation and gave the expected result

This is NOT a test of the winnus alteration, just a way I can now document the steps needed to achieve the IDE, followed by bluetooth available/unavailable to Windows based IDE

image

We have chrome.serial - not using 'serialport' module
'noble' module couldn't be loaded, no node.js Bluetooth Low Energy  Error: A dynamic link library (DLL) initialization routine failed. \\?\C:\source\repos\github\espruino\EspruinoWebIDE\node_modules\usb\src\binding\usb_bindings.node
'winnus' module not found, no Windows Bluetooth Low Energy Error: A dynamic link library (DLL) initialization routine failed. \\?\C:\source\repos\github\espruino\EspruinoWebIDE\node_modules\winnus\build\Release\winnus.node
serial_audio: Audio Sample rate : 44100
serial_audio: Audio Serial Baud 9600 Bit time 4.59375
No navigator.bluetooth - Web Bluetooth not enabled
GET chrome.storage.sync = undefined
Initialising SettingsConsole
Initialising Utils
Initialising Config
Initialising Notifications
Initialising Status
Initialising App
Initialising File
Initialising Code
Initialising Serial
  - Initialising Serial Chrome Serial
  - Initialising Serial Chrome Socket
  - Initialising Serial Audio

👎 node-usb/node-usb#169 (comment)


while usb/nw.js is in progress, I needed a little sucess with a non nw.js installation: ie pure node-gyp and no nw-gyp possible problems.

using a set of cherry picked cloned native repros, npm pack:

C:\source\npm>node --version
v7.5.0
C:\source\npm>dir
 Volume in drive C has no label.
 Volume Serial Number is 8295-A4B5

 Directory of C:\source\npm

23-02-2017  12:59    <DIR>          .
23-02-2017  12:59    <DIR>          ..
23-02-2017  11:23            26.944 bluetooth-hci-socket-0.5.2.tgz
23-02-2017  11:17           155.580 espruino-0.0.32.tgz
23-02-2017  11:22            65.698 noble-1.8.0.tgz
23-02-2017  12:18            48.312 serialport-5.0.0-beta3.tgz
23-02-2017  12:59           370.201 usb-1.2.2.tgz
22-02-2017  19:49             8.876 winnus-0.0.3.tgz
               6 File(s)        675.611 bytes
               2 Dir(s)  205.309.444.096 bytes free

Bluetooth available to NTDDI_WINBLUE

C:\source\repos\github\espruino\EspruinoTools>node bin\espruino-cli.js --verbose
0.0.32
Espruino Command-line Tool 0.0.32
-----------------------------------

Acorn library not found - you'll need it for compiled code
Found C:\source\repos\github\espruino\EspruinoTools/libs/targz.js
Found C:\source\repos\github\espruino\EspruinoTools/libs/utf8.js
Found C:\source\repos\github\espruino\EspruinoTools/espruino.js
Found C:\source\repos\github\espruino\EspruinoTools/core/codeWriter.js
Found C:\source\repos\github\espruino\EspruinoTools/core/config.js
Found C:\source\repos\github\espruino\EspruinoTools/core/env.js
Found C:\source\repos\github\espruino\EspruinoTools/core/flasher.js
Found C:\source\repos\github\espruino\EspruinoTools/core/modules.js
Found C:\source\repos\github\espruino\EspruinoTools/core/notifications.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_audio.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_chrome.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_noble.js
'noble' module couldn't be loaded, no node.js Bluetooth Low Energy
 { Error: LIBUSB_ERROR_NOT_SUPPORTED
    at Device.usb.Device.open (C:\source\repos\github\espruino\EspruinoTools\node_modules\usb\usb.js:33:7)
    at BluetoothHciSocket.bindUser (C:\source\repos\github\espruino\EspruinoTools\node_modules\bluetooth-hci-socket\lib\usb.js:81:19)
    at BluetoothHciSocket.bindRaw (C:\source\repos\github\espruino\EspruinoTools\node_modules\bluetooth-hci-socket\lib\usb.js:28:8)
    at Hci.init (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\hci-socket\hci.js:101:35)
    at NobleBindings.init (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\hci-socket\bindings.js:82:13)
    at new Noble (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\noble.js:50:18)
    at Object.<anonymous> (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\index.js:4:18)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32) errno: -12 }
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_nodeserial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_socket.js
No chrome.sockets - serial_socket disabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_websocket.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_web_bluetooth.js
No navigator.bluetooth - Web Bluetooth not enabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_winnus.js
Disable Web Bluetooth as we have Winnus instead
Found C:\source\repos\github\espruino\EspruinoTools/core/settingsAbout.js
Found C:\source\repos\github\espruino\EspruinoTools/core/status.js
Found C:\source\repos\github\espruino\EspruinoTools/core/terminal.js
Found C:\source\repos\github\espruino\EspruinoTools/core/utils.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/assembler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/boardJSON.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/compiler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/getGitHub.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/localModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/minify.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/npmModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/saveOnSend.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/setTime.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/uiMode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/unicode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/versionChecker.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/_examplePlugin.js
Initialising CodeWriter
Initialising Config
Initialising Env
Initialising Flasher
Initialising Modules
Initialising Notifications
Initialising Serial
  - Initialising Serial Node Serial
  - Initialising Serial Windows NUS BLE
Initialising SettingsAbout
Initialising Status
Initialising Utils
Initialising Assembler
Initialising BoardJSON
Initialising Compiler
Initialising GetGitHub
Initialising LocalModules
Initialising Minify
Initialising NPMModules
Initialising SaveOnSend
Initialising SetTime
Initialising UiMode
Initialising Unicode
Initialising VersionChecker
Initialising ExamplePlugin
Searching for serial ports...
PORTS:
  df:f5:a5:ec:43:1b (Puck.js 431b)
  COM3 (Microsoft)
Using first port, {"description":"Puck.js 431b","path":"df:f5:a5:ec:43:1b","type":"bluetooth"}
Connecting to 'df:f5:a5:ec:43:1b'
Connected {}
BT> Sending "\n"
Received a prompt after sending newline... good!
>>> Sending...
---> "\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
BT> Sending "\u0010console.log(\"<"
BT> Sending "\",\"<<\",JSON.str"
BT> Sending "ingify(process."
BT> Sending "env),\">>\",\">\")\n"
>>> Sent
Got "< << {\"VERSION\":\"1v91\",\"BUILD_DATE\":\"Jan 12 2017\",\"BUILD_TIME\":\"10:56:11\",\"GIT_COMMIT\":\"a6300790b771b7afffdb2bb2d8c5d0607f7977ef\",\"BOARD\":\"PUCKJS\",\"CHIP\":\"NRF52832\",\"CHIP_FAMILY\":\"NRF52\",\"FLASH\":524288,\"RAM\":65536,\"SERIAL\":\"aabca59d-3fd340e6\",\"CONSOLE\":\"Bluetooth\"} >> >\r\n>"
Loading http://www.espruino.com/json/PUCKJS.json
Connected
Board JSON loaded
Set Slow Write = true
FIRMWARE: Current 1v91, Available 1v91
BT> Sending "\r"

=undefined
>

No Bluetooth available to NTDDI_WINBLUE

C:\source\repos\github\espruino\EspruinoTools>node bin\espruino-cli.js --verbose
0.0.32
Espruino Command-line Tool 0.0.32
-----------------------------------

Acorn library not found - you'll need it for compiled code
Found C:\source\repos\github\espruino\EspruinoTools/libs/targz.js
Found C:\source\repos\github\espruino\EspruinoTools/libs/utf8.js
Found C:\source\repos\github\espruino\EspruinoTools/espruino.js
Found C:\source\repos\github\espruino\EspruinoTools/core/codeWriter.js
Found C:\source\repos\github\espruino\EspruinoTools/core/config.js
Found C:\source\repos\github\espruino\EspruinoTools/core/env.js
Found C:\source\repos\github\espruino\EspruinoTools/core/flasher.js
Found C:\source\repos\github\espruino\EspruinoTools/core/modules.js
Found C:\source\repos\github\espruino\EspruinoTools/core/notifications.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_audio.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_chrome.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_noble.js
'noble' module couldn't be loaded, no node.js Bluetooth Low Energy
 { Error: LIBUSB_ERROR_NOT_SUPPORTED
    at Device.usb.Device.open (C:\source\repos\github\espruino\EspruinoTools\node_modules\usb\usb.js:33:7)
    at BluetoothHciSocket.bindUser (C:\source\repos\github\espruino\EspruinoTools\node_modules\bluetooth-hci-socket\lib\usb.js:81:19)
    at BluetoothHciSocket.bindRaw (C:\source\repos\github\espruino\EspruinoTools\node_modules\bluetooth-hci-socket\lib\usb.js:28:8)
    at Hci.init (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\hci-socket\hci.js:101:35)
    at NobleBindings.init (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\hci-socket\bindings.js:82:13)
    at new Noble (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\lib\noble.js:50:18)
    at Object.<anonymous> (C:\source\repos\github\espruino\EspruinoTools\node_modules\noble\index.js:4:18)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32) errno: -12 }
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_nodeserial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_socket.js
No chrome.sockets - serial_socket disabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_websocket.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_web_bluetooth.js
No navigator.bluetooth - Web Bluetooth not enabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_winnus.js
Disable Web Bluetooth as we have Winnus instead
Found C:\source\repos\github\espruino\EspruinoTools/core/settingsAbout.js
Found C:\source\repos\github\espruino\EspruinoTools/core/status.js
Found C:\source\repos\github\espruino\EspruinoTools/core/terminal.js
Found C:\source\repos\github\espruino\EspruinoTools/core/utils.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/assembler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/boardJSON.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/compiler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/getGitHub.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/localModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/minify.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/npmModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/saveOnSend.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/setTime.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/uiMode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/unicode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/versionChecker.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/_examplePlugin.js
Initialising CodeWriter
Initialising Config
Initialising Env
Initialising Flasher
Initialising Modules
Initialising Notifications
Initialising Serial
  - Initialising Serial Node Serial
  - Initialising Serial Windows NUS BLE
Initialising SettingsAbout
Initialising Status
Initialising Utils
Initialising Assembler
Initialising BoardJSON
Initialising Compiler
Initialising GetGitHub
Initialising LocalModules
Initialising Minify
Initialising NPMModules
Initialising SaveOnSend
Initialising SetTime
Initialising UiMode
Initialising Unicode
Initialising VersionChecker
Initialising ExamplePlugin
Searching for serial ports...
PORTS:
  COM3 (Microsoft)
Using first port, {"path":"COM3","usb":[1199,null],"description":"Microsoft"}
Connecting to 'COM3'
Connected Ok
Got "\n"
No Prompt found, got "\n" - issuing Ctrl-C to try and break out
Splitting at "\u0003", delay 250
>>> Sending...
---> "\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
>>> Sent
No result found - just got "\u0003\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
Connected

Zadig on Windows 10 with npm installation of cherry picked git repros (tgz's) but NOT my winnus

  • this shows one issue I would like to go after winnus is finished: the result at the end of the following code
  • Note the lines for winnus
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_winnus.js
Disable Web Bluetooth as we have Winnus instead
C:\source\repos\github\espruino\EspruinoTools>node bin\espruino-cli.js -v
0.0.32
Espruino Command-line Tool 0.0.32
-----------------------------------

Acorn library not found - you'll need it for compiled code
Found C:\source\repos\github\espruino\EspruinoTools/libs/targz.js
Found C:\source\repos\github\espruino\EspruinoTools/libs/utf8.js
Found C:\source\repos\github\espruino\EspruinoTools/espruino.js
Found C:\source\repos\github\espruino\EspruinoTools/core/codeWriter.js
Found C:\source\repos\github\espruino\EspruinoTools/core/config.js
Found C:\source\repos\github\espruino\EspruinoTools/core/env.js
Found C:\source\repos\github\espruino\EspruinoTools/core/flasher.js
Found C:\source\repos\github\espruino\EspruinoTools/core/modules.js
Found C:\source\repos\github\espruino\EspruinoTools/core/notifications.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_audio.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_chrome.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_noble.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_nodeserial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_socket.js
No chrome.sockets - serial_socket disabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_websocket.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_web_bluetooth.js
No navigator.bluetooth - Web Bluetooth not enabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_winnus.js
Disable Web Bluetooth as we have Winnus instead
Found C:\source\repos\github\espruino\EspruinoTools/core/settingsAbout.js
Found C:\source\repos\github\espruino\EspruinoTools/core/status.js
Found C:\source\repos\github\espruino\EspruinoTools/core/terminal.js
Found C:\source\repos\github\espruino\EspruinoTools/core/utils.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/assembler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/boardJSON.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/compiler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/getGitHub.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/localModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/minify.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/npmModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/saveOnSend.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/setTime.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/uiMode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/unicode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/versionChecker.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/_examplePlugin.js
Initialising CodeWriter
Initialising Config
Initialising Env
Initialising Flasher
Initialising Modules
Initialising Notifications
Initialising Serial
  - Initialising Serial Noble
  - Initialising Serial Node Serial
  - Initialising Serial Windows NUS BLE
Initialising SettingsAbout
Initialising Status
Initialising Utils
Initialising Assembler
Initialising BoardJSON
Initialising Compiler
Initialising GetGitHub
Initialising LocalModules
Initialising Minify
Initialising NPMModules
Initialising SaveOnSend
Initialising SetTime
Initialising UiMode
Initialising Unicode
Initialising VersionChecker
Initialising ExamplePlugin
Searching for serial ports...
noble starting scan
PORTS:
  COM3 (Microsoft)
Using first port, {"path":"COM3","usb":[1199,null],"description":"Microsoft"}
Connecting to 'COM3'
Connected Ok
Found UART device: Puck.js 431b df:f5:a5:ec:43:1b
Got "\n"
No Prompt found, got "\n" - issuing Ctrl-C to try and break out
Splitting at "\u0003", delay 250
>>> Sending...
---> "\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
>>> Sent
No result found - just got "\u0003\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
Connected
Found device: MB 660 MS 00:16:94:17:f9:5c
                                                                               Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: MB 660 MS 00:16:94:17:f9:5c
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: MB 660 MS 00:16:94:17:f9:5c
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Found device: undefined 61:38:e0:be:ab:ae
Splitting at "\u0003", delay 250
�Found device: undefined 61:38:e0:be:ab:ae
Splitting at "\u0003", delay 250
�Splitting at "\u0003", delay 250
�Found device: undefined 61:38:e0:be:ab:ae
Found device: MB 660 MS 00:16:94:17:f9:5c
Splitting at "\u0003", delay 250

Zandig Windows 10 with cherry picked repos AND npm install \source\npm\winnus-0.0.3.tgz

What does this show?

  • well, it shows I have to double check the winnus code to why it didn't throw as no NTDDI_WINBLUE available and only Zandig. ie use the hellowinusnode.js example and "think" about what this all means.
C:\source\repos\github\espruino\EspruinoTools>node bin\espruino-cli.js -v
0.0.32
Espruino Command-line Tool 0.0.32
-----------------------------------

Acorn library not found - you'll need it for compiled code
Found C:\source\repos\github\espruino\EspruinoTools/libs/targz.js
Found C:\source\repos\github\espruino\EspruinoTools/libs/utf8.js
Found C:\source\repos\github\espruino\EspruinoTools/espruino.js
Found C:\source\repos\github\espruino\EspruinoTools/core/codeWriter.js
Found C:\source\repos\github\espruino\EspruinoTools/core/config.js
Found C:\source\repos\github\espruino\EspruinoTools/core/env.js
Found C:\source\repos\github\espruino\EspruinoTools/core/flasher.js
Found C:\source\repos\github\espruino\EspruinoTools/core/modules.js
Found C:\source\repos\github\espruino\EspruinoTools/core/notifications.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_audio.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_chrome.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_noble.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_nodeserial.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_socket.js
No chrome.sockets - serial_socket disabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_websocket.js
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_web_bluetooth.js
No navigator.bluetooth - Web Bluetooth not enabled
Found C:\source\repos\github\espruino\EspruinoTools/core/serial_winnus.js
Disable Web Bluetooth as we have Winnus instead
Found C:\source\repos\github\espruino\EspruinoTools/core/settingsAbout.js
Found C:\source\repos\github\espruino\EspruinoTools/core/status.js
Found C:\source\repos\github\espruino\EspruinoTools/core/terminal.js
Found C:\source\repos\github\espruino\EspruinoTools/core/utils.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/assembler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/boardJSON.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/compiler.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/getGitHub.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/localModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/minify.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/npmModules.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/saveOnSend.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/setTime.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/uiMode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/unicode.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/versionChecker.js
Found C:\source\repos\github\espruino\EspruinoTools/plugins/_examplePlugin.js
Initialising CodeWriter
Initialising Config
Initialising Env
Initialising Flasher
Initialising Modules
Initialising Notifications
Initialising Serial
  - Initialising Serial Noble
  - Initialising Serial Node Serial
  - Initialising Serial Windows NUS BLE
Initialising SettingsAbout
Initialising Status
Initialising Utils
Initialising Assembler
Initialising BoardJSON
Initialising Compiler
Initialising GetGitHub
Initialising LocalModules
Initialising Minify
Initialising NPMModules
Initialising SaveOnSend
Initialising SetTime
Initialising UiMode
Initialising Unicode
Initialising VersionChecker
Initialising ExamplePlugin
Searching for serial ports...
Error: DevicePaths
    at Object.exports.getDevices (C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\winnus.js:11:11)
    at Object.getPorts (eval at loadJS (C:\source\repos\github\espruino\EspruinoTools\index.js:10:10), <anonymous>:32:14)
    at eval (eval at loadJS (C:\source\repos\github\espruino\EspruinoTools\index.js:10:10), <anonymous>:52:14)
    at Array.forEach (native)
    at Object.getPorts (eval at loadJS (C:\source\repos\github\espruino\EspruinoTools\index.js:10:10), <anonymous>:51:13)
    at main (C:\source\repos\github\espruino\EspruinoTools\bin\espruino-cli.js:357:26)
    at Object.init (C:\source\repos\github\espruino\EspruinoTools\index.js:107:3)
    at Object.<anonymous> (C:\source\repos\github\espruino\EspruinoTools\bin\espruino-cli.js:386:24)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
PORTS:
  COM3 (Microsoft)
Using first port, {"path":"COM3","usb":[1199,null],"description":"Microsoft"}
Connecting to 'COM3'
Connected Ok
Got "\n"
No Prompt found, got "\n" - issuing Ctrl-C to try and break out
Splitting at "\u0003", delay 250
>>> Sending...
---> "\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
>>> Sent
No result found - just got "\u0003\u0010console.log(\"<\",\"<<\",JSON.stringify(process.env),\">>\",\">\")\n"
Connected

As the examples are part of the npm install \source\npm\winnus-0.0.3.tgz I can just hop into the directory for winnus examples and do an ordinary npm install to get the released winnus

C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode>npm install

> [email protected] install C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus
> node-gyp rebuild


C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus>if not defined npm_config_node_gyp (node "c:\nodejs\v7.5.0\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
  winnus.cpp
  win_delay_load_hook.cc
..\cpp\winnus.cpp(582): warning C4996: 'v8::String::NewFromOneByte': was declared deprecated [C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\winnus.vcxproj]
  c:\users\owen\.node-gyp\7.5.0\include\node\v8.h(2319): note: see declaration of 'v8::String::NewFromOneByte'
     Creating library C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\winnus.lib and object C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\e
  xamples\hellowinnusnode\node_modules\winnus\build\Release\winnus.exp
  Generating code
  Finished generating code
  winnus.vcxproj -> C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\\winnus.node
  winnus.vcxproj -> C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\winnus.pdb (Full PDB)
[email protected] C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode
`-- [email protected]


C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode>node hellowinnus.js
[]
undefined
Connect
TypeError: Cannot read property 'path' of undefined
    at Object.exports.connect (C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\winnus.js:34:24)
    at Object.<anonymous> (C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\hellowinnus.js:24:10)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:418:7)
    at startup (bootstrap_node.js:139:9)

and now with npm install \source\npm\winnus-0.0.3.tgz

C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode>npm install \source\npm\winnus-0.0.3.tgz

> [email protected] install C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus
> node-gyp rebuild


C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus>if not defined npm_config_node_gyp (node "c:\nodejs\v7.5.0\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
  winnus.cpp
  win_delay_load_hook.cc
..\cpp\winnus.cpp(582): warning C4996: 'v8::String::NewFromOneByte': was declared deprecated [C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\winnus.vcxproj]
  c:\users\owen\.node-gyp\7.5.0\include\node\v8.h(2319): note: see declaration of 'v8::String::NewFromOneByte'
     Creating library C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\winnus.lib and object C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\e
  xamples\hellowinnusnode\node_modules\winnus\build\Release\winnus.exp
  Generating code
  Finished generating code
  winnus.vcxproj -> C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\\winnus.node
  winnus.vcxproj -> C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\build\Release\winnus.pdb (Full PDB)
[email protected] C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode
`-- [email protected]  invalid


C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode>node hellowinnus.js
Error: DevicePaths
    at Object.exports.getDevices (C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\node_modules\winnus\winnus.js:11:11)
    at Object.<anonymous> (C:\source\repos\github\espruino\EspruinoTools\node_modules\winnus\examples\hellowinnusnode\hellowinnus.js:12:20)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:418:7)
    at startup (bootstrap_node.js:139:9)

Conclussion

? but I haven't gone thru the collection of results above yet: I was just hammering the keyboard to get something to look at.

However:

  • usb and nw.js is probably a bit of work and stop a good test of winnus 0.0.3
  • interactions of code on sw levels means I concentrate on:
  • EspruinoTools as the next step up from winnus for NTDDI_WINBLUE to ensure that expected results are the same as observed results
  • return to pre NTDDI_WINBLUE (ie bluetooth not available to NTDDI_WINBLUE) with Zandig to find if it is "ok" , which it may not be ...

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 23, 2017

@gfwilliams
Don't read the above comment: just my notes.

However, my test is based on one assumption, that var paths = winnus.getDevicePaths(); gives a list of paths to adapters present and that the addition of adapters after program start is not supported: ie no plug and play of adapters after application start.

If this is the issue for not liking the test, no plug and play of adapters after program start, that is ok and I can withdraw the PR.

However, for the time being, I think it is the best way forward if the lack of plug and play of adapters after application start can be accepted in order to find the best support for static adapters in Windows 7 - 10.
Plug and play could be made an issue to be returned to ...


'tis a long time since I did c++ and I don't really want to refresh the experience as getting an IDE to work for Windows 7 - 10 is perceived to be a problem.

void WINNUS_GetDevicePaths(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  Local<Array> array = Array::New(isolate);

  // NUS GUID
	GUID BluetoothInterfaceGUID;
	CLSIDFromString(TEXT(L"{6e400001-b5a3-f393-e0a9-e50e24dcca9e}"), &BluetoothInterfaceGUID);

  HDEVINFO hDI;
	SP_DEVICE_INTERFACE_DATA did;
	SP_DEVINFO_DATA dd;

	hDI = SetupDiGetClassDevs(&BluetoothInterfaceGUID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);

	if (hDI == INVALID_HANDLE_VALUE)
		RETURN_ERR("Unable to access Bluetooth adaptor");

@gfwilliams
Copy link
Member

I think there might be some confusion between 'adaptors' and 'devices'?

I'm pretty sure WINNUS_GetDevicePaths returns a list of Puck.js devices - not a list of BLE adaptors.

So if you call it with a working BLE adaptor but no Pucks in range, it should return an empty list - not error.

And yes - it gets called repeatedly for plug&play - so if you bring a Puck within range or add a battery to a Puck that no longer had one (but that Windows knows about) while the Web IDE is showing that 'devices' screen then it'll auto-update - like it does with USB devices.

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 23, 2017

yep: possible confusion between adapters (the physical device in the host computer) and devices (the devices that are connectable to by the adapter) ... or something along that line: terms used for rest of this comment.

I try and make a little test program for winnus that continually tries for devices (puck.js) with puck.js off at program start and try and get the test ok.

Tests for adapter

  • not available for NTDDI_WINBLUE
  • available for NTDDI_WINBLUE (with and without puck.js at init)

With a bluetooth device paired, but not switched on, winnus does not throw:

  • WINNUS_GetDevicePaths is retrieving possible devices (ie devices available on the device tree even if switched off)

With no bluetooth device paired (switched on/off possible device is irrelevant here), winnus does throw:

  • WINNUS_GetDevicePaths has nothing to give

ie at the present time, no plug and play for a device that is not paired at application start

There is something to think about here: devices available, but no connect ...

var winnus = require("winnus");
var devices = null;
var errorCode = 0;
var setIntervalTimer = null;


setIntervalTimer = setInterval(function(){
  try {
    devices = winnus.getDevices();
    console.log(devices);
  } catch (error) {
    console.error(error);
  }
}, 5000);


What is bluetooth, and how to test for an adapter that allows for "plug and play" of a device, ie it get's paired after application with sufficient tests at program start to ensure the possibility of "plug and play" of a device and/or adapter.

"NTDDI_WINBLUE" winnus 0.0.3 allows for

  • throw with DevicePaths
  • the application has to give information to the user that pairing IS necessary

ie

  • the present IDE (from source) may or may not work with non-paired device: I have to test this
  • it is conceivable that there is user confusion that the device is paired, given as a choice but no connect: I have to test this

Context of possible tests for as yet unknown methods for:

  • "bluetooth" available
  • "adapter" available
  • "device" available

And the choice of how much plug and play is needed contra possible confussion for user with choice of device but no connect and no information as to the reason

Circles:

  • red : "bluetooth"
  • blue : "local"
  • green: "adapter"
  • black: "device"

image


puck.js with no battery

Connection failed pop up bottom right: hard to catch

image


puck.js on but not paired

no information to user to pair: user sits and wonders what is wrong, starts RTBM (maybe) or forum or gives up ...

It is possible the user comes from a non-windows machine and expects some "pair" dialog aka. chrome on some platforms.

image


Bluetooth switched off (accidental fly mode on a laptop as a user case)

No dialog: what does the application expect to indicate ie "I have some USB's for you, but did you expect bluetooth? Check bluetooth turned on and pair the device please"

puck.js is sleek and a clear consumer product for "whatever is wanted": typical Espruino hobbyists possibly know the drill, although until puck.js, experience with bluetooth as the only connection method is possibly limited and we all make mistakes

image

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 23, 2017

@gfwilliams
The jury is out: I have made my case as above.

winnus 0.0.3 may stop plug and play for adapter device if one suceeds with building the IDE from source, however, without a clear throw list, the applications leave the user "in the dark".


https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.Enumeration.DeviceInformationKind

@gfwilliams
Copy link
Member

What I'd like is:

  • Have devices -> getDevicePaths return them in an array
  • Everything works, but have no devices -> getDevicePaths returns an empty array
  • Something is broken -> getDevicePaths throws an exception

But this is what happens already

If you look at the C++ source you'll see that getDevicePaths should throw exceptions if stuff goes wrong:

https://github.com/espruino/winnus/blob/master/cpp/winnus.cpp#L108
https://github.com/espruino/winnus/blob/master/cpp/winnus.cpp#L42

If it's not throwing an exception at some point but it should be then yes - issue a PR with an exception throw at that point in the C++ code - but what you're doing is just circumventing the carefully written error handling code with a nasty hack in JS - and in the process throwing an exception when one shouldn't be thrown.

If you don't have a USB COM port plugged into your PC, which most people won't, then you see this:

screenshot at 2017-02-24 09-21-22

Which points you to a troubleshooting guide which helps you out of you have problems.

Sorry, but closing this - it's wasting a huge amount of my time.

@gfwilliams gfwilliams closed this Feb 24, 2017
@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 24, 2017

No comment needed for my reply.
I try and look at the c++ again with relation to MS API for the area of interest (Windows 10 and NTDDI_WINBLUE)


In terms of the context for a Windows 10 machine: with definitions as the cut and paste from the Windows Device Manager

Have devices -> getDevicePaths return them in an array

  • devices being paired devices but not powered on or in range?
  • for 0.0.2, the observed result is
  • paired devices that may or may not be usable (powered off or not in range
  • TypeError: Cannot read property 'path' of undefined

Everything works, but have no devices -> getDevicePaths returns an empty array

  • this if better : involves c++ learning curve (again) but I can do it if required.

Something is broken -> getDevicePaths throws an exception

  • agreed: broken should give an exception.
  • definition of broken is needed and possible.

But this is what happens already ( with exceptions from c++ code)

  • not too sure: involves c++ learning curve but I can do it if required. I have noted the exceptions in the code but involves a c++ learning curve.
  • In general, there could be a need to examine the c++ once again (I was reading MS's API last night for possible tests of not broken but just not available for devices or adapters that may be bluetooth disabled but installed and findable on the usb device structure)

nasty hack in js (winnus.js) possibly: I am no expert:

0.0.2
TypeError: Cannot read property 'path' of undefined with the return of getDevicePath

0.0.3

Error: DevicePaths

The result is the same: winnus does not load, however the 0.0.3 allows for a possible start for ensuring applications that use winnus to obtain information as to why and the perceived need to go into c++ to improve the messages to higher level applications, with winnus.js being the readable part of the stack before delving into c++.

If you don't have a USB COM port plugged into your PC, which most people won't, then you see this (no ports found)

Although I have to double check this, on Windows 10 laptops, it seems that I have a result for USB.
I would presume that the same is for a Windows 10 Desktop, so I will use the wife's Windows 10 Desktop (not developer machine) to see what most Windows 10 people see.
The wording "plugged into" is interesting: my usb ports are installed on the laptops motherboard: they are allways plugged in.

@OwenBrotherwood
Copy link
Contributor Author

At a guess, the com3 port is the GPS of the Sierra Wireless EM7345 4G LTE (combined device).
It is quite often included in some laptops: I should really try and see if I can actually get it to "work" as a gps.

Other laptops may have other USB COM ports that are not immediately obvious unless one takes the time to explore it's function: ie it is not allways the user choice which dictates the choice of device that pops up, and is quite har to create any application guards for.
I doubt my wifes windows 10 desktop has one, so I will skip the tests on that machine as the laptop I have seems to be good enough for testing on.

image

@gfwilliams
Copy link
Member

Maybe the Web IDE just always shows the 'troubleshooting' link regardless? I think it's rare that devices have a USB Serial port pre-installed in them though.

devices being paired devices but not powered on or in range?

Ideally the devices could be reported with a flag inRange, and then the IDE could gray out the ones that aren't? I'm not sure if that is possible, but if it were it'd be perfect.

@OwenBrotherwood
Copy link
Contributor Author

OwenBrotherwood commented Feb 24, 2017

  • troubleshooting link:

if the link is to good doc, then yes, some "?" or other icon for "in the face" possibility for help.
Help is always good at the point a question/doubt comes to the user and with help in the actions result, connecting dialog, instead of some other area which are clicks away.

  • I try and read up on the api to describe what is possible in relation to user interaction with accessible contra "installed device"

I wrote earlier:

'tis a long time since I did c++ and I don't really want to refresh the experience as getting an IDE to work for Windows 7 - 10 is perceived to be a problem.

What I mean with this is, I can program when I have mapped out 10% of the time to this: the other 90% of the time is finding some total perspective over the work to be done. However, c++ code contribution from me would probably be "interesting" as c++ is a long time ago for me (but I am quiet good at cut and paste)

The actual code/doc contribution is preferably with atomic PR's that result in step by step improvements rather than one big "solve everything PR" as that is not going to happen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants