package Ġcom . st . Blue ST SDK . Features Ċ Ċ import Ġcom . st . Blue ST SDK . Feature Ċ import Ġcom . st . Blue ST SDK . Node Ċ import Ġcom . st . Blue ST SDK . Utils . Number Conversion Ċ Ċ class ĠFeature Q VAR Ġconstructor ( n : ĠNode ) Ġ: ĊĠĠĠĠĠĠĠ ĠFeature ( FEATURE _ NAME _ Q VAR , Ġn , ĠarrayOf ( Q VAR _ FIELD , ĠFLAG _ FIELD , ĠD Q VAR _ FIELD , ĠPARAM _ FIELD , NUM _ FIELD )) Ġ{ ĊĊĠĠĠ Ġ// TimeStamp Ġ( 2 ); ĠQ var Ġ( 4 ); ĠFlag Ġ( 1 ) Ġ, d Q var Ġ( 4 ); Parameter Ġ( 4 ); ĊĊĠĠĠ Ġoverride Ġfun Ġextract Data ( timestamp : ĠLong , Ġdata : ĠByteArray , Ġdata Offset : ĠInt ): ĠExtract Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ// val Ġtemp : ĠArray < Field > Ġ= ĠarrayOf ( Q VAR _ FIELD , ĠFLAG _ FIELD , ĠD Q VAR _ FIELD , ĠPARAM _ FIELD ) ĊĊĠĠĠĠĠĠĠ Ġ// m Data Desc Ġ= Ġtemp ĊĊĠĠĠĠĠĠĠ Ġval ĠnumberOf Fields Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( data . size Ġ- Ġdata Offset ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 -> ĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 -> ĠĠ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 Ġ-> ĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 Ġ-> ĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( numberOf Fields != 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// We Ġallocate Ġalways Ġ 4 Ġresults ... Ġthis Ġis Ġa Ġtmp Ġworkaround Ġfor Ġplot ĠDemo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġwant Ġto Ġavoid Ġto Ġdisplay Ġall Ġthe ĠFeature Ġelements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠarrayOf Null s < Number >( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġresults Ġ= ĠarrayOf Null s < Number >( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum Bytes Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ 0 ] Ġ= ĠNumber Conversion . LittleEndian . bytes ToInt 3 2 ( data , Ġdata Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Fields Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Read Ġthe ĠFlag ĠValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ 1 ] Ġ= Ġdata [ data Offset Ġ+ Ġ 4 ]; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Bytes Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Fields Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Read Ġthe ĠD Q VAR Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Bytes Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ 2 ] Ġ= ĠNumber Conversion . LittleEndian . bytes ToInt 3 2 ( data , Ġdata Offset Ġ+ Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numberOf Fields Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Read Ġthe ĠPARAM ĠValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Bytes Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ 3 ] Ġ= ĠNumber Conversion . LittleEndian . bytes To UInt 3 2 ( data , Ġdata Offset Ġ+ Ġ 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Fill ing Ġthe Ġempty ĠFields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġa Ġtmp Ġworkaround Ġfor Ġplot ĠDemo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġwant Ġto Ġavoid Ġto Ġdisplay Ġall Ġthe ĠFeature Ġelements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( numberOf Fields != 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠnumberOf Fields .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ i ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults [ 4 ]= ĠnumberOf Fields ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠExtract Result ( Sample ( timestamp , Ġresults , Ġfields Desc ), Ġnum Bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠExtract Result ( null , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ NAME _ Q VAR Ġ= Ġ" Electric ĠCharge ĠVari ation " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ DATA _ NAME _ Q VAR Ġ= Ġ" Q VAR " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ UNIT _ Q VAR Ġ= Ġ" LSB " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ MAX _ Q VAR _ DQ VAR _: ĠNumber Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ ĠDATA _ MIN _ Q VAR _ DQ VAR : ĠNumber Ġ= ĠInt . MIN _ VALUE ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ DATA _ NAME _ FLAG Ġ= Ġ" Flag " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ UNIT _ FLAG Ġ= Ġ" Not Defined " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ MAX _ FLAG : ĠNumber Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ MIN _ FLAG : ĠNumber Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ DATA _ NAME _ DQ VAR Ġ= Ġ" DQ VAR " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ UNIT _ DQ VAR Ġ= Ġ" LSB " ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ DATA _ NAME _ PARAM Ġ= Ġ" Parameter " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFEATURE _ UNIT _ PARAM Ġ= Ġ" Not Defined " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ MAX _ PARAM : ĠNumber Ġ= Ġ 1 L Ġshl Ġ 3 2 Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDATA _ MIN _ PARAM : ĠNumber Ġ= Ġ 0 ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠQ VAR _ FIELD Ġ= ĠField ( FEATURE _ DATA _ NAME _ Q VAR , ĠFEATURE _ UNIT _ Q VAR , ĠField . Type . Int 3 2 , ĠDATA _ MAX _ Q VAR _ DQ VAR _, ĠDATA _ MIN _ Q VAR _ DQ VAR , true ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFLAG _ FIELD Ġ= ĠField ( FEATURE _ DATA _ NAME _ FLAG , ĠFEATURE _ UNIT _ FLAG , ĠField . Type . UInt 8 , ĠDATA _ MAX _ FLAG , ĠDATA _ MIN _ FLAG , false ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠD Q VAR _ FIELD Ġ= ĠField ( FEATURE _ DATA _ NAME _ DQ VAR , ĠFEATURE _ UNIT _ DQ VAR , ĠField . Type . Int 3 2 , ĠDATA _ MAX _ Q VAR _ DQ VAR _, ĠDATA _ MIN _ Q VAR _ DQ VAR , true ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPARAM _ FIELD Ġ= ĠField ( FEATURE _ DATA _ NAME _ PARAM , ĠFEATURE _ UNIT _ PARAM , ĠField . Type . UInt 3 2 , ĠDATA _ MAX _ PARAM , ĠDATA _ MIN _ PARAM , false ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNUM _ FIELD Ġ= ĠField (" Num ĠFields ", Ġ"# ", ĠField . Type . UInt 8 , Ġ 4 , Ġ 0 , false ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠQ VAR ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsample Ġdata Ġsample ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Q VAR Value ( sample : ĠSample ?): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sample . data [ 0 ] != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsample . data [ 0 ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠFlag ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsample Ġdata Ġsample ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Flag Value ( sample : ĠSample ?): ĠByte ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . size >= 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sample . data [ 1 ] != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsample . data [ 1 ]. to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠD Q VAR ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsample Ġdata Ġsample ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget DQ VAR Value ( sample : ĠSample ?): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . size >= 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sample . data [ 2 ] != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsample . data [ 2 ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠPARAM ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsample Ġdata Ġsample ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Param Value ( sample : ĠSample ?): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . size == 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sample . data [ 3 ] != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsample . data [ 3 ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturn Ġthe ĠNumber Ġof Ġfields ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsample Ġdata Ġsample ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetNum Fields ( sample : ĠSample ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample . data . size == 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( sample . data [ 4 ] != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsample . data [ 4 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }