usb - usb操作库#

示例

--[[
--简单举例
pm.power(pm.USB, false)        --确保USB外设是掉电状态
--usb.vid(0, 0x1234)        --配置VID,不是必须的
--usb.pvid(0, 0x5678)        --配置PID,不是必须的
usb.clear_all_class(0)                --清除掉之前配置的设备类
usb.mode(0, usb.DEVICE)        --usb设置成从机模式
usb.add_class(0, usb.CDC_ACM, 1)    --使用1个CDC-ACM虚拟串口功能
usb.add_class(0, usb.WINUSB, 1)        --使用1个WINUSB功能
pm.power(pm.USB, true)        --USB上电初始化开始工作
--说明
目前设备类只有usb.HID和usb.WINUSB可以通过usb操作库api和对端通讯,usb.CDC-ACM虚拟串口直接使用uart api
]]

常量#

常量

类型

解释

usb.HOST

number

USB主机模式

usb.DEVICE

number

USB从机模式

usb.OTG

number

USB otg模式

usb.CDC_ACM

number

cdc_acm 虚拟串口类

usb.AUDIO

number

audio音频类

usb.CAMERA

number

摄像头类

usb.HID_CM

number

HID设备类,自定义类型,用于透传数据

usb.HID_KB

number

HID设备类,标准键盘,常见扫码枪

usb.MSC

number

大容量存储类,也就是U盘,TF卡

usb.WINUSB

number

WINUSB类,透传数据

usb.EV_RX

number

有新的数据到来

usb.EV_TX

number

所有数据都已发送

usb.EV_CONNECT

number

usb从机已经连接上并且枚举成功

usb.EV_DISCONNECT

number

usb从机断开

usb.EV_SUSPEND

number

usb从机挂起

usb.EV_RESUME

number

usb从机恢复

usb.tx(id, data, class)#

USB发送数据,目前仅限于HID和WINUSB设备,CDC-ACM虚拟串口直接使用串口API操作

参数

传入值类型

解释

int

设备id,默认为0

zbuff

or string 需要发送的数据

int

设备类

返回值

返回值类型

解释

bool

成功返回true,否则返回false,总线id填错,所填设备类不支持直接发送数据等情况下返回错误

例子

-- HID上传数据
usb.tx(0, "1234", usb.HID_KB) -- usb hid上传0x31 0x32 0x33 0x34  + N个0

usb.rx(id, buff, class)#

buff形式读接收到的数据,一次读出全部数据存入buff中,如果buff空间不够会自动扩展

参数

传入值类型

解释

int

设备id,默认为0

zbuff

zbuff对象

int

设备类

返回值

返回值类型

解释

int

返回读到的长度,并把zbuff指针后移

例子

usb.rx(0, buff, usb.HID)

usb.mode(id, mode)#

设置USB工作模式,必须在USB外设掉电不工作时进行设置

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

int

工作模式,只有3种,usb.HOST主机模式,usb.DEVICE从机模式,usb.OTG协商模式,默认是从机模式

返回值

返回值类型

解释

bool

成功返回true,否则返回false,总线id填错,所选模式不支持时,USB外设正在工作等情况下返回失败

例子

pm.power(pm.USB, false)
usb.mode(0, usb.DEVICE)
pm.power(pm.USB, true)

usb.on(id, func)#

注册USB事件回调

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

function

回调方法

返回值

返回值类型

解释

nil

无返回值

例子

usb.on(0, function(id, class, event)
    log.info("usb", id, class, event)
end)
--回调参数有3个
1、usb总线id
2、event,见usb.EV_XXX
3、如果event是usb.EV_RX或usb.EV_TX,则第三个参数表示哪个设备类,目前只有usb.HID和usb.WINUSB


usb.vid(id, vid)#

设置/获取USB的VID,必须在USB外设掉电不工作时进行设置,获取没有限制

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

int

想要设置的VID值,留空则不做设置

返回值

返回值类型

解释

bool

成功或者获取VID时返回true,否则返回false,总线id填错,芯片不支持设置,USB外设正在工作等情况下返回失败

int

当前VID值

例子

pm.power(pm.USB, false)
usb.vid(0, 0x1234)
pm.power(pm.USB, true)

usb.pid(id, pid)#

设置/获取USB的PID,必须在USB外设掉电不工作时进行设置,获取没有限制

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

int

想要设置的PID值,留空则不做设置

返回值

返回值类型

解释

bool

成功或者获取VID时返回true,否则返回false,总线id填错,芯片不支持设置,USB外设正在工作等情况下返回失败

int

当前PID值

例子

pm.power(pm.USB, false)
usb.pid(0, 0x1234)
pm.power(pm.USB, true)

usb.add_class(id, class, num)#

设置USB支持的设备类和数量,必须在USB外设掉电不工作时进行设置

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

int

设备类,从机模式支持usb.CDC_ACM,usb.HID_CM,usb.HID_KB,usb.MSC,usb.WINUSB,主机模式不需要配置

int

数量,目前只有从机的usb.CDC_ACM允许至多3个,其他只允许1个,超过时会强制改成所允许的最大值

返回值

返回值类型

解释

bool

成功返回true,否则返回false,总线id填错,所选设备类不支持时,端点数量超过芯片允许的最大值,USB外设正在工作等情况下返回失败

例子

pm.power(pm.USB, false)
usb.add_class(0, usb.CDC_ACM, 3)    --使用3个CDC-ACM虚拟串口功能
usb.add_class(0, usb.WINUSB, 1)        --使用1个WINUSB功能
usb.add_class(0, usb.HID_CM, 1)        --使用1个自定义HID功能
usb.add_class(0, usb.HID_KB, 1)        --使用1个标准键盘功能
pm.power(pm.USB, true)

usb.clear_all_class(id)#

清除掉当前配置的设备类,必须在USB外设掉电不工作时进行设置

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

返回值

返回值类型

解释

bool

成功返回true,否则返回false,总线id填错,USB外设正在工作等情况下返回失败

例子

pm.power(pm.USB, false)
usb.clear_all_class(0)                --清除掉之前配置的设备类
usb.add_class(0, usb.CDC_ACM, 3)    --使用3个CDC-ACM虚拟串口功能
usb.add_class(0, usb.WINUSB, 1)        --使用1个WINUSB功能
pm.power(pm.USB, true)

usb.get_free_ep_num(id)#

返回当前剩余的端点数

参数

传入值类型

解释

int

usb总线id,默认0,如果芯片只有1条USB线,填0

返回值

返回值类型

解释

int

剩余的端点数,总线id填错时直接返回0

例子

log.info(usb.get_free_ep_num(0))