Library for use with VL53L1X, intended to represent the Proximity sensor expansion board with the same name.

Dependencies:   VL53L1X_mbed

Dependents:   HelloWorld_53L1A1 VL53L1A1_Simple_Ranging_With_One_Device VL53L1A1_Simple_Ranging_With_All_Devices VL53L1X_Ranging_With_Multiple_Devices_MbedOS ... more

Committer:
Davidroid
Date:
Tue Aug 22 14:39:51 2017 +0000
Revision:
16:27d3d95c8593
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 16:27d3d95c8593 1 /**
Davidroid 16:27d3d95c8593 2 ******************************************************************************
Davidroid 16:27d3d95c8593 3 * @file Stmpe1600.h
Davidroid 16:27d3d95c8593 4 * @author AST / EST
Davidroid 16:27d3d95c8593 5 * @version V0.0.1
Davidroid 16:27d3d95c8593 6 * @date 14-April-2015
Davidroid 16:27d3d95c8593 7 * @brief Header file for component stmpe1600
Davidroid 16:27d3d95c8593 8 ******************************************************************************
Davidroid 16:27d3d95c8593 9 * @attention
Davidroid 16:27d3d95c8593 10 *
Davidroid 16:27d3d95c8593 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Davidroid 16:27d3d95c8593 12 *
Davidroid 16:27d3d95c8593 13 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 16:27d3d95c8593 14 * are permitted provided that the following conditions are met:
Davidroid 16:27d3d95c8593 15 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 16:27d3d95c8593 16 * this list of conditions and the following disclaimer.
Davidroid 16:27d3d95c8593 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 16:27d3d95c8593 18 * this list of conditions and the following disclaimer in the documentation
Davidroid 16:27d3d95c8593 19 * and/or other materials provided with the distribution.
Davidroid 16:27d3d95c8593 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 16:27d3d95c8593 21 * may be used to endorse or promote products derived from this software
Davidroid 16:27d3d95c8593 22 * without specific prior written permission.
Davidroid 16:27d3d95c8593 23 *
Davidroid 16:27d3d95c8593 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 16:27d3d95c8593 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 16:27d3d95c8593 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 16:27d3d95c8593 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 16:27d3d95c8593 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 16:27d3d95c8593 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 16:27d3d95c8593 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 16:27d3d95c8593 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 16:27d3d95c8593 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 16:27d3d95c8593 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 16:27d3d95c8593 34 *
Davidroid 16:27d3d95c8593 35 ******************************************************************************
Davidroid 16:27d3d95c8593 36 */
Davidroid 16:27d3d95c8593 37 #ifndef __STMPE1600_CLASS
Davidroid 16:27d3d95c8593 38 #define __STMPE1600_CLASS
Davidroid 16:27d3d95c8593 39 /* Includes ------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 40 #include "DevI2C.h"
Davidroid 16:27d3d95c8593 41
Davidroid 16:27d3d95c8593 42 #define STMPE1600_DEF_DEVICE_ADDRESS (uint8_t)0x42*2
Davidroid 16:27d3d95c8593 43 #define STMPE1600_DEF_DIGIOUT_LVL 1
Davidroid 16:27d3d95c8593 44
Davidroid 16:27d3d95c8593 45 /** STMPE1600 registr map **/
Davidroid 16:27d3d95c8593 46 #define CHIP_ID_0_7 (uint8_t)0x00
Davidroid 16:27d3d95c8593 47 #define CHIP_ID_8_15 (uint8_t)0x01
Davidroid 16:27d3d95c8593 48 #define VERSION_ID (uint8_t)0x02
Davidroid 16:27d3d95c8593 49 #define SYS_CTRL (uint8_t)0x03
Davidroid 16:27d3d95c8593 50 #define IEGPIOR_0_7 (uint8_t)0x08
Davidroid 16:27d3d95c8593 51 #define IEGPIOR_8_15 (uint8_t)0x09
Davidroid 16:27d3d95c8593 52 #define ISGPIOR_0_7 (uint8_t)0x0A
Davidroid 16:27d3d95c8593 53 #define ISGPIOR_8_15 (uint8_t)0x0B
Davidroid 16:27d3d95c8593 54 #define GPMR_0_7 (uint8_t)0x10
Davidroid 16:27d3d95c8593 55 #define GPMR_8_15 (uint8_t)0x11
Davidroid 16:27d3d95c8593 56 #define GPSR_0_7 (uint8_t)0x12
Davidroid 16:27d3d95c8593 57 #define GPSR_8_15 (uint8_t)0x13
Davidroid 16:27d3d95c8593 58 #define GPDR_0_7 (uint8_t)0x14
Davidroid 16:27d3d95c8593 59 #define GPDR_8_15 (uint8_t)0x15
Davidroid 16:27d3d95c8593 60 #define GPIR_0_7 (uint8_t)0x16
Davidroid 16:27d3d95c8593 61 #define GPIR_8_15 (uint8_t)0x17
Davidroid 16:27d3d95c8593 62
Davidroid 16:27d3d95c8593 63 #define SOFT_RESET (uint8_t)0x80
Davidroid 16:27d3d95c8593 64
Davidroid 16:27d3d95c8593 65 typedef enum {
Davidroid 16:27d3d95c8593 66 // GPIO Expander pin names
Davidroid 16:27d3d95c8593 67 GPIO_0 = 0,
Davidroid 16:27d3d95c8593 68 GPIO_1,
Davidroid 16:27d3d95c8593 69 GPIO_2,
Davidroid 16:27d3d95c8593 70 GPIO_3,
Davidroid 16:27d3d95c8593 71 GPIO_4,
Davidroid 16:27d3d95c8593 72 GPIO_5,
Davidroid 16:27d3d95c8593 73 GPIO_6,
Davidroid 16:27d3d95c8593 74 GPIO_7,
Davidroid 16:27d3d95c8593 75 GPIO_8,
Davidroid 16:27d3d95c8593 76 GPIO_9,
Davidroid 16:27d3d95c8593 77 GPIO_10,
Davidroid 16:27d3d95c8593 78 GPIO_11,
Davidroid 16:27d3d95c8593 79 GPIO_12,
Davidroid 16:27d3d95c8593 80 GPIO_13,
Davidroid 16:27d3d95c8593 81 GPIO_14,
Davidroid 16:27d3d95c8593 82 GPIO_15,
Davidroid 16:27d3d95c8593 83 NOT_CON
Davidroid 16:27d3d95c8593 84 } ExpGpioPinName;
Davidroid 16:27d3d95c8593 85
Davidroid 16:27d3d95c8593 86 typedef enum {
Davidroid 16:27d3d95c8593 87 INPUT = 0,
Davidroid 16:27d3d95c8593 88 OUTPUT,
Davidroid 16:27d3d95c8593 89 NOT_CONNECTED
Davidroid 16:27d3d95c8593 90 } ExpGpioPinDirection;
Davidroid 16:27d3d95c8593 91
Davidroid 16:27d3d95c8593 92 /* Classes -------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 93 /** Class representing a single stmpe1600 GPIO expander output pin
Davidroid 16:27d3d95c8593 94 */
Davidroid 16:27d3d95c8593 95 class Stmpe1600DigiOut
Davidroid 16:27d3d95c8593 96 {
Davidroid 16:27d3d95c8593 97
Davidroid 16:27d3d95c8593 98 public:
Davidroid 16:27d3d95c8593 99 /** Constructor
Davidroid 16:27d3d95c8593 100 * @param[in] &i2c device I2C to be used for communication
Davidroid 16:27d3d95c8593 101 * @param[in] outpinname the desired out pin name to be created
Davidroid 16:27d3d95c8593 102 * @param[in] DevAddr the stmpe1600 I2C device address (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 16:27d3d95c8593 103 * @param[in] lvl the default ot pin level
Davidroid 16:27d3d95c8593 104 */
Davidroid 16:27d3d95c8593 105 Stmpe1600DigiOut(DevI2C &i2c, ExpGpioPinName out_pin_name, uint8_t dev_addr = STMPE1600_DEF_DEVICE_ADDRESS,
Davidroid 16:27d3d95c8593 106 bool lvl = STMPE1600_DEF_DIGIOUT_LVL) : _dev_i2c(&i2c), exp_dev_addr(dev_addr), exp_pin_name(out_pin_name)
Davidroid 16:27d3d95c8593 107 {
Davidroid 16:27d3d95c8593 108 uint8_t data[2];
Davidroid 16:27d3d95c8593 109
Davidroid 16:27d3d95c8593 110 if (exp_pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 111 return;
Davidroid 16:27d3d95c8593 112 }
Davidroid 16:27d3d95c8593 113 /* set the exp_pin_name as output */
Davidroid 16:27d3d95c8593 114 _dev_i2c->i2c_read(data, exp_dev_addr, GPDR_0_7, 1);
Davidroid 16:27d3d95c8593 115 _dev_i2c->i2c_read(&data[1], exp_dev_addr, GPDR_8_15, 1);
Davidroid 16:27d3d95c8593 116 * (uint16_t *) data = * (uint16_t *) data | (1 << (uint16_t) exp_pin_name); // set gpio as out
Davidroid 16:27d3d95c8593 117 _dev_i2c->i2c_write(data, exp_dev_addr, GPDR_0_7, 1);
Davidroid 16:27d3d95c8593 118 _dev_i2c->i2c_write(&data[1], exp_dev_addr, GPDR_8_15, 1);
Davidroid 16:27d3d95c8593 119 write(lvl);
Davidroid 16:27d3d95c8593 120 }
Davidroid 16:27d3d95c8593 121
Davidroid 16:27d3d95c8593 122 /**
Davidroid 16:27d3d95c8593 123 * @brief Write on the out pin
Davidroid 16:27d3d95c8593 124 * @param[in] lvl level to write
Davidroid 16:27d3d95c8593 125 * @return 0 on Success
Davidroid 16:27d3d95c8593 126 */
Davidroid 16:27d3d95c8593 127 void write(int lvl)
Davidroid 16:27d3d95c8593 128 {
Davidroid 16:27d3d95c8593 129 uint8_t data[2];
Davidroid 16:27d3d95c8593 130
Davidroid 16:27d3d95c8593 131 if (exp_pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 132 return;
Davidroid 16:27d3d95c8593 133 }
Davidroid 16:27d3d95c8593 134 /* set the exp_pin_name state to lvl */
Davidroid 16:27d3d95c8593 135 _dev_i2c->i2c_read(data, exp_dev_addr, GPSR_0_7, 2);
Davidroid 16:27d3d95c8593 136 * (uint16_t *) data = * (uint16_t *) data & (uint16_t)(~(1 << (uint16_t) exp_pin_name)); // set pin mask
Davidroid 16:27d3d95c8593 137 if (lvl) {
Davidroid 16:27d3d95c8593 138 * (uint16_t *) data = * (uint16_t *) data | (uint16_t)(1 << (uint16_t) exp_pin_name);
Davidroid 16:27d3d95c8593 139 }
Davidroid 16:27d3d95c8593 140 _dev_i2c->i2c_write(data, exp_dev_addr, GPSR_0_7, 2);
Davidroid 16:27d3d95c8593 141 }
Davidroid 16:27d3d95c8593 142
Davidroid 16:27d3d95c8593 143 /**
Davidroid 16:27d3d95c8593 144 * @brief Overload assignement operator
Davidroid 16:27d3d95c8593 145 */
Davidroid 16:27d3d95c8593 146 Stmpe1600DigiOut &operator= (int lvl)
Davidroid 16:27d3d95c8593 147 {
Davidroid 16:27d3d95c8593 148 write(lvl);
Davidroid 16:27d3d95c8593 149 return *this;
Davidroid 16:27d3d95c8593 150 }
Davidroid 16:27d3d95c8593 151
Davidroid 16:27d3d95c8593 152 private:
Davidroid 16:27d3d95c8593 153 DevI2C *_dev_i2c;
Davidroid 16:27d3d95c8593 154 uint8_t exp_dev_addr;
Davidroid 16:27d3d95c8593 155 ExpGpioPinName exp_pin_name;
Davidroid 16:27d3d95c8593 156 };
Davidroid 16:27d3d95c8593 157
Davidroid 16:27d3d95c8593 158 /* Classes -------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 159 /** Class representing a single stmpe1600 GPIO expander input pin
Davidroid 16:27d3d95c8593 160 */
Davidroid 16:27d3d95c8593 161 class Stmpe1600DigiIn
Davidroid 16:27d3d95c8593 162 {
Davidroid 16:27d3d95c8593 163 public:
Davidroid 16:27d3d95c8593 164 /** Constructor
Davidroid 16:27d3d95c8593 165 * @param[in] &i2c device I2C to be used for communication
Davidroid 16:27d3d95c8593 166 * @param[in] inpinname the desired input pin name to be created
Davidroid 16:27d3d95c8593 167 * @param[in] DevAddr the stmpe1600 I2C device addres (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 16:27d3d95c8593 168 */
Davidroid 16:27d3d95c8593 169 Stmpe1600DigiIn(DevI2C &i2c, ExpGpioPinName in_pin_name,
Davidroid 16:27d3d95c8593 170 uint8_t dev_addr = STMPE1600_DEF_DEVICE_ADDRESS) : _dev_i2c(&i2c), exp_dev_addr(dev_addr),
Davidroid 16:27d3d95c8593 171 exp_pin_name(in_pin_name)
Davidroid 16:27d3d95c8593 172 {
Davidroid 16:27d3d95c8593 173 uint8_t data[2];
Davidroid 16:27d3d95c8593 174
Davidroid 16:27d3d95c8593 175 if (exp_pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 176 return;
Davidroid 16:27d3d95c8593 177 }
Davidroid 16:27d3d95c8593 178 /* set the exp_pin_name as input pin direction */
Davidroid 16:27d3d95c8593 179 _dev_i2c->i2c_read(data, exp_dev_addr, GPDR_0_7, 2);
Davidroid 16:27d3d95c8593 180 * (uint16_t *) data = * (uint16_t *) data & (uint16_t)(~(1 << (uint16_t) exp_pin_name)); // set gpio as in
Davidroid 16:27d3d95c8593 181 _dev_i2c->i2c_write(data, exp_dev_addr, GPDR_0_7, 2);
Davidroid 16:27d3d95c8593 182 }
Davidroid 16:27d3d95c8593 183
Davidroid 16:27d3d95c8593 184 /**
Davidroid 16:27d3d95c8593 185 * @brief Read the input pin
Davidroid 16:27d3d95c8593 186 * @return The pin logical state 0 or 1
Davidroid 16:27d3d95c8593 187 */
Davidroid 16:27d3d95c8593 188 bool read()
Davidroid 16:27d3d95c8593 189 {
Davidroid 16:27d3d95c8593 190 uint8_t data[2];
Davidroid 16:27d3d95c8593 191
Davidroid 16:27d3d95c8593 192 if (exp_pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 193 return false;
Davidroid 16:27d3d95c8593 194 }
Davidroid 16:27d3d95c8593 195 /* read the exp_pin_name */
Davidroid 16:27d3d95c8593 196 _dev_i2c->i2c_read(data, exp_dev_addr, GPMR_0_7, 2);
Davidroid 16:27d3d95c8593 197 * (uint16_t *) data = * (uint16_t *) data & (uint16_t)(1 << (uint16_t) exp_pin_name); // mask the in gpio
Davidroid 16:27d3d95c8593 198 if (data[0] || data[1]) {
Davidroid 16:27d3d95c8593 199 return true;
Davidroid 16:27d3d95c8593 200 }
Davidroid 16:27d3d95c8593 201 return false;
Davidroid 16:27d3d95c8593 202 }
Davidroid 16:27d3d95c8593 203
Davidroid 16:27d3d95c8593 204 operator int()
Davidroid 16:27d3d95c8593 205 {
Davidroid 16:27d3d95c8593 206 return read();
Davidroid 16:27d3d95c8593 207 }
Davidroid 16:27d3d95c8593 208
Davidroid 16:27d3d95c8593 209 private:
Davidroid 16:27d3d95c8593 210 DevI2C *_dev_i2c;
Davidroid 16:27d3d95c8593 211 uint8_t exp_dev_addr;
Davidroid 16:27d3d95c8593 212 ExpGpioPinName exp_pin_name;
Davidroid 16:27d3d95c8593 213 };
Davidroid 16:27d3d95c8593 214
Davidroid 16:27d3d95c8593 215 /* Classes -------------------------------------------------------------------*/
Davidroid 16:27d3d95c8593 216 /** Class representing a whole stmpe1600 component (16 gpio)
Davidroid 16:27d3d95c8593 217 */
Davidroid 16:27d3d95c8593 218 class Stmpe1600
Davidroid 16:27d3d95c8593 219 {
Davidroid 16:27d3d95c8593 220
Davidroid 16:27d3d95c8593 221 public:
Davidroid 16:27d3d95c8593 222 /** Constructor
Davidroid 16:27d3d95c8593 223 * @param[in] &i2c device I2C to be used for communication
Davidroid 16:27d3d95c8593 224 * @param[in] DevAddr the stmpe1600 I2C device addres (deft STMPE1600_DEF_DEVICE_ADDRESS)
Davidroid 16:27d3d95c8593 225 */
Davidroid 16:27d3d95c8593 226 Stmpe1600(DevI2C &i2c, uint8_t dev_addr = STMPE1600_DEF_DEVICE_ADDRESS) : _dev_i2c(&i2c)
Davidroid 16:27d3d95c8593 227 {
Davidroid 16:27d3d95c8593 228 exp_dev_addr = dev_addr;
Davidroid 16:27d3d95c8593 229 write_sys_ctrl(SOFT_RESET);
Davidroid 16:27d3d95c8593 230
Davidroid 16:27d3d95c8593 231 gpdr0_15 = (uint16_t) 0; // gpio dir all IN
Davidroid 16:27d3d95c8593 232 write_16bit_reg(GPDR_0_7, &gpdr0_15);
Davidroid 16:27d3d95c8593 233 gpsr0_15 = (uint16_t) 0x0ffff; // gpio status all 1
Davidroid 16:27d3d95c8593 234 write_16bit_reg(GPSR_0_7, &gpsr0_15);
Davidroid 16:27d3d95c8593 235 }
Davidroid 16:27d3d95c8593 236
Davidroid 16:27d3d95c8593 237 /**
Davidroid 16:27d3d95c8593 238 * @brief Write the SYS_CTRL register
Davidroid 16:27d3d95c8593 239 * @param[in] Data to be written (bit fields)
Davidroid 16:27d3d95c8593 240 */
Davidroid 16:27d3d95c8593 241 void write_sys_ctrl(uint8_t data) // data = SOFT_RESET reset the device
Davidroid 16:27d3d95c8593 242 {
Davidroid 16:27d3d95c8593 243 _dev_i2c->i2c_write(&data, exp_dev_addr, SYS_CTRL, 1);
Davidroid 16:27d3d95c8593 244 }
Davidroid 16:27d3d95c8593 245
Davidroid 16:27d3d95c8593 246 /**
Davidroid 16:27d3d95c8593 247 * @brief Set the out pin
Davidroid 16:27d3d95c8593 248 * @param[in] The pin name
Davidroid 16:27d3d95c8593 249 * @return 0 on Success
Davidroid 16:27d3d95c8593 250 */
Davidroid 16:27d3d95c8593 251 bool set_gpio(ExpGpioPinName pin_name)
Davidroid 16:27d3d95c8593 252 {
Davidroid 16:27d3d95c8593 253 if (pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 254 return true;
Davidroid 16:27d3d95c8593 255 }
Davidroid 16:27d3d95c8593 256 gpsr0_15 = gpsr0_15 | ((uint16_t) 0x0001 << pin_name);
Davidroid 16:27d3d95c8593 257 write_16bit_reg(GPSR_0_7, &gpsr0_15);
Davidroid 16:27d3d95c8593 258 return false;
Davidroid 16:27d3d95c8593 259 }
Davidroid 16:27d3d95c8593 260
Davidroid 16:27d3d95c8593 261 /**
Davidroid 16:27d3d95c8593 262 * @brief Clear the out pin
Davidroid 16:27d3d95c8593 263 * @param[in] The pin name
Davidroid 16:27d3d95c8593 264 * @return 0 on Success
Davidroid 16:27d3d95c8593 265 */
Davidroid 16:27d3d95c8593 266 bool clear_gpio(ExpGpioPinName pin_name)
Davidroid 16:27d3d95c8593 267 {
Davidroid 16:27d3d95c8593 268 if (pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 269 return true;
Davidroid 16:27d3d95c8593 270 }
Davidroid 16:27d3d95c8593 271 gpsr0_15 = gpsr0_15 & (~((uint16_t) 0x0001 << pin_name));
Davidroid 16:27d3d95c8593 272 write_16bit_reg(GPSR_0_7, &gpsr0_15);
Davidroid 16:27d3d95c8593 273 return false;
Davidroid 16:27d3d95c8593 274 }
Davidroid 16:27d3d95c8593 275
Davidroid 16:27d3d95c8593 276 /**
Davidroid 16:27d3d95c8593 277 * @brief Read the input pin
Davidroid 16:27d3d95c8593 278 * @param[in] The pin name
Davidroid 16:27d3d95c8593 279 * @return The logical pin level
Davidroid 16:27d3d95c8593 280 */
Davidroid 16:27d3d95c8593 281 bool read_gpio(ExpGpioPinName pin_name)
Davidroid 16:27d3d95c8593 282 {
Davidroid 16:27d3d95c8593 283 uint16_t gpmr0_15;
Davidroid 16:27d3d95c8593 284 if (pin_name == NOT_CON) {
Davidroid 16:27d3d95c8593 285 return true;
Davidroid 16:27d3d95c8593 286 }
Davidroid 16:27d3d95c8593 287 read_16bit_reg(GPMR_0_7, &gpmr0_15);
Davidroid 16:27d3d95c8593 288 gpmr0_15 = gpmr0_15 & ((uint16_t) 0x0001 << pin_name);
Davidroid 16:27d3d95c8593 289 if (gpmr0_15) {
Davidroid 16:27d3d95c8593 290 return true;
Davidroid 16:27d3d95c8593 291 }
Davidroid 16:27d3d95c8593 292 return false;
Davidroid 16:27d3d95c8593 293 }
Davidroid 16:27d3d95c8593 294
Davidroid 16:27d3d95c8593 295 /**
Davidroid 16:27d3d95c8593 296 * @brief Set the pin direction
Davidroid 16:27d3d95c8593 297 * @param[in] The pin name
Davidroid 16:27d3d95c8593 298 * @param[in] The pin direction
Davidroid 16:27d3d95c8593 299 * @return 0 on success
Davidroid 16:27d3d95c8593 300 */
Davidroid 16:27d3d95c8593 301 bool set_gpio_dir(ExpGpioPinName pin_name, ExpGpioPinDirection pin_dir)
Davidroid 16:27d3d95c8593 302 {
Davidroid 16:27d3d95c8593 303 if (pin_name == NOT_CON || pin_dir == NOT_CONNECTED) {
Davidroid 16:27d3d95c8593 304 return true;
Davidroid 16:27d3d95c8593 305 }
Davidroid 16:27d3d95c8593 306 gpdr0_15 = gpdr0_15 & (~((uint16_t) 0x0001 << pin_name)); // clear the Pin
Davidroid 16:27d3d95c8593 307 gpdr0_15 = gpdr0_15 | ((uint16_t) pin_dir << pin_name);
Davidroid 16:27d3d95c8593 308 write_16bit_reg(GPDR_0_7, &gpdr0_15);
Davidroid 16:27d3d95c8593 309 return false;
Davidroid 16:27d3d95c8593 310 }
Davidroid 16:27d3d95c8593 311
Davidroid 16:27d3d95c8593 312 /**
Davidroid 16:27d3d95c8593 313 * @brief Read a 16 bits register
Davidroid 16:27d3d95c8593 314 * @param[in] The register address
Davidroid 16:27d3d95c8593 315 * @param[in] The pointer to the read data
Davidroid 16:27d3d95c8593 316 */
Davidroid 16:27d3d95c8593 317 void read_16bit_reg(uint8_t reg16_addr, uint16_t *reg16_data)
Davidroid 16:27d3d95c8593 318 {
Davidroid 16:27d3d95c8593 319 _dev_i2c->i2c_read((uint8_t *) reg16_data, exp_dev_addr, reg16_addr, 2);
Davidroid 16:27d3d95c8593 320 }
Davidroid 16:27d3d95c8593 321
Davidroid 16:27d3d95c8593 322 /**
Davidroid 16:27d3d95c8593 323 * @brief Write a 16 bits register
Davidroid 16:27d3d95c8593 324 * @param[in] The register address
Davidroid 16:27d3d95c8593 325 * @param[in] The pointer to the data to be written
Davidroid 16:27d3d95c8593 326 */
Davidroid 16:27d3d95c8593 327 void write_16bit_reg(uint8_t reg16_addr, uint16_t *reg16_data)
Davidroid 16:27d3d95c8593 328 {
Davidroid 16:27d3d95c8593 329 _dev_i2c->i2c_write((uint8_t *) reg16_data, exp_dev_addr, reg16_addr, 2);
Davidroid 16:27d3d95c8593 330 }
Davidroid 16:27d3d95c8593 331
Davidroid 16:27d3d95c8593 332 private:
Davidroid 16:27d3d95c8593 333 DevI2C *_dev_i2c;
Davidroid 16:27d3d95c8593 334 uint16_t gpdr0_15; // local copy of bit direction reg
Davidroid 16:27d3d95c8593 335 uint16_t gpsr0_15; // local copy of bit status reg
Davidroid 16:27d3d95c8593 336 uint8_t exp_dev_addr; // expander device i2c addr
Davidroid 16:27d3d95c8593 337 };
Davidroid 16:27d3d95c8593 338
Davidroid 16:27d3d95c8593 339 #endif // __STMPE1600_CLASS