package Ġai . k un . op entr aces dk _ fat . alarm Ċ Ċ import Ġai . k un . op entr aces dk _ fat . BLE Trace Ċ import Ġai . k un . op entr aces dk _ fat . dao . Device Ċ import Ġai . k un . op entr aces dk _ fat . util . Constants Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . bluetooth . le . Scan Callback Ċ import Ġandroid . bluetooth . le . Scan Record Ċ import Ġandroid . bluetooth . le . Scan Result Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Parcel Uuid Ċ import Ġandroid . util . Log Ċ Ċ object ĠB tle Scan Callback : ĠScan Callback () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" B tle Scan Callback " ĊĠĠĠ Ġval Ġm Scan Results Ġ= ĠHashMap < String , ĠDevice >() ĊĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĊĠĠĠ Ġoverride Ġfun Ġon Scan Result ( ĊĠĠĠĠĠĠĠ Ġcallback Type : ĠInt , ĊĠĠĠĠĠĠĠ Ġresult : ĠScan Result ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Scan Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Batch Scan Results ( results : ĠList < Scan Result >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġresults ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Scan Result ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Scan Failed ( errorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" BLE ĠScan ĠFailed Ġwith Ġcode Ġ$ errorCode ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Scan Result ( result : ĠScan Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Address Ġ= Ġresult . device . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuuid : ĠParcel Uuid ? Ġ= Ġresult . scan Record ?. service Uuid s ?. get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Android Ġ= Ġ( uuid . toString (). startsWith ( Constants . ANDROID _ PREFIX )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġrecord Ġdevices Ġwhere Ġthe ĠUUID Ġis Ġone Ġfrom Ġour Ġapp ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Android Ġ|| Ġuuid . toString (). startsWith ( Constants . IOS _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr ssi : ĠInt Ġ= Ġresult . rssi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtx Power : ĠInt Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . tx Power ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtime Stamp Nan os : ĠLong Ġ= Ġresult . timestamp Nan os ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Stamp : ĠLong Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠsessionId Ġ= Ġdevice Address ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Device Ġ= ĠDevice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ssi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx Power , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Stamp Nan os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Stamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsessionId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Trace . is Team Member ( uuid . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Android ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġa Ġrolling Ġaverage ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Scan Results . containsKey ( device Address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Device . rssi Ġ= Ġ( new Device . rssi Ġ+ Ġm Scan Results [ device Address ] !!. rssi ). div ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Device . tx Power Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( new Device . tx Power Ġ+ Ġm Scan Results [ device Address ] !!. tx Power ). div ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Scan Results [ device Address ] Ġ= Ġnew Device ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }