Giter Club home page Giter Club logo

nxbt's Introduction

Header


Hey, I'm Reece πŸ‘‹ and thanks for stopping by!

My interests and work lie in teaching computers about visual concepts in the real world. Currently, I'm focusing on training a computer to understand what something is and where it might be within a given image or video. During idle time, I like tinkering with Linux systems, dabbling in task automation, and exploring web technologies.

Connect

  • πŸ‘¨β€πŸ’Ό LinkedIn
  • πŸ‘¨β€πŸ’» GitHub (You are here)
  • More ways to connect are available on my personal website

Interests

  • Computer Vision-based Machine Learning
  • Task Automation
  • Web Technology Exploration
  • Computer Graphics

Technologies & Tools

nxbt's People

Contributors

brikwerk avatar cclauss avatar dependabot[bot] avatar dummydud3 avatar inorizushi avatar jazzmax avatar joshuatam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nxbt's Issues

Webapp dont work

hello, first thanks for the program, I have a problem with the webapp, I installed it in windows, everything is working but when I want to start the page it shows me this error

Traceback (most recent call last):
File "/usr/local/bin/nxbt", line 33, in
sys.exit(load_entry_point('nxbt', 'console_scripts', 'nxbt')())
File "/vagrant/nxbt/cli.py", line 321, in main
from .web import start_web_app
File "/vagrant/nxbt/web/init.py", line 1, in
from .app import start_web_app
File "/vagrant/nxbt/web/app.py", line 9, in
from flask import Flask, render_template, request
File "/usr/local/lib/python3.8/dist-packages/flask/init.py", line 19, in
from . import json
File "/usr/local/lib/python3.8/dist-packages/flask/json/init.py", line 15, in
from itsdangerous import json as _json
ImportError: cannot import name 'json' from 'itsdangerous' (/usr/local/lib/python3.8/dist-packages/itsdangerous/init.py)

any ideas? Thank you

Skips button presses

Seems to skip button presses intermittently during macros, not sure if due to bluetooth adapter? Same effect on two different bluetooth adapters though. Using the webapp

Systemd service override

toggle_clean_bluez overrides the bluetooth.service systemd file in /lib. It would be better to put the ExecStart change in /run/systemd/system/bluetooth.service.d/nxbt.conf. That way, reverting would be done by simply deleting this file. The change would also not survive reboots.

Jinja no longer supports Escape

As of version 3.1.0 of Jinja released March 24, 2022, Markup and Escape have been removed. The devs suggest importing them from MarkupSafe instead. See: https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-0

Flask 1.1.2 tries to import Escape from Jinja:

Traceback (most recent call last):
  File /usr/local/bin/nxbt, line 8, in <module>
    sys.exit(main())
  File /usr/local/lib/python3.8/dist-packages/nxbt/cli.py, line 321, in main
    from .web import start_web_app
  File /usr/local/lib/python3.8/dist-packages/nxbt/web/__init__.py, line 1, in <module>
    from .app import start_web_app
  File /usr/local/lib/python3.8/dist-packages/nxbt/web/app.py, line 9, in <module>
    from flask import Flask, render_template, request
  File /usr/local/lib/python3.8/dist-packages/flask/__init__.py, line 14, in <module>
    from jinja2 import escape
ImportError: cannot import name 'escape' from 'jinja2' (/usr/local/lib/python3.8/dist-packages/jinja2/__init__.py)

If you install Jinja2==3.0.3 you no longer have that specific error but then run into ImportError: cannot import name β€˜json’ from itsdangerous which is also a Flask related issue requiring you to downgrade itsdangerous from 2.1.2 (at time of writing) to 2.0.1 and downgrade werkzeug from 2.1.1 to 2.0.2 before the webserver runs without issue.

Windows Support

This is an issue to track Windows support.

Currently, it's not possible to access the L2CAP layer of the Bluetooth stack (which is necessary for controller emulation) with Python on Windows. It is, however, possible to use a KMDF profile driver to establish Interrupt/Control connections and provide hooks for Python use.

To enable NXBT use on Windows, a separate KMDF driver profile project might be necessary.

If anyone has any other ideas or experience in this area, please feel free to comment.

Gyro and accels

Hi there - fantastic work, thank you very much for doing this. I am trying to expose/inject the gyro and accel data, between your work and dekuNukem I have a fairly good idea of the bytes I need to inject but am struggling with where to do it.

It looks like 'server' handles the queues, timing, and communications back and forth. 'Input' parses commands from the human to go to the switch, and 'responses' and 'commands' are directions from the switch back to the emulated joycon. 'Protocol' handles the packets to send to the switch and back.

As a simple test I have defined a new macro (say 'g') that would inject bytes into the z-gyro (for example) location on the packet. I have added that to 'input', and it calls a modified 'protocol.set_imu_data' function where protocol replaces the subarray with gyro bytes.

Is that a good first test? I see small responses on the switch but I'm not sure it's doing it correctly. Would you recommend a different approach, perhaps through 'set_controller_input'? Sounds like there I'd have to handle repeating the gyro injection for every packet manually, but maybe that is more direct. Any thoughts?

Thanks again

UPDATE: I have confirmed the new macro and set_imu_data approach works (tested on Surgeon Simulator). I am leaning towards adding accel and gyro values as members of protocol, and set_imu_data reads from them. The input macros then simply update the accel and gyro values as desired. I suppose I will have to keep a copy of the default value when it wants to return to idle (or zeros I suppose).

PS - surgeon simulator only allows me to test the gyros with feedback on screen. Does anyone have any recommendations for a switch game that tracks both position and orientation on screen (IE a vr-style interface)? Maybe Arms?

USB gadget

With libraries like python-functionfs it should be possible to reuse some existing HID code in nxbt and make a USB gadget on Linux that emulates the Pro Controller. (For example my PS4 controller emulator/protocol testing ground uses it)

(One thing worth noting though is that python-functionfs in particular starts up as root and forks as a process under normal user for security reasons and needs to be take into account when cross platform is a goal)

Unable to connect

Hello, I used your latest nxbt0.1.4. My switch is 12.1.0. I still can't connect to my switch. I use VM
image
It didn't respond

Question about multiple controllers

Hi,

I know this isn't the ideal place, but I wanted to ask you a question and I'm not sure how to contact you.

I know it's possible to create multiple controllers with this software. I was wondering if you can control all of those multiple created controllers using one physical controller? Is that currently possible using this software?

Basically for multiboxing.

Thanks!

Cannot install on Archlinux

I am trying to install nxbt on Archlinux and am running into a dependancy issue.
dbus-python will not install/build.

Building wheels for collected packages: dbus-python
Building wheel for dbus-python (setup.py) ... error

