package Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . impl Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . nec . Android . he arable .* Ċ import Ġcom . nec . Android . he arable . log . Log Utils Ċ import Ġcom . nec . Android . he arable . mqtt . Mqtt Server Property Ċ import Ġcom . nec . Android . he arable . sensor . He arable Sensor Manager Ċ import Ġcom . nec . Android . he arable . voice . He arable Regist Voice Ċ import Ġjp . co . ze ppelin . nec . he arable . domain . helpers . Single LiveData Event Ċ import Ġjp . co . ze ppelin . nec . he arable . domain . helpers . Z ep Log Ċ import Ġjp . co . ze ppelin . nec . he arable . domain . model . N ec He arable Event Base Ċ import Ġjp . co . ze ppelin . nec . he arable . domain . model . N ec He arable Sdk Error Ċ import Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . R Ċ import Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . constants . N ec He arable SDK Constants Ċ import Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . contract . IN ec Sdk Contract Ċ import Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . cor o . Col d Flow W Timeout Ċ import Ġjp . co . ze ppelin . nec . he arable . nec sd kw rapper . model .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ* ĠAb straction Ġlayer Ġfor ĠN EC ĠH ear able ĠSDK Ċ Ġ* Ċ Ġ* ĠRequest / emit Ġpar adig m : Ġcall Ġmethod Ġand Ġobserve Ġsubsequent Ġemit Ġof Ġtyp . ĠLive Data Ċ Ġ* Ċ Ġ* Ġ( c ) Ġ 2 0 2 0 ĠZe ppelin ĠInc ., ĠSh i bu ya , ĠTok yo ĠJ AP AN Ċ Ġ*/ Ċ class ĠN ec He arable Sdk Wrapper ( context : ĠContext ) Ġ: ĠIN ec Sdk Contract . IN ec He arable Sdk Impl Contract Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ he arable Status Ġ= ĠMutable LiveData < I He arable Status >() ĊĠĠĠ Ġoverride Ġval Ġhe arable Status Ġ= Ġ_ he arable Status ĊĠĠĠ Ġprivate Ġval Ġ_ mqtt Init Status Ġ= ĠMutable LiveData < N ec He arable Mqtt Base >() ĊĠĠĠ Ġoverride Ġval Ġmqtt Init Status Ġ= Ġ_ mqtt Init Status ĊĠĠĠ Ġprivate Ġval Ġ_ bluetooth Le Connected Ġ= ĠMutable LiveData < N ec He arable Simple Base >() ĊĠĠĠ Ġoverride Ġval Ġbluetooth Le Connected Ġ= Ġ_ bluetooth Le Connected ĊĠĠĠ Ġprivate Ġval Ġ_ bluetooth Le Disconnected Ġ= ĠMutable LiveData < N ec He arable Simple Base >() ĊĠĠĠ Ġoverride Ġval Ġbluetooth Le Disconnected Ġ= Ġ_ bluetooth Le Disconnected ĊĠĠĠ Ġprivate Ġval Ġ_ nec W ear er Id Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable W ear er Id Resp Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec W ear er Id Response Ġ= Ġ_ nec W ear er Id Response ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable Sdk Error Ġ= ĠMutable LiveData < N ec He arable Event Base >() ĊĠĠĠ Ġoverride Ġval Ġnec He arable Sdk Error Ġ= Ġ_ nec He arable Sdk Error ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable E ar Feature Measure Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Measure E ar Feat Resp Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec He arable E ar Feature Measure Response Ġ= Ġ_ nec He arable E ar Feature Measure Response ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable E ar Feature Server Send Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Feat Send Resp Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec He arable E ar Feature Server Send Response Ġ= Ġ_ nec He arable E ar Feature Server Send Response ĊĠĠĠ Ġprivate Ġval Ġ_ sensor Data Prep Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Simple Base >>() ĊĠĠĠ Ġoverride Ġval Ġsensor Data Prep Response Ġ= Ġ_ sensor Data Prep Response ĊĠĠĠ Ġprivate Ġval Ġ_ sensor Data Send Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Mqtt Base >>() ĊĠĠĠ Ġoverride Ġval Ġsensor Data Send Response Ġ= Ġ_ sensor Data Send Response ĊĠĠĠ Ġprivate Ġval Ġ_ sensor Data Stop Send Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Mqtt Base >>() ĊĠĠĠ Ġoverride Ġval Ġsensor Data Stop Send Response Ġ= Ġ_ sensor Data Stop Send Response ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable Auth Subscribe Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Auth Subscribe Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec He arable Auth Subscribe Response Ġ= Ġ_ nec He arable Auth Subscribe Response ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable Voice Memo Record Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Voice Memo Record Resp Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec He arable Voice Memo Record Response Ġ= Ġ_ nec He arable Voice Memo Record Response ĊĠĠĠ Ġprivate Ġval Ġ_ nec He arable Voice Memo Upload Response Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Single LiveData Event < N ec He arable Voice Memo Upload Resp Base >>() ĊĠĠĠ Ġoverride Ġval Ġnec He arable Voice Memo Upload Response Ġ= Ġ_ nec He arable Voice Memo Upload Response ĊĊĠĠĠ Ġprivate Ġval Ġweak Ref Context Ġ= ĠWeak Reference ( context ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠI He arable Service ĊĠĠĠ Ġoverride Ġval Ġedge Id Ġ= ĊĠĠĠĠĠĠĠ ĠSettings . Secure . getString ( context . content Resolver , ĠSettings . Secure . ANDROID _ ID ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhe arable Mqtt Request : ĠI He arable Mqtt Request Sender ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproperty : ĠM qtt Server Property ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsensor Manager : ĠI He arable Sensor Manager ĊĠĠĠ Ġ// ĠBluetooth Ġhead set Ġconnection , Ġas Ġper ĠN EC ĠSDK Ġv 1 . 0 . 2 Ġsample Ġapp Ċ // ĠĠĠ Ġprivate Ġval Ġbluetooth Ctrl Ġ= ĠBluetooth Ctrl ( app . application Context ) ĊĊĠĠĠ Ġval Ġhe arable Regist Voice : ĠI He arable Regist Voice Ġ= ĠH ear able Regist Voice () ĊĠĠĠ Ġ// ĠWill Ġhit Ġ" success " Ġcallback Ġeven Ġafter Ġcancellation Ġso Ġneed Ġsome Ġstate Ġtracking Ġto Ġemit Ġcorrect Ġobservable Ġtype ĊĠĠĠ Ġprivate Ġvar Ġis Voice Memo Record Cancelled Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġfiles Dir Ġ= Ġcontext . files Dir . path ĊĠĠĠ Ġprivate Ġvar Ġnec Endpoint : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcert ification : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsecret key : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġhe arable Regist Voice Listener Ġ= Ġobject Ġ: ĠI He arable Voice Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish Regist ( did Suc ceed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" on Finish Regist (): Ġ$ did Suc ceed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( did Suc ceed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Voice Memo Upload Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Voice Memo Upload Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Voice Memo Upload Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Voice Memo Upload Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish Get Voice File ( did Suc ceed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" on Finish Get Voice File (): Ġ$ did Suc ceed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish Get Voice Meta ( response Code : ĠInt , Ġresponse Body : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Finish Get Voice Meta (): Ġresponse Code : Ġcode : Ġ$ response Code , Ġresponse : Ġ$ response Body " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEmp ir ically Ġthis Ġwill Ġbe Ġtriggered ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- Ġwhen Ġlocal Ġrecording Ġsuccessfully Ġcompleted ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- Ġwhen Ġlocal Ġrecording Ġwas Ġcancelled ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish Record () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Voice Memo Record Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Voice Memo Record Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Voice Memo Record Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . i ( TAG , Ġ" on Finish Record (): Ġvoice Ġmemo Ġrecording Ġcancelled !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" onError (): Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ($ errorCode )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Edge Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . set Edge Id ( edge Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . AssertionError ("${ weak Ref Context . get ()?. resources ?. getString ( R . string . error _ edge _ id _ set _ fail )} : Ġset Edge Id (): ĠERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Service ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice Ġ= ĠH ear able Service . start Service ( context ) ĊĠĠĠĠĠĠĠ Ġnec Endpoint Ġ= Ġassets Text File ToString ( context , ĠR . raw . nec _ endpoint ) ĊĠĠĠĠĠĠĠ Ġif Ġ( nec Endpoint Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . AssertionError ( context . resources . getString ( R . string . error _ missing _ nec _ endpoint _ file )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcert ification Ġ= Ġassets File ToString ( context , ĠR . raw . device cert and cac ert crt ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cert ification Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . AssertionError ( context . resources . getString ( R . string . error _ missing _ nec _ cert ification _ file )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsecret key Ġ= Ġassets File ToString ( context , ĠR . raw . device cert key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( secret key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġjava . lang . AssertionError ( context . resources . getString ( R . string . error _ missing _ nec _ secret _ key _ file )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" init : Ġedge ĠID : Ġ| $ edge Id | ") ĊĠĠĠĠĠĠĠ Ġ// ĠOrder Ġcr uc ial , Ġedge ĠID Ġwill Ġthrow Ġif Ġattempt Ġto Ġset Ġafter Ġservice . build Mqtt Publish Sender () ĊĠĠĠĠĠĠĠ Ġset Edge Id () ĊĠĠĠĠĠĠĠ Ġhe arable Mqtt Request Ġ= Ġservice . build Mqtt Publish Sender () ĊĠĠĠĠĠĠĠ Ġsensor Manager Ġ= Ġservice . build Sensor Manager () ĊĠĠĠĠĠĠĠ Ġproperty Ġ= Ġhe arable Mqtt Request . build Entity ( context ) Ġas ĠM qtt Server Property ĊĠĠĠĠĠĠĠ Ġhe arable Regist Voice . regist He arable Voice Listener ( he arable Regist Voice Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Mqtt Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . end Point Ġ= Ġnec Endpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . keystore Path Ġ= Ġfiles Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . set Mqtt Parameter ( property , Ġcert ification , Ġsecret key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis OK Ġ= Ġresponse . status Ġ== ĠN ec He arable SDK Constants . NE C _ HE AR ABLE _ STATUS _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġresponse . recv Str Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ" WARNING : Ġnon - OK Ġstatus Ġ${ response . status }: Ġ| $ msg |" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Mqtt Parameter () :: success : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ mqtt Init Status . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis OK Ġ= Ġis OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġresponse . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode Ġ${ N ec He arable SDK Constants . bluetooth Le ErrorCode s Human Readable Map [ errorCode ]} Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( 0 x ${ Integer . to HexString ( errorCode )}, Ġ$ errorCode ): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ mqtt Init Status . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHave Ġobserved Ġthat Ġ" failed ()" Ġmay Ġbe Ġinvoked Ġwith Ġno Ġapparent Ġrelation Ġto Ġcalling Ġset Mqtt Parameter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Sdk Error . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Sdk Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" set Mqtt Parameter () :: failed : Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ mqtt Init Status . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" set Mqtt Parameter (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset W ear er Id ( we arer Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . set UserId ( we arer Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect B le To Explicit Mac Addr ( mac Addr : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . connect B le ( mac Addr , Ġobject Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ" BLE Ġconnect : ĠWARNING : Ġ\" success \" Ġwith Ġproblem !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" start Send Sensor Data () :: success (): Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Connected . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis OK Ġ= Ġresponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Connected . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" connect B le To Explicit Mac Addr () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Connected . post Value ( N ec He arable Simple Failure ( errorCode Ġ= Ġ- 1 , Ġmsg Ġ= Ġmsg )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" connect B le To Explicit Mac Addr () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOne - stop Ġshopping Ġto Ġrestore Ġs ane Ġvoice Memo Ġrecording Ġconfig , Ġpossibly Ġafter Ġcancellation Ġetc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Voice Memo ( we arer Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset W ear er Id ( we arer Id ) ĊĠĠĠĠĠĠĠ Ġis Voice Memo Record Cancelled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġhe arable Regist Voice . set Voice Send ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvoice Memo Prepare Record ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġwe arer Id : ĠString , ĊĠĠĠĠĠĠĠ Ġauto Stop Duration Secs : ĠDouble , ĊĠĠĠĠĠĠĠ Ġcoroutine Scope : ĠCor outine Scope ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Voice Memo ( we arer Id ) ĊĠĠĠĠĠĠĠ Ġservice . connect S co ( object Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( is OK : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" I He arable Result Listener :: success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" I He arable Result Listener :: success (): Ġstart Ġrecording ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoice Memo Start Recording ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Stop Duration Secs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( TAG , Ġ" I He arable Result Listener :: success (): ĠERROR ! Ġ( connect S co ĠError )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( i : ĠInt , Ġe : ĠException ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvoice Memo Start Recording ( context : ĠContext , Ġauto Stop Duration Secs : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" voice Memo Start Recording () ") ĊĠĠĠĠĠĠĠ Ġval Ġnormalize Recording Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġdo Auto Stop Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġautomatic Record Stop Sil ent Level Ġ= Ġ 5 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġ// ĠNote : Ġif Ġmicro phone Ġpermission Ġnot Ġgranted , Ġthis Ġcall Ġwill Ġcrash Ġe . g . ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġjava . lang . IllegalStateException : Ġstart Recording () Ġcalled Ġon Ġan Ġun initialized ĠAudio Record . ĊĠĠĠĠĠĠĠ Ġvar Ġdid Record OK Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Regist Voice . record Voice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġnormalize Recording , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Auto Stop , Ġautomatic Record Stop Sil ent Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Stop Duration Secs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdid Record OK Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" voice Memo Start Recording (): ĠERROR Ġ(${ e . java Class . simple Name }), Ġpossibly Ġmicro phone Ġpermission Ġnot Ġgranted : Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġemit Ġfailures Ġhere ; Ġsuccessful Ġrecording Ġemits Ġvia Ġcallback Ġlistener Ġelsewhere ĊĠĠĠĠĠĠĠ Ġif Ġ(! did Record OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Voice Memo Record Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Voice Memo Record Fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvoice Memo Stop Recording () Ġ{ ĊĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" voice Memo Stop Recording () ") ĊĠĠĠĠĠĠĠ Ġhe arable Regist Voice . stop Voice () ĊĠĠĠĠĠĠĠ Ġservice . disconnect S co ( object Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( is OK : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" voice Memo Stop Recording (): ĠI He arable Result Listener :: success : ĠSCO ĠDis connected " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( i : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" voice Memo Stop Recording (): ĠI He arable Result Listener :: failed (): ĠERROR Ġ(${ e . java Class . simple Name }): ĠSCO ĠDis connect Ġerror : Ġ$ i , Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvoice Memo Cancel Recording () Ġ{ ĊĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" voice Memo Cancel Recording () ") ĊĠĠĠĠĠĠĠ Ġis Voice Memo Record Cancelled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġhe arable Regist Voice . set Voice Send ( false ) ĊĠĠĠĠĠĠĠ Ġvoice Memo Stop Recording () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest W ear er Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . request W ear er Id ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġresponse . recv Str Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis OK Ġ= Ġresponse . recv Str Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Obj Ġ= ĠN ec He arable W ear er Id Success . fromJson ( response . recv Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec W ear er Id Response . post Value ( Single LiveData Event ( resp Obj Ġas ĠN ec He arable W ear er Id Resp Base )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ: Ġcode : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġ" Unknown Ġerror "} Ġ(${ response . status }) Ġ| $ msg |" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec W ear er Id Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable W ear er Id Fail ( response . status , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" request W ear er Id () :: success : ĠERROR ! Ġstatus : Ġ${ response . status }, Ġrecv Str : Ġ${ response . recv Str }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( statusCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ($ statusCode ): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec W ear er Id Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable W ear er Id Fail ( statusCode , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" request W ear er Id () :: failed : Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec W ear er Id Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable W ear er Id Fail (- 1 , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" request W ear er Id (): Ġ$ msg ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattempt Measure E ar Feature () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Manager . start Feature ( object Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Measure Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Measure E ar Feat Success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( TAG , Ġ" response : Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ( 0 x ${ Integer . to HexString ( errorCode )}, Ġ$ errorCode ): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Measure Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Measure E ar Feat Fail ( false , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" attempt Measure E ar Feature () :: failed (): Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attempt Measure E ar Feature (): ĠERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attempt Measure E ar Feature (): ĠERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAttempt Ġto Ġconvert Ġresponse Ġto Ġsending Ġear Ġ" feature " Ġto Ġserver Ġto Ġappropriate Ġobject Ġtype ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġear Feature Send Response Json Obj ( json : ĠString ): ĠN ec He arable Feat Send Resp Base ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresp Obj : ĠN ec He arable Feat Send Resp Base ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp Obj Ġ= ĠN ec He arable Feat Success Register Incomplete . fromJson ( json ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġcom . squareup . mos hi . Json DataException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp Obj Ġ= ĠN ec He arable Feat Send Error . fromJson ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġcom . squareup . mos hi . Json DataException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp Obj Ġ= ĠN ec He arable Feat Success Register Complete . fromJson ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġcom . squareup . mos hi . Json DataException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start ToSend Feature () :: success : ĠWARNING ! Ġfailed Ġto Ġconvert Ġ| $ json | Ġto Ġobject ! Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresp Obj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠN EC ĠSDK Ġ" magic Ġnumbers " Ġgiven Ġmeaningful Ġnames ĊĠĠĠ Ġprivate Ġval ĠE AR _ FEATURE _ TYPE _ EAR PI E CE _ INSERT ED _ IN _ EAR Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠE AR _ FEATURE _ TYPE _ EAR PI E CE _ NOT _ INSERT ED _ NOT _ BLOCK ED Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠE AR _ FEATURE _ TYPE _ EAR PI E CE _ NOT _ INSERT ED _ BLOCK ED _ WITH _ F ING ER Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval ĠE AR _ FEATURE _ TYPE Ġ= ĠE AR _ FEATURE _ TYPE _ EAR PI E CE _ INSERT ED _ IN _ EAR ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAnswer Ġfrom ĠN EC Ġ 1 6 ĠDec Ġ 2 0 1 9 : ĊĠĠĠĠ Ġ* ĠĠĠĠ ĠWait Ġuntil Ġattempt Measure E ar Feature () Ġrespon ds , Ġand Ġthen Ġcall Ġattempt Send E ar Feature ToServer () ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġattempt Send E ar Feature ToServer () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . start ToSend Feature ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE AR _ FEATURE _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start ToSend Feature () :: success : Ġstatus : Ġ${ response . status }, Ġrecv Str : Ġ${ response . recv Str }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis OK Ġ= Ġresponse . recv Str Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġear Feature Send Response Json Obj ( response . recv Str )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Server Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" WARNING : Ġstatus : Ġ${ response . status }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Server Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Feat Send Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġresponse . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start ToSend Feature () :: success : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( statusCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ( 0 x ${ Integer . to HexString ( statusCode )}, Ġ$ statusCode ): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Server Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Feat Send Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠstatusCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" start ToSend Feature () :: failed : Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Server Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Feat Send Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start ToSend Feature (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable E ar Feature Server Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Feat Send Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start ToSend Feature (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNote : Ġthis Ġis Ġexpected Ġto Ġusually Ġfail Ġdue Ġto Ġ" He arable Ġbusy " Ġerror ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdisconnect B le () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . disconnect B le ( object Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( is OK : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ" BLE Ġdisconnect : ĠWARNING : Ġ\" success \" Ġwith Ġproblem !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" disconnect B le () :: success (): Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Disconnected . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis OK Ġ= Ġis OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ($ errorCode ) Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Disconnected . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" disconnect B le () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ bluetooth Le Disconnected . post Value ( N ec He arable Simple Failure ( errorCode Ġ= Ġ- 1 , Ġmsg Ġ= Ġmsg )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" disconnect B le () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstatus Listener : ĠI He arable Status Listener Ġ= ĊĠĠĠĠĠĠĠ ĠI He arable Status Listener Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ he arable Status . post Value ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status Listener : Ġget B le Connect Device Name :" Ġ+ Ġstatus . ble Connect Device Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status Listener : Ġis Bluetooth LE Connected :" Ġ+ Ġstatus . is Bluetooth LE Connected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregist He arable Status Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġ" regist He arable Status Listener ()" ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . regist He arable Status Listener ( status Listener ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ"$ tag : ĠERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Notify Current Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . request Notify Current Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . stop Service () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunregister He arable Status Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġ" unregister He arable Status Listener ()" ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . un regist He arable Status Listener ( status Listener ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ"$ tag : ĠERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠE mf Position ĊĠĠĠ Ġoverride Ġfun Ġcancel Subscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . cancel Subscribe () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠL AMBDA _ FUNCTION _ NAME Ġ= Ġ" he arable - register - user - lm " ĊĠĠĠ Ġprivate Ġval ĠAUTH _ SUB SCR IBE _ Q OS Ġ= Ġ 0 ĊĠĠĠ Ġ// ĠConference Ġcall Ġw / NE C , Ġ 2 2 ĠJan Ġ 2 0 2 0 : Ġincrease Ġ" result Num " Ġparameter Ġto Ġattempt Ġto Ġreduce Ġtimeouts ĊĠĠĠ Ġ// Ġon Ġrepeated Ġauthentication Ġattempts Ġ( as Ġis Ġoften Ġthe Ġcase Ġduring Ġint ense Ġdevelopment ) ĊĠĠĠ Ġprivate Ġval ĠAUTH ENT IC ST ION _ RESULT _ NUM Ġ= Ġ 2 0 ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Auth ( we arer Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( we arer Id . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" request Auth (): ĠNOTICE : Ġvalid Ġwe arer ĠID Ġpre condition Ġfor Ġrequest Auth () Ġ( currently Ġempty ! )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtopic List Ġ= ĠarrayOf (" he arable pf / authentication /$ edge Id / res ") ĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" {" FunctionName ":" $ L AMBDA _ FUNCTION _ NAME " Ġ, Ġ" Payload ":{" we arer Id ":" $ we arer Id "," topic ":" he arable pf \/ authentication \/ $ edge Id \/ res "}} """ ĊĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . request Subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic List , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAUTH _ SUB SCR IBE _ Q OS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( i He arable Mqtt Response Entity : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġi He arable Mqtt Response Entity . recv Str ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Obj : ĠN ec He arable Auth Subscribe Success ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Auth Subscribe Success . fromJson ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Auth Subscribe Response . post Value ( Single LiveData Event ( json Obj Ġas ĠN ec He arable Auth Subscribe Base )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . d ( TAG , Ġ" request Auth () :: success : Ġjson Obj : Ġ| ${ json Obj . result }| ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . cancel Subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ( 0 x ${ Integer . to HexString ( errorCode )}, Ġ$ errorCode ), Ġmsg : Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . e ( TAG , Ġ" request Auth () :: failed : Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Obj Ġ= ĠN ec He arable Auth Subscribe Fail ( errorCode , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ nec He arable Auth Subscribe Response . post Value ( Single LiveData Event ( json Obj Ġas ĠN ec He arable Auth Subscribe Base )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . cancel Subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . request Auth ( param , ĠAUTH ENT IC ST ION _ RESULT _ NUM ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ kotlin x . coroutines . Internal Cor outines Api ĊĠĠĠ Ġ@ kotlin x . coroutines . Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġregister E ar Timeout Flow (): ĠC old Flow W Timeout Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC old Flow W Timeout ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable SDK Constants . request Auth Timeout Secs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" register E ar Timeout Flow ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ}) ĊĠĠĠĠĠĠĠ Ġ{ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ kotlin x . coroutines . Internal Cor outines Api ĊĠĠĠ Ġ@ kotlin x . coroutines . Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġrequest Auth Flow ( we arer Id : ĠString ): ĠC old Flow W Timeout Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠC old Flow W Timeout ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable SDK Constants . request Auth Timeout Secs , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" request Auth Flow ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġrequest Auth ( we arer Id ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ{ Ġhe arable Mqtt Request . cancel Subscribe () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠS ENSOR _ DATA _ SEND _ INTERVAL _ MILLI SEC Ġ= Ġ 2 0 Ġ* Ġ 1 0 0 0 L ĊĠĠĠ Ġprivate Ġval ĠS ENSOR _ DATA _ SEND _ IN DIRECT Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġstart Send Sensor Data ToServer () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . start ToSend Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ENSOR _ DATA _ SEND _ INTERVAL _ MILLI SEC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ENSOR _ DATA _ SEND _ IN DIRECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġresponse . recv Str Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis OK Ġ= Ġresponse . status Ġ== ĠN ec He arable SDK Constants . NE C _ HE AR ABLE _ STATUS _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġsuccess Ġresponse Ġw / error ! Ġstatus : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ(${ response . status }) Ġ| $ msg |" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Send Sensor Data ToServer () :: success (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis OK Ġ= Ġis OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġresponse . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode Ġ${ N ec He arable SDK Constants . bluetooth Le ErrorCode s Human Readable Map [ errorCode ]} Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( 0 x ${ Integer . to HexString ( errorCode )}, Ġ$ errorCode ), Ġmsg Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Send Sensor Data ToServer () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġmsg ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġmsg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Send Sensor Data ( do Send N ine Axis Sensor : ĠBoolean , Ġdo Send Temp Sensor : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Types : ĠMutable List < Int > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġif Ġ( do Send N ine Axis Sensor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Types . add ( He arable Sensor Manager . DATA _ TYPE _ N INE _ AXIS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( do Send Temp Sensor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Types . add ( He arable Sensor Manager . DATA _ TYPE _ TEMP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( data Types . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Manager . start Sensor ( object Ġ: ĠI He arable Result Listener < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( did Suc ceed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( did Suc ceed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Prep Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Success ( is OK Ġ= Ġtrue , Ġmsg Ġ= Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Send Sensor Data ToServer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" WARNING : Ġsensor Ġprep Ġfailure !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Prep Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Success ( is OK Ġ= Ġfalse , Ġmsg Ġ= Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" start Send Sensor Data () :: success (): Ġ$ msg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ($ errorCode ): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Prep Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Failure ( errorCode Ġ= ĠerrorCode , Ġmsg Ġ= Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Send Sensor Data () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġdata Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Prep Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Send Sensor Data (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" WARNING : Ġno Ġsensor Ġdata Ġspecified , Ġnothing Ġto Ġsend !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Prep Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Simple Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ ep Log . i ( TAG , Ġ" start Send Sensor Data (): Ġ$ msg ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Send Sensor Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhe arable Mqtt Request . stop ToSend Data ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI He arable Result Listener < I He arable Mqtt Response Entity > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( response : ĠI He arable Mqtt Response Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġresponse . recv Str Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis OK Ġ= Ġresponse . status Ġ== ĠN ec He arable SDK Constants . NE C _ HE AR ABLE _ STATUS _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" WARNING : Ġsuccess Ġresponse Ġw / error ! Ġstatus : Ġ${ N ec He arable SDK Constants . nec He arable SDK ErrorCode s Human Readable Map . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ(${ response . status }) Ġ| $ msg |" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stop Send Sensor Data () :: success (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Stop Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis OK Ġ= Ġis OK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġresponse . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailed ( errorCode : ĠInt , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġcode Ġ${ N ec He arable SDK Constants . bluetooth Le ErrorCode s Human Readable Map [ errorCode ]} Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( 0 x ${ Integer . to HexString ( errorCode )}, Ġ$ errorCode ), Ġmsg Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Stop Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stop Send Sensor Data () :: failed : Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR Ġ(${ e . java Class . simple Name }): Ġ${ e . localized Message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sensor Data Stop Send Response . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle LiveData Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ec He arable Mqtt Fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stop Send Sensor Data (): Ġ$ msg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassets Text File ToString ( context : ĠContext , Ġfile : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġcontext . resources . open Raw Resource ( file ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader ( ins )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġreader . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( line . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġreader . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ie : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" assets File ToString (): ĠERROR : Ġ$ file Ġ: ĠRead ĠError ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassets File ToString ( context : ĠContext , Ġfile : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġins Ġ= Ġcontext . resources . open Raw Resource ( file ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuff Ġ= ĠByteArray ( 4 Ġ* Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Size : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Size Ġ= Ġins . read ( buff ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" assets File ToString (): Ġfile Ġread Ġlength :$ read Size " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString ( buff ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ie : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( TAG , Ġ" assets File ToString (): ĠERROR : Ġ$ file Ġ: ĠRead ĠError ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠN ec He arable Sdk Wrapper :: class . java . simple Name ĊĊĠĠĠĠĠĠĠ Ġ// ĠFrom ĠN EC Ġ 1 7 ĠDec Ġ 2 0 1 9 : Ġ" Qo S Ġis ĠMQTT ĠQ oS . Ġ 0 Ġor Ġ 1 Ġcan Ġbe Ġset . ĠUse Ġ 0 Ġfor Ġthis Ġproject " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMQTT _ Q OS Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠFrom ĠN EC Ġ 1 7 ĠDec Ġ 2 0 1 9 : Ġ" AUTH _ RESULTS _ NUMBER Ġis Ġthe Ġnumber Ġof Ġwe arer Id Ġand Ġscore Ġcombinations . ĊĠĠĠĠĠĠĠ Ġ// ĠReturns Ġthe Ġspecified Ġnumber Ġand Ġcombination Ġin Ġdescending Ġorder Ġof Ġscore ." ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTH _ RESULTS _ NUMBER Ġ= Ġ 3 ĊĠĠĠ Ġ} Ċ } Ċ