joyconlib
|
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 | |
列挙型 | |
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カメラ解像度 [詳解] | |
Joy-Conライブラリ ヘッダ
enum joycon_err |
エラーコード
enum joycon_ir_resolution |
enum joycon_type |
joycon_err joycon_close | ( | joyconlib_t * | jc | ) |
ジョイコンを閉じる
振動を止め,homeledを消灯し,ledを復元する
[in] | jc | ジョイコン情報 |
joycon_err joycon_disable_ir | ( | joyconlib_t * | jc | ) |
ジョイコンのIRカメラの終了
IRカメラの使用を終了し,通常に戻す
[in] | jc | ジョイコン情報 |
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_err joycon_get_button_elapsed | ( | joyconlib_t * | jc, |
joycon_elapsed * | etime | ||
) |
ジョイコンの特定ボタンの経過時間を取得する
ボタンが押されてからの経過時間を10ms単位で取得する 最大値は65535(*10ms)で,それ以上は計測されない 押すと0になる
[in] | jc | ジョイコン情報 |
[out] | etime | 経過時間情報 |
joycon_err joycon_get_state | ( | joyconlib_t * | jc | ) |
ジョイコンの状態(ボタン,スティック,6軸センサー)を取得する
取得した状態はそれぞれ,jc.button,jc.stick,jc.axis に保存されている
[in,out] | jc | ジョイコン情報 |
joycon_err joycon_open | ( | joyconlib_t * | jc, |
joycon_type | type | ||
) |
ジョイコンを開く
あらかじめPCにジョイコンをBluetooth接続しておく必要がある
[out] | jc | オープンしたジョイコンの情報を保持する joyconlib_t構造体変数へのポインタ |
[in] | type | オープンするジョイコンのタイプを JOYCON_R(右)か JOYCON_L(左)で指定する。 |
joycon_err joycon_play_rumble | ( | joyconlib_t * | jc, |
char * | mml, | ||
size_t | sz, | ||
int(*)(void *) | callback, | ||
void * | data | ||
) |
ジョイコン振動による演奏
簡易MML演奏データを読みと取り,音階に対応する振動周波数の振動により演奏する 指定できる振動周波数が音階と正確にに一致しないため,多少音程はずれる
演奏が終了するまで関数も終了しない ただしコールバック関数による終了は指示できる
コールバック関数は
で作成し, 戻り値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
[in] | jc | ジョイコン情報 |
[in] | mml | 簡易MMLによる演奏データ |
[in] | sz | mmlのサイズ |
[in] | callback | コールバック関数,NULLの場合は呼び出されない |
[in] | data | コールバック関数に渡す引数 |
joycon_err joycon_read_ir | ( | joyconlib_t * | jc, |
u8 * | image, | ||
size_t | size, | ||
u16 | exposure, | ||
joycon_ir_result * | result | ||
) |
ジョイコンでIR画像を読み取る
ジョイコン(右)の下部がIRカメラになっており, 対象に向けて実行することで画像を取得する 画像の読み取りには時間がかかるので注意 (最大解像度で4s程度,最小で0.1s程度)
[in] | jc | ジョイコン情報 |
[out] | image | 画像データ保存先 保存に必要なサイズは jc.ir_max_frag_no*300 , データは1ピクセル8ビットのグレースケールである |
[in] | size | imageのサイズ |
[in] | exposure | 露出時間(0-600), 0で指定しない(前回と同じ) |
[out] | result | 読み取った画像情報の保存先, 必要ない場合はNULLを指定する |
joycon_err joycon_read_nfc | ( | joyconlib_t * | jc, |
joycon_nfc_data * | nfc | ||
) |
ジョイコンでNFCタグ情報を読み取る
ジョイコン(右)のスティックがNFCリーダーになっており, スティックにNFCカード等をかざして実行すると読み取る タグの読み取りに対応しているのは,NTAG213,NTAG215,NTAG216 その他はUIDの読み取りのみ
[in] | jc | ジョイコン情報 |
[out] | nfc | NFC情報 |
joycon_err joycon_rumble | ( | joyconlib_t * | jc, |
int | amp | ||
) |
ジョイコンを振動する
振動周波数はデフォルト値に固定で強さ(振幅)のみを指定する 内部的に
を呼び出しているだけである
[in] | jc | ジョイコン情報 |
[in] | amp | 強さ(0-100,0でoff) |
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_err joycon_set_homeled | ( | joyconlib_t * | jc, |
joycon_homeled * | data | ||
) |
ジョイコンhomeボタンのLEDを設定する
点灯/点滅に対する細かい指定ができる
単純な点灯/点滅を指定するためのマクロ (JOYCON_HOMELED_OFF, JOYCON_HOMELED_ON, JOYCON_HOMELED_BLINK)が用意されている
[in] | jc | ジョイコン情報 |
[in] | data | ホームLEDの設定情報 |
joycon_err joycon_set_led | ( | joyconlib_t * | jc, |
u8 | led | ||
) |
ジョイコンのLEDを設定する
4つのLEDに対して,点灯か点滅を同時に指定する マクロ が用意されており, | で結合して指定する 点灯が優先される
[in] | jc | ジョイコン情報 |
[in] | led | LED情報 |