gpt4 book ai didi

android - 针对 android 的 libusb 进行编译和链接

转载 作者:可可西里 更新时间:2023-11-01 18:55:37 36 4
gpt4 key购买 nike

我考虑尝试编译一个特定的 C 程序,它允许通过 USB 为 android 控制 Gembird SilverShield 电源 socket 。在我的安卓 HDMI 电视棒上,这将非常有用。 this 有一个开放项目.它在 Linux 下工作并且依赖于 libusb。目标平台是 android ICS。我想在 Ubuntu Linux 上开发。我让它工作的机会有多大?需要什么步骤。设置android SDK, NDK, crosscompiler ...
有一个老问题here ,与 libusb on android 有关,但没有相关信息。
将应用程序移植到 android 自己的 usb 库是否更容易?

最佳答案

Libusb 可以在非 root 的 android 上工作(前提是设备支持 USB 主机……这非常重要,因为并非所有设备都支持)。您需要使用标准的 android USB 堆栈。然后,您可以从 USBDevice 获取设备描述符并将其传递给 libusb。

不幸的是,您还需要修改 libusb。幸运的是,其他人已经解释了您需要如何修改 LibUSB。

LibUSB 已修改here .

祝你好运!

编辑:

首先你需要定义一个广播接收器:

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() 
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action))
{
synchronized (this)
{
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
{
if(device != null)
{
UsbDeviceConnection deviceConnection = mUsbManager.openDevice( device );
Log.d( "USB", deviceConnection.getSerial() );
}
}
else
{
Log.d( "USB", "permission denied for device " + device);
}
}
}
}
}

现在您需要创建一个 USBManager 并枚举设备:

    mUsbManager         = (UsbManager) getSystemService( Context.USB_SERVICE );
HashMap< String, UsbDevice > stringDeviceMap = mUsbManager.getDeviceList();
Collection< UsbDevice > usbDevices = stringDeviceMap.values();

mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent( ACTION_USB_PERMISSION ), 0 );
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver( mUsbReceiver, filter );

Iterator< UsbDevice > usbDeviceIter = usbDevices.iterator();
while( usbDeviceIter.hasNext() )
{
if ( USBDeviceValid( usbDevice ) )
{
// Request permission to access the device.
mUsbManager.requestPermission( usbDevice, mPermissionIntent );

// Open the device.
UsbDeviceConnection connection = mUsbManager.openDevice( usbDevice );
int fd = connection.getFileDescriptor();

// Now pass the file descriptor to libusb through a native call.
}
}

编辑 2:

构建 libusb 只是将文件放在方便的地方(我将它们放在 jni/libusb 中)然后将以下行添加到您的 Android.mk 中:

include $(CLEAR_VARS)
LOCAL_MODULE := libusb
LOCAL_SRC_FILES := libusb/core.c libusb/descriptor.c libusb/io.c libusb/sync.c libusb/os/linux_usbfs.c

LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

关于android - 针对 android 的 libusb 进行编译和链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957509/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com