通过Ruby在Windows中访问USB接口


require 'ffi'

module HidApi
extend FFI::Library
ffi_lib 'hidapi'

attach_function :hid_open, [:int, :int, :int], :pointer
attach_function :hid_write, [:pointer, :pointer, :int], :int
attach_function :hid_read_timeout, [:pointer, :pointer, :int, :int], :int
attach_function :hid_close, [:pointer], :void

REPORT_SIZE = 65 # 64 bytes + 1 byte for report type
def self.pad_to_report_size(bytes)
(bytes+[0]*(REPORT_SIZE-bytes.size)).pack("C*")
end
end

# USAGE

# CONNECT
vendor_id = 1234
product_id = 65432
serial_number = 0
device = HidApi.hid_open(vendor_id, product_id, serial_number)

# SEND
command_to_send = HidApi.pad_to_report_size([0]+ARGV.map(&:hex)).pack("C*")
res = HidApi.hid_write dev, command_to_send, HidApi::REPORT_SIZE
raise "command write failed" if res <= 0

# READ
buffer = FFI::Buffer.new(:char, HidApi::REPORT_SIZE)
res = HidApi.hid_read_timeout device, buffer, HidApi::REPORT_SIZE, 1000
raise "command read failed" if res <= 0
p buffer.read_bytes(HidApi::REPORT_SIZE).unpack("C*")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值