ERROR: Command errored out with exit status 1:
command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"'; file='"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-579duomb
cwd: /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/
Complete output (217 lines):
running bdist_wheel
running build
creating /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build
creating /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9
checking whether make supports nested variables... no
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define EXTENSIONS... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... no
checking whether make supports the include directive... no
checking whether UID '0' is supported by ustar format... yes
checking whether GID '0' is supported by ustar format... yes
checking how to create a ustar tar archive... gnutar
checking dependency style of gcc... none
checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking for native Windows host... no
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert armv7l-unknown-linux-gnueabihf file names to armv7l-unknown-linux-gnueabihf format... func_convert_file_noop
checking how to convert armv7l-unknown-linux-gnueabihf file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @file support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for inline... inline
checking for gawk... (cached) gawk
checking for python... /usr/bin/python
checking for a version of Python >= '2.1.0'... yes
checking for a version of Python >= '2.7'... yes
checking for the distutils Python package... yes
checking for Python include path... -I/usr/include/python3.9
checking for Python library path... -L/usr/lib -lpython3.9
checking for Python site-packages path... /usr/lib/python3.9/site-packages
checking python extra libraries... -lcrypt -lpthread -ldl -lutil -lm -lm
checking python extra linking flags... -Xlinker -export-dynamic
checking consistency of all components of python development environment... yes
checking for python version... 3.9
checking for python platform... linux
checking for python script directory... ${prefix}/lib/python3.9/site-packages
checking for python extension module directory... ${exec_prefix}/lib/python3.9/site-packages
checking python module: sphinx... no
checking python module: sphinx_rtd_theme... no
checking for dbus-run-session... /usr/bin/dbus-run-session
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for DBUS... yes
checking for GLIB... yes
checking whether C compiler accepts -Werror=unknown-warning-option... no
checking whether C compiler accepts -Wno-suggest-attribute=format... yes
checking whether C compiler accepts -fno-strict-aliasing... yes
checking whether C compiler accepts -Wdeprecated-declarations... yes
checking whether C compiler accepts -Wno-duplicated-branches... yes
checking whether C compiler accepts -Wno-inline... yes
checking whether C compiler accepts -Wno-redundant-decls... yes
checking whether C compiler accepts -Wno-switch-default... yes
checking whether C compiler accepts -Wno-write-strings... yes
checking whether C compiler accepts -Wnested-externs... yes
checking whether C compiler accepts -Wmissing-prototypes... yes
checking whether C compiler accepts -Wstrict-prototypes... yes
checking whether C compiler accepts -Wdeclaration-after-statement... yes
checking whether C compiler accepts -Wimplicit-function-declaration... yes
checking whether C compiler accepts -Wold-style-definition... yes
checking whether C compiler accepts -Wjump-misses-init... yes
checking whether C compiler accepts -Wall... yes
checking whether C compiler accepts -Wextra... yes
checking whether C compiler accepts -Wundef... yes
checking whether C compiler accepts -Wwrite-strings... yes
checking whether C compiler accepts -Wpointer-arith... yes
checking whether C compiler accepts -Wmissing-declarations... yes
checking whether C compiler accepts -Wredundant-decls... yes
checking whether C compiler accepts -Wno-unused-parameter... yes
checking whether C compiler accepts -Wno-missing-field-initializers... yes
checking whether C compiler accepts -Wformat=2... yes
checking whether C compiler accepts -Wcast-align... yes
checking whether C compiler accepts -Wformat-nonliteral... yes
checking whether C compiler accepts -Wformat-security... yes
checking whether C compiler accepts -Wsign-compare... yes
checking whether C compiler accepts -Wstrict-aliasing... yes
checking whether C compiler accepts -Wshadow... yes
checking whether C compiler accepts -Winline... yes
checking whether C compiler accepts -Wpacked... yes
checking whether C compiler accepts -Wmissing-format-attribute... yes
checking whether C compiler accepts -Wmissing-noreturn... yes
checking whether C compiler accepts -Winit-self... yes
checking whether C compiler accepts -Wredundant-decls... (cached) yes
checking whether C compiler accepts -Wmissing-include-dirs... yes
checking whether C compiler accepts -Wunused-but-set-variable... yes
checking whether C compiler accepts -Warray-bounds... yes
checking whether C compiler accepts -Wreturn-type... yes
checking whether C compiler accepts -Wswitch-enum... yes
checking whether C compiler accepts -Wswitch-default... yes
checking whether C compiler accepts -Wduplicated-cond... yes
checking whether C compiler accepts -Wduplicated-branches... yes
checking whether C compiler accepts -Wlogical-op... yes
checking whether C compiler accepts -Wrestrict... yes
checking whether C compiler accepts -Wnull-dereference... yes
checking whether C compiler accepts -Wdouble-promotion... yes
checking whether C compiler accepts -Wno-error=duplicated-branches... yes
checking whether C compiler accepts -Wno-error=inline... yes
checking whether C compiler accepts -Wno-error=redundant-decls... yes
checking whether C compiler accepts -Wno-error=switch-default... yes
checking whether C compiler accepts -Wno-error=write-strings... yes
checking whether C compiler accepts -Wno-error=unused-parameter... yes
checking whether C compiler accepts -Wno-error=missing-field-initializers... yes
checking whether C compiler accepts -Werror=unknown-warning-option... (cached) no
checking whether the linker accepts -Wl,--as-needed... yes
checking whether the linker accepts -Wl,--as-needed... yes
checking whether the linker accepts -Wl,-z,relro... yes
checking whether the linker accepts -Wl,-z,relro... yes
checking whether the linker accepts -Wl,-z,now... yes
checking whether the linker accepts -Wl,-z,now... yes
checking whether the linker accepts -Wl,-z,noexecstack... yes
checking whether the linker accepts -Wl,-z,noexecstack... yes
checking whether the linker accepts -Wl,--no-as-needed... yes
checking whether the linker accepts -Wl,--fatal-warnings... yes
checking whether the linker accepts -Wl,-fatal_warnings... no
checking whether the linker accepts -Wl,--no-as-needed... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating dbus-gmain/Makefile
config.status: creating dbus-python.pc
config.status: creating config.h
config.status: executing depfiles commands
config.status: error: in /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9': config.status: error: Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See config.log' for more details
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py", line 85, in
setup(
File "/usr/lib/python3.9/site-packages/setuptools/init.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.9/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.9/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.9/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/usr/lib/python3.9/site-packages/wheel/bdist_wheel.py", line 299, in run
self.run_command('build')
File "/usr/lib/python3.9/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.9/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py", line 56, in run
subprocess.check_call([
File "/usr/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/configure', '--disable-maintainer-mode', 'PYTHON=/usr/bin/python', '--prefix=/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9/prefix']' returned non-zero exit status 1.

ERROR: Failed building wheel for dbus-python
Running setup.py clean for dbus-python
Failed to build dbus-python
Installing collected packages: dbus-python, blessed, nxbt
Running setup.py install for dbus-python ... error
ERROR: Command errored out with exit status 1:
command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"'; file='"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-s1j19uyf/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/dbus-python
cwd: /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/
Complete output (219 lines):
running install
running build
creating /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build
creating /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9
checking whether make supports nested variables... no
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define EXTENSIONS... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... no
checking whether make supports the include directive... no
checking whether UID '0' is supported by ustar format... yes
checking whether GID '0' is supported by ustar format... yes
checking how to create a ustar tar archive... gnutar
checking dependency style of gcc... none
checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking for native Windows host... no
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert armv7l-unknown-linux-gnueabihf file names to armv7l-unknown-linux-gnueabihf format... func_convert_file_noop
checking how to convert armv7l-unknown-linux-gnueabihf file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @file support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for inline... inline
checking for gawk... (cached) gawk
checking for python... /usr/bin/python
checking for a version of Python >= '2.1.0'... yes
checking for a version of Python >= '2.7'... yes
checking for the distutils Python package... yes
checking for Python include path... -I/usr/include/python3.9
checking for Python library path... -L/usr/lib -lpython3.9
checking for Python site-packages path... /usr/lib/python3.9/site-packages
checking python extra libraries... -lcrypt -lpthread -ldl -lutil -lm -lm
checking python extra linking flags... -Xlinker -export-dynamic
checking consistency of all components of python development environment... yes
checking for python version... 3.9
checking for python platform... linux
checking for python script directory... ${prefix}/lib/python3.9/site-packages
checking for python extension module directory... ${exec_prefix}/lib/python3.9/site-packages
checking python module: sphinx... no
checking python module: sphinx_rtd_theme... no
checking for dbus-run-session... /usr/bin/dbus-run-session
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for DBUS... yes
checking for GLIB... yes
checking whether C compiler accepts -Werror=unknown-warning-option... no
checking whether C compiler accepts -Wno-suggest-attribute=format... yes
checking whether C compiler accepts -fno-strict-aliasing... yes
checking whether C compiler accepts -Wdeprecated-declarations... yes
checking whether C compiler accepts -Wno-duplicated-branches... yes
checking whether C compiler accepts -Wno-inline... yes
checking whether C compiler accepts -Wno-redundant-decls... yes
checking whether C compiler accepts -Wno-switch-default... yes
checking whether C compiler accepts -Wno-write-strings... yes
checking whether C compiler accepts -Wnested-externs... yes
checking whether C compiler accepts -Wmissing-prototypes... yes
checking whether C compiler accepts -Wstrict-prototypes... yes
checking whether C compiler accepts -Wdeclaration-after-statement... yes
checking whether C compiler accepts -Wimplicit-function-declaration... yes
checking whether C compiler accepts -Wold-style-definition... yes
checking whether C compiler accepts -Wjump-misses-init... yes
checking whether C compiler accepts -Wall... yes
checking whether C compiler accepts -Wextra... yes
checking whether C compiler accepts -Wundef... yes
checking whether C compiler accepts -Wwrite-strings... yes
checking whether C compiler accepts -Wpointer-arith... yes
checking whether C compiler accepts -Wmissing-declarations... yes
checking whether C compiler accepts -Wredundant-decls... yes
checking whether C compiler accepts -Wno-unused-parameter... yes
checking whether C compiler accepts -Wno-missing-field-initializers... yes
checking whether C compiler accepts -Wformat=2... yes
checking whether C compiler accepts -Wcast-align... yes
checking whether C compiler accepts -Wformat-nonliteral... yes
checking whether C compiler accepts -Wformat-security... yes
checking whether C compiler accepts -Wsign-compare... yes
checking whether C compiler accepts -Wstrict-aliasing... yes
checking whether C compiler accepts -Wshadow... yes
checking whether C compiler accepts -Winline... yes
checking whether C compiler accepts -Wpacked... yes
checking whether C compiler accepts -Wmissing-format-attribute... yes
checking whether C compiler accepts -Wmissing-noreturn... yes
checking whether C compiler accepts -Winit-self... yes
checking whether C compiler accepts -Wredundant-decls... (cached) yes
checking whether C compiler accepts -Wmissing-include-dirs... yes
checking whether C compiler accepts -Wunused-but-set-variable... yes
checking whether C compiler accepts -Warray-bounds... yes
checking whether C compiler accepts -Wreturn-type... yes
checking whether C compiler accepts -Wswitch-enum... yes
checking whether C compiler accepts -Wswitch-default... yes
checking whether C compiler accepts -Wduplicated-cond... yes
checking whether C compiler accepts -Wduplicated-branches... yes
checking whether C compiler accepts -Wlogical-op... yes
checking whether C compiler accepts -Wrestrict... yes
checking whether C compiler accepts -Wnull-dereference... yes
checking whether C compiler accepts -Wdouble-promotion... yes
checking whether C compiler accepts -Wno-error=duplicated-branches... yes
checking whether C compiler accepts -Wno-error=inline... yes
checking whether C compiler accepts -Wno-error=redundant-decls... yes
checking whether C compiler accepts -Wno-error=switch-default... yes
checking whether C compiler accepts -Wno-error=write-strings... yes
checking whether C compiler accepts -Wno-error=unused-parameter... yes
checking whether C compiler accepts -Wno-error=missing-field-initializers... yes
checking whether C compiler accepts -Werror=unknown-warning-option... (cached) no
checking whether the linker accepts -Wl,--as-needed... yes
checking whether the linker accepts -Wl,--as-needed... yes
checking whether the linker accepts -Wl,-z,relro... yes
checking whether the linker accepts -Wl,-z,relro... yes
checking whether the linker accepts -Wl,-z,now... yes
checking whether the linker accepts -Wl,-z,now... yes
checking whether the linker accepts -Wl,-z,noexecstack... yes
checking whether the linker accepts -Wl,-z,noexecstack... yes
checking whether the linker accepts -Wl,--no-as-needed... yes
checking whether the linker accepts -Wl,--fatal-warnings... yes
checking whether the linker accepts -Wl,-fatal_warnings... no
checking whether the linker accepts -Wl,--no-as-needed... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating dbus-gmain/Makefile
config.status: creating dbus-python.pc
config.status: creating config.h
config.status: executing depfiles commands
config.status: error: in /tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9': config.status: error: Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See config.log' for more details
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py", line 85, in
setup(
File "/usr/lib/python3.9/site-packages/setuptools/init.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.9/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.9/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.9/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/usr/lib/python3.9/site-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/usr/lib/python3.9/distutils/command/install.py", line 546, in run
self.run_command('build')
File "/usr/lib/python3.9/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.9/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py", line 56, in run
subprocess.check_call([
File "/usr/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/configure', '--disable-maintainer-mode', 'PYTHON=/usr/bin/python', '--prefix=/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/build/temp.linux-armv7l-3.9/prefix']' returned non-zero exit status 1.
----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"'; file='"'"'/tmp/pip-install-xy6a_clm/dbus-python_60681f9e94bb4a8b8226e662e8bc3534/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-s1j19uyf/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.9/dbus-python Check the logs for full command output.

Webapp Webhooks

It would be nice if there were an endpoint or two where I could send button presses and macros and resets to the webapp on demand. It doesn't seem like there's any good way to send commands from one machine to another without taking over user input devices or running a separate application on both machines. Something like a webhook in the webapp could go a long way towards enabling users to just send the commands they need without too much setup and allows them to run all the code in the background while they do other things.

nxbt demo don't work at all

I'm a french student, sorry for the English mistakes

I tried NXBT on RaspberryPi 4 with Raspbian and a 12.1.0 Nintendo Switch

The commands I've done :

sudo pip3 install nxbt

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting nxbt
  Downloading https://files.pythonhosted.org/packages/e0/ec/6c7512c3b4371b1a34bd6176a86beb9050c7d07cc16f18c4874172ac8b87/nxbt-0.1.3-py3-none-any.whl (97kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 102kB 255kB/s 
Requirement already satisfied: dbus-python==1.2.16 in /usr/local/lib/python3.7/dist-packages (from nxbt) (1.2.16)
Collecting Flask==1.1.2 (from nxbt)
  Downloading https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl (94kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 102kB 189kB/s 
Collecting psutil==5.6.6 (from nxbt)
  Downloading https://www.piwheels.org/simple/psutil/psutil-5.6.6-cp37-cp37m-linux_armv7l.whl (279kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 286kB 248kB/s 
Collecting pynput==1.7.1 (from nxbt)
  Downloading https://files.pythonhosted.org/packages/89/66/0e62f409bb785db78ae5d228e6b1bf1e80d210744bcd21b9487417b049f5/pynput-1.7.1-py2.py3-none-any.whl (99kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 102kB 383kB/s 
Collecting eventlet==0.27.0 (from nxbt)
  Downloading https://files.pythonhosted.org/packages/bc/19/1779ebc8d18aeb68187da49d0c2a76c8a775c63d7504b51e2da0244f18a8/eventlet-0.27.0-py2.py3-none-any.whl (223kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 225kB 282kB/s 
Collecting Flask-SocketIO==5.0.1 (from nxbt)
  Downloading https://files.pythonhosted.org/packages/05/ff/4de07d38fd2a4fb6326d96a2ecf9fb48026c3f064bc600f33fde0dc1c891/Flask_SocketIO-5.0.1-py2.py3-none-any.whl
Collecting blessed==1.17.10 (from nxbt)
  Downloading https://files.pythonhosted.org/packages/7d/16/9109bec05f7927f796e498bafa4a250515afc3f6cdc668e94f4f5cbb46f1/blessed-1.17.10-py2.py3-none-any.whl (76kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 81kB 276kB/s 
Requirement already satisfied: click>=5.1 in /usr/lib/python3/dist-packages (from Flask==1.1.2->nxbt) (7.0)
Requirement already satisfied: itsdangerous>=0.24 in /usr/lib/python3/dist-packages (from Flask==1.1.2->nxbt) (0.24)
Collecting Werkzeug>=0.15 (from Flask==1.1.2->nxbt)
  Downloading https://files.pythonhosted.org/packages/bd/24/11c3ea5a7e866bf2d97f0501d0b4b1c9bbeade102bb4b588f0d2919a5212/Werkzeug-2.0.1-py3-none-any.whl (288kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 296kB 221kB/s 
Collecting Jinja2>=2.10.1 (from Flask==1.1.2->nxbt)
  Downloading https://files.pythonhosted.org/packages/80/21/ae597efc7ed8caaa43fb35062288baaf99a7d43ff0cf66452ddf47604ee6/Jinja2-3.0.1-py3-none-any.whl (133kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 143kB 327kB/s 
Collecting evdev>=1.3; "linux" in sys_platform (from pynput==1.7.1->nxbt)
  Downloading https://www.piwheels.org/simple/evdev/evdev-1.4.0-cp37-cp37m-linux_armv7l.whl (99kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 102kB 321kB/s 
Collecting python-xlib>=0.17; "linux" in sys_platform (from pynput==1.7.1->nxbt)
  Downloading https://files.pythonhosted.org/packages/c2/16/950463d36e8b64067c4d535038c5512de8200015e793d7d0a3f400187cbf/python_xlib-0.31-py2.py3-none-any.whl (179kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 184kB 312kB/s 
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from pynput==1.7.1->nxbt) (1.12.0)
Collecting greenlet>=0.3 (from eventlet==0.27.0->nxbt)
  Downloading https://www.piwheels.org/simple/greenlet/greenlet-1.1.1-cp37-cp37m-linux_armv7l.whl (155kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 163kB 345kB/s 
Collecting monotonic>=1.4 (from eventlet==0.27.0->nxbt)
  Downloading https://files.pythonhosted.org/packages/9a/67/7e8406a29b6c45be7af7740456f7f37025f0506ae2e05fb9009a53946860/monotonic-1.6-py2.py3-none-any.whl
Collecting dnspython<2.0.0,>=1.15.0 (from eventlet==0.27.0->nxbt)
  Downloading https://files.pythonhosted.org/packages/ec/d3/3aa0e7213ef72b8585747aa0e271a9523e713813b9a20177ebe1e939deb0/dnspython-1.16.0-py2.py3-none-any.whl (188kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 194kB 422kB/s 
Collecting python-socketio>=5.0.2 (from Flask-SocketIO==5.0.1->nxbt)
  Downloading https://files.pythonhosted.org/packages/77/d2/2971b41d907f2e33b2551efbfce99dcff3b361bcfbcdc3b72d84e5a4f2d6/python_socketio-5.4.0-py3-none-any.whl (55kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61kB 352kB/s 
Requirement already satisfied: wcwidth>=0.1.4 in /usr/lib/python3/dist-packages (from blessed==1.17.10->nxbt) (0.1.7)
Collecting MarkupSafe>=2.0 (from Jinja2>=2.10.1->Flask==1.1.2->nxbt)
  Downloading https://www.piwheels.org/simple/markupsafe/MarkupSafe-2.0.1-cp37-cp37m-linux_armv7l.whl
Collecting python-engineio>=4.1.0 (from python-socketio>=5.0.2->Flask-SocketIO==5.0.1->nxbt)
  Downloading https://files.pythonhosted.org/packages/b3/8f/08b886f7281b1d7045cebf447a6976ae2403c901e3c145acf3c8a31f93c2/python_engineio-4.2.1-py3-none-any.whl (52kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61kB 388kB/s 
Collecting bidict>=0.21.0 (from python-socketio>=5.0.2->Flask-SocketIO==5.0.1->nxbt)
  Downloading https://files.pythonhosted.org/packages/67/d4/eaf9242722bf991e0955380dd6168020cb15a71cc0d3cc2373f4911b1f1d/bidict-0.21.2-py2.py3-none-any.whl
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, Flask, psutil, evdev, python-xlib, pynput, greenlet, monotonic, dnspython, eventlet, python-engineio, bidict, python-socketio, Flask-SocketIO, blessed, nxbt
  Found existing installation: Werkzeug 0.14.1
    Not uninstalling werkzeug at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'Werkzeug'. No files were found to uninstall.
  Found existing installation: MarkupSafe 1.1.0
    Not uninstalling markupsafe at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'MarkupSafe'. No files were found to uninstall.
  Found existing installation: Jinja2 2.10
    Not uninstalling jinja2 at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'Jinja2'. No files were found to uninstall.
  Found existing installation: Flask 1.0.2
    Not uninstalling flask at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'Flask'. No files were found to uninstall.
  Found existing installation: psutil 5.5.1
    Not uninstalling psutil at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'psutil'. No files were found to uninstall.
Successfully installed Flask-1.1.2 Flask-SocketIO-5.0.1 Jinja2-3.0.1 MarkupSafe-2.0.1 Werkzeug-2.0.1 bidict-0.21.2 blessed-1.17.10 dnspython-1.16.0 evdev-1.4.0 eventlet-0.27.0 greenlet-1.1.1 monotonic-1.6 nxbt-0.1.3 psutil-5.6.6 pynput-1.7.1 python-engineio-4.2.1 python-socketio-5.4.0 python-xlib-0.31

sudo nxbt demo
line break but nothing

sudo nxbt demo -d

[2021-09-02 14:18:25,880] DEBUG in bluez: Using adapter under object path: /org/bluez/hci0

Thanks for any help

Actually packages got updates. Issues with new packages

Hello,

I installed nxbt and got problems.
demo and tui works without issue.
webapp has the Error:
The client is using an unsupported version of the Socket.IO or Engine.IO protocols

(29307) accepted ('192.168.1.2', 50146)
192.168.1.2 - - [01/Jan/2021 13:32:40] "GET / HTTP/1.1" 200 10876 0.018651
The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO)
192.168.1.2 - - [01/Jan/2021 13:32:40] "GET /socket.io/?EIO=3&transport=polling&t=NQzxuHt HTTP/1.1" 400 219 0.000838
192.168.1.2 - - [01/Jan/2021 13:32:40] "GET /favicon.png HTTP/1.1" 200 27202 0.003434
192.168.1.2 - - [01/Jan/2021 13:32:41] "GET /socket.io/?EIO=3&transport=polling&t=NQzxuXe HTTP/1.1" 400 219 0.000564
192.168.1.2 - - [01/Jan/2021 13:32:43] "GET /socket.io/?EIO=3&transport=polling&t=NQzxv9T HTTP/1.1" 400 219 0.000427
192.168.1.2 - - [01/Jan/2021 13:32:47] "GET /socket.io/?EIO=3&transport=polling&t=NQzxv_c HTTP/1.1" 400 219 0.000654
192.168.1.2 - - [01/Jan/2021 13:32:52] "GET /socket.io/?EIO=3&transport=polling&t=NQzxxD- HTTP/1.1" 400 219 0.000599

If i open the website, i got a page but i can't interact with.

I tried to update all relevant files. But still got the same error.
After all, i install previous packages after i removed(flask-socketio python-socketio python-engineio).
pip3 install "Flask-SocketIO<5"
pip3 install "python-socketio<5"

Only a temporary fix for me (and others if someone try to run it.)
Hope i am not the only one.

Disconnects when exiting the grip order screen

It pairs successfully but the second I exit the grip order screen it instantly stops working. Using the pip version.
Here is the logs from the last check in bluetoothctl

shorty@shorty-laptop:~/projects/iislander> bluetoothctl  
Agent registered
[CHG] Controller 80:2B:F9:D7:BD:F4 Class: 0x00300000
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001133-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001104-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00005005-0000-1000-8000-0002ee000001
[CHG] Controller 80:2B:F9:D7:BD:F4 Discoverable: no
[CHG] Controller 80:2B:F9:D7:BD:F4 Powered: no
[CHG] Controller 80:2B:F9:D7:BD:F4 Discovering: no
[CHG] Controller 80:2B:F9:D7:BD:F4 Class: 0x00000000
Agent unregistered
[DEL] Device B8:F6:53:21:1B:4D JBL TUNE115BT
[DEL] Device 4C:74:BF:E2:11:67 Shorty's iPhone
[DEL] Device E4:8B:7F:44:7D:F7 Shorty's iPad
[DEL] Controller 80:2B:F9:D7:BD:F4 Pro Controller [default]
Agent registered
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001133-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001104-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00005005-0000-1000-8000-0002ee000001
[CHG] Controller 80:2B:F9:D7:BD:F4 Class: 0x00300000
[CHG] Controller 80:2B:F9:D7:BD:F4 Powered: yes
[CHG] Controller 80:2B:F9:D7:BD:F4 PairableTimeout: 0x00000000
[CHG] Controller 80:2B:F9:D7:BD:F4 DiscoverableTimeout: 0x000000b4
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001133-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00001104-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Controller 80:2B:F9:D7:BD:F4 UUIDs: 00005005-0000-1000-8000-0002ee000001
[CHG] Controller 80:2B:F9:D7:BD:F4 Discoverable: yes
[CHG] Controller 80:2B:F9:D7:BD:F4 Class: 0x00002508
[NEW] Device B8:8A:EC:88:4A:45 Nintendo Switch
[CHG] Device B8:8A:EC:88:4A:45 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device B8:8A:EC:88:4A:45 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device B8:8A:EC:88:4A:45 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device B8:8A:EC:88:4A:45 ServicesResolved: yes
[CHG] Device B8:8A:EC:88:4A:45 Paired: yes
[CHG] Device B8:8A:EC:88:4A:45 ServicesResolved: no
[CHG] Device B8:8A:EC:88:4A:45 Connected: no
[bluetooth]# 

Ubuntu 21.10

A not had to tell bluetoothctl to remove the switch for it to connect again.

Videos showing the issue
https://youtu.be/VUe2xvHM-So
https://youtu.be/P_nEkdsSc7w

Thanks

controller

few questions:
can i connect to the switch any controllers and nxbt recognize them?
can i use ps4 or xbox 360 wireless controller?
does it works only with bluetooth or with usb too?
can i connect more then one controller?

Demo cannot connect switch

I use Raspberry Pi 3B, and run 'sudo nxbt demo', the terminal output 'Running Demo..' and then no any more output.

Just... doesn't work at all

If i use the demo, nothing happens, if i use the TUI, it gets stuck on connecting, and the webapp quickly goes into reconnecting before saying "crashed".

vagrant_setup.py doesn't work with several issues

I've been trying to set this up with a VBox VM on my Windows machine, but have run into several issues with vagrant_setup.py. I'm not familiar with Python but I've managed to identify at least a couple issues:

  1. Line 74: check_cli("VirtualBox", "VBoxManageaa", msg=vb_msg) , it seems to be looking for 'VBoxManageaa' which, doesn't work. VBoxManage itself runs fine from CMD (it has been added to the path).
  2. If I change 'VboxManageaa' to just 'VboxManage' it works, but when listing USB devices, no devices are shown and it asks to select from 0 to -1. Checking the output of 'VBoxManage list usbhost' in CMD shows all the USB devices on the system with no problem. Adding a few Prints to check various values leads me to believe the issue occurs somewhere in 'find_line_items' as it returns nothing for productid, vendorid, manufacturer and product.

[Dev branch] HOME in macro not working

I tried using commit 086293d (dev branch) to solve some issue with input skipping.
However the first input of my macro is HOME (after a small wait time). Even with several attempts at running the macro, the input never get sent.

The macro is ran through a Python script

Hardware:

  • Ubuntu 20.04 LTS
  • Internal bluetooth adapter of my dell vostro 15
  • switchOS 13.2.0

Script:

macro = Path(sys.path[0] + '/macro').read_text()
nx = nxbt.Nxbt()
print("Creating controller")
controller_index = nx.create_controller(nxbt.PRO_CONTROLLER, reconnect_address=nx.get_switch_addresses())
print("Connecting")
nx.wait_for_connection(controller_index)
print("Running script")
nx.macro(controller_index, macro)
print("Complete ", end="")

Macro:

1s
HOME 0.2s
1.4s
X 0.1s
1s
A 0.1s
(More after that)

Note: Reverting to master release solves the problem

[Errno 107] Transport endpoint is not connected // [Errno 113] No route to host

I got this error. It's from a Pi 3 iirc.

192.168.0.102 - - [06/Apr/2021 22:44:46] "GET /socket.io/?EIO=4&transport=polling&t=NYf9I32&sid=sWegbfCfpW_e5LzcAAAA HTTP/1.1" 200 181 0.000476
Create Controller
[2021-04-06 22:44:49,861] ERROR in server: [Errno 107] Transport endpoint is not connected
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host
[2021-04-06 22:44:50,373] ERROR in server: [Errno 107] Transport endpoint is not connected
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host

I'll try to format the software as I did a lot of weird things in that I have forgotten already...

By the way. This project seems really interesting.

After pairing "Change Grip/Order" the controller instantly disconnects "error code"

After pairing "Change Grip/Order" menu, the controller instantly disconnects
Then show error code

Traceback (most recent call last):
File "/usr/local/bin/nxbt", line 11, in
load_entry_point('nxbt', 'console_scripts', 'nxbt')()
File "/home/m/nxbt/nxbt/cli.py", line 229, in main
tui.start()
File "/home/m/nxbt/nxbt/tui.py", line 308, in start
self.mainloop(self.term)
File "/home/m/nxbt/nxbt/tui.py", line 370, in mainloop
self.direct_input_loop(term)
File "/home/m/nxbt/nxbt/tui.py", line 432, in direct_input_loop
from pynput import keyboard
File "/usr/local/lib/python3.8/dist-packages/pynput/init.py", line 40, in
from . import keyboard
File "/usr/local/lib/python3.8/dist-packages/pynput/keyboard/init.py", line 31, in
backend = backend(name)
File "/usr/local/lib/python3.8/dist-packages/pynput/_util/init.py", line 76, in backend
raise ImportError('this platform is not supported: {}'.format(
ImportError: this platform is not supported: ('failed to acquire X connection: Can't connect to display ":0": b'No protocol specified\n'', DisplayConnectionError(':0', b'No protocol specified\n'))
Try one of the following resolutions:
Please make sure that you have an X server running, and that the DISPLAY environment variable is set correctly

Ubuntu 20.04.1
nintendo switch lite

Controller disconnects after closing the "Change Grip/Order" menu

I tried to get nxbt working on Manjaro Linux using sudo pip install nxbt. Install runs successful. However, when I run the demo and go to the "Change Grip/Order" menu, the controller instantly disconnects after first connecting.

The tui connects, but also disconnects after closing the menu. The webapp does not connect at all.

Any ideas?
Here is the error code:

[2020-12-22 15:32:18,026] ERROR in server: [Errno 107] Transport endpoint is not connected
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/lib/python3.8/site-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host

edit: After some more fiddling, I got to connect the controller in demo and tui-mode, IF another controller is connected as first controller. Delay is insanely long, though.

Controller not connecting

Hi!

I've done the tutorial for installing it on Windows and also followed the troubleshooting options but it still doesn't seem to work πŸ€”
I have it installed as the documentation says and my bluetooth device is showing up with lsusb and when using bluetoothctl command I also see the same as shown on the documentation but whenever I run sudo nxbt test it doesn't connect a controller at all to my Switch:

[1] Attempting to initialize NXBT...
Successfully initialized NXBT.

[2] Checking for Bluetooth adapter availability...
1 Bluetooth adapter(s) available.
Adapters: ['/org/bluez/hci0']

[3] Please turn on your Switch and navigate to the 'Change Grip/Order menu.'
Press Enter to continue...
Creating a controller with the first Bluetooth adapter...
Successfully created a controller.

[4] Waiting for controller to connect with the Switch...
Connection timeout is 120 seconds for this test script.
Timeout reached, exiting...

I have tried restarting the VM as well as making sure the bluetooth adapter is added as per what "For persistent device connection to VM" (https://help.ubuntu.com/community/VirtualBox/USB) said.

I have also tried halting the VM, unplugging the adapter, restarting VM, SSH into it and plugging it back in but then I get the following and need to restart the VM again to get it back at the first situation:

[1] Attempting to initialize NXBT...
Successfully initialized NXBT.

[2] Checking for Bluetooth adapter availability...
Unable to detect any Bluetooth adapters.
Please ensure you system has Bluetooth capability.

My Switch is on version 13.2.1

TUI Fails while WebApp works

The webapp works, but the TUI connects for about 1-2 seconds then says "Crashed" and closes. "Software caused connection abort" "Connection reset by peer" But the weird thing is that the webapp still works just fine. By the way I am using the command sudo nxbt tui -r on a raspberry pi 3 (I think its the 3, but it shouldnt matter) I installed it using pip3. If you need the full copypaste error log let me know.

MacOS Support

This is an issue to track MacOS support for NXBT.

Currently, MacOS provides access to the L2CAP layer (necessary for controller emulation) through the IOBluetooth Objective-C API. There are a couple of other tangentially related projects on MacOS that have leveraged this layer to emulate other peripherals. As it stands, it's possible for Python to wrap the Objective-C API and provide this functionality to NXBT.

If anyone has any other ideas or experience in this area, please feel free to comment.

Remote connection API

I would like to run this software on my Ubuntu VM, and a compute heavy python script to run on Windows.

If possible, it would be awesome to have a remote API, where you could enter the IP of the nxbt interface such as:

import nxbt
nxbt.openconnection(10.0.0.75:8000)

This would make it possible to have the relatively lightweight NXBT running on a VM or raspberry pi, and the more compute heavy workload could run on a networked computer.

I realize this is not a simple request, but I think it could prove extremely useful.

Right now, I am using selenium to run the web interface on my pc, and my python script enters macros by pushing buttons on the keyboard, but that requires that geckodriver is the always the active window while the macro is running.

Python API equivalent of reconnect ?

so I was playing around with the methods of using the nxbt

so

sudo nxbt macro -c "text.txt" -r
works really well in terms of connecting to my switch even tho it exits after running and has to reconnect

I was looking for the python API to reconnect and have trouble finding it as using the example to press B i think get stuck at creating and finding my device

How do i set root permissions for raspberry pi

I'm trying to do a "sudo pip3 install nxbt " and its throwing error
Attempting uninstall: psutil
Found existing installation: psutil 5.5.1
ERROR: Cannot uninstall 'psutil'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

I tried Sudo su and then ran the nxbt install and still seeing same error. Am i Missing anything

Webapp works great - scripts and command line do not and are much less performant

I'm not sure why, but on my Pi Zero 2 W I can only get reliable connections and inputs from using the webapp. I've even tried copying the reconnect code and other functionality from the webapp backend into the demo script and it's still very hit/miss.

nxbt test functions, but sometimes it connects immediately, others it times out. The webapp is fast and consistent.

Anything I can do to get some more useful logging or track this down further? This is on an OLED nintendo swith with the latest update. Using nxbt v0.1.4.

Controller disconnect after running a macro

Hello!

On the webapp (windows), always after finishing a macro the controller disconnects and I need to press the "Recreate Controller" button in order to run a new macro.

This is the error I receive on the terminal:

10.0.2.2 - - [09/Dec/2021 15:36:49] "POST /socket.io/?EIO=4&transport=polling&t=NsVrmS1&sid=dVb7FWinR3o8ydzuAACI HTTP/1.1" 200 219 0.001366 post request handler error Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/engineio/server.py", line 431, in handle_request socket.handle_post_request(environ) File "/usr/local/lib/python3.8/dist-packages/engineio/socket.py", line 124, in handle_post_request p = payload.Payload(encoded_payload=body) File "/usr/local/lib/python3.8/dist-packages/engineio/payload.py", line 13, in __init__ self.decode(encoded_payload) File "/usr/local/lib/python3.8/dist-packages/engineio/payload.py", line 44, in decode raise ValueError('Too many packets in payload') ValueError: Too many packets in payload

Is there a way I can prevent it to disconnect or a way to autmatically reconnect the controller?

nxbt command not found

I go through it all and put in 'nxbt test' and get the error 'nxbt: command not found'

Unable to create multiple controllers even when multiple Bluetooth adapters are connected

Not sure if this is a bug or if this is a noob moment but...

NXBT will not allow multiple controllers to be created and the web app outputs the "No adapters available" error despite the fact that I have seven adapters connected and added to the USB list in the virtual machine.

Note that connecting one controller still works fine, it just won't allow more than one controller to be created at once.

Info:

NXBT v0.1.4 (Windows, Virtual Machine)
Nintendo Switch Firmware Version 13.2.1
Bluetooth Adapters being used: TP-Link USB Bluetooth Adapter (UB400) (Cambridge Silicon Radio)

Command Line Image 1
Command Line Image 2
Command Line Image 3

Errno 107 - Transport endpoint is not connected while running nxbt demo

Hi Brikwerk,

I was testing this out on a Raspberry Pi 4 and got an error during the demo. After running the demo I'm unable to connect to the Switch again until I remove the device from my connection history. Do you have any thoughts on how I might go about fixing it? Is there any information you would like for me to collect?

-Chris

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host
[2021-02-18 20:22:05,769] ERROR in server: [Errno 107] Transport endpoint is not connected
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
OSError: [Errno 107] Transport endpoint is not connected

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host```


And here's what happens when I use the webapp
```Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host
[2021-02-18 20:31:57,813] ERROR in server: [Errno 104] Connection reset by peer
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 145, in mainloop
    itr.sendall(msg)
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 189, in save_connection
    itr, ctrl = self.reconnect(self.switch_address)
  File "/usr/local/lib/python3.7/dist-packages/nxbt/controller/server.py", line 357, in reconnect
    test_ctrl.connect((reconnect_address, 17))
OSError: [Errno 113] No route to host```

No gamepads only Keyboard on webapp

This is on windows (only the browser the machine whith nxbt is bare metal) but the problem is the same in linux, the gamepad conected is a xbox core (series) gamepad, although the keyboard works no problem

imagen
(Firefox)

Failing to connect on Raspberry

I am currently trying to connect my Raspberry with my Switch but I can't get it to work.
My Switch is on Version 13.2.0 and i am using a TP-Link UB500 which is using Bluetooth 5.0.

When I am using sudo nxbt test i got following output:

pi@raspberrypi:~ $ sudo nxbt test
[1] Attempting to initialize NXBT...
Successfully initialized NXBT.

[2] Checking for Bluetooth adapter availability...
1 Bluetooth adapter(s) available.
Adapters: ['/org/bluez/hci0']

[3] Please turn on your Switch and navigate to the 'Change Grip/Order menu.'
Press Enter to continue...
Creating a controller with the first Bluetooth adapter...
Successfully created a controller.

[4] Waiting for controller to connect with the Switch...
Connection timeout is 120 seconds for this test script.
Timeout reached, exiting...

I had bluetoothctl open during the test and got following output:

pi@raspberrypi:~ $ sudo bluetoothctl
Agent registered
[bluetooth]# show
Controller E8:48:B8:C8:20:00 (public)
        Name: BlueZ 5.55
        Alias: Pro Controller
        Class: 0x00200000
        Powered: yes
        Discoverable: yes
        DiscoverableTimeout: 0x000000b4
        Pairable: yes
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0537
        Discovering: no
        Roles: central
        Roles: peripheral
Advertising Features:
        ActiveInstances: 0x00 (0)
        SupportedInstances: 0x04 (4)
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name
        SupportedSecondaryChannels: 1M
        SupportedSecondaryChannels: 2M
        SupportedSecondaryChannels: Coded
[CHG] Controller E8:48:B8:C8:20:00 Discoverable: no
[CHG] Controller E8:48:B8:C8:20:00 Powered: no
[CHG] Controller E8:48:B8:C8:20:00 Discovering: no
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00000000
Agent unregistered
[DEL] Controller E8:48:B8:C8:20:00 Pro Controller [default]
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00000000
Agent registered
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00200000
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 PairableTimeout: 0x00000000
[CHG] Controller E8:48:B8:C8:20:00 DiscoverableTimeout: 0x000000b4
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Discoverable: yes
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00002508
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00200000
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Discoverable: no
[CHG] Controller E8:48:B8:C8:20:00 Powered: no
[CHG] Controller E8:48:B8:C8:20:00 Discovering: no
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00000000
Agent unregistered
[DEL] Controller E8:48:B8:C8:20:00 Pro Controller [default]
Agent registered
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00000000
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x00040000
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x000c0000
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Class: 0x002c0000
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 0000180a-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Controller E8:48:B8:C8:20:00 Name: raspberrypi

Unable to connect via API, WEBAPP works

Hey, the title says it, i can connect to the switch via Webapp function, but there ist no success when i use the function with python, as you wrote in your manual.

Can you help me?

Wired USB support

Hello, Is it possible to connect the RPi to switch using a USB-A to USB-C cable, instead of using Bluetooth to reduce input latency?

Support for SwitchOS 12.1.0

I tried all solutions working for OS <12 and even the solution for 12.0.0 but none of them work in 12.1.0. If you need me to debug anything donΒ΄t hesitate to ask.

Use with runit or other systemd alternatives

I am using Artix Linux with Runit and when I try to start nxbt it comes up with this error:
Traceback (most recent call last): File "/usr/bin/nxbt", line 8, in <module> sys.exit(main()) File "/usr/lib/python3.9/site-packages/nxbt/cli.py", line 223, in main demo() File "/usr/lib/python3.9/site-packages/nxbt/cli.py", line 139, in demo nx = Nxbt(debug=args.debug, log_to_file=args.logfile) File "/usr/lib/python3.9/site-packages/nxbt/nxbt.py", line 181, in __init__ toggle_input_plugin(False) File "/usr/lib/python3.9/site-packages/nxbt/bluez.py", line 108, in toggle_input_plugin with open(service_path, "r") as f: FileNotFoundError: [Errno 2] No such file or directory: '/lib/systemd/system/bluetooth.service'
I can't do anything without modifying the code and I don't really want to spend time changing the code. Please could you add support for at least runit. Thanks.

Gamepad for Xbox360 wireless controller doesn't work and miss "control mapping"

Although firefox can't detect gamepad, Chorme does.

However, Xbox360 wireless controller can't work after successfully connected to switch. Could you kindly help?

Environment: Virtualbox + Linuxmint 20.2 uma + xboxdrv
Gamepad: Xbox360 wireless controller + USB wireless adapter

Gamepad tester can detect the controller well.
2022-03-20_004542

NXBT also can detect the xbox gamepad
2022-03-20_005103

However, controller can't work on switch. Control Mapping is missed. When I click "recreate controller", webapp tells "ERROR: no adapters avaialble". I am not sure it is the cause.
2022-03-20_005331
image

vagrant_setup.py UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 1836: invalid start byte

Hey I was getting the following error when trying to run the vagrant setup script.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 1836: invalid start byte`

For some reason on my system (Windows 10, B 21H2) with latest versions of Virtualbox and extensions installed from Chocolatey the encoding for the string was wrong. I changed line 15 to read
usb_string = usb_string.decode("iso8859-1").replace('\r','') and script ran fine from there.

Support for SwitchOS 12

Nintendo has recently pushed SwitchOS v12.0.0 which has changed the functionality behind controller connection and input. NXBT is not compatible with this update and, as such, will throw some ugly errors (or not connect at all) if you attempt to initially connect or reconnect an emulated controller.

I'm currently in the process of adding support for this version. This issue will serve as a hub for how support is coming along.

What's Changed with this New Version

  1. The Switch is pickier with which controllers it connects to. As far as I am aware, there hasn't been a firmware update for Pro Controllers, so this is likely some value or new channel it's looking for.
  2. The Switch is pickier with what input frequency the controller uses. Previously, you could jump to the Pro Controller's default 120Hz input frequency off of the connection. Now, however, the Switch will actually close the Bluetooth connection if the input frequency crosses a certain amount on certain menus/screens.

TODO

  • Initial controller emulation needs tweaking or possibly an overhaul. Using the Bluetooth name, SDP record, Bluetooth class, etc isn't seemingly enough anymore to lure the Switch into connecting.

    • It's possible to reconnect/connect with the Switch using an already connected Bluetooth MAC address from a previously connected Pro Controller.
  • A new variable input frequency needs to be added to the mainloop of the controller server

Infinitely stuck on "Connecting" / No output on demo

I am attempting to run this through a VM using VMWare workstation 16, and while the installation went fine, when attempting to create a Pro controller it will briefly say Loading and then stay stuck on "Connecting" for what is probably forever.

I then attempted to run the demo, hoping to see some error output but nothing happens (no actions on the switch nor does it show any output in the terminal), also stuck waiting "forever".

I read in the no windows support topic that this support should be possible through a VM.

Using Xbox Gamepad over Firefox run into issue

I am try to use Firefox 84.0.2.
I run into issue if i select my Game-pad in
the list. Then the Control is completely lost, i can switch
to Keyboard but after pressing WASD or something he doesn't register anymore.
On Chromium it's working completely fine.
Firefox Console:
Connected main.js:206:13 Gamepad connected with ID: 045e-02ea-Microsoft X-Box One S pad 2 main.js:290:13 Uncaught TypeError: gp.buttons[11] is undefined updateGamepadInput http://127.0.0.1:8000/js/main.js:493 eventLoop http://127.0.0.1:8000/js/main.js:591 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 main.js:493:5 Uncaught TypeError: gp.buttons[11] is undefined updateGamepadInput http://127.0.0.1:8000/js/main.js:493 eventLoop http://127.0.0.1:8000/js/main.js:591 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 eventLoop http://127.0.0.1:8000/js/main.js:618 main.js:493:5 updateGamepadInput http://127.0.0.1:8000/js/main.js:493 eventLoop http://127.0.0.1:8000/js/main.js:591 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618 (Async: FrameRequestCallback) eventLoop http://127.0.0.1:8000/js/main.js:618

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.