@ file : Suppress (" Spell Checking Inspection ", Ġ" Spell Checking Inspection ", Ġ" Spell Checking Inspection ", ĊĠĠĠ Ġ" Spell Checking Inspection ", Ġ" Spell Checking Inspection " Ċ ) Ċ Ċ package Ġcom . w el ie . health hub Ċ Ċ import Ġcom . w el ie . bles sed .* Ċ import Ġcom . w el ie . bles sed . Bluetooth Bytes Parser .* Ċ import Ġcom . w el ie . bles sed . Bluetooth Central Manager . SCAN OPTION _ NO _ NULL _ NAMES Ċ import Ġjava . util .* Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjavax . swing . J Frame Ċ import Ġjavax . swing . JOptionPane Ċ import Ġjava . util . UUID Ċ Ċ import Ġcom . w el ie . bles sed . Bluetooth Per ipheral Ċ import Ġcom . w el ie . health hub . fhir . Fhir Uploader Ċ import Ġcom . w el ie . health hub . fhir . as Fhir Ċ import Ġcom . w el ie . health hub . g att .* Ċ import Ġcom . w el ie . health hub . observations . Observation Ċ import Ġcom . w el ie . health hub . observations . Ob servations Callback Ċ import Ġcom . w el ie . health hub . observations . System Info Ċ import Ġcom . w el ie . health hub . observations . System Info Store Ċ import Ġkotlin . collections . HashMap ĊĊ Ċ class ĠBluetooth Handler Ġ: ĠOb servations Callback Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( TAG ) ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler ( TAG ) ĊĠĠĠ Ġprivate Ġval Ġup loader : ĠF hir Uploader Ġ= ĠF hir Uploader () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġframe : ĠJ Frame ĊĠĠĠ Ġprivate Ġval Ġservice Handlers : ĠMutable Map < UUID , ĠService Handler > Ġ= ĠHashMap () ĊĊĠĠĠ Ġprivate Ġval Ġperipheral Callback : ĠBluetooth Per ipheral Callback Ġ= Ġobject Ġ: ĠBluetooth Per ipheral Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Services Dis covered ( per ipheral : ĠBluetooth Per ipheral , Ġservices : ĠMutable List < Bluetooth Gatt Service >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġordered Services Ġ= Ġorder Services ( services ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġordered Services . forEach Ġ{ Ġservice Handlers [ it . uuid ]?. on Character istics Dis covered ( per ipheral , it . character istics ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Notification State Update ( per ipheral : ĠBluetooth Per ipheral , Ġcharacteristic : ĠBluetooth GattCharacteristic , Ġstatus : ĠBluetooth Command Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Handlers [ character istic . service ?. uuid ]?. on Notification State Updated ( per ipheral , Ġcharacteristic , Ġstatus ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Write ( per ipheral : ĠBluetooth Per ipheral , Ġvalue : ĠByteArray , Ġcharacteristic : ĠBluetooth GattCharacteristic , Ġstatus : ĠBluetooth Command Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Handlers [ character istic . service ?. uuid ]?. on Characteristic Write ( per ipheral , Ġvalue , Ġcharacteristic , Ġstatus ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Characteristic Update ( per ipheral : ĠBluetooth Per ipheral , Ġvalue : ĠByteArray , Ġcharacteristic : ĠBluetooth GattCharacteristic , Ġstatus : ĠBluetooth Command Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Handlers [ character istic . service ?. uuid ]?. on Characteristic Changed ( per ipheral , Ġvalue , Ġcharacteristic , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( ex . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" error Ġparsing Ġ${ bytes 2 String ( value )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġorder Services ( services Ġ: List < Bluetooth Gatt Service >): ĠList < Bluetooth Gatt Service > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferred Order Ġ= ĠarrayOf ( Device Information Service Handler . SERVICE _ UUID , ĠCurrent Time Service Handler . SERVICE _ UUID , ĠB attery Service Handler . SERVICE _ UUID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġordered Services : ĠMutable List < Bluetooth Gatt Service > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uuid Ġin Ġpreferred Order ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( service Ġin Ġservices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service . uuid Ġ== Ġuuid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġordered Services . add ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( service Ġin Ġservices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ordered Services . contains ( service )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġordered Services . add ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġordered Services ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġbluetooth Central Callback : ĠBluetooth Central Manager Callback Ġ= Ġobject Ġ: ĠBluetooth Central Manager Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connected Per ipheral ( per ipheral : ĠBluetooth Per ipheral ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" connected Ġperipheral ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Failed ( per ipheral : ĠBluetooth Per ipheral , Ġstatus : ĠBluetooth Command Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" connection Ġfailed Ġwith Ġstatus Ġ$ status ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ Ġblack List . remove ( per ipheral . address ) Ġ}, Ġ 2 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected Per ipheral ( per ipheral : ĠBluetooth Per ipheral , Ġstatus : ĠBluetooth Command Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" disconnected Ġperipheral ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperipheral Address : ĠString Ġ= Ġperipheral . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" re moving Ġ'$ per ipheral Address ' Ġfrom Ġblacklist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblack List . remove ( per ipheral Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Sc anning () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġperipheral . re connection Delay ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dis covered Per ipheral ( per ipheral : ĠBluetooth Per ipheral , Ġscan Result : ĠScan Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSee Ġif Ġthis Ġdevice Ġis Ġon Ġthe Ġblacklist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperipheral Address : ĠString Ġ= Ġperipheral . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblack listed Ġ= Ġblack List . contains ( per ipheral Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( black listed ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot Ġblack listed Ġso Ġput Ġit Ġon Ġthe Ġblacklist Ġand Ġconnect Ġto Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblack List . add ( per ipheral Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Info Store . add ( System Info ( per ipheral . address )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( scan Result . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ Ġcentral . connect Per ipheral ( per ipheral , Ġperipheral Callback ) Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pin Request ( per ipheral : ĠBluetooth Per ipheral ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJOptionPane . show Input Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enter ĠPIN Ġcode Ġfor Ġthis Ġperipheral ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enter ĠPIN ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . PLAIN _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Sc anning () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice UUID s Ġ= Ġservice Handlers . keys . filter Ġ{ Ġit Ġ!= ĠDevice Information Service Handler . SERVICE _ UUID Ġ} ĊĠĠĠĠĠĠĠ Ġcentral . scan For Per ipher als With Services ( service UUID s . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcallback : ĠOb servations Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠsetData Callback ( callback : ĠOb servations Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġservice Handlers . forEach Ġ{ Ġit . value . callback Ġ= Ġthis Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Frame ( frame : ĠJ Frame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . frame Ġ= Ġframe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Observation List ( observation List : ĠList < Observation >) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġobservation List . forEach Ġ{ Ġup loader . upload ( it . as Fhir ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġcallback ?. on Observation List ( observation List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" com . w el ie . health hub . Bluetooth Handler " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġblack List : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcentral : ĠBluetooth Central Manager Ġ= ĠBluetooth Central Manager ( bluetooth Central Callback , Ġset Of ( SCAN OPTION _ NO _ NULL _ NAMES )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" initial izing ĠBluetooth Central ") ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Device Information Service Handler . SERVICE _ UUID ] Ġ= ĠDevice Information Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Current Time Service Handler . SERVICE _ UUID ] Ġ= ĠCurrent Time Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Battery Service Handler . SERVICE _ UUID ] Ġ= ĠB attery Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Blood Pressure Service Handler . SERVICE _ UUID ] Ġ= ĠB lood Pressure Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Temperature Service Handler . SERVICE _ UUID ] Ġ= ĠTemperature Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Weight Service Handler . SERVICE _ UUID ] Ġ= ĠWeight Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Heart Rate Service Handler . SERVICE _ UUID ] Ġ= ĠHeart Rate Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ G lu co se Service Handler . SERVICE _ UUID ] Ġ= ĠG lu co se Service Handler () ĊĠĠĠĠĠĠĠ Ġservice Handlers [ Pulse Ox imeter Service Handler . SERVICE _ UUID ] Ġ= ĠPulse Ox imeter Service Handler () ĊĠĠĠĠĠĠĠ Ġstart Sc anning () ĊĠĠĠ Ġ} Ċ }