Richard Parker / EALCD
Committer:
richardparker
Date:
Mon Apr 26 21:37:54 2010 +0000
Revision:
4:f8f7f4f9c58d
Parent:
3:24fbf4dbd7e5
Child:
7:6cf21b018420

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
richardparker 3:24fbf4dbd7e5 1 // Copyright 2010 Richard Parker
richardparker 3:24fbf4dbd7e5 2
richardparker 3:24fbf4dbd7e5 3 #include "mbed.h"
richardparker 3:24fbf4dbd7e5 4
richardparker 3:24fbf4dbd7e5 5 #include "EASettings.h"
richardparker 3:24fbf4dbd7e5 6
richardparker 3:24fbf4dbd7e5 7 #include "../screen/EALCD.h"
richardparker 3:24fbf4dbd7e5 8 #include "../screen/EATouch.h"
richardparker 3:24fbf4dbd7e5 9 #include "../manager/EATouchManager.h"
richardparker 3:24fbf4dbd7e5 10 #include "../widgets/EAButton.h"
richardparker 4:f8f7f4f9c58d 11 #include "../widgets/EACompass.h"
richardparker 3:24fbf4dbd7e5 12
richardparker 4:f8f7f4f9c58d 13 #include "HMC6352.h"
richardparker 4:f8f7f4f9c58d 14
richardparker 4:f8f7f4f9c58d 15 EASettings::EASettings(EALCD& lcd, EATouch& touch, EATouchManager& manager, HMC6352& compass)
richardparker 3:24fbf4dbd7e5 16 : _lcd(lcd),
richardparker 3:24fbf4dbd7e5 17 _touch(touch),
richardparker 3:24fbf4dbd7e5 18 _manager(manager),
richardparker 4:f8f7f4f9c58d 19 _compass(compass),
richardparker 3:24fbf4dbd7e5 20 _time(NULL),
richardparker 4:f8f7f4f9c58d 21 _compassCircle(NULL),
richardparker 3:24fbf4dbd7e5 22 _launchBox(NULL),
richardparker 3:24fbf4dbd7e5 23 _returnBox(NULL),
richardparker 3:24fbf4dbd7e5 24 _touchBox(NULL),
richardparker 3:24fbf4dbd7e5 25 _dateBox(NULL),
richardparker 3:24fbf4dbd7e5 26 _compassBox(NULL),
richardparker 3:24fbf4dbd7e5 27 _nextBox(NULL),
richardparker 3:24fbf4dbd7e5 28 _prevBox(NULL),
richardparker 3:24fbf4dbd7e5 29 _incBox(NULL),
richardparker 3:24fbf4dbd7e5 30 _decBox(NULL),
richardparker 3:24fbf4dbd7e5 31 _state(EASettings::STATE_ENDED)
richardparker 3:24fbf4dbd7e5 32 {
richardparker 3:24fbf4dbd7e5 33 // Actually start the RTC without this call RTC is not running.
richardparker 3:24fbf4dbd7e5 34 set_time(0);
richardparker 3:24fbf4dbd7e5 35 time_t seconds = time(NULL);
richardparker 3:24fbf4dbd7e5 36 _time = localtime(&seconds);
richardparker 3:24fbf4dbd7e5 37 }
richardparker 3:24fbf4dbd7e5 38
richardparker 3:24fbf4dbd7e5 39 EASettings::~EASettings()
richardparker 3:24fbf4dbd7e5 40 {
richardparker 3:24fbf4dbd7e5 41 }
richardparker 3:24fbf4dbd7e5 42
richardparker 3:24fbf4dbd7e5 43 void EASettings::start()
richardparker 3:24fbf4dbd7e5 44 {
richardparker 3:24fbf4dbd7e5 45 _state = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 46 _drawLaunchButton();
richardparker 3:24fbf4dbd7e5 47 }
richardparker 3:24fbf4dbd7e5 48
richardparker 4:f8f7f4f9c58d 49 void EASettings::tick()
richardparker 4:f8f7f4f9c58d 50 {
richardparker 4:f8f7f4f9c58d 51 // Do action depending on the state that in.
richardparker 4:f8f7f4f9c58d 52 switch(state())
richardparker 4:f8f7f4f9c58d 53 {
richardparker 4:f8f7f4f9c58d 54 case EASettings::STATE_COMPASS:
richardparker 4:f8f7f4f9c58d 55 _updateCompass();
richardparker 4:f8f7f4f9c58d 56 break;
richardparker 4:f8f7f4f9c58d 57 }
richardparker 4:f8f7f4f9c58d 58 }
richardparker 4:f8f7f4f9c58d 59
richardparker 3:24fbf4dbd7e5 60 void EASettings::actionHandler(EAHitBox* box, short x, short y)
richardparker 3:24fbf4dbd7e5 61 {
richardparker 3:24fbf4dbd7e5 62 State nextState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 63
richardparker 3:24fbf4dbd7e5 64 // Disable hit boxs from previous screens.
richardparker 3:24fbf4dbd7e5 65 _disableHitBoxs();
richardparker 3:24fbf4dbd7e5 66
richardparker 3:24fbf4dbd7e5 67 // Do action depending on the state that in.
richardparker 3:24fbf4dbd7e5 68 switch(state())
richardparker 3:24fbf4dbd7e5 69 {
richardparker 3:24fbf4dbd7e5 70 case EASettings::STATE_IDLE:
richardparker 3:24fbf4dbd7e5 71 _drawPortal();
richardparker 3:24fbf4dbd7e5 72 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 73 break;
richardparker 3:24fbf4dbd7e5 74 case EASettings::STATE_PORTAL:
richardparker 3:24fbf4dbd7e5 75 if (box == _returnBox->hitBox())
richardparker 3:24fbf4dbd7e5 76 {
richardparker 3:24fbf4dbd7e5 77 nextState = EASettings::STATE_ENDED;
richardparker 3:24fbf4dbd7e5 78 }
richardparker 3:24fbf4dbd7e5 79 else if (box == _touchBox->hitBox())
richardparker 3:24fbf4dbd7e5 80 {
richardparker 3:24fbf4dbd7e5 81 _touch.calibrate();
richardparker 3:24fbf4dbd7e5 82 _drawPortal();
richardparker 3:24fbf4dbd7e5 83 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 84 }
richardparker 3:24fbf4dbd7e5 85 else if (box == _dateBox->hitBox())
richardparker 3:24fbf4dbd7e5 86 {
richardparker 3:24fbf4dbd7e5 87 _drawDate();
richardparker 3:24fbf4dbd7e5 88 _state = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 89 nextState = _nextDate();
richardparker 4:f8f7f4f9c58d 90 }
richardparker 4:f8f7f4f9c58d 91 else if (box == _compassBox->hitBox())
richardparker 4:f8f7f4f9c58d 92 {
richardparker 4:f8f7f4f9c58d 93 _drawCompass();
richardparker 4:f8f7f4f9c58d 94 nextState = EASettings::STATE_COMPASS;
richardparker 3:24fbf4dbd7e5 95 } else {
richardparker 3:24fbf4dbd7e5 96 _drawPortal();
richardparker 3:24fbf4dbd7e5 97 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 98 }
richardparker 3:24fbf4dbd7e5 99 break;
richardparker 4:f8f7f4f9c58d 100 case EASettings::STATE_COMPASS:
richardparker 4:f8f7f4f9c58d 101 if (box == _returnBox->hitBox())
richardparker 4:f8f7f4f9c58d 102 {
richardparker 4:f8f7f4f9c58d 103 _drawPortal();
richardparker 4:f8f7f4f9c58d 104 nextState = EASettings::STATE_PORTAL;
richardparker 4:f8f7f4f9c58d 105 } else {
richardparker 4:f8f7f4f9c58d 106 _drawCompass();
richardparker 4:f8f7f4f9c58d 107 nextState = EASettings::STATE_COMPASS;
richardparker 4:f8f7f4f9c58d 108 }
richardparker 4:f8f7f4f9c58d 109 break;
richardparker 3:24fbf4dbd7e5 110 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 111 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 112 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 113 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 114 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 115 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 116 if (box == _returnBox->hitBox())
richardparker 3:24fbf4dbd7e5 117 {
richardparker 4:f8f7f4f9c58d 118 set_time(mktime(_time));
richardparker 3:24fbf4dbd7e5 119 _drawPortal();
richardparker 3:24fbf4dbd7e5 120 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 121 }
richardparker 3:24fbf4dbd7e5 122 else if (box == _nextBox->hitBox())
richardparker 3:24fbf4dbd7e5 123 {
richardparker 3:24fbf4dbd7e5 124 nextState = _nextDate();
richardparker 3:24fbf4dbd7e5 125 }
richardparker 3:24fbf4dbd7e5 126 else if (box == _prevBox->hitBox())
richardparker 3:24fbf4dbd7e5 127 {
richardparker 3:24fbf4dbd7e5 128 nextState = _prevDate();
richardparker 3:24fbf4dbd7e5 129 }
richardparker 3:24fbf4dbd7e5 130 else if (box == _incBox->hitBox())
richardparker 3:24fbf4dbd7e5 131 {
richardparker 3:24fbf4dbd7e5 132 nextState = _incDate();
richardparker 3:24fbf4dbd7e5 133 }
richardparker 3:24fbf4dbd7e5 134 else if (box == _decBox->hitBox())
richardparker 3:24fbf4dbd7e5 135 {
richardparker 3:24fbf4dbd7e5 136 nextState = _decDate();
richardparker 3:24fbf4dbd7e5 137 } else {
richardparker 3:24fbf4dbd7e5 138 _drawPortal();
richardparker 3:24fbf4dbd7e5 139 nextState = EASettings::STATE_PORTAL;
richardparker 3:24fbf4dbd7e5 140 }
richardparker 3:24fbf4dbd7e5 141 _enableDateButtons();
richardparker 3:24fbf4dbd7e5 142 break;
richardparker 3:24fbf4dbd7e5 143 default:
richardparker 3:24fbf4dbd7e5 144 nextState = EASettings::STATE_ENDED;
richardparker 3:24fbf4dbd7e5 145 break;
richardparker 3:24fbf4dbd7e5 146 }
richardparker 3:24fbf4dbd7e5 147
richardparker 3:24fbf4dbd7e5 148 _state = nextState;
richardparker 3:24fbf4dbd7e5 149 }
richardparker 3:24fbf4dbd7e5 150
richardparker 3:24fbf4dbd7e5 151 void EASettings::_disableHitBoxs()
richardparker 3:24fbf4dbd7e5 152 {
richardparker 3:24fbf4dbd7e5 153 if (_launchBox != NULL)
richardparker 3:24fbf4dbd7e5 154 {
richardparker 3:24fbf4dbd7e5 155 _launchBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 156 }
richardparker 3:24fbf4dbd7e5 157
richardparker 3:24fbf4dbd7e5 158 if (_returnBox != NULL)
richardparker 3:24fbf4dbd7e5 159 {
richardparker 3:24fbf4dbd7e5 160 _returnBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 161 }
richardparker 3:24fbf4dbd7e5 162
richardparker 3:24fbf4dbd7e5 163 if (_touchBox != NULL)
richardparker 3:24fbf4dbd7e5 164 {
richardparker 3:24fbf4dbd7e5 165 _touchBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 166 }
richardparker 3:24fbf4dbd7e5 167
richardparker 3:24fbf4dbd7e5 168 if (_dateBox != NULL)
richardparker 3:24fbf4dbd7e5 169 {
richardparker 3:24fbf4dbd7e5 170 _dateBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 171 }
richardparker 3:24fbf4dbd7e5 172
richardparker 3:24fbf4dbd7e5 173 if (_compassBox != NULL)
richardparker 3:24fbf4dbd7e5 174 {
richardparker 3:24fbf4dbd7e5 175 _compassBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 176 }
richardparker 3:24fbf4dbd7e5 177
richardparker 3:24fbf4dbd7e5 178 if (_nextBox != NULL)
richardparker 3:24fbf4dbd7e5 179 {
richardparker 3:24fbf4dbd7e5 180 _nextBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 181 }
richardparker 3:24fbf4dbd7e5 182
richardparker 3:24fbf4dbd7e5 183 if (_prevBox != NULL)
richardparker 3:24fbf4dbd7e5 184 {
richardparker 3:24fbf4dbd7e5 185 _prevBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 186 }
richardparker 3:24fbf4dbd7e5 187
richardparker 3:24fbf4dbd7e5 188 if (_incBox != NULL)
richardparker 3:24fbf4dbd7e5 189 {
richardparker 3:24fbf4dbd7e5 190 _incBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 191 }
richardparker 3:24fbf4dbd7e5 192
richardparker 3:24fbf4dbd7e5 193 if (_decBox != NULL)
richardparker 3:24fbf4dbd7e5 194 {
richardparker 3:24fbf4dbd7e5 195 _decBox->setEnabled(false);
richardparker 3:24fbf4dbd7e5 196 }
richardparker 3:24fbf4dbd7e5 197 }
richardparker 3:24fbf4dbd7e5 198
richardparker 3:24fbf4dbd7e5 199 void EASettings::_drawLaunchButton()
richardparker 3:24fbf4dbd7e5 200 {
richardparker 3:24fbf4dbd7e5 201 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 202 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 203 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 204
richardparker 4:f8f7f4f9c58d 205 EAFont font;
richardparker 3:24fbf4dbd7e5 206 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 207 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 208
richardparker 4:f8f7f4f9c58d 209 font.load("/local/large.fnt");
richardparker 4:f8f7f4f9c58d 210 _lcd.setFont(font);
richardparker 4:f8f7f4f9c58d 211
richardparker 3:24fbf4dbd7e5 212 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 213 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 214
richardparker 3:24fbf4dbd7e5 215 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 216 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 217
richardparker 3:24fbf4dbd7e5 218 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 219 if (_launchBox == NULL)
richardparker 3:24fbf4dbd7e5 220 {
richardparker 4:f8f7f4f9c58d 221 _launchBox = new EAButton(_manager, _lcd.width()-60, _lcd.height()-60, 60, 60, "S", this);
richardparker 3:24fbf4dbd7e5 222 } else {
richardparker 3:24fbf4dbd7e5 223 _launchBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 224 }
richardparker 3:24fbf4dbd7e5 225 _launchBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 226 }
richardparker 3:24fbf4dbd7e5 227
richardparker 3:24fbf4dbd7e5 228 void EASettings::_drawPortal()
richardparker 3:24fbf4dbd7e5 229 {
richardparker 3:24fbf4dbd7e5 230 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 231 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 232 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 233
richardparker 3:24fbf4dbd7e5 234 EAFont font;
richardparker 3:24fbf4dbd7e5 235 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 236 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 237
richardparker 3:24fbf4dbd7e5 238 font.load("/local/large.fnt");
richardparker 3:24fbf4dbd7e5 239 _lcd.setFont(font);
richardparker 3:24fbf4dbd7e5 240
richardparker 3:24fbf4dbd7e5 241 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 242 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 243
richardparker 3:24fbf4dbd7e5 244 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 245 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 246
richardparker 3:24fbf4dbd7e5 247 // Clear the screen to draw the buttons on.
richardparker 3:24fbf4dbd7e5 248 _lcd.clearScreen();
richardparker 3:24fbf4dbd7e5 249
richardparker 3:24fbf4dbd7e5 250 // Draw title.
richardparker 3:24fbf4dbd7e5 251 _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Settings");
richardparker 3:24fbf4dbd7e5 252
richardparker 3:24fbf4dbd7e5 253 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 254 if (_compassBox == NULL)
richardparker 3:24fbf4dbd7e5 255 {
richardparker 3:24fbf4dbd7e5 256 _compassBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*5), size()*4, size(), "Calibrate Compass", this);
richardparker 3:24fbf4dbd7e5 257 } else {
richardparker 3:24fbf4dbd7e5 258 _compassBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 259 }
richardparker 3:24fbf4dbd7e5 260 _compassBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 261
richardparker 3:24fbf4dbd7e5 262 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 263 if (_dateBox == NULL)
richardparker 3:24fbf4dbd7e5 264 {
richardparker 3:24fbf4dbd7e5 265 _dateBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*4), size()*4, size(), "Set Date", this);
richardparker 3:24fbf4dbd7e5 266 } else {
richardparker 3:24fbf4dbd7e5 267 _dateBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 268 }
richardparker 3:24fbf4dbd7e5 269 _dateBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 270
richardparker 3:24fbf4dbd7e5 271 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 272 if (_touchBox == NULL)
richardparker 3:24fbf4dbd7e5 273 {
richardparker 3:24fbf4dbd7e5 274 _touchBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*3), size()*4, size(), "Touch Calibration", this);
richardparker 3:24fbf4dbd7e5 275 } else {
richardparker 3:24fbf4dbd7e5 276 _touchBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 277 }
richardparker 3:24fbf4dbd7e5 278 _touchBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 279
richardparker 3:24fbf4dbd7e5 280 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 281 if (_returnBox == NULL)
richardparker 3:24fbf4dbd7e5 282 {
richardparker 3:24fbf4dbd7e5 283 _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this);
richardparker 3:24fbf4dbd7e5 284 } else {
richardparker 3:24fbf4dbd7e5 285 _returnBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 286 }
richardparker 3:24fbf4dbd7e5 287 _returnBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 288
richardparker 3:24fbf4dbd7e5 289 }
richardparker 3:24fbf4dbd7e5 290
richardparker 4:f8f7f4f9c58d 291 void EASettings::_updateCompass()
richardparker 4:f8f7f4f9c58d 292 {
richardparker 4:f8f7f4f9c58d 293 float angle = _compass.getHeading();
richardparker 4:f8f7f4f9c58d 294 angle = (angle * PI)/180;
richardparker 4:f8f7f4f9c58d 295
richardparker 4:f8f7f4f9c58d 296 if (_compassCircle != NULL)
richardparker 4:f8f7f4f9c58d 297 {
richardparker 4:f8f7f4f9c58d 298 _compassCircle->update(_lcd, angle);
richardparker 4:f8f7f4f9c58d 299 }
richardparker 4:f8f7f4f9c58d 300 }
richardparker 4:f8f7f4f9c58d 301
richardparker 4:f8f7f4f9c58d 302 void EASettings::_drawCompass()
richardparker 4:f8f7f4f9c58d 303 {
richardparker 4:f8f7f4f9c58d 304 // Setup colours and clear screen to known background.
richardparker 4:f8f7f4f9c58d 305 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 4:f8f7f4f9c58d 306 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 4:f8f7f4f9c58d 307
richardparker 4:f8f7f4f9c58d 308 EAFont font;
richardparker 4:f8f7f4f9c58d 309 EABrush brush = _lcd.brush();
richardparker 4:f8f7f4f9c58d 310 EAPen pen = _lcd.pen();
richardparker 4:f8f7f4f9c58d 311
richardparker 4:f8f7f4f9c58d 312 font.load("/local/large.fnt");
richardparker 4:f8f7f4f9c58d 313 _lcd.setFont(font);
richardparker 4:f8f7f4f9c58d 314
richardparker 4:f8f7f4f9c58d 315 brush.setColor(black);
richardparker 4:f8f7f4f9c58d 316 _lcd.setBrush(brush);
richardparker 4:f8f7f4f9c58d 317
richardparker 4:f8f7f4f9c58d 318 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 319 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 320
richardparker 4:f8f7f4f9c58d 321 // Clear the screen to draw the buttons on.
richardparker 4:f8f7f4f9c58d 322 _lcd.clearScreen();
richardparker 4:f8f7f4f9c58d 323
richardparker 4:f8f7f4f9c58d 324 // Draw title.
richardparker 4:f8f7f4f9c58d 325 _lcd.drawText((_lcd.width()/2)-(size()*2), 10, "Compass Calibration");
richardparker 4:f8f7f4f9c58d 326
richardparker 4:f8f7f4f9c58d 327 // Create compass if not already available.
richardparker 4:f8f7f4f9c58d 328 if (_compassCircle == NULL)
richardparker 4:f8f7f4f9c58d 329 {
richardparker 4:f8f7f4f9c58d 330 _compassCircle = new EACompass((_lcd.width()/2)-(size()*1.5), (_lcd.height()/2)-(size()*1.5)-25, size()*3, 0);
richardparker 4:f8f7f4f9c58d 331 }
richardparker 4:f8f7f4f9c58d 332 _compassCircle->paint(_lcd);
richardparker 4:f8f7f4f9c58d 333
richardparker 4:f8f7f4f9c58d 334 // Create hit box if not already available.
richardparker 4:f8f7f4f9c58d 335 if (_returnBox == NULL)
richardparker 4:f8f7f4f9c58d 336 {
richardparker 4:f8f7f4f9c58d 337 _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this);
richardparker 4:f8f7f4f9c58d 338 } else {
richardparker 4:f8f7f4f9c58d 339 _returnBox->setEnabled(true);
richardparker 4:f8f7f4f9c58d 340 }
richardparker 4:f8f7f4f9c58d 341 _returnBox->paint(_lcd);
richardparker 4:f8f7f4f9c58d 342 }
richardparker 4:f8f7f4f9c58d 343
richardparker 3:24fbf4dbd7e5 344 void EASettings::_drawDate()
richardparker 3:24fbf4dbd7e5 345 {
richardparker 3:24fbf4dbd7e5 346 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 347 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 348 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 349
richardparker 3:24fbf4dbd7e5 350 EAFont font;
richardparker 3:24fbf4dbd7e5 351 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 352 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 353
richardparker 3:24fbf4dbd7e5 354 font.load("/local/large.fnt");
richardparker 3:24fbf4dbd7e5 355 _lcd.setFont(font);
richardparker 3:24fbf4dbd7e5 356
richardparker 3:24fbf4dbd7e5 357 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 358 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 359
richardparker 3:24fbf4dbd7e5 360 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 361 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 362
richardparker 3:24fbf4dbd7e5 363 // Clear the screen to draw the buttons on.
richardparker 3:24fbf4dbd7e5 364 _lcd.clearScreen();
richardparker 3:24fbf4dbd7e5 365
richardparker 3:24fbf4dbd7e5 366 // Draw title.
richardparker 3:24fbf4dbd7e5 367 _lcd.drawText((_lcd.width()/2)-(size()*2)+50, 10, "Date/Time");
richardparker 3:24fbf4dbd7e5 368
richardparker 3:24fbf4dbd7e5 369 // Draw date.
richardparker 3:24fbf4dbd7e5 370 char buffer[5];
richardparker 3:24fbf4dbd7e5 371 short y = 60;
richardparker 3:24fbf4dbd7e5 372 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 373
richardparker 3:24fbf4dbd7e5 374 // Update cached time.
richardparker 3:24fbf4dbd7e5 375 time_t seconds = time(NULL);
richardparker 3:24fbf4dbd7e5 376 _time = localtime(&seconds);
richardparker 3:24fbf4dbd7e5 377
richardparker 3:24fbf4dbd7e5 378 // Put the day of the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 379 sprintf(buffer, "%02d", _time->tm_mday);
richardparker 3:24fbf4dbd7e5 380 _lcd.drawText(x, y, buffer);
richardparker 3:24fbf4dbd7e5 381
richardparker 3:24fbf4dbd7e5 382 // Display spacer.
richardparker 3:24fbf4dbd7e5 383 _lcd.drawText(x+20, y, "/");
richardparker 3:24fbf4dbd7e5 384
richardparker 3:24fbf4dbd7e5 385 // Put the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 386 sprintf(buffer, "%02d", _time->tm_mon+1);
richardparker 3:24fbf4dbd7e5 387 _lcd.drawText(x+30, y, buffer);
richardparker 3:24fbf4dbd7e5 388
richardparker 3:24fbf4dbd7e5 389 // Display spacer.
richardparker 3:24fbf4dbd7e5 390 _lcd.drawText(x+50, y, "/");
richardparker 3:24fbf4dbd7e5 391
richardparker 3:24fbf4dbd7e5 392 // Put the month into the buffer and display.
richardparker 3:24fbf4dbd7e5 393 sprintf(buffer, "%04d", _time->tm_year+1900);
richardparker 3:24fbf4dbd7e5 394 _lcd.drawText(x+60, y, buffer);
richardparker 3:24fbf4dbd7e5 395
richardparker 3:24fbf4dbd7e5 396 // Put the hour into the buffer and display.
richardparker 3:24fbf4dbd7e5 397 sprintf(buffer, "%02d", _time->tm_hour);
richardparker 3:24fbf4dbd7e5 398 _lcd.drawText(x+120, y, buffer);
richardparker 3:24fbf4dbd7e5 399
richardparker 3:24fbf4dbd7e5 400 // Display spacer.
richardparker 3:24fbf4dbd7e5 401 _lcd.drawText(x+140, y, ":");
richardparker 3:24fbf4dbd7e5 402
richardparker 3:24fbf4dbd7e5 403 // Put the minute into the buffer and display.
richardparker 3:24fbf4dbd7e5 404 sprintf(buffer, "%02d", _time->tm_min);
richardparker 3:24fbf4dbd7e5 405 _lcd.drawText(x+150, y, buffer);
richardparker 3:24fbf4dbd7e5 406
richardparker 3:24fbf4dbd7e5 407 // Display spacer.
richardparker 3:24fbf4dbd7e5 408 _lcd.drawText(x+170, y, ":");
richardparker 3:24fbf4dbd7e5 409
richardparker 3:24fbf4dbd7e5 410 // Put the minute into the buffer and display.
richardparker 3:24fbf4dbd7e5 411 sprintf(buffer, "%02d", _time->tm_sec);
richardparker 3:24fbf4dbd7e5 412 _lcd.drawText(x+180, y, buffer);
richardparker 3:24fbf4dbd7e5 413
richardparker 3:24fbf4dbd7e5 414 _enableDateButtons();
richardparker 3:24fbf4dbd7e5 415 _prevBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 416 _nextBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 417 _decBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 418 _incBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 419 _returnBox->paint(_lcd);
richardparker 3:24fbf4dbd7e5 420 }
richardparker 3:24fbf4dbd7e5 421
richardparker 3:24fbf4dbd7e5 422 void EASettings::_enableDateButtons()
richardparker 3:24fbf4dbd7e5 423 {
richardparker 3:24fbf4dbd7e5 424 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 425 if (_prevBox == NULL)
richardparker 3:24fbf4dbd7e5 426 {
richardparker 3:24fbf4dbd7e5 427 _prevBox = new EAButton(_manager, (_lcd.width()/2)-(size()*3), _lcd.height()-(size()*3.5), size(), size(), "<", this);
richardparker 3:24fbf4dbd7e5 428 } else {
richardparker 3:24fbf4dbd7e5 429 _prevBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 430 }
richardparker 3:24fbf4dbd7e5 431
richardparker 3:24fbf4dbd7e5 432 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 433 if (_nextBox == NULL)
richardparker 3:24fbf4dbd7e5 434 {
richardparker 3:24fbf4dbd7e5 435 _nextBox = new EAButton(_manager, (_lcd.width()/2)-(size()*1.5), _lcd.height()-(size()*3.5), size(), size(), ">", this);
richardparker 3:24fbf4dbd7e5 436 } else {
richardparker 3:24fbf4dbd7e5 437 _nextBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 438 }
richardparker 3:24fbf4dbd7e5 439
richardparker 3:24fbf4dbd7e5 440 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 441 if (_decBox == NULL)
richardparker 3:24fbf4dbd7e5 442 {
richardparker 3:24fbf4dbd7e5 443 _decBox = new EAButton(_manager, (_lcd.width()/2)+(size()*0.5), _lcd.height()-(size()*3.5), size(), size(), "-", this);
richardparker 3:24fbf4dbd7e5 444 } else {
richardparker 3:24fbf4dbd7e5 445 _decBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 446 }
richardparker 3:24fbf4dbd7e5 447
richardparker 3:24fbf4dbd7e5 448 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 449 if (_incBox == NULL)
richardparker 3:24fbf4dbd7e5 450 {
richardparker 3:24fbf4dbd7e5 451 _incBox = new EAButton(_manager, (_lcd.width()/2)+(size()*2), _lcd.height()-(size()*3.5), size(), size(), "+", this);
richardparker 3:24fbf4dbd7e5 452 } else {
richardparker 3:24fbf4dbd7e5 453 _incBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 454 }
richardparker 3:24fbf4dbd7e5 455
richardparker 3:24fbf4dbd7e5 456 // Create hit box if not already available.
richardparker 3:24fbf4dbd7e5 457 if (_returnBox == NULL)
richardparker 3:24fbf4dbd7e5 458 {
richardparker 3:24fbf4dbd7e5 459 _returnBox = new EAButton(_manager, (_lcd.width()/2)-(size()*2), _lcd.height()-(size()*2), size()*4, size(), "Return...", this);
richardparker 3:24fbf4dbd7e5 460 } else {
richardparker 3:24fbf4dbd7e5 461 _returnBox->setEnabled(true);
richardparker 3:24fbf4dbd7e5 462 }
richardparker 3:24fbf4dbd7e5 463 }
richardparker 3:24fbf4dbd7e5 464
richardparker 3:24fbf4dbd7e5 465 EASettings::State EASettings::_incDate()
richardparker 3:24fbf4dbd7e5 466 {
richardparker 4:f8f7f4f9c58d 467 char buffer[5];
richardparker 4:f8f7f4f9c58d 468 short y = 60;
richardparker 4:f8f7f4f9c58d 469 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 4:f8f7f4f9c58d 470 tm oldTime = *_time;
richardparker 4:f8f7f4f9c58d 471
richardparker 4:f8f7f4f9c58d 472 // Setup colours and clear screen to known background.
richardparker 4:f8f7f4f9c58d 473 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 4:f8f7f4f9c58d 474 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 4:f8f7f4f9c58d 475
richardparker 4:f8f7f4f9c58d 476 EAFont font;
richardparker 4:f8f7f4f9c58d 477 EABrush brush = _lcd.brush();
richardparker 4:f8f7f4f9c58d 478 EAPen pen = _lcd.pen();
richardparker 4:f8f7f4f9c58d 479
richardparker 4:f8f7f4f9c58d 480 font.load("/local/large.fnt");
richardparker 4:f8f7f4f9c58d 481 _lcd.setFont(font);
richardparker 4:f8f7f4f9c58d 482
richardparker 4:f8f7f4f9c58d 483 brush.setColor(black);
richardparker 4:f8f7f4f9c58d 484 _lcd.setBrush(brush);
richardparker 4:f8f7f4f9c58d 485
richardparker 4:f8f7f4f9c58d 486 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 487 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 488
richardparker 4:f8f7f4f9c58d 489 // Now clear selection box.
richardparker 4:f8f7f4f9c58d 490 switch (state())
richardparker 4:f8f7f4f9c58d 491 {
richardparker 4:f8f7f4f9c58d 492 default:
richardparker 4:f8f7f4f9c58d 493 case EASettings::STATE_DATE_DAY:
richardparker 4:f8f7f4f9c58d 494 _time->tm_mday = (int)(_time->tm_mday+1) % 32;
richardparker 4:f8f7f4f9c58d 495 if (_time->tm_mday == 0) _time->tm_mday = 1;
richardparker 4:f8f7f4f9c58d 496 break;
richardparker 4:f8f7f4f9c58d 497 case EASettings::STATE_DATE_MONTH:
richardparker 4:f8f7f4f9c58d 498 _time->tm_mon = (int)(_time->tm_mon+1) % 12;
richardparker 4:f8f7f4f9c58d 499 printf("Month: %d\r\n", _time->tm_mon);
richardparker 4:f8f7f4f9c58d 500 break;
richardparker 4:f8f7f4f9c58d 501 case EASettings::STATE_DATE_YEAR:
richardparker 4:f8f7f4f9c58d 502 _time->tm_year++;
richardparker 4:f8f7f4f9c58d 503 break;
richardparker 4:f8f7f4f9c58d 504 case EASettings::STATE_DATE_HOUR:
richardparker 4:f8f7f4f9c58d 505 _time->tm_hour = (int)(_time->tm_hour+1) % 60;
richardparker 4:f8f7f4f9c58d 506 break;
richardparker 4:f8f7f4f9c58d 507 case EASettings::STATE_DATE_MINUTE:
richardparker 4:f8f7f4f9c58d 508 _time->tm_min = (int)(_time->tm_min+1) % 60;
richardparker 4:f8f7f4f9c58d 509 break;
richardparker 4:f8f7f4f9c58d 510 case EASettings::STATE_DATE_SECOND:
richardparker 4:f8f7f4f9c58d 511 _time->tm_sec = (int)(_time->tm_sec+1) % 60;
richardparker 4:f8f7f4f9c58d 512 break;
richardparker 4:f8f7f4f9c58d 513 }
richardparker 4:f8f7f4f9c58d 514
richardparker 4:f8f7f4f9c58d 515 // This converts to a valid value e.g. the value is too large for the month.
richardparker 4:f8f7f4f9c58d 516 time_t seconds = mktime(_time);
richardparker 4:f8f7f4f9c58d 517 printf("Time value is: %d\r\n", seconds);
richardparker 4:f8f7f4f9c58d 518 if (seconds == (time_t)-1)
richardparker 4:f8f7f4f9c58d 519 {
richardparker 4:f8f7f4f9c58d 520 printf("Bad time, not changing time...\r\n");
richardparker 4:f8f7f4f9c58d 521 *_time = oldTime;
richardparker 4:f8f7f4f9c58d 522 } else {
richardparker 4:f8f7f4f9c58d 523 _time = localtime(&seconds);
richardparker 4:f8f7f4f9c58d 524 }
richardparker 4:f8f7f4f9c58d 525
richardparker 4:f8f7f4f9c58d 526 if (oldTime.tm_mday != _time->tm_mday)
richardparker 4:f8f7f4f9c58d 527 {
richardparker 4:f8f7f4f9c58d 528 _lcd.drawFilledRect(x, y, 20, 20);
richardparker 4:f8f7f4f9c58d 529 sprintf(buffer, "%02d", _time->tm_mday);
richardparker 4:f8f7f4f9c58d 530 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 531 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 532 _lcd.drawText(x, y, buffer);
richardparker 4:f8f7f4f9c58d 533 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 534 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 535 }
richardparker 4:f8f7f4f9c58d 536 if (oldTime.tm_mon != _time->tm_mon)
richardparker 4:f8f7f4f9c58d 537 {
richardparker 4:f8f7f4f9c58d 538 _lcd.drawFilledRect(x+30, y, 20, 20);
richardparker 4:f8f7f4f9c58d 539 sprintf(buffer, "%02d", _time->tm_mon+1);
richardparker 4:f8f7f4f9c58d 540 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 541 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 542 _lcd.drawText(x+30, y, buffer);
richardparker 4:f8f7f4f9c58d 543 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 544 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 545 }
richardparker 4:f8f7f4f9c58d 546 if (oldTime.tm_year != _time->tm_year)
richardparker 4:f8f7f4f9c58d 547 {
richardparker 4:f8f7f4f9c58d 548 _lcd.drawFilledRect(x+60, y, 40, 20);
richardparker 4:f8f7f4f9c58d 549 sprintf(buffer, "%04d", _time->tm_year+1900);
richardparker 4:f8f7f4f9c58d 550 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 551 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 552 _lcd.drawText(x+60, y, buffer);
richardparker 4:f8f7f4f9c58d 553 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 554 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 555 }
richardparker 4:f8f7f4f9c58d 556 if (oldTime.tm_hour != _time->tm_hour)
richardparker 4:f8f7f4f9c58d 557 {
richardparker 4:f8f7f4f9c58d 558 _lcd.drawFilledRect(x+120, y, 20, 20);
richardparker 4:f8f7f4f9c58d 559 sprintf(buffer, "%02d", _time->tm_hour);
richardparker 4:f8f7f4f9c58d 560 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 561 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 562 _lcd.drawText(x+120, y, buffer);
richardparker 4:f8f7f4f9c58d 563 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 564 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 565 }
richardparker 4:f8f7f4f9c58d 566 if (oldTime.tm_min != _time->tm_min)
richardparker 4:f8f7f4f9c58d 567 {
richardparker 4:f8f7f4f9c58d 568 _lcd.drawFilledRect(x+150, y, 20, 20);
richardparker 4:f8f7f4f9c58d 569 sprintf(buffer, "%02d", _time->tm_min);
richardparker 4:f8f7f4f9c58d 570 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 571 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 572 _lcd.drawText(x+150, y, buffer);
richardparker 4:f8f7f4f9c58d 573 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 574 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 575 }
richardparker 4:f8f7f4f9c58d 576 if (oldTime.tm_sec != _time->tm_sec)
richardparker 4:f8f7f4f9c58d 577 {
richardparker 4:f8f7f4f9c58d 578 _lcd.drawFilledRect(x+180, y, 20, 20);
richardparker 4:f8f7f4f9c58d 579 sprintf(buffer, "%02d", _time->tm_sec);
richardparker 4:f8f7f4f9c58d 580 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 581 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 582 _lcd.drawText(x+180, y, buffer);
richardparker 4:f8f7f4f9c58d 583 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 584 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 585 }
richardparker 4:f8f7f4f9c58d 586
richardparker 4:f8f7f4f9c58d 587 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 588 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 589
richardparker 4:f8f7f4f9c58d 590 // Now redraw selection box.
richardparker 4:f8f7f4f9c58d 591 switch (state())
richardparker 4:f8f7f4f9c58d 592 {
richardparker 4:f8f7f4f9c58d 593 default:
richardparker 4:f8f7f4f9c58d 594 case EASettings::STATE_DATE_DAY:
richardparker 4:f8f7f4f9c58d 595 _lcd.drawRect(x, y, 20, 20);
richardparker 4:f8f7f4f9c58d 596 break;
richardparker 4:f8f7f4f9c58d 597 case EASettings::STATE_DATE_MONTH:
richardparker 4:f8f7f4f9c58d 598 _lcd.drawRect(x+30, y, 20, 20);
richardparker 4:f8f7f4f9c58d 599 break;
richardparker 4:f8f7f4f9c58d 600 case EASettings::STATE_DATE_YEAR:
richardparker 4:f8f7f4f9c58d 601 _lcd.drawRect(x+60, y, 40, 20);
richardparker 4:f8f7f4f9c58d 602 break;
richardparker 4:f8f7f4f9c58d 603 case EASettings::STATE_DATE_HOUR:
richardparker 4:f8f7f4f9c58d 604 _lcd.drawRect(x+120, y, 20, 20);
richardparker 4:f8f7f4f9c58d 605 break;
richardparker 4:f8f7f4f9c58d 606 case EASettings::STATE_DATE_MINUTE:
richardparker 4:f8f7f4f9c58d 607 _lcd.drawRect(x+150, y, 20, 20);
richardparker 4:f8f7f4f9c58d 608 break;
richardparker 4:f8f7f4f9c58d 609 case EASettings::STATE_DATE_SECOND:
richardparker 4:f8f7f4f9c58d 610 _lcd.drawRect(x+180, y, 20, 20);
richardparker 4:f8f7f4f9c58d 611 break;
richardparker 4:f8f7f4f9c58d 612 }
richardparker 4:f8f7f4f9c58d 613
richardparker 3:24fbf4dbd7e5 614 return state();
richardparker 3:24fbf4dbd7e5 615 }
richardparker 3:24fbf4dbd7e5 616
richardparker 3:24fbf4dbd7e5 617 EASettings::State EASettings::_decDate()
richardparker 3:24fbf4dbd7e5 618 {
richardparker 4:f8f7f4f9c58d 619 char buffer[5];
richardparker 4:f8f7f4f9c58d 620 short y = 60;
richardparker 4:f8f7f4f9c58d 621 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 4:f8f7f4f9c58d 622 tm oldTime = *_time;
richardparker 4:f8f7f4f9c58d 623
richardparker 4:f8f7f4f9c58d 624 // Setup colours and clear screen to known background.
richardparker 4:f8f7f4f9c58d 625 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 4:f8f7f4f9c58d 626 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 4:f8f7f4f9c58d 627
richardparker 4:f8f7f4f9c58d 628 EAFont font;
richardparker 4:f8f7f4f9c58d 629 EABrush brush = _lcd.brush();
richardparker 4:f8f7f4f9c58d 630 EAPen pen = _lcd.pen();
richardparker 4:f8f7f4f9c58d 631
richardparker 4:f8f7f4f9c58d 632 font.load("/local/large.fnt");
richardparker 4:f8f7f4f9c58d 633 _lcd.setFont(font);
richardparker 4:f8f7f4f9c58d 634
richardparker 4:f8f7f4f9c58d 635 brush.setColor(black);
richardparker 4:f8f7f4f9c58d 636 _lcd.setBrush(brush);
richardparker 4:f8f7f4f9c58d 637
richardparker 4:f8f7f4f9c58d 638 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 639 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 640
richardparker 4:f8f7f4f9c58d 641 switch (state())
richardparker 4:f8f7f4f9c58d 642 {
richardparker 4:f8f7f4f9c58d 643 default:
richardparker 4:f8f7f4f9c58d 644 case EASettings::STATE_DATE_DAY:
richardparker 4:f8f7f4f9c58d 645 _time->tm_mday = (int)(_time->tm_mday-1) % 32;
richardparker 4:f8f7f4f9c58d 646 if (_time->tm_mday == 0) _time->tm_mday = 31;
richardparker 4:f8f7f4f9c58d 647 break;
richardparker 4:f8f7f4f9c58d 648 case EASettings::STATE_DATE_MONTH:
richardparker 4:f8f7f4f9c58d 649 _time->tm_mon = (int)(_time->tm_mon-1) % 12;
richardparker 4:f8f7f4f9c58d 650 break;
richardparker 4:f8f7f4f9c58d 651 case EASettings::STATE_DATE_YEAR:
richardparker 4:f8f7f4f9c58d 652 if (_time->tm_year > 70)
richardparker 4:f8f7f4f9c58d 653 {
richardparker 4:f8f7f4f9c58d 654 _time->tm_year--;
richardparker 4:f8f7f4f9c58d 655 }
richardparker 4:f8f7f4f9c58d 656 break;
richardparker 4:f8f7f4f9c58d 657 case EASettings::STATE_DATE_HOUR:
richardparker 4:f8f7f4f9c58d 658 _time->tm_hour = (int)(_time->tm_hour-1) % 60;
richardparker 4:f8f7f4f9c58d 659 break;
richardparker 4:f8f7f4f9c58d 660 case EASettings::STATE_DATE_MINUTE:
richardparker 4:f8f7f4f9c58d 661 _time->tm_min = (int)(_time->tm_min-1) % 60;
richardparker 4:f8f7f4f9c58d 662 break;
richardparker 4:f8f7f4f9c58d 663 case EASettings::STATE_DATE_SECOND:
richardparker 4:f8f7f4f9c58d 664 _time->tm_sec = (int)(_time->tm_sec-1) % 60;
richardparker 4:f8f7f4f9c58d 665 break;
richardparker 4:f8f7f4f9c58d 666 }
richardparker 4:f8f7f4f9c58d 667
richardparker 4:f8f7f4f9c58d 668 // This converts to a valid value e.g. the value is too large for the month.
richardparker 4:f8f7f4f9c58d 669 time_t seconds = mktime(_time);
richardparker 4:f8f7f4f9c58d 670 printf("Time value is: %d\r\n", seconds);
richardparker 4:f8f7f4f9c58d 671 if (seconds == (time_t)-1)
richardparker 4:f8f7f4f9c58d 672 {
richardparker 4:f8f7f4f9c58d 673 printf("Bad time, not changing time...\r\n");
richardparker 4:f8f7f4f9c58d 674 *_time = oldTime;
richardparker 4:f8f7f4f9c58d 675 } else {
richardparker 4:f8f7f4f9c58d 676 _time = localtime(&seconds);
richardparker 4:f8f7f4f9c58d 677 }
richardparker 4:f8f7f4f9c58d 678
richardparker 4:f8f7f4f9c58d 679 if (oldTime.tm_mday != _time->tm_mday)
richardparker 4:f8f7f4f9c58d 680 {
richardparker 4:f8f7f4f9c58d 681 _lcd.drawFilledRect(x, y, 20, 20);
richardparker 4:f8f7f4f9c58d 682 sprintf(buffer, "%02d", _time->tm_mday);
richardparker 4:f8f7f4f9c58d 683 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 684 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 685 _lcd.drawText(x, y, buffer);
richardparker 4:f8f7f4f9c58d 686 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 687 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 688 }
richardparker 4:f8f7f4f9c58d 689 if (oldTime.tm_mon != _time->tm_mon)
richardparker 4:f8f7f4f9c58d 690 {
richardparker 4:f8f7f4f9c58d 691 _lcd.drawFilledRect(x+30, y, 20, 20);
richardparker 4:f8f7f4f9c58d 692 sprintf(buffer, "%02d", _time->tm_mon+1);
richardparker 4:f8f7f4f9c58d 693 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 694 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 695 _lcd.drawText(x+30, y, buffer);
richardparker 4:f8f7f4f9c58d 696 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 697 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 698 }
richardparker 4:f8f7f4f9c58d 699 if (oldTime.tm_year != _time->tm_year)
richardparker 4:f8f7f4f9c58d 700 {
richardparker 4:f8f7f4f9c58d 701 _lcd.drawFilledRect(x+60, y, 40, 20);
richardparker 4:f8f7f4f9c58d 702 sprintf(buffer, "%04d", _time->tm_year+1900);
richardparker 4:f8f7f4f9c58d 703 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 704 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 705 _lcd.drawText(x+60, y, buffer);
richardparker 4:f8f7f4f9c58d 706 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 707 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 708 }
richardparker 4:f8f7f4f9c58d 709 if (oldTime.tm_hour != _time->tm_hour)
richardparker 4:f8f7f4f9c58d 710 {
richardparker 4:f8f7f4f9c58d 711 _lcd.drawFilledRect(x+120, y, 20, 20);
richardparker 4:f8f7f4f9c58d 712 sprintf(buffer, "%02d", _time->tm_hour);
richardparker 4:f8f7f4f9c58d 713 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 714 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 715 _lcd.drawText(x+120, y, buffer);
richardparker 4:f8f7f4f9c58d 716 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 717 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 718 }
richardparker 4:f8f7f4f9c58d 719 if (oldTime.tm_min != _time->tm_min)
richardparker 4:f8f7f4f9c58d 720 {
richardparker 4:f8f7f4f9c58d 721 _lcd.drawFilledRect(x+150, y, 20, 20);
richardparker 4:f8f7f4f9c58d 722 sprintf(buffer, "%02d", _time->tm_min);
richardparker 4:f8f7f4f9c58d 723 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 724 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 725 _lcd.drawText(x+150, y, buffer);
richardparker 4:f8f7f4f9c58d 726 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 727 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 728 }
richardparker 4:f8f7f4f9c58d 729 if (oldTime.tm_sec != _time->tm_sec)
richardparker 4:f8f7f4f9c58d 730 {
richardparker 4:f8f7f4f9c58d 731 _lcd.drawFilledRect(x+180, y, 20, 20);
richardparker 4:f8f7f4f9c58d 732 sprintf(buffer, "%02d", _time->tm_sec);
richardparker 4:f8f7f4f9c58d 733 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 734 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 735 _lcd.drawText(x+180, y, buffer);
richardparker 4:f8f7f4f9c58d 736 pen.setColor(black);
richardparker 4:f8f7f4f9c58d 737 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 738 }
richardparker 4:f8f7f4f9c58d 739
richardparker 4:f8f7f4f9c58d 740 pen.setColor(white);
richardparker 4:f8f7f4f9c58d 741 _lcd.setPen(pen);
richardparker 4:f8f7f4f9c58d 742
richardparker 4:f8f7f4f9c58d 743 // Now redraw selection box.
richardparker 4:f8f7f4f9c58d 744 switch (state())
richardparker 4:f8f7f4f9c58d 745 {
richardparker 4:f8f7f4f9c58d 746 default:
richardparker 4:f8f7f4f9c58d 747 case EASettings::STATE_DATE_DAY:
richardparker 4:f8f7f4f9c58d 748 _lcd.drawRect(x, y, 20, 20);
richardparker 4:f8f7f4f9c58d 749 break;
richardparker 4:f8f7f4f9c58d 750 case EASettings::STATE_DATE_MONTH:
richardparker 4:f8f7f4f9c58d 751 _lcd.drawRect(x+30, y, 20, 20);
richardparker 4:f8f7f4f9c58d 752 break;
richardparker 4:f8f7f4f9c58d 753 case EASettings::STATE_DATE_YEAR:
richardparker 4:f8f7f4f9c58d 754 _lcd.drawRect(x+60, y, 40, 20);
richardparker 4:f8f7f4f9c58d 755 break;
richardparker 4:f8f7f4f9c58d 756 case EASettings::STATE_DATE_HOUR:
richardparker 4:f8f7f4f9c58d 757 _lcd.drawRect(x+120, y, 20, 20);
richardparker 4:f8f7f4f9c58d 758 break;
richardparker 4:f8f7f4f9c58d 759 case EASettings::STATE_DATE_MINUTE:
richardparker 4:f8f7f4f9c58d 760 _lcd.drawRect(x+150, y, 20, 20);
richardparker 4:f8f7f4f9c58d 761 break;
richardparker 4:f8f7f4f9c58d 762 case EASettings::STATE_DATE_SECOND:
richardparker 4:f8f7f4f9c58d 763 _lcd.drawRect(x+180, y, 20, 20);
richardparker 4:f8f7f4f9c58d 764 break;
richardparker 4:f8f7f4f9c58d 765 }
richardparker 3:24fbf4dbd7e5 766
richardparker 3:24fbf4dbd7e5 767 return state();
richardparker 3:24fbf4dbd7e5 768 }
richardparker 3:24fbf4dbd7e5 769
richardparker 3:24fbf4dbd7e5 770 EASettings::State EASettings::_nextDate()
richardparker 3:24fbf4dbd7e5 771 {
richardparker 3:24fbf4dbd7e5 772 short y = 60;
richardparker 3:24fbf4dbd7e5 773 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 774
richardparker 3:24fbf4dbd7e5 775 EASettings::State nextState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 776
richardparker 3:24fbf4dbd7e5 777 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 778 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 779 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 780
richardparker 3:24fbf4dbd7e5 781 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 782 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 783
richardparker 3:24fbf4dbd7e5 784 brush.setColor(white);
richardparker 3:24fbf4dbd7e5 785 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 786
richardparker 3:24fbf4dbd7e5 787 pen.setColor(black);
richardparker 3:24fbf4dbd7e5 788 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 789
richardparker 3:24fbf4dbd7e5 790 // Now clear selection box.
richardparker 3:24fbf4dbd7e5 791 switch (state())
richardparker 3:24fbf4dbd7e5 792 {
richardparker 3:24fbf4dbd7e5 793 default:
richardparker 3:24fbf4dbd7e5 794 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 795 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 796 break;
richardparker 3:24fbf4dbd7e5 797 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 798 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 799 break;
richardparker 3:24fbf4dbd7e5 800 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 801 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 802 break;
richardparker 3:24fbf4dbd7e5 803 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 804 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 805 break;
richardparker 3:24fbf4dbd7e5 806 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 807 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 808 break;
richardparker 3:24fbf4dbd7e5 809 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 810 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 811 break;
richardparker 3:24fbf4dbd7e5 812 }
richardparker 3:24fbf4dbd7e5 813
richardparker 3:24fbf4dbd7e5 814 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 815 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 816
richardparker 3:24fbf4dbd7e5 817 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 818 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 819
richardparker 3:24fbf4dbd7e5 820 // Now draw selection box.
richardparker 3:24fbf4dbd7e5 821 switch (state())
richardparker 3:24fbf4dbd7e5 822 {
richardparker 3:24fbf4dbd7e5 823 default:
richardparker 3:24fbf4dbd7e5 824 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 825 nextState = EASettings::STATE_DATE_MONTH;
richardparker 3:24fbf4dbd7e5 826 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 827 break;
richardparker 3:24fbf4dbd7e5 828 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 829 nextState = EASettings::STATE_DATE_YEAR;
richardparker 3:24fbf4dbd7e5 830 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 831 break;
richardparker 3:24fbf4dbd7e5 832 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 833 nextState = EASettings::STATE_DATE_HOUR;
richardparker 3:24fbf4dbd7e5 834 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 835 break;
richardparker 3:24fbf4dbd7e5 836 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 837 nextState = EASettings::STATE_DATE_MINUTE;
richardparker 3:24fbf4dbd7e5 838 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 839 break;
richardparker 3:24fbf4dbd7e5 840 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 841 nextState = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 842 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 843 break;
richardparker 3:24fbf4dbd7e5 844 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 845 nextState = EASettings::STATE_DATE_DAY;
richardparker 3:24fbf4dbd7e5 846 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 847 break;
richardparker 3:24fbf4dbd7e5 848 }
richardparker 3:24fbf4dbd7e5 849
richardparker 3:24fbf4dbd7e5 850 return nextState;
richardparker 3:24fbf4dbd7e5 851 }
richardparker 3:24fbf4dbd7e5 852
richardparker 3:24fbf4dbd7e5 853 EASettings::State EASettings::_prevDate()
richardparker 3:24fbf4dbd7e5 854 {
richardparker 3:24fbf4dbd7e5 855 short y = 60;
richardparker 3:24fbf4dbd7e5 856 short x = (_lcd.width()/2)-(size()*2)-25;
richardparker 3:24fbf4dbd7e5 857
richardparker 3:24fbf4dbd7e5 858 EASettings::State prevState = EASettings::STATE_IDLE;
richardparker 3:24fbf4dbd7e5 859
richardparker 3:24fbf4dbd7e5 860 // Setup colours and clear screen to known background.
richardparker 3:24fbf4dbd7e5 861 EAColor white = EAColor(0xFF, 0xFF, 0xFF);
richardparker 3:24fbf4dbd7e5 862 EAColor black = EAColor(0x00, 0x00, 0x00);
richardparker 3:24fbf4dbd7e5 863
richardparker 3:24fbf4dbd7e5 864 EABrush brush = _lcd.brush();
richardparker 3:24fbf4dbd7e5 865 EAPen pen = _lcd.pen();
richardparker 3:24fbf4dbd7e5 866
richardparker 3:24fbf4dbd7e5 867 brush.setColor(white);
richardparker 3:24fbf4dbd7e5 868 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 869
richardparker 3:24fbf4dbd7e5 870 pen.setColor(black);
richardparker 3:24fbf4dbd7e5 871 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 872
richardparker 3:24fbf4dbd7e5 873 // Now clear selection box.
richardparker 3:24fbf4dbd7e5 874 switch (state())
richardparker 3:24fbf4dbd7e5 875 {
richardparker 3:24fbf4dbd7e5 876 default:
richardparker 3:24fbf4dbd7e5 877 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 878 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 879 break;
richardparker 3:24fbf4dbd7e5 880 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 881 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 882 break;
richardparker 3:24fbf4dbd7e5 883 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 884 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 885 break;
richardparker 3:24fbf4dbd7e5 886 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 887 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 888 break;
richardparker 3:24fbf4dbd7e5 889 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 890 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 891 break;
richardparker 3:24fbf4dbd7e5 892 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 893 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 894 break;
richardparker 3:24fbf4dbd7e5 895 }
richardparker 3:24fbf4dbd7e5 896
richardparker 3:24fbf4dbd7e5 897 brush.setColor(black);
richardparker 3:24fbf4dbd7e5 898 _lcd.setBrush(brush);
richardparker 3:24fbf4dbd7e5 899
richardparker 3:24fbf4dbd7e5 900 pen.setColor(white);
richardparker 3:24fbf4dbd7e5 901 _lcd.setPen(pen);
richardparker 3:24fbf4dbd7e5 902
richardparker 3:24fbf4dbd7e5 903 // Now draw selection box.
richardparker 3:24fbf4dbd7e5 904 switch (state())
richardparker 3:24fbf4dbd7e5 905 {
richardparker 3:24fbf4dbd7e5 906 default:
richardparker 3:24fbf4dbd7e5 907 case EASettings::STATE_DATE_DAY:
richardparker 3:24fbf4dbd7e5 908 prevState = EASettings::STATE_DATE_SECOND;
richardparker 3:24fbf4dbd7e5 909 _lcd.drawRect(x+180, y, 20, 20);
richardparker 3:24fbf4dbd7e5 910 break;
richardparker 3:24fbf4dbd7e5 911 case EASettings::STATE_DATE_MONTH:
richardparker 3:24fbf4dbd7e5 912 prevState = EASettings::STATE_DATE_DAY;
richardparker 3:24fbf4dbd7e5 913 _lcd.drawRect(x, y, 20, 20);
richardparker 3:24fbf4dbd7e5 914 break;
richardparker 3:24fbf4dbd7e5 915 case EASettings::STATE_DATE_YEAR:
richardparker 3:24fbf4dbd7e5 916 prevState = EASettings::STATE_DATE_MONTH;
richardparker 3:24fbf4dbd7e5 917 _lcd.drawRect(x+30, y, 20, 20);
richardparker 3:24fbf4dbd7e5 918 break;
richardparker 3:24fbf4dbd7e5 919 case EASettings::STATE_DATE_HOUR:
richardparker 3:24fbf4dbd7e5 920 prevState = EASettings::STATE_DATE_YEAR;
richardparker 3:24fbf4dbd7e5 921 _lcd.drawRect(x+60, y, 40, 20);
richardparker 3:24fbf4dbd7e5 922 break;
richardparker 3:24fbf4dbd7e5 923 case EASettings::STATE_DATE_MINUTE:
richardparker 3:24fbf4dbd7e5 924 prevState = EASettings::STATE_DATE_HOUR;
richardparker 3:24fbf4dbd7e5 925 _lcd.drawRect(x+120, y, 20, 20);
richardparker 3:24fbf4dbd7e5 926 break;
richardparker 3:24fbf4dbd7e5 927 case EASettings::STATE_DATE_SECOND:
richardparker 3:24fbf4dbd7e5 928 prevState = EASettings::STATE_DATE_MINUTE;
richardparker 3:24fbf4dbd7e5 929 _lcd.drawRect(x+150, y, 20, 20);
richardparker 3:24fbf4dbd7e5 930 break;
richardparker 3:24fbf4dbd7e5 931 }
richardparker 3:24fbf4dbd7e5 932
richardparker 3:24fbf4dbd7e5 933 return prevState;
richardparker 3:24fbf4dbd7e5 934 }
richardparker 3:24fbf4dbd7e5 935