/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . google . android . fast boot mobile . transport Ċ Ċ import Ġandroid . hardware . usb . Usb Constants Ċ import Ġandroid . hardware . usb . Usb Device Connection Ċ import Ġandroid . hardware . usb . Usb Endpoint Ċ import Ġandroid . hardware . usb . Usb Interface Ċ Ċ internal Ġclass ĠU sb Transport ( private Ġval Ġfast boot Interface : ĠU sb Interface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġconnection : ĠU sb Device Connection ) Ġ: ĠTransport Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġis Connected : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġin Endpoint : ĠU sb Endpoint ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġout Endpoint : ĠU sb Endpoint ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġfast boot Interface . endpoint Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe 1 Ġ= Ġfast boot Interface . get Endpoint ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e 1 . direction Ġ== ĠU sb Constants . USB _ DIR _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Endpoint Ġ= Ġe 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Endpoint Ġ= Ġe 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: in Endpoint . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" No Ġendpoint Ġfound Ġfor Ġinput .") ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: out Endpoint . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" No Ġendpoint Ġfound Ġfor Ġoutput .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect ( force : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . claim Interface ( fast boot Interface , Ġforce ) ĊĠĠĠĠĠĠĠ Ġthis . isConnected Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isConnected ) Ġreturn ĊĠĠĠĠĠĠĠ Ġconnection . release Interface ( fast boot Interface ) ĊĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisconnect () ĊĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( buffer : ĠByteArray , Ġtimeout : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . bulk Transfer ( out Endpoint , Ġbuffer , Ġbuffer . size , Ġtimeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreceive ( buffer : ĠByteArray , Ġtimeout : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . bulk Transfer ( in Endpoint , Ġbuffer , Ġbuffer . size , Ġtimeout ) ĊĠĠĠ Ġ} Ċ Ċ }