joyconlib
データ構造 | マクロ定義 | 型定義 | 列挙型 | 関数
joyconlib.h ファイル

Joy-Conライブラリ ヘッダ [詳解]

#include <hidapi/hidapi.h>
#include <stdint.h>

[ソースコード]

データ構造

union  joycon_btn
 ジョイコンボタン [詳解]
 
struct  joycon_elapsed
 ボタンの経過時間 [詳解]
 
struct  joycon_homeled
 ホームボタンのLED設定情報 [詳解]
 
struct  joycon_stick
 スティックの位置情報 [詳解]
 
struct  joycon_axis
 6軸センサー情報 [詳解]
 
struct  joyconlib_t
 ジョイコン情報 [詳解]
 
struct  joycon_nfc_data
 NFCデータ [詳解]
 
struct  joycon_ir_result
 IR取得画像の情報 [詳解]
 

マクロ定義

#define JOYCON_HOMELED_OFF   ((joycon_homeled*)0x11)
 ホームボタンLED消灯
 
#define JOYCON_HOMELED_ON   ((joycon_homeled*)0x11f0f00f)
 ホームボタンLED点灯
 
#define JOYCON_HOMELED_BLINK   ((joycon_homeled*)0x21f0f00f0f)
 ホームボタンLED点滅
 
#define JOYCON_LED_1_ON   (0x01)
 led 1 点灯
 
#define JOYCON_LED_2_ON   (0x02)
 led 2 点灯
 
#define JOYCON_LED_3_ON   (0x04)
 led 3 点灯
 
#define JOYCON_LED_4_ON   (0x08)
 led 4 点灯
 
#define JOYCON_LED_1_BLINK   (0x10)
 led 1 点滅
 
#define JOYCON_LED_2_BLINK   (0x20)
 led 2 点滅
 
#define JOYCON_LED_3_BLINK   (0x40)
 led 3 点滅
 
#define JOYCON_LED_4_BLINK   (0x80)
 led 4 点滅
 
#define JOYCON_NFC_TYPE_NTAG   (0x02)
 NFCタイプ: NTAG
 
#define JOYCON_NFC_TYPE_MIFARE   (0x04)
 NFCタイプ: MIFARE
 

型定義

typedef uint8_t u8
 8bit符号無し整数
 
typedef uint16_t u16
 16bit符号無し整数
 
typedef uint32_t u32
 32bit符号無し整数
 
typedef uint64_t u64
 64bit符号無し整数
 
typedef int8_t s8
 8bit符号付き整数
 
typedef int16_t s16
 16bit符号付き整数
 
typedef int32_t s32
 32bit符号付き整数
 
typedef int64_t s64
 64bit符号付き整数
 

列挙型

enum  joycon_err {
  JOYCON_ERR_NONE = 0 , JOYCON_ERR_INVALID_ARGUMENT = -1 , JOYCON_ERR_OPEN_FAILED = -2 , JOYCON_ERR_WRITE_FAILED = -3 ,
  JOYCON_ERR_READ_FAILED = -4 , JOYCON_ERR_READ_TIMEOUT = -5 , JOYCON_ERR_READ_NODATA = -6 , JOYCON_ERR_INVALID_TYPE = -7 ,
  JOYCON_ERR_MCU_1ID31 = -11 , JOYCON_ERR_MCU_2MCUON = -12 , JOYCON_ERR_MCU_3MCUONBUSY = -13 , JOYCON_ERR_MCU_4MCUMODESET = -14 ,
  JOYCON_ERR_MCU_5MCUSETBUSY = -15 , JOYCON_ERR_MCU_6NFCPOLL = -16 , JOYCON_ERR_MCU_NOTAG = -17 , JOYCON_ERR_MCU_NOTSUPPORTED = -18 ,
  JOYCON_ERR_MCU_READ = -19 , JOYCON_ERR_MCU_IRNOREADY = -21 , JOYCON_ERR_MCU_6IRMODESET = -26 , JOYCON_ERR_MCU_7IRSETBUSY = -27 ,
  JOYCON_ERR_MCU_8IRCFG = -28 , JOYCON_ERR_MCU_9IRFCFG = -29 , JOYCON_ERR_UNKNOWN = -99
}
 エラーコード [詳解]
 
enum  joycon_type { JOYCON_L = 0x1 , JOYCON_R = 0x2 }
 ジョイコンタイプ [詳解]
 
