Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of X_NUCLEO_6180XA1 by
Diff: Components/VL6180X/vl6180x_class.h
- Revision:
- 14:0effa0bbf192
- Parent:
- 12:71d589e6fd2c
- Child:
- 15:454710d17358
--- a/Components/VL6180X/vl6180x_class.h Tue Oct 13 14:32:54 2015 +0200 +++ b/Components/VL6180X/vl6180x_class.h Mon Oct 19 13:54:17 2015 +0200 @@ -50,7 +50,8 @@ //#include "vl6180x_appcfg.h" #include "STMPE1600_class.h" -/* data struct containing range measure, light measure and type of error provided to the user */ +/* data struct containing range measure, light measure and type of error provided to the user + in case of invalid data range_mm=0xFFFFFFFF and lux=0xFFFFFFFF */ typedef struct MeasureData { int32_t range_mm; @@ -69,20 +70,24 @@ als_continuous_polling, range_continuous_interrupt, als_continuous_interrupt, + interleaved_mode_interrupt, + range_continuous_polling_low_threshold, + range_continuous_polling_high_threshold, + range_continuous_polling_out_of_window, + als_continuous_polling_low_threshold, + als_continuous_polling_high_threshold, + als_continuous_polling_out_of_window, + range_continuous_interrupt_low_threshold, + range_continuous_interrrupt_high_threshold, + range_continuous_interrupt_out_of_window, + als_continuous_interrupt_low_threshold, + als_continuous_interrupt_high_threshold, + als_continuous_interrupt_out_of_window, + //interleaved con soglie range_continuous_als_single_shot, range_single_shot_als_continuous, - interleaved_mode, }OperatingMode; -/* type of sensor measurement */ -typedef enum -{ - range_measure=1, - light_measure, - light_range_measure, -}MeasureType; - - /** default device address */ #define DEFAULT_DEVICE_ADDRESS 0x29 @@ -119,59 +124,25 @@ /** Destructor */ //~VL6180X(){} - - void VL6180x_On(void) { + + /* turns on the sensor */ + void VL6180x_On(void) + { if (gpio0) *gpio0=1; else if (expgpio0) *expgpio0=1; } - void VL6180x_Off(void) { + /* turns off the sensor */ + void VL6180x_Off(void) + { if (gpio0) *gpio0=0; else if (expgpio0) *expgpio0=0; } - - int IsPresent() - { - int status; - - status=ReadID(); - if(status) - printf("Failed to read ID device! Device not present!\n"); //FIXME da sistemare la funzione di stampa errore ErrLog da platform.h - return status; - } - int InitSensor(uint8_t NewAddr); - - int StartMeasurement(OperatingMode operating_mode, void (*fptr)(void), MeasureData_t *Data); - - int GetRangeError(MeasureData_t *Data, VL6180x_RangeData_t RangeData); - - int GetAlsError(MeasureData_t *Data, VL6180x_AlsData_t AlsData); - - int RangeMeasPollSingleShot(MeasureData_t *Data); - - int AlsMeasPollSingleShot(MeasureData_t *Data); - - int AlsStartContinuousMode() - { - return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_CONTINUOUS); - } - - int RangeMeasPollContinuousMode(MeasureData_t *Data); - - int AlsMeasPollContinuousMode(MeasureData_t *Data); - - int GetRangeMeasContinuousMode(MeasureData_t *Data); - - int GetAlsMeasContinuousMode(MeasureData_t *Data); - - int RangeMeasIntContinuousMode(void (*fptr)(void)); - - int AlsMeasIntContinuousMode(void (*fptr)(void)); - - int InterleavedMode(void (*fptr)(void)); - - int StartInterleavedMode(); + int InitSensor(uint8_t NewAddr); + int StartMeasurement(OperatingMode operating_mode, void (*fptr)(void), MeasureData_t *Data, uint16_t low, uint16_t high); + int GetMeasurement(OperatingMode operating_mode, MeasureData_t *Data); + int StopMeasurement(OperatingMode operating_mode); /* handling functions of the interrupt_measure */ @@ -198,7 +169,7 @@ interrupt_measure.disable_irq(); } - void HandleIRQ(MeasureType measure_type, MeasureData_t *Data); // FIXME sistemare la sequenza delle funzioni completandola con i print degli errori + int HandleIRQ(OperatingMode operating_mode, MeasureData_t *Data); /* Wrapper functions */ int WaitDeviceBooted() @@ -461,7 +432,12 @@ return VL6180x_AlsGetLux(Device, piData); } + int AlsStartContinuousMode() + { + return VL6180x_AlsSetSystemMode(Device, MODE_START_STOP|MODE_CONTINUOUS); + } +private: /* api.h functions */ int VL6180x_WaitDeviceBooted(VL6180xDev_t dev); int VL6180x_InitData(VL6180xDev_t dev ); @@ -541,10 +517,40 @@ int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData); int VL6180x_I2CWrite(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToWrite); int VL6180x_I2CRead(uint8_t DeviceAddr, uint16_t RegisterAddr, uint8_t *pBuffer, uint16_t NumByteToRead); + + + int IsPresent() + { + int status; + + status=ReadID(); + if(status) + printf("Failed to read ID device! Device not present!\n"); //FIXME da sistemare la funzione di stampa errore ErrLog da platform.h + return status; + } + int StopRangeMeasurement(OperatingMode operating_mode); + int StopAlsMeasurement(OperatingMode operating_mode); + int GetRangeMeas(OperatingMode operating_mode, MeasureData_t *Data); + int GetAlsMeas(OperatingMode operating_mode, MeasureData_t *Data); + int GetRangeAlsMeas(MeasureData_t *Data); + int RangeSetLowThreshold(uint16_t threshold); + int RangeSetHighThreshold(uint16_t threshold); + int AlsSetLowThreshold(uint16_t threshold); + int AlsSetHighThreshold(uint16_t threshold); + int GetRangeError(MeasureData_t *Data, VL6180x_RangeData_t RangeData); + int GetAlsError(MeasureData_t *Data, VL6180x_AlsData_t AlsData); + int RangeMeasPollSingleShot(MeasureData_t *Data); + int AlsMeasPollSingleShot(MeasureData_t *Data); + int RangeMeasPollContinuousMode(); + int AlsMeasPollContinuousMode(); + int AlsGetMeasurementIfReady(VL6180xDev_t dev, VL6180x_AlsData_t *pAlsData); + int RangeMeasIntContinuousMode(void (*fptr)(void)); + int AlsMeasIntContinuousMode(void (*fptr)(void)); + int InterleavedMode(void (*fptr)(void)); + int StartInterleavedMode(); + int VL6180x_AlsGetThresholds(VL6180xDev_t dev, uint16_t *low, uint16_t *high); - -private: /* IO Device */ DevI2C &dev_i2c; /* Digital out pin */