Error as described in MBs email to MS

Dependencies:   SDFileSystem app epson mbed msp430 pl tests

Committer:
marcbax
Date:
Thu Jan 11 14:12:00 2018 +0000
Revision:
1:5874c1a074a7
Parent:
0:c643d398cdb6
Version 180111a with error as reported to Mark Symonds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcbax 0:c643d398cdb6 1 //
marcbax 0:c643d398cdb6 2 // Filename: at42qt2120.h
marcbax 0:c643d398cdb6 3 //
marcbax 0:c643d398cdb6 4 // Atmel AT42QT2120 12 channel touch sensor.
marcbax 0:c643d398cdb6 5 //
marcbax 0:c643d398cdb6 6
marcbax 0:c643d398cdb6 7 #ifndef AT42QT2120_H
marcbax 0:c643d398cdb6 8 #define AT42QT2120_H
marcbax 0:c643d398cdb6 9
marcbax 0:c643d398cdb6 10 #include "mbed.h"
marcbax 0:c643d398cdb6 11
marcbax 0:c643d398cdb6 12 namespace HAL {
marcbax 0:c643d398cdb6 13
marcbax 0:c643d398cdb6 14 /**
marcbax 0:c643d398cdb6 15 * @brief AT42QT2120 registers.
marcbax 0:c643d398cdb6 16 */
marcbax 0:c643d398cdb6 17 enum REG_AT42QT2120
marcbax 0:c643d398cdb6 18 {
marcbax 0:c643d398cdb6 19 QT_CHIP_ID = 0,
marcbax 0:c643d398cdb6 20 QT_FIRMWARE_VERSION,
marcbax 0:c643d398cdb6 21 QT_DETECTION_STATUS,
marcbax 0:c643d398cdb6 22 QT_KEY_STATUS,
marcbax 0:c643d398cdb6 23 QT_KEY_STATUS2,
marcbax 0:c643d398cdb6 24 QT_SLIDER_POSITION = 5,
marcbax 0:c643d398cdb6 25 QT_CALIBRATE,
marcbax 0:c643d398cdb6 26 QT_RESET,
marcbax 0:c643d398cdb6 27 QT_LP,
marcbax 0:c643d398cdb6 28 QT_TTD,
marcbax 0:c643d398cdb6 29 QT_ATD,
marcbax 0:c643d398cdb6 30 QT_DI,
marcbax 0:c643d398cdb6 31 QT_TRD,
marcbax 0:c643d398cdb6 32 QT_DHT,
marcbax 0:c643d398cdb6 33 QT_SLIDER_OPTION,
marcbax 0:c643d398cdb6 34 QT_CHARDE_TIME,
marcbax 0:c643d398cdb6 35 QT_KEY0_DTHR,
marcbax 0:c643d398cdb6 36 QT_KEY1_DTHR,
marcbax 0:c643d398cdb6 37 QT_KEY2_DTHR,
marcbax 0:c643d398cdb6 38 QT_KEY3_DTHR,
marcbax 0:c643d398cdb6 39 QT_KEY4_DTHR,
marcbax 0:c643d398cdb6 40 QT_KEY5_DTHR,
marcbax 0:c643d398cdb6 41 QT_KEY6_DTHR,
marcbax 0:c643d398cdb6 42 QT_KEY7_DTHR,
marcbax 0:c643d398cdb6 43 QT_KEY8_DTHR,
marcbax 0:c643d398cdb6 44 QT_KEY9_DTHR,
marcbax 0:c643d398cdb6 45 QT_KEY10_DTHR,
marcbax 0:c643d398cdb6 46 QT_KEY11_DTHR,
marcbax 0:c643d398cdb6 47 QT_KEY0_CTRL,
marcbax 0:c643d398cdb6 48 QT_KEY1_CTRL,
marcbax 0:c643d398cdb6 49 QT_KEY2_CTRL,
marcbax 0:c643d398cdb6 50 QT_KEY3_CTRL,
marcbax 0:c643d398cdb6 51 QT_KEY4_CTRL,
marcbax 0:c643d398cdb6 52 QT_KEY5_CTRL,
marcbax 0:c643d398cdb6 53 QT_KEY6_CTRL,
marcbax 0:c643d398cdb6 54 QT_KEY7_CTRL,
marcbax 0:c643d398cdb6 55 QT_KEY8_CTRL,
marcbax 0:c643d398cdb6 56 QT_KEY9_CTRL,
marcbax 0:c643d398cdb6 57 QT_KEY10_CTRL,
marcbax 0:c643d398cdb6 58 QT_KEY11_CTRL,
marcbax 0:c643d398cdb6 59 QT_KEY0_PULSE_SCALE,
marcbax 0:c643d398cdb6 60 QT_KEY1_PULSE_SCALE,
marcbax 0:c643d398cdb6 61 QT_KEY2_PULSE_SCALE,
marcbax 0:c643d398cdb6 62 QT_KEY3_PULSE_SCALE,
marcbax 0:c643d398cdb6 63 QT_KEY4_PULSE_SCALE,
marcbax 0:c643d398cdb6 64 QT_KEY5_PULSE_SCALE,
marcbax 0:c643d398cdb6 65 QT_KEY6_PULSE_SCALE,
marcbax 0:c643d398cdb6 66 QT_KEY7_PULSE_SCALE,
marcbax 0:c643d398cdb6 67 QT_KEY8_PULSE_SCALE,
marcbax 0:c643d398cdb6 68 QT_KEY9_PULSE_SCALE,
marcbax 0:c643d398cdb6 69 QT_KEY10_PULSE_SCALE,
marcbax 0:c643d398cdb6 70 QT_KEY11_PULSE_SCALE,
marcbax 0:c643d398cdb6 71 QT_KEY0_SIGNAL,
marcbax 0:c643d398cdb6 72 QT_KEY1_SIGNAL = 54,
marcbax 0:c643d398cdb6 73 QT_KEY2_SIGNAL = 56,
marcbax 0:c643d398cdb6 74 QT_KEY3_SIGNAL = 58,
marcbax 0:c643d398cdb6 75 QT_KEY4_SIGNAL = 60,
marcbax 0:c643d398cdb6 76 QT_KEY5_SIGNAL = 62,
marcbax 0:c643d398cdb6 77 QT_KEY6_SIGNAL = 64,
marcbax 0:c643d398cdb6 78 QT_KEY7_SIGNAL = 66,
marcbax 0:c643d398cdb6 79 QT_KEY8_SIGNAL = 68,
marcbax 0:c643d398cdb6 80 QT_KEY9_SIGNAL = 70,
marcbax 0:c643d398cdb6 81 QT_KEY10_SIGNAL = 72,
marcbax 0:c643d398cdb6 82 QT_KEY11_SIGNAL = 74,
marcbax 0:c643d398cdb6 83 QT_KEY0_REFERENCE = 76,
marcbax 0:c643d398cdb6 84 QT_KEY1_REFERENCE = 78,
marcbax 0:c643d398cdb6 85 QT_KEY2_REFERENCE = 80,
marcbax 0:c643d398cdb6 86 QT_KEY3_REFERENCE = 82,
marcbax 0:c643d398cdb6 87 QT_KEY4_REFERENCE = 84,
marcbax 0:c643d398cdb6 88 QT_KEY5_REFERENCE = 86,
marcbax 0:c643d398cdb6 89 QT_KEY6_REFERENCE = 88,
marcbax 0:c643d398cdb6 90 QT_KEY7_REFERENCE = 90,
marcbax 0:c643d398cdb6 91 QT_KEY8_REFERENCE = 92,
marcbax 0:c643d398cdb6 92 QT_KEY9_REFERENCE = 94,
marcbax 0:c643d398cdb6 93 QT_KEY10_REFERENCE = 96,
marcbax 0:c643d398cdb6 94 QT_KEY11_REFERENCE = 98,
marcbax 0:c643d398cdb6 95 };
marcbax 0:c643d398cdb6 96
marcbax 0:c643d398cdb6 97 enum SLIDERMODE_AT42QT2120
marcbax 0:c643d398cdb6 98 {
marcbax 0:c643d398cdb6 99 NONE,
marcbax 0:c643d398cdb6 100 SLIDER,
marcbax 0:c643d398cdb6 101 WHEEL
marcbax 0:c643d398cdb6 102 };
marcbax 0:c643d398cdb6 103
marcbax 0:c643d398cdb6 104 // Control register bit positions.
marcbax 0:c643d398cdb6 105 const uint8_t CTRL_EN = (1 << 0);
marcbax 0:c643d398cdb6 106 const uint8_t CTRL_GPO = (1 << 1);
marcbax 0:c643d398cdb6 107 const uint8_t CTRL_GUARD = (1 << 4);
marcbax 0:c643d398cdb6 108
marcbax 0:c643d398cdb6 109 const int KEY0 = (1 << 0);
marcbax 0:c643d398cdb6 110 const int KEY1 = (1 << 1);
marcbax 0:c643d398cdb6 111 const int KEY2 = (1 << 2);
marcbax 0:c643d398cdb6 112 const int KEY3 = (1 << 3);
marcbax 0:c643d398cdb6 113 const int KEY4 = (1 << 4);
marcbax 0:c643d398cdb6 114 const int KEY5 = (1 << 5);
marcbax 0:c643d398cdb6 115 const int KEY6 = (1 << 6);
marcbax 0:c643d398cdb6 116 const int KEY7 = (1 << 7);
marcbax 0:c643d398cdb6 117 const int KEY8 = (1 << 8);
marcbax 0:c643d398cdb6 118 const int KEY9 = (1 << 9);
marcbax 0:c643d398cdb6 119 const int KEY10 = (1 << 10);
marcbax 0:c643d398cdb6 120 const int KEY11 = (1 << 11);
marcbax 0:c643d398cdb6 121
marcbax 0:c643d398cdb6 122 const uint8_t TDET = (1 << 0);
marcbax 0:c643d398cdb6 123 const uint8_t SDET = (1 << 1);
marcbax 0:c643d398cdb6 124
marcbax 0:c643d398cdb6 125 /**
marcbax 0:c643d398cdb6 126 * @brief Atmel AT42QT2120 encapsulation.
marcbax 0:c643d398cdb6 127 * This chip is a 12 channel touch sensor.
marcbax 0:c643d398cdb6 128 *
marcbax 0:c643d398cdb6 129 * Example usage:
marcbax 0:c643d398cdb6 130 <pre>
marcbax 0:c643d398cdb6 131 I2C i2c(p28, p27);
marcbax 0:c643d398cdb6 132 AT42QT2120 at42qt2120(i2c);
marcbax 0:c643d398cdb6 133 ...
marcbax 0:c643d398cdb6 134 at42qt2120.Write(QT_RESET, 0);
marcbax 0:c643d398cdb6 135 </pre>
marcbax 0:c643d398cdb6 136 *
marcbax 0:c643d398cdb6 137 * The AT42QT2120 uses pins 28 and 27 (SDA and SCL) for communication
marcbax 0:c643d398cdb6 138 * and the write command resets the chip.
marcbax 0:c643d398cdb6 139 *
marcbax 0:c643d398cdb6 140 * The chip address of the AT42QT2120 is fixed at 0x1c.
marcbax 0:c643d398cdb6 141 *
marcbax 0:c643d398cdb6 142 * Note that this code example does not cover the setup of the chip
marcbax 0:c643d398cdb6 143 * configuration registers.
marcbax 0:c643d398cdb6 144 */
marcbax 0:c643d398cdb6 145 class AT42QT2120
marcbax 0:c643d398cdb6 146 {
marcbax 0:c643d398cdb6 147 public:
marcbax 0:c643d398cdb6 148 /**
marcbax 0:c643d398cdb6 149 * @brief Constructor.
marcbax 0:c643d398cdb6 150 * @param I2C the I2C to use for communication.
marcbax 0:c643d398cdb6 151 */
marcbax 0:c643d398cdb6 152 AT42QT2120(I2C &i2c);
marcbax 0:c643d398cdb6 153
marcbax 0:c643d398cdb6 154 /**
marcbax 0:c643d398cdb6 155 * @brief Calibrate any enabled touch sensors.
marcbax 0:c643d398cdb6 156 * @return True if calibration was successfull.
marcbax 0:c643d398cdb6 157 */
marcbax 0:c643d398cdb6 158 bool Calibrate();
marcbax 0:c643d398cdb6 159
marcbax 0:c643d398cdb6 160 /**
marcbax 0:c643d398cdb6 161 * @brief Set the key control bits.
marcbax 0:c643d398cdb6 162 * See section 5.17 of the datasheet for more information.
marcbax 0:c643d398cdb6 163 * All keys are initially disabled in the constructor so this
marcbax 0:c643d398cdb6 164 * function must be called to configure the keys before use.
marcbax 0:c643d398cdb6 165 * After calling this function you should call Calibrate().
marcbax 0:c643d398cdb6 166 * @param key The key to configure.
marcbax 0:c643d398cdb6 167 * @param guard Set to true if this is a guard channel.
marcbax 0:c643d398cdb6 168 * @param group The key group (AKS) number.
marcbax 0:c643d398cdb6 169 * @param gpu Set to true for high output.
marcbax 0:c643d398cdb6 170 * @param enable Enable this key. Unused keys should be disabled.
marcbax 0:c643d398cdb6 171 */
marcbax 0:c643d398cdb6 172 bool SetKeyControl(uint8_t key, bool guard, uint8_t group, bool gpo, bool enable);
marcbax 0:c643d398cdb6 173
marcbax 0:c643d398cdb6 174 /**
marcbax 0:c643d398cdb6 175 * @brief Set the slider options.
marcbax 0:c643d398cdb6 176 * @param Set to SLIDER, WHEEL or NONE to set the required mode.
marcbax 0:c643d398cdb6 177 */
marcbax 0:c643d398cdb6 178 void SetSliderOptions(SLIDERMODE_AT42QT2120 mode);
marcbax 0:c643d398cdb6 179
marcbax 0:c643d398cdb6 180 /**
marcbax 0:c643d398cdb6 181 * @brief Touch sensor status.
marcbax 0:c643d398cdb6 182 */
marcbax 0:c643d398cdb6 183 struct Status
marcbax 0:c643d398cdb6 184 {
marcbax 0:c643d398cdb6 185 /**
marcbax 0:c643d398cdb6 186 * @brief True if the keys have changed.
marcbax 0:c643d398cdb6 187 */
marcbax 0:c643d398cdb6 188 bool keyschanged;
marcbax 0:c643d398cdb6 189
marcbax 0:c643d398cdb6 190 /**
marcbax 0:c643d398cdb6 191 * @brief The key change bit mask.
marcbax 0:c643d398cdb6 192 * Use KEYn to extract the individual key status.
marcbax 0:c643d398cdb6 193 */
marcbax 0:c643d398cdb6 194 uint16_t keys;
marcbax 0:c643d398cdb6 195
marcbax 0:c643d398cdb6 196 /**
marcbax 0:c643d398cdb6 197 * @brief True if the slider has changed.
marcbax 0:c643d398cdb6 198 */
marcbax 0:c643d398cdb6 199 bool sliderchanged;
marcbax 0:c643d398cdb6 200
marcbax 0:c643d398cdb6 201 /**
marcbax 0:c643d398cdb6 202 * @brief The slider position.
marcbax 0:c643d398cdb6 203 */
marcbax 0:c643d398cdb6 204 bool slider;
marcbax 0:c643d398cdb6 205 };
marcbax 0:c643d398cdb6 206
marcbax 0:c643d398cdb6 207 /**
marcbax 0:c643d398cdb6 208 * @brief Read the status of the touch sensor.
marcbax 0:c643d398cdb6 209 * @param status Pointer to hold the status information.
marcbax 0:c643d398cdb6 210 * @return True if the transfer completes successfully.
marcbax 0:c643d398cdb6 211 */
marcbax 0:c643d398cdb6 212 bool ReadStatus(Status &status);
marcbax 0:c643d398cdb6 213
marcbax 0:c643d398cdb6 214 /**
marcbax 0:c643d398cdb6 215 * @brief Read a register.
marcbax 0:c643d398cdb6 216 * @param reg The register to read.
marcbax 0:c643d398cdb6 217 * @return The register value.
marcbax 0:c643d398cdb6 218 */
marcbax 0:c643d398cdb6 219 int Read(REG_AT42QT2120 reg);
marcbax 0:c643d398cdb6 220
marcbax 0:c643d398cdb6 221 /**
marcbax 0:c643d398cdb6 222 * @brief Write a register.
marcbax 0:c643d398cdb6 223 * @param reg The register to write.
marcbax 0:c643d398cdb6 224 * @param value The value to write to the register.
marcbax 0:c643d398cdb6 225 * @return True on success.
marcbax 0:c643d398cdb6 226 */
marcbax 0:c643d398cdb6 227 bool Write(REG_AT42QT2120 reg, uint8_t value);
marcbax 0:c643d398cdb6 228
marcbax 0:c643d398cdb6 229 private:
marcbax 0:c643d398cdb6 230 I2C &i2c;
marcbax 0:c643d398cdb6 231 Status status;
marcbax 0:c643d398cdb6 232 };
marcbax 0:c643d398cdb6 233
marcbax 0:c643d398cdb6 234 } // End HAL namespace.
marcbax 0:c643d398cdb6 235
marcbax 0:c643d398cdb6 236 #endif // MCP23S17_H