package Ġcom . w el ie . health hub . g att Ċ Ċ import Ġcom . w el ie . bles sed . Bluetooth Bytes Parser Ċ import Ġcom . w el ie . bles sed . Bluetooth Bytes Parser . FORMAT _ UINT 1 6 Ċ import Ġcom . w el ie . bles sed . Bluetooth Bytes Parser . FORMAT _ UINT 8 Ċ import Ġcom . w el ie . bles sed . Bluetooth Per ipheral Ċ import Ġcom . w el ie . health hub . observations .* Ċ import Ġcom . w el ie . health hub . observations . Observation Location .* Ċ import Ġcom . w el ie . health hub . observations . Observation Unit .* Ċ import Ġcom . w el ie . health hub . sensor Type Ċ import Ġjava . util .* Ċ import Ġkotlin . math . round Ċ Ċ data Ġclass ĠWeight Measurement ( ĊĠĠĠ Ġval Ġweight : ĠFloat , ĊĠĠĠ Ġval Ġunit : ĠOb servation Unit , ĊĠĠĠ Ġval Ġtimestamp : ĠDate ?, ĊĠĠĠ Ġval ĠuserID : ĠInt ?, ĊĠĠĠ Ġval Ġb mi : ĠFloat ?, ĊĠĠĠ Ġval Ġheight In Met ers Or In ches : ĠFloat ?, ĊĠĠĠ Ġval ĠcreatedAt : ĠDate Ġ= ĠCalendar . getInstance (). time Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġas Observation List ( per ipheral : ĠBluetooth Per ipheral ): ĠList < Observation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Info Ġ= Ġrequire NotNull ( System Info Store . get ( per ipheral . address )) ĊĊĠĠĠĠĠĠĠ Ġval Ġobservations Ġ= ĠArrayList < Observation >() ĊĠĠĠĠĠĠĠ Ġif Ġ( weight Ġin Ġ 0 . 0 f .. 6 0 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservations . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOb servation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġweight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġunit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= ĠOb servation Subject . Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Type Ġ= ĠQuantity Type . Mass , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠF oot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Type Ġ= Ġperipheral . sensor Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Timestamp Ġ= ĠcreatedAt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Info Ġ= Ġsystem Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb mi ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġin Ġ 0 . 0 f .. 5 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservations . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOb servation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= ĠK g M 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= ĠOb servation Subject . Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Type Ġ= ĠQuantity Type . Length Mass Ratio , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠF oot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Type Ġ= Ġperipheral . sensor Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Timestamp Ġ= ĠcreatedAt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Info Ġ= Ġsystem Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheight In Met ers Or In ches ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġin Ġ 0 . 0 f .. 2 5 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservations . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOb servation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġif Ġ( unit Ġ== ĠK ilog r ams ) ĠMet ers Ġelse ĠIn ches , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= ĠOb servation Subject . Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Type Ġ= ĠQuantity Type . Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠUnknown , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Type Ġ= Ġperipheral . sensor Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Timestamp Ġ= ĠcreatedAt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Info Ġ= Ġsystem Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobservations ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Bytes ( value : ĠByteArray ): ĠWeight Measurement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠBluetooth Bytes Parser ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġparser . getInt Value ( FORMAT _ UINT 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġif Ġ( flags Ġand Ġ 0 x 0 1 Ġ> Ġ 0 ) ĠP ound s Ġelse ĠK ilog r ams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Present Ġ= Ġflags Ġand Ġ 0 x 0 2 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserID Present Ġ= Ġflags Ġand Ġ 0 x 0 4 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb mi And Height Present Ġ= Ġflags Ġand Ġ 0 x 0 8 Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight Multiplier Ġ= Ġif Ġ( unit Ġ== ĠK ilog r ams ) Ġ 0 . 0 0 5 f Ġelse Ġ 0 . 0 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweight Ġ= Ġparser . getInt Value ( FORMAT _ UINT 1 6 ) Ġ* Ġweight Multiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġif Ġ( timestamp Present ) Ġparser . dateTime Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserID Ġ= Ġif Ġ( userID Present ) Ġparser . getInt Value ( FORMAT _ UINT 8 ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb mi Ġ= Ġif Ġ( b mi And Height Present ) Ġparser . getInt Value ( FORMAT _ UINT 1 6 ) Ġ* Ġ 0 . 1 f Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Multiplier Ġ= Ġif Ġ( unit Ġ== ĠK ilog r ams ) Ġ 0 . 0 0 1 f Ġelse Ġ 0 . 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġif Ġ( b mi And Height Present ) Ġparser . getInt Value ( FORMAT _ UINT 1 6 ) Ġ* Ġheight Multiplier Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWeight Measurement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Ġ= Ġround ( weight Ġ* Ġ 1 0 0 ) Ġ/ Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Ġ= Ġunit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserID Ġ= ĠuserID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb mi Ġ= Ġb mi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight In Met ers Or In ches Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }