View Single Post
Staro 30.11.2016., 11:32   #1
De5tr0yer
Avocado
Moj komp
 
De5tr0yer's Avatar
 
Datum registracije: Aug 2005
Lokacija: Zagreb
Postovi: 7,801
Android parsing inputs sa OTG USB uređaja u globalne kontrole; tethering media server

Hvala unaprijed svima koji će pomoći.

Kod Androida nisam nikad programirao svoju vlastitu aplikaciju, međutim u zadnje vrijeme sam počelo malo njuškati oko njega jer imam jednu specifičnu situaciju, opis slijedi.

Cilj: Radi se o integraciji Nexus 7 2013 (flo, wlan only) tableta unutar starijeg BMW-a, da postane integralni non/semi-removable uređaj koji će služiti za navigaciju, kao internet radio i općeniti music player.

Motivacija: Želim da se kontrole na volanu (glasnoća, bck-fwd itd.) mogu prenijeti na tablet/Android, te se za tu svrhu koristi adapter koji omogućuje "čitanje" poruka kad su tipke na volanu pritisnute s IBUS-a. IBUS je pak BMW specifični sustav baziran na standardiziranom K-Bus (ISO 9141), te postoje gotovi čipovi koji mogu čitati poruke kodirane tim postupkom. Dodatna ušteda vremena je kupnja gotovog USB-Donglea (Resler). Ovaj dio priče je relativno jednostavan i nema direktnu interakciju s Android aplikacijom, već bi Android trebao "samo" slušati ima li USB-Dongle nešto za reći.


Cilj svega ovoga je da se tipke volana mogu koristiti primarno kao globalne naredbe poput postojećih tipki na tabletu (pošto će tipke biti nepristupačne). To znači da ak stisnem "+" u autu da mi Android poveća glasnoću na način kao što to inače nativno radi: ako sam na home, da mi pojačava zvuk notifikacija, a ako sam u nekoj aplikaciji da pojačava media stream zvuk.

Ovo bih riješio na taj način da se pojednostavi sustav i da se osigura kompatibilnost svih ispravno napravljenih aplikacija.


Hardverski sam potkovan, implementacija se sastoji od polugotovih komponenata (financijski i vremenski isplativije), a ugradnja u sam dash automobila je još uvijek u testnoj fazi, ali dosad sam riješio sljedeće:
  • DC 12 na DC 5V adapter, dovoljne snage da pogoni nekoliko uređaja paralelno (specifikacija kaže 100W, ovdje sam napravio debeli oversizing da ne bi došlo do pregrijavanja jer je deklariran na do +85°C)
  • aktivacija eksternog pojačala bez originalnog radio uređaja
  • predpojačalo zvuka za ugrađeno pojačalo jer izlazna snaga Android uređaja nije bila dovoljna; baziran na IC PAM8403.
  • Kablovinje s adapterom, kako bi originalni kablovi ostali netaktnuti
  • aktivacija sklopa preko ACC pozicije na ključu auta preko releja koji šalta na glavnu 12V granu. Svrha: ne crpi bateriju auta dok je auto ugašen + osigurač za ACC 12V granu je znatno manji od glavne 12V grane prema radio uređaju.
  • OTG USB kabel za OTG + charge
  • Nexus 7 root + Kernel s opcijom OTG + charge
  • Resler IBUS interface (USB dongle) - prima IBUS poruke i prebacuje na standardni USB
  • Dodatna dva USB porta, charge only.

Što sam dosad uspio iskemijati u Android Studiu:
  • aktivacija aplikacije kad prepozna USB uređaj (USB manifest). Znači uspio sam prema dokumentaciji sa android stranica ipak nešto sklepati.
  • Izlistati spojene uređaje preko USB-Huba

Što mi treba:
  • service koji će biti aktivan kad je USB-dongle spojen. Pošto će on biti spojen 99.9% vremena, može se napraviti i service koji će biti aktivan odmah po paljenju. Rado bih odmah napravio kako treba, naučim odmah i to.
  • Primanje podataka sa USB-donglea. Ovo je kritični dio koji ne znam kako implementirati.
  • Parser/prevodilac primljenih poruka sa USB-donglea u globalne komande.
  • Kao proširenje prethodne točke: mapper primljenih poruka na specifične naredbe u androidu.


--
Moji dosadašnji infosi:

IBUS osnove

Na githubu sam naletio na nekoliko verzija interfacea za IBUS + Nexus 7, međutim svi koriste okolne metode preko rPi, IOIO i bluetooth rješenja, što je po meni blesavo jer u startu svi koriste isti način pristupa IBUS-u, što znači da IBUS-to-USB teoretski mora funkcionirati i direktno spojen na Androidu. Pošto je uređaj prepoznat od strane android OS-a, mislim da nema problema po tom pitanju.

DroidIBus (IOIO verzija)
BMWired: koristi usb-serial-for-android, ali mi je šturo dokumentiran, pa nisam znao di početi.

Također sam naletio na usb-serial-for-android lib koji bi mi mogao pomoći, ali nemam blage veze je li to way-to-go. Nexus 7 je službeno podržan što je definitivno plus.

Postoji puno primjera gdje su ljudi "prevarili" IBUS da je CD-Player još uvijek aktivan ili slične kerefeke, međutim za mene to nije opcija.

--


U budućnosti bih volio i sljedeće stvari riješiti, ali one nisu prijeko potrebne:
  • integracija deep sleepa nakon što nestane napajanja (tablet na bateriji)
  • USB Hub koji trenutno ne funkcionira ako nestane napajanja bez iskopčaj-ukopčaj kabel u tabletu.
  • restart naredba u shut down meniju (nema je na AOSPu)
  • mogućnost korištenja tetheringa s mobitela te da mobitel ujedno bude media server, tj. da je moguće kroz tethering slušati muziku s mobitela
  • telefonija preko tetheringa - koristiti mobitel kao server preko kojeg se zove/prima poziv, ali da se zvuk prenosi tetheringom na tablet, tj. da se omogući handsfree.

--
Na stranu budućnost, točke pod "Što mi treba" su trenutno aktivne i ako bilo tko može pomoći i/ili je imao iskustva sa sličnim stvarima na Androidu, molio bih da javi. Svaka informacija je dobrodošla
OFC: kod će na kraju biti dostupan preko Githuba za svakoga tko će htjeti isprobati/koristiti.
__________________
Spoiler alert!
De5tr0yer je offline   Reply With Quote