Clone of the "Keyboard" project combined with string>LCD calls and Serial reading for the STM32F746G-DISCO. Screen has to be reset and the font set again, and Serial must be created and destroyed each time, to dodge apparent F7 lower-level issues. Keyboard can print prompt.

Dependencies:   BSP_DISCO_F746NG mbed

Fork of Keyboard by Faberge Fabulous

Committer:
jknowles
Date:
Fri Feb 17 18:29:25 2017 +0000
Revision:
4:0e5755618652
Parent:
3:12b494808ffa
Child:
5:50c5e677f71a
added prompting to keyboard handler

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Faberge 0:3ea368f65bca 1 /*
Faberge 0:3ea368f65bca 2 *******************************************************************************
Faberge 0:3ea368f65bca 3 * Пример работы экранной клавиатуры на демо-плате STM32F746NG Discovery с
Faberge 0:3ea368f65bca 4 * использованием стандартного набора библиотек BSP и пользовательской
Faberge 0:3ea368f65bca 5 * библиотеки "keyboard.h"
Faberge 0:3ea368f65bca 6 *******************************************************************************
Faberge 0:3ea368f65bca 7 */
Faberge 0:3ea368f65bca 8
Faberge 0:3ea368f65bca 9 /* Добавляем библиотеку для работы с LCD */
Faberge 0:3ea368f65bca 10 #include "stm32746g_discovery_lcd.h"
Faberge 0:3ea368f65bca 11
Faberge 0:3ea368f65bca 12 /* Добавляем библиотеку экранной клавиатуры */
Faberge 0:3ea368f65bca 13 #include "keyboard.h"
Faberge 0:3ea368f65bca 14
jknowles 3:12b494808ffa 15
jknowles 3:12b494808ffa 16 #include "mbed.h"
jknowles 3:12b494808ffa 17
jknowles 3:12b494808ffa 18
jknowles 3:12b494808ffa 19
Faberge 0:3ea368f65bca 20 /* Вспомогательные переменые */
Faberge 0:3ea368f65bca 21 uint8_t i;
Faberge 0:3ea368f65bca 22 uint8_t key;
jknowles 1:25b8d7bfc7d4 23 uint8_t len;
Faberge 0:3ea368f65bca 24
Faberge 0:3ea368f65bca 25 /* Пользовательский буфер */
jknowles 2:14dc9a7c52ac 26 char kb_buffer[45];
Faberge 0:3ea368f65bca 27
jknowles 3:12b494808ffa 28
jknowles 3:12b494808ffa 29 RawSerial pc(USBTX, USBRX); // terminal console
jknowles 3:12b494808ffa 30
jknowles 3:12b494808ffa 31 /*
jknowles 3:12b494808ffa 32 * Calculates the mean and standard deviation of the array in data[]
jknowles 3:12b494808ffa 33 */
jknowles 3:12b494808ffa 34 void GetMeanSD(float data[], int qty, float *mn, float *sd)
jknowles 3:12b494808ffa 35 {
jknowles 3:12b494808ffa 36 float sum = 0.0;
jknowles 3:12b494808ffa 37 float mean;
jknowles 3:12b494808ffa 38 float stdDev = 0.0;
jknowles 3:12b494808ffa 39 int i;
jknowles 3:12b494808ffa 40 float delt;
jknowles 3:12b494808ffa 41 for(i=0; i<qty; i++) {
jknowles 3:12b494808ffa 42 sum = sum + data[i];
jknowles 3:12b494808ffa 43 }
jknowles 3:12b494808ffa 44 mean = sum/(float)qty;
jknowles 3:12b494808ffa 45
jknowles 3:12b494808ffa 46 for(i=0; i<qty; i++) {
jknowles 3:12b494808ffa 47 delt = data[i] - mean;
jknowles 3:12b494808ffa 48 stdDev = stdDev + (delt * delt);
jknowles 3:12b494808ffa 49 }
jknowles 3:12b494808ffa 50 *sd = sqrt(stdDev/(float)qty);
jknowles 3:12b494808ffa 51 *mn = mean;
jknowles 3:12b494808ffa 52 }
jknowles 3:12b494808ffa 53
jknowles 3:12b494808ffa 54
jknowles 3:12b494808ffa 55
jknowles 3:12b494808ffa 56 /* copies comma-seperate item into
jknowles 3:12b494808ffa 57 * rcvr_str, returns ptr to the next or end
jknowles 3:12b494808ffa 58 */
jknowles 3:12b494808ffa 59 char *get_csv_itm(char *inbufloc, char *rcvr_str)
jknowles 3:12b494808ffa 60 {
jknowles 3:12b494808ffa 61 char *p1 = inbufloc;
jknowles 3:12b494808ffa 62 char *p2 = rcvr_str ;
jknowles 3:12b494808ffa 63 *p2 = '\0'; /* null the rcvr first */
jknowles 3:12b494808ffa 64 if (*p1 == ',') /* this is and empty item */
jknowles 3:12b494808ffa 65 {
jknowles 3:12b494808ffa 66 p1++;
jknowles 3:12b494808ffa 67 return(p1);
jknowles 3:12b494808ffa 68 }
jknowles 3:12b494808ffa 69 while (*p1 != '\0' && *p1 != ',')
jknowles 3:12b494808ffa 70 {
jknowles 3:12b494808ffa 71 *p2 = *p1;
jknowles 3:12b494808ffa 72 p1++;
jknowles 3:12b494808ffa 73 p2++;
jknowles 3:12b494808ffa 74 }
jknowles 3:12b494808ffa 75 if (*p1 == ',')
jknowles 3:12b494808ffa 76 {
jknowles 3:12b494808ffa 77 p1++; /* move to nxt item */
jknowles 3:12b494808ffa 78 }
jknowles 3:12b494808ffa 79 *p2 = '\0';
jknowles 3:12b494808ffa 80 return(p1);
jknowles 3:12b494808ffa 81 }
jknowles 3:12b494808ffa 82
jknowles 3:12b494808ffa 83
jknowles 3:12b494808ffa 84
jknowles 3:12b494808ffa 85
jknowles 3:12b494808ffa 86
jknowles 3:12b494808ffa 87
jknowles 2:14dc9a7c52ac 88 void start_KB_LCD()
Faberge 0:3ea368f65bca 89 {
Faberge 0:3ea368f65bca 90 /* Инициализация дисплея */
jknowles 2:14dc9a7c52ac 91 /* Включаем дисплей */
jknowles 2:14dc9a7c52ac 92 /* Настраиваем первый и второй слои дисплея */
Faberge 0:3ea368f65bca 93 BSP_LCD_Init();
Faberge 0:3ea368f65bca 94 BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
Faberge 0:3ea368f65bca 95 BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS + (BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * 4));
Faberge 0:3ea368f65bca 96 BSP_LCD_DisplayOn();
Faberge 0:3ea368f65bca 97 BSP_LCD_SelectLayer(0);
Faberge 0:3ea368f65bca 98 BSP_LCD_Clear(LCD_COLOR_WHITE);
Faberge 0:3ea368f65bca 99 BSP_LCD_SelectLayer(1);
Faberge 0:3ea368f65bca 100 BSP_LCD_Clear(LCD_COLOR_BLACK);
Faberge 0:3ea368f65bca 101 BSP_LCD_SetTransparency(0, 0);
Faberge 0:3ea368f65bca 102 BSP_LCD_SetTransparency(1, 100);
Faberge 0:3ea368f65bca 103 /* Настраиваем цвет фона экрана и цвет текста, а также шрифт */
jknowles 2:14dc9a7c52ac 104 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
Faberge 0:3ea368f65bca 105 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
Faberge 0:3ea368f65bca 106 BSP_LCD_SetFont(&Font16);
jknowles 2:14dc9a7c52ac 107
Faberge 0:3ea368f65bca 108 /* Инициализация тач-экрана*/
Faberge 0:3ea368f65bca 109 BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
jknowles 2:14dc9a7c52ac 110
jknowles 2:14dc9a7c52ac 111 }
jknowles 2:14dc9a7c52ac 112
jknowles 2:14dc9a7c52ac 113
jknowles 4:0e5755618652 114
jknowles 4:0e5755618652 115 void get_kbd_str(char *promp, char *bufr)
jknowles 2:14dc9a7c52ac 116 {
jknowles 2:14dc9a7c52ac 117 start_KB_LCD();
jknowles 2:14dc9a7c52ac 118 Keyboard_init(0, 80);
jknowles 2:14dc9a7c52ac 119 while(1) {
jknowles 4:0e5755618652 120 key = Keyboard_handler(promp, bufr);
jknowles 2:14dc9a7c52ac 121 if (key == KEY_ENTER_VALUE) break; // to go to another screen ?
jknowles 2:14dc9a7c52ac 122 HAL_Delay(10);
jknowles 2:14dc9a7c52ac 123 }
jknowles 2:14dc9a7c52ac 124 }
jknowles 2:14dc9a7c52ac 125
jknowles 2:14dc9a7c52ac 126
jknowles 2:14dc9a7c52ac 127
jknowles 2:14dc9a7c52ac 128
jknowles 2:14dc9a7c52ac 129
jknowles 2:14dc9a7c52ac 130
jknowles 4:0e5755618652 131
jknowles 4:0e5755618652 132
jknowles 2:14dc9a7c52ac 133 /* Основная программа */
jknowles 2:14dc9a7c52ac 134 int main(void)
jknowles 2:14dc9a7c52ac 135 {
jknowles 3:12b494808ffa 136 #define STATSIZE 128
jknowles 3:12b494808ffa 137
jknowles 3:12b494808ffa 138 char sbuf[128];
jknowles 3:12b494808ffa 139 char dbgtlk[128];
jknowles 3:12b494808ffa 140
jknowles 3:12b494808ffa 141 char tstr[128];
jknowles 3:12b494808ffa 142 char bstr[32];
jknowles 3:12b494808ffa 143 char cstr[32];
jknowles 3:12b494808ffa 144 char estr[32];
jknowles 3:12b494808ffa 145 char pbstr[32];
jknowles 3:12b494808ffa 146 int ii;
jknowles 3:12b494808ffa 147
jknowles 3:12b494808ffa 148 char *rawp;
jknowles 3:12b494808ffa 149 char *csvp;
jknowles 3:12b494808ffa 150 int rawq;
jknowles 3:12b494808ffa 151 int bi, ci, ei;
jknowles 3:12b494808ffa 152 float pbf, bf, cf, ef;
jknowles 3:12b494808ffa 153 float pbar[STATSIZE];
jknowles 3:12b494808ffa 154 float bar[STATSIZE];
jknowles 3:12b494808ffa 155 float car[STATSIZE];
jknowles 3:12b494808ffa 156 float ear[STATSIZE];
jknowles 3:12b494808ffa 157 int duds = 0;
jknowles 3:12b494808ffa 158 char gotc;
jknowles 3:12b494808ffa 159
jknowles 3:12b494808ffa 160 float pb_mn, pb_sd, b_mn, b_sd, c_mn, c_sd, e_mn, e_sd;
jknowles 3:12b494808ffa 161
jknowles 2:14dc9a7c52ac 162 char msg_b[128];
jknowles 2:14dc9a7c52ac 163 int u_tries;
jknowles 2:14dc9a7c52ac 164 char u_name[128];
jknowles 2:14dc9a7c52ac 165 char u_passwd[128];
jknowles 2:14dc9a7c52ac 166 char out_str[128];
jknowles 2:14dc9a7c52ac 167
jknowles 3:12b494808ffa 168 pc.baud(9600);
jknowles 3:12b494808ffa 169
jknowles 3:12b494808ffa 170
jknowles 4:0e5755618652 171
jknowles 4:0e5755618652 172
jknowles 3:12b494808ffa 173 for (u_tries = 0; u_tries < 2; u_tries++)
jknowles 2:14dc9a7c52ac 174 {
jknowles 2:14dc9a7c52ac 175 start_KB_LCD();
jknowles 2:14dc9a7c52ac 176 BSP_LCD_SetFont(&Font24);
jknowles 4:0e5755618652 177 get_kbd_str("ENTER NAME:", kb_buffer);
jknowles 4:0e5755618652 178
jknowles 2:14dc9a7c52ac 179 strcpy(u_name, kb_buffer);
jknowles 2:14dc9a7c52ac 180 kb_buffer[0] = '\0';
jknowles 2:14dc9a7c52ac 181
jknowles 2:14dc9a7c52ac 182 start_KB_LCD();
jknowles 2:14dc9a7c52ac 183 BSP_LCD_SetFont(&Font24);
jknowles 4:0e5755618652 184 get_kbd_str("ENTER PASSWORD:", kb_buffer);
jknowles 2:14dc9a7c52ac 185 strcpy(u_passwd, kb_buffer);
jknowles 2:14dc9a7c52ac 186 kb_buffer[0] = '\0';
jknowles 2:14dc9a7c52ac 187
jknowles 2:14dc9a7c52ac 188 start_KB_LCD();
jknowles 2:14dc9a7c52ac 189 BSP_LCD_SetFont(&Font24);
jknowles 2:14dc9a7c52ac 190 strcpy(out_str, "USER NAME: ");
jknowles 2:14dc9a7c52ac 191 strcat(out_str, u_name);
jknowles 2:14dc9a7c52ac 192 BSP_LCD_DisplayStringAtLine(2, (uint8_t *) out_str);
jknowles 2:14dc9a7c52ac 193 strcpy(out_str, "USER PASWD: ");
jknowles 2:14dc9a7c52ac 194 strcat(out_str, u_passwd);
jknowles 2:14dc9a7c52ac 195 BSP_LCD_DisplayStringAtLine(4, (uint8_t *) out_str);
jknowles 4:0e5755618652 196 HAL_Delay(3000);
jknowles 3:12b494808ffa 197 }
jknowles 3:12b494808ffa 198
jknowles 3:12b494808ffa 199
jknowles 3:12b494808ffa 200
jknowles 4:0e5755618652 201
jknowles 4:0e5755618652 202
jknowles 4:0e5755618652 203
jknowles 4:0e5755618652 204
jknowles 4:0e5755618652 205
jknowles 3:12b494808ffa 206 start_KB_LCD();
jknowles 3:12b494808ffa 207 BSP_LCD_SetFont(&Font16);
jknowles 3:12b494808ffa 208
jknowles 3:12b494808ffa 209 /* orangecalypso */
jknowles 3:12b494808ffa 210 BSP_LCD_DisplayStringAtLine(1, (uint8_t *)"RDG Pb #B #C #E ");
jknowles 3:12b494808ffa 211 wait(1.0);
jknowles 3:12b494808ffa 212 for (ii=0; ii<STATSIZE; ii++) {
jknowles 3:12b494808ffa 213
jknowles 3:12b494808ffa 214 pbf = 10.2 + (float)ii/20.1;
jknowles 3:12b494808ffa 215 bi = 80 + ii*20; bf = (float) bi;
jknowles 3:12b494808ffa 216 ci = 60 + ii*6; cf = (float) ci;
jknowles 3:12b494808ffa 217 ei = 30 + ii*4; ef = (float) ei;
jknowles 3:12b494808ffa 218
jknowles 3:12b494808ffa 219 pbar[ii] = pbf;
jknowles 3:12b494808ffa 220 bar[ii] = bf;
jknowles 3:12b494808ffa 221 car[ii] = cf;
jknowles 3:12b494808ffa 222 ear[ii] = ef;
jknowles 3:12b494808ffa 223
jknowles 3:12b494808ffa 224 sprintf(tstr, "%03d %3.2f %05d %05d %05d ", ii, pbf, bi, ci, ei);
jknowles 3:12b494808ffa 225 BSP_LCD_DisplayStringAtLine((2 + (ii%5)), (uint8_t *)tstr);
jknowles 3:12b494808ffa 226
jknowles 3:12b494808ffa 227 if (ii > 2) {
jknowles 3:12b494808ffa 228 GetMeanSD(pbar, ii, &pb_mn, &pb_sd);
jknowles 3:12b494808ffa 229 GetMeanSD(bar, ii, &b_mn, &b_sd);
jknowles 3:12b494808ffa 230 GetMeanSD(car, ii, &c_mn, &c_sd);
jknowles 3:12b494808ffa 231 GetMeanSD(ear, ii, &e_mn, &e_sd);
jknowles 3:12b494808ffa 232
jknowles 3:12b494808ffa 233 sprintf(tstr, "Mean %4.2f %05d %05d %05d", pb_mn, (int)b_mn, (int)c_mn, (int)e_mn);
jknowles 3:12b494808ffa 234 BSP_LCD_DisplayStringAtLine((8), (uint8_t *)tstr);
jknowles 3:12b494808ffa 235 sprintf(tstr, "StDv %4.2f %05d %05d %05d", pb_sd, (int)b_sd, (int)c_sd, (int)e_sd);
jknowles 3:12b494808ffa 236 BSP_LCD_DisplayStringAtLine((9), (uint8_t *)tstr);
jknowles 3:12b494808ffa 237
jknowles 3:12b494808ffa 238 sprintf(tstr, " %-04.2f%% %-04.2f%%", 100.0*(c_sd/c_mn), 100.0*(e_sd/e_mn));
jknowles 3:12b494808ffa 239 BSP_LCD_DisplayStringAtLine((10), (uint8_t *)tstr);
jknowles 3:12b494808ffa 240
jknowles 2:14dc9a7c52ac 241
jknowles 3:12b494808ffa 242 strcpy (sbuf, "---trying serial----");
jknowles 3:12b494808ffa 243 BSP_LCD_DisplayStringAtLine(LINE(11), (uint8_t *)sbuf);
jknowles 3:12b494808ffa 244 rawq = 0;
jknowles 3:12b494808ffa 245 strcpy (sbuf, "--currently empty---");
jknowles 3:12b494808ffa 246 rawp = sbuf; // ptr to the buffer
jknowles 3:12b494808ffa 247 rawq = duds = 0; // raw qty , number of duds for timeout
jknowles 3:12b494808ffa 248 gotc = 'x';
jknowles 3:12b494808ffa 249 strcpy (dbgtlk, "---pt1---");
jknowles 3:12b494808ffa 250 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 251 while (gotc != '\r' && gotc != '\n' && rawq < 127 && duds < 40) {
jknowles 3:12b494808ffa 252 if (pc.readable()) {
jknowles 3:12b494808ffa 253 duds = 0; // reset timeout counter
jknowles 3:12b494808ffa 254 strcpy (dbgtlk, "---pt2---");
jknowles 3:12b494808ffa 255 BSP_LCD_DisplayStringAtLine(LINE(12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 256 gotc = pc.getc();
jknowles 3:12b494808ffa 257 *rawp = gotc;
jknowles 3:12b494808ffa 258 rawq++;
jknowles 3:12b494808ffa 259 rawp++;
jknowles 3:12b494808ffa 260 }
jknowles 3:12b494808ffa 261 strcpy (dbgtlk, "---pt3---");
jknowles 3:12b494808ffa 262 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 263 wait(.05);
jknowles 3:12b494808ffa 264 duds++;
jknowles 3:12b494808ffa 265 }
jknowles 3:12b494808ffa 266 strcpy (dbgtlk, "---pt4---");
jknowles 3:12b494808ffa 267 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 268 if (rawq > 0) *rawp = '\0';
jknowles 3:12b494808ffa 269 sbuf[20] = '\0'; // just for test .... truncate the line
jknowles 3:12b494808ffa 270 BSP_LCD_DisplayStringAtLine((11), (uint8_t *)sbuf);
jknowles 3:12b494808ffa 271 /*
jknowles 3:12b494808ffa 272 char *get_csv_itm(char *inbufloc, char *rcvr_str)
jknowles 3:12b494808ffa 273 csvp = sbuf;
jknowles 3:12b494808ffa 274 csvp = get_csv_itm(csvp, bstr); bi = atoi(bstr);
jknowles 3:12b494808ffa 275 csvp = get_csv_itm(csvp, cstr); ci = atoi(cstr);
jknowles 3:12b494808ffa 276 csvp = get_csv_itm(csvp, estr); ei = atoi(estr);
jknowles 3:12b494808ffa 277 csvp = get_csv_itm(csvp, pbstr); pbf = atof(pbstr);
jknowles 3:12b494808ffa 278 */
jknowles 3:12b494808ffa 279 }
jknowles 3:12b494808ffa 280 wait(2.0);
jknowles 3:12b494808ffa 281 }
jknowles 3:12b494808ffa 282
jknowles 3:12b494808ffa 283
jknowles 3:12b494808ffa 284
jknowles 3:12b494808ffa 285
jknowles 3:12b494808ffa 286
jknowles 3:12b494808ffa 287
jknowles 3:12b494808ffa 288
jknowles 3:12b494808ffa 289
jknowles 3:12b494808ffa 290
jknowles 3:12b494808ffa 291
jknowles 3:12b494808ffa 292
jknowles 3:12b494808ffa 293
jknowles 2:14dc9a7c52ac 294
jknowles 2:14dc9a7c52ac 295
Faberge 0:3ea368f65bca 296 }