enum  joycon_ir_resolution { JOYCON_IR320X240 = 320 , JOYCON_IR160X120 = 160 , JOYCON_IR80X60 = 80 , JOYCON_IR40X30 = 40 }
 IRカメラ解像度 [詳解]
 

関数

joycon_err joycon_open (joyconlib_t *jc, joycon_type type)
 ジョイコンを開く [詳解]
 
joycon_err joycon_close (joyconlib_t *jc)
 ジョイコンを閉じる [詳解]
 
joycon_err joycon_get_state (joyconlib_t *jc)
 ジョイコンの状態(ボタン,スティック,6軸センサー)を取得する [詳解]
 
joycon_err joycon_rumble (joyconlib_t *jc, int amp)
 ジョイコンを振動する [詳解]
 
joycon_err joycon_rumble_raw (joyconlib_t *jc, int hfreq, int hamp, int lfreq, int lamp)
 ジョイコンを振動する [詳解]
 
joycon_err joycon_get_button_elapsed (joyconlib_t *jc, joycon_elapsed *etime)
 ジョイコンの特定ボタンの経過時間を取得する [詳解]
 
joycon_err joycon_set_led (joyconlib_t *jc, u8 led)
 ジョイコンのLEDを設定する [詳解]
 
joycon_err joycon_set_homeled (joyconlib_t *jc, joycon_homeled *data)
 ジョイコンhomeボタンのLEDを設定する [詳解]
 
joycon_err joycon_play_rumble (joyconlib_t *jc, char *mml, size_t sz, int(*callback)(void *), void *data)
 ジョイコン振動による演奏 [詳解]
 
joycon_err joycon_enable_ir (joyconlib_t *jc, joycon_ir_resolution resolution, u16 exposure)
 ジョイコンのIRカメラの準備 [詳解]
 
joycon_err joycon_disable_ir (joyconlib_t *jc)
 ジョイコンのIRカメラの終了 [詳解]
 
joycon_err joycon_read_ir (joyconlib_t *jc, u8 *image, size_t size, u16 exposure, joycon_ir_result *result)
 ジョイコンでIR画像を読み取る [詳解]
 
joycon_err joycon_read_nfc (joyconlib_t *jc, joycon_nfc_data *nfc)
 ジョイコンでNFCタグ情報を読み取る [詳解]
 

詳解

Joy-Conライブラリ ヘッダ

著者
K. Morita
注釈
The following resources/projects were referenced for this library: https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering https://github.com/CTCaer/jc_toolkit

列挙型詳解

◆ joycon_err

enum joycon_err

エラーコード

列挙値
JOYCON_ERR_NONE 

正常終了

JOYCON_ERR_INVALID_ARGUMENT 

不正な引数

JOYCON_ERR_OPEN_FAILED 

オープン失敗

JOYCON_ERR_WRITE_FAILED 

データ送信失敗

JOYCON_ERR_READ_FAILED 

データ読込失敗

JOYCON_ERR_READ_TIMEOUT 

データ読込タイムアウト

JOYCON_ERR_READ_NODATA 

読込データ無し

JOYCON_ERR_INVALID_TYPE 

不正なタイプ

JOYCON_ERR_MCU_1ID31 

NFC/IR初期化エラー1

JOYCON_ERR_MCU_2MCUON 

NFC/IR初期化エラー2

JOYCON_ERR_MCU_3MCUONBUSY 

NFC/IR初期化エラー3

JOYCON_ERR_MCU_4MCUMODESET 

NFC/IR初期化エラー4

JOYCON_ERR_MCU_5MCUSETBUSY 

NFC/IR初期化エラー5

JOYCON_ERR_MCU_6NFCPOLL 

NFC読み取り準備エラー

JOYCON_ERR_MCU_NOTAG 

NFCタグ読み取りエラー

JOYCON_ERR_MCU_NOTSUPPORTED 

NFC未サポートのタグ

JOYCON_ERR_MCU_READ 

NFC読み取りエラー

JOYCON_ERR_MCU_IRNOREADY 

IR未初期化

JOYCON_ERR_MCU_6IRMODESET 

IR設定エラー1

JOYCON_ERR_MCU_7IRSETBUSY 

IR設定中エラー

JOYCON_ERR_MCU_8IRCFG 

IR設定エラー2

JOYCON_ERR_MCU_9IRFCFG 

IR設定エラー3

JOYCON_ERR_UNKNOWN 

不明エラー

◆ joycon_ir_resolution

IRカメラ解像度

列挙値
JOYCON_IR320X240 

320 x 240 ピクセル

JOYCON_IR160X120 

160 x 120 ピクセル

JOYCON_IR80X60 

80 x 60 ピクセル

JOYCON_IR40X30 

40 x 30 ピクセル

◆ joycon_type

ジョイコンタイプ

列挙値
JOYCON_L 

JOYCON_R 

関数詳解

◆ joycon_close()

joycon_err joycon_close ( joyconlib_t jc)

ジョイコンを閉じる

振動を止め,homeledを消灯し,ledを復元する

引数
[in]jcジョイコン情報
戻り値
エラーコード

◆ joycon_disable_ir()

joycon_err joycon_disable_ir ( joyconlib_t jc)

ジョイコンのIRカメラの終了

IRカメラの使用を終了し,通常に戻す

引数
[in]jcジョイコン情報
戻り値
エラーコード

◆ joycon_enable_ir()

joycon_err joycon_enable_ir ( joyconlib_t jc,
joycon_ir_resolution  resolution,
u16  exposure 
)

ジョイコンのIRカメラの準備

IRカメラを使用するための設定を行う

引数
[in]jcジョイコン情報
[in]resolution解像度
[in]exposure露出時間(シャッター速度) 0 - 600 (us, 0 - 1/1666.66s)で指定する
戻り値
エラーコード
参照
joycon_ir_resolution

◆ joycon_get_button_elapsed()

joycon_err joycon_get_button_elapsed ( joyconlib_t jc,
joycon_elapsed etime 
)

ジョイコンの特定ボタンの経過時間を取得する

ボタンが押されてからの経過時間を10ms単位で取得する 最大値は65535(*10ms)で,それ以上は計測されない 押すと0になる

printf("Rが押されてから%f秒\n", et.R/100.0);
joycon_err joycon_get_button_elapsed(joyconlib_t *jc, joycon_elapsed *etime)
ジョイコンの特定ボタンの経過時間を取得する
ボタンの経過時間
Definition: joyconlib.h:104
u16 R
Rボタン(右)の経過時間
Definition: joyconlib.h:106
引数
[in]jcジョイコン情報
[out]etime経過時間情報
戻り値
エラーコード
参照
joycon_elapsed

◆ joycon_get_state()

joycon_err joycon_get_state ( joyconlib_t jc)

ジョイコンの状態(ボタン,スティック,6軸センサー)を取得する

取得した状態はそれぞれ,jc.button,jc.stick,jc.axis に保存されている

if(jc.button.btn.X){
// Xが押されているとき
}
if(jc.stick.y < 0.0){
// スティックが下に…
}
if(jc.axis[0].acc_z < -9.8){
// ジョイコンが上に?…
}
joycon_err joycon_get_state(joyconlib_t *jc)
ジョイコンの状態(ボタン,スティック,6軸センサー)を取得する
引数
[in,out]jcジョイコン情報
戻り値
エラーコード
参照
joyconlib_t

◆ joycon_open()

joycon_err joycon_open ( joyconlib_t jc,
joycon_type  type 
)

ジョイコンを開く

あらかじめPCにジョイコンをBluetooth接続しておく必要がある

@ JOYCON_R
Definition: joyconlib.h:60
joycon_err joycon_open(joyconlib_t *jc, joycon_type type)
ジョイコンを開く
ジョイコン情報
Definition: joyconlib.h:191
引数
[out]jcオープンしたジョイコンの情報を保持する joyconlib_t構造体変数へのポインタ
[in]typeオープンするジョイコンのタイプを JOYCON_R(右)か JOYCON_L(左)で指定する。
戻り値
エラーコード

◆ joycon_play_rumble()

joycon_err joycon_play_rumble ( joyconlib_t jc,
char *  mml,
size_t  sz,
int(*)(void *)  callback,
void *  data 
)

ジョイコン振動による演奏

簡易MML演奏データを読みと取り,音階に対応する振動周波数の振動により演奏する 指定できる振動周波数が音階と正確にに一致しないため,多少音程はずれる

演奏が終了するまで関数も終了しない ただしコールバック関数による終了は指示できる
コールバック関数は

int callback(void* data)

で作成し, 戻り値0で演奏終了,0以外で継続するようにする

