/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġ ĠST Micro electron ics ĠâĢĵ ĠAll Ġrights Ġreserved Ċ Ġ* ĠThe ĠST Micro electron ics Ġcorpor ate Ġlogo Ġis Ġa Ġtrade mark Ġof ĠST Micro electron ics Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ċ Ġ* Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ċ Ġ* ĠĠĠ Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ- ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ċ Ġ* ĠĠĠ Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ċ Ġ* ĠĠĠ Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ- ĠNeither Ġthe Ġname Ġnor Ġtrade marks Ġof ĠST Micro electron ics ĠInternational ĠN . V . Ġnor Ġany Ġother Ċ Ġ* ĠĠĠ ĠST Micro electron ics Ġcompany Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ċ Ġ* ĠĠĠ Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ- ĠAll Ġof Ġthe Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ċ Ġ* ĠĠĠ Ġin Ġa Ġdirectory Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images Ġmay Ġonly Ġbe Ġused Ġfor Ġinternal Ġpurposes Ġand Ċ Ġ* ĠĠĠ Ġshall Ġnot Ġbe Ġre distributed Ġto Ġany Ġthird Ġparty Ġor Ġmodified Ġin Ġany Ġway . Ċ Ġ* Ċ Ġ* Ġ- ĠAny Ġre distributions Ġin Ġbinary Ġform Ġshall Ġnot Ġinclude Ġthe Ġcapability Ġto Ġdisplay Ġany Ġof Ġthe Ċ Ġ* ĠĠĠ Ġicons , Ġpictures , Ġlog os Ġand Ġother Ġimages Ġthat Ġare Ġprovided Ġwith Ġthe Ġsource Ġcode Ġin Ġa Ġdirectory Ċ Ġ* ĠĠĠ Ġwhose Ġtitle Ġbegins Ġwith Ġst _ images . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY Ċ Ġ* ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER Ċ Ġ* ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR Ċ Ġ* ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY Ċ Ġ* ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . st . smart Tag . n fc . sm ar Tag Ċ Ċ import Ġcom . st . smart Tag . model . Sampling Configuration Ċ import Ġcom . st . smart Tag . model . Sensor Configuration Ċ import Ġcom . st . smart Tag . model . Threshold Ċ import Ġcom . st . smart Tag . util . le U Short Ċ import Ġcom . st . smart Tag . util . lsb Ċ import Ġcom . st . smart Tag . util . ms b Ċ import Ġkotlin . experimental . and Ċ Ċ /** Ġencode Ġa Ġsampling Ġmode Ġinto Ġa Ġbyte Ġvalue Ġ*/ Ċ private Ġfun ĠS ampling Configuration . Mode . pack (): Byte { ĊĠĠĠ Ġreturn Ġwhen ( this ){ ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . Inactive Ġ-> Ġ 0 . to Byte () ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . Sampling Ġ-> Ġ 1 . to Byte () ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . One Shot Ġ-> Ġ 2 . to Byte () ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . Sampling With Threshold Ġ-> Ġ 3 . to Byte () ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . Save Next Sample Ġ-> Ġ 4 . to Byte () ĊĠĠĠĠĠĠĠ ĠS ampling Configuration . Mode . Unknown Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown ĠMode Ġnot Ġsupported ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġdecode Ġthe Ġsampling Ġmode Ġfrom Ġa Ġbyte Ċ Ġ*/ Ċ private Ġfun Ġparse Sampling Mode ( raw Value : Byte ): ĠS ampling Configuration . Mode Ġ{ ĊĠĠĠ Ġreturn Ġwhen ( raw Value ){ ĊĠĠĠĠĠĠĠĠ 0 . to Byte () Ġ-> ĠS ampling Configuration . Mode . Inactive ĊĠĠĠĠĠĠĠĠ 1 . to Byte () Ġ-> ĠS ampling Configuration . Mode . Sampling ĊĠĠĠĠĠĠĠĠ 2 . to Byte () Ġ-> ĠS ampling Configuration . Mode . One Shot ĊĠĠĠĠĠĠĠĠ 3 . to Byte () Ġ-> ĠS ampling Configuration . Mode . Sampling With Threshold ĊĠĠĠĠĠĠĠĠ 4 . to Byte () Ġ-> ĠS ampling Configuration . Mode . Save Next Sample ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠS ampling Configuration . Mode . Unknown ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* Ġencode Ġthe Ġenabled Ġsensor Ġusing Ġa Ġbit Ġfor Ġeach Ġsensor . Ċ Ġ* Ġbit Ġ# 1 Ġ= Ġtemperature Ċ Ġ* Ġbit Ġ# 2 Ġ= Ġhum idity Ċ Ġ* Ġbit Ġ# 3 Ġ= Ġpressure Ċ Ġ* Ġbit Ġ# 4 Ġ= Ġaccel erometer Ċ Ġ* Ġbit Ġ# 5 Ġ= Ġorientation Ċ Ġ* Ġbit Ġ# 6 Ġ= Ġwake Up Ċ Ġ*/ Ċ private Ġfun Ġpack Flags ( conf : ĠS ampling Configuration ): ĠByte Ġ{ ĊĠĠĠ Ġvar Ġpack Value Ġ= Ġ 0 ĊĠĠĠ Ġif Ġ( conf . temperature Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 0 1 ĊĠĠĠ Ġif Ġ( conf . humidity Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 0 2 ĊĠĠĠ Ġif Ġ( conf . pressure Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 0 4 ĊĠĠĠ Ġif Ġ( conf . accel erometer Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 0 8 ĊĠĠĠ Ġif Ġ( conf . orientation Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 1 0 ĊĠĠĠ Ġif Ġ( conf . wake Up Conf . is Enable ) ĊĠĠĠĠĠĠĠ Ġpack Value Ġ= Ġpack Value Ġor Ġ 0 x 2 0 ĊĠĠĠ Ġreturn Ġpack Value . to Byte () Ċ } Ċ Ċ /** Ċ Ġ* Ġencode Ġthe Ġsampling Ġconfiguration Ġinto Ġa Ġ Ġn fc Ġmemory Ġcell . Ċ Ġ*/ Ċ fun ĠS ampling Configuration . pack (): ByteArray { ĊĠĠĠ Ġval Ġinterval Ġ= Ġsampling Interval _ s . to Short () ĊĠĠĠ Ġval Ġmode Ġ= Ġmode . pack () ĊĠĠĠ Ġreturn Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval . lsb (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterval . ms b (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode , Ġ// is Enable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack Flags ( this )) Ċ } Ċ Ċ /** Ċ Ġ* Ġextract Ġthe Ġbit Ġin Ġposition Ġ[ position ], Ġit Ġreturn Ġtrue Ġif Ġthe Ġbit Ġis Ġ 1 Ġfalse Ġotherwise Ċ Ġ*/ Ċ private Ġfun ĠByte . extract Bit ( position : ĠInt ): ĠBoolean Ġ= Ġ( this Ġand Ġ( 1 Ġshl Ġposition ). to Byte ()) Ġ!= Ġ 0 . to Byte () Ċ Ċ /** Ċ Ġ* Ġrestore Ġthe Ġsampling Ġconfiguration Ġfrom Ġa Ġn fc Ġmemory Ġcell . Ċ Ġ* Ġ[ data ] Ġn fc Ġmemory Ġcell Ġcontaining Ġthe Ġenabled Ġsensors , Ġthe Ġsampling Ġmode Ġand Ġthe Ġsampling Ġinterval Ċ Ġ* Ġ[ temp Hum Th ] Ġmin Ġand Ġmax Ġto Ġuse Ġas Ġthreshold Ġfor Ġthe Ġtemperature Ġand Ġthe Ġhum idity Ġdata . Ċ Ġ* Ġ ĠThe Ġvalue Ġwill Ġbe Ġrecorded Ġonly Ġif Ġit Ġis Ġoutside Ġthe Ġrange Ċ Ġ* Ġ[ pres Acc Th ] Ġmin Ġand Ġmax Ġfor Ġthe Ġpressure , Ġand Ġmin Ġfor Ġthe Ġacceleration . Ċ Ġ*/ Ċ fun Ġunpack Sampling Configuration ( data : ĠByteArray , Ġtemp Hum Th : ĠMax Min Temp Hum Cell , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpres Acc Th : ĠMax Min Pres Acc Cell ): ĠS ampling Configuration Ġ{ ĊĊĠĠĠ Ġ// data [ 0 , 1 ] Ġ= Ġsampling Ġinterval ĊĠĠĠ Ġval Ġsampling Interval Ġ= Ġdata . le U Short ĊĠĠĠ Ġval Ġmode Ġ= Ġparse Sampling Mode ( data [ 2 ]) ĊĠĠĠ Ġval Ġlog Status Ġ= Ġdata [ 3 ] ĊĠĠĠ Ġval Ġlog Temperature Ġ= Ġlog Status . extract Bit ( 0 ) ĊĠĠĠ Ġval Ġlog Hum idity Ġ= Ġlog Status . extract Bit ( 1 ) ĊĠĠĠ Ġval Ġlog Pressure Ġ= Ġlog Status . extract Bit ( 2 ) ĊĠĠĠ Ġval Ġlog Acceleration Ġ= Ġlog Status . extract Bit ( 3 ) ĊĠĠĠ Ġval Ġlog Orientation Ġ= Ġlog Status . extract Bit ( 4 ) ĊĠĠĠ Ġval Ġlog Wake Up Ġ= Ġlog Status . extract Bit ( 5 ) ĊĊĠĠĠ Ġreturn ĠS ampling Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsampling Interval _ s Ġ= Ġsampling Interval , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= Ġmode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Conf Ġ= ĠSensor Configuration ( log Temperature , ĠThreshold ( temp Hum Th . temp Max , temp Hum Th . temp Min )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressure Conf Ġ= ĠSensor Configuration ( log Pressure , ĠThreshold ( pres Acc Th . max Pressure , pres Acc Th . min Pressure )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhum idity Conf Ġ= ĠSensor Configuration ( log Hum idity , ĠThreshold ( temp Hum Th . hum Max , temp Hum Th . hum Min )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccel erometer Conf Ġ= ĠSensor Configuration ( log Acceleration , Threshold ( pres Acc Th . acceleration Value , null )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Conf Ġ= ĠSensor Configuration ( log Orientation , Threshold ( null , null )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwake Up Conf Ġ= ĠSensor Configuration ( log Wake Up , Threshold ( pres Acc Th . acceleration Value , null )) ĊĠĠĠ Ġ) Ċ }