Demo for Embedded World 2015.

Dependencies:   DMBasicGUI DMSupport

Demo running on several LPC4088 Display Modules on the Embedded World 2015 exhibition.

Information

To run the demo first drag-n-drop the to_sync.fs3 file to the MBED drive and then drag-n-drop the demo itself. This way both the file system and software are up to date.

This is what the launcher will look like:

/media/uploads/embeddedartists/ew2015_cap_000.png /media/uploads/embeddedartists/ew2015_cap_002.png /media/uploads/embeddedartists/ew2015_cap_003.png /media/uploads/embeddedartists/ew2015_cap_004.png /media/uploads/embeddedartists/ew2015_cap_005.png /media/uploads/embeddedartists/ew2015_cap_006.png

Committer:
embeddedartists
Date:
Tue Nov 05 08:20:16 2019 +0000
Revision:
1:1a01ef434a72
Parent:
0:6bd24cbb88a1
Updates related to mbed OS 5

Who changed what in which revision?

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