ContactGlove C++/C/Rust SDK V2
ContactGlove C++/C/Rust SDK V2は、C++/C/Rust向けのネイティブライブラリです。 C++ API、C言語から直接使える安定したC ABI v2、公式Rust Bindingを提供します。
配布物の内容
bin/
contactglove-basic-usage(.exe)
contactglove-c-basic-usage(.exe)
ContactGloveSDKv2.dll / ContactGloveSDKv2d.dll (Windows、dはDebug構成用)
include/
contactglove/ContactGloveSDKv2.hpp
contactglove/ContactGloveSDKv2C.h
lib/
libContactGloveSDKv2.so / libContactGloveSDKv2.dylib / ContactGloveSDKv2.lib / ContactGloveSDKv2d.lib
cmake/ContactGloveSDKv2/
rust/
Cargo.toml
contactglove-sdk-v2/
contactglove-sdk-v2-sys/
share/
ContactGloveSDKv2/examples/
doc/ContactGloveSDKv2/APIリファレンスをWebで参照できます。
インストール
Windows (ZIP)
ZIPを展開し、展開されたフォルダをSDK rootとして使用します。
Expand-Archive .\ContactGloveSDKv2Cpp-<version>-Windows-AMD64.zip -DestinationPath .Linux (TGZ)
TGZを展開し、展開されたフォルダをSDK rootとして使用します。
tar -xzf ContactGloveSDKv2Cpp-<version>-Linux-x86_64.tar.gzmacOS (Universal TGZ)
macOS 13以降のApple SiliconとIntel Macに対応するTGZです。展開されたフォルダを SDK rootとして使用します。
tar -xzf ContactGloveSDKv2Cpp-<version>-macOS-universal.tar.gzUbuntu 22.04 / 24.04 (APT)
APTリポジトリからcontactglove-sdk-v2をインストールします。
Ubuntu 22.04(jammy)または24.04(noble)のamd64が対象です。
初回だけの設定
公開鍵contactglove-archive.ascを配布元から入手し、保存したフォルダで次を実行します。
sudo apt-get update
sudo apt-get install ca-certificates gnupg
gpg --show-keys --with-fingerprint ./contactglove-archive.asc主鍵のfingerprintが次の値と一致することを確認してください。
DCBF 1BD7 8F31 3033 7506 DDF6 CC4A 11F6 725F 5132確認した鍵を、SDKのAPTリポジトリ専用のkeyringへ登録します。
sudo install -d -m 0755 /etc/apt/keyrings
gpg --dearmor --output contactglove-archive.gpg ./contactglove-archive.asc
sudo install -m 0644 contactglove-archive.gpg /etc/apt/keyrings/contactglove-archive.gpg端末のcodenameを使ってAPTリポジトリを登録します。VERSION_CODENAMEはjammyまたはnoble、
architectureはamd64であることを確認してください。
. /etc/os-release
echo "$VERSION_CODENAME"
dpkg --print-architecturecat <<EOF | sudo tee /etc/apt/sources.list.d/contactglove.sources > /dev/null
Types: deb
URIs: https://apt.melt-interface-technologies.com/ubuntu
Suites: ${VERSION_CODENAME}
Components: main
Architectures: amd64
Signed-By: /etc/apt/keyrings/contactglove-archive.gpg
EOFインストール
sudo apt-get update
sudo apt-get install contactglove-sdk-v2インストール後は、ライブラリ、ヘッダー、CMake package config、および
contactglove-basic-usageがシステム標準の配置にインストールされます。
更新
初回設定をやり直す必要はありません。SDKを更新するときは次を実行します。
sudo apt-get update
sudo apt-get install --only-upgrade contactglove-sdk-v2必要環境
- ContactGlove3 Pro(ContactGlove3 では SDK にデータが届きません)
- Windows 11 x64(ZIP)、Ubuntu 22.04 / 24.04 x86_64(TGZまたは対応DEB)、macOS 13以降(arm64 / x86_64のUniversal TGZ)
- 独自のC++アプリをビルドする場合は、GCC / Clang / Visual Studio 2019以降などのC++17対応コンパイラ
- Windowsの場合は、Microsoft Visual C++ Redistributable(x64)
- DivingStation v2以降がインストール済みで起動できること
同梱のビルド済みサンプルを動かすだけならコンパイラは不要です。Cから利用する場合はCコンパイラ (同梱CサンプルはC11)、Rustから利用する場合はRust/Cargo 1.82以降と対応するネイティブSDKが必要です。 以下の利用側CMake例は3.16以降、SDK本体のソースビルドはCMake 3.20以降を使用します。
SDKはOSCでDivingStationと通信します。デフォルトでは、DivingStation側の受信
ポートは25791、SDK側の受信ポートは25788です。
別のPCから接続する
- 信頼できるLANを使用してください。
- DivingStationの
SDK / Protocolで待受範囲をLAN に公開にします。待受範囲を変更した場合は、DivingStationを再起動してください。 - SDKの接続先には、DivingStationを実行しているPCの数値IPアドレスと待受ポート(既定
25791)を指定します。各言語のフィールドは下表を参照してください。 - 接続承認が必要な設定では、DivingStationに表示される接続要求を許可してください。
- 両方のPCの実際の受信ポートで、必要なUDP通信を許可してください。SDK側の受信ポートの既定値は
25788です。
| 言語・接続設定 | DivingStation PCの数値IPアドレス | DivingStationの待受ポート | SDKの受信ポート |
|---|---|---|---|
C++ Host | ipAddress | port | receivePort |
C cg_host_t | ip_address | port | receive_port |
Rust Host | ip_address | port | receive_port |
まず疎通確認する
- DivingStationを起動します。
- DivingStation上でContactGlove3 Proを接続し、有効な状態にします。
- インストールまたは展開したSDKで、次を実行します。
Linux TGZ:
LD_LIBRARY_PATH="$PWD/lib" ./bin/contactglove-basic-usagemacOS Universal TGZ:
./bin/contactglove-basic-usagemacOSでは、同梱実行ファイルcontactglove-basic-usageとcontactglove-c-basic-usageに限り、
INSTALL_RPATHが@loader_path/../libに設定されています。独自アプリのライブラリ検索は、
後述の手順で別途設定してください。
Ubuntu DEB:
contactglove-basic-usageWindows ZIP:
.\bin\contactglove-basic-usage.exe次のような出力が出れば、SDKがDivingStationからデータを受信できています。
Listening on port 25788...
[callback] id=...
[poll] id=...起動直後は[poll] waiting for callback dataが出ることがあります。
contactglove-basic-usageは、callbackで最初に受信したグローブIDの情報を自動でポーリングします。
CMakeプロジェクトから使う
ZIP/TGZはビルド済みライブラリの配布物で、SDKソースのCMakeLists.txtは含まれていません。
ビルドするのは利用側のプロジェクトで、SDKはCMAKE_PREFIX_PATHから
find_package()で参照します。
まず、利用側のCMakeLists.txtを用意します。
cmake_minimum_required(VERSION 3.16)
project(my_app LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(ContactGloveSDKv2 CONFIG REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE ContactGloveSDKv2::ContactGloveSDKv2)次に、利用側プロジェクトのディレクトリでconfigureとビルドを実行します。
以下の-S .は利用側プロジェクトを指します。展開したSDKのフォルダではありません。
Linux debでインストールした場合は、通常は追加指定なしで解決できます。
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build buildWindows ZIPを展開した場合:
cmake -S . -B build -DCMAKE_PREFIX_PATH="C:\path\to\ContactGloveSDKv2Cpp-<version>-Windows-AMD64"
cmake --build build --config ReleaseLinux TGZを展開した場合:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="/path/to/ContactGloveSDKv2Cpp-<version>-Linux-x86_64"
cmake --build buildmacOS Universal TGZを展開した場合:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="/path/to/ContactGloveSDKv2Cpp-<version>-macOS-universal"
cmake --build buildWindowsでは、利用側アプリが実行時にContactGloveSDKv2.dllを見つけられる必要があります。最も簡単なのは、
bin/ContactGloveSDKv2.dllを利用側アプリの.exeと同じフォルダにコピーする
方法です。代わりに、SDK配布物のbin/をPATHに追加しても構いません。
Windows ZIPには、Debug構成用のContactGloveSDKv2d.dllも含まれます。find_package()で参照すると、
利用側アプリのDebugビルドにはContactGloveSDKv2d.dll、Release・RelWithDebInfo・MinSizeRelビルドには
ContactGloveSDKv2.dllが自動で選ばれます。MSVCではDebugとReleaseのC++ランタイムに互換性がないため、
手動でコピーする場合も、利用側アプリと同じ構成のDLLを使ってください。
Linux debでインストールした場合は、libContactGloveSDKv2.soは標準のmultiarch
library pathに配置されます。
macOSで配布するアプリは、SDKのlibContactGloveSDKv2*.dylibをアプリバンドルへ
同梱し、その場所を解決する@rpathを設定してください。TGZ同梱サンプル以外では、
ライブラリを単体でコピーするだけの配布はサポートしません。
DLLのコピーは、利用側のCMakeLists.txtで自動化できます。
if(WIN32)
add_custom_command(TARGET my_app POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:ContactGloveSDKv2::ContactGloveSDKv2>
$<TARGET_FILE_DIR:my_app>
VERBATIM)
endif()C ABIとRust Binding
include/contactglove/ContactGloveSDKv2C.h はC/C++互換のC ABI v2ヘッダーです。
Cではcg_sdk_*関数を使い、同じネイティブSDKライブラリにリンクします。同梱の
share/ContactGloveSDKv2/examples/c_basic_usage.cに接続・ポーリング・購読の例があります。
CMakeではproject(my_c_app LANGUAGES C)、add_executable(my_c_app main.c)、
target_link_libraries(my_c_app PRIVATE ContactGloveSDKv2::ContactGloveSDKv2)を使い、
find_package()と実行時のライブラリ検索はC++利用側と同様に設定します。
バッファとコールバックの有効期間はAPIリファレンスを参照してください。
Rust Bindingとしては、同梱workspaceをお使いください。ZIP/TGZではSDK rootのrust/、DEBでは
share/ContactGloveSDKv2/rust/を開き、SDK rootを指定してCargoを実行します。
$env:CONTACTGLOVE_SDK_ROOT = "C:\path\to\ContactGloveSDKv2Cpp-<version>-Windows-AMD64"
$env:PATH = "$env:CONTACTGLOVE_SDK_ROOT\bin;$env:PATH"
cargo run --manifest-path "$env:CONTACTGLOVE_SDK_ROOT\rust\Cargo.toml" -p contactglove-sdk-v2 --example basic_usagemacOS Universal TGZの場合:
export CONTACTGLOVE_SDK_ROOT="$PWD"
export DYLD_LIBRARY_PATH="$CONTACTGLOVE_SDK_ROOT/lib:${DYLD_LIBRARY_PATH:-}"
cargo run --manifest-path "$CONTACTGLOVE_SDK_ROOT/rust/Cargo.toml" -p contactglove-sdk-v2 --example basic_usage自分のCargoプロジェクトから使う場合は、Cargo.tomlの[dependencies]に
contactglove-sdk-v2 = { path = "<SDK root>/rust/contactglove-sdk-v2" }を追加し、
上と同じ環境変数を設定してからcargo runを実行します。
DEBではpathを/usr/share/ContactGloveSDKv2/rust/contactglove-sdk-v2にします。環境変数の設定は不要です。
SdkとSubscriptionはSend / Syncではありません。コールバックはSDKの受信スレッドで動きます。
必要なら所有する値を別スレッドへコピー・送信してください。Sdkの切断・破棄より先に
各Subscriptionを解放します。binding再生成の保守手順は
Rust READMEにあります。
最小コード例
#include <chrono>
#include <iostream>
#include <thread>
#include "contactglove/ContactGloveSDKv2.hpp"
int main() {
ContactGloveSDKv2::SDK sdk;
sdk.RegisterCallbackForGloveDataStream([](const ContactGloveSDKv2::GloveData& g) {
std::cout << "glove id=" << g.id
<< " battery=" << g.batteryPercentage << "%"
<< "\n";
});
ContactGloveSDKv2::Host host;
host.hostName = "localhost";
host.ipAddress = "127.0.0.1";
host.port = 25791;
host.receivePort = 25788;
if (sdk.ConnectToHost(host) != ContactGloveSDKv2::SDKReturnCode::Success) {
std::cerr << "Failed to start the connection (socket or port error)\n";
return 1;
}
std::this_thread::sleep_for(std::chrono::seconds(5));
sdk.Disconnect(host);
return 0;
}より長いサンプル:
share/ContactGloveSDKv2/examples/basic_usage.cppトラブルシュート
contactglove-basic-usageが[poll] waiting for callback dataを表示し続ける:
- DivingStationが起動しているか確認してください。
- DivingStation上でグローブが接続済みか確認してください。
- SDK側受信ポート
25788を他のアプリが使用していないか確認してください。
[callback] id=...は出るが[poll] <id>: no data yetが続く:
contactglove-basic-usageを一度終了し、同じSDK受信ポートを使う別アプリがない状態で 再実行してください。- DivingStation上で該当グローブが有効な状態か確認してください。
アプリ起動時にContactGloveSDKv2.dllが見つからない:
bin/ContactGloveSDKv2.dllを自分の.exeと同じフォルダにコピーしてください。- または、SDK配布物の
bin/フォルダをPATHに追加してください。
WindowsのDebugビルドで、ConnectToHost()の呼び出し中にアプリが終了する(終了コード3など):
- DebugビルドのアプリがRelease版の
ContactGloveSDKv2.dllを読み込んでいます。ContactGloveSDKv2d.dllを含むSDK配布物を使い、上記の$<TARGET_FILE:...>でDLLをコピーしてください。 ContactGloveSDKv2d.dllを含まないSDKでは、Release または RelWithDebInfo でビルドしてください。
LinuxでlibContactGloveSDKv2.so.0が見つからない:
- debがインストール済みか確認してください。
- 任意prefixへ展開したTGZを使う場合は、ライブラリのある
lib/をLD_LIBRARY_PATHへ追加してください。
macOSでLibrary not loaded: @rpath/libContactGloveSDKv2...dylibが出る:
- 同梱サンプルはSDK rootの
bin/から実行してください。 - Rust Bindingまたは独自アプリでは、SDK rootの
lib/をDYLD_LIBRARY_PATHへ追加するか、 アプリバンドルの@rpathを正しく設定してください。
macOSでGatekeeperの警告が出る:
- この初回配布物は未署名・未公証です。配布元と内容を確認してから、組織のmacOS セキュリティポリシーに従って実行してください。
The source directory ... does not appear to contain CMakeLists.txt:
- 展開したSDKのフォルダを
cmake -Sに指定しています。このパッケージにCMakeLists.txtは含まれていません。-Sには利用側プロジェクトの フォルダを指定し、SDKのフォルダはCMAKE_PREFIX_PATHにのみ指定してください。
find_package(ContactGloveSDKv2 CONFIG REQUIRED)が失敗する:
- 展開したSDK rootを
CMAKE_PREFIX_PATHに指定してください。 - または、
ContactGloveSDKv2_DIRに<SDK_ROOT>\lib\cmake\ContactGloveSDKv2を指定してください。
SDKソースからビルドする
配布物とSDKソースのcheckoutは用途が異なります。SDK本体をビルドするには、 ソースリポジトリ、 CMake 3.20以降、C++17対応コンパイラ(MSVC 2019以降、GCC 9以降、Clang 9以降)、 CMakeが固定したoscpackを取得するためのGitが必要です。macOSではXcode Command Line Toolsを使用します。 Universal配布オプションはmacOS 13以降のarm64 / x86_64を対象にします。
git clone https://github.com/MeltInterfaceTechnologies/ContactGloveSDKv2Cpp.git
cd ContactGloveSDKv2Cpp
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config ReleasemacOS Universalビルドはconfigure時に-DCONTACTGLOVE_MACOS_UNIVERSAL=ONを追加します。
install・パッケージ生成・API生成の保守手順はソースのREADMEを参照してください。
ライセンス
SDKの自社実装(C/C++、公開ヘッダー、Rust binding、サンプル、SDK文書)は Apache License 2.0 で提供します。ライセンス全文は次のファイルにあります。
share/doc/ContactGloveSDKv2/LICENSE.md著作権表示は同じフォルダの NOTICE.md にあります。
第三者コンポーネントには各々のライセンスが適用され、Apache-2.0 へ再許諾するものではありません。 第三者の表示とライセンスは次のファイルを参照してください。
share/doc/ContactGloveSDKv2/THIRD_PARTY_NOTICES.mdoscpack はSDK内部依存として同梱ビルドされ、revision
3e7e3a102e316d75fe176885a6dd08f216f2eac0 に固定されています。
別管理のプロトコル仕様書は、SDK配布物には同梱しません。 SDKのビルド・利用に仕様書の取得は不要です。
お問い合わせ
SDKに関するご質問や不具合の報告は、お問い合わせフォームからお送りください。