Написание USB-драйвера для Android

Я разрабатываю приложение для Android, в котором мне нужно подключиться к USB-устройству.

Я разработал аналогичное приложение для окон, и у меня есть драйвер, написанный в c.

Я хочу разработать драйвер USB для моего приложения для Android. Я хочу знать, какие вещи необходимы для разработки USB-драйвера для Android.

или

Можно ли повторно использовать код, написанный в c, с помощью ndk.

Благодаря,

Solutions Collecting From Web of "Написание USB-драйвера для Android"

Во-первых, Android на самом деле просто Linux, поэтому, если вы говорите о «написании драйвера USB для моего приложения для Android», лучше сказать «написать USB-драйвер linux для вашего конкретного устройства».

Затем вам придется каким-то образом получить доступ к вашему устройству. То, что вы получите, когда напишете драйвер USB для Linux, вероятно, является некоторым файловым узлом в / dev /. Я предполагаю, что вы хотите создать драйвер для нестандартного USB-устройства (например, мышь / джойстик / массовое хранилище), для которого Android не обеспечивает приятный JAVA-api? В этом случае вам придется написать собственную библиотеку (возможно, на основе кода c, который у вас уже есть) и скомпилировать ее с помощью NDK. Файл .so, который вы выберете, может быть упакован в ваше приложение Android, которое затем может использовать его для разговора с вашим USB-устройством.

Итак, подведем итог:

Usb device device -> создать модуль ядра или встроить драйвер в ваше ядро ​​linux: это материал для программирования драйверов linux usb, для которого вы должны найти достаточное количество руководств в Интернете. Вы должны иметь возможность повторно использовать части своего кода c, если вы действительно создали драйвер usb для Windows.

Встроенная библиотека обертки для доступа к вашему устройству (.so-файл или .dll, если вы привыкли к терминологии Windows) -> создать проект NDK, который открывает нужный узел устройства и правильно читает / записывает на ваше устройство.

Android app -> включить файл .so и получить доступ к его собственным (c) методам через jni. Вы можете использовать такие инструменты, как javah или swig, чтобы генерировать jni-код из файлов заголовков вашей библиотеки.

В предыдущем ответе предполагается, что у вас есть root-доступ к вашему устройству и не подходит для массового развертывания. Так как api версии 12 android предоставил интерфейс USB, который позволяет вам взаимодействовать с определенными устройствами с использованием низкоуровневых каналов управления и буферов запросов usb.

Существует два типа устройств, поддерживаемых устройствами USB usb (android):

Хост-режим, как правило, поддерживается только на планшетах, телефоны могут и поддерживают его, но их устранение для поддержания режима хоста меньше и очень зависит от требований напряжения от девица в вопросах

Вспомогательный режим нечетный, поскольку он расширяет стандарты USB, чтобы добавить дополнительный обмен, который идентифицирует аксессуар как аксессуар «android»

Если вышеупомянутые режимы используются для вас, то они, безусловно, являются лучшим вариантом для использования драйвера низкого уровня c, если вы не получите полный контроль над всеми устройствами, на которых он будет установлен.

Это и java-apis, и их можно найти на сайте документации google android, под usb.