Added HangmanGame class, but does not work yet

Dependencies:   SDFileSystem app epson mbed msp430 pl tests

Committer:
markpsymonds
Date:
Mon Dec 04 20:15:18 2017 +0000
Revision:
1:a5ec6f9dcf0d
Parent:
0:fa7450a43b99
Fixed most compile issues in hangman.cpp/.h.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-FlexBook 0:fa7450a43b99 1 /*
group-FlexBook 0:fa7450a43b99 2 Plastic Logic EPD project on MSP430
group-FlexBook 0:fa7450a43b99 3
group-FlexBook 0:fa7450a43b99 4 Copyright (C) 2013, 2014 Plastic Logic Limited
group-FlexBook 0:fa7450a43b99 5
group-FlexBook 0:fa7450a43b99 6 This program is free software: you can redistribute it and/or modify
group-FlexBook 0:fa7450a43b99 7 it under the terms of the GNU General Public License as published by
group-FlexBook 0:fa7450a43b99 8 the Free Software Foundation, either version 3 of the License, or
group-FlexBook 0:fa7450a43b99 9 (at your option) any later version.
group-FlexBook 0:fa7450a43b99 10
group-FlexBook 0:fa7450a43b99 11 This program is distributed in the hope that it will be useful,
group-FlexBook 0:fa7450a43b99 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
group-FlexBook 0:fa7450a43b99 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
group-FlexBook 0:fa7450a43b99 14 GNU General Public License for more details.
group-FlexBook 0:fa7450a43b99 15
group-FlexBook 0:fa7450a43b99 16 You should have received a copy of the GNU General Public License
group-FlexBook 0:fa7450a43b99 17 along with this program. If not, see <http://www.gnu.org/licenses/>.
group-FlexBook 0:fa7450a43b99 18 */
group-FlexBook 0:fa7450a43b99 19 /*
group-FlexBook 0:fa7450a43b99 20 * pmic-tps65185.c -- Driver for TI TPS65185 PMIC
group-FlexBook 0:fa7450a43b99 21 *
group-FlexBook 0:fa7450a43b99 22 * Authors:
group-FlexBook 0:fa7450a43b99 23 * Nick Terry <nick.terry@plasticlogic.com>
group-FlexBook 0:fa7450a43b99 24 * Guillaume Tucker <guillaume.tucker@plasticlogic.com>
group-FlexBook 0:fa7450a43b99 25 *
group-FlexBook 0:fa7450a43b99 26 */
group-FlexBook 0:fa7450a43b99 27
group-FlexBook 0:fa7450a43b99 28 #include <stdlib.h>
group-FlexBook 0:fa7450a43b99 29 #include "assert.h"
group-FlexBook 0:fa7450a43b99 30 #include "pmic-tps65185.h"
group-FlexBook 0:fa7450a43b99 31 #include "vcom.h"
group-FlexBook 0:fa7450a43b99 32
group-FlexBook 0:fa7450a43b99 33 #define lOG printf
group-FlexBook 0:fa7450a43b99 34
group-FlexBook 0:fa7450a43b99 35 #define LOG_TAG "tps65185"
group-FlexBook 0:fa7450a43b99 36 #include "utils.h"
group-FlexBook 0:fa7450a43b99 37
group-FlexBook 0:fa7450a43b99 38 /* Set to 1 to dump registers */
group-FlexBook 0:fa7450a43b99 39 #define DO_REG_DUMP 0
group-FlexBook 0:fa7450a43b99 40
group-FlexBook 0:fa7450a43b99 41 #define HVPMIC_DAC_MAX ((1 << 9)-1)
group-FlexBook 0:fa7450a43b99 42 #define HVPMIC_DAC_MIN 0
group-FlexBook 0:fa7450a43b99 43 #define HVPMIC_TEMP_DEFAULT 20
group-FlexBook 0:fa7450a43b99 44 #define HVPMIC_VERSION 0x65
group-FlexBook 0:fa7450a43b99 45
group-FlexBook 0:fa7450a43b99 46 #if 0
group-FlexBook 0:fa7450a43b99 47 #define MV_DIV 33 // Each DAC step is 33mV
group-FlexBook 0:fa7450a43b99 48 #endif
group-FlexBook 0:fa7450a43b99 49
group-FlexBook 0:fa7450a43b99 50 enum tps65185_register {
group-FlexBook 0:fa7450a43b99 51 HVPMIC_REG_TMST_VALUE = 0x00,
group-FlexBook 0:fa7450a43b99 52 HVPMIC_REG_ENABLE = 0x01,
group-FlexBook 0:fa7450a43b99 53 HVPMIC_REG_VADJ = 0x02,
group-FlexBook 0:fa7450a43b99 54 HVPMIC_REG_VCOM1 = 0x03,
group-FlexBook 0:fa7450a43b99 55 HVPMIC_REG_VCOM2 = 0x04,
group-FlexBook 0:fa7450a43b99 56 HVPMIC_REG_INT_EN1 = 0x05,
group-FlexBook 0:fa7450a43b99 57 HVPMIC_REG_INT_EN2 = 0x06,
group-FlexBook 0:fa7450a43b99 58 HVPMIC_REG_INT1 = 0x07,
group-FlexBook 0:fa7450a43b99 59 HVPMIC_REG_INT2 = 0x08,
group-FlexBook 0:fa7450a43b99 60 HVPMIC_REG_UPSEQ0 = 0x09,
group-FlexBook 0:fa7450a43b99 61 HVPMIC_REG_UPSEQ1 = 0x0A,
group-FlexBook 0:fa7450a43b99 62 HVPMIC_REG_DWNSEQ0 = 0x0B,
group-FlexBook 0:fa7450a43b99 63 HVPMIC_REG_DWNSEQ1 = 0x0C,
group-FlexBook 0:fa7450a43b99 64 HVPMIC_REG_TMST1 = 0x0D,
group-FlexBook 0:fa7450a43b99 65 HVPMIC_REG_TMST2 = 0x0E,
group-FlexBook 0:fa7450a43b99 66 HVPMIC_REG_PG_STAT = 0x0F,
group-FlexBook 0:fa7450a43b99 67 HVPMIC_REG_REV_ID = 0x10,
group-FlexBook 0:fa7450a43b99 68 HVPMIC_REG_MAX
group-FlexBook 0:fa7450a43b99 69 };
group-FlexBook 0:fa7450a43b99 70
group-FlexBook 0:fa7450a43b99 71 union tps65185_version {
group-FlexBook 0:fa7450a43b99 72 struct {
group-FlexBook 0:fa7450a43b99 73 char version:4;
group-FlexBook 0:fa7450a43b99 74 char minor:2;
group-FlexBook 0:fa7450a43b99 75 char major:2;
group-FlexBook 0:fa7450a43b99 76 } v;
group-FlexBook 0:fa7450a43b99 77 uint8_t byte;
group-FlexBook 0:fa7450a43b99 78 };
group-FlexBook 0:fa7450a43b99 79
group-FlexBook 0:fa7450a43b99 80 struct pmic_data {
group-FlexBook 0:fa7450a43b99 81 uint8_t reg;
group-FlexBook 0:fa7450a43b99 82 uint8_t data;
group-FlexBook 0:fa7450a43b99 83 };
group-FlexBook 0:fa7450a43b99 84
group-FlexBook 0:fa7450a43b99 85 static const struct pmic_data init_data[] = {
group-FlexBook 0:fa7450a43b99 86 { HVPMIC_REG_ENABLE, 0x00 },
group-FlexBook 0:fa7450a43b99 87 { HVPMIC_REG_VADJ, 0x03 },
group-FlexBook 0:fa7450a43b99 88 { HVPMIC_REG_VCOM1, 0x00 },
group-FlexBook 0:fa7450a43b99 89 { HVPMIC_REG_VCOM2, 0x00 },
group-FlexBook 0:fa7450a43b99 90 { HVPMIC_REG_INT_EN1, 0x00 },
group-FlexBook 0:fa7450a43b99 91 { HVPMIC_REG_INT_EN2, 0x00 },
group-FlexBook 0:fa7450a43b99 92 { HVPMIC_REG_UPSEQ0, 0x78 },
group-FlexBook 0:fa7450a43b99 93 { HVPMIC_REG_UPSEQ1, 0x00 },
group-FlexBook 0:fa7450a43b99 94 { HVPMIC_REG_DWNSEQ0, 0x00 },
group-FlexBook 0:fa7450a43b99 95 { HVPMIC_REG_DWNSEQ1, 0x00 },
group-FlexBook 0:fa7450a43b99 96 { HVPMIC_REG_TMST1, 0x00 },
group-FlexBook 0:fa7450a43b99 97 { HVPMIC_REG_TMST2, 0x78 }
group-FlexBook 0:fa7450a43b99 98 };
group-FlexBook 0:fa7450a43b99 99
group-FlexBook 0:fa7450a43b99 100 int pl_i2c_reg_read_8(I2C &i2c, uint8_t i2c_addr, uint8_t reg, uint8_t *data)
group-FlexBook 0:fa7450a43b99 101 {
group-FlexBook 0:fa7450a43b99 102 if (i2c.write(i2c_addr << 1, (char *) &reg, 1, true))
group-FlexBook 0:fa7450a43b99 103 {
group-FlexBook 0:fa7450a43b99 104 unsigned int log_addr = i2c_addr;
group-FlexBook 0:fa7450a43b99 105 unsigned int log_reg = reg;
group-FlexBook 0:fa7450a43b99 106
group-FlexBook 0:fa7450a43b99 107 LOG("error writing I2C address %x register %x in pl_i2c_reg_read_8", log_addr, log_reg);
group-FlexBook 0:fa7450a43b99 108 i2c.stop();
group-FlexBook 0:fa7450a43b99 109 return -1;
group-FlexBook 0:fa7450a43b99 110 }
group-FlexBook 0:fa7450a43b99 111
group-FlexBook 0:fa7450a43b99 112 return i2c.read(i2c_addr << 1, (char *) data, 1);
group-FlexBook 0:fa7450a43b99 113 }
group-FlexBook 0:fa7450a43b99 114
group-FlexBook 0:fa7450a43b99 115 /* Note: reading some registers will modify the status of the device */
group-FlexBook 0:fa7450a43b99 116 void reg_dump(struct tps65185_info *p)
group-FlexBook 0:fa7450a43b99 117 {
group-FlexBook 0:fa7450a43b99 118 uint8_t data;
group-FlexBook 0:fa7450a43b99 119 uint8_t reg;
group-FlexBook 0:fa7450a43b99 120
group-FlexBook 0:fa7450a43b99 121 for (reg = HVPMIC_REG_TMST_VALUE; reg < HVPMIC_REG_MAX; reg++) {
group-FlexBook 0:fa7450a43b99 122 if (!pl_i2c_reg_read_8(*p->i2c, p->i2c_addr, reg, &data))
group-FlexBook 0:fa7450a43b99 123 LOG("reg[0x%02X] = 0x%02X", reg, data);
group-FlexBook 0:fa7450a43b99 124 }
group-FlexBook 0:fa7450a43b99 125 }
group-FlexBook 0:fa7450a43b99 126
group-FlexBook 0:fa7450a43b99 127 int pl_i2c_reg_write_8(I2C &i2c, uint8_t i2c_addr, uint8_t reg,
group-FlexBook 0:fa7450a43b99 128 uint8_t data)
group-FlexBook 0:fa7450a43b99 129 {
group-FlexBook 0:fa7450a43b99 130 const uint8_t w_data[2] = { reg, data };
group-FlexBook 0:fa7450a43b99 131
group-FlexBook 0:fa7450a43b99 132 int status = i2c.write(i2c_addr << 1, (char *) w_data, sizeof(w_data));
group-FlexBook 0:fa7450a43b99 133 if(status)
group-FlexBook 0:fa7450a43b99 134 {
group-FlexBook 0:fa7450a43b99 135 unsigned int log_addr = i2c_addr;
group-FlexBook 0:fa7450a43b99 136 unsigned int log_reg = reg;
group-FlexBook 0:fa7450a43b99 137
group-FlexBook 0:fa7450a43b99 138 LOG("error writing I2C address %x register %x in pl_i2c_reg_write_8", log_addr, log_reg);
group-FlexBook 0:fa7450a43b99 139 return -1;
group-FlexBook 0:fa7450a43b99 140 }
group-FlexBook 0:fa7450a43b99 141 return status;
group-FlexBook 0:fa7450a43b99 142 }
group-FlexBook 0:fa7450a43b99 143
group-FlexBook 0:fa7450a43b99 144 int tps65185_init(struct tps65185_info *p, I2C &i2c,
group-FlexBook 0:fa7450a43b99 145 uint8_t i2c_addr, const struct vcom_cal *cal)
group-FlexBook 0:fa7450a43b99 146 {
group-FlexBook 0:fa7450a43b99 147 union tps65185_version ver;
group-FlexBook 0:fa7450a43b99 148 int i;
group-FlexBook 0:fa7450a43b99 149
group-FlexBook 0:fa7450a43b99 150 p->i2c = &i2c;
group-FlexBook 0:fa7450a43b99 151 p->i2c_addr = i2c_addr;
group-FlexBook 0:fa7450a43b99 152 p->cal = cal; /* Cal may be NULL if not being used */
group-FlexBook 0:fa7450a43b99 153
group-FlexBook 0:fa7450a43b99 154 if (pl_i2c_reg_read_8(i2c, i2c_addr, HVPMIC_REG_REV_ID, &ver.byte))
group-FlexBook 0:fa7450a43b99 155 return -1;
group-FlexBook 0:fa7450a43b99 156
group-FlexBook 0:fa7450a43b99 157 LOG("Version: %d.%d.%d", ver.v.major, ver.v.minor, ver.v.version);
group-FlexBook 0:fa7450a43b99 158
group-FlexBook 0:fa7450a43b99 159 if (ver.byte != HVPMIC_VERSION) {
group-FlexBook 0:fa7450a43b99 160 LOG("Wrong version: 0x%02X instead of 0x%02X",
group-FlexBook 0:fa7450a43b99 161 ver.byte, HVPMIC_VERSION);
group-FlexBook 0:fa7450a43b99 162 return -1;
group-FlexBook 0:fa7450a43b99 163 }
group-FlexBook 0:fa7450a43b99 164
group-FlexBook 0:fa7450a43b99 165 for (i = 0; i < ARRAY_SIZE(init_data); i++) {
group-FlexBook 0:fa7450a43b99 166 if (pl_i2c_reg_write_8(i2c, i2c_addr, init_data[i].reg, init_data[i].data))
group-FlexBook 0:fa7450a43b99 167 return -1;
group-FlexBook 0:fa7450a43b99 168 }
group-FlexBook 0:fa7450a43b99 169
group-FlexBook 0:fa7450a43b99 170 return 0;
group-FlexBook 0:fa7450a43b99 171 }
group-FlexBook 0:fa7450a43b99 172
group-FlexBook 0:fa7450a43b99 173 /* program the internal VCOM Dac to give us the required voltage */
group-FlexBook 0:fa7450a43b99 174 int tps65185_set_vcom_voltage(struct tps65185_info *p, int mv)
group-FlexBook 0:fa7450a43b99 175 {
group-FlexBook 0:fa7450a43b99 176 int dac_value;
group-FlexBook 0:fa7450a43b99 177 uint8_t v1;
group-FlexBook 0:fa7450a43b99 178 uint8_t v2;
group-FlexBook 0:fa7450a43b99 179
group-FlexBook 0:fa7450a43b99 180 assert(p != NULL);
group-FlexBook 0:fa7450a43b99 181
group-FlexBook 0:fa7450a43b99 182 dac_value = vcom_calculate(p->cal, mv);
group-FlexBook 0:fa7450a43b99 183
group-FlexBook 0:fa7450a43b99 184 if (dac_value < HVPMIC_DAC_MIN)
group-FlexBook 0:fa7450a43b99 185 dac_value = HVPMIC_DAC_MIN;
group-FlexBook 0:fa7450a43b99 186 else if (dac_value > HVPMIC_DAC_MAX)
group-FlexBook 0:fa7450a43b99 187 dac_value = HVPMIC_DAC_MAX;
group-FlexBook 0:fa7450a43b99 188
group-FlexBook 0:fa7450a43b99 189 v1 = dac_value & 0x00FF;
group-FlexBook 0:fa7450a43b99 190 v2 = ((dac_value >> 8) & 0x0001);
group-FlexBook 0:fa7450a43b99 191
group-FlexBook 0:fa7450a43b99 192 if (pl_i2c_reg_write_8(*p->i2c, p->i2c_addr, HVPMIC_REG_VCOM1, v1))
group-FlexBook 0:fa7450a43b99 193 return -1;
group-FlexBook 0:fa7450a43b99 194
group-FlexBook 0:fa7450a43b99 195 return pl_i2c_reg_write_8(*p->i2c, p->i2c_addr, HVPMIC_REG_VCOM2, v2);
group-FlexBook 0:fa7450a43b99 196 }