Giter VIP home page Giter VIP logo

hidviz's Introduction

Hidviz

Hidviz is a GUI application for in-depth analysis of USB HID class devices. The 2 main usecases of this application are reverse-engineering existing devices and developing new USB HID devices.

USB HID class consists of many possible devices, e.g. mice, keyboards, joysticks and gamepads. But that's not all! There are more exotic HID devices, e.g. weather stations, medical equipment (thermometers, blood pressure monitors) or even simulation devices (think of flight sticks!).

Hidviz screenshot

1) Building

Hidviz can be built on various platforms where following prerequisites can be obtained. Currently only Fedora, Ubuntu and MSYS2/Windows are supported and build guide is available for them. There is also experimental support for MacOS which has currently been tested on an M1 based Mac.

1.1) Prerequisities

  • C++ compiler with C++14 support
  • libusb 1.0 (can be called libusbx in you distro)
  • protobuf (v2 is enough)
  • Qt6 base
  • CMake (>=3.2)

1.1.1) Installing prerequisities on Fedora

sudo dnf install cmake gcc-c++ qt6-qtbase-devel protobuf-devel libusbx-devel asio-devel

1.1.2) Installing prerequisities on Ubuntu

sudo apt-get install build-essential qt6-base-dev libprotobuf-dev protobuf-compiler libusb-1.0-0-dev libgl1-mesa-dev cmake libasio-dev

1.1.3) Installing prerequisities on MSYS2/Windows

Please note hidviz is primarily developed on Linux and we currently don't have Windows CI therefore Windows build can be broken at any time. If you find so, please create an issue.

If you do not have MSYS2 installed, firstly follow this guide to install MSYS2.

pacman -S git mingw-w64-x86_64-cmake mingw-w64-x86_64-qt6 mingw-w64-x86_64-libusb \
          mingw-w64-x86_64-protobuf mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-toolchain \
          make

1.1.4) Install prerequsites on MacOS

Please not hidviz on macos is not an officially supported platform. This has been known to work, but your mileage may vary.

You need to install cmake, qt6 and protobuf and libusb via brew. Please also ensure that if you are using an M1 based mac that your build environment matches the host architecture. I was stumped for a while with a failing build because I was using an x86 version of vscode which caused problems when querying arch as a part of the build. Switching to a native terminal fixed the issue for me.

brew install cmake qt@5 protobuf libusb

1.2) Clone and prepare out of source build

Firstly you need to obtain sources from git and prepare directory for out of source build:

git clone --recursive https://github.com/ondrejbudai/hidviz.git
mkdir hidviz/build
cd hidviz/build

Please note you have to do recursive clone.

1.3) Configuring

1.2.1) Configuring on Fedora/Ubuntu (Linux)

cmake ..

1.2.2) Configuring on MSYS2/Windows

cmake -G "Unix Makefiles" ..

1.2.3) Configuring on MacOS

cmake .. -DQt6_DIR=$(brew --prefix qt6)/lib/cmake/Qt6 -DCMAKE_PREFIX_PATH=/opt/homebrew

1.4) Build

make -j$(nproc)

If you are doing MSYS2 build, check before build you are using MinGW32/64 shell, otherwise the build process won't work. More information can be found here.

2) Running

To run this project you need build/hidviz as you current directory for hidviz to work properly!

After successful build you need to run

cd hidviz
./hidviz

2.1) Running on Windows

Unfortunately you cannot use hidviz on Windows straight out of the box. Firstly you need to install custom drivers to devices you want to analyze.

I recommend you using following approach: Download Zadig, run it and install libusbK to device you want to analyze. You can find more information about the need for custom driver on Windows on libusb wiki.

3) Installing (Linux only)

sudo make install

Alternatively, you can install hidviz from Arch Linux's AUR repository:

pacaur -S hidviz

4) License

Hidviz is license under GPLv3+. For more information see LICENSE file.

hidviz's People

Contributors

craftyguy avatar ldab avatar m5p3nc3r avatar mscherer avatar ondrejbudai avatar yarda 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hidviz's Issues

Build is broken

I can't build the program, it seems to complain about a missing header (#include <libhidx/Interface.hh>). I have already installed libhidx but there's no Interface.hh file in libhidx source. Is the branch master considered stable?

I have built and installed libhidx just fine (through make install).

Implement proper webpage

