USB-IO2.0(AKI)という挿せば即USBデバイスとして使えるようになる機器を動かす為のサンプル の入力編。
[スイッチを押したことを読み取って、上下左右のキーを押したことにする]
(大体同じように)動作している状況は https://twitter.com/millline/status/1608806324007243776 の動画を参照ください。
・mod_usbio_p2aki.asモジュール は簡易版のため注意点アリ。モジュール内冒頭を確認してください。
・回路はJ2-0~3をスイッチでGNDに行くようにしてください。(J2-0~3と上下左右キーの割り当ては適宜調整。)
USB-IO2.0(AKI)という挿せば即USBデバイスとして使えるようになる機器を動かす為のサンプル の入力編。
[スイッチを押したことを読み取って、上下左右のキーを押したことにする]
(大体同じように)動作している状況は https://twitter.com/millline/status/1608806324007243776 の動画を参照ください。
・mod_usbio_p2aki.asモジュール は簡易版のため注意点アリ。モジュール内冒頭を確認してください。
・回路はJ2-0~3をスイッチでGNDに行くようにしてください。(J2-0~3と上下左右キーの割り当ては適宜調整。)
/*
mod_usbio_p2aki.as - ver.1.0 by MIZUSHIKI
------------------------------------------------------------------------
HSP3同梱の標準モジュール mod_usbio.as を無理やり拡張したモジュールです。
必ず他のモジュールより先に #include "mod_usbio_p2aki.as" してください。
*/
//【 簡易的に mod_usbio.as を乗っ取って拡張 】
#undef print@m0
#define print@m0 if(vid==0x1352 && pid==0x121){ pid==0x100 }:logmes
// ↑ProductID==0x121のとき0x121->0x100偽装して使えるようにする。(本当はモジュールの中身に判定を書き足すのが正しい)
#include "mod_usbio.as" // ← ※他のモジュールより先に記述してください。(モジュール名「@m0」だと仮定して拡張します)
#module mod_usbio_p2aki
#define global uio2aki_out(%1=-1,%2=-1) uio2aki_out@mod_usbio_p2aki %1,%2
#deffunc uio2aki_out@mod_usbio_p2aki int port1, int port2
if hHID@m0==0 : return 1 ; ERROR
dim sz,1
sdim dat,OutputByte@m0+1
poke dat,0,0
poke dat,1,0x20 //入出力コマンド
if port1 != -1 {
poke dat,2,1 //出力1 ポート
poke dat,3,port1 //出力1 値
}
if port2 != -1 {
poke dat,4,2 //出力2 ポート
poke dat,5,port2 //出力2 値
}
WriteFile@m0 hHID@m0, dat, OutputByte@m0, sz, 0
return (sz!=OutputByte@m0)
#deffunc uio2aki_inp var port1, var port2
if hHID@m0==0 : return 1 ; ERROR
if OutputByte@m0<InputByte@m0 : return 1 ; ERROR
dim sz,1
SendCnt = (SendCnt+1) \ 0xFF
sdim dat,InputByte@m0+1
poke dat,0,0
poke dat,1,0x20 //入出力コマンド
poke dat,InputByte@m0-1,SendCnt //識別カウンタ
WriteFile@m0 hHID@m0, dat, InputByte@m0, sz, 0
if sz!=InputByte@m0 : return 1 ; ERROR
//入力処理
f=1
repeat 100
ReadFile@m0 hHID@m0, dat, InputByte@m0, sz, 0
if stat==0 : break
if peek(dat,InputByte@m0-1)==SendCnt {
port1 = peek(dat,2)
port2 = peek(dat,3)
f=0 : break
}
loop
return f
#global
//========================================================↑mod_usbio_p2aki.as==
;#include"mod_usbio_p2aki.as"
#include "user32.as"
title "USB-IO2.0(AKI) InputTest"
// USB-IO初期化
mes "USB-IOを接続してください"
repeat
uio_find : if stat==0 :break
wait 10
loop
mes "接続 // hHID="+hHID@m0+", InputByte="+InputByte@m0+", OutputByte="+OutputByte@m0
Up=1 : Lf=1 : Dn=1 : Rt=1 ; フラグを1で初期化(スイッチが押されたときに0になるので)
*main
await 10
// 受信
uio2aki_inp inp1, inp2 ; 各ポートの入力を取得(ポート1で入力を使いたいならシステム設定を書き込んでピンの入出力設定を変更する必要あり[コマンド:0xF9])
if stat {
// USB抜いても差し直したら再接続&再受信
uio_find : if stat==0 && hHID@m0!=0 : mes "再接続 // hHID="+hHID@m0+", InputByte="+InputByte@m0+", OutputByte="+OutputByte@m0 : uio2aki_inp inp1, inp2
}
title strf("inp2=%2d(%s)",inp2,ToBit4(inp2))
if Up != ( (inp2>>0) & 1 ) : Up = 1-Up : if Up==0 : mes strf("↑ inp2=%2d(%s)",inp2,ToBit4(inp2)) : keybd_event 38,0,0,0 : keybd_event 38,0,2,0 ; 上キーを押して離す
if Lf != ( (inp2>>1) & 1 ) : Lf = 1-Lf : if Lf==0 : mes strf("← inp2=%2d(%s)",inp2,ToBit4(inp2)) : keybd_event 37,0,0,0 : keybd_event 37,0,2,0 ; 左キーを押して離す
if Dn != ( (inp2>>2) & 1 ) : Dn = 1-Dn : if Dn==0 : mes strf("↓ inp2=%2d(%s)",inp2,ToBit4(inp2)) : keybd_event 40,0,0,0 : keybd_event 40,0,2,0 ; 下キーを押して離す
if Rt != ( (inp2>>3) & 1 ) : Rt = 1-Rt : if Rt==0 : mes strf("→ inp2=%2d(%s)",inp2,ToBit4(inp2)) : keybd_event 39,0,0,0 : keybd_event 39,0,2,0 ; 右キーを押して離す
if ginfo_cy+ginfo_mesy>=ginfo_sy : cy=ginfo_cy:pos 0,0:gcopy 0,0,cy-ginfo_mesy,ginfo_sx,ginfo_sy:color 255,255,255:boxf 0,ginfo_mesy:color:pos 0,ginfo_mesy ; 画面下まで書き込んだら消す
goto *main
#module
#defcfunc ToBit4 int p
b="" : repeat 4 : b = ""+((p>>cnt)&1)+b : loop
return "%"+b
#global