吹风FC 2024-06-07 17:51 采纳率: 0%
浏览 44
已结题

Android USB HID串口通信问题

android跟CRT-603-HID读卡器通信,能获取并且连接到USB设备,但是发送数据一直失败。

//发送数据相关代码

 byte[] data = new byte[]{
                           (byte)0xF2, (byte)0x00,(byte)0x03,(byte)0x43,(byte)0x30,(byte)0x31,(byte)0x00};
 int transferred = connection.bulkTransfer(endpointOut, data, data.length, 200);

这是开发文档中的相关内容,加入了错误码图片

img

img

img

求不是AI生成的回答

  • 写回答

28条回答 默认 最新

  • 阿里嘎多学长 2024-06-07 17:51
    关注
    获得0.60元问题酬金

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的文档内容和问题描述,以下是解决Android USB HID串口通信问题的一些关键点和建议:

    1. 确保USB接口模式与文档相符

      • 根据文档,虽然接口模式是USB2.0全速模式,但实际使用的是USB1.1全速模式。确保您的Android设备在与读卡器通信时使用的是正确的USB版本。
    2. 使用正确的USBHID协议

      • 您的代码应该遵循USBHID协议,确保使用了正确的VID(23D8H)和PID(0285H)。
    3. 处理报告描述符长度限制

      • 由于报告描述符长度限制为64字节,您的数据需要分帧发送。如果数据超过64字节,需要按照文档中描述的方法进行分帧和重组。
    4. 正确的数据帧格式

      • 根据文档,数据帧格式应包括报告ID(0)和数据字段。确保您的数据按照这个格式进行打包。
    5. 发送数据时考虑帧的大小

      • 您的示例代码中发送的数据长度为7字节,这应该在一个帧内发送。但是,如果数据更长,需要按照文档中的方法进行分帧。
    6. 检查超时设置

      • 您的代码中使用了200毫秒的超时设置。根据通信的实际情况,可能需要调整这个值。
    7. 读卡器启动时间

      • 确保在设备上电后等待6秒再尝试通信。
    8. 错误处理

      • 在发送数据后,检查transferred变量的值,如果不等于期望的数据长度,可能表示发送失败。需要根据具体情况进行错误处理。
    9. 调试和日志记录

      • 在开发过程中,使用日志记录关键步骤和变量值,以便调试和查找问题。
    10. 参考文档和代码示例

    代码示例(仅供参考):

    // 假设endpointOut是已经获取的输出端点引用
    byte[] dataToSend = {(byte)0xF2, (byte)0x00, (byte)0x03, (byte)0x43, (byte)0x30, (byte)0x31, (byte)0x00};
    int dataLength = dataToSend.length;
    int totalTransferred = 0;
    
    // 如果数据长度超过64字节,需要分帧发送
    while (totalTransferred < dataLength) {
        int bytesToSend = Math.min(dataLength - totalTransferred, 64);
        int transferred = connection.bulkTransfer(endpointOut, Arrays.copyOfRange(dataToSend, totalTransferred, totalTransferred + bytesToSend), bytesToSend, 200);
        if (transferred < 0) {
            // 处理错误
            break;
        }
        totalTransferred += transferred;
    }
    
    // 检查是否所有数据都已发送
    if (totalTransferred == dataLength) {
        // 数据发送成功
    } else {
        // 发送失败,处理错误
    }
    

    请注意,这只是一个基本的示例,您可能需要根据您的具体需求进行调整。如果您需要更详细的帮助或有特定的问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 修改了问题 6月12日
  • 修改了问题 6月7日
  • 创建了问题 6月7日

悬赏问题

  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("
  • ¥15 JSzip压缩文件时如何设置解压缩密码
  • ¥66 nuxtjs3 ,老是报错,内容:我有代码仓库,如何解决?
  • ¥30 WPF如何实现动态Y轴
  • ¥15 读取parquet文件某一列的数据但是输出是整个列名和格式
  • ¥15 机动目标 制导律建模问题
  • ¥100 求Java socks 转发实现Demo
  • ¥20 随身WiFi移动网络访问不了