It should contain:

  • basic info for users
  • basic info for developers
  • screenshots
  • downloads
  • proper encryption (#12)

Linking fails

Using gcc9/binutils 2.3.4 and Qt 5.14.1 on openSUSE Tumbleweed.

See log snippet.

P.S: I've also tried clang/gold, but it makes no difference.

qt6 is a mighty bore

It would seem the most common linux distro (ubuntu, linuxmint) doesn't provide qt6 packages. Have users managed to work around this issue? thanks in advance for the help.

libprotobuf ERROR

Compiled with MSYS2-MINGW64 on Windows 10.
Application starts successfully, but when clicking on "Select Device" the following error occurs:

[libprotobuf ERROR C:/repo/mingw-w64-protobuf/src/build-x86_64-w64-mingw32/src/google/protobuf/message_lite.cc:119] Can't parse message of type "libhidx.buffer.GetActiveConfigDescriptor.Response" because it is missing required fields: configDescriptor.length, configDescriptor.descriptorType, configDescriptor.totalLength, configDescriptor.numInterfaces, configDescriptor.configurationValue, configDescriptor.indexConfiguration, configDescriptor.attributes, configDescriptor.maxPower, configDescriptor.extra, configDescriptor.extraLength

That path: C:/repo/mingw-w64-protobuf/... doesn't exist on my PC by the way...

Also, all USB devices have "interface" names like shown below...

libprotobuf-error

Build errors on Ubuntu 22.04

I followed the instructions exactly here: https://github.com/ondrejbudai/hidviz, and the following build errors occurred:

frankray@frank-ubuntu-virtual-machine:~/Repos/hidviz/build$ make -j$(nproc)
[  2%] Running cpp protocol buffer compiler on src/Buffer.proto
[  8%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/Buffer.pb.cc.o
[  5%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/src/Server.cc.o
[ 11%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/src/Utils.cc.o
[ 13%] Linking CXX static library libhidx_server.a
[ 13%] Built target hidx_server
[ 22%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/LibHidx.cc.o
[ 22%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Device.cc.o
[ 22%] Building CXX object libhidx/libhidx_server_daemon/CMakeFiles/libhidx_server_daemon.dir/src/main.cc.o
[ 25%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/InterfaceHandle.cc.o
[ 27%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Interface.cc.o
[ 30%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Parser.cc.o
[ 33%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/hid/Collection.cc.o
[ 36%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/hid/Item.cc.o
[ 38%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/hid/Control.cc.o
[ 41%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Usages.cc.o
In file included from /home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:21:
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:76:14: error: โ€˜shared_ptrโ€™ in namespace โ€˜stdโ€™ does not name a template type
   76 |         std::shared_ptr<InterfaceHandle> getHandle();
      |              ^~~~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:29:1: note: โ€˜std::shared_ptrโ€™ is defined in header โ€˜<memory>โ€™; did you forget to โ€˜#include <memory>โ€™?
   28 | #include <string>
  +++ |+#include <memory>
   29 | 
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:120:14: error: โ€˜weak_ptrโ€™ in namespace โ€˜stdโ€™ does not name a template type
  120 |         std::weak_ptr<InterfaceHandle> m_handle;
      |              ^~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:120:9: note: โ€˜std::weak_ptrโ€™ is defined in header โ€˜<memory>โ€™; did you forget to โ€˜#include <memory>โ€™?
  120 |         std::weak_ptr<InterfaceHandle> m_handle;
      |         ^~~
[ 44%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/hid/Usage.cc.o
[ 47%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Connector.cc.o
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc: In member function โ€˜void libhidx::Interface::parseHidReportDesc()โ€™:
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:84:23: error: โ€˜getHandleโ€™ was not declared in this scope; did you mean โ€˜handleโ€™?
   84 |         auto handle = getHandle();
      |                       ^~~~~~~~~
      |                       handle
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:95:114: error: no matching function for call to โ€˜libhidx::ConnectionException::ConnectionException(<brace-enclosed initializer list>)โ€™
   95 |             throw ConnectionException{data.first, "Libusb control transfer failed: " + std::to_string(data.first)};
      |                                                                                                                  ^
In file included from /home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:24:
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:37:18: note: candidate: โ€˜libhidx::ConnectionException::ConnectionException(int, const string&)โ€™
   37 |         explicit ConnectionException(int ev, const std::string& err) : std::system_error{ev, std::generic_category(),  err}{}
      |                  ^~~~~~~~~~~~~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:37:18: note:   conversion of argument 1 would be ill-formed:
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate: โ€˜libhidx::ConnectionException::ConnectionException(const libhidx::ConnectionException&)โ€™
   35 |     class ConnectionException : public std::system_error {
      |           ^~~~~~~~~~~~~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note:   candidate expects 1 argument, 2 provided
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate: โ€˜libhidx::ConnectionException::ConnectionException(libhidx::ConnectionException&&)โ€™
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note:   candidate expects 1 argument, 2 provided
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc: In member function โ€˜void libhidx::Interface::runner()โ€™:
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:149:23: error: โ€˜getHandleโ€™ was not declared in this scope; did you mean โ€˜handleโ€™?
  149 |         auto handle = getHandle();
      |                       ^~~~~~~~~
      |                       handle
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:161:103: error: no matching function for call to โ€˜std::vector<unsigned char>::vector(<brace-enclosed initializer list>)โ€™
  161 |                 std::vector<unsigned char> data{std::begin(response.data()), std::end(response.data())};
      |                                                                                                       ^
In file included from /usr/include/c++/11/vector:67,
                 from /usr/include/c++/11/functional:62,
                 from /home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:26,
                 from /home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:21:
/usr/include/c++/11/bits/stl_vector.h:653:9: note: candidate: โ€˜template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _Tp = unsigned char; _Alloc = std::allocator<unsigned char>]โ€™
  653 |         vector(_InputIterator __first, _InputIterator __last,
      |         ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:653:9: note:   template argument deduction/substitution failed:
/usr/include/c++/11/bits/stl_vector.h:625:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  625 |       vector(initializer_list<value_type> __l,
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:625:7: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/11/bits/stl_vector.h:607:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  607 |       vector(vector&& __rv, const allocator_type& __m)
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:607:7: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/11/bits/stl_vector.h:589:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>; std::false_type = std::integral_constant<bool, false>]โ€™
  589 |       vector(vector&& __rv, const allocator_type& __m, false_type)
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:589:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/11/bits/stl_vector.h:585:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>; std::true_type = std::integral_constant<bool, true>]โ€™
  585 |       vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:585:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/11/bits/stl_vector.h:575:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  575 |       vector(const vector& __x, const allocator_type& __a)
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:575:7: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/11/bits/stl_vector.h:572:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>]โ€™
  572 |       vector(vector&&) noexcept = default;
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:572:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/11/bits/stl_vector.h:553:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>]โ€™
  553 |       vector(const vector& __x)
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:553:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/11/bits/stl_vector.h:522:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = unsigned char; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  522 |       vector(size_type __n, const value_type& __value,
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:522:7: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/11/bits/stl_vector.h:510:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  510 |       vector(size_type __n, const allocator_type& __a = allocator_type())
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:510:7: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/11/bits/stl_vector.h:497:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<unsigned char>]โ€™
  497 |       vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:497:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/11/bits/stl_vector.h:487:7: note: candidate: โ€˜std::vector<_Tp, _Alloc>::vector() [with _Tp = unsigned char; _Alloc = std::allocator<unsigned char>]โ€™
  487 |       vector() = default;
      |       ^~~~~~
/usr/include/c++/11/bits/stl_vector.h:487:7: note:   candidate expects 0 arguments, 2 provided
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc: At global scope:
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:176:38: error: no declaration matches โ€˜std::shared_ptr<libhidx::InterfaceHandle> libhidx::Interface::getHandle()โ€™
  176 |     std::shared_ptr<InterfaceHandle> Interface::getHandle() {
      |                                      ^~~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:176:38: note: no functions named โ€˜std::shared_ptr<libhidx::InterfaceHandle> libhidx::Interface::getHandle()โ€™
In file included from /home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:21:
/home/frankray/Repos/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:45:11: note: โ€˜class libhidx::Interfaceโ€™ defined here
   45 |     class Interface {
      |           ^~~~~~~~~
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc: In member function โ€˜void libhidx::Interface::sendOutputReport(const std::vector<unsigned char>&)โ€™:
/home/frankray/Repos/hidviz/libhidx/libhidx/src/Interface.cc:253:23: error: โ€˜getHandleโ€™ was not declared in this scope; did you mean โ€˜handleโ€™?
  253 |         auto handle = getHandle();
      |                       ^~~~~~~~~
      |                       handle
[ 50%] Linking CXX executable libhidx_server_daemon
[ 50%] Built target libhidx_server_daemon
make[2]: *** [libhidx/libhidx/CMakeFiles/hidx.dir/build.make:118: libhidx/libhidx/CMakeFiles/hidx.dir/src/Interface.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:222: libhidx/libhidx/CMakeFiles/hidx.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

I checked my version of gcc and it is:

frankray@frank-ubuntu-virtual-machine:~/Repos/hidviz/build$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Won't build [AUR]

/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceSelector.cc.o: in function `hidviz::DeviceSelector::DeviceSelector(libhidx::LibHidx&)':
DeviceSelector.cc:(.text+0x4d): undefined reference to `vtable for hidviz::DeviceSelector'
/usr/bin/ld: DeviceSelector.cc:(.text+0x5f): undefined reference to `vtable for hidviz::DeviceSelector'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceSelector.cc.o: in function `hidviz::DeviceSelector::~DeviceSelector()':
DeviceSelector.cc:(.text+0x205): undefined reference to `vtable for hidviz::DeviceSelector'
/usr/bin/ld: DeviceSelector.cc:(.text+0x217): undefined reference to `vtable for hidviz::DeviceSelector'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceSelector.cc.o: in function `hidviz::DeviceSelector::selectDevice()':
DeviceSelector.cc:(.text+0x635): undefined reference to `hidviz::DeviceSelector::deviceSelected(libhidx::Interface&)'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceSelector.cc.o: in function `hidviz::DeviceSelector::reloadDevices()':
DeviceSelector.cc:(.text+0x7a2): undefined reference to `hidviz::DeviceSelector::listCleared()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/Window.cc.o: in function `hidviz::Window::Window(QWidget*)':
Window.cc:(.text+0x5c): undefined reference to `vtable for hidviz::Window'
/usr/bin/ld: Window.cc:(.text+0x71): undefined reference to `vtable for hidviz::Window'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/Window.cc.o: in function `hidviz::Window::~Window()':
Window.cc:(.text+0x74d): undefined reference to `vtable for hidviz::Window'
/usr/bin/ld: Window.cc:(.text+0x75f): undefined reference to `vtable for hidviz::Window'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/Window.cc.o: in function `hidviz::Window::openDeviceSelector()':
Window.cc:(.text+0x8cf): undefined reference to `hidviz::DeviceSelector::deviceSelected(libhidx::Interface&)'
/usr/bin/ld: Window.cc:(.text+0x937): undefined reference to `hidviz::DeviceSelector::listCleared()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/Window.cc.o: in function `QMetaObject::Connection QObject::connect<void (hidviz::DeviceSelector::*)(libhidx::Interface&), void (hidviz::Window::*)(libhidx::Interface&)>(QtPrivate::FunctionPointer<void (hidviz::DeviceSelector::*)(libhidx::Interface&)>::Object const*, void (hidviz::DeviceSelector::*)(libhidx::Interface&), QtPrivate::FunctionPointer<void (hidviz::Window::*)(libhidx::Interface&)>::Object const*, void (hidviz::Window::*)(libhidx::Interface&), Qt::ConnectionType)':
Window.cc:(.text._ZN7QObject7connectIMN6hidviz14DeviceSelectorEFvRN7libhidx9InterfaceEEMNS1_6WindowEFvS5_EEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESF_PKNSE_IT0_E6ObjectESK_N2Qt14ConnectionTypeE[_ZN7QObject7connectIMN6hidviz14DeviceSelectorEFvRN7libhidx9InterfaceEEMNS1_6WindowEFvS5_EEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESF_PKNSE_IT0_E6ObjectESK_N2Qt14ConnectionTypeE]+0x87): undefined reference to `hidviz::DeviceSelector::staticMetaObject'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/Window.cc.o: in function `QMetaObject::Connection QObject::connect<void (hidviz::DeviceSelector::*)(), void (hidviz::Window::*)()>(QtPrivate::FunctionPointer<void (hidviz::DeviceSelector::*)()>::Object const*, void (hidviz::DeviceSelector::*)(), QtPrivate::FunctionPointer<void (hidviz::Window::*)()>::Object const*, void (hidviz::Window::*)(), Qt::ConnectionType)':
Window.cc:(.text._ZN7QObject7connectIMN6hidviz14DeviceSelectorEFvvEMNS1_6WindowEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESC_PKNSB_IT0_E6ObjectESH_N2Qt14ConnectionTypeE[_ZN7QObject7connectIMN6hidviz14DeviceSelectorEFvvEMNS1_6WindowEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESC_PKNSB_IT0_E6ObjectESH_N2Qt14ConnectionTypeE]+0x87): undefined reference to `hidviz::DeviceSelector::staticMetaObject'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/ControlWidget.cc.o: in function `hidviz::hid::ControlWidget::ControlWidget(libhidx::hid::Control*, QWidget*)':
ControlWidget.cc:(.text+0x3c): undefined reference to `vtable for hidviz::hid::ControlWidget'
/usr/bin/ld: ControlWidget.cc:(.text+0x4e): undefined reference to `vtable for hidviz::hid::ControlWidget'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/ControlWidget.cc.o: in function `hidviz::hid::ControlWidget::initUsages()':
ControlWidget.cc:(.text+0x4ab): undefined reference to `hidviz::hid::ControlWidget::dataUpdated()'
/usr/bin/ld: ControlWidget.cc:(.text+0x4bb): undefined reference to `hidviz::hid::UsageWidget::dataUpdated()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/ControlWidget.cc.o: in function `QMetaObject::Connection QObject::connect<void (hidviz::hid::UsageWidget::*)(), void (hidviz::hid::ControlWidget::*)()>(QtPrivate::FunctionPointer<void (hidviz::hid::UsageWidget::*)()>::Object const*, void (hidviz::hid::UsageWidget::*)(), QtPrivate::FunctionPointer<void (hidviz::hid::ControlWidget::*)()>::Object const*, void (hidviz::hid::ControlWidget::*)(), Qt::ConnectionType)':
ControlWidget.cc:(.text._ZN7QObject7connectIMN6hidviz3hid11UsageWidgetEFvvEMNS2_13ControlWidgetEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESD_PKNSC_IT0_E6ObjectESI_N2Qt14ConnectionTypeE[_ZN7QObject7connectIMN6hidviz3hid11UsageWidgetEFvvEMNS2_13ControlWidgetEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESD_PKNSC_IT0_E6ObjectESI_N2Qt14ConnectionTypeE]+0x87): undefined reference to `hidviz::hid::UsageWidget::staticMetaObject'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `hidviz::DeviceView::DeviceView(libhidx::Interface&, QWidget*)::{lambda()#1}::operator()() const':
DeviceView.cc:(.text+0x17): undefined reference to `hidviz::DeviceView::dataRead()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `hidviz::DeviceView::DeviceView(libhidx::Interface&, QWidget*)':
DeviceView.cc:(.text+0x87): undefined reference to `vtable for hidviz::DeviceView'
/usr/bin/ld: DeviceView.cc:(.text+0x9c): undefined reference to `vtable for hidviz::DeviceView'
/usr/bin/ld: DeviceView.cc:(.text+0x1d9): undefined reference to `hidviz::DeviceView::dataRead()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `hidviz::DeviceView::addItem(libhidx::hid::Item*, hidviz::hid::ItemWidget*) [clone .localalias]':
DeviceView.cc:(.text+0x622): undefined reference to `hidviz::hid::ControlWidget::dataUpdated()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `hidviz::DeviceView::updateData()':
DeviceView.cc:(.text+0x824): undefined reference to `typeinfo for hidviz::hid::ControlWidget'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `hidviz::DeviceView::~DeviceView()':
DeviceView.cc:(.text+0x8a9): undefined reference to `vtable for hidviz::DeviceView'
/usr/bin/ld: DeviceView.cc:(.text+0x8bb): undefined reference to `vtable for hidviz::DeviceView'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `QMetaObject::Connection QObject::connect<void (hidviz::DeviceView::*)(), void (hidviz::DeviceView::*)()>(QtPrivate::FunctionPointer<void (hidviz::DeviceView::*)()>::Object const*, void (hidviz::DeviceView::*)(), QtPrivate::FunctionPointer<void (hidviz::DeviceView::*)()>::Object const*, void (hidviz::DeviceView::*)(), Qt::ConnectionType)':
DeviceView.cc:(.text._ZN7QObject7connectIMN6hidviz10DeviceViewEFvvES4_EEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectES9_PKNS8_IT0_E6ObjectESE_N2Qt14ConnectionTypeE[_ZN7QObject7connectIMN6hidviz10DeviceViewEFvvES4_EEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectES9_PKNS8_IT0_E6ObjectESE_N2Qt14ConnectionTypeE]+0x87): undefined reference to `hidviz::DeviceView::staticMetaObject'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/DeviceView.cc.o: in function `QMetaObject::Connection QObject::connect<void (hidviz::hid::ControlWidget::*)(), void (hidviz::DeviceView::*)()>(QtPrivate::FunctionPointer<void (hidviz::hid::ControlWidget::*)()>::Object const*, void (hidviz::hid::ControlWidget::*)(), QtPrivate::FunctionPointer<void (hidviz::DeviceView::*)()>::Object const*, void (hidviz::DeviceView::*)(), Qt::ConnectionType)':
DeviceView.cc:(.text._ZN7QObject7connectIMN6hidviz3hid13ControlWidgetEFvvEMNS1_10DeviceViewEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESD_PKNSC_IT0_E6ObjectESI_N2Qt14ConnectionTypeE[_ZN7QObject7connectIMN6hidviz3hid13ControlWidgetEFvvEMNS1_10DeviceViewEFvvEEEN11QMetaObject10ConnectionEPKN9QtPrivate15FunctionPointerIT_E6ObjectESD_PKNSC_IT0_E6ObjectESI_N2Qt14ConnectionTypeE]+0x87): undefined reference to `hidviz::hid::ControlWidget::staticMetaObject'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/UsageWidget.cc.o: in function `hidviz::hid::UsageWidget::UsageWidget(libhidx::hid::Usage&, QWidget*)':
UsageWidget.cc:(.text+0x49): undefined reference to `vtable for hidviz::hid::UsageWidget'
/usr/bin/ld: UsageWidget.cc:(.text+0x5b): undefined reference to `vtable for hidviz::hid::UsageWidget'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/UsageWidget.cc.o: in function `hidviz::hid::UsageWidget::initOutput()::{lambda()#2}::operator()() const':
UsageWidget.cc:(.text+0x2b6): undefined reference to `hidviz::hid::UsageWidget::dataUpdated()'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/UsageWidget.cc.o: in function `hidviz::hid::UsageWidget::~UsageWidget()':
UsageWidget.cc:(.text+0x707): undefined reference to `vtable for hidviz::hid::UsageWidget'
/usr/bin/ld: UsageWidget.cc:(.text+0x719): undefined reference to `vtable for hidviz::hid::UsageWidget'
/usr/bin/ld: CMakeFiles/hidviz.dir/src/hid/UsageWidget.cc.o: in function `auto hidviz::hid::UsageWidget::initOutput()::{lambda(auto:1)#1}::operator()<bool>(bool) const':
UsageWidget.cc:(.text+0xd77): undefined reference to `hidviz::hid::UsageWidget::dataUpdated()'
collect2: error: ld returned 1 exit status
make[2]: *** [hidviz/CMakeFiles/hidviz.dir/build.make:314: hidviz/hidviz] Error 1
make[1]: *** [CMakeFiles/Makefile2:197: hidviz/CMakeFiles/hidviz.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

build errors on MSYS2

I tried to build on windows using MSYS2. i followed all steps but the last one gives errors:

$ make -j$(nproc)
[ 14%] Built target hidx_server
Consolidate compiler generated dependencies of target hidx
[ 17%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/Interface.cc.obj
In file included from D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:21:
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:76:14: error: 'shared_ptr' in namespace 'std' does not name a template type
76 | std::shared_ptr getHandle();
| ^~~~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:29:1: note: 'std::shared_ptr' is defined in header ''; did you forget to '#include '?
28 | #include
+++ |+#include
29 |
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:120:14: error: 'weak_ptr' in namespace 'std' does not name a template type
120 | std::weak_ptr m_handle;
| ^~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:120:9: note: 'std::weak_ptr' is defined in header ''; did you forget to '#include '?
120 | std::weak_ptr m_handle;
| ^~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc: In member function 'void libhidx::Interface::parseHidReportDesc()':
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:84:23: error: 'getHandle' was not declared in this scope; did you mean 'handle'?
84 | auto handle = getHandle();
| ^~~~~~~~~
| handle
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:95:114: error: no matching function for call to 'libhidx::ConnectionException::ConnectionException()'
95 | throw ConnectionException{data.first, "Libusb control transfer failed: " + std::to_string(data.first)};
| ^
In file included from D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:24:
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:37:18: note: candidate: 'libhidx::ConnectionException::ConnectionException(int, const string&)'
37 | explicit ConnectionException(int ev, const std::string& err) : std::system_error{ev, std::generic_category(), err}{}
| ^~~~~~~~~~~~~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:37:18: note: conversion of argument 1 would be ill-formed:
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate: 'libhidx::ConnectionException::ConnectionException(const libhidx::ConnectionException&)'
35 | class ConnectionException : public std::system_error {
| ^~~~~~~~~~~~~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate expects 1 argument, 2 provided
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate: 'libhidx::ConnectionException::ConnectionException(libhidx::ConnectionException&&)'
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/InterfaceHandle.hh:35:11: note: candidate expects 1 argument, 2 provided
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc: In member function 'void libhidx::Interface::runner()':
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:149:23: error: 'getHandle' was not declared in this scope; did you mean 'handle'?
149 | auto handle = getHandle();
| ^~~~~~~~~
| handle
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:161:103: error: no matching function for call to 'std::vector::vector()'
161 | std::vector data{std::begin(response.data()), std::end(response.data())};
| ^
In file included from D:/msys64/mingw64/include/c++/11.2.0/vector:67,
from D:/msys64/mingw64/include/c++/11.2.0/functional:62,
from D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:26,
from D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:21:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:653:9: note: candidate: 'template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = _InputIterator; = ; _Tp = unsigned char; _Alloc = std::allocator]'
653 | vector(_InputIterator __first, _InputIterator __last,
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:653:9: note: template argument deduction/substitution failed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:625:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
625 | vector(initializer_list<value_type> __l,
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:625:7: note: conversion of argument 1 would be ill-formed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:607:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
607 | vector(vector&& __rv, const allocator_type& __m)
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:607:7: note: conversion of argument 1 would be ill-formed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:589:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator; std::false_type = std::integral_constant<bool, false>]'
589 | vector(vector&& __rv, const allocator_type& __m, false_type)
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:589:7: note: candidate expects 3 arguments, 2 provided
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:585:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator; std::true_type = std::integral_constant<bool, true>]'
585 | vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:585:7: note: candidate expects 3 arguments, 2 provided
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:575:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
575 | vector(const vector& __x, const allocator_type& __a)
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:575:7: note: conversion of argument 1 would be ill-formed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:572:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = unsigned char; _Alloc = std::allocator]'
572 | vector(vector&&) noexcept = default;
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:572:7: note: candidate expects 1 argument, 2 provided
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:553:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = unsigned char; _Alloc = std::allocator]'
553 | vector(const vector& __x)
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:553:7: note: candidate expects 1 argument, 2 provided
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:522:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::size_type = long long unsigned int; std::vector<_Tp, _Alloc>::value_type = unsigned char; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
522 | vector(size_type __n, const value_type& __value,
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:522:7: note: conversion of argument 1 would be ill-formed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:510:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::size_type = long long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
510 | vector(size_type __n, const allocator_type& __a = allocator_type())
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:510:7: note: conversion of argument 1 would be ill-formed:
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:497:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = unsigned char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::allocator_type = std::allocator]'
497 | vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:497:7: note: candidate expects 1 argument, 2 provided
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:487:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector() [with _Tp = unsigned char; _Alloc = std::allocator]'
487 | vector() = default;
| ^~~~~~
D:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:487:7: note: candidate expects 0 arguments, 2 provided
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc: At global scope:
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:176:38: error: no declaration matches 'std::shared_ptrlibhidx::InterfaceHandle libhidx::Interface::getHandle()'
176 | std::shared_ptr Interface::getHandle() {
| ^~~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:176:38: note: no functions named 'std::shared_ptrlibhidx::InterfaceHandle libhidx::Interface::getHandle()'
In file included from D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:21:
D:/msys64/home/mark/hidviz/libhidx/libhidx/include/libhidx/Interface.hh:45:11: note: 'class libhidx::Interface' defined here
45 | class Interface {
| ^~~~~~~~~
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc: In member function 'void libhidx::Interface::sendOutputReport(const std::vector&)':
D:/msys64/home/mark/hidviz/libhidx/libhidx/src/Interface.cc:253:23: error: 'getHandle' was not declared in this scope; did you mean 'handle'?
253 | auto handle = getHandle();
| ^~~~~~~~~
| handle
make[2]: *** [libhidx/libhidx/CMakeFiles/hidx.dir/build.make:122: libhidx/libhidx/CMakeFiles/hidx.dir/src/Interface.cc.obj] Error 1
make[1]: *** [CMakeFiles/Makefile2:204: libhidx/libhidx/CMakeFiles/hidx.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

i have no clue how to solve these errors. so any help would be appreciated.

Linking fails with gcc 13.2.1 on arch linux

Linking fails due to some missing symbols from libabsl:

[ 24%] Building CXX object libhidx/libhidx/CMakeFiles/hidx.dir/src/hid/Control.cc.o
/usr/bin/ld: ../libhidx_server/libhidx_server.a(Server.cc.o): undefined reference to symbol '_ZN4absl12lts_2023080212log_internal17MakeCheckOpStringIllEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_T0_PKc'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libabsl_log_internal_check_op.so.2308.0.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [libhidx/libhidx_server_daemon/CMakeFiles/libhidx_server_daemon.dir/build.make:100: libhidx/libhidx_server_daemon/libhidx_server_daemon] Error 1
make[1]: *** [CMakeFiles/Makefile2:302: libhidx/libhidx_server_daemon/CMakeFiles/libhidx_server_daemon.dir/all] Error 2

Not finding std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* absl::lts_20230802::log_internal::MakeCheckOpString<long, long>(long, long, char const*).
This can be fixed by patching libhidx/libhidx_server/CMakeLists.txt to link against the missing abseil pieces

--- a/libhidx/libhidx_server/CMakeLists.txt
+++ b/libhidx/libhidx_server/CMakeLists.txt
@@ -9,6 +9,7 @@ set_property(TARGET libusb-1.0 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LIBUSB_1
 set_property(TARGET libusb-1.0 PROPERTY IMPORTED_LOCATION ${LIBUSB_1_LIBRARY})
 
 find_package(Protobuf REQUIRED)
+find_package(absl REQUIRED)
 
 protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS src/Buffer.proto)
 
@@ -28,6 +29,8 @@ target_include_directories(hidx_server PUBLIC
 target_link_libraries(hidx_server
         libusb-1.0
         asio
+	absl_log_internal_message
+	absl_log_internal_check_op
         ${PROTOBUF_LIBRARIES}
         )

hidviz - missing usb devices.

For below ubuntu, hidviz don't show any usb devices, for regular user and well as in root mode:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu

obraz

Hang when textbox is clicked

I've cloned, compiled and ran on Fedora 31 to test out a TomTom Fitness band.

How to replicate the error
After device selection, the window appears as in the screenshot. Once I select a textbox then another, the application hangs and has to be force-closed.

Dependency versions
gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC)
protobuf-devel version 3.6.1 - 6.module_f31+6519+12cd0b27
libusbx-devel 1.0.22 - libusbx-1.0.22-4.fc31.src.rpm
qt5-qbase-devel 5.13.2 - qt5-qtbase-5.13.2-1.fc31.src.rpm
linux 5.4.8-200

dmesg logs
hid-generic 0003:1390:7480.0001: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
usb 3-2: USB disconnect, device number 2
usb 3-2: new full-speed USB device number 3 using xhci_hcd
usb 3-2: New USB device found, idVendor=1390, idProduct=7480, bcdDevice= 2.00
usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-2: Product: TomTom Fitness Band
usb 3-2: Manufacturer: TomTom
usb 3-2: SerialNumber: JD5127H01098
hid-generic 0003:1390:7480.0002: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
hid-generic 0003:1390:7480.0003: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
hid-generic 0003:1390:7480.0004: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
hid-generic 0003:1390:7480.0005: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
hid-generic 0003:1390:7480.0006: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0
hid-generic 0003:1390:7480.0007: hiddev96,hidraw0: USB HID v1.01 Device [TomTom TomTom Fitness Band] on usb-0000:00:14.0-2/input0

2020-01-19-220015_1366x768_scrot
2020-01-19-220305_1366x768_scrot

Let me know if there's any other data I can provide.

Support proper TLS cert/verification on hidviz.org

I'm maintaining the Arch Linux package (just in case you don't remember me) and currently hidviz.org's HTTPS TLS cert fails server verification (the cert's domain doesn't match the url). This is very important for insuring some amount of integrity for the source code.

Mac updates

Hi community

I have hidviz working on my mac, it only needs a few brew packages installed (cmake, qt@5, libusb protobuf) and an update to the CMakeLists.txt as below

diff --git a/hidviz/CMakeLists.txt b/hidviz/CMakeLists.txt
index f46f61e..3dde377 100644
--- a/hidviz/CMakeLists.txt
+++ b/hidviz/CMakeLists.txt
@@ -13,6 +13,9 @@ endif()
 # Find the QtWidgets library
 find_package(Qt5 REQUIRED COMPONENTS Widgets)
 
+find_package(Protobuf REQUIRED)
+include_directories(${PROTOBUF_INCLUDE_DIRS})
+
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTORCC ON)

Would you like me to create a PR containing this and updating the documentation accordingly?

Can't build

Build fails at make stage with

libhidx/libhidx_server/CMakeFiles/hidx_server.dir/build.make:61: *** target pattern contains no '%'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:248: libhidx/libhidx_server/CMakeFiles/hidx_server.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Build error on Arch Linux with version 0.1.4

Unfortunately it does not build on Arch with the provided AUR Package. And sorry for the long quote.

[caberliner@home ~]$ pacaur -S hidviz
:: Package hidviz not found in repositories, trying AUR...
:: resolving dependencies...
:: looking for inter-conflicts...

AUR Packages (1) hidviz-0.1.4-1

:: Proceed with installation? [Y/n]

:: Retrieving package(s)...
:: hidviz build files are up-to-date -- skipping
:: Checking hidviz integrity...
==> Making package: hidviz 0.1.4-1 (So 31. Dez 16:43:32 CET 2017)
==> Retrieving sources...
-> Found hidviz-0.1.4.tar.gz
==> Validating source files with sha256sums...
hidviz-0.1.4.tar.gz ... Passed
:: Building hidviz package(s)...
==> Making package: hidviz 0.1.4-1 (So 31. Dez 16:43:41 CET 2017)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> WARNING: Using existing $srcdir/ tree
==> Removing existing $pkgdir/ directory...
==> Starting build()...
[ 2%] Running C++ protocol buffer compiler on src/Buffer.proto
Scanning dependencies of target hidx_server
[ 5%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/Buffer.pb.cc.o
[ 8%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/src/Server.cc.o
[ 11%] Building CXX object libhidx/libhidx_server/CMakeFiles/hidx_server.dir/src/Utils.cc.o
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc: In function 'void libhidx::server::run(std::__cxx11::string, bool)':
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:387:14: error: 'function' is not a member of 'std'
std::function<void(const asio::error_code& ec)> timerHandler;
^~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:387:14: note: suggested alternative: 'is_function'
std::function<void(const asio::error_code& ec)> timerHandler;
^~~~~~~~
is_function
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:387:23: error: expected primary-expression before 'void'
std::function<void(const asio::error_code& ec)> timerHandler;
^~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:389:9: error: 'timerHandler' was not declared in this scope
timerHandler = [&](const asio::error_code&) {
^~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:389:9: note: suggested alternative: 'file_handle'
timerHandler = [&](const asio::error_code&) {
^~~~~~~~~~~~
file_handle
In file included from /home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio.hpp:42:0,
from /home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/include/libhidx/server/Utils.hh:27,
from /home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:24:
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc: In member function 'void libhidx::server::Loop::operator()(asio::error_code, std::size_t)':
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:304:20: warning: this statement may fall through [-Wimplicit-fallthrough=]
case -1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:338:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(8), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:13: note: here
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:338:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(8), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:21: warning: this statement may fall through [-Wimplicit-fallthrough=]
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:338:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(8), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:309:18: note: here
else case 0:
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:338:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(8), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:304:20: warning: this statement may fall through [-Wimplicit-fallthrough=]
case -1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:346:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(m_dataLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:13: note: here
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:346:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(m_dataLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:21: warning: this statement may fall through [-Wimplicit-fallthrough=]
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:346:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(m_dataLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:309:18: note: here
else case 0:
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:346:21: note: in expansion of macro 'yield'
yield asio::async_read(m_socket, m_buffer->prepare(m_dataLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:304:20: warning: this statement may fall through [-Wimplicit-fallthrough=]
case -1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:358:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(messageLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:13: note: here
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:358:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(messageLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:21: warning: this statement may fall through [-Wimplicit-fallthrough=]
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:358:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(messageLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:309:18: note: here
else case 0:
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:358:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(messageLength), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:304:20: warning: this statement may fall through [-Wimplicit-fallthrough=]
case -1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:359:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(m_messageOut), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:13: note: here
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:359:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(m_messageOut), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:307:21: warning: this statement may fall through [-Wimplicit-fallthrough=]
case 1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:359:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(m_messageOut), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:309:18: note: here
else case 0:
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:324:26: note: in expansion of macro 'ASIO_CORO_YIELD_IMPL'
define ASIO_CORO_YIELD ASIO_CORO_YIELD_IMPL(LINE)
^~~~~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:18:16: note: in expansion of macro 'ASIO_CORO_YIELD'
define yield ASIO_CORO_YIELD
^~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:359:21: note: in expansion of macro 'yield'
yield asio::async_write(m_socket, asio::buffer(m_messageOut), *this);
^~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:283:14: warning: this statement may fall through [-Wimplicit-fallthrough=]
case -1: if (_coro_value)
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:14:21: note: in expansion of macro 'ASIO_CORO_REENTER'
define reenter(c) ASIO_CORO_REENTER(c)
^~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:336:13: note: in expansion of macro 'reenter'
reenter(this) {
^~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/coroutine.hpp:292:10: note: here
else case 0:
^
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/build/libhidx/asio/asio/include/asio/yield.hpp:14:21: note: in expansion of macro 'ASIO_CORO_REENTER'
define reenter(c) ASIO_CORO_REENTER(c)
^~~~~~~~~~~~~~~~~
/home/caberliner/.cache/pacaur/hidviz/src/hidviz-0.1.4/libhidx/libhidx_server/src/Server.cc:336:13: note: in expansion of macro 'reenter'
reenter(this) {
^~~~~~~
make[2]: *** [libhidx/libhidx_server/CMakeFiles/hidx_server.dir/build.make:71: libhidx/libhidx_server/CMakeFiles/hidx_server.dir/src/Server.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:255: libhidx/libhidx_server/CMakeFiles/hidx_server.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
==> ERROR: A failure occurred in build().
Aborting...
:: failed to build hidviz package(s)

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.