version 1.0

Dependencies:   CMSIS_DSP_401 GPS MPU9150_DMP PID QuaternionMath Servo mbed

Fork of SolarOnFoils_MainModule_20150518 by Dannis Brugman

Committer:
Dannis_mbed
Date:
Fri Jun 26 09:21:33 2015 +0000
Revision:
1:b4a0d63db637
Parent:
0:81b21910454e
Child:
2:f6d058931b17
presentation version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dannis_mbed 0:81b21910454e 1 #include "menu.h"
Dannis_mbed 0:81b21910454e 2 #include "string.h"
Dannis_mbed 0:81b21910454e 3
Dannis_mbed 1:b4a0d63db637 4 #define DEVICE_ID 201
Dannis_mbed 0:81b21910454e 5
Dannis_mbed 0:81b21910454e 6 // Contructor
Dannis_mbed 0:81b21910454e 7 Menu::Menu() :
Dannis_mbed 0:81b21910454e 8 uiCounter(0),
Dannis_mbed 1:b4a0d63db637 9 bMenu(1),
Dannis_mbed 1:b4a0d63db637 10 bReadHeight(0),
Dannis_mbed 0:81b21910454e 11 bError(0)
Dannis_mbed 0:81b21910454e 12 {
Dannis_mbed 0:81b21910454e 13 init();
Dannis_mbed 0:81b21910454e 14 };
Dannis_mbed 0:81b21910454e 15
Dannis_mbed 0:81b21910454e 16 Menu::~Menu()
Dannis_mbed 0:81b21910454e 17 {
Dannis_mbed 0:81b21910454e 18 };
Dannis_mbed 0:81b21910454e 19
Dannis_mbed 1:b4a0d63db637 20 extern Menu mLCDMenu;
Dannis_mbed 0:81b21910454e 21 extern SystemVar svSoF;
Dannis_mbed 0:81b21910454e 22 extern Serial debug;
Dannis_mbed 1:b4a0d63db637 23 extern CAN CANbus;
Dannis_mbed 0:81b21910454e 24 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 25 // init //
Dannis_mbed 0:81b21910454e 26 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 27 void Menu::init(void)
Dannis_mbed 0:81b21910454e 28 {
Dannis_mbed 0:81b21910454e 29 memset (cTextLine1,' ',16);
Dannis_mbed 0:81b21910454e 30 memset (cTextLine2,' ',16);
Dannis_mbed 0:81b21910454e 31 }
Dannis_mbed 0:81b21910454e 32 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 33 // set's //
Dannis_mbed 0:81b21910454e 34 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 35
Dannis_mbed 0:81b21910454e 36 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 37 // get's //
Dannis_mbed 0:81b21910454e 38 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 39 char* Menu::getLine1(void)
Dannis_mbed 0:81b21910454e 40 {
Dannis_mbed 0:81b21910454e 41 static char* pLine1;
Dannis_mbed 0:81b21910454e 42 pLine1 = cTextLine1;
Dannis_mbed 0:81b21910454e 43 return pLine1;
Dannis_mbed 0:81b21910454e 44 }
Dannis_mbed 0:81b21910454e 45
Dannis_mbed 0:81b21910454e 46 char* Menu::getLine2(void)
Dannis_mbed 0:81b21910454e 47 {
Dannis_mbed 0:81b21910454e 48 static char* pLine2;
Dannis_mbed 0:81b21910454e 49 pLine2 = cTextLine2;
Dannis_mbed 0:81b21910454e 50 return pLine2;
Dannis_mbed 0:81b21910454e 51 }
Dannis_mbed 0:81b21910454e 52
Dannis_mbed 1:b4a0d63db637 53 SCREEN_t Menu::getScreen(void)
Dannis_mbed 1:b4a0d63db637 54 {
Dannis_mbed 1:b4a0d63db637 55 return screen;
Dannis_mbed 1:b4a0d63db637 56 }
Dannis_mbed 1:b4a0d63db637 57
Dannis_mbed 1:b4a0d63db637 58 bool Menu::bGetReadHeight(void)
Dannis_mbed 1:b4a0d63db637 59 {
Dannis_mbed 1:b4a0d63db637 60 return bReadHeight;
Dannis_mbed 1:b4a0d63db637 61 }
Dannis_mbed 0:81b21910454e 62 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 63 // other //
Dannis_mbed 0:81b21910454e 64 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 1:b4a0d63db637 65 void Menu::vRotaryUp(void)
Dannis_mbed 1:b4a0d63db637 66 {
Dannis_mbed 1:b4a0d63db637 67 if(bMenu) vSelectMenu(nextMenu);
Dannis_mbed 1:b4a0d63db637 68 vCheckReadHeight();
Dannis_mbed 1:b4a0d63db637 69 //debug.printf("rotary up %i\r\n", nextMenu);
Dannis_mbed 1:b4a0d63db637 70 }
Dannis_mbed 1:b4a0d63db637 71
Dannis_mbed 1:b4a0d63db637 72 void Menu::vRotaryDown(void)
Dannis_mbed 1:b4a0d63db637 73 {
Dannis_mbed 1:b4a0d63db637 74 if(bMenu) vSelectMenu(prevMenu);
Dannis_mbed 1:b4a0d63db637 75 vCheckReadHeight();
Dannis_mbed 1:b4a0d63db637 76 //debug.printf("rotary down %i\r\n", prevMenu);
Dannis_mbed 1:b4a0d63db637 77 }
Dannis_mbed 1:b4a0d63db637 78
Dannis_mbed 1:b4a0d63db637 79 void Menu::vRotaryConfirm(void)
Dannis_mbed 1:b4a0d63db637 80 {
Dannis_mbed 1:b4a0d63db637 81 if(bMenu) vSelectMenu(confMenu);
Dannis_mbed 1:b4a0d63db637 82 //debug.printf("rotary confirm\r\n");
Dannis_mbed 1:b4a0d63db637 83 }
Dannis_mbed 1:b4a0d63db637 84
Dannis_mbed 1:b4a0d63db637 85 void Menu::vFillString1(void)
Dannis_mbed 1:b4a0d63db637 86 {
Dannis_mbed 1:b4a0d63db637 87 int i;
Dannis_mbed 1:b4a0d63db637 88 int length = strlen(cTextLine1);
Dannis_mbed 1:b4a0d63db637 89 for (i=length; i < 16; i++) strcat(cTextLine1," ");
Dannis_mbed 1:b4a0d63db637 90 }
Dannis_mbed 1:b4a0d63db637 91
Dannis_mbed 0:81b21910454e 92 void Menu::vFillString2(void)
Dannis_mbed 0:81b21910454e 93 {
Dannis_mbed 0:81b21910454e 94 int i;
Dannis_mbed 0:81b21910454e 95 int length = strlen(cTextLine2);
Dannis_mbed 0:81b21910454e 96 for (i=length; i < 16; i++) strcat(cTextLine2," ");
Dannis_mbed 0:81b21910454e 97 }
Dannis_mbed 0:81b21910454e 98
Dannis_mbed 1:b4a0d63db637 99 void Menu::vCheckReadHeight(void)
Dannis_mbed 1:b4a0d63db637 100 {
Dannis_mbed 1:b4a0d63db637 101 if(bReadHeight)
Dannis_mbed 1:b4a0d63db637 102 {
Dannis_mbed 1:b4a0d63db637 103 cStatus = 0xff;
Dannis_mbed 1:b4a0d63db637 104 CANbus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // send clearance true to port height
Dannis_mbed 1:b4a0d63db637 105 }
Dannis_mbed 1:b4a0d63db637 106 else
Dannis_mbed 1:b4a0d63db637 107 {
Dannis_mbed 1:b4a0d63db637 108 cStatus = 0x00;
Dannis_mbed 1:b4a0d63db637 109 CANbus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // send clearance false to port height
Dannis_mbed 1:b4a0d63db637 110 }
Dannis_mbed 1:b4a0d63db637 111 }
Dannis_mbed 1:b4a0d63db637 112
Dannis_mbed 0:81b21910454e 113 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 0:81b21910454e 114 // show screens //
Dannis_mbed 0:81b21910454e 115 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 1:b4a0d63db637 116 void Menu::vShowScreen(SCREEN_t s)
Dannis_mbed 0:81b21910454e 117 {
Dannis_mbed 0:81b21910454e 118 screen = s;
Dannis_mbed 0:81b21910454e 119 uiCounter = rand()% 100 + 1;
Dannis_mbed 0:81b21910454e 120 switch(screen)
Dannis_mbed 0:81b21910454e 121 {
Dannis_mbed 0:81b21910454e 122 case _INIT: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 0:81b21910454e 123 strcpy(cTextLine2," Initialize "); break;
Dannis_mbed 0:81b21910454e 124
Dannis_mbed 1:b4a0d63db637 125 case _STANDBY: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 126 strcpy(cTextLine2," system STANDBY "); break;
Dannis_mbed 1:b4a0d63db637 127
Dannis_mbed 1:b4a0d63db637 128 case _SETTINGS0: strcpy(cTextLine1,">Settings ");
Dannis_mbed 1:b4a0d63db637 129 strcpy(cTextLine2," View settings "); break;
Dannis_mbed 1:b4a0d63db637 130
Dannis_mbed 1:b4a0d63db637 131 case _SETTINGS1: strcpy(cTextLine1," Settings ");
Dannis_mbed 1:b4a0d63db637 132 strcpy(cTextLine2,">View settings "); break;
Dannis_mbed 1:b4a0d63db637 133
Dannis_mbed 1:b4a0d63db637 134 case _SETTINGS2: strcpy(cTextLine1," View settings ");
Dannis_mbed 1:b4a0d63db637 135 strcpy(cTextLine2,">Diagnosis "); break;
Dannis_mbed 0:81b21910454e 136
Dannis_mbed 1:b4a0d63db637 137 case _ACTIVE: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 138 strcpy(cTextLine2," system ACTIVE "); break;
Dannis_mbed 0:81b21910454e 139
Dannis_mbed 1:b4a0d63db637 140 case _FOILBORNE: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 141 strcpy(cTextLine2," FOILBORNE mode "); break;
Dannis_mbed 1:b4a0d63db637 142
Dannis_mbed 1:b4a0d63db637 143 case _FOILASSIST: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 144 strcpy(cTextLine2," FOILASSIST mode"); break;
Dannis_mbed 1:b4a0d63db637 145
Dannis_mbed 1:b4a0d63db637 146 case _HOMESCREEN: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 147 strcpy(cTextLine2,">HOME "); break;
Dannis_mbed 1:b4a0d63db637 148
Dannis_mbed 1:b4a0d63db637 149 case _PROGRESS: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 150 strcpy(cTextLine2,"work in progress"); break;
Dannis_mbed 0:81b21910454e 151
Dannis_mbed 1:b4a0d63db637 152 case _CANINIT: strcpy(cTextLine1," Solar on Foils ");
Dannis_mbed 1:b4a0d63db637 153 strcpy(cTextLine2," CAN INITIALIZE "); break;
Dannis_mbed 0:81b21910454e 154
Dannis_mbed 1:b4a0d63db637 155 case _CANOK: strcpy(cTextLine2," System OK "); break;
Dannis_mbed 0:81b21910454e 156
Dannis_mbed 0:81b21910454e 157 case _CANID101OK: strcpy(cTextLine1," PORT FOIL ");
Dannis_mbed 0:81b21910454e 158 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 159 case _CANID102OK: strcpy(cTextLine1," STARB FOIL ");
Dannis_mbed 0:81b21910454e 160 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 161 case _CANID201OK: strcpy(cTextLine1," PORT HEIGHT ");
Dannis_mbed 0:81b21910454e 162 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 163 case _CANID202OK: strcpy(cTextLine1," STARB HEIGHT ");
Dannis_mbed 0:81b21910454e 164 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 165 case _CANID205OK: strcpy(cTextLine1," GYRO/GPS ");
Dannis_mbed 0:81b21910454e 166 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 167 case _CANID1001OK: strcpy(cTextLine1," EXTERN UI ");
Dannis_mbed 0:81b21910454e 168 strcpy(cTextLine2," CAN OK "); break;
Dannis_mbed 0:81b21910454e 169 case _CANID101FAIL: strcpy(cTextLine1," PORT FOIL ");
Dannis_mbed 0:81b21910454e 170 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 171 case _CANID102FAIL: strcpy(cTextLine1," STARB FOIL ");
Dannis_mbed 0:81b21910454e 172 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 173 case _CANID201FAIL: strcpy(cTextLine1," PORT HEIGHT ");
Dannis_mbed 0:81b21910454e 174 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 175 case _CANID202FAIL: strcpy(cTextLine1," STARB HEIGHT ");
Dannis_mbed 0:81b21910454e 176 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 177 case _CANID205FAIL: strcpy(cTextLine1," GYRO/GPS ");
Dannis_mbed 0:81b21910454e 178 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 179 case _CANID1001FAIL: strcpy(cTextLine1," EXTERN UI ");
Dannis_mbed 0:81b21910454e 180 strcpy(cTextLine2," CAN FAIL "); break;
Dannis_mbed 0:81b21910454e 181
Dannis_mbed 0:81b21910454e 182 case _CANFAIL: strcpy(cTextLine2," System FAIL "); break;
Dannis_mbed 0:81b21910454e 183
Dannis_mbed 0:81b21910454e 184 case _CANNORESPONSE: strcpy(cTextLine2," No CAN responce"); break;
Dannis_mbed 0:81b21910454e 185
Dannis_mbed 0:81b21910454e 186 case _PULSE_IS: strcpy(cTextLine1,"Pulse is: ");
Dannis_mbed 0:81b21910454e 187 // char *intStr = itoa(uiCounter);
Dannis_mbed 0:81b21910454e 188 //string str = string(intStr);
Dannis_mbed 0:81b21910454e 189 // strcpy(cTextLine2, intStr); // about to test
Dannis_mbed 0:81b21910454e 190 break;
Dannis_mbed 0:81b21910454e 191 case _IMUREADY: strcpy(cTextLine1,"MPU9150 is ready"); break;
Dannis_mbed 0:81b21910454e 192
Dannis_mbed 0:81b21910454e 193 case _IMUFAIL: strcpy(cTextLine1,"MPU9150init fail"); break;
Dannis_mbed 0:81b21910454e 194
Dannis_mbed 0:81b21910454e 195 case _ROLLTEST: svSoF.cShowValue(_ROLL);
Dannis_mbed 0:81b21910454e 196 strcpy(cTextLine1," Confirm to end ");
Dannis_mbed 0:81b21910454e 197 strcpy(cTextLine2,"Roll: ");
Dannis_mbed 0:81b21910454e 198 if(svSoF.iGetRollPolarity()!= 0) strcat(cTextLine2,"+");
Dannis_mbed 0:81b21910454e 199 else strcat(cTextLine2,"-");
Dannis_mbed 0:81b21910454e 200 strcat(cTextLine2, svSoF.getValue());
Dannis_mbed 0:81b21910454e 201 strcat(cTextLine2,"\xDF");
Dannis_mbed 0:81b21910454e 202 vFillString2(); break;
Dannis_mbed 0:81b21910454e 203
Dannis_mbed 0:81b21910454e 204 case _PITCHTEST: svSoF.cShowValue(_PITCH);
Dannis_mbed 0:81b21910454e 205 strcpy(cTextLine1," Confirm to end ");
Dannis_mbed 0:81b21910454e 206 strcpy(cTextLine2,"Pitch:");
Dannis_mbed 0:81b21910454e 207 if(svSoF.iGetPitchPolarity()!= 0) strcat(cTextLine2,"+");
Dannis_mbed 0:81b21910454e 208 else strcat(cTextLine2,"-");
Dannis_mbed 0:81b21910454e 209 strcat(cTextLine2, svSoF.getValue());
Dannis_mbed 0:81b21910454e 210 strcat(cTextLine2,"\xDF");
Dannis_mbed 1:b4a0d63db637 211 vFillString2(); break;
Dannis_mbed 1:b4a0d63db637 212
Dannis_mbed 1:b4a0d63db637 213 case _HEIGHTTEST: svSoF.cShowValue(_PHEIGHT);
Dannis_mbed 1:b4a0d63db637 214 strcpy(cTextLine1," Confirm to end ");
Dannis_mbed 1:b4a0d63db637 215 strcpy(cTextLine2,"Port:");
Dannis_mbed 1:b4a0d63db637 216 strcat(cTextLine2, svSoF.getValue());
Dannis_mbed 1:b4a0d63db637 217 strcat(cTextLine2," cm.");
Dannis_mbed 1:b4a0d63db637 218 vFillString2(); break;
Dannis_mbed 1:b4a0d63db637 219
Dannis_mbed 1:b4a0d63db637 220
Dannis_mbed 1:b4a0d63db637 221 case _SHOWHEIGHTFB: svSoF.cShowValue(_HEIGHTFOILBORNE);
Dannis_mbed 1:b4a0d63db637 222 strcpy(cTextLine1," Confirm to end ");
Dannis_mbed 1:b4a0d63db637 223 strcpy(cTextLine2,"Height:");
Dannis_mbed 1:b4a0d63db637 224 strcat(cTextLine2, svSoF.getValue());
Dannis_mbed 1:b4a0d63db637 225 strcat(cTextLine2," cm.");
Dannis_mbed 1:b4a0d63db637 226 vFillString2(); break;
Dannis_mbed 0:81b21910454e 227
Dannis_mbed 0:81b21910454e 228 } // End switch case
Dannis_mbed 0:81b21910454e 229 //debug.printf("strlen %i\t", strlen(cTextLine2)); // debug stringlength
Dannis_mbed 0:81b21910454e 230 if(strlen(cTextLine1) > 18) strcpy(cTextLine1," Line overflow ");
Dannis_mbed 0:81b21910454e 231 if(strlen(cTextLine2) > 18) strcpy(cTextLine2," Line overflow ");
Dannis_mbed 0:81b21910454e 232 // \xDF for degree sign.
Dannis_mbed 1:b4a0d63db637 233 // "\x18\x19\x1a\x1b" arrows
Dannis_mbed 0:81b21910454e 234 }
Dannis_mbed 0:81b21910454e 235
Dannis_mbed 1:b4a0d63db637 236 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 1:b4a0d63db637 237 // select menu screens //
Dannis_mbed 1:b4a0d63db637 238 //////////////////////////////////////////////////////////////////////////////////////
Dannis_mbed 1:b4a0d63db637 239 void Menu::vSelectMenu(MENU_t m)
Dannis_mbed 1:b4a0d63db637 240 {
Dannis_mbed 1:b4a0d63db637 241 menu = m;
Dannis_mbed 1:b4a0d63db637 242 switch(menu)
Dannis_mbed 1:b4a0d63db637 243 {
Dannis_mbed 1:b4a0d63db637 244 case _MENU0_0: mLCDMenu.vShowScreen(_INIT); nextMenu = _MENU0_1; break;
Dannis_mbed 1:b4a0d63db637 245
Dannis_mbed 1:b4a0d63db637 246 case _MENU0_1: mLCDMenu.vShowScreen(_STANDBY); nextMenu = _MENU0_2; break;
Dannis_mbed 1:b4a0d63db637 247
Dannis_mbed 1:b4a0d63db637 248 case _MENU0_2: mLCDMenu.vShowScreen(_SETTINGS0); nextMenu = _MENU0_3; prevMenu = _MENU0_4; confMenu = _MENU1_2; break;
Dannis_mbed 1:b4a0d63db637 249
Dannis_mbed 1:b4a0d63db637 250 case _MENU0_3: mLCDMenu.vShowScreen(_SETTINGS1); nextMenu = _MENU0_4; prevMenu = _MENU0_2; confMenu = _MENU1_31; break;
Dannis_mbed 1:b4a0d63db637 251
Dannis_mbed 1:b4a0d63db637 252 case _MENU0_4: mLCDMenu.vShowScreen(_SETTINGS2); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_4; break;
Dannis_mbed 1:b4a0d63db637 253
Dannis_mbed 1:b4a0d63db637 254 case _MENU1_2: mLCDMenu.vShowScreen(_PROGRESS); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_2; break;
Dannis_mbed 1:b4a0d63db637 255
Dannis_mbed 1:b4a0d63db637 256 case _MENU1_4: mLCDMenu.vShowScreen(_PROGRESS); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_2; break;
Dannis_mbed 1:b4a0d63db637 257
Dannis_mbed 1:b4a0d63db637 258 case _MENU1_31: mLCDMenu.vShowScreen(_ROLLTEST); nextMenu = _MENU1_32; prevMenu = _HOME; confMenu = _MENU1_31; break;
Dannis_mbed 1:b4a0d63db637 259
Dannis_mbed 1:b4a0d63db637 260 case _MENU1_32: mLCDMenu.vShowScreen(_PITCHTEST); nextMenu = _MENU1_33; prevMenu = _MENU1_31; confMenu = _MENU1_32; break;
Dannis_mbed 1:b4a0d63db637 261
Dannis_mbed 1:b4a0d63db637 262 case _MENU1_33: mLCDMenu.vShowScreen(_SHOWHEIGHTFB); bReadHeight = false; nextMenu = _MENU1_34; prevMenu = _MENU1_32; confMenu = _MENU1_33; break;
Dannis_mbed 1:b4a0d63db637 263
Dannis_mbed 1:b4a0d63db637 264 case _MENU1_34: mLCDMenu.vShowScreen(_HEIGHTTEST); bReadHeight = true; nextMenu = _HOME; prevMenu = _MENU1_33; confMenu = _MENU1_34; break;
Dannis_mbed 1:b4a0d63db637 265
Dannis_mbed 1:b4a0d63db637 266 case _HOME: mLCDMenu.vShowScreen(_HOMESCREEN); bReadHeight = false; nextMenu = _MENU1_31; prevMenu = _MENU1_34; confMenu = _MENU0_2; break;
Dannis_mbed 1:b4a0d63db637 267
Dannis_mbed 1:b4a0d63db637 268 }//end switch
Dannis_mbed 1:b4a0d63db637 269 }
Dannis_mbed 0:81b21910454e 270