WACOM ArtPad II 解析資料

シリアル接続のペンタブレット 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
※通信速度はコマンドによって切り替える。電源投入時は9600bps。

ペンタブレットへのコマンドをASCIIのテキストで送り、最後にCR(LFが無視されるかは未検証)を送信すると実行される(ただし「~#」コマンドは例外的に改行なしで即時実行される)。 判明しているコマンドは以下の通り。表中の\nはLF, \rはCRの意味。

コマンド機能
~#ペンタブレットのモデル名を取得する。例えば「~#KT-0405-R00 V1.3-2\r」のような文字列が返される。
#\rペンタブレット設定をリセットする。筆圧有効の状態で通信速度は9600bpsになる。どこかで見た情報によるとprotocol IV commandとやらを有効にするらしいです。
$\rペンタブレット設定をリセットする。筆圧無効の状態で通信速度は9600bpsになる。
#~*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>\rAS0にするとCSV形式で座標データを送る(筆圧無効モードのみ)。AS1の場合はバイナリで座標データを送る。
DE<0 or 1>\rDE0にすると絶対座標データを送る。DE1の場合は相対座標データ(直前の座標との差)を送る。
SU<01 or 00>\r00にすると一定間隔で座標を送り続ける。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ならパケットデータ開始。

Bytebit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0
0 1ペン不在10消ゴム??X座標 bit 15,14
1 0X座標 bit 13~7
2 0X座標 bit 6~0
3 0ペンボタン状態(各bitが対応)?Y座標 bit 15,14
4 0Y座標 bit 13~7
5 0Y座標 bit 6~0
6 0消ゴム筆圧値

筆圧無効モード(バイナリ形式)

「$\r」コマンドを送ると筆圧が無効になる。電源投入時のパケットはバイナリ形式で、データの7bit目が1ならパケットデータ開始。

Bytebit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0
0 1110??X座標 bit 15,14
1 0X座標 bit 13~7
2 0X座標 bit 6~0
3 0?????Y座標 bit 15,14
4 0Y座標 bit 13~7
5 0Y座標 bit 6~0
6 0???ペンボタン状態(各bitが対応)

筆圧無効モード(CSV形式)

「$\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用ドライバは次のようなコマンドを送っていました。 以下のような手順で確実にタブレットを検出できると思われます。

  1. 19200bpsでシリアルポートをオープン。「#\r」コマンドと「SP\r」コマンドを交互に10セットくらい送る。返事は気にしない。
  2. 9600bpsでシリアルポートを再オープン。この際に受信バッファは破棄する。念のため「#\r」コマンドと「SP\r」コマンドを交互に何回か送った後「~#」コマンドで名前が返事として返ってくるか確認する。
  3. 名前がとれたら検出成功なので後は煮るなり焼くなり好きにする。とれなかった場合は諦める(検出失敗)か最初からやり直す。

資料集に戻る

トップに戻る