package Ġorg . first insp ires . ft c . team code . main Bot . hardware Ċ Ċ import Ġcom . david . re char ged kotlin library . internal . hardware . management . MT Subsystem Ċ import Ġcom . qual comm . hardware . rev . Rev B link in Led Driver Ċ import Ġcom . qual comm . robot core . util . Elapsed Time Ċ Ċ class ĠSuper System ( val Ġrobot : ĠHardware Class ) Ġ: ĠMT Subsystem Ġ{ ĊĠĠĠ Ġval Ġblink en Ġ= Ġrobot . h Map . get ( Rev B link in Led Driver :: class . java , Ġ" blink en ") Ġ// as ĠCached B link en LED ĊĠĠĠ Ġval Ġnormal Pattern Ġ= ĠRev B link in Led Driver . B link in Pattern . GREEN ĊĠĠĠ Ġval Ġhang Time Pattern Ġ= ĠRev B link in Led Driver . B link in Pattern . ST RO BE _ RED ĊĊĠĠĠ Ġval Ġbucket Sense Ġ= ĠBucket Sense ( robot . h Map ) ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠUNKNOWN , ĊĠĠĠĠĠĠĠ ĠFOL LOW ING _ FSM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtime After StateChange Ġ= ĠE lapsed Time () ĊĊĠĠĠ Ġvar Ġf sm : Super Structure FSM ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . FOLLOW ING _ FSM ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwait On FSM () Ġ= Ġrobot . op Mode . wait While Ġ{ Ġis Following FSM () Ġ} ĊĊĠĠĠ Ġvar Ġstate Ġ= ĠState . UNKNOWN ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime After StateChange . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! robot . op Mode . is Aut onomous ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbucket Sense . update Cache () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . UNKNOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . FOLLOW ING _ FSM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf sm Ġ= Ġf sm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( fsm Ġ== Ġnull Ġ|| Ġf sm . is Complete ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf sm . update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( robot . op Mode . is Aut onomous () Ġ&& Ġrobot . op Mode . is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . op Mode . telemetry . addData (" status ", Ġ" running Ġauto ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . op Mode . telemetry . add Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . op Mode . telemetry . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( robot . op Mode . is Aut onomous ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblink en . set Pattern ( Rev B link in Led Driver . B link in Pattern . BLACK ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblink en . set Pattern ( if Ġ( 1 2 0 . 0 Ġ- Ġrobot . op Mode . runtime . seconds () Ġ< Ġ 1 0 . 0 ) Ġhang Time Pattern Ġelse Ġnormal Pattern ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrobot . thread . add Subsystem ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Following FSM () Ġ= Ġstate Ġ== ĠState . FOLLOW ING _ FSM Ċ } Ċ Ċ abstract Ġclass ĠSuper Structure FSM ( protected Ġval Ġrobot : Hardware Class ){ ĊĠĠĠ Ġabstract Ġfun Ġupdate () ĊĠĠĠ Ġabstract Ġfun Ġis Complete (): Boolean Ċ }