Sample GUI for LPC4088. Base code to begin dev

Dependencies:   DMBasicGUI DMSupport

Fork of lpc4088_displaymodule_shipped_demo by Embedded Artists

Committer:
alindvall
Date:
Tue Apr 28 12:21:14 2015 +0000
Revision:
4:a7cbb22e4348
Parent:
2:229f88d6f56b
Updated to latest version of the DMSupport and DMBasicGUI libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alindvall 0:b94e330c98ac 1 /*
alindvall 0:b94e330c98ac 2 * Copyright 2014 Embedded Artists AB
alindvall 0:b94e330c98ac 3 *
alindvall 0:b94e330c98ac 4 * Licensed under the Apache License, Version 2.0 (the "License");
alindvall 0:b94e330c98ac 5 * you may not use this file except in compliance with the License.
alindvall 0:b94e330c98ac 6 * You may obtain a copy of the License at
alindvall 0:b94e330c98ac 7 *
alindvall 0:b94e330c98ac 8 * http://www.apache.org/licenses/LICENSE-2.0
alindvall 0:b94e330c98ac 9 *
alindvall 0:b94e330c98ac 10 * Unless required by applicable law or agreed to in writing, software
alindvall 0:b94e330c98ac 11 * distributed under the License is distributed on an "AS IS" BASIS,
alindvall 0:b94e330c98ac 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alindvall 0:b94e330c98ac 13 * See the License for the specific language governing permissions and
alindvall 0:b94e330c98ac 14 * limitations under the License.
alindvall 0:b94e330c98ac 15 */
alindvall 0:b94e330c98ac 16
alindvall 0:b94e330c98ac 17
alindvall 0:b94e330c98ac 18 #include "mbed.h"
alindvall 0:b94e330c98ac 19 #include "EthernetInterface.h"
alindvall 0:b94e330c98ac 20 #include "AppNetworkSettings.h"
alindvall 0:b94e330c98ac 21 #include "lpc_swim_font.h"
alindvall 0:b94e330c98ac 22
alindvall 0:b94e330c98ac 23 /******************************************************************************
alindvall 0:b94e330c98ac 24 * Defines and typedefs
alindvall 0:b94e330c98ac 25 *****************************************************************************/
alindvall 0:b94e330c98ac 26
alindvall 0:b94e330c98ac 27 #define BTN_OFF 20
alindvall 0:b94e330c98ac 28
alindvall 0:b94e330c98ac 29 /******************************************************************************
alindvall 0:b94e330c98ac 30 * Private variables
alindvall 0:b94e330c98ac 31 *****************************************************************************/
alindvall 0:b94e330c98ac 32
alindvall 0:b94e330c98ac 33 // Ugly but needed for callbacks
alindvall 0:b94e330c98ac 34 static AppNetworkSettings* theApp = NULL;
alindvall 0:b94e330c98ac 35
alindvall 0:b94e330c98ac 36 /******************************************************************************
alindvall 0:b94e330c98ac 37 * Private functions
alindvall 0:b94e330c98ac 38 *****************************************************************************/
alindvall 0:b94e330c98ac 39
alindvall 0:b94e330c98ac 40 static void buttonClicked(uint32_t x)
alindvall 0:b94e330c98ac 41 {
alindvall 0:b94e330c98ac 42 bool* done = (bool*)x;
alindvall 0:b94e330c98ac 43 *done = true;
alindvall 0:b94e330c98ac 44 }
alindvall 0:b94e330c98ac 45
alindvall 0:b94e330c98ac 46 static void fieldClicked(uint32_t x)
alindvall 0:b94e330c98ac 47 {
alindvall 0:b94e330c98ac 48 if (theApp != NULL) {
alindvall 0:b94e330c98ac 49 theApp->setActiveField(x);
alindvall 0:b94e330c98ac 50 }
alindvall 0:b94e330c98ac 51 }
alindvall 0:b94e330c98ac 52
alindvall 0:b94e330c98ac 53 static void increaseValue(uint32_t x)
alindvall 0:b94e330c98ac 54 {
alindvall 0:b94e330c98ac 55 AppNetworkSettings* app = (AppNetworkSettings*)x;
alindvall 0:b94e330c98ac 56 app->modifyValue(1);
alindvall 0:b94e330c98ac 57 }
alindvall 0:b94e330c98ac 58
alindvall 0:b94e330c98ac 59 static void decreaseValue(uint32_t x)
alindvall 0:b94e330c98ac 60 {
alindvall 0:b94e330c98ac 61 AppNetworkSettings* app = (AppNetworkSettings*)x;
alindvall 0:b94e330c98ac 62 app->modifyValue(-1);
alindvall 0:b94e330c98ac 63 }
alindvall 0:b94e330c98ac 64
alindvall 0:b94e330c98ac 65 static void nextField(uint32_t x)
alindvall 0:b94e330c98ac 66 {
alindvall 0:b94e330c98ac 67 AppNetworkSettings* app = (AppNetworkSettings*)x;
alindvall 0:b94e330c98ac 68 app->changeActiveField(true);
alindvall 0:b94e330c98ac 69 }
alindvall 0:b94e330c98ac 70
alindvall 0:b94e330c98ac 71 static void prevField(uint32_t x)
alindvall 0:b94e330c98ac 72 {
alindvall 0:b94e330c98ac 73 AppNetworkSettings* app = (AppNetworkSettings*)x;
alindvall 0:b94e330c98ac 74 app->changeActiveField(false);
alindvall 0:b94e330c98ac 75 }
alindvall 0:b94e330c98ac 76
alindvall 0:b94e330c98ac 77 void AppNetworkSettings::draw()
alindvall 0:b94e330c98ac 78 {
alindvall 0:b94e330c98ac 79 // Prepare fullscreen
alindvall 0:b94e330c98ac 80 swim_window_open(_win,
alindvall 0:b94e330c98ac 81 _disp->width(), _disp->height(), // full size
alindvall 0:b94e330c98ac 82 (COLOR_T*)_fb,
alindvall 0:b94e330c98ac 83 0,0,_disp->width()-1, _disp->height()-1, // window position and size
alindvall 0:b94e330c98ac 84 1, // border
alindvall 0:b94e330c98ac 85 RED,WHITE,BLACK);/*WHITE, RED, BLACK);*/ // colors: pen, backgr, forgr
alindvall 0:b94e330c98ac 86 swim_set_pen_color(_win, WHITE);
alindvall 0:b94e330c98ac 87 swim_set_title(_win, "Network Settings", RED);
alindvall 0:b94e330c98ac 88 swim_set_pen_color(_win, RED);
alindvall 0:b94e330c98ac 89
alindvall 0:b94e330c98ac 90 //_buttons[ButtonDone] = new Button("Done", _win->fb, _win->xpmax - BTN_OFF - BTN_WIDTH, _win->ypmax - BTN_OFF - BTN_HEIGHT, BTN_WIDTH, BTN_HEIGHT);
alindvall 0:b94e330c98ac 91
alindvall 0:b94e330c98ac 92 ImageButton* ib;
alindvall 0:b94e330c98ac 93
alindvall 0:b94e330c98ac 94 Resource* rOk = _res[Resource_Ok_button];
alindvall 0:b94e330c98ac 95 Resource* rCancel = _res[Resource_Cancel_button];
alindvall 0:b94e330c98ac 96 ib = new ImageButton(_win->fb, _win->xpmax - 2*BTN_OFF - rCancel->width() -rOk->width(), _win->ypmax - BTN_OFF - rOk->height(), rOk->width(), rOk->height());
alindvall 0:b94e330c98ac 97 ib->loadImages(rOk);
alindvall 0:b94e330c98ac 98 ib->draw();
alindvall 0:b94e330c98ac 99 _buttons[ButtonOk] = ib;
alindvall 0:b94e330c98ac 100 ib = new ImageButton(_win->fb, _win->xpmax - BTN_OFF - rCancel->width(), _win->ypmax - BTN_OFF - rCancel->height(), rCancel->width(), rCancel->height());
alindvall 0:b94e330c98ac 101 ib->loadImages(rCancel);
alindvall 0:b94e330c98ac 102 ib->draw();
alindvall 0:b94e330c98ac 103 _buttons[ButtonCancel] = ib;
alindvall 0:b94e330c98ac 104
alindvall 0:b94e330c98ac 105 int arrowW = _res[Resource_ArrowUp_button]->width();
alindvall 0:b94e330c98ac 106 int arrowH = _res[Resource_ArrowUp_button]->height();
alindvall 0:b94e330c98ac 107 int arrowCenter = 260 + arrowW;
alindvall 0:b94e330c98ac 108 ib = new ImageButton(_win->fb, arrowCenter, 40, arrowW, arrowH);
alindvall 0:b94e330c98ac 109 ib->loadImages( _res[Resource_ArrowUp_button]);
alindvall 0:b94e330c98ac 110 ib->setAction(increaseValue, (uint32_t)this);
alindvall 0:b94e330c98ac 111 ib->draw();
alindvall 0:b94e330c98ac 112 _buttons[ButtonUp] = ib;
alindvall 0:b94e330c98ac 113 ib = new ImageButton(_win->fb, arrowCenter, 40+arrowH+arrowH, arrowW, arrowH);
alindvall 0:b94e330c98ac 114 ib->loadImages( _res[Resource_ArrowDown_button]);
alindvall 0:b94e330c98ac 115 ib->setAction(decreaseValue, (uint32_t)this);
alindvall 0:b94e330c98ac 116 ib->draw();
alindvall 0:b94e330c98ac 117 _buttons[ButtonDown] = ib;
alindvall 0:b94e330c98ac 118 ib = new ImageButton(_win->fb, arrowCenter-(arrowW/2)-10, 40+arrowH, arrowW, arrowH);
alindvall 0:b94e330c98ac 119 ib->loadImages(_res[Resource_ArrowLeft_button]);
alindvall 0:b94e330c98ac 120 ib->setAction(prevField, (uint32_t)this);
alindvall 0:b94e330c98ac 121 ib->draw();
alindvall 0:b94e330c98ac 122 _buttons[ButtonLeft] = ib;
alindvall 0:b94e330c98ac 123 ib = new ImageButton(_win->fb, arrowCenter+(arrowW/2)+10, 40+arrowH, arrowW, arrowH);
alindvall 0:b94e330c98ac 124 ib->loadImages(_res[Resource_ArrowRight_button]);
alindvall 0:b94e330c98ac 125 ib->setAction(nextField, (uint32_t)this);
alindvall 0:b94e330c98ac 126 ib->draw();
alindvall 0:b94e330c98ac 127 _buttons[ButtonRight] = ib;
alindvall 0:b94e330c98ac 128
alindvall 0:b94e330c98ac 129 // To avoid having each DigitButton deallocate the shared image
alindvall 0:b94e330c98ac 130 void* pointerToFree = _digitImage.pointerToFree;
alindvall 0:b94e330c98ac 131 _digitImage.pointerToFree = NULL;
alindvall 0:b94e330c98ac 132
alindvall 0:b94e330c98ac 133 addIPField(20, ButtonIp0, "IP Address:");
alindvall 0:b94e330c98ac 134 addIPField(20+65, ButtonMask0, "Net Mask:");
alindvall 0:b94e330c98ac 135 addIPField(20+65+65, ButtonGw0, "Gateway:");
alindvall 0:b94e330c98ac 136
alindvall 0:b94e330c98ac 137 // Restore shared image so that it will be deallocated during teardown
alindvall 0:b94e330c98ac 138 _digitImage.pointerToFree = pointerToFree;
alindvall 0:b94e330c98ac 139
alindvall 0:b94e330c98ac 140 for (int i = 0; i < NumButtons; i++) {
alindvall 0:b94e330c98ac 141 _buttons[i]->draw();
alindvall 0:b94e330c98ac 142 }
alindvall 0:b94e330c98ac 143
alindvall 0:b94e330c98ac 144 markField(_activeField, true);
alindvall 0:b94e330c98ac 145 }
alindvall 0:b94e330c98ac 146
alindvall 0:b94e330c98ac 147 void AppNetworkSettings::addIPField(int y, int idx, const char* lbl)
alindvall 0:b94e330c98ac 148 {
alindvall 0:b94e330c98ac 149 DigitButton* db;
alindvall 0:b94e330c98ac 150
alindvall 0:b94e330c98ac 151 swim_put_text_xy(_win, lbl, 10, y);
alindvall 0:b94e330c98ac 152 y += 15;
alindvall 0:b94e330c98ac 153 int btny = y-7;
alindvall 0:b94e330c98ac 154 y += _win->ypvmin; // compensate for title bar
alindvall 0:b94e330c98ac 155 int x = 20;
alindvall 0:b94e330c98ac 156
alindvall 0:b94e330c98ac 157
alindvall 0:b94e330c98ac 158 db = new DigitButton(_win->fb, x, y, 55, 34);
alindvall 0:b94e330c98ac 159 db->loadImages(&_digitImage);//img_numbers, img_size_numbers);
alindvall 0:b94e330c98ac 160 db->setNumDigits(3);
alindvall 0:b94e330c98ac 161 db->setValue(_values[idx]);
alindvall 0:b94e330c98ac 162 db->setAction(fieldClicked, idx);
alindvall 0:b94e330c98ac 163 _buttons[idx++] = db;
alindvall 0:b94e330c98ac 164
alindvall 0:b94e330c98ac 165 x += 60;
alindvall 0:b94e330c98ac 166 db = new DigitButton(_win->fb, x, y, 55, 34);
alindvall 0:b94e330c98ac 167 db->loadImages(&_digitImage);//img_numbers, img_size_numbers);
alindvall 0:b94e330c98ac 168 db->setNumDigits(3);
alindvall 0:b94e330c98ac 169 db->setValue(_values[idx]);
alindvall 0:b94e330c98ac 170 db->setAction(fieldClicked, idx);
alindvall 0:b94e330c98ac 171 _buttons[idx++] = db;
alindvall 0:b94e330c98ac 172 swim_put_box(_win, x-7, btny+31, x-4, btny+34);
alindvall 0:b94e330c98ac 173
alindvall 0:b94e330c98ac 174 x += 60;
alindvall 0:b94e330c98ac 175 db = new DigitButton(_win->fb, x, y, 55, 34);
alindvall 0:b94e330c98ac 176 db->loadImages(&_digitImage);//img_numbers, img_size_numbers);
alindvall 0:b94e330c98ac 177 db->setNumDigits(3);
alindvall 0:b94e330c98ac 178 db->setValue(_values[idx]);
alindvall 0:b94e330c98ac 179 db->setAction(fieldClicked, idx);
alindvall 0:b94e330c98ac 180 _buttons[idx++] = db;
alindvall 0:b94e330c98ac 181 swim_put_box(_win, x-7, btny+31, x-4, btny+34);
alindvall 0:b94e330c98ac 182
alindvall 0:b94e330c98ac 183 x += 60;
alindvall 0:b94e330c98ac 184 db = new DigitButton(_win->fb, x, y, 55, 34);
alindvall 0:b94e330c98ac 185 db->loadImages(&_digitImage);//img_numbers, img_size_numbers);
alindvall 0:b94e330c98ac 186 db->setNumDigits(3);
alindvall 0:b94e330c98ac 187 db->setValue(_values[idx]);
alindvall 0:b94e330c98ac 188 db->setAction(fieldClicked, idx);
alindvall 0:b94e330c98ac 189 _buttons[idx++] = db;
alindvall 0:b94e330c98ac 190 swim_put_box(_win, x-7, btny+31, x-4, btny+34);
alindvall 0:b94e330c98ac 191 }
alindvall 0:b94e330c98ac 192
alindvall 0:b94e330c98ac 193 void AppNetworkSettings::markField(int field, bool active)
alindvall 0:b94e330c98ac 194 {
alindvall 0:b94e330c98ac 195 COLOR_T oldPen = _win->pen;
alindvall 0:b94e330c98ac 196 COLOR_T oldFill = _win->fill;
alindvall 0:b94e330c98ac 197 _win->fill = active ? BLACK : _win->bkg;
alindvall 0:b94e330c98ac 198 _win->pen = active ? BLACK : _win->bkg;
alindvall 0:b94e330c98ac 199 if (field >= 0 && field < NumFields) {
alindvall 0:b94e330c98ac 200 int x0, y0, x1, y1;
alindvall 0:b94e330c98ac 201 _buttons[field]->bounds(x0,y0,x1,y1);
alindvall 0:b94e330c98ac 202 y1 -= _win->ypvmin+1;
alindvall 0:b94e330c98ac 203 x0--;
alindvall 0:b94e330c98ac 204 swim_put_box(_win, x0, y1, x1, y1+3);
alindvall 0:b94e330c98ac 205 }
alindvall 0:b94e330c98ac 206 _win->fill = oldFill;
alindvall 0:b94e330c98ac 207 _win->pen = oldPen;
alindvall 0:b94e330c98ac 208 }
alindvall 0:b94e330c98ac 209
alindvall 0:b94e330c98ac 210 /******************************************************************************
alindvall 0:b94e330c98ac 211 * Public functions
alindvall 0:b94e330c98ac 212 *****************************************************************************/
alindvall 0:b94e330c98ac 213
alindvall 0:b94e330c98ac 214 AppNetworkSettings::AppNetworkSettings() : _disp(NULL), _win(NULL), _fb(NULL), _activeField(0)
alindvall 0:b94e330c98ac 215 {
alindvall 0:b94e330c98ac 216 for (int i = 0; i < NumButtons; i++) {
alindvall 0:b94e330c98ac 217 _buttons[i] = NULL;
alindvall 0:b94e330c98ac 218 }
alindvall 0:b94e330c98ac 219 for (int i = 0; i < NumResources; i++) {
alindvall 0:b94e330c98ac 220 _res[i] = NULL;
alindvall 0:b94e330c98ac 221 }
alindvall 0:b94e330c98ac 222 _values[0] = 192;
alindvall 0:b94e330c98ac 223 _values[1] = 168;
alindvall 0:b94e330c98ac 224 _values[2] = 5;
alindvall 0:b94e330c98ac 225 _values[3] = 220;
alindvall 0:b94e330c98ac 226 _values[4] = 255;
alindvall 0:b94e330c98ac 227 _values[5] = 255;
alindvall 0:b94e330c98ac 228 _values[6] = 255;
alindvall 0:b94e330c98ac 229 _values[7] = 0;
alindvall 0:b94e330c98ac 230 _values[8] = 192;
alindvall 0:b94e330c98ac 231 _values[9] = 168;
alindvall 0:b94e330c98ac 232 _values[10] = 5;
alindvall 0:b94e330c98ac 233 _values[11] = 1;
alindvall 0:b94e330c98ac 234
alindvall 0:b94e330c98ac 235 _digitImage.pointerToFree = NULL;
alindvall 0:b94e330c98ac 236
alindvall 0:b94e330c98ac 237 theApp = this;
alindvall 0:b94e330c98ac 238 }
alindvall 0:b94e330c98ac 239
alindvall 0:b94e330c98ac 240 AppNetworkSettings::~AppNetworkSettings()
alindvall 0:b94e330c98ac 241 {
alindvall 0:b94e330c98ac 242 theApp = NULL;
alindvall 0:b94e330c98ac 243 teardown();
alindvall 0:b94e330c98ac 244 }
alindvall 0:b94e330c98ac 245
alindvall 0:b94e330c98ac 246 bool AppNetworkSettings::setup()
alindvall 0:b94e330c98ac 247 {
alindvall 0:b94e330c98ac 248 _disp = DMBoard::instance().display();
alindvall 0:b94e330c98ac 249 _win = (SWIM_WINDOW_T*)malloc(sizeof(SWIM_WINDOW_T));
alindvall 0:b94e330c98ac 250 _fb = _disp->allocateFramebuffer();
alindvall 0:b94e330c98ac 251 int res = Image::decode(_res[Resource_Digits], Image::RES_16BIT, &_digitImage);
alindvall 0:b94e330c98ac 252
alindvall 0:b94e330c98ac 253 return (_win != NULL && _fb != NULL && res == 0);
alindvall 0:b94e330c98ac 254 }
alindvall 0:b94e330c98ac 255
alindvall 0:b94e330c98ac 256 void AppNetworkSettings::runToCompletion()
alindvall 0:b94e330c98ac 257 {
alindvall 0:b94e330c98ac 258 // Alternative 1: use the calling thread's context to run in
alindvall 0:b94e330c98ac 259 bool done = false;
alindvall 0:b94e330c98ac 260 bool abort = false;
alindvall 0:b94e330c98ac 261 draw();
alindvall 0:b94e330c98ac 262 _buttons[ButtonOk]->setAction(buttonClicked, (uint32_t)&done);
alindvall 0:b94e330c98ac 263 _buttons[ButtonCancel]->setAction(buttonClicked, (uint32_t)&abort);
alindvall 0:b94e330c98ac 264 void* oldFB = _disp->swapFramebuffer(_fb);
alindvall 0:b94e330c98ac 265
alindvall 0:b94e330c98ac 266 // Wait for touches
alindvall 0:b94e330c98ac 267 TouchPanel* touch = DMBoard::instance().touchPanel();
alindvall 0:b94e330c98ac 268 touch_coordinate_t coord;
alindvall 0:b94e330c98ac 269
alindvall 0:b94e330c98ac 270 int lastPressed = NumButtons;
alindvall 0:b94e330c98ac 271 Timer t;
alindvall 0:b94e330c98ac 272 t.start();
alindvall 2:229f88d6f56b 273 int repeatAt = 0;
alindvall 0:b94e330c98ac 274
alindvall 0:b94e330c98ac 275 uint32_t maxDelay = osWaitForever;
alindvall 0:b94e330c98ac 276 while(!done && !abort) {
alindvall 0:b94e330c98ac 277 Thread::signal_wait(0x1, maxDelay);
alindvall 0:b94e330c98ac 278 if (touch->read(coord) == TouchPanel::TouchError_Ok) {
alindvall 0:b94e330c98ac 279 for (int i = 0; i < NumButtons; i++) {
alindvall 0:b94e330c98ac 280 if (_buttons[i]->handle(coord.x, coord.y, coord.z > 0)) {
alindvall 0:b94e330c98ac 281 _buttons[i]->draw();
alindvall 0:b94e330c98ac 282 if (_buttons[i]->pressed()) {
alindvall 0:b94e330c98ac 283 lastPressed = i; // new button pressed
alindvall 0:b94e330c98ac 284 t.reset();
alindvall 0:b94e330c98ac 285 repeatAt = 1000;
alindvall 0:b94e330c98ac 286 }
alindvall 0:b94e330c98ac 287 }
alindvall 0:b94e330c98ac 288 }
alindvall 0:b94e330c98ac 289 if (lastPressed == ButtonUp || lastPressed == ButtonDown) {
alindvall 0:b94e330c98ac 290 maxDelay = 10;
alindvall 0:b94e330c98ac 291 if (_buttons[lastPressed]->pressed() && t.read_ms() > repeatAt) {
alindvall 0:b94e330c98ac 292 modifyValue((lastPressed == ButtonUp) ? 1 : -1);
alindvall 0:b94e330c98ac 293 repeatAt = t.read_ms()+(200/(t.read_ms()/1000));
alindvall 0:b94e330c98ac 294 }
alindvall 0:b94e330c98ac 295 } else {
alindvall 0:b94e330c98ac 296 maxDelay = osWaitForever;
alindvall 0:b94e330c98ac 297 }
alindvall 0:b94e330c98ac 298 }
alindvall 0:b94e330c98ac 299 }
alindvall 0:b94e330c98ac 300
alindvall 0:b94e330c98ac 301 if (!abort) {
alindvall 0:b94e330c98ac 302 #if defined(DM_BOARD_USE_REGISTRY)
alindvall 0:b94e330c98ac 303 Registry* reg = DMBoard::instance().registry();
alindvall 0:b94e330c98ac 304 RtosLog* log = DMBoard::instance().logger();
alindvall 0:b94e330c98ac 305 char buf[16] = {0};
alindvall 0:b94e330c98ac 306 sprintf(buf, "%lu.%lu.%lu.%lu", _values[0], _values[1], _values[2], _values[3]);
alindvall 0:b94e330c98ac 307 reg->setValue("IP Address", buf);
alindvall 0:b94e330c98ac 308 log->printf("New STATIC IP Address: %s\n", buf);
alindvall 0:b94e330c98ac 309 sprintf(buf, "%lu.%lu.%lu.%lu", _values[4], _values[5], _values[6], _values[7]);
alindvall 0:b94e330c98ac 310 reg->setValue("Net Mask", buf);
alindvall 0:b94e330c98ac 311 log->printf("New STATIC Net Mask: %s\n", buf);
alindvall 0:b94e330c98ac 312 sprintf(buf, "%lu.%lu.%lu.%lu", _values[8], _values[9], _values[10], _values[11]);
alindvall 0:b94e330c98ac 313 reg->setValue("Gateway", buf);
alindvall 0:b94e330c98ac 314 log->printf("New STATIC Gateway: %s\n", buf);
alindvall 0:b94e330c98ac 315 reg->store();
alindvall 0:b94e330c98ac 316 #endif
alindvall 0:b94e330c98ac 317 }
alindvall 0:b94e330c98ac 318
alindvall 0:b94e330c98ac 319 // User has clicked the button, restore the original FB
alindvall 0:b94e330c98ac 320 _disp->swapFramebuffer(oldFB);
alindvall 0:b94e330c98ac 321 swim_window_close(_win);
alindvall 0:b94e330c98ac 322 }
alindvall 0:b94e330c98ac 323
alindvall 0:b94e330c98ac 324 bool AppNetworkSettings::teardown()
alindvall 0:b94e330c98ac 325 {
alindvall 0:b94e330c98ac 326 if (_win != NULL) {
alindvall 0:b94e330c98ac 327 free(_win);
alindvall 0:b94e330c98ac 328 _win = NULL;
alindvall 0:b94e330c98ac 329 }
alindvall 0:b94e330c98ac 330 if (_fb != NULL) {
alindvall 0:b94e330c98ac 331 free(_fb);
alindvall 0:b94e330c98ac 332 _fb = NULL;
alindvall 0:b94e330c98ac 333 }
alindvall 0:b94e330c98ac 334 for (int i = 0; i < NumButtons; i++) {
alindvall 0:b94e330c98ac 335 if (_buttons[i] != NULL) {
alindvall 0:b94e330c98ac 336 delete _buttons[i];
alindvall 0:b94e330c98ac 337 _buttons[i] = NULL;
alindvall 0:b94e330c98ac 338 }
alindvall 0:b94e330c98ac 339 }
alindvall 0:b94e330c98ac 340 if (_digitImage.pointerToFree != NULL) {
alindvall 0:b94e330c98ac 341 free(_digitImage.pointerToFree);
alindvall 0:b94e330c98ac 342 _digitImage.pointerToFree = NULL;
alindvall 0:b94e330c98ac 343 }
alindvall 0:b94e330c98ac 344 return true;
alindvall 0:b94e330c98ac 345 }
alindvall 0:b94e330c98ac 346
alindvall 0:b94e330c98ac 347 void AppNetworkSettings::modifyValue(int mod)
alindvall 0:b94e330c98ac 348 {
alindvall 0:b94e330c98ac 349 _values[_activeField] = (mod + _values[_activeField]) % 256;
alindvall 0:b94e330c98ac 350 ((DigitButton*)_buttons[_activeField])->setValue(_values[_activeField]);
alindvall 0:b94e330c98ac 351 }
alindvall 0:b94e330c98ac 352
alindvall 0:b94e330c98ac 353 void AppNetworkSettings::changeActiveField(bool next)
alindvall 0:b94e330c98ac 354 {
alindvall 0:b94e330c98ac 355 markField(_activeField, false);
alindvall 0:b94e330c98ac 356 if (next) {
alindvall 0:b94e330c98ac 357 _activeField = (_activeField+1) % NumFields;
alindvall 0:b94e330c98ac 358 } else {
alindvall 0:b94e330c98ac 359 _activeField = (_activeField+NumFields-1) % NumFields;
alindvall 0:b94e330c98ac 360 }
alindvall 0:b94e330c98ac 361 markField(_activeField, true);
alindvall 0:b94e330c98ac 362 }
alindvall 0:b94e330c98ac 363
alindvall 0:b94e330c98ac 364 void AppNetworkSettings::setActiveField(uint32_t newField)
alindvall 0:b94e330c98ac 365 {
alindvall 0:b94e330c98ac 366 if (_activeField != newField && newField < NumFields) {
alindvall 0:b94e330c98ac 367 markField(_activeField, false);
alindvall 0:b94e330c98ac 368 _activeField = newField;
alindvall 0:b94e330c98ac 369 markField(_activeField, true);
alindvall 0:b94e330c98ac 370 }
alindvall 0:b94e330c98ac 371 }
alindvall 0:b94e330c98ac 372
alindvall 0:b94e330c98ac 373 void AppNetworkSettings::addResource(Resources id, Resource* res)
alindvall 0:b94e330c98ac 374 {
alindvall 0:b94e330c98ac 375 _res[id] = res;
alindvall 0:b94e330c98ac 376 }
alindvall 0:b94e330c98ac 377
alindvall 0:b94e330c98ac 378