android读取usb设备数据_android读取r20c-usb的数据_wlr_tang的博客-程序员秘密

技术标签: Android  

main.c

#include <endian.h>
#include <errno.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>

#include <usbhost/usbhost.h>

int main(int argc, char **argv)
{
        char buff[64];
        int i = 0,out =0;
        static uint8_t read_ep;

        struct usb_descriptor_header* desc;
        struct usb_descriptor_iter iter;
        struct usb_interface_descriptor *intf = NULL;
        struct usb_endpoint_descriptor *ep1 = NULL;
        struct usb_endpoint_descriptor *ep2 = NULL;

        struct usb_device *p = usb_device_open("/dev/bus/usb/001/002");

        int vendorId = usb_device_get_vendor_id(p);
        int productId = usb_device_get_product_id(p);

        printf("vid =  %x, pid = %x\n",vendorId,productId);

            usb_descriptor_iter_init(p, &iter);
            while ((desc = usb_descriptor_iter_next(&iter)) != NULL && (!intf || !ep1 || !ep2)) {
                if (desc->bDescriptorType == USB_DT_INTERFACE) {
                    intf = (struct usb_interface_descriptor *)desc;
                } else if (desc->bDescriptorType == USB_DT_ENDPOINT) {
                    if (ep1)
                        ep2 = (struct usb_endpoint_descriptor *)desc;
                    else
                        ep1 = (struct usb_endpoint_descriptor *)desc;
                }
            }

            if (!intf) {
                printf("interface not found\n");
                exit(1);
            }
            if (!ep1 || !ep2) {
                printf("endpoints not found\n");
                exit(1);
            }

            printf("%d,%d,%d\n",ep1->bEndpointAddress,ep2->bEndpointAddress,intf->bInterfaceNumber);

            if (usb_device_claim_interface(p, intf->bInterfaceNumber)) {
                printf("usb_device_claim_interface failed errno2:\n");
                exit(1);
            }


            if ((ep1->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
               read_ep = ep1->bEndpointAddress;
            } else {
                read_ep = ep2->bEndpointAddress;
            }


        for(i = 0;i<10;i++){
                out = usb_device_bulk_transfer(p,read_ep,buff,64,0);
                printf("out = %d\n",out);
        }

    return 0;
}

Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := main.c
LOCAL_MODULE := main
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_LIBRARIES := \
    libusbhost \
include $(BUILD_EXECUTABLE)



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wlr_tang/article/details/54378702

智能推荐

E3首席讲师熊春系列文章之E3.Tree入门与进阶篇_huoming550的博客-程序员秘密

huangyh 2008-11-18 1.写在最前面 用E3组件很久了,对于黄老大滴无私奉献精神盛为感动。一直以来想帮着做点什么,今天,写此一文,希望能对初次接触E3的朋友有一定参考借鉴意义。谨以此为E3的成长壮大献上自己一点绵薄之力,了表心意。鉴于作者水平和精力有限,恳请各路大侠们批评指正! E3官方网站:http://www.javae3.com 2.E3.Tree简单...

秀动app抢票脚本_程序员硬核&quot;Python抢票教程”,帮你抢回家车票_weixin_39559895的博客-程序员秘密

盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票。据悉,今年春运期间,全国铁路发送旅客人次同比将增长8.0%,达到4.4亿人次,2020年铁路春运自1月10日开始,2月18日结束,共40天,节前15天,节后25天,今年的12月12日起日1月10日火车票正式发售。即使再难,家还是要回的,票还是要抢的,所以这一周,GitHub上用python抢票的项目又重回top榜...

.NET Framework 版本和依赖关系[微软官方文档]_weixin_30614587的博客-程序员秘密

.NET Framework 版本和依赖关系微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies每个版本的 .NET framework 都包含公共语言运行时 (CLR)、基类库和其他托管库。本主题按版本介绍了 .NET Framewo...

最简单的html5语言_weixin_30782331的博客-程序员秘密

什么是 HTML5?HTML5 是下一代 HTML 标准。最小的HTML5文档下面是一个简单的HTML5文档:&lt;&lt;/span&gt;!DOCTYPE html&gt;&lt;&lt;/span&gt;html&gt;&lt;&lt;/span&gt;head&gt;&lt;&lt;/span&gt;meta charset="utf-8"&gt;&lt;...

Android-使用SoundPool实现语音计算器_Conway chen的博客-程序员秘密

Android计算器的代码直接使用Android系统里面的Calculator。先找到Android 工程源码中的Calculator(./package/app/Calculator)。导入到Eclipse或者AS。        一、Eclipse导入Android系统自带的Calculator。         在找到Calculator代码以后,在Eclipse中执行:file->

php $_get数组,谈谈PHP里的$_GET数组_PHP教程_weixin_39591916的博客-程序员秘密

在开发过程中,GET和POST像灵魂一样,无处不在。$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。在使用 $_GET 变量时,所有的变量名和值都会显示在 URL...

随便推点

互联网PM,和传统行业PM本质上的不同在哪?_人人都是产品经理的博客-程序员秘密

互联网产品经理,和传统行业产品经理本质上的不同在哪里? 本质区别在于思维方式。首先,阐明他们两个在职业属性上的共同点:满足需求。产品经理的工作核心在于挖掘需求后满足需求,在此基础上实现双方共赢。而区别在于满足谁的需求,传统行业产品经理(以下称为A)满足的是客户的需求,他的每一项工作都具有极强的目的性和针对性,换而言之,每个客户的需求得到满 足之后都是需要对产品付费的。于是,在结果导向的驱动下,A...

caffe 的损失函数 loss 原文解析-多个损失函数 loss 网络搭建_多损失层构建网络_sunxingxingtf的博客-程序员秘密

caffe的原始的loss的英文描述:http://caffe.berkeleyvision.org/tutorial/loss.html点击打开链接由于caffe支持的是有向无环图图的网络结构。所以对于多个损失函数的网络结构也是绝对支持的,文中也说明了这一点:Loss weightsFor nets with multiple layers producing a l

boost目录翻译序_qq1363的博客-程序员秘密

做了也快3年程序员了,算上大学时期的经历,也

[BZOJ1503] [NOI2004] 郁闷的出纳员 (treap)_weixin_30784945的博客-程序员秘密

Description  OIER公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。工资的频繁调整很让员工反...

Failed to invoke the method subscribe in the service com.alibaba.dubbo.registry.RegistryService_hello-java-maker的博客-程序员秘密

1 异常信息今天在写 dubbo 文章的时候遇到一个问题,倒是折腾了几分钟,百思不得其解,最后终于发现了。异常信息如下:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method subscribe in the service com.alibaba.dubbo.registry.RegistryService. Tried...

小程序页面返回刷新数据onLoad和onShow页面传参解决_weixin_33875564的博客-程序员秘密

A页面返回index页面刷新数据onLoad和onShow页面传参解决三种场景一、index页面不需要识别不同入口二、有很多页面“跳转”到B页面,所以onLoad需要接收url传参,识别不同入口。在只有A页面是“返回”的情况,可以固定写法onShow加载this.onLoad({route:'a'})三、如果有多页面“跳转”或“返回”index页面的情...