Az USB gazdavezérlők és perifériák
Az USB egy buszrendszer, amely logikailag két pont, a gazdavezérlő és csatlakoztatott periféria közötti kommunikációt valósítja meg. Az USB-n keresztül a perifériák egymás közötti kommunikációra nem képesek, és a buszon egy időben mindig csak egy gazdavezérlő lehet. Egy USB-rendszerben jellemzően a gazdavezérlő a memória, CPU teljesítmény stb. tekintetében legnagyobb teljesítményű eszköz, míg a perifériák többnyire egyszerűbb, alapvető funkcionalitást biztosító eszközök, amelyek a gazdát szolgálják. A gazdavezérlő még két kulcsfontosságú szerepkörrel rendelkezik a buszon: egyrészt tápfeszültséget szolgáltat a rendszerre csatlakoztatott perifériáknak, valamint kezeli azokat. E különbségek miatt egyértelmű, hogy az USB gazdavezérlők és perifériák tervezésüket tekintve meglehetősen sokban eltérnek. A három alapvetően eltérő eset bemutatása következik.
1. eset: androidos tartozékok USB perifériaként
Első pillantásra a gazdavezérlő és periféria szerepe nyilvánvaló egy androidos eszköz és tartozéka esetében. Az Androidot futtató okostelefon vagy táblagép tartozéka értelemszerűen az USB periféria lenne, maga a telefon vagy tablet pedig az eszköz, amelyiket kiegészíti a periféria — ennélfogva ez a rendszer gazdavezérlője (lásd 1. ábra). Az esetek többségében igen vonzó, sőt az egyetlen járható út az, ha a gazdavezérlő tápfeszültséggel is ellátja a perifériákat. Az Android v3.1 és újabb operációs rendszerváltozatoknál vált lehetővé, hogy az operációs rendszert futtató eszköz USB gazdavezérlőként használható legyen, a korábbi változatoknál ez a lehetőség azonban nem áll rendelkezésre.
2. eset: androidos tartozékok USB gazdavezérlőként
Amikor a Google kiadta az Open Accessory keretrendszerét, világos volt számukra, hogy a piacon kinn lévő, androidos eszközök többsége csak USB perifériaként képes működni, hiszen nincs meg bennük az a hardver, amely biztosítaná a gazdavezérlőként való viselkedésük feltételeit. E probléma megoldása érdekében dolgozta ki a Google a tartozékfejlesztők számára azt a keretrendszert, amely lehetővé teszi az Androidot futtató eszközökhöz periféria illesztését, amely esetben a periféria tölti be a gazdavezérlő szerepét (lásd 2. ábra). Az Open Accessory keretrendszer mind az Android v2.3.4, mind pedig az Android v3.1+ operációs rendszerváltozatokban engedélyezettek.
3. eset: standard USB-megoldások androidos tartozékokhoz
A harmadik lehetőség nem más, mint az operációs rendszer oldaláról a natív támogatás. Ebben az esetben az operációs rendszer eleve rendelkezik USB gazdavezérlői képességekkel, és támogatást biztosít olyan standard tartozékokhoz, mint egerek, billentyűzetek, adattárolók stb. Az USB-s tartozékok gyártóinak tehát nem szükséges az androidos kompatibilitás biztosítása érdekében új eszközöket és/vagy szoftvereket kifejleszteniük, hiszen termékeik működőképesek minden olyan operációs rendszerkörnyezetben, amelyekben az adott eszközosztályú meghajtók futnak (lásd 3. ábra).
Melyik lehetőséget válasszuk?
A három lehetőség mindegyike valamilyen mértékben befolyásolja a tartozékok tervezését. Az első kérdés, hogy melyek lennének az Android céleszközök? Egy USB-s periféria megköveteli azt, hogy az androidos céleszköz rendelkezzen USB gazdavezérlői képességgel, továbbá, még ha az okostelefon vagy tablet hardvere képes is az USB-s gazdavezérlésre, a szoftveres korlátok miatt ez a koncepció nem működik, amennyiben az eszköz nem Android v3.1 vagy újabb operációs rendszert futtat. A tartozéktervezőknek tehát a költségek/funkciók mellett figyelembe kell venni a különféle Android operációs rendszerváltozatok aktuális és várható elterjedését, ha piacképes termékkel szeretnének előállni. Az új androidos eszközök folyamatosan kerülnek tömegesen a piacra, többségük a legfrissebb operációs rendszer-változattal. Az egyes Android-változatok elterjedtségét a 4. ábra foglalja össze.
Az USB gazdavezérlő mint a tápfeszültség forrása
A periféria tervezésekor a gazdavezérlő szerep ráosztása közel sem egyszerű döntés, hisz az USB-rendszerben a gazdavezérlőre hárul a csatlakoztatott periféria tápfeszültséggel való ellátása is. Ez akár 500 mA áramigényt is jelenthet, és a legtöbb USB-s periféria legalább 100 mA áramerősség elérhetőségével számol. Míg ez nagyobb berendezés esetében (pl. diagnosztikát vagy rendszerfrissítést végző hűtőszekrény) nem jelent problémát, egy kisméretű, hordozható készülék (pl. véroxigénszint-mérő) esetében gondot jelenthet, hiszen ez nem fér össze az eszköz mobilitásával, hosszú telepélettartamával. Számos mobil termék számára a ≥100 mA áramforrásként működés igen nagy igénybevételt jelent.
Standard vagy egyedi alkalmazások?
A tápfeszültségforrásra vonatkozó követelmények mellett a tervezőnek számolnia kell azzal is, hogyan fogják a tartozékot használni, és vajon szükség van-e egyedi alkalmazásfejlesztésre? Minden olyan tervezőnek, aki gazdavezérlőként is funkcionáló USB-tartozék fejlesztésén dolgozik, alkalmazásához minden valószínűség szerint egyedi protokollt kell kifejlesztenie. A hűtőgépes és véroxigénszint-mérős példánál maradva, szükséges és egyben elvárt, hogy az előbbi egyedi, gyártóra specifikus protokoll alapján kommunikáljon, a véroxigénszint-mérőnél azonban célszerű lehet az USB protokollba beépített PHDC eszközosztály kommunikációs célú alkalmazása. Ez utóbbi esetében a protokoll lehetővé teszi, hogy az eszköz bármely USB gazdavezérlővel kommunikáljon, illetve a hardver sokféle szoftverrel kompatibilis legyen. A véroxigénszint-mérő esetében a fogyasztó szemében túlságosan komoly megszorítást jelentene, ha a hardver csak a gyártóra specifikus szoftverrel lenne kompatibilis.
Ha a tartozéknak Android-kompatibilitást kell biztosítania úgy, hogy az operációs rendszert futtató eszköz nem rendelkezik USB gazdavezérlővel (akár hardveres, akár szoftveres korlátok miatt), a tartozék használatához egyedi fejlesztésű protokollra van szükség (a 2. ábra esete). Az olyan tartozékok esetében, amelyek USB gazdavezérlős, androidos eszközökkel működnek együtt, a standard USB eszközosztály vagy egyedi fejlesztésű megoldás használata egyedül a fejlesztő döntésétől függ, jóllehet az operációs rendszer nem is feltétlenül rendelkezik natív eszköztámogatással, egy egyedi fejlesztésű program minden probléma nélkül hozzáférhet az eszközhöz.
Fizikai USB-csatlakozás
Bár valószínűleg nem ez a legfőbb, meghatározó szempont, a fizikai csatlakozás is eldöntheti, hogy mely eset lép érvénybe az ismertetettek közül. USB gazdavezérlőként működő tartozéknál az USB specifikáció kimondja, hogy a tartozékon teljes méretű, A-típusú (Full-A), hüvelyes csatlakozóra van szükség (mint például egy laptopon vagy asztali számítógépen). Az 5. ábra mutatja, hogyan csatlakozik egy, csak perifériaként működő, androidos eszköz a tartozékhoz.
Ha a tartozéknak csupán az USB periféria szerepét kell teljesítnie, a tervezők szabadon választhatnak a teljes méretű, B-típusú (Full-B), mini-B és micro-B típusú, hüvelyes csatlakozók közül. A kábel másik felét is figyelembe kell venni. A csak USB perifériaként működő tartozékoknál az Androidot futtató eszköz a gazda, és ezek többsége nem rendelkezik Full-A csatlakozóval, ezért e funkció kihasználásához valamilyen átalakítóra van szükség. Ideális esetben az androidos eszköz rendelkezik micro-A/B típusú, hüvelyes csatlakozóval, a felhasználónak pedig rendelkezésére áll egy olyan USB OTG1 átalakító, amellyel a tartozék csatlakoztatható az androidos eszközhöz, az androidos eszköz maga pedig az USB gazdavezérlőhöz (pl. PC-hez). A 6. ábra mutatja, hogyan csatlakozik egy OTG-kompatibilis, androidos eszköz a különféle kommunikációs partnerekhez.
Az USB OTG-kompatibilitás a gazdavezérlő és perifériák esetében
Ha nem nyilvánvaló a választás az USB gazdavezérlős, illetve USB periféria-üzemmódú tartozék között, vagy mindkettőre szükség van (pl. az USB gazdavezérlőt nem támogató, androidos eszközök és a standard szoftveres kompatibilitás miatt csak USB perifériaként működő eszközök támogatása miatt), abban az esetben is van megoldás. Az androidos tartozékok USB OTG-kompatibilitással is felruházhatók, amely lehetővé teszi, hogy a tartozék USB gazdavezérlőként vagy USB szolgaeszközként működjön, attól függően, hogy milyen kábellel csatlakozik. Így az USB OTG-vel a tartozék viselkedhet gazdavezérlőként olyan androidos eszközöknél, amelyek erre nem képesek, illetve működhet perifériaüzemben is az USB gazdavezérlő funkciót támogató Android eszközök esetében.
Az USB OTG használatával kapcsolatban azonban adódhatnak komplikációk. Az androidos eszköz mellé adott kábellel nem csatlakozhatunk a tartozékhoz, mivel a kábel alighanem Full-A típusú csatlakozóval rendelkezik, amely nem illeszkedik az OTG-s tartozék micro-A/B típusú csatlakozójába. Ebben az esetben egy további, micro-A csatlakozós kábelre lesz szükség. Az androidos eszközök eltérő hardveres kiépítettsége miatt ez problémás lehet, mivel csak micro-A → micro-B standard USB kábeles átalakítók használhatók, de sok androidos eszköz mini-B, vagy egyedi csatlakozóval rendelkezik. A helyzetet tovább bonyolítja, hogy sok olyan okostelefon, ill. tablet van a piacon, amelyek ugyan OTG-kompatibilisek, mégsem micro-A/B foglalattal rendelkeznek. Ehelyett micro-B típusú foglalatot helyezett el rajtuk gyártójuk, amelybe egyedi, nem USB-előírások szerinti kábel csatlakozik, és teszi lehetővé a gazdavezérlő üzemmódú működést. A 7. ábra mutatja, hogyan csatlakozik egy OTG-kompatibilis tartozék az ilyenfajta, csak USB perifériaként működő, valamint USB gazdavezérlős, ill. OTG-kompatibilis, androidos eszközökhöz.
Ha gazdavezérlőként működik a tartozék, még egy további döntést meg kell hozni: mely alkalmazásprogramozási interfészt (API2-t) kívánjuk használni? Az Android v2.3.4-hez használt könyvtármodul (com.android.future.usb) némileg eltér az Android v3.1+ esetében használt könyvtártól (android.hardware.usb), és a két könyvtár közötti interfész szintén változik, de a funkcionalitás alapvetően azonos. A legfontosabb tudnivaló, hogy az android.hardware.usb könyvtár csak az Android v3.1+ operációsrendszer-változatnál érhető el, a com.android.future.usb könyvtár pedig mind az Android v2.3.4, mind az Android v3.1+ rendszert futtató eszközöknél rendelkezésre áll. (Fontos megjegyezni, hogy a com.android.future.usb könyvtár nem alaptartozék az Android v2.3.4 esetében, így lehetnek olyan, Android v2.3.4-et futtató eszközök a piacon, amelyek nem támogatják a szükséges funkciókat a tartozékokkal való kommunikációhoz. Az eszközgyártó felelőssége, hogy mellékelje-e a saját eszközeikhez szállított operációs rendszerhez ezt a funkciót.)
Az IOIO Android hibavadászinterfész használata
Az androidos tartozékok ügyében egy további témára kell kitérnünk. Ez az IOIO nevű megoldás, amely az androidos tartozékok fejlesztését támogatja az Android ADB hibavadász-interfészen keresztül. Ez lehetővé teszi a legalább Android v1.5 rendszert futtató eszközök számára a tartozékfejlesztést anélkül, hogy várni kellene az eszközgyártókra, amíg kiadják az Android v2.3.4 vagy v3.1+ rendszerfrissítéseket termékeikre, mire a tartozékok használhatóvá válnak velük. Ennek a megoldásnak azonban hátrányai is vannak, hiszen bár az ADB interfész nem sok változáson esett át az elmúlt időkben, a Google fenntartja magának a jogot, hogy megváltoztassa az interfészt a jövőbeni eszközök követelményei szerint.
Összefoglalás
Cikkünkben ismertettünk néhány, tervezéssel kapcsolatos tudnivalót, amelyek fontos döntések elé állítják azokat a tartozékfejlesztőket, akik Android operációs rendszert futtató eszközök számára dolgoznak. A fejlesztők nemcsak az androidos fejlesztői közösség fórumain, hanem az eszközök széles palettáját kínáló Microchip oldalán, a www.microchip.com/android címen is tájékozódhatnak, kérdéseiket pedig az Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát. e-mail címen is feltehetik.
1: USB On-The-Go: olyan USB specifikáció, amely lehetővé teszi a vele kompatibilis, USB-s eszközök számára a gazdavezérlőként való működést.
2: Application Programming Interface