Suportul de accesorii Android de la Google (Android Accessory Framework) scoate în evidenţă câteva opţiuni diferite pentru dezvoltare de accesorii. Pentru proiectanţii ce iau în considerare dezvoltarea de accesorii bazate pe Android, acest articol atinge aspect legate de consideraţii de proiectare pentru determinarea căilor de urmat. Fiecare aplicaţie este diferită, iar aceste criterii pot să nu convingă un proiectant, însă cunoaşterea opţiunilor este cheia ajungerii la cel mai bun rezultat.
Dispozitiv gazdă şi periferice USB
USB este în mod logic un sistem de comunicaţie punct-la-punct între un periferic ataşat şi un controler gazdă. Perifericele nu pot vorbi niciodată prin USB. Există numai o gazdă pe magistrală.
În mod tipic, gazda USB este cea mai puternică maşină (multă memorie, putere CPU, conectivitatea cea mai bună, şi va fi în mod tipic punctul de concentrare al utilizatorului), în vreme ce perifericul este adesea un dispozitiv mai simplu cu funcţionalitate de bază pe magistrală ca serviciu pentru gazdă.
Gazda are de asemenea două responsabilităţi cheie pe magistrală; prima este de a furniza energie perifericelor ataşate, iar a doua este de a gestiona dispozitivele de pe magistrală. Din cauza acestor diferenţe, dispozitivul USB activat de gazdă şi dispozitivul periferic USB au adesea un design diferit.
Accesorii Android ca periferice USB
La prima vedere, alegerea între aceste două opţiuni USB poate părea clară. Un accesoriu pentru un smartphone/tabletă pare mai normal să fie tratat ca periferic USB. Telefonul sau tableta este normal să fie punctul central de concentrare al utilizatorului, iar accesoriul este normal să ofere un serviciu telefonului/tabletei. Furnizarea de energie de la telefon/tabletă către accesoriu
este de asemenea o opţiune atractivă. Opţiunea de utilizare a telefonului sau tabletei Android ca gazdă USB a fost activată în dispozitivele Android 3.1+. Această opţiune nu este disponibilă în alte versiuni de sisteme de operare.
Accesorii Android ca dispozitive gazdă USB
Atunci când Google a lansat Open Accessory Framework au observat că pe piaţă erau foarte multe dispozitive Android proiectate numai cu capabilitate de periferice USB, astfel încât asemenea telefoane şi tablete nu aveau dotarea hardware necesară pentru a putea opera ca dispozitiv gazdă USB. Pentru a permite acestor produse să ataşeze un accesoriu, Google a creat o opţiune cadru pentru accesorii, astfel încât accesoriile să fie dispozitivele gazdă USB, iar telefoanele/tabletele Android să fie dispozitivele periferice USB. Această opţiune OpenAccessory-framework este activată atât în versiunea de sistem de operare Android 2.3.4, cât şi în versiunile Android 3.1+.
Accesorii Android pentru accesorii standard USB
O a treia opţiune disponibilă este suportul nativ al sistemului de operare; prin adăugarea capabilităţii de gazdă USB în sistemul de operare a fost adăugat şi
suport pentru mouse-uri şi tastaturi. Producătorii de periferice USB ce fac aceste tipuri de produse standard nu trebuie să-şi facă griji cu crearea de noi dispozitive sau software pentru a lucra cu telefoane/tablete Android, deoarece accesoriile lor vor lucra în orice sistem de operare care suportă driverul standard specific. Toate cele trei opţiuni de suport sunt ilustrate în figurile 1a, 1b şi 1c.
Ce opţiune ar trebui să aleg?
Fiecare dintre cele trei opţiuni de mai sus au implicaţii în crearea unui accesoriu. Prima problemă este setul ţintă de dispozitive Android pentru accesorii – pentru a crea un accesoriu care este un dispozitiv USB, el necesită ca telefonul/tableta Android să aibă capabilitate hardware integrată de a fi dispozitiv gazdă USB. Chiar dacă hardware-ul este capabil de a funcţiona ca gazdă USB, până când pe dispozitiv rulează Android 3.1+, el nu va putea utiliza opţiunile
de dispozitiv gazdă. Astfel, un proiectant de accesorii trebuie să cântărească raportul cost / caracteristici faţă de versiunea Android.
La lansarea pe piaţă a noilor dispozitive Android, majoritatea includ cele mai noi versiuni de Android. Figura 2 prezintă nivelul de utilizare a diferitelor versiuni ale sistemelor de operare Android..
Dispozitivul gazdă USB trebuie să furnizeze tensiunea de alimentare
Decizia de a selecta modul de accesoriu acolo unde accesoriu este dispozitiv gazdă USB nu este aşa de clară precum informaţia cu privire la versiuni. Într-un sistem USB, gazda trebuie să furnizeze tensiune de alimentare perifericului ataşat. Perifericele pot necesita un curent de până la 500mA. Majoritatea perifericelor USB solicită de la gazdă cel puţin 100mA. În vreme ce acest lucru poate fi o cerinţă potrivită pentru un frigider rulând un diagnostic sau o actualizare de firmware, pentru un dispozitiv precum pulsoximetru, care este de aşteptat să fie portabil, mobil, mic şi să aibă o durată mare de viaţă a bateriilor, este o limitare puternică. A putea furniza un minim de 100mA este o cerinţă energetică foarte ridicată pentru multe aplicaţii mobile.
Figurile 1a, 1b şi 1c prezintă cum este furnizată puterea în cele trei posibile configuraţii de accesorii.
Aplicaţie standard sau particularizată?
Suplimentar cerinţelor de alimentare, un proiectant trebuie de asemenea să ia în considerare modul în care accesoriu va fi utilizat şi când este acceptabilă o aplicaţie particularizată. Orice proiectant ce utilizează modul de accesoriu, cu accesoriu ca gazdă USB, are nevoie adesea să creeze un protocol particularizat pentru aplicaţia sa.
Utilizând aceleaşi două exemple de mai înainte cu frigiderul şi pulsoximetru, ar fi rezonabil, sau măcar de aşteptat ca frigiderul să dispună de un protocol particularizat, prin care clientul foloseşte o aplicaţie specifică pentru a comunica cu dispozitivul.
Pentru pulsoximetru este probabil să se dorească utilizarea PHDC (Personal Healthcare Device Class) disponibilă în protocolul USB. Utilizarea acestui protocol permite dispozitivului să fie utilizat pe orice maşină gazdă USB şi permite hardware-ului să interfaţeze cu o gamă largă de software.
De aceea, limitarea acestui hardware la o aplicaţie specifică producătorului poate ducă la constrângeri prea mari pentru a fi acceptată de utilizatori.
Dacă un accesoriu trebuie să fie compatibil cu dispozitive Android care nu au funcţionalitate de dispozitiv gazdă USB, fie datorită limitărilor hardware, fie pentru că nu au un sistem de operare actualizat la peste 3.1+, atunci accesoriul trebuie să utilizeze un protocol particularizat, precum în figura 1b.
Pentru dispozitive accesorii care se pot limita la utilizarea cu dispozitive Android activate prin gazda USB, alegerea între o clasă USB standard şi o clasă particularizată este în întregime a proiectantului. Chiar dacă sistemul de operare poate să nu aibă un suport nativ pentru un dispozitiv, o aplicaţie particularizată trebuie să poată accesa dispozitivul. Acest lucru permite telefoanelor/ tabletelor Android să lucreze pe alte gazde USB care pot să nu suporte nativ aceste dispozitive.
Conectori fizici USB
Chiar dacă nu este un factor determinant, conectorii fizici pot juca un rol în deciderea modului utilizat. Pentru un accesoriu care acţionează ca gazdă USB, specificaţiile USB indică faptul că acesta trebuie să aibă un conector mamă tip A, precum cel din computer.
Figura 3 prezintă cum un accesoriu care suportă numai dispozitive Android periferice USB se va conecta la acest dispozitiv.
Dacă un accesoriu este desemnat ca periferic USB, proiectanţii au opţiunea de utilizare a unor conectori mamă full-size-B, mini-B, sau micro-B. Cealaltă parte a cablului trebuie de asemenea luată în considerare. Pentru accesorii care rulează ca periferice USB, dispozitivul Android va fi gazda USB şi majoritatea dispozitivelor Android nu au un conector mamă full-size-A, la care să conecteze cablul USB.
Din acest motiv, multe dintre dispozitivele Android prezente astăzi pe piaţă, care permit mod gazdă USB, necesită un adaptor pentru a putea avea această funcţionalitate. Într-o situaţie ideală, dispozitivul Android ar trebui să aibă un conector mamă micro-A/B, iar utilizatorul ar trebui să poată utiliza un cablu OTG de la micro-A la micro-B pentru a conecta accesoriul la dispozitivul Android şi apoi să utilizeze un cablu de la micro-B la full-size-A pentru a conecta dispozitivul Android la o gazdă USB precum un PC standard. Figura 4 prezintă modul de conectare la diverse echipamente al unui dispozitiv Android USB cu capabilitate OTG.
USB OTG pentru periferice şi gazdă
Dacă alegerea între accesoriu USB în mod gazdă şi accesoriu USB în mod periferic nu este evidentă, sau dacă se doresc amândouă modurile — gazdă USB pentru a suporta dispozitivele fără capabilitate de gazdă şi periferic USB pentru acelea care au această capabilitate, cu scopul de a utiliza un software standard – atunci există disponibilă o altă opţiune. Accesoriile Android pot fi proiectate ca dispozitive
USB OTG. Specificaţiile USB OTG permit unui accesoriu să fie gazdă USB sau periferic USB în funcţie de cablul cu care este conectat.
Utilizând USB OTG, un accesoriu poate fi gazdă USB pentru telefoane/tablete Android fără capabilitate de gazdă şi periferic USB pentru acele telefoane/tablete Android cu funcţionalitate USB gazdă.
Există însă câteva complicaţii la utilizarea USB OTG. Cablul care este furnizat cu dispozitivul Android nu se va conecta la accesoriu deoarece acela este probabil să fie full-size-A, ce nu se va potrivi în conectorul receptor micro-A/B al accesoriului OTG, astfel că va fi necesar un cablu suplimentar micro-A. Datorită diferiţilor conectori hardware ce pot fi găsiţi pe dispozitivele Android, această problemă de cablare este o provocare semnificativă, deoarece poate fi utilizat numai un cablu standard USB micro-A – micro-B, dar multe dispozitive Android au fie conectori receptori mini-B, fie conectori mamă particularizaţi. Pentru a complica şi mai mult această problemă, există pe piaţă tablete şi telefoane care au capabilitate OTG, dar nu utilizează conectori micro-A/B. În loc de aceştia ele utilizează un conector receptor micro-B cu un cablu particularizat neconform USB, pentru a activa operarea în mod gazdă. Figura 5 prezintă cum un accesoriu capabil OTG poate interfaţa cu aceste tipuri de dispozitive; acelea numai cu capabilitate de periferic USB, precum şi acelea cu capabilitate de gazdă USB sau funcţionalitate OTG.
Dacă este selectat modul de accesoriu, cu dispozitivul funcţionând ca gazdă USB, mai este o singură decizie ce trebuie luată — ce set API să fie utilizat. Când la Android 2.3.4 a fost adăugat Accessory framework, el a fost adăugat ca bibliotecă suplimentară Google API add-on.
Modulul utilizat în Android 2.3.4 (com.android.future.usb) este uşor diferit de cel utilizat în Android 3.1 (android.hardware.usb). Interfaţa dintre aceste două biblioteci variază de asemenea, dar funcţionalitatea este în principiu aceeaşi.
Consideraţia principală aici este aceea că biblioteca android.hardware.usb este disponibilă numai în Android 3.1+, în vreme ce biblioteca com.android.future.usb este disponibilă în dispozitivele Android 2.3.4 şi Android 3.1+.
Este de asemenea important de observat că biblioteca com.android.future.usb nu este o bibliotecă impusă pentru Android 2.3.4, astfel că este posibil ca un dispozitiv care rulează Android 2.3.4 să nu aibă suport pentru aceste caracteristici. Depinde de producătorul dispozitivului dacă va include caracteristicile discutate în sistemul de operare.
Utilizarea IOIO – interfaţa de depanare Android
În acest topic al accesoriilor Android ar trebui analizată o opţiune finală. Soluţia IOIO permite dezvoltarea de aplicaţii bazate pe Android prin interfaţa de depanare Android ADB. Această soluţie oferă o metodă de activare a accesoriilor pentru telefoane/tablete Android, rulând Android 1.5 sau mai recent, eliminând problema aşteptării ca producătorii hardware să utilizeze Android 2.3.4 sau Android 3.1+ în echipamentele lor înainte de a lucra cu accesoriile.
Există şi părţi inferioare ale acestei soluţii,precum următorul exemplu din clasa dezvoltării de accesorii prezentat la Google I/O 2011.
În vreme ce interfaţa ADB nu s-a schimbat mult în istoria recentă, prezentatorii indică faptul că Google îşi rezervă dreptul de a schimba această interfaţă după nevoi pentru dispozitive viitoare, pentru a permite noi caracteristici de depanare şi dezvoltare pentru dezvoltatorii de hardware şi software.
Informaţii suplimentare cu privire la comparaţie dintre Accessory framework şi soluţia IOIO sunt disponibile pe blogul dezvoltatorilor IOIO:
http://ytai-mer.blogspot.com/2011/06/ioio-over-openaccessory-adk-available.html
Cei ce doresc informaţii suplimentare despre accesoriile bazate pe Android, pot accesa http://developer.android.com/guide/topics/usb/index.html sau www.microchip.com/android
Acest articol a prezentat câteva consideraţii de proiectare cu privire la determinarea căilor posibile de urmat atunci când se urmăreşte dezvoltarea de accesorii bazate pe Android.
Mai multe întrebări pot fi trimise la Microchip la adresa de email: androidsupport@microchip.com
Autor: David Flowers
Inginer principal de aplicaţii
Departamentul de arhitecturi pentru microcontrolere avansate
Microchip Technology Inc.
www.microchip.com