INSAT Mini Project
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Fork of X_NUCLEO_6180XA1 by
Revision 26:db0cdc5ecc0a, committed 2015-11-04
- Comitter:
- gallonm
- Date:
- Wed Nov 04 09:11:52 2015 +0100
- Parent:
- 25:126b760a3f55
- Child:
- 27:22c6f69967d9
- Commit message:
- Settled AlsSetThresholds and AlsGetThresholds.
Modified the function parameters.
Implemented the computation from lux to raw device value.
Changed in this revision
--- a/Components/VL6180X/vl6180x_class.cpp Mon Nov 02 13:49:54 2015 +0000 +++ b/Components/VL6180X/vl6180x_class.cpp Wed Nov 04 09:11:52 2015 +0100 @@ -528,7 +528,7 @@ if( status ) break; status = VL6180x_AlsSetAnalogueGain(dev, 0); if( status ) break; - status = VL6180x_AlsSetThresholds(dev, 0, 0xFFFF); + status = VL6180x_AlsSetThresholds(dev, 0, 1800); if( status ) break; /* set Als InterruptMode to new sample */ status=VL6180x_AlsConfigInterrupt(dev, CONFIG_GPIO_INTERRUPT_DISABLED); @@ -725,10 +725,12 @@ -int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high) { +int VL6180X::VL6180x_AlsSetThresholds(VL6180xDev_t dev, lux_t low, lux_t high) { int status; uint32_t AlsAnGain, IntPeriod, AlsScaler, GainFix, RawAlsHigh, RawAlsLow; + uint16_t RawThreshLow, RawThreshHigh; const uint32_t LuxResxIntIme =(uint32_t)(0.56f* DEF_INT_PEFRIOD *(1<<LUXRES_FIX_PREC)); + void *ptr; LOG_FUNCTION_START("%d %d", (int )low, (int)high); AlsAnGain=VL6180xDevDataGet(dev, AlsGainCode); @@ -738,16 +740,18 @@ IntPeriod++; RawAlsLow=low*AlsScaler*GainFix; RawAlsLow=RawAlsLow*IntPeriod; - RawAlsLow=RawAlsLow/LuxResxIntIme; - + RawAlsLow=RawAlsLow/LuxResxIntIme; RawAlsHigh=high*(AlsScaler*GainFix); RawAlsHigh=RawAlsHigh*IntPeriod; RawAlsHigh=RawAlsHigh/LuxResxIntIme; - status = VL6180x_WrByte(dev, SYSALS_THRESH_LOW, (uint16_t)RawAlsLow); + ptr=&RawAlsLow; + RawThreshLow=*(uint16_t*)ptr; + status = VL6180x_WrWord(dev, SYSALS_THRESH_LOW, RawThreshLow); if(!status ){ - status = VL6180x_WrByte(dev, SYSALS_THRESH_HIGH, (uint16_t)RawAlsHigh); + ptr=&RawAlsHigh; + RawThreshHigh=*(uint16_t*)ptr; + status = VL6180x_WrWord(dev, SYSALS_THRESH_HIGH, RawThreshHigh); } - LOG_FUNCTION_END(status) ; return status; } @@ -2896,7 +2900,7 @@ else return (r_status|l_status); - case(range_continuous_interrrupt_high_threshold): + case(range_continuous_interrupt_high_threshold): status=VL6180x_RangeConfigInterrupt(Device, CONFIG_GPIO_INTERRUPT_LEVEL_HIGH); status=VL6180x_AlsConfigInterrupt(Device, CONFIG_GPIO_INTERRUPT_DISABLED); if((!r_status)&&(!l_status)) @@ -3229,9 +3233,9 @@ int VL6180X::AlsSetLowThreshold(uint16_t threshold) { int status; - uint16_t low, high; + lux_t low, high; - status=VL6180x_AlsGetThresholds(Device, &low, &high); + status=AlsGetThresholds(Device, &low, &high); if(!status) status=VL6180x_AlsSetThresholds(Device, threshold, high); return status; @@ -3241,31 +3245,47 @@ int VL6180X::AlsSetHighThreshold(uint16_t threshold) { int status; - uint16_t low, high; + lux_t low, high; - status=VL6180x_AlsGetThresholds(Device, &low, &high); + status=AlsGetThresholds(Device, &low, &high); if(!status) status=VL6180x_AlsSetThresholds(Device, low, threshold); return status; } -int VL6180X::VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high) +int VL6180X::AlsGetThresholds(VL6180xDev_t dev, lux_t *low, lux_t *high) { int status; + uint16_t RawAlsLow, RawAlsHigh; + uint32_t luxLowValue, luxHighValue, IntPeriod, AlsAnGain, GainFix, AlsScaler; + const uint32_t LuxResxIntIme =(uint32_t)(0.56f* DEF_INT_PEFRIOD *(1<<LUXRES_FIX_PREC)); - status=VL6180x_RdWord(dev, SYSALS_THRESH_LOW, low); + status=VL6180x_RdWord(dev, SYSALS_THRESH_LOW, &RawAlsLow); if(status) { VL6180x_ErrLog("rd SYSALS_THRESH_LOW fail"); return status; } - status=VL6180x_RdWord(dev, SYSALS_THRESH_HIGH, high); + status=VL6180x_RdWord(dev, SYSALS_THRESH_HIGH, &RawAlsHigh); if(status) { VL6180x_ErrLog("rd SYSALS_THRESH_HIGH fail"); return status; } + AlsAnGain=VL6180xDevDataGet(dev, AlsGainCode); + IntPeriod=VL6180xDevDataGet(dev, IntegrationPeriod); + AlsScaler=VL6180xDevDataGet(dev, AlsScaler); + GainFix=AlsGainLookUp[AlsAnGain]; + IntPeriod++; + luxLowValue=(uint32_t)RawAlsLow*LuxResxIntIme; + luxLowValue=luxLowValue/IntPeriod; + luxLowValue=luxLowValue/(AlsScaler*GainFix); + luxHighValue=(uint32_t)RawAlsHigh*LuxResxIntIme; + luxHighValue=luxHighValue/IntPeriod; + luxHighValue=luxHighValue/(AlsScaler*GainFix); + *low=luxLowValue; + *high=luxHighValue; return status; } @@ -3281,7 +3301,7 @@ case(range_continuous_polling_high_threshold): case(range_continuous_polling_out_of_window): case(range_continuous_interrupt_low_threshold): - case(range_continuous_interrrupt_high_threshold): + case(range_continuous_interrupt_high_threshold): case(range_continuous_interrupt_out_of_window): return GetRangeMeas(operating_mode, Data); @@ -3351,7 +3371,7 @@ else return NOT_READY; } - else if((operating_mode==range_continuous_polling_high_threshold)||(operating_mode==range_continuous_interrrupt_high_threshold)) + else if((operating_mode==range_continuous_polling_high_threshold)||(operating_mode==range_continuous_interrupt_high_threshold)) { if(IntStatus.status.Range==RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD) status=VL6180x_RangeGetMeasurement(Device, &RangeData); @@ -3509,7 +3529,7 @@ case(range_continuous_polling_high_threshold): case(range_continuous_polling_out_of_window): case(range_continuous_interrupt_low_threshold): - case(range_continuous_interrrupt_high_threshold): + case(range_continuous_interrupt_high_threshold): case(range_continuous_interrupt_out_of_window): return StopRangeMeasurement(operating_mode); @@ -3599,7 +3619,7 @@ VL6180x_ErrLog("VL6180x_ClearErrorInterrupt fail"); return status; } - status=VL6180x_AlsSetThresholds(Device, 0x0, 0xFFFF); + status=VL6180x_AlsSetThresholds(Device, 0x0, 1800); if(status) VL6180x_ErrLog("VL6180x_AlsSetThresholds fail"); return status;
--- a/Components/VL6180X/vl6180x_class.h Mon Nov 02 13:49:54 2015 +0000 +++ b/Components/VL6180X/vl6180x_class.h Wed Nov 04 09:11:52 2015 +0100 @@ -78,7 +78,7 @@ als_continuous_polling_high_threshold, als_continuous_polling_out_of_window, range_continuous_interrupt_low_threshold, - range_continuous_interrrupt_high_threshold, + range_continuous_interrupt_high_threshold, range_continuous_interrupt_out_of_window, als_continuous_interrupt_low_threshold, als_continuous_interrupt_high_threshold, @@ -277,7 +277,7 @@ return VL6180x_AlsSetAnalogueGain(Device, gain); } - int AlsSetThresholds(uint16_t low, uint16_t high) + int AlsSetThresholds(lux_t low, lux_t high) { return VL6180x_AlsSetThresholds(Device, low, high); } @@ -473,7 +473,7 @@ int VL6180x_AlsSetIntegrationPeriod(VL6180xDev_t dev, uint16_t period_ms); int VL6180x_AlsSetInterMeasurementPeriod(VL6180xDev_t dev, uint16_t intermeasurement_period_ms); int VL6180x_AlsSetAnalogueGain(VL6180xDev_t dev, uint8_t gain); - int VL6180x_AlsSetThresholds(VL6180xDev_t dev, uint16_t low, uint16_t high); + int VL6180x_AlsSetThresholds(VL6180xDev_t dev, lux_t low, lux_t high); int VL6180x_AlsGetInterruptStatus(VL6180xDev_t dev, uint8_t *pIntStatus); int VL6180x_StaticInit(VL6180xDev_t dev); int VL6180x_RangeWaitDeviceReady(VL6180xDev_t dev, int MaxLoop ); @@ -563,7 +563,7 @@ int AlsMeasIntContinuousMode(void (*fptr)(void)); int InterleavedMode(void (*fptr)(void)); int StartInterleavedMode(); - int VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high); + int AlsGetThresholds(VL6180xDev_t dev, lux_t *low, lux_t *high); /* IO Device */