package Ġme . yc dev . android . bluetooth . ble . sig Ċ Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġandroid . bluetooth . Bluetooth Gatt Service Ċ import Ġandroid . bluetooth . le . Ad vertise Data Ċ import Ġandroid . bluetooth . le . Ad vertise Settings Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Parcel Uuid Ċ import Ġkotlin . random . Random Ċ import Ġme . yc dev . android . bluetooth . ble . server . B le Gatt Server Base Ċ import Ġtim ber . log . Tim ber Ċ Ċ open Ġclass ĠB attery ServiceServer ( context : ĠContext ) Ġ: ĠB le Gatt Server Base ( ĊĠĠĠ ĠTAG , Ġcontext ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdefault Battery Service : ĠBluetooth Gatt Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbox Battery Service : ĠBluetooth Gatt Service ĊĊĠĠĠ Ġprivate Ġval Ġrandom Ġ= ĠRandom ( System . currentTimeMillis ()) ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Ad vertise Settings (): ĠAd vertise Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAd vertise Settings . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ad vertise Mode ( Ad vertise Settings . AD VER TI SE _ MODE _ BAL ANCED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Connect able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTimeout ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Tx Power Level ( Ad vertise Settings . AD VER TI SE _ TX _ POWER _ MEDIUM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Ad vertise Data (): ĠAd vertise Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAd vertise Data . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Include Device Name ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Include Tx Power Level ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Service Uuid ( Parcel Uuid ( Battery Service Profile . B ATTER Y _ SERVICE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate B le Services (): ĠList < Bluetooth Gatt Service > Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Battery Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB attery Service Profile . create Battery Service () ĊĠĠĠĠĠĠĠ Ġbox Battery Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB attery Service Profile . create Battery Service () ĊĠĠĠĠĠĠĠ Ġreturn Ġarray ListOf ( default Battery Service , Ġbox Battery Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Characteristic Read Request ( character istic : ĠBluetooth GattCharacteristic ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Id Ġ= Ġcharacteristic . service . instanceId ĊĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġwhen Ġ( instanceId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Battery Service . instanceId Ġ-> Ġ( 1 Ġ+ Ġrandom . nextInt ( 4 9 )) Ġ* Ġ 2 Ġ// Ġ 2 , 4 , .. , 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbox Battery Service . instanceId Ġ-> Ġ( 1 Ġ+ Ġrandom . nextInt ( 4 9 )) Ġ* Ġ 2 Ġ- Ġ 1 Ġ// Ġ 1 , 3 , .. , 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). e (" Unknown Ġinstance ĠID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" On Ġread Ġrequest , Ġbattery Ġlevel Ġ[% d ] Ġservice InstanceId [% d ] Ġcharacteristic InstanceId [% d ]", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel , Ġinstance Id , Ġcharacteristic . instanceId ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbyte ArrayOf ( level . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Battery ServiceServer " ĊĠĠĠ Ġ} Ċ } Ċ