web-dev-qa-db-fra.com

utiliser le port série RS-232 dans Android?

Je veux envoyer des signaux via le port série en utilisant les classes API JavaComm sur un appareil Android, et voici comment je l'imagine:

1- l'appareil Android serait: Archos 3.2 qui a Android 2.2 et le mode hôte USB).

2- inclure le package lib RxTx avec mon Android. Et inclure le code natif RxTx en utilisant Android NDK.

3- un câble court qui est usb -> série.

Pourriez-vous m'expliquer où je pourrais rencontrer des problèmes?

18
rami

Je viens de porter la bibliothèque JavaCOMM (GNU RXTX) sur Android. Voici le lien http://v-lad.org/projects/gnu.io.Android/

Vous devrez peut-être encore reconstruire votre noyau et peut-être recompiler la bibliothèque partagée pour votre environnement. Mais cela devrait vous aider à démarrer.

12
Vlad

Comme indiqué ci-dessus, vous devrez proposer des pilotes de périphérique pour tout périphérique USB <-> série que vous possédez. Beaucoup de ces appareils utilisent la puce Prolific PL2303:

http://www.qbik.ch/usb/devices/showdr.php?id=175

que le noyau linux stock supporte et a depuis longtemps. Je l'ai utilisé et cela fonctionne bien, je vous recommande donc de vous en tenir aux périphériques USB <-> série qui utilisent cette puce.

Au-delà de cela, avec udev, ces périphériques apparaissent normalement sous/dev/ttyUSB #. Comment cela se produit avec Android, je ne sais pas, vous devrez donc le comprendre.

Enfin, vous devrez créer le code natif RxTx. Ce code est assez cruel - j'ai eu des problèmes pour le construire sur un Angstrom assez moderne, et je n'essayais pas du tout de compiler de manière croisée.

3
TazMainiac

Oui, c'est vraiment un gâchis d'utiliser les périphériques série du côté téléphone sur Android. Le problème est que les différents périphériques présents sur l'AOS ne sont pas documentés et coïncident rarement avec ceux standard de Linux. Ainsi, vous ne savez jamais à quoi/à qui vous parlez, un périphérique, une couche d'abstraction (HAL, UART, PCI, etc.). Voici un tutoriel sur la façon de parler à un périphérique série (le modem) à partir d'un PC connecté via USB externe.

Dans tous les cas, si votre téléphone prend en charge le mode hôte USB, il doit y avoir un autre moyen d'atteindre votre port série/vos appareils en utilisant cela. Après tout, la compatibilité descendante assure souvent une sorte de prise en charge de FAX, de téléphonie ou de modem externe à partir de votre câble USB. Il y a aussi des changements qui peuvent également contenir un périphérique série virtuel ...

Il y a un tutoriel pour une partie de cela ici .

PS. Le principal problème de ces programmes (comme celui de Vlad) et des applications (comme serial-api) est qu'ils font des hypothèses trop fortes sur les noms de périphérique/port et les autorisations nécessaires pour atteindre (lire/écrire) ces ...

2
not2qubit

Contrairement aux PC ordinaires, la plupart des noyaux de stock pour les appareils Android sont livrés avec un minimum de modules compilés. Vous devez recompiler le noyau avec les pilotes activés pour les convertisseurs USB vers série. Votre chance dépend de la spécificité périphérique que vous utilisez. Beaucoup de fabricants violent la GPL, en ne fournissant pas le code source du noyau. Certains fabricants comme Motorola avec le Droid 2 nécessitent un noyau signé. Ce qui rend impossible le chargement du noyau personnalisé sur le périphérique.

De plus, bien que de nombreux appareils aient le mode hôte USB, vous devez sauter à travers les cercles pour changer de mode d'appareil. Par exemple, Motrola droid nécessite qu'un dongle spécial soit branché sur le port USB avant de s'allumer pour passer en mode hôte.

Voici quelques liens pour vous expliquer ce que vous devez faire:

  1. "Plus d'informations sur le mode Droid Host", http://www.tombom.co.uk/blog/?p=134 .

  2. "Mode hôte USB sur Motorola Droid", http://www.tombom.co.uk/blog/?p=124 .

2
Vlad

Le plus gros problème est probablement l'adaptateur USB-> Série:

Vous avez besoin d'un pilote de périphérique pour le pilote série USB, qui n'est probablement pas inclus dans le noyau Android.

L'autre option consiste à utiliser quelque chose comme libusb (qui peut devoir être porté sur Android également) et un pilote d'espace utilisateur basé sur libusb.

1
plaisthos

Probablement pas exactement ce que vous recherchez, mais ce instructable pourrait vous orienter dans la bonne direction

1
Stewart Murrie

J'ai fait ça. Vous devez: 1. Rooter l'appareil.

  1. Créez votre propre module pour le burin USB spécifique que vous êtes sur le point d'utiliser: Building kernel module for Android

  2. Je recommande d'utiliser la bibliothèque usb-serial-for-Android portée, sur laquelle le pilote PL2303 est déjà implémenté: https://code.google.com/r/felixhaedicke-usb-serial-for-Android

0
Vaiden