The out-of-the-box demo application flashed on all display modules before they are shipped.

Dependencies:   DMBasicGUI DMSupport

This is the software that is flashed on the LPC4088 Display Modules before they are shipped from Embedded Artists.

Information

This project works on both the 4.3" and 5" display modules but requires different file systems to handle the different display resolutions.

For the 4.3" displays first drag-n-drop the media/fs_480_raw.fs5 (if you are using the new DAPLINK firmware use fs_480_raw.hex) 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.

For the 5" displays first drag-n-drop the media/fs_800_raw.fsF (if you are using the new DAPLINK firmware use fs_800_raw.hex) 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.

There is a prebuilt version of the demo binary here.

This is what it looks like on a 4.3" display:

/media/uploads/embeddedartists/demo480_cap_000.png /media/uploads/embeddedartists/demo480_cap_001.png /media/uploads/embeddedartists/demo480_cap_002.png /media/uploads/embeddedartists/demo480_cap_004.png /media/uploads/embeddedartists/demo480_cap_006.png /media/uploads/embeddedartists/demo480_cap_007.png /media/uploads/embeddedartists/demo480_cap_008.png
The first slide from the Slideshow:
/media/uploads/embeddedartists/demo480_cap_003.png
A couple of images from the Image Viewer
/media/uploads/embeddedartists/demo480_cap_009.png /media/uploads/embeddedartists/demo480_cap_010.png

Committer:
embeddedartists
Date:
Tue Nov 05 09:11:36 2019 +0000
Revision:
5:6ca8470ba8f8
Parent:
2:229f88d6f56b
Updates related to mbed OS 5

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) {
embeddedartists 5:6ca8470ba8f8 277 ThisThread::flags_wait_all_for(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};
embeddedartists 5:6ca8470ba8f8 306 sprintf(buf, "%u.%u.%u.%u", _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);
embeddedartists 5:6ca8470ba8f8 309 sprintf(buf, "%u.%u.%u.%u", _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);
embeddedartists 5:6ca8470ba8f8 312 sprintf(buf, "%u.%u.%u.%u", _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