FT260学习笔记4-FT260 HID Reports

USB HID class是通过reports来通信的,包含3种类型的report:

  1. Feature report:配置report

对应的Windows API接口函数:

        [DllImport("hid.dll")]

        private static extern Boolean HidD_SetFeature(

              IntPtr HidDeviceObject,

              byte[] ReportBuffer,

              uint ReportBufferLength

     );

                   [DllImport("hid.dll")]

        private static extern Boolean HidD_GetFeature(

              IntPtr HidDeviceObject,

              byte[] ReportBuffer,

              uint ReportBufferLength

     );

  1. Input report:HID设备到HOST的数据输入report

 

  1. Output report:HOST到HID设备的数据输出report

 

 

FT260从HID应用接收输出report,解析对应的需求,并将数据转发给连接的IIC或者UART设备。同样,通过输入report接收从IIC或UART设备发送的数据。

 

根据USB HID协议,一个USB传输只允许一个report,并且report的大小为64字节,包括一个Report ID。如果需要大于64字节,必须分割成多个连续的HID report。

 

HID类特定的请求允许主机查询FT260的配置和状态,并设置输出和特征项的状态。这些传输是通过Control通道完成的。对于FT260,只有特征report可以通过Control通道获取或设置。

 

HID Report的结构:

HID report的第一个字节是Report ID,后面是有效数据。ID列表如下:

以获取Chip code(Direction: Feature Out)和设置System Clock(Direction: Feature Out)为例说明如何配置FT260.

  1. 在hid.cs中增加成员函数

public Boolean setFeature(byte[] ReportBuffer, uint ReportBufferLength)

{

    return HidD_SetFeature(hHubDevice, ReportBuffer, ReportBufferLength);

}

 

public Boolean getFeature(byte[] ReportBuffer, uint ReportBufferLength)

{

    return HidD_GetFeature(hHubDevice, ReportBuffer, ReportBufferLength);

}

  1. 在hidInterface.cs中增加成员函数

public Boolean setFeature(byte[] ReportBuffer, uint ReportBufferLength)

{

    return oSp.setFeature(ReportBuffer, ReportBufferLength);

}

 

public Boolean getFeature(byte[] ReportBuffer, uint ReportBufferLength)

{

    return oSp.getFeature(ReportBuffer, ReportBufferLength);

}

  1. 调用getFeature获取Chip Code

byte[] chipCode = new byte[64];

chipCode[0] = 0xA0;

hid.getFeature(chipCode, 64);

 

Console.WriteLine("chip code:0x{0:x},0x{1:x},0x{2:x},0x{3:x},0x{4:x}",

chipCode[0], chipCode[1], chipCode[2], chipCode[3], chipCode[4]);

打印结果是:chip code:0xa0,0x2,0x60,0x2,0x0

  1. 调用setFeature设置System Clock。

byte[] buf = new byte[64];

buf[0] = 0xA1;

buf[1] = 0x01;

switch(cbSysClock.Text)

{

    case "12MHz":

        buf[2] = 0;

        break;

    case "24MHz":

        buf[2] = 1;

        break;

    case "48MHz":

        buf[2] = 2;

        break;

    default:

        buf[2] = 2;

        break;

}

hid.setFeature(buf, 64);

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值