INSAT Mini Project

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Components/VL6180X/vl6180x_class.h

Committer:
gallonm
Date:
2015-09-17
Revision:
4:a5abf7757947
Parent:
3:454541a079f4
Child:
7:2dc81120c917

File content as of revision 4:a5abf7757947:

/**
 ******************************************************************************
 * @file    vl6180x_class.h
 * @author  AST / EST
 * @version V0.0.1
 * @date    14-April-2015
 * @brief   Header file for component VL6180X
 ******************************************************************************
 * @attention
 *
 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. 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.
 *   3. Neither the name of STMicroelectronics nor the names of its contributors
 *      may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 *
 * 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.
 *
 ******************************************************************************
*/

#ifndef __VL6180X_CLASS_H
#define __VL6180X_CLASS_H

/* Includes ------------------------------------------------------------------*/
#include "RangeSensor.h"
#include "LightSensor.h"
#include "DevI2C.h" //temporaneo fino alla creazione della classe x_nucleo_6180xa1
#include "vl6180x_api.h"
#include "vl6180x_cfg.h"
#include "vl6180x_def.h"
#include "vl6180x_types.h"
#include "vl6180x_platform.h"
#include "vl6180x_appcfg.h"

/** default device address */
#define DEFAULT_DEVICE_ADDRESS		0x29
/** default value ECE factor Molecular */
#define DEF_ECE_FACTOR_M    85
/** default value ECE factor Denominator */
#define DEF_ECE_FACTOR_D    100
/** default value ALS integration time */
#define DEF_INT_PEFRIOD     100
/** default value ALS gain */
#define DEF_ALS_GAIN        1
/** default value ALS scaler */
#define DEF_ALS_SCALER      1
/** default value for DMAX Enbale */
#define DEF_DMAX_ENABLE     1
/** default ambient tuning factor %x1000 */
#define DEF_AMBIENT_TUNING  80

/*
typedef struct
{
		struct VL6180xDevData_t Data;
		uint8_t I2cAddr;
		uint8_t DevID;
	
    unsigned Present;
    unsigned Ready;
}MyVL6180xDev_t;
*/

/* Classes -------------------------------------------------------------------*/
/** Class representing a VL6180X sensor component
 */
class VL6180X : public RangeSensor, public LightSensor {
 public:
    /** Constructor
     * @param[in] i2c device I2C to be used for communication
     * @param[in] device address, 0x29 by default 
     */
     VL6180X(DevI2C &i2c, uint8_t DevAddr=DEFAULT_DEVICE_ADDRESS) : RangeSensor(), LightSensor(), dev_i2c(i2c)
     {
        MyDeviceAddress=DevAddr;
			  RangeLight_id=0;
        //MyDevice.I2cAddr=DevAddr;
        //MyDevice.DeviID=0;
        //MyDevice.Present=0;
        //MyDevice.Ready=0;
        //oppure MyVL6180xDev_t MyDevice={DevAddr, 0, 0, 0};
     }
    
    /** Destructor
     */
    /*virtual ~VL6180X() 
    {
        // delete[] memory allocated
        VL6180x_SetupGPIOx(MyDevice, 0, 0, 0);	
    } */
    
    // funzione che setta il paremetro DevID: SetDevID(int n)
    // funzione che setta il parametro Present: SetPresent(int n)
    // funzione che setta il parametro Ready: SetReady(int n)
    // funzione che modifica lo slave address: SetI2CAddress(VL6180xDev_t MyDevice, uint8_t NewAddress))
    
    /*** Interface Methods ***/
    // nel momento in cui creo la classe x_nucleo_6180xa1, all'interno definisco un oggetto VL6180xDev_t MyDevice
    // definisco una funzione Init() che chiama a sua volta la seguente funzione Init() e gli passo MyDevice
    /*virtual*/ int Init() //par:void *init_struct
    {
        return VL6180x_InitData(MyDevice); // a questa funzione devo passare il parametro di Init()
    }
    
    // nel momento in cui creo la classe x_nucleo_6180xa1, all'interno definisco un oggetto uint_t *RangeLight_id
    // definisco una funzione ReadID() che chiama a sua volta la seguente funzione ReadID() e gli passo RangeLight_id
    /*virtual*/ int ReadID() //par:uint8_t *rl_id
    {
        return VL6180X_ReadID(&RangeLight_id); // a questa funzione devo passare il parametro di ReadID()
    }
    
    /*
    virtual int GetRange(int *piData) {
        return VL6180X_GetRange(piData);
    }

    virtual int GetLight(int *piData) {
        return VL6180X_GetLight(piData);
    }
    */

		/* Initialization functions */
    int VL6180x_InitData(VL6180xDev_t dev);
    /*static*/ int _DMax_InitData(VL6180xDev_t dev);
    void _DMax_OneTimeInit(VL6180xDev_t dev);
    /*static*/ uint32_t _DMax_RawValueAtRateKCps(VL6180xDev_t dev, int32_t rate);
    uint32_t VL6180x_SqrtUint32(uint32_t num);
    
    /* IO read funcitons */
    int VL6180X_ReadID(uint8_t *rl_id);
    int VL6180X_IO_Read(uint8_t *pBuffer, uint8_t RegisterAddress, uint16_t NumByteToRead);
    
    /* Write and read functions from I2C */
    int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data);
    int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data);
    int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data);
    int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data);
    int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data);
    int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data);
    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);
    


private:
    /*** Methods ***/
    
    
    
    
    /*** Instance Variables ***/
    /* IO Device */
    //temporaneo
    DevI2C &dev_i2c; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo al costruttore del MyDevice il suo indirizzo
    //MyVL6180xDev_t MyDevice; in  sostituzione di VL6180xDev_t sotto 
    
    /* VL6180X Device */
    uint8_t MyDeviceAddress;
    //temporanei
    VL6180xDev_t MyDevice; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo alla funzione Init()
    uint8_t RangeLight_id; // creo questa variabile in x_nucleo_6180xa1.h allo stesso modo e poi passo alla funzione ReadID() il suo indirizzo
    
};

#endif // __VL6180X_CLASS_H