adb accessory 填坑

2023-11-02 04:20
文章标签 adb 填坑 accessory

本文主要是介绍adb accessory 填坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:https://blog.csdn.net/yingzhao80/article/details/45511351

Android下USB Accessory设备连接后处理流程

(1)手动切到device mode,也就是开启OTG 模式(mtk 9652可以用sw的方式做切换,但是只有port0才可以切换)

echo 1> /sys/devices/Mstar-otq/software_id

cat/sys/devices/Mstar-otq/software.id确认

(2) 需要开启adb mode(这个很重要,之前一直是mtp模式下去试,usb的wevent log一点都没有,浪要了很多时间跟kernel的xd debug,试了很多次发现需要切到adb mode下才会监续下去)

Development option里顶开启usb debugging即司

getprop |grep -i usb 确认一下

(3) 确认板子是否有accessoryfeature

device-common .mk

#usb accessory configuration

PRODUCT_COPY_FILES += \

frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml

device.mk

# usb accessory

PRODUCT_PACKAGES +=\

com.android.future.usb.accessory

 

mtv_core_hardware.xml

  •  <!--feature name="android.hardware.usb.accessory"/-->

    +     <feature name="android.hardware.usb.accessory"/>

 

console:/ # pm list features | grep -i usb

feature android.hardware.usb.accessory

feature:android.hardware.usb.host

(4)adb mode下连接无人机,会kernel panic

但是cat init.xxxx.usb.rc里是由这个action的,直接抓kernel log也没有相关报错,orz

很奇怪,用linux vim也没看到有这个..

推荐用cat -v去查看,能看到某些特殊字符

mkdirM-BM- /config/usb_gadget/g1/functions/accessory.gs2

修改init.XXX.usb.rc,去掉M-BM-

这一步,真的是运气爆棚,恰好用busybox vi发现,不然真的GG,不知哪位前辈埋的坑

(5)获取不到无人机usbaccessory的信息(mAccessoryStrings=null),导致startAccessoryModeenableAccessory= null

395    private void startAccessoryMode() {
396        if (!mHasUsbAccessory) return;
397
398        mAccessoryStrings = nativeGetAccessoryStrings();
399        boolean enableAudio = (nativeGetAudioMode() == AUDIO_MODE_SOURCE);
400        // don't start accessory mode if our mandatory strings have not been set
401        boolean enableAccessory = (mAccessoryStrings != null &&
402                mAccessoryStrings[UsbAccessory.MANUFACTURER_STRING] != null &&
403                mAccessoryStrings[UsbAccessory.MODEL_STRING] != null);
404
405        long functions = UsbManager.FUNCTION_NONE;
406        if (enableAccessory) {
407            functions |= UsbManager.FUNCTION_ACCESSORY;
408        }
409        if (enableAudio) {
410            functions |= UsbManager.FUNCTION_AUDIO_SOURCE;
411        }
412
413        if (functions != UsbManager.FUNCTION_NONE) {
414            mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_ACCESSORY_MODE_ENTER_TIMEOUT),
415                    ACCESSORY_REQUEST_TIMEOUT);
416            setCurrentFunctions(functions);
417        }
418    }

这里mAccessoryStrings = nativeGetAccessoryStrings()为null,导致enableAccessory=false没有往下走,猜测无人机配置有问题,需要driver去查,但是三不管地带,而且由于客户人力不够,配合提供反馈及其有限情况下,只能我这边先上层动一刀了

修改:获取不到AccessoryString就默认默认配置一个,使其go on 

(6)kernel log一直在循环发送USB_STATEuevent CONNECTED COONFIGURED DISCONNECTED

(7)按现在目前设置为dji,可以跳过那个没有获取到无人机信息导致进不去accessory mode的问题,但是这边看flow,后面会根据配置信息去匹配能响应的activity

这就需要客户在自己的apk中去配置了

这篇关于adb accessory 填坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328067

相关文章

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

adb shell 执行后台程序后断开adb后台进程被结束的解决办法

环境:Android 版本 Android8 通常让程序后台执行就是在命令 最后加上 &即可,但是在Android 8上实验发现,程序的确后台了,但是拔掉USB线再连接上发现进程已结束。不确定Android早期版本是否存在此问题。 参考网上一些Linux方法,如加nohup 仍然无效,还是会结束。看来Android adb shell 与 Linux shell 还是有一定区别。 后来在网上

uni-app填坑指南——解决处理处理静态资源的问题

说实在话,这个标题其实有点夸大了。 uni-app并没有不解决,而是解决的不够充分不够彻底。这里我们来讨论一下uni-app在处理静态资源的问题上的一些不足之处。 1. 问题描述 在uni-app中,我们可以将静态资源放在static目录下,然后通过相对路径的方式引用。比如我们有一个图片资源logo.png,我们可以通过<img src="@/static/logo.png" />的方式引用。

兔子--SDK,ADT,AVD,IDE,ADB

a:SDK(Software Development Kit):开发android应用所需要的开发工具的集合,包括库文件及工具。 b:ADT(Android Developer Tools):在Eclipse下开发工具的升级下载工具。adt只是一个eclipse的插件,里面可以设置 sdk路径. c:IDE:集成开发环境。IDE通常包括编程语言编辑器、自动建立工具、通常还包括调试

兔子--修改adb的端口号

问题描述:adb not responding.if you would like to retry 由于某些原因,ADB server的端口5037可能会被占用, 解决方案:修改adb的端口号 设置环境变量ANDROID_ADB_SERVER_PORT=(你想要的值,如9999)

兔子--adb的配置

主要是配置环境变量 1.adb.exe的路径 2.adb.exe的路径 3.把配置的adb.exe路径添加到path中 4.配置成功的依据,cmd后输入adb,,回车,,出现如下。。

adb源码和版本声明

adb 的 AOSP源码目录 /android-7.1.2_r4/system/core/adb adb version显示方法以及宏声明 adb_version方法: 宏声明: AOSP编译后的输出: xie@droid:~/source/android-7.1.2_r4$ find ./out/ -name adb./out/host/linux-x86/

安卓开发的无线adb

无线adb调试程序,和 电脑手机之间传输文件 使用无线 adb 从 远程手机 上 下载 文件 adb pull sdcard/mapgis/data G: 将 data 文件夹里的 所有 文件 下载 到 电脑 的 G: 盘目录下 现在我有一个小方法说不定可以帮助某些人哦(多为不是android开发人员) 1. 条件如下: android 手机  wifi无线连

外接串口板,通过串口打开adb模式

一、依赖库 import subprocessimport serialfrom serial.tools import list_portsimport loggingimport time 二、代码 import subprocessimport serialfrom serial.tools import list_portsimport loggingimport ti

填坑之路-记录Redis操作的异常QueryTimeoutException RedisCommandTimeoutException: Command timed out after 1 min

默认配置 1.命令执行的默认超时时间为1分钟 2.默认的Lettuce集群配置里面才有命令执行超时时间,源码请看:LettuceConnectionFactory 3.修改命令超时时间,请手动修改配置构造器中的配置:LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder 中的setCommandTime