/* Ċ Ġ* ĠCopyright Ġ 2 0 0 9 ĠC ed ric ĠPr is cal Ċ Ġ* ĠĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĊ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . ĠĊ Ġ*/ Ċ package Ġandroid _ serial port _ api Ċ Ċ import Ġjava . io . FileDescriptor Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . lang . Security Exception Ċ import Ġjava . io . IOException Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġandroid _ serial port _ api . Serial Port Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ Ċ class ĠSerial Port Ġ{ ĊĠĠĠ Ġ/* Ċĉ Ġ* ĠDo Ġnot Ġremove Ġor Ġrename Ġthe Ġfield Ġm Fd : Ġit Ġis Ġused Ġby Ġnative Ġmethod Ġclose (); Ċĉ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Fd : ĠFile Descriptor ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm FileInputStream : ĠFileInputStream ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm File OutputStream : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠ Ġ@ Throws ( Security Exception :: class , ĠIOException :: class ) ĊĠĠĠ Ġfun ĠOpen Device ( device : ĠFile , Ġspeed : ĠInt , Ġmode : ĠInt , Ġdev type : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! device . can Read () Ġ|| Ġ! device . can Write ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠMissing Ġread / write Ġpermission , Ġtrying Ġto Ġchmod Ġthe Ġfile Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsu : ĠProcess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsu Ġ= ĠRuntime . get Runtime (). exec ("/ system / bin / su ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchmod Ġ 6 6 6 Ġ${ device . absolute Path } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsu . output Stream . write ( cmd . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( su . waitFor () Ġ!= Ġ 0 Ġ|| Ġ! device . can Read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ! device . can Write ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSecurity Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSecurity Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Fd Ġ= Ġopen ( device . absolute Path , Ġspeed , Ġmode , Ġdev type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Fd Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" native Ġopen Ġreturns Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm FileInputStream Ġ= ĠFileInputStream ( m Fd ) ĊĠĠĠĠĠĠĠ Ġm File OutputStream Ġ= ĠFileOutputStream ( m Fd ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠClose Device () Ġ{ ĊĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet ters Ġand Ġset ters ĊĠĠĠ Ġval ĠinputStream : ĠInputStream ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm FileInputStream ĊĠĠĠ Ġval ĠoutputStream : ĠOutputStream ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm File OutputStream ĊĊĠĠĠ Ġfun ĠPower Switch ( sw : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" x pb ", Ġ" SPI ĠPower ĠON ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpower con trl ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset control ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset control ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" x pb ", Ġ" SPI ĠPower ĠOff ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset control ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpower con trl ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġexternal Ġfun Ġclose () ĊĠĠĠ Ġexternal Ġfun Ġget model (): ĠString ? ĊĠĠĠ Ġexternal Ġfun Ġpower con trl (` val `: ĠInt ) ĊĠĠĠ Ġexternal Ġfun Ġreset control (` val `: ĠInt ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Serial Port " ĊĊĠĠĠĠĠĠĠ Ġ// ĠJNI ĊĠĠĠĠĠĠĠ Ġprivate Ġexternal Ġfun Ġopen ( path : ĠString , Ġspeed : ĠInt , Ġmode : ĠInt , Ġdev type : ĠInt ): ĠFile Descriptor ? ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . load Library (" serial port ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }