package Ġorg . fire zen k . golden ble et le . system Ċ Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġandroid . bluetooth . Bluetooth Gatt Service Ċ import Ġandroid . content .* Ċ import Ġandroid . os . IB inder Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġorg . fire zen k . golden ble et le . system . Bluetooth LE Service . Companion . ACTION _ DATA _ AVAILABLE Ċ import Ġorg . fire zen k . golden ble et le . system . Bluetooth LE Service . Companion . ACTION _ G ATT _ CONNECTED Ċ import Ġorg . fire zen k . golden ble et le . system . Bluetooth LE Service . Companion . ACTION _ G ATT _ DIS CONNECTED Ċ import Ġorg . fire zen k . golden ble et le . system . Bluetooth LE Service . Companion . ACTION _ G ATT _ SERVICES _ DIS COVER ED Ċ import Ġorg . fire zen k . golden ble et le . system . Bluetooth LE Service . Companion . EXTRA _ DATA Ċ import Ġjava . util .* Ċ Ċ class ĠBluetooth Connection ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBL UN O _ BE ET LE _ 1 _ ID Ġ= Ġ" DF ĠBL UN O " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSerial Port UUID Ġ= Ġ" 0 0 0 0 dfb 1 - 0 0 0 0 - 1 0 0 0 - 8 0 0 0 - 0 0 8 0 5 f 9 b 3 4 fb " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCommand UUID Ġ= Ġ" 0 0 0 0 dfb 2 - 0 0 0 0 - 1 0 0 0 - 8 0 0 0 - 0 0 8 0 5 f 9 b 3 4 fb " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠModel Number String UUID Ġ= Ġ" 0 0 0 0 2 a 2 4 - 0 0 0 0 - 1 0 0 0 - 8 0 0 0 - 0 0 8 0 5 f 9 b 3 4 fb " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbluetooth LE Service : ĠBluetooth LE Service ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġs Characteristic : ĠBluetooth GattCharacteristic ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmodel Number Characteristic : ĠBluetooth GattCharacteristic ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġserial Port Characteristic : ĠBluetooth GattCharacteristic ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcommand Characteristic : ĠBluetooth GattCharacteristic ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġconnection Observer : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġg att Update Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ G ATT _ CONNECTED Ġ-> Ġ{ Ġconnection Observer ?. invoke (" CONNECTED ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ G ATT _ DIS CONNECTED Ġ-> Ġ{ Ġconnection Observer ?. invoke (" DIS CONNECTED ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ G ATT _ SERVICES _ DIS COVER ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Gatt Services ( bluetooth LE Service ?. get Supported Services ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DATA _ AVAILABLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent . getString Extra ( EXTRA _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Characteristic Ġ== Ġmodel Number Characteristic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġdata ?. toUpperCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġnull Ġ&& Ġname . startsWith ( BL UN O _ BE ET LE _ 1 _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Device () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( s Characteristic ?. uuid Ġ== Ġserial Port Characteristic ?. uuid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠTHIS ĠIS ĠTHE ĠDATA ĠST REAM ĠFROM ĠDEVICE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmake Connection ( bluetooth Device : ĠBluetooth Device , Ġconnection Observer : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . connection Observer Ġ= Ġconnection Observer ĊĠĠĠĠĠĠĠ Ġval Ġg att Service Intent Ġ= ĠIntent ( context , ĠBluetooth LE Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġcontext . bind Service ( g att Service Intent , Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name , Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth LE Service Ġ= Ġ( service Ġas ĠBluetooth LE Service . Local Binder ). service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. connect ( bluetooth Device ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth LE Service Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}, ĠAppCompatActivity . BIND _ AUTO _ CREATE ) ĊĊĠĠĠĠĠĠĠ Ġcontext . register Receiver ( g att Update Receiver , Ġmake Gatt Update Intent Filter ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ= Ġbluetooth LE Service ?. disconnect () ĊĊĠĠĠ Ġfun Ġchange Function ( number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbyte Ġ= Ġnumber . to Byte () ĊĠĠĠĠĠĠĠ Ġs Characteristic ?. value Ġ= Ġbyte ArrayOf ( byte ) ĊĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. write Characteristic ( s Characteristic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Gatt Update Intent Filter (): ĠIntent Filter Ġ= ĠIntent Filter (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Action ( ACTION _ G ATT _ CONNECTED ) ĊĠĠĠĠĠĠĠ Ġadd Action ( ACTION _ G ATT _ DIS CONNECTED ) ĊĠĠĠĠĠĠĠ Ġadd Action ( ACTION _ G ATT _ SERVICES _ DIS COVER ED ) ĊĠĠĠĠĠĠĠ Ġadd Action ( ACTION _ DATA _ AVAILABLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Gatt Services ( g att Services : ĠList < Bluetooth Gatt Service > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( g att Services Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġg att Services . forEach Ġ{ Ġservice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . character istics . forEach Ġ{ Ġcharacteristic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġuuid Ġ= Ġcharacteristic . uuid . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModel Number String UUID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Number Characteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Model Number Characteristic Ġ$ uuid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSerial Port UUID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserial Port Characteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Serial Port Characteristic Ġ$ uuid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand UUID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Characteristic Ġ= Ġcharacteristic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" m Serial Port Characteristic Ġ Ġ$ uuid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġif Ġ( model Number Characteristic Ġ!= Ġnull Ġ&& Ġserial Port Characteristic Ġ!= Ġnull ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcommand Characteristic Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs Characteristic Ġ= Ġmodel Number Characteristic ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. set Characteristic Notification ( s Characteristic , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. read Characteristic ( s Characteristic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Device () Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. set Characteristic Notification ( s Characteristic , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġs Characteristic Ġ= Ġcommand Characteristic ĊĠĠĠĠĠĠĠ Ġs Characteristic ?. setValue (" AT + PASS W OR = DF Robot \ r \ n ") ĊĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. write Characteristic ( s Characteristic ) ĊĠĠĠĠĠĠĠ Ġs Characteristic ?. setValue (" AT + CUR RU ART =${ 1 1 5 2 0 0 }\ r \ n ") ĊĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. write Characteristic ( s Characteristic ) ĊĠĠĠĠĠĠĠ Ġs Characteristic Ġ= Ġserial Port Characteristic ĊĠĠĠĠĠĠĠ Ġbluetooth LE Service ?. set Characteristic Notification ( s Characteristic , Ġtrue ) ĊĠĠĠ Ġ} Ċ }