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 // Filename: at42qt2120.cpp
group-FlexBook 0:fa7450a43b99 3 //
group-FlexBook 0:fa7450a43b99 4 // Atmel AT42QT2120 12 channel touch sensor.
group-FlexBook 0:fa7450a43b99 5 //
group-FlexBook 0:fa7450a43b99 6
group-FlexBook 0:fa7450a43b99 7 #include "at42qt2120.h"
group-FlexBook 0:fa7450a43b99 8
group-FlexBook 0:fa7450a43b99 9 #include "log.h"
group-FlexBook 0:fa7450a43b99 10
group-FlexBook 0:fa7450a43b99 11 namespace HAL {
group-FlexBook 0:fa7450a43b99 12
group-FlexBook 0:fa7450a43b99 13 // This chip has a singe fixed I2C address.
group-FlexBook 0:fa7450a43b99 14 const int ADDRESS = 0x1c;
group-FlexBook 0:fa7450a43b99 15
group-FlexBook 0:fa7450a43b99 16 // Chip Id hardcoded in the silicon.
group-FlexBook 0:fa7450a43b99 17 const int AT42QT2120_ID = 0x3e;
group-FlexBook 0:fa7450a43b99 18
group-FlexBook 0:fa7450a43b99 19 AT42QT2120::AT42QT2120(I2C &i2cin)
group-FlexBook 0:fa7450a43b99 20 : i2c(i2cin)
group-FlexBook 0:fa7450a43b99 21 {
group-FlexBook 0:fa7450a43b99 22 #ifdef VERBOSE
group-FlexBook 0:fa7450a43b99 23 if(Read((REG_AT42QT2120) QT_CHIP_ID) != AT42QT2120_ID)
group-FlexBook 0:fa7450a43b99 24 Log("AT42QT2120 bad chip id");
group-FlexBook 0:fa7450a43b99 25 else
group-FlexBook 0:fa7450a43b99 26 Log("AT42QT2120 chip id: Ok");
group-FlexBook 0:fa7450a43b99 27
group-FlexBook 0:fa7450a43b99 28 char version[20];
group-FlexBook 0:fa7450a43b99 29 int ver = Read((REG_AT42QT2120) QT_FIRMWARE_VERSION);
group-FlexBook 0:fa7450a43b99 30 sprintf(version, "AT42QT2120 version: %u.%u", ver >> 4, ver & 0x0f);
group-FlexBook 0:fa7450a43b99 31 Log(version);
group-FlexBook 0:fa7450a43b99 32 #endif
group-FlexBook 0:fa7450a43b99 33
group-FlexBook 0:fa7450a43b99 34 for(uint8_t key = 0; key < 12; key++)
group-FlexBook 0:fa7450a43b99 35 SetKeyControl(key, false, 0, false, false);
group-FlexBook 0:fa7450a43b99 36
group-FlexBook 0:fa7450a43b99 37 Calibrate();
group-FlexBook 0:fa7450a43b99 38 }
group-FlexBook 0:fa7450a43b99 39
group-FlexBook 0:fa7450a43b99 40 bool AT42QT2120::ReadStatus(Status &status)
group-FlexBook 0:fa7450a43b99 41 {
group-FlexBook 0:fa7450a43b99 42 char buffer[4];
group-FlexBook 0:fa7450a43b99 43
group-FlexBook 0:fa7450a43b99 44 buffer[0] = Read(QT_DETECTION_STATUS);
group-FlexBook 0:fa7450a43b99 45 buffer[1] = Read(QT_KEY_STATUS);
group-FlexBook 0:fa7450a43b99 46 buffer[2] = Read(QT_KEY_STATUS2);
group-FlexBook 0:fa7450a43b99 47 buffer[3] = Read(QT_SLIDER_POSITION);
group-FlexBook 0:fa7450a43b99 48
group-FlexBook 0:fa7450a43b99 49 #ifdef VERBOSE
group-FlexBook 0:fa7450a43b99 50 char msg[32];
group-FlexBook 0:fa7450a43b99 51 sprintf(msg, "Touch: %x %x %x %x", buffer[0], buffer[1], buffer[2], buffer[3]);
group-FlexBook 0:fa7450a43b99 52 #endif
group-FlexBook 0:fa7450a43b99 53
group-FlexBook 0:fa7450a43b99 54 status.keyschanged = (buffer[0] & TDET) != 0;
group-FlexBook 0:fa7450a43b99 55 status.keys = buffer[2];
group-FlexBook 0:fa7450a43b99 56 status.keys = status.keys << 8;
group-FlexBook 0:fa7450a43b99 57 status.keys += buffer[1];
group-FlexBook 0:fa7450a43b99 58
group-FlexBook 0:fa7450a43b99 59 status.sliderchanged = (buffer[0] & SDET) != 0;
group-FlexBook 0:fa7450a43b99 60 status.slider = buffer[3];
group-FlexBook 0:fa7450a43b99 61
group-FlexBook 0:fa7450a43b99 62 return true;
group-FlexBook 0:fa7450a43b99 63 }
group-FlexBook 0:fa7450a43b99 64
group-FlexBook 0:fa7450a43b99 65 bool AT42QT2120::Calibrate()
group-FlexBook 0:fa7450a43b99 66 {
group-FlexBook 0:fa7450a43b99 67 #ifdef VERBOSE
group-FlexBook 0:fa7450a43b99 68 Log("AT42QT2120 calibration start");
group-FlexBook 0:fa7450a43b99 69 #endif
group-FlexBook 0:fa7450a43b99 70
group-FlexBook 0:fa7450a43b99 71 bool status = Write(QT_CALIBRATE, 0xff);
group-FlexBook 0:fa7450a43b99 72 if(status)
group-FlexBook 0:fa7450a43b99 73 {
group-FlexBook 0:fa7450a43b99 74 while(Read(QT_DETECTION_STATUS) & 0x80);
group-FlexBook 0:fa7450a43b99 75 }
group-FlexBook 0:fa7450a43b99 76
group-FlexBook 0:fa7450a43b99 77 #ifdef VERBOSE
group-FlexBook 0:fa7450a43b99 78 if(status)
group-FlexBook 0:fa7450a43b99 79 Log("AT42QT2120 calibration finish");
group-FlexBook 0:fa7450a43b99 80 else
group-FlexBook 0:fa7450a43b99 81 Log("AT42QT2120 calibration fail");
group-FlexBook 0:fa7450a43b99 82 #endif
group-FlexBook 0:fa7450a43b99 83 return status;
group-FlexBook 0:fa7450a43b99 84 }
group-FlexBook 0:fa7450a43b99 85
group-FlexBook 0:fa7450a43b99 86 bool AT42QT2120::SetKeyControl(uint8_t key, bool guard, uint8_t group, bool gpo, bool enable)
group-FlexBook 0:fa7450a43b99 87 {
group-FlexBook 0:fa7450a43b99 88 bool status = false;
group-FlexBook 0:fa7450a43b99 89
group-FlexBook 0:fa7450a43b99 90 if(key < 12 && group < 4)
group-FlexBook 0:fa7450a43b99 91 {
group-FlexBook 0:fa7450a43b99 92 uint8_t config = 0;
group-FlexBook 0:fa7450a43b99 93 if(!enable)
group-FlexBook 0:fa7450a43b99 94 config |= CTRL_EN;
group-FlexBook 0:fa7450a43b99 95 if(gpo)
group-FlexBook 0:fa7450a43b99 96 config |= CTRL_GPO;
group-FlexBook 0:fa7450a43b99 97 if(group)
group-FlexBook 0:fa7450a43b99 98 config |= group << 2;
group-FlexBook 0:fa7450a43b99 99 if(guard)
group-FlexBook 0:fa7450a43b99 100 config |= CTRL_GUARD;
group-FlexBook 0:fa7450a43b99 101
group-FlexBook 0:fa7450a43b99 102 uint8_t reg = key + 28; // 28 = QT_KEY0_CTRL
group-FlexBook 0:fa7450a43b99 103 status = Write((HAL::REG_AT42QT2120) reg, config);
group-FlexBook 0:fa7450a43b99 104 }
group-FlexBook 0:fa7450a43b99 105
group-FlexBook 0:fa7450a43b99 106 return status;
group-FlexBook 0:fa7450a43b99 107 }
group-FlexBook 0:fa7450a43b99 108
group-FlexBook 0:fa7450a43b99 109 void AT42QT2120::SetSliderOptions(SLIDERMODE_AT42QT2120 mode)
group-FlexBook 0:fa7450a43b99 110 {
group-FlexBook 0:fa7450a43b99 111 switch(mode)
group-FlexBook 0:fa7450a43b99 112 {
group-FlexBook 0:fa7450a43b99 113 case SLIDER:
group-FlexBook 0:fa7450a43b99 114 Write(QT_SLIDER_OPTION, 0x80);
group-FlexBook 0:fa7450a43b99 115 break;
group-FlexBook 0:fa7450a43b99 116
group-FlexBook 0:fa7450a43b99 117 case WHEEL:
group-FlexBook 0:fa7450a43b99 118 Write(QT_SLIDER_OPTION, 0xc0);
group-FlexBook 0:fa7450a43b99 119 break;
group-FlexBook 0:fa7450a43b99 120
group-FlexBook 0:fa7450a43b99 121 default:
group-FlexBook 0:fa7450a43b99 122 Write(QT_SLIDER_OPTION, 0x0);
group-FlexBook 0:fa7450a43b99 123 break;
group-FlexBook 0:fa7450a43b99 124 }
group-FlexBook 0:fa7450a43b99 125 }
group-FlexBook 0:fa7450a43b99 126
group-FlexBook 0:fa7450a43b99 127 int AT42QT2120::Read(REG_AT42QT2120 reg)
group-FlexBook 0:fa7450a43b99 128 {
group-FlexBook 0:fa7450a43b99 129 if(i2c.write(ADDRESS << 1, (const char *) &reg, 1, true))
group-FlexBook 0:fa7450a43b99 130 {
group-FlexBook 0:fa7450a43b99 131 i2c.stop();
group-FlexBook 0:fa7450a43b99 132 return 0;
group-FlexBook 0:fa7450a43b99 133 }
group-FlexBook 0:fa7450a43b99 134
group-FlexBook 0:fa7450a43b99 135 char data[2];
group-FlexBook 0:fa7450a43b99 136 i2c.read(ADDRESS << 1, data, 1);
group-FlexBook 0:fa7450a43b99 137
group-FlexBook 0:fa7450a43b99 138 return data[0];
group-FlexBook 0:fa7450a43b99 139 }
group-FlexBook 0:fa7450a43b99 140
group-FlexBook 0:fa7450a43b99 141 bool AT42QT2120::Write(REG_AT42QT2120 reg, uint8_t value)
group-FlexBook 0:fa7450a43b99 142 {
group-FlexBook 0:fa7450a43b99 143 uint8_t regnum = reg;
group-FlexBook 0:fa7450a43b99 144 const char data[2] = { regnum, value };
group-FlexBook 0:fa7450a43b99 145
group-FlexBook 0:fa7450a43b99 146 return i2c.write(ADDRESS << 1, data, 2) == 0;
group-FlexBook 0:fa7450a43b99 147 }
group-FlexBook 0:fa7450a43b99 148
group-FlexBook 0:fa7450a43b99 149 } // End HAL namespace.
group-FlexBook 0:fa7450a43b99 150