安卓USB OTG: 如何编程关闭端口电源

26
假设我有一个通过USB OTG适配器连接到运行Android 4.0.3的东芝Excite 10平板电脑上并由其提供电源的USB灯。
我想在应用程序中编程地打开和关闭USB OTG主机端口的电源引脚。(最好不需要root权限,但我会尽力而为)。有什么建议吗?

不确定我的内核是否兼容,但看起来我可能只需要写入文件/sys/bus/usb/devices/usb3/power/level。我尝试了一下没有root权限,但写入失败了,所以下一步我想我需要root我的平板电脑然后再试一次。来源:https://dev59.com/nW445IYBdhLWcg3wydBk - AlcubierreDrive
2个回答

4

您需要在/sys目录上拥有写权限。获取root权限可以使这个过程变得非常简单。只需获取root权限并发出正确的echo命令以切换内核状态位,如下:

String[] command = { "/system/bin/sh", "-c", "echo xxx > /sys/bus/usb/devices/usb3/power/level", };
Runtime.getRuntime().exec(command);

另一种方法是使用libusb,找到切断电源的函数。您可以使用android.hardware.usb.UsbManager请求libusb的适当权限。


我想在USB已插入的情况下触发USB插入事件(Android平板电脑)。这是否可能?有没有办法告诉系统USB已插入,以便它可以再次被检测到? - Tushar Thakur
对于内核版本高于2.6.32的系统,"/usbX/power/control" 的 "suspend" 功能已经不再起作用。请参考以下链接获取更多信息:https://android.googlesource.com/kernel/mediatek/+/android-3.18/Documentation/usb/power-management.txt - user724861

2
据我所知,来自https://askubuntu.com/questions/342061/power-on-off-usb-ports的信息显示,“所有先前的答案都谈到了USB挂起机制,即“逻辑上的断电”,它们永远不会从USB端口中物理地切断VBUS +5V电源。”也许硬件解决方案不是一个好主意,但我可以建议您在PCB上使用带编程Atmega8U4芯片的MOSFET晶体管,该芯片被编程为切断LED灯的电源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接