SBDBT5VのPS3コントローラからの電文 - KURO
2015/03/04 (Wed) 22:47:32
PS3コントローラの動作確認用ファームが焼きこまれた,SDBDT5VとArduinoを使って,PS3コントローラからの信号の電文解析を行っています.
PS3コントローラのボタンを押すと
Arduinoでは,0x80で始まる(チェックサムが正しい)電文が数回(3,4回)来ているように見えますが,それは仕様通りでしょうか?
それとこの数回の電文の最後は押していない電文となっているように思います.(チェックサムは正しいです)
これも仕様通りでしょうか?
Re: SBDBT5VのPS3コントローラからの電文 - ランエレ URL
2015/03/04 (Wed) 23:47:18
KURO 様
SBDBT5Vをご利用いただきまして誠に有り難うございます。
PS3のコントローラについてマニュアルが説明不足で申し訳ございません。
このファームウェアはglobal.hの設定を変えることで動作を変更できますが、動作確認用ファームウェアでは変化があったときに送信するようになっています。
例えば、PS3のいずれかのボタンを押すと、押してない状態から押した状態に変化があったので、電文を送信します。
ボタンを離すと、押した状態から押してない状態に変化があったので電文を送信します。
KURO様の「PS3コントローラのボタンを押すと」の動作はボタンを押して離したのではないでしょうか。
そうすると2回の電文が送信されます。
この2回目の電文は全てのボタンを押していない状態ですから、何も押していない電文となります。
3,4回の電文は見てみないとわかりませんが、差し支えなければどのような電文が送られてくるのか記載いただけるとわかるかもしれません。
お手数をおかけいたしますがよろしくお願いします。
Re: SBDBT5VのPS3コントローラからの電文 - KURO
2015/03/05 (Thu) 21:48:03
回答ありがとうございます.
動作確認用ファームでは,ソースで提供されているglobal.h と異なり,
SEND_ON_DIFFERENT_DATA が1に設定されているということですね.
△を押したときの電文は,下記のようになっています
(10進です)
① 128,-1, -1, -1, -1, -1, -1, -1, SUM: 122
② 128, 0, 16, 64, 64, 64, 64, 16, SUM: 16
③ 128, 0, 16, 64, 64, 64, 64, 16, SUM: 16
④ 128, 0, 16, 64, 64, 64, 64, 16, SUM: 16
⑤ 128, 0, 0, 64, 64, 64, 64, 0, SUM: 0
最初の電文は不正
2つ目から有効で,
同じ電文(これが△を押した電文)が3回きます.
(頂いた回答からすると)
5つ目が何もボタンを押していない状態でしょうか.
②~④の同じ電文は,少し長く押すと3回以上来ます.
長く押した場合は,
何も押していない電文が来ずに,
-1の電文やチェックサムが合わない電文が来ます.
あと,アナログスティックをある位置で固定した場合の
電文も仕様が理解できていません.
右のアナログスティックを右に倒して固定していると下記のような電文が来ます
(いちばん右の○×はチェックサムが合っているかどうかです)
128, -1, -1, -1, -1, -1, -1, -1, SUM: 122 ×
128, 0, 0, 64, 64, 108, 64, 44, SUM: 44 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 64, 64, SUM: 63 ×
128, 0, 0, 64, 0, 64, 64, 127, SUM: 64 ×
128, 0, 128, 0, 0, 64, 64, 127, SUM: 0 ×
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 0, 0, 64, 64, 127, 63, 128, SUM: 62 ×
128, 0, 0, 64, 64, 64, 64, 127, SUM: 0 ×
128, 0, 0, 128, 0, 0, 64, 64, SUM: 64 ○ <- ここはどうゆう信号でしょうか?
128, 0, 0, 127, 64, 63, 128, 0, SUM: 126 ×
128, 0, 0, 64, 64, 127, 0, 0, SUM: 127 ×
128, 128, 0, 0, 64, 64, 127, 64, SUM: 127 ×
128, 0, 0, 64, 64, 127, 64, 63, SUM: 63 ○
128, 64, 123, 64, 59, 128, 0, 0, SUM: 54 ×
16回目の電文はチェックサムが合っていますが,
一番左に倒した時の電文が来ているように思います.
さらに,最後はニュートラルに戻しているのですが,
右に倒した状態の電文で終わっているようにも思います.
Arduino での解析の方法が間違っている可能でもありますが,
一旦電文の仕様を教えていただければありがたいです.
Re: SBDBT5VのPS3コントローラからの電文 - ランエレ URL
2015/03/06 (Fri) 15:37:15
KURO 様
ご連絡ありがとうございます。
「PS3コントローラ /USBゲームパッドUART変換ファームウェア」の動作確認用ファームウェア(以下動作確認用ファームウェア)について、前回私の方で記載した内容に誤りがございました。
お詫びと訂正をさせていただきます。
「動作確認用ファームウェアでは変化があったときに送信するようになっています。」
は誤りで、正しくは
「動作確認用ファームウェアでは何も操作のない状態では何も送信されませんが、操作中は連続して電文が送信されます。」
となります。
申し訳ございませんでした。
動作確認用ファームウェアは、私の方で動作させると以下のようになりました。(全て16進数表記です)
1.電源投入時には以下の電文が無条件に送信されます。
80 00 00 40 40 40 40 00
これは電圧の変動などで不意なリセットがかかった時に、接続機器側に無操作の状態を送信するためのものです。
2.ペアリング済みPS3コントローラ(DUAL SHOCK3)のPS3ボタンを押すと、SBDBT5Vの橙色LEDが点滅します。接続しただけでは特に電文は送信されません。
3.PS3コントローラの○ボタンを一度押して離すと以下の様な電文が送信されます。
80 00 40 40 40 40 40 40
80 00 40 40 40 40 40 40
80 00 00 40 40 40 40 00
1行目の電文で3バイト目が40になり、○ボタンが押されていることを表しています。このまま○ボタンを押し続けるとこの電文が連続して送信されます。今回は短めに押したので2回の電文が送信されました。
3行目の電文では3バイト目が00になり、○ボタンが離されたことを表しています。
KURO様にご記載いただいた電文は、10進数表記のようですが、私の方で動作させた結果とかなり異なっています。
これは、SBDBT5Vが正しく動作していないか、ファームウェアを変更されていませんでしょうか。
または、TeraTermのデバッグモード等で電文を受信してみていただくことは可能でしょうか。
どうぞよろしくお願いします。
Re: SBDBT5VのPS3コントローラからの電文 - KURO
2015/03/08 (Sun) 20:33:52
回答ありがとうございました.
色々と解析したところ,Arduinoのスケッチの記述に問題があることが分かり,それに対処することで上手く電文を取得することが出来ました.
色々と情報ありがとうございました.
SBDBTの電文は,Arduinoのシリアルポートで受けていたのですが,Arduinoのシリアルポートにデバック用に多くのログを出力していために,
Arudino のシリアルポートのバッファ(128バイト)が溢れていたことが原因でした.
Re: SBDBT5VのPS3コントローラからの電文 - ランエレ
2015/03/09 (Mon) 01:14:09
KURO様
うまく動作しているようで安心いたしました。
シリアルポートのバッファオーバーランは私も経験ございますが、悩みますよね。
今後ともどうぞよろしくお願いいたします。