Android USB Host API:批量传输缓冲区大小

2023-12-27

我正在编写软件平板电脑之间进行通信(摩托罗拉 Xoom,Android 版本 4.0.3,内核版本 2.6.39.4)以及使用 USB Host API 的外围设备由安卓提供。我只使用两种类型的通信:

  • control: controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
  • bulk: bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

控制传输工作正常,但我有批量传输的问题。我只能使用 32768 作为bulkTransfer 函数的缓冲区大小。不能少用或多用。我知道由于缓冲管道的限制(大小:32769 字节),我不能使用更多。

该外围设备传输bulkTranfer 函数未正确读取的数据。我想有些数据丢失了。

我发现这个:在 Linux 中,如果进程尝试从空管道(缓冲区)读取数据,则 read(2) 将阻塞,直到数据可用。如果进程尝试写入完整的管道,则 write(2) 会阻塞,直到从管道读取足够的数据以允许写入完成。 http://www.kernel.org/doc/man-pages/online/pages/man7/pipe.7.html

基于此,我对问题的解释是,由于 write(2) 函数创建的阻塞标志,某些数据未写入管道(缓冲区)。我对么?如果这是真的我可以改变管道缓冲区。

  1. 我对这个问题的第一个解决方案是更大的缓冲区。为了 kernel >= 2.6.35,您可以使用以下命令更改管道的大小fcntl(fd, F_SETPIPE_SZ, size) https://stackoverflow.com/questions/4739348/is-it-possible-to-change-the-size-of-a-named-pipe-on-linux但我怎样才能找到fd(文件描述符)对于 USB 管道?
  2. 第二个选项是使用ulimit -p SIZE但参数p因为我的内核不是用于管道而是用于进程。

有没有人遇到同样的问题,有解决办法吗?


你应该买一个USB数据分析仪,我用的是这个:http://www.ellisys.com/products/usbex200/index.php http://www.ellisys.com/products/usbex200/index.php

当我做同样类型的事情时,使用这样的东西确实对我有帮助,我发现你必须做某种类型的 while 循环。

对于我的设备,我有 64 字节的数据以数据包的形式发送给我,该数据包将是两个控制字节和 62 个数据字节,因此对于我的传输,我必须执行类似的操作

StringBuilder sb = new StringBuilder();
while(bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout) > 2){
    for(int i = 2; i < buffer.length(); i++){
        sb.append((char) buffer[i]);
    }
}

这些行很长,对我来说很有用,我遇到了完全相同的问题,这就是我解决它的方法。如果您需要的话,我有更多信息。只是评论:)。我知道这对我来说真的很令人沮丧。我使用的是带有 Android 4.0.3 的 Acer Iconia A500 顺便说一句


USB 传输大量数据 https://stackoverflow.com/questions/10931558/transferring-larger-amounts-of-data-usb

USB 传输数据 https://stackoverflow.com/questions/10429615/transferring-data-usb

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android USB Host API:批量传输缓冲区大小 的相关文章

  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 在 Android 中创建和使用 9 补丁图像

    我最近听说了 9 补丁图像 我知道它是 9 平铺的并且是可拉伸的 我想了解更多 如何创建 9 块图像 有什么工具吗 我可以通过 AndroidSDK 或代码创建它吗 9 patch 相对于普通 png 的主要优点 它是否可以根据屏幕动态 自
  • 显示警报或收到通知时的视图

    我正在关注this http tokudu com 2010 how to implement push notifications for android 显示的教程通知 on an 安卓设备 当我在设备上运行该应用程序时 状态栏上会出现
  • 如何在出现“无法解析放置符号”错误时向哈希图添加键和值

    我正在与安卓工作室 https en wikipedia org wiki Android Studio1 4 1 我刚刚创建了一个 Hashmap 并正在遵循有关如何填充和操作它的教程 Java 语言 但是 我收到 无法解析符号放置 错误
  • 使用 APDU 命令的有效 NFC 读取比特率是多少?

    我目前正在使用 Android IsoDep trancieve 函数发送和接收累计 1628 字节的数据 该函数分布在 35 个 APDU 命令 选择应用程序 身份验证 读取 中 字节计数包括返回的 MAC 校验和以及由 transcie
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • 如何使用闹钟音量和 setAudioAttributes 来播放铃声?

    所以我正在尝试了解音频属性 这是我到目前为止所拥有的 alarm getSound will return a proper URI to pick a ringtone Ringtone tone RingtoneManager getR
  • React Native Android 发布 apk 是调试,而不是发布

    我有一个现有的 Android 应用程序 我已根据以下内容将 React Native v0 30 活动添加到项目中docs http facebook github io react native releases next docs i
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • SQLite支持android的数据类型有哪些

    谁能告诉我 SQLITE 中支持 ANDROID 的数据类型列表 我想确认 TIME 和 DATE 数据类型 这里有一个list http www sqlite org datatype3 htmlSQLite 的数据类型 支持时间和日期间
  • 获取可以共享数据的应用程序列表

    此代码显示默认共享对话框 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType text html sharingIntent putExtra a
  • Google 移动广告和 Kindle Fire

    我最近用 Google 移动广告替换了 AdMob 库 对此我有一个疑问 广告会出现在 Amazon Kindle Fire 设备上吗 我问这个是因为我知道 Google 移动广告依赖于 Google Play 服务 所以我有点困惑 Goo
  • Android模拟器分配内存失败8

    当我尝试从 Eclipse 运行 WXGA800 模拟器时 出现如下错误 Failed to allocate memory 8 This application has requested the Runtime to terminate
  • jar 中的 apklib 有什么优点?

    我正在关注这个问题 https stackoverflow com questions 6059502 whats the difference between apklib and jar files但它并没有完全回答我的问题 jar 中
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • Android:确定 2.2 及更高版本上的摄像头数量

    我的应用程序需要在 Android 2 2 及更高版本上运行 我需要一种方法来确定可用摄像机的数量 有很多帖子解决了这个问题 但我找不到一个有效的 一种解决方案是简单地检测操作系统版本 任何 2 2 版本的设备都仅限于 1 个摄像头 即使该
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 具有矢量可绘制的 ImageView 的 Resources$NotFoundException

    我遇到了崩溃 Resources NotFoundException用于在活动创建时绘制的矢量 21 日前崩溃 安卓工作室2 1 支持库24 0 0 Gradle插件2 1 0 目标SDK 23 最小SDK 15 buildTools版本

随机推荐