package Ġcom . al gor igo . pressure go Ċ Ċ import Ġandroid . bluetooth .* Ċ import Ġandroid . bluetooth . le . Scan Filter Ċ import Ġandroid . bluetooth . le . Scan Settings Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . Raw Res Ċ import Ġkotlinx . coroutines .* Ċ import Ġno . n ord ic semi . android . df u . D fu Base Service Ċ import Ġjava . util .* Ċ Ċ class ĠPD MS Device ( val Ġbluetooth Device : ĠBluetooth Device , Ġval Ġcallback : ĠCallback ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon StateChanged ( device : ĠPD MS Device ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġinterface ĠData Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Data ( int Array : ĠInt Array ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsealed Ġclass ĠD fu Result Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠCompleted Ġ: ĠD fu Result () ĊĠĠĠĠĠĠĠ Ġobject ĠAbort ed Ġ: ĠD fu Result () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġerror : ĠException ) Ġ: ĠD fu Result () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbluetooth Gatt : ĠBluetooth Gatt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcharacteristic Map Ġ= Ġmutable Map Of < UUID , ĠLock Getter < ByteArray >>() ĊĠĠĠ Ġprivate Ġvar Ġcommunication Map Ġ= Ġmutable Map Of < Byte , ĠLock Getter < ByteArray >>() ĊĠĠĠ Ġprivate Ġvar Ġdata Callbacks Ġ= Ġmutable ListOf < Data Callback >() ĊĊĠĠĠ Ġprivate Ġval Ġg att Callback Ġ= Ġobject Ġ: ĠBluetooth Gatt Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection StateChange ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Connection StateChange ( g att , Ġstatus , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Connection StateChange :$ g att :$ newState ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth Profile . STATE _ CONNECTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Gatt Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . discover Services () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth Profile . STATE _ DIS CONNECTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Gatt Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on StateChanged ( this @ PD MS Device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Services Dis covered ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Services Dis covered :${ g att ?. services ?. map Ġ{ Ġit . uuid . toString () Ġ} ?. to Typed Array ()?. content ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Services Dis covered ( g att , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on StateChanged ( this @ PD MS Device ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att ?. getService ( UUID . fromString ( PD MS Util . UUID _ SERVICE _ DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( UUID . fromString ( PD MS Util . UUID _ DATA _ NOTIFICATION )) ?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . set Characteristic Notification ( character istic , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġcharacteristic . get Descriptor ( UUID . fromString ( PD MS Util . UUID _ DATA _ DESCRIPTOR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . value Ġ= ĠBluetooth Gatt Descriptor . ENABLE _ NOTIFICATION _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . write Descriptor ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Read ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att : ĠBluetooth Gatt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic : ĠBluetooth GattCharacteristic ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Characteristic Read :${ character istic ?. uuid }, Ġ${ character istic ?. value ?. content ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Characteristic Read ( g att , Ġcharacteristic , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic ?. uuid ?. let Ġ{ Ġcharacteristic Map . remove ( it ) Ġ} ?. setValue ( character istic . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Descriptor Write ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att : ĠBluetooth Gatt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠBluetooth Gatt Descriptor ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Descriptor Write :${ descriptor ?. uuid }, Ġ${ descriptor ?. value ?. content ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Descriptor Write ( g att , Ġdescriptor , Ġstatus ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att : ĠBluetooth Gatt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic : ĠBluetooth GattCharacteristic ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" on Characteristic Read :${ character istic ?. uuid }, Ġ${ character istic ?. value ?. content ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Characteristic Changed ( g att , Ġcharacteristic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( character istic ?. value ?. get ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 2 . to Byte () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommunication Map . remove ( character istic . value [ 1 ]) ?. setValue ( character istic . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 . to Byte () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠintArray Ġ= ĠInt Array ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Lower Ġ= Ġcharacteristic . value [ it * 2 + 2 ]. toInt () Ġand Ġ 0 xff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Upper Ġ= Ġcharacteristic . value [ it * 2 + 3 ]. toInt () Ġand Ġ 0 xff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( a Upper Ġshl Ġ 8 ) Ġ+ Ġa Lower ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Callbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Data ( int Array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ"", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbluetooth Device . name Ġ?: Ġ"" ĊĊĠĠĠ Ġval Ġaddress : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbluetooth Device . address ĊĊĠĠĠ Ġval Ġconnected : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbluetooth Gatt Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġconnect ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Device . connect Gatt ( context , Ġfalse , Ġg att Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. disconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Device Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ DEVICE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ GENERIC _ ACCESS _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Map [ uuid ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . read Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Manufacturer Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ MAN U FACT UR ER _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ DEVICE _ INFO _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Map [ uuid ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . read Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Hardware Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ HARD WARE _ REVISION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ DEVICE _ INFO _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Map [ uuid ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . read Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Firmware Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ FIRM WARE _ REVISION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ DEVICE _ INFO _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Map [ uuid ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . read Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Battery (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ B ATTER Y _ LEVEL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ B ATTER Y _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Map [ uuid ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . read Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠbyteArray [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsend Get Message ( code : ĠPD MS Util . Message Get Code ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ COMM UN ICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ SERVICE _ DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommunication Map [ code . byte ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic . value Ġ= Ġcode . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . write Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠbyteArray [ 2 ]. to UInt (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsend Set Message ( code : ĠPD MS Util . Message Set Code , Ġvalue : ĠByte ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. let Ġ{ Ġg att Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . fromString ( PD MS Util . UUID _ COMM UN ICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg att . getService ( UUID . fromString ( PD MS Util . UUID _ SERVICE _ DATA )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Characteristic ( uuid )?. let Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLock Getter < ByteArray >(). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommunication Map [ code . byte ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic . value Ġ= Ġcode . getMessage ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg att . write Characteristic ( character istic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠbyteArray [ 2 ]. to UInt (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetS ensing Interval Millis (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPD MS Util . interval Value To Millis ( getS ensing Interval ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠgetS ensing Interval (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Get Code . CODE _ SENSOR _ SCAN _ INTERVAL ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Get Message ( code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġset Sensor Scan Interval Millis (@ Int Range ( from Ġ= ĠPD MS Util . interval Millis Min , Ġto Ġ= ĠPD MS Util . interval Millis Max ) Ġinterval Millis : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterval Value Ġ= ĠPD MS Util . interval Millis To Value ( interval Millis ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPD MS Util . interval Value To Millis ( set Sensor Scan Interval ( interval Value )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġset Sensor Scan Interval (@ Int Range ( from Ġ= Ġ 1 , Ġto Ġ= Ġ 2 5 5 ) Ġinterval Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Set Code . CODE _ SENSOR _ SCAN _ INTERVAL ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Set Message ( code , Ġinterval Value . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget A mpl ification (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Get Code . CODE _ AMP LI F ICATION ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Get Message ( code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġset A mpl ification (@ Int Range ( from Ġ= Ġ 1 , Ġto Ġ= Ġ 2 5 5 ) Ġamp : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Set Code . CODE _ AMP LI F ICATION ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Set Message ( code , Ġamp . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Sensitivity (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Get Code . CODE _ S ENS IT IVITY ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Get Message ( code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġset Sensitivity (@ Int Range ( from Ġ= Ġ 1 , Ġto Ġ= Ġ 2 5 5 ) Ġsens : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠPD MS Util . Message Set Code . CODE _ S ENS IT IVITY ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Set Message ( code , Ġsens . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Data Callback ( data Callback : ĠData Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Callbacks . add ( data Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister Data Callback ( data Callback : ĠData Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Callbacks . remove ( data Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcheck Update Exist (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirmware Version Ġ= Ġget Firmware Version () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠPD MS Util . firmware List () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPD MS Util . latest Firmware ( it )?. let Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pair . first . lowercase ( Locale . getDefault ()) Ġ> Ġfirmware Version . lowercase ( Locale . getDefault ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠD fu Base Service > Ġupdate ( context : ĠContext , Ġclazz : ĠClass < T >, Ġuri : ĠUri , Ġcallback : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. device ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD fu Adapter ( context , Ġit . address , Ġit . name , Ġuri ) ĊĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( clazz , Ġit , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠD fu Base Service > Ġupdate ( context : ĠContext , Ġclazz : ĠClass < T >, Ġpath : ĠString , Ġcallback : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. device ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD fu Adapter ( context , Ġit . address , Ġit . name , Ġpath ) ĊĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( clazz , Ġit , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠD fu Base Service > Ġupdate ( context : ĠContext , Ġclazz : ĠClass < T >, Ġ@ Raw Res Ġres Raw Id : ĠInt , Ġcallback : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. device ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD fu Adapter ( context , Ġit . address , Ġit . name , Ġres Raw Id ) ĊĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( clazz , Ġit , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T Ġ: ĠD fu Base Service > Ġupdate ( clazz : ĠClass < T >, Ġadapter : ĠD fu Adapter , Ġcallback : Ġ(( Int ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! connected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Disconnected ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlock Getter Ġ= ĠLock Getter < D fu Result >() ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠD fu Adapter . Callback ( adapter . address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress ( percent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( percent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Getter . setValue ( D fu Result . Completed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Abort ed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Getter . setValue ( D fu Result . Abort ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock Getter . setValue ( D fu Result . Error ( error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . start ( clazz , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġlock Getter . getValue ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD fu Result . Completed Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD fu Result . Abort ed Ġ-> Ġthrow ĠIllegalStateException (" Abort ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD fu Result . Error Ġ-> Ġthrow ĠIllegalStateException (" Error ", Ġresult . error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG _ TAG Ġ= ĠPD MS Device :: class . java . simple Name ĊĊĠĠĠĠĠĠĠ Ġval Ġscan Filters : ĠList < Scan Filter > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScan Filter . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Device Name ( PD MS Util . BLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscan Settings : ĠScan Settings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠScan Settings . Builder (). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }