/* Ċ Ġ* ĠBased Ġin Ġthe ĠCH 3 4 0 x Ġdriver Ġmade Ġby ĠAnd reas ĠBut ti Ġ( https :// github . com / mik 3 y / usb - serial - for - android / blob / master / usb Serial For Android / src / main / java / com / ho ho / android / usb serial / driver / Ch 3 4 x Serial Driver . java ) Ċ Ġ* ĠThanks Ġto ĠPaul ĠAl cock Ġfor Ġprovide Ġme Ġwith Ġone Ġof Ġthose ĠArduino Ġnano Ġcl ones !!! Ċ Ġ* ĠAlso Ġthanks Ġto ĠLex ĠW ern ars Ġfor Ġsend Ġme Ġa ĠCH 3 4 0 Ġthat Ġdid nt Ġwork Ġwith Ġthe Ġformer Ġversion Ġof Ġthis Ġcode !! Ċ Ġ* Ġ*/ Ċ Ċ package Ġnet . er aga . rx usb . serial Ċ Ċ import Ġnet . er aga . rx usb . Usb Constants Ċ import Ġnet . er aga . rx usb . Usb Interface Ċ import Ġnet . er aga . rx usb . Usb Interface Connection Ċ import Ġnet . er aga . rx usb . nio . Bulk Readable Channel Ċ import Ġnet . er aga . rx usb . nio . Bulk Writable Channel Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġkotlin . experimental . and ĊĊ Ċ class ĠCH 3 4 x Serial Device ( connection : ĠU sb Interface Connection ) Ġ: ĠU sb Serial Device ( connection ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĠLoggerFactory . getLogger ( CH 3 4 x Serial Device :: class . java ) ĊĊĠĠĠ Ġ// ĠX ON / X OFF Ġdoesnt Ġappear Ġto Ġbe Ġsupported Ġdirectly Ġfrom Ġhardware ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Interface : ĠU sb Interface Ċ // ĠĠĠ Ġprivate Ġvar Ġin Endpoint : ĠU sb Endpoint ? Ġ= Ġnull Ċ // ĠĠĠ Ġprivate Ġvar Ġout Endpoint : ĠU sb Endpoint ? Ġ= Ġnull Ċ // ĠĠĠ Ġprivate Ġvar Ġrequest IN : ĠU sb Request ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġflow Control Thread : ĠFlow Control Thread ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġc ts Callback : ĠU sb Serial . Usb CT S Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġd sr Callback : ĠU sb Serial . Usb DS R Callback ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġr ts C ts Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġd tr D sr Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġd tr Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġr ts Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġc ts State Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġd sr State Ġ= Ġfalse ĊĊĊĠĠĠ Ġoverride Ġfun Ġopen (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġopen CH 3 4 X () ĊĠĠĠĠĠĠĠ Ġif Ġ( ret ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInitialize ĠU sb Request Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrequest IN Ġ= ĠU sb Request () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrequest IN !!. initialize ( connection , Ġin Endpoint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRestart Ġthe Ġworking Ġthread Ġif Ġit Ġhas Ġbeen Ġkilled Ġbefore Ġand Ġ Ġget Ġand Ġclaim Ġinterface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Working Thread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Write Thread () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠFlow Ġcontrol Ġthread Ġbut Ġit Ġwill Ġonly Ġbe Ġstarted Ġif Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Flow Control Thread () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Mode Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġkill Working Thread () ĊĠĠĠĠĠĠĠ Ġkill Write Thread () ĊĠĠĠĠĠĠĠ Ġstop Flow Control Thread () ĊĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsync Open (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġopen CH 3 4 X () ĊĠĠĠĠĠĠĠ Ġif Ġ( ret ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠFlow Ġcontrol Ġthread Ġbut Ġit Ġwill Ġonly Ġbe Ġstarted Ġif Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Flow Control Thread () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġset Sync Params ( in Endpoint !! , Ġout Endpoint !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsync Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Flow Control Thread () ĊĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset B aud Rate ( ba ud Rate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ba ud Rate Ġ<= Ġ 3 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 3 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 3 0 0 _ 0 f 2 c ) Ġ// 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 3 0 1 .. 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 6 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 6 0 0 _ 0 f 2 c ) Ġ// 6 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 6 0 1 .. 1 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 1 2 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 2 0 0 _ 0 f 2 c ) Ġ// 1 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 1 2 0 1 .. 2 4 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 2 4 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 2 4 0 0 _ 0 f 2 c ) Ġ// 2 4 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 2 4 0 1 .. 4 8 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 4 8 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 4 8 0 0 _ 0 f 2 c ) Ġ// 4 8 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 4 8 0 1 .. 9 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 9 6 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 9 6 0 0 _ 0 f 2 c ) Ġ// 9 6 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 9 6 0 1 .. 1 9 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 1 9 2 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) Ġ// 1 9 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 1 9 2 0 1 .. 3 8 4 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 3 8 4 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) Ġ// 3 8 4 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 3 8 4 0 1 .. 5 7 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 5 7 6 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) Ġ// 5 7 6 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 5 7 6 0 1 .. 1 1 5 2 0 0 ) Ġ// 1 1 5 2 0 0 ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 1 1 5 2 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 1 1 5 2 0 1 .. 2 3 0 4 0 0 ) Ġ// 2 3 0 4 0 0 ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 2 3 0 4 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 2 3 0 4 0 1 .. 4 6 0 8 0 0 ) Ġ// 4 6 0 8 0 0 ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 4 6 0 8 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ba ud Rate Ġin Ġ 4 6 0 8 0 1 .. 9 2 1 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset B aud Rate ( CH 3 4 X _ 9 2 1 6 0 0 _ 1 3 1 2 , ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Set B aud Rate Ġfailed !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetData Bits ( data Bits : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠAuto - generated Ġmethod Ġstub ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Stop Bits ( stop Bits : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠAuto - generated Ġmethod Ġstub ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Par ity ( parity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( parity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . PAR ITY _ NONE Ġ-> Ġset Ch 3 4 0 x Par ity ( CH 3 4 X _ PAR ITY _ NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . PAR ITY _ O DD Ġ-> Ġset Ch 3 4 0 x Par ity ( CH 3 4 X _ PAR ITY _ O DD ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . PAR ITY _ E VEN Ġ-> Ġset Ch 3 4 0 x Par ity ( CH 3 4 X _ PAR ITY _ E VEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . PAR ITY _ MARK Ġ-> Ġset Ch 3 4 0 x Par ity ( CH 3 4 X _ PAR ITY _ MARK ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . PAR ITY _ SPACE Ġ-> Ġset Ch 3 4 0 x Par ity ( CH 3 4 X _ PAR ITY _ SPACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Flow Control ( flow Control : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( flow Control ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . FLOW _ CONTROL _ OFF Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ts C ts Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd tr D sr Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ch 3 4 0 x Flow ( CH 3 4 X _ FLOW _ CONTROL _ NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . FLOW _ CONTROL _ RT S _ CT S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ts C ts Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd tr D sr Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ch 3 4 0 x Flow ( CH 3 4 X _ FLOW _ CONTROL _ RT S _ CT S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ts State Ġ= Ġcheck CT S () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Flow Control Thread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU sb Serial . FLOW _ CONTROL _ DS R _ D TR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ts C ts Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd tr D sr Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ch 3 4 0 x Flow ( CH 3 4 X _ FLOW _ CONTROL _ DS R _ D TR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sr State Ġ= Ġcheck DS R () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Flow Control Thread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset RT S ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġr ts Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġwrite Handshake Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset D TR ( state : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġd tr Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġwrite Handshake Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget CT S ( cts Callback : ĠU sb Serial . Usb CT S Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . cts Callback Ġ= Ġc ts Callback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget DS R ( ds r Callback : ĠU sb Serial . Usb DS R Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ds r Callback Ġ= Ġd sr Callback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Break ( break Callback : ĠU sb Serial . Usb Break Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Frame ( frame Callback : ĠU sb Serial . Usb Frame Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Over run ( over run Callback : ĠU sb Serial . Usb Over run Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Par ity ( parity Callback : ĠU sb Serial . Usb Par ity Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen CH 3 4 X (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAssign Ġendpoints ĊĠĠĠĠĠĠĠ Ġfor Ġ( endpoint Ġin Ġm Interface . endpoints ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( endpoint . getType () Ġ== ĠU sb Constants . USB _ ENDPOINT _ X FER _ B UL K Ġ&& Ġendpoint . get Direction () Ġ== ĠU sb Constants . USB _ DIR _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Endpoint Ġ= Ġconnection . open ( endpoint , ĠUSB _ TIMEOUT . to Long ()) Ġas ĠBulk Readable Channel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( endpoint . getType () Ġ== ĠU sb Constants . USB _ ENDPOINT _ X FER _ B UL K Ġ&& Ġendpoint . get Direction () Ġ== ĠU sb Constants . USB _ DIR _ OUT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Endpoint Ġ= Ġconnection . open ( endpoint , ĠUSB _ TIMEOUT . to Long ()) Ġas ĠBulk Writable Channel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinit () Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInit Ġthe Ġdevice Ġat Ġ 9 6 0 0 Ġbaud s ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 xa 1 , Ġ 0 xc 2 9 c , Ġ 0 xb 2 b 9 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 xa 4 , Ġ 0 xdf , Ġ 0 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 xa 4 , Ġ 0 x 9 f , Ġ 0 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check State (" init Ġ# 4 ", Ġ 0 x 9 5 , Ġ 0 x 0 7 0 6 , Ġint ArrayOf ( 0 x 9 f , Ġ 0 xee )) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 x 9 a , Ġ 0 x 2 7 2 7 , Ġ 0 x 0 0 0 0 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 x 9 a , Ġ 0 x 1 3 1 2 , Ġ 0 xb 2 8 2 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 x 9 a , Ġ 0 x 0 f 2 c , Ġ 0 x 0 0 0 8 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 x 9 a , Ġ 0 x 2 5 1 8 , Ġ 0 x 0 0 c 3 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check State (" init Ġ# 9 ", Ġ 0 x 9 5 , Ġ 0 x 0 7 0 6 , Ġint ArrayOf ( 0 x 9 f , Ġ 0 xee )) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 x 9 a , Ġ 0 x 2 7 2 7 , Ġ 0 x 0 0 0 0 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" init Ġfailed ! Ġ# 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset B aud Rate ( index 1 3 1 2 : ĠInt , Ġindex 0 f 2 c : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 1 3 1 2 , Ġindex 1 3 1 2 , Ġnull ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 0 f 2 c , Ġindex 0 f 2 c , Ġnull ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( check State (" set _ ba ud _ rate ", Ġ 0 x 9 5 , Ġ 0 x 0 7 0 6 , Ġint ArrayOf ( 0 x 9 f , Ġ 0 xee )) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 2 7 2 7 , Ġ 0 , Ġnull ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Ch 3 4 0 x Par ity ( index Par ity : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 2 5 1 8 , Ġindex Par ity , Ġnull ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( check State (" set _ parity ", Ġ 0 x 9 5 , Ġ 0 x 0 7 0 6 , Ġint ArrayOf ( 0 x 9 f , Ġ 0 xee )) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 2 7 2 7 , Ġ 0 , Ġnull ) Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Ch 3 4 0 x Flow ( flow Control : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check State (" set _ flow _ control ", Ġ 0 x 9 5 , Ġ 0 x 0 7 0 6 , Ġint ArrayOf ( 0 x 9 f , Ġ 0 xee )) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( CH 3 4 1 _ REQ _ WRITE _ REG , Ġ 0 x 2 7 2 7 , Ġflow Control , Ġnull ) Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck State ( msg : ĠString , Ġrequest : ĠInt , Ġvalue : ĠInt , Ġexpected : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( expected . size ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset Control Command In ( request , Ġvalue , Ġ 0 , Ġbuffer ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ!= Ġexpected . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Expected Ġ{} Ġbytes , Ġbut Ġget Ġ{} Ġ[ {} ]", Ġexpected . size , Ġret , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck CT S (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset Control Command In ( CH 3 4 1 _ REQ _ READ _ REG , Ġ 0 x 0 7 0 6 , Ġ 0 , Ġbuffer ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Expected Ġ" Ġ+ Ġ" 2 " Ġ+ Ġ" Ġbytes , Ġbut Ġget Ġ" Ġ+ Ġret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ 0 ]. and ( 0 x 0 1 ) Ġ== Ġ 0 x 0 0 . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck DS R (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġset Control Command In ( CH 3 4 1 _ REQ _ READ _ REG , Ġ 0 x 0 7 0 6 , Ġ 0 , Ġbuffer ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Expected Ġ 2 Ġbytes , Ġbut Ġget Ġ{}", Ġret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer [ 0 ]. and ( 0 x 0 2 ) Ġ== Ġ 0 x 0 0 . to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Handshake Byte (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( set Control Command Out ( 0 xa 4 , Ġ(( if Ġ( d tr ) Ġ 1 Ġshl Ġ 5 Ġelse Ġ 0 ) Ġor Ġif Ġ( r ts ) Ġ 1 Ġshl Ġ 6 Ġelse Ġ 0 ). inv (), Ġ 0 , Ġnull ) Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Failed Ġto Ġset Ġhandshake Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Control Command Out ( request : ĠInt , Ġvalue : ĠInt , Ġindex : ĠInt , Ġdata : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata Length Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġdata ToSend : ĠByteArray ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Length Ġ= Ġdata . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend Ġ= ĠByteArray ( data Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġconnection . device Connection . control Transfer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQ TYPE _ HOST _ TO _ DEVICE , Ġrequest , Ġvalue , Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend , Ġdata Length , ĠU sb Serial Device . USB _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġlog . info (" Control ĠTransfer ĠResponse Ġ( TO ĠDEVICE ): Ġ{}", Ġresponse . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Control Command In ( request : ĠInt , Ġvalue : ĠInt , Ġindex : ĠInt , Ġdata : ĠByteArray ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdata Length Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġdata ToSend : ĠByteArray ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Length Ġ= Ġdata . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend Ġ= ĠByteArray ( data Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġconnection . device Connection . control Transfer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQ TYPE _ HOST _ FROM _ DEVICE , Ġrequest , Ġvalue , Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ToSend , Ġdata Length , ĠU sb Serial Device . USB _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġlog . info (" Control ĠTransfer ĠResponse Ġ( TO ĠDEVICE ): Ġ{}", Ġresponse . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Flow Control Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Control Thread Ġ= ĠFlow Control Thread () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Flow Control Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! flow Control Thread !!. is Alive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Control Thread !!. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Flow Control Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( flow Control Thread Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Control Thread !!. stop Thread () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Control Thread Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠFlow Control Thread Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtime : ĠLong Ġ= Ġ 1 0 0 Ġ// Ġ 1 0 0 ms ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfirst Time : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkeep : ĠAtomic Boolean ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Ġ= ĠAtomic Boolean ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Time Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( keep . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! first Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck ĠC TS Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r ts C ts Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ts Ġ= Ġpoll For CT S () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cts State Ġ!= Ġc ts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ts State Ġ= Ġ! cts State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cts Callback Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ts Callback !!. on CT S Changed ( cts State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck ĠD SR Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d tr D sr Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd sr Ġ= Ġpoll For DS R () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ds r State Ġ!= Ġd sr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sr State Ġ= Ġ! ds r State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ds r Callback Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sr Callback !!. on DS R Changed ( ds r State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r ts C ts Enabled Ġ&& Ġc ts Callback Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ts Callback !!. on CT S Changed ( cts State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d tr D sr Enabled Ġ&& Ġd sr Callback Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sr Callback !!. on DS R Changed ( ds r State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstop Thread () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlock Ġ= Ġjava . lang . Object () ĊĊĠĠĠĠĠĠĠ Ġfun Ġpoll For CT S (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . wait ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcheck CT S () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpoll For DS R (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . wait ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcheck DS R () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ BA U DR ATE Ġ= Ġ 9 6 0 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQ TYPE _ HOST _ FROM _ DEVICE Ġ= ĠU sb Constants . USB _ TYPE _ VENDOR Ġor ĠU sb Constants . USB _ DIR _ IN ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQ TYPE _ HOST _ TO _ DEVICE Ġ= Ġ 0 x 4 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ REQ _ WRITE _ REG Ġ= Ġ 0 x 9 A ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ REQ _ READ _ REG Ġ= Ġ 0 x 9 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ REG _ BREAK 1 Ġ= Ġ 0 x 0 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ REG _ BREAK 2 Ġ= Ġ 0 x 1 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ NB RE AK _ BITS _ REG 1 Ġ= Ġ 0 x 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 1 _ NB RE AK _ BITS _ REG 2 Ġ= Ġ 0 x 4 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠB aud Ġrates Ġvalues ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 3 0 0 _ 1 3 1 2 Ġ= Ġ 0 xd 9 8 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 3 0 0 _ 0 f 2 c Ġ= Ġ 0 xeb ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 6 0 0 _ 1 3 1 2 Ġ= Ġ 0 x 6 4 8 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 6 0 0 _ 0 f 2 c Ġ= Ġ 0 x 7 6 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 1 2 0 0 _ 1 3 1 2 Ġ= Ġ 0 xb 2 8 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 1 2 0 0 _ 0 f 2 c Ġ= Ġ 0 x 3 b ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 2 4 0 0 _ 1 3 1 2 Ġ= Ġ 0 xd 9 8 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 2 4 0 0 _ 0 f 2 c Ġ= Ġ 0 x 1 e ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 4 8 0 0 _ 1 3 1 2 Ġ= Ġ 0 x 6 4 8 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 4 8 0 0 _ 0 f 2 c Ġ= Ġ 0 x 0 f ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 9 6 0 0 _ 1 3 1 2 Ġ= Ġ 0 xb 2 8 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 9 6 0 0 _ 0 f 2 c Ġ= Ġ 0 x 0 8 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 1 9 2 0 0 _ 1 3 1 2 Ġ= Ġ 0 xd 9 8 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 1 9 2 0 0 _ 0 f 2 c _ rest Ġ= Ġ 0 x 0 7 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 3 8 4 0 0 _ 1 3 1 2 Ġ= Ġ 0 x 6 4 8 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 5 7 6 0 0 _ 1 3 1 2 Ġ= Ġ 0 x 9 8 8 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 1 1 5 2 0 0 _ 1 3 1 2 Ġ= Ġ 0 xcc 8 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 2 3 0 4 0 0 _ 1 3 1 2 Ġ= Ġ 0 xe 6 8 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 4 6 0 8 0 0 _ 1 3 1 2 Ġ= Ġ 0 xf 3 8 3 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ 9 2 1 6 0 0 _ 1 3 1 2 Ġ= Ġ 0 xf 3 8 7 ĊĊĠĠĠĠĠĠĠ Ġ// ĠPar ity Ġvalues ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ PAR ITY _ NONE Ġ= Ġ 0 xc 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ PAR ITY _ O DD Ġ= Ġ 0 xcb ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ PAR ITY _ E VEN Ġ= Ġ 0 xdb ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ PAR ITY _ MARK Ġ= Ġ 0 xeb ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ PAR ITY _ SPACE Ġ= Ġ 0 xfb ĊĊĠĠĠĠĠĠĠ Ġ// Flow Ġcontrol Ġvalues ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ FLOW _ CONTROL _ NONE Ġ= Ġ 0 x 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ FLOW _ CONTROL _ RT S _ CT S Ġ= Ġ 0 x 0 1 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCH 3 4 X _ FLOW _ CONTROL _ DS R _ D TR Ġ= Ġ 0 x 0 2 0 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġr ts C ts Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġd tr D sr Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Interface Ġ= Ġconnection . usb Interface ĊĠĠĠ Ġ} Ċ } Ċ