Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "src/JoyConBridge/hidapi"]
path = src/JoyConBridge/hidapi
url = https://github.com/libusb/hidapi.git
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

JoyCon Bridge allows you to access the state of any connected JoyCon, including buttons, analog sticks, accelerometer and gyroscope data - all in a simple and straightforward manner.

Included are Visual Studio project files and `CMakeLists.txt`. Tested on Windows and MacOS.

## C++ Example
```cpp
Expand Down Expand Up @@ -78,12 +79,28 @@ This project uses Boost.Python.

If you don't want to change your environment variables, you can manually replace `$(...)` occurrences in `Boost.Python.props`.

## Link with CMake

Something like the following should work in your root `CMakeLists.txt`:

```
...

add_subdirectory(${CMAKE_SOURCE_DIR}/JoyConBridge/src/JoyConBridge)
target_include_directories(YourTarget PRIVATE ${CMAKE_SOURCE_DIR}/JoyConBridge/src/JoyConBridge)

target_link_libraries(YourTarget
PRIVATE
...
JoyConBridge
...
)
```

## Limitations

* Only Bluetooth communication is supported.
* No support for sending rumble.
* Windows only (can be resolved by replacing the `hidapi` version used).


## Special thanks
Expand Down
2 changes: 1 addition & 1 deletion src/JoyConBridge.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.29519.181
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JoyConBridge", "JoyConBridge\JoyConBridge.vcxproj", "{275C1E01-F72F-40A2-ABC0-CF94C9A25C77}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hidapi", "JoyConBridge\hidapi\hidapi.vcxproj", "{A107C21C-418A-4697-BB10-20C3AA60E2E4}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hidapi", "JoyConBridge\hidapi\windows\hidapi.vcxproj", "{A107C21C-418A-4697-BB10-20C3AA60E2E4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyjoyconbridge", "pyjoyconbridge\pyjoyconbridge.vcxproj", "{D1F76D08-00D0-4087-9450-B84649F6BF85}"
EndProject
Expand Down
42 changes: 42 additions & 0 deletions src/JoyConBridge/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
cmake_minimum_required(VERSION 3.10)
project(JoyConBridge)

# Set the C++ standard
set(CMAKE_CXX_STANDARD 17)

# Specify the build configurations
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configurations" FORCE)

# Define the source files
set(SRC_FILES
command_ids.cpp
connect.cpp
exceptions.cpp
HidDevice.cpp
JoyCon.cpp
protocol.cpp
strings.cpp
)

# Define the header files
set(HEADER_FILES
Buffer.h
command_ids.h
connect.h
exceptions.h
HidDevice.h
JoyCon.h
protocol.h
strings.h
)

# Create a static library (you can also choose SHARED for a dynamic library)
add_library(JoyConBridge STATIC ${SRC_FILES} ${HEADER_FILES})

# Include the JoyConBridge source directory
target_include_directories(JoyConBridge PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

# Include hidapi
add_subdirectory(hidapi)
target_include_directories(JoyConBridge PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/hidapi/hidapi)
target_link_libraries(JoyConBridge PRIVATE hidapi)
2 changes: 1 addition & 1 deletion src/JoyConBridge/HidDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <memory>
#include <string>
#include "Buffer.h"
#include "hidapi/hidapi.h"
#include "hidapi/hidapi/hidapi.h"


namespace joy_con_bridge
Expand Down
3 changes: 2 additions & 1 deletion src/JoyConBridge/JoyCon.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#include <algorithm>
#include <cmath>
#include "JoyCon.h"
#include "command_ids.h"
#include "exceptions.h"
#include "hidapi.h"
#include "hidapi/hidapi/hidapi.h"
#include "HidDevice.h"
#include "protocol.h"

Expand Down
18 changes: 9 additions & 9 deletions src/JoyConBridge/JoyConBridge.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
Expand Down Expand Up @@ -173,11 +173,6 @@
<ClCompile Include="protocol.cpp" />
<ClCompile Include="strings.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="hidapi\hidapi.vcxproj">
<Project>{a107c21c-418a-4697-bb10-20c3aa60e2e4}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Buffer.h" />
<ClInclude Include="command_ids.h" />
Expand All @@ -188,6 +183,11 @@
<ClInclude Include="protocol.h" />
<ClInclude Include="strings.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="hidapi\windows\hidapi.vcxproj">
<Project>{a107c21c-418a-4697-bb10-20c3aa60e2e4}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Expand Down
8 changes: 4 additions & 4 deletions src/JoyConBridge/exceptions.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "exceptions.h"
#include "hidapi.h"
#include "hidapi/hidapi/hidapi.h"
#include "strings.h"


Expand All @@ -9,7 +9,7 @@ HidError::HidError(hid_device* device)
: m_error(strings::wideToChar(std::wstring(hid_error(device))))
{}

char const* HidError::what() const
char const* HidError::what() const noexcept
{
return m_error.data();
}
Expand All @@ -22,12 +22,12 @@ HidOpenError::HidOpenError()
: HidError(nullptr)
{}

char const* HidOpenError::what() const
char const* HidOpenError::what() const noexcept
{
return "The device can't be opened.";
}

char const* JoyConNotResponding::what() const
char const* JoyConNotResponding::what() const noexcept
{
return "The device is not responding.";
}
Expand Down
6 changes: 3 additions & 3 deletions src/JoyConBridge/exceptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ class JoyConError : public std::exception

class JoyConNotResponding : public JoyConError
{
char const* what() const override;
char const* what() const noexcept override;
};

class HidError : public std::exception
{
public:
explicit HidError(hid_device* device);

char const* what() const override;
char const* what() const noexcept override;

protected:
std::string m_error;
Expand All @@ -36,6 +36,6 @@ class HidOpenError : public HidError
public:
HidOpenError();

char const* what() const override;
char const* what() const noexcept override;
};
}
1 change: 1 addition & 0 deletions src/JoyConBridge/hidapi
Submodule hidapi added at c3c79a
17 changes: 0 additions & 17 deletions src/JoyConBridge/hidapi/.gitignore

This file was deleted.

26 changes: 0 additions & 26 deletions src/JoyConBridge/hidapi/LICENSE.txt

This file was deleted.

14 changes: 0 additions & 14 deletions src/JoyConBridge/hidapi/Makefile-manual

This file was deleted.

16 changes: 0 additions & 16 deletions src/JoyConBridge/hidapi/Makefile.am

This file was deleted.

35 changes: 0 additions & 35 deletions src/JoyConBridge/hidapi/Makefile.mingw

This file was deleted.

2 changes: 0 additions & 2 deletions src/JoyConBridge/hidapi/ddk_build/.gitignore

This file was deleted.

17 changes: 0 additions & 17 deletions src/JoyConBridge/hidapi/ddk_build/hidapi.def

This file was deleted.

Loading