Kenji Arai / 6180XA1_simple

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

Committer:
davide.aliprandi@st.com
Date:
Mon Mar 13 17:57:03 2017 +0100
Revision:
56:37d1736bd896
Aligning to ARM mbed coding style.

Who changed what in which revision?

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