HSP3でUSB-IO2.0(AKI)を使ったサンプルスクリプト – 出力編

USB-IO2.0(AKI)という挿せば即USBデバイスとして使えるようになる機器を動かす為のサンプル の出力編。
[8つのLEDを光らせる]
動作している状況は https://twitter.com/millline/status/1606898916704030720 の動画を参照ください。
・mod_usbio_p2aki.asモジュール は簡易版のため注意点アリ。モジュール内冒頭を確認してください。
・回路はJ1-0~7にLEDを取り付けてください。(+抵抗)

USB-IO2.0(AKI)という挿せば即USBデバイスとして使えるようになる機器を動かす為のサンプル の出力編。
[8つのLEDを光らせる]
動作している状況は https://twitter.com/millline/status/1606898916704030720 の動画を参照ください。
・mod_usbio_p2aki.asモジュール は簡易版のため注意点アリ。モジュール内冒頭を確認してください。
・回路はJ1-0~7にLEDを取り付けてください。(+抵抗)

  • タグ:
  • タグはありません
/*
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==0x1210x121->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"
title "USB-IO2.0(AKI) OutputTest"
// 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
//
uio2aki_out 0b01010101 ; bit LED 0 2 4 6 1
led_mae = 0b00000000 ; LED
*main
wait 1
// LED
id = mousex / (ginfo_sx/8)
led = 1<<id ; bit:LEDID
if mousey < ginfo_sy/2 : led = 0b00000000 ;
// 18LEDID
repeat 8
getkey key, 49+cnt : if key : led |= 1<<cnt ; bit:LEDID
loop
title strf("led=%03d(%s)",led,ToBit8(led))
if led_mae == led : goto *main ; LED
led_mae = led
//
redraw 0
color 255,255,255 : boxf 0,ginfo_sy/2 : color 255
repeat 8
if (led>>cnt)&1 : boxf (ginfo_sx/8)*cnt, ginfo_sy/2, (ginfo_sx/8)*(cnt+1), ;
loop
redraw 1
//
uio2aki_out led ; bit 1LED22[:0xF9]
if stat {
// USB
uio_find : if stat==0 && hHID@m0!=0 : mes " // hHID="+hHID@m0+", InputByte="+InputByte@m0+", OutputByte="+OutputByte@m0 : uio2aki_out led
}
goto *main
#module
#defcfunc ToBit8 int p
b="" : repeat 8 : b = ""+((p>>cnt)&1)+b : loop
return "0b"+b
#global
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX