シリアル接続のペンタブレット WACOM ArtPad II の解析資料です。
この解析結果はシリアル接続の古いWACOM製ペンタブレットが対象です。 Neko Project 21/Wのwin9x/commng/cmwacom.cppも参考にして下さい。
Linux Wacomの資料も大変参考になります。
linuxwacom-wiki-archive/Serial_Protocol_IV.md
接続設定は以下の通り。
項目 | 設定値 |
---|---|
通信速度 | 9600bps または 19200bps ※ |
データビット | 8bit |
パリティ | なし |
ストップビット | 1bit |
ペンタブレットへのコマンドをASCIIのテキストで送り、最後にCR(LFが無視されるかは未検証)を送信すると実行される(ただし「~#」コマンドは例外的に改行なしで即時実行される)。 判明しているコマンドは以下の通り。表中の\nはLF, \rはCRの意味。
コマンド | 機能 |
---|---|
~# | ペンタブレットのモデル名を取得する。例えば「~#KT-0405-R00 V1.3-2\r」のような文字列が返される。 |
#\r | ペンタブレット設定をリセットする。筆圧有効の状態で通信速度は9600bpsになる。どこかで見た情報によるとprotocol IV commandとやらを有効にするらしいです。 |
$\r | ペンタブレット設定をリセットする。筆圧無効の状態 |
#~*F202C800\r | 通信速度を19200bpsに変更する? |
~*F2039100,000,00,1000,1000\r | 通信速度を19200bpsに変更して筆圧有効化? |
~*E2039100,000,00,1000,1000\r | 通信速度を9600bpsに変更して筆圧有効化? |
ST\r | ペンタブレット座標の送信を開始する。 |
@ST\r | ペンタブレット座標の送信を開始し、現在位置の情報を直ちに送る。 |
SP\r | ペンタブレット座標の送信を停止する。 |
~R\r | 詳細不明。何らかの値 |
~C\r | 詳細不明。何らかの値 |
NR<整数値>\r | ペンタブレットの解像度を指定する。 |
AS<0 or 1>\r | AS0にするとCSV形式で座標データを送る(筆圧無効モードのみ)。AS1の場合はバイナリで座標データを送る。 |
DE<0 or 1>\r | DE0にすると絶対座標データを送る。DE1の場合は相対座標データ(直前の座標との差)を送る。 |
SU<01 or 00>\r | 00にすると一定間隔で座標を送り続ける。01にすると同じ座標値の場合には座標を送らない。 |
SC<幅>,<高さ>\r | 画面上での操作領域のサイズを指定する? |
TE\r | 「KT-0405-R00 V1.3-2 95/04/28 by WACOM\r\nI AM FINE.\r\n」の形式のテキストを返す。 |
TE<文字列>\r | 「KT-0405-R00 V1.3-2 95/04/28 by WACOM\r\n<文字列4文字まで>\r\nI AM FINE.\r\n」の形式のテキストを返す。4文字未満の場合は指定した文字数までとなり、5文字以上指定した場合は4文字を超えた部分が無視される。 |
STコマンドでペンタブレット座標と状態の送信が開始される。 SUコマンドで常時送出モードにしない限り、ペン座標や状態が変わったときだけ送られる。
筆圧無効モードか筆圧有効モードかでパケットの内容が変化する。 また、筆圧無効モードの場合はCSV形式モード(ASコマンドで設定)が使用可能。
パケットはバイナリ形式で、データの7bit目が1ならパケットデータ開始。
Byte | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
---|---|---|---|---|---|---|---|---|
0 | 1 | ペン不在 | 1 | 0 | 消ゴム? | ? | X座標 bit 15,14 | |
1 | 0 | X座標 bit 13~7 | ||||||
2 | 0 | X座標 bit 6~0 | ||||||
3 | 0 | ペンボタン状態(各bitが対応) | ? | Y座標 bit 15,14 | ||||
4 | 0 | Y座標 bit 13~7 | ||||||
5 | 0 | Y座標 bit 6~0 | ||||||
6 | 0 | 消ゴム | 筆圧値 |
「$\r」コマンドを送ると筆圧が無効になる。電源投入時のパケットはバイナリ形式で、データの7bit目が1ならパケットデータ開始。
Byte | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 | ? | ? | X座標 bit 15,14 | |
1 | 0 | X座標 bit 13~7 | ||||||
2 | 0 | X座標 bit 6~0 | ||||||
3 | 0 | ? | ? | ? | ? | ? | Y座標 bit 15,14 | |
4 | 0 | Y座標 bit 13~7 | ||||||
5 | 0 | Y座標 bit 6~0 | ||||||
6 | 0 | ? | ? | ? | ペンボタン状態(各bitが対応) |
「$\r」コマンドを送ると筆圧が無効になる。「AS0\r」コマンドを送った後のパケットはCSVテキスト形式で、改行(CR LF)までが1パケットのデータ。
フォーマット:
#,<X座標:10進数5桁>,<Y座標:10進数5桁>,<ボタンの値:10進数2桁 ペンがタブレット範囲外の時は99>\r\n
(例1) #,00521,00011,12
ペン座標が(x,y)=(521,11)で、ボタンフラグが12
(12は2進数で1100すなわちbit2とbit3がONなのでボタン2とボタン3が押されている)
(例1) #,00001,01112,99
ペン座標が(x,y)=(1,1112)で、ペンがタブレット領域外
公式のWindows用ドライバは次のようなコマンドを送っていました。 以下のような手順で確実にタブレットを検出できると思われます。