MMLに指定できる文字は,CDEFGAB,R,L,O,<,>,T,V,小文字も使える(意味は同じ)
音階はド〜シ(CDEFGAB),シャープ(#,+),フラット(-),休符(R)
音符は全音符〜64分音符(1,2,4,8,16,32,64)で音階の後に付ける 省略するとLで指定した値を用いる,初期値は4,付点(.)は32分音符まで
オクターブ(O)は1-6だが実用的な範囲は3-5,初期値は4, <で1オクターブ上げ,>で1オクターブ下げる
テンポ(T)は30-240,初期値は120 音量(V)は0-100,初期値は50

char *mml="cdefgab<c";
joycon_play_rumble(&jc, mml, strlen(mml), NULL, NULL);
joycon_err joycon_play_rumble(joyconlib_t *jc, char *mml, size_t sz, int(*callback)(void *), void *data)
ジョイコン振動による演奏
引数
[in]jcジョイコン情報
[in]mml簡易MMLによる演奏データ
[in]szmmlのサイズ
[in]callbackコールバック関数,NULLの場合は呼び出されない
[in]dataコールバック関数に渡す引数
戻り値
エラーコード
参照
Music Macro Language

◆ joycon_read_ir()

joycon_err joycon_read_ir ( joyconlib_t jc,
u8 image,
size_t  size,
u16  exposure,
joycon_ir_result result 
)

ジョイコンでIR画像を読み取る

ジョイコン(右)の下部がIRカメラになっており, 対象に向けて実行することで画像を取得する 画像の読み取りには時間がかかるので注意 (最大解像度で4s程度,最小で0.1s程度)

size_t sz = jc.ir_max_frag_no*300;
u8 img[sz] = {0};
joycon_read_ir(&jc, img, sz, 0, NULL);
// img に対する処理
joycon_err joycon_read_ir(joyconlib_t *jc, u8 *image, size_t size, u16 exposure, joycon_ir_result *result)
ジョイコンでIR画像を読み取る
joycon_err joycon_disable_ir(joyconlib_t *jc)
ジョイコンのIRカメラの終了
joycon_err joycon_enable_ir(joyconlib_t *jc, joycon_ir_resolution resolution, u16 exposure)
ジョイコンのIRカメラの準備
uint8_t u8
8bit符号無し整数
Definition: joyconlib.h:21
@ JOYCON_IR80X60
80 x 60 ピクセル
Definition: joyconlib.h:235
引数
[in]jcジョイコン情報
[out]image画像データ保存先 保存に必要なサイズは jc.ir_max_frag_no*300 , データは1ピクセル8ビットのグレースケールである
[in]sizeimageのサイズ
[in]exposure露出時間(0-600), 0で指定しない(前回と同じ)
[out]result読み取った画像情報の保存先, 必要ない場合はNULLを指定する
戻り値
エラーコード
参照
joycon_ir_result joycon_enable_ir joycon_disable_ir

◆ joycon_read_nfc()

joycon_err joycon_read_nfc ( joyconlib_t jc,
joycon_nfc_data nfc 
)

ジョイコンでNFCタグ情報を読み取る

ジョイコン(右)のスティックがNFCリーダーになっており, スティックにNFCカード等をかざして実行すると読み取る タグの読み取りに対応しているのは,NTAG213,NTAG215,NTAG216 その他はUIDの読み取りのみ

joycon_read_nfc(&jc, &nfc);
printf("UID=");
for(int i=0;i<nfc.tag_uid_size;i++)
printf("%02x ", nfc.tag_uid[i]);
joycon_err joycon_read_nfc(joyconlib_t *jc, joycon_nfc_data *nfc)
ジョイコンでNFCタグ情報を読み取る
NFCデータ
Definition: joyconlib.h:223
u8 tag_uid_size
UIDのサイズ
Definition: joyconlib.h:225
u8 tag_uid[10]
UID
Definition: joyconlib.h:226
引数
[in]jcジョイコン情報
[out]nfcNFC情報
戻り値
エラーコード
参照
joycon_nfc_data

◆ joycon_rumble()

joycon_err joycon_rumble ( joyconlib_t jc,
int  amp 
)

ジョイコンを振動する

振動周波数はデフォルト値に固定で強さ(振幅)のみを指定する 内部的に

joycon_rumble_raw(jc, 96, amp, 64, amp);
joycon_err joycon_rumble_raw(joyconlib_t *jc, int hfreq, int hamp, int lfreq, int lamp)
ジョイコンを振動する

を呼び出しているだけである

引数
[in]jcジョイコン情報
[in]amp強さ(0-100,0でoff)
戻り値
エラーコード

◆ joycon_rumble_raw()

joycon_err joycon_rumble_raw ( joyconlib_t jc,
int  hfreq,
int  hamp,
int  lfreq,
int  lamp 
)

ジョイコンを振動する

高/低帯域の周波数と振幅を指定する 指定値と周波数,振幅の関係は 別表 の通り

この関数は振動を1回指示するだけであり,いずれ振動は減衰する
連続して振動させるには,関数を呼び出し続ける必要がある (joycon_open,joycon_close,joycon_get_state以外の関数呼び出しでも振動は継続する)

引数
[in]jcジョイコン情報
[in]hfreq高帯域周波数(33-159)
[in]hamp高帯域振幅(0-100)
[in]lfreq低帯域周波数(1-127)
[in]lamp低帯域振幅(0-100)
戻り値
エラーコード

◆ joycon_set_homeled()

joycon_err joycon_set_homeled ( joyconlib_t jc,
joycon_homeled data 
)

ジョイコンhomeボタンのLEDを設定する

点灯/点滅に対する細かい指定ができる
単純な点灯/点滅を指定するためのマクロ (JOYCON_HOMELED_OFF, JOYCON_HOMELED_ON, JOYCON_HOMELED_BLINK)が用意されている

// 単純な点滅
// 暗めにフェードイン/アウト
hl.mc_num=2;
hl.fc_num=0;
hl.intensity=0;
hl.mc[0].mc1_intensity=3;
hl.mc[0].mc2_intensity=0;
#define JOYCON_HOMELED_BLINK
ホームボタンLED点滅
Definition: joyconlib.h:146
joycon_err joycon_set_homeled(joyconlib_t *jc, joycon_homeled *data)
ジョイコンhomeボタンのLEDを設定する
ホームボタンのLED設定情報
Definition: joyconlib.h:121
u8 mc_num
サイクル数 Number of Mini Cycles. 1-15. If number of cycles is > 0 then x0 = x1
Definition: joyconlib.h:123
struct joycon_homeled::@1 mc[7]
2サイクル*7で14回分の情報
u8 intensity
LEDの明るさ初期値 LED Start Intensity. Value x0=0% - xF=100%
Definition: joyconlib.h:125
u8 mc_duration
1サイクルの基準時間 Global Mini Cycle Duration. 8ms - 175ms. Value x0 = 0ms/OFF
Definition: joyconlib.h:122
u8 mc2_intensity
サイクル 2,4,6,8,10,12,14 のLED明るさ
Definition: joyconlib.h:127
u8 fc_num
全サイクルの繰り返し数 0で無限 Number of Full Cycles. 1-15. Value x0 is repeat forever, but if also Byte x00 High n...
Definition: joyconlib.h:124
u8 mc2_transition
前サイクルから自サイクル(2,4,6,8,10,12,14)へのフェードイン/アウト段階数(*基準時間) Fading Transition Duration to Mini Cycle 2,...
Definition: joyconlib.h:132
u8 mc1_transition
前サイクルから自サイクル(1,3,5,7,9,11,13)へのフェードイン/アウト段階数(*基準時間) Fading Transition Duration to Mini Cycle 1,...
Definition: joyconlib.h:130
u8 mc1_intensity
サイクル 1,3,5,7,9,11,13 のLED明るさ
Definition: joyconlib.h:128
引数
[in]jcジョイコン情報
[in]dataホームLEDの設定情報
戻り値
エラーコード
参照
joycon_homeled

◆ joycon_set_led()

joycon_err joycon_set_led ( joyconlib_t jc,
u8  led 
)

ジョイコンのLEDを設定する

4つのLEDに対して,点灯か点滅を同時に指定する マクロ が用意されており, | で結合して指定する 点灯が優先される

// 1を点灯,3を点滅
// すべて消灯
#define JOYCON_LED_1_ON
led 1 点灯
Definition: joyconlib.h:148
#define JOYCON_LED_3_BLINK
led 3 点滅
Definition: joyconlib.h:154
joycon_err joycon_set_led(joyconlib_t *jc, u8 led)
ジョイコンのLEDを設定する
引数
[in]jcジョイコン情報
[in]ledLED情報
戻り値
エラーコード