MAV'RIC
/home/travis/build/lis-epfl/MAVRIC_Library/drivers/lsm330dlc.hpp
00001 /*******************************************************************************
00002  * Copyright (c) 2009-2016, MAV'RIC Development Team
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  * 1. Redistributions of source code must retain the above copyright notice,
00009  * this list of conditions and the following disclaimer.
00010  *
00011  * 2. Redistributions in binary form must reproduce the above copyright notice,
00012  * this list of conditions and the following disclaimer in the documentation
00013  * and/or other materials provided with the distribution.
00014  *
00015  * 3. Neither the name of the copyright holder nor the names of its contributors
00016  * may be used to endorse or promote products derived from this software without
00017  * specific prior written permission.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00020  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00023  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  * POSSIBILITY OF SUCH DAMAGE.
00030  ******************************************************************************/
00031 
00032 /*******************************************************************************
00033  * \file lsm330dlc.hpp
00034  *
00035  * \author MAV'RIC Team
00036  * \author Felix Schill
00037  * \author Geraud L'Eplattenier
00038  * \author Julien Lecoeur
00039  *
00040  * \brief This file is the driver for the integrated 3axis gyroscope and
00041  * accelerometer LSM330DLC
00042  *
00043  ******************************************************************************/
00044 
00045 
00046 #ifndef LSM330DLC_HPP_
00047 #define LSM330DLC_HPP_
00048 
00049 #include <cstdint>
00050 #include <array>
00051 #include "drivers/accelerometer.hpp"
00052 #include "drivers/gyroscope.hpp"
00053 #include "hal/common/i2c.hpp"
00054 
00055 
00061 class Lsm330dlc_acc: public Accelerometer
00062 {
00063 public:
00064     virtual bool update_acc(void) = 0;
00065 
00066     bool update(void)
00067     {
00068         return update_acc();
00069     }
00070 };
00071 
00072 
00078 class Lsm330dlc_gyr: public Gyroscope
00079 {
00080 public:
00081     virtual bool update_gyr(void) = 0;
00082 
00083     bool update(void)
00084     {
00085         return update_gyr();
00086     }
00087 };
00088 
00089 
00097 class Lsm330dlc: public Lsm330dlc_acc, public Lsm330dlc_gyr
00098 {
00099 public:
00105     Lsm330dlc(I2c& i2c);
00106 
00107 
00116     bool init(void);
00117 
00118 
00126     bool update_acc(void);
00127     bool update_gyr(void);
00128 
00129 
00135     const float& last_update_us(void) const;
00136 
00137 
00147     const std::array<float, 3>& gyro(void) const;
00148 
00149 
00150 
00160     const float& gyro_X(void) const;
00161 
00162 
00172     const float& gyro_Y(void) const;
00173 
00174 
00184     const float& gyro_Z(void) const;
00185 
00186 
00196     const std::array<float, 3>& acc(void) const;
00197 
00198 
00208     const float& acc_X(void) const;
00209 
00210 
00220     const float& acc_Y(void) const;
00221 
00222 
00232     const float& acc_Z(void) const;
00233 
00234 
00240     const float& temperature(void) const;
00241 
00242 
00243 private:
00244     I2c&                 i2c_;              
00245     std::array<float, 3> gyro_data_;        
00246     std::array<float, 3> acc_data_;         
00247     float                temperature_;      
00248     float                last_update_us_;   
00249 };
00250 
00251 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines