package Ġnl . soft able . ble u wp example . bt Ċ Ċ import Ġandroid . bluetooth .* Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . github . j park ie . promise . Promise Ċ import Ġcom . github . j park ie . promise . Promises Ċ import Ġnl . soft able . ble u wp example . Constants Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . thread ĊĊ Ċ class ĠExample Character istics ( ĊĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠ Ġadapter : ĠBluetooth Adapter , ĊĠ Ġval Ġservice UUID : ĠString , ĊĠ Ġdevice Address : ĠString Ċ ) Ċ { ĊĠ Ġval Ġdev : ĠBluetooth Device Ġ= Ġadapter . get Remote Device ( device Address ) ĊĊĠ Ġprivate Ġinner Ġclass ĠExample Character istics Writer Worker ( val Ġcharacteristics : ĠList < Example Write Characteristic >) ĊĠ Ġ{ ĊĠĠĠ Ġvar Ġg att : ĠBluetooth Gatt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġservice : ĠBluetooth Gatt Service ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġqueue Ġ= ĠArray Deque < Example Write Characteristic >() ĊĠĠĠ Ġval Ġpromise Ġ= ĠPromise s . promise < Boolean >() ĊĊĠĠĠ Ġfun Ġstart () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġqueue Ġ= ĠArray Deque < Example Write Characteristic >( character istics ) ĊĊĠĠĠĠĠ Ġg att Ġ= Ġdev . connect Gatt ( context , Ġfalse , Ġbluetooth Gatt Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbluetooth Gatt Callback Ġ= Ġobject Ġ: ĠBluetooth Gatt Callback () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Connection StateChange ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt , ĠnewState : ĠInt ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBluetooth Profile . STATE _ CONNECTED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . d ( Constants . TAG , Ġ" successfully Ġconnected Ġto Ġthe ĠG ATT ĠServer ") ĊĠĠĠĠĠĠĠĠĠ Ġg att ?. discover Services () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( newState Ġ== ĠBluetooth Profile . STATE _ DIS CONNECTED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . d ( Constants . TAG , Ġ" disconnected Ġfrom Ġthe ĠG ATT ĠServer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Services Dis covered ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġservice Ġ= Ġg att ?. getService ( UUID . fromString ( service UUID )) ĊĠĠĠĠĠĠĠ Ġde queue Next Characteristic Write () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Write ( ĊĠĠĠĠĠĠĠ Ġg att : ĠBluetooth Gatt ?, Ġcharacteristic : ĠBluetooth GattCharacteristic ?, Ġstatus : ĠInt ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Characteristic Write ( g att , Ġcharacteristic , Ġstatus ) ĊĠĠĠĠĠĠĠ Ġde queue Next Characteristic Write () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġfun Ġde queue Next Characteristic Write () ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( queue . size Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpromise ?. set ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġg att ?. disconnect () ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= Ġqueue . pop () ĊĠĠĠĠĠĠĠ Ġvar Ġwaar de uuid Ġ= ĠUUID . fromString ( item . uuid ) ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġservice ?. get Characteristic ( wa ar de uuid ) ĊĠĠĠĠĠĠĠ Ġvalue ?. setValue ( item . value , Ġitem . format , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġg att ?. write Characteristic ( value ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġinner Ġclass ĠExample Character istics Reader Worker ( val Ġcharacteristics : ĠList < Example Read Characteristic >) ĊĠ Ġ{ ĊĠĠĠ Ġvar Ġg att : ĠBluetooth Gatt ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġservice : ĠBluetooth Gatt Service ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġqueue Ġ= ĠArray Deque < Example Read Characteristic >() ĊĠĠĠ Ġval Ġpromise Ġ= ĠPromise s . promise < Boolean >() ĊĊĠĠĠ Ġfun Ġstart () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġqueue Ġ= ĠArray Deque < Example Read Characteristic >( character istics ) ĊĊĠĠĠĠĠ Ġg att Ġ= Ġdev . connect Gatt ( context , Ġfalse , Ġbluetooth Gatt Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbluetooth Gatt Callback Ġ= Ġobject Ġ: ĠBluetooth Gatt Callback () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Connection StateChange ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt , ĠnewState : ĠInt ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBluetooth Profile . STATE _ CONNECTED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . d ( Constants . TAG , Ġ" successfully Ġconnected Ġto Ġthe ĠG ATT ĠServer ") ĊĠĠĠĠĠĠĠĠĠ Ġg att ?. discover Services () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( newState Ġ== ĠBluetooth Profile . STATE _ DIS CONNECTED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLog . d ( Constants . TAG , Ġ" disconnected Ġfrom Ġthe ĠG ATT ĠServer ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Services Dis covered ( g att : ĠBluetooth Gatt ?, Ġstatus : ĠInt ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġservice Ġ= Ġg att ?. getService ( UUID . fromString ( service UUID )) ĊĠĠĠĠĠĠĠ Ġde queue Next Characteristic Read () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġvar Ġcurrent : ĠExample Read Characteristic ? Ġ= Ġnull ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Read ( ĊĠĠĠĠĠĠĠ Ġg att : ĠBluetooth Gatt ?, Ġcharacteristic : ĠBluetooth GattCharacteristic ?, Ġstatus : ĠInt ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġvalue ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcharacteristic ?. getInt Value ( current !!. format , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcurrent ?. result Ġ= Ġresult ĊĊĠĠĠĠĠĠĠ Ġsuper . on Characteristic Read ( g att , Ġcharacteristic , Ġstatus ) ĊĠĠĠĠĠĠĠ Ġde queue Next Characteristic Read () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġfun Ġde queue Next Characteristic Read () ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( queue . size Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpromise ?. set ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġg att ?. disconnect () ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= Ġqueue . pop () ĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġvar Ġwaar de uuid Ġ= ĠUUID . fromString ( item . uuid ) ĊĠĠĠĠĠĠĠ Ġvar Ġwaar de Ġ= Ġservice ?. get Characteristic ( wa ar de uuid ) ĊĠĠĠĠĠĠĠ Ġg att ?. read Characteristic ( wa ar de ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġwrite ( character istics : ĠList < Example Write Characteristic >): ĠPromise < Boolean > ĊĠ Ġ{ ĊĠĠĠ Ġvar Ġexec uter Ġ= ĠExample Character istics Writer Worker ( character istics ) ĊĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠ Ġexec uter . start () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġexec uter . promise ĊĠ Ġ} ĊĊĠ Ġfun Ġread ( character istics : ĠList < Example Read Characteristic >): ĠPromise < Boolean > ĊĠ Ġ{ ĊĠĠĠ Ġvar Ġexec uter Ġ= ĠExample Character istics Reader Worker ( character istics ) ĊĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠ Ġexec uter . start () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġexec uter . promise ĊĠ Ġ} Ċ Ċ } Ċ Ċ class ĠExample Write Characteristic ( val Ġuuid : ĠString , Ġval Ġformat : ĠInt , Ġval Ġvalue : ĠInt ) Ċ class ĠExample Read Characteristic ( val Ġuuid : ĠString , Ġval Ġformat : ĠInt ) Ċ { ĊĠ Ġvar Ġresult : ĠInt ? Ġ= Ġnull Ċ } Ċ