我考虑尝试编译某个C程序,它允许通过USB为Android控制Gembird SilverShield电源插座.在我的Android HDMI电视棒上,这将非常有用.有一个开放的项目本.它在Linux下工作,依赖于libusb.目标平台是android ICS.我想在Ubuntu Linux上开发.我有什么机会让它发挥作用?有哪些必要步骤.设定Android SDK,NDK,交叉编译器...
有一个老问题,在这里,与libusb在Android上,但没有信息的方式有关.
是否可以更轻松地将应用程序移植到机器人自己的USB库?
Goz*_*Goz 23
Libusb可以在非root用户上运行(假设设备支持USB主机......这非常重要,因为并非所有设备都这样做).你需要使用标准的android USB堆栈.然后,您可以从USBDevice获取设备描述符并将其传递给libusb.
不幸的是你还需要修改libusb.幸运的是,其他人已经解释了如何修改LibUSB.
LibUSB已在此处进行了修改.
祝好运!
编辑:
首先,您需要定义广播接收器:
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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在您需要创建一个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.
}
}
Run Code Online (Sandbox Code Playgroud)
编辑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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12589 次 |
| 最近记录: |