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:
Wed Feb 15 20:29:17 2017 +0000
Revision:
3:12b494808ffa
Parent:
2:14dc9a7c52ac
Child:
4:0e5755618652
login and rough password and engrng screen functioning;

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 2:14dc9a7c52ac 114 void get_kbd_str(char *bufr)
jknowles 2:14dc9a7c52ac 115 {
jknowles 2:14dc9a7c52ac 116 start_KB_LCD();
jknowles 2:14dc9a7c52ac 117 Keyboard_init(0, 80);
jknowles 2:14dc9a7c52ac 118 while(1) {
jknowles 2:14dc9a7c52ac 119 key = Keyboard_handler(bufr);
jknowles 2:14dc9a7c52ac 120 if (key == KEY_ENTER_VALUE) break; // to go to another screen ?
jknowles 2:14dc9a7c52ac 121 HAL_Delay(10);
jknowles 2:14dc9a7c52ac 122 }
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 2:14dc9a7c52ac 131 int main(void)
jknowles 2:14dc9a7c52ac 132 {
jknowles 3:12b494808ffa 133 #define STATSIZE 128
jknowles 3:12b494808ffa 134
jknowles 3:12b494808ffa 135 char sbuf[128];
jknowles 3:12b494808ffa 136 char dbgtlk[128];
jknowles 3:12b494808ffa 137
jknowles 3:12b494808ffa 138 char tstr[128];
jknowles 3:12b494808ffa 139 char bstr[32];
jknowles 3:12b494808ffa 140 char cstr[32];
jknowles 3:12b494808ffa 141 char estr[32];
jknowles 3:12b494808ffa 142 char pbstr[32];
jknowles 3:12b494808ffa 143 int ii;
jknowles 3:12b494808ffa 144
jknowles 3:12b494808ffa 145 char *rawp;
jknowles 3:12b494808ffa 146 char *csvp;
jknowles 3:12b494808ffa 147 int rawq;
jknowles 3:12b494808ffa 148 int bi, ci, ei;
jknowles 3:12b494808ffa 149 float pbf, bf, cf, ef;
jknowles 3:12b494808ffa 150 float pbar[STATSIZE];
jknowles 3:12b494808ffa 151 float bar[STATSIZE];
jknowles 3:12b494808ffa 152 float car[STATSIZE];
jknowles 3:12b494808ffa 153 float ear[STATSIZE];
jknowles 3:12b494808ffa 154 int duds = 0;
jknowles 3:12b494808ffa 155 char gotc;
jknowles 3:12b494808ffa 156
jknowles 3:12b494808ffa 157 float pb_mn, pb_sd, b_mn, b_sd, c_mn, c_sd, e_mn, e_sd;
jknowles 3:12b494808ffa 158
jknowles 2:14dc9a7c52ac 159 char msg_b[128];
jknowles 2:14dc9a7c52ac 160 int u_tries;
jknowles 2:14dc9a7c52ac 161 char u_name[128];
jknowles 2:14dc9a7c52ac 162 char u_passwd[128];
jknowles 2:14dc9a7c52ac 163 char out_str[128];
jknowles 2:14dc9a7c52ac 164
jknowles 3:12b494808ffa 165 pc.baud(9600);
jknowles 3:12b494808ffa 166
jknowles 3:12b494808ffa 167
jknowles 3:12b494808ffa 168
jknowles 3:12b494808ffa 169 for (u_tries = 0; u_tries < 2; u_tries++)
jknowles 2:14dc9a7c52ac 170 {
jknowles 2:14dc9a7c52ac 171 start_KB_LCD();
jknowles 2:14dc9a7c52ac 172 BSP_LCD_SetFont(&Font24);
jknowles 2:14dc9a7c52ac 173 strcpy(msg_b, "ENTER NAME");
jknowles 2:14dc9a7c52ac 174 BSP_LCD_DisplayStringAtLine(1, (uint8_t *) msg_b);
jknowles 2:14dc9a7c52ac 175 HAL_Delay(2000);
jknowles 2:14dc9a7c52ac 176 get_kbd_str(kb_buffer);
jknowles 2:14dc9a7c52ac 177 strcpy(u_name, kb_buffer);
jknowles 2:14dc9a7c52ac 178 kb_buffer[0] = '\0';
jknowles 2:14dc9a7c52ac 179
jknowles 2:14dc9a7c52ac 180 start_KB_LCD();
jknowles 2:14dc9a7c52ac 181 BSP_LCD_SetFont(&Font24);
jknowles 2:14dc9a7c52ac 182 strcpy(msg_b, "ENTER PASSWORD");
jknowles 2:14dc9a7c52ac 183 BSP_LCD_DisplayStringAtLine(1, (uint8_t *) msg_b);
jknowles 2:14dc9a7c52ac 184 HAL_Delay(2000);
jknowles 2:14dc9a7c52ac 185 get_kbd_str(kb_buffer);
jknowles 2:14dc9a7c52ac 186 strcpy(u_passwd, kb_buffer);
jknowles 2:14dc9a7c52ac 187 kb_buffer[0] = '\0';
jknowles 2:14dc9a7c52ac 188
jknowles 2:14dc9a7c52ac 189 start_KB_LCD();
jknowles 2:14dc9a7c52ac 190 BSP_LCD_SetFont(&Font24);
jknowles 2:14dc9a7c52ac 191 strcpy(out_str, "USER NAME: ");
jknowles 2:14dc9a7c52ac 192 strcat(out_str, u_name);
jknowles 2:14dc9a7c52ac 193 BSP_LCD_DisplayStringAtLine(2, (uint8_t *) out_str);
jknowles 2:14dc9a7c52ac 194 strcpy(out_str, "USER PASWD: ");
jknowles 2:14dc9a7c52ac 195 strcat(out_str, u_passwd);
jknowles 2:14dc9a7c52ac 196 BSP_LCD_DisplayStringAtLine(4, (uint8_t *) out_str);
jknowles 3:12b494808ffa 197 HAL_Delay(150);
jknowles 3:12b494808ffa 198 }
jknowles 3:12b494808ffa 199
jknowles 3:12b494808ffa 200
jknowles 3:12b494808ffa 201
jknowles 3:12b494808ffa 202 start_KB_LCD();
jknowles 3:12b494808ffa 203 BSP_LCD_SetFont(&Font16);
jknowles 3:12b494808ffa 204
jknowles 3:12b494808ffa 205 /* orangecalypso */
jknowles 3:12b494808ffa 206 BSP_LCD_DisplayStringAtLine(1, (uint8_t *)"RDG Pb #B #C #E ");
jknowles 3:12b494808ffa 207 wait(1.0);
jknowles 3:12b494808ffa 208 for (ii=0; ii<STATSIZE; ii++) {
jknowles 3:12b494808ffa 209
jknowles 3:12b494808ffa 210 pbf = 10.2 + (float)ii/20.1;
jknowles 3:12b494808ffa 211 bi = 80 + ii*20; bf = (float) bi;
jknowles 3:12b494808ffa 212 ci = 60 + ii*6; cf = (float) ci;
jknowles 3:12b494808ffa 213 ei = 30 + ii*4; ef = (float) ei;
jknowles 3:12b494808ffa 214
jknowles 3:12b494808ffa 215 pbar[ii] = pbf;
jknowles 3:12b494808ffa 216 bar[ii] = bf;
jknowles 3:12b494808ffa 217 car[ii] = cf;
jknowles 3:12b494808ffa 218 ear[ii] = ef;
jknowles 3:12b494808ffa 219
jknowles 3:12b494808ffa 220 sprintf(tstr, "%03d %3.2f %05d %05d %05d ", ii, pbf, bi, ci, ei);
jknowles 3:12b494808ffa 221 BSP_LCD_DisplayStringAtLine((2 + (ii%5)), (uint8_t *)tstr);
jknowles 3:12b494808ffa 222
jknowles 3:12b494808ffa 223 if (ii > 2) {
jknowles 3:12b494808ffa 224 GetMeanSD(pbar, ii, &pb_mn, &pb_sd);
jknowles 3:12b494808ffa 225 GetMeanSD(bar, ii, &b_mn, &b_sd);
jknowles 3:12b494808ffa 226 GetMeanSD(car, ii, &c_mn, &c_sd);
jknowles 3:12b494808ffa 227 GetMeanSD(ear, ii, &e_mn, &e_sd);
jknowles 3:12b494808ffa 228
jknowles 3:12b494808ffa 229 sprintf(tstr, "Mean %4.2f %05d %05d %05d", pb_mn, (int)b_mn, (int)c_mn, (int)e_mn);
jknowles 3:12b494808ffa 230 BSP_LCD_DisplayStringAtLine((8), (uint8_t *)tstr);
jknowles 3:12b494808ffa 231 sprintf(tstr, "StDv %4.2f %05d %05d %05d", pb_sd, (int)b_sd, (int)c_sd, (int)e_sd);
jknowles 3:12b494808ffa 232 BSP_LCD_DisplayStringAtLine((9), (uint8_t *)tstr);
jknowles 3:12b494808ffa 233
jknowles 3:12b494808ffa 234 sprintf(tstr, " %-04.2f%% %-04.2f%%", 100.0*(c_sd/c_mn), 100.0*(e_sd/e_mn));
jknowles 3:12b494808ffa 235 BSP_LCD_DisplayStringAtLine((10), (uint8_t *)tstr);
jknowles 3:12b494808ffa 236
jknowles 2:14dc9a7c52ac 237
jknowles 3:12b494808ffa 238 strcpy (sbuf, "---trying serial----");
jknowles 3:12b494808ffa 239 BSP_LCD_DisplayStringAtLine(LINE(11), (uint8_t *)sbuf);
jknowles 3:12b494808ffa 240 rawq = 0;
jknowles 3:12b494808ffa 241 strcpy (sbuf, "--currently empty---");
jknowles 3:12b494808ffa 242 rawp = sbuf; // ptr to the buffer
jknowles 3:12b494808ffa 243 rawq = duds = 0; // raw qty , number of duds for timeout
jknowles 3:12b494808ffa 244 gotc = 'x';
jknowles 3:12b494808ffa 245 strcpy (dbgtlk, "---pt1---");
jknowles 3:12b494808ffa 246 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 247 while (gotc != '\r' && gotc != '\n' && rawq < 127 && duds < 40) {
jknowles 3:12b494808ffa 248 if (pc.readable()) {
jknowles 3:12b494808ffa 249 duds = 0; // reset timeout counter
jknowles 3:12b494808ffa 250 strcpy (dbgtlk, "---pt2---");
jknowles 3:12b494808ffa 251 BSP_LCD_DisplayStringAtLine(LINE(12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 252 gotc = pc.getc();
jknowles 3:12b494808ffa 253 *rawp = gotc;
jknowles 3:12b494808ffa 254 rawq++;
jknowles 3:12b494808ffa 255 rawp++;
jknowles 3:12b494808ffa 256 }
jknowles 3:12b494808ffa 257 strcpy (dbgtlk, "---pt3---");
jknowles 3:12b494808ffa 258 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 259 wait(.05);
jknowles 3:12b494808ffa 260 duds++;
jknowles 3:12b494808ffa 261 }
jknowles 3:12b494808ffa 262 strcpy (dbgtlk, "---pt4---");
jknowles 3:12b494808ffa 263 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 3:12b494808ffa 264 if (rawq > 0) *rawp = '\0';
jknowles 3:12b494808ffa 265 sbuf[20] = '\0'; // just for test .... truncate the line
jknowles 3:12b494808ffa 266 BSP_LCD_DisplayStringAtLine((11), (uint8_t *)sbuf);
jknowles 3:12b494808ffa 267 /*
jknowles 3:12b494808ffa 268 char *get_csv_itm(char *inbufloc, char *rcvr_str)
jknowles 3:12b494808ffa 269 csvp = sbuf;
jknowles 3:12b494808ffa 270 csvp = get_csv_itm(csvp, bstr); bi = atoi(bstr);
jknowles 3:12b494808ffa 271 csvp = get_csv_itm(csvp, cstr); ci = atoi(cstr);
jknowles 3:12b494808ffa 272 csvp = get_csv_itm(csvp, estr); ei = atoi(estr);
jknowles 3:12b494808ffa 273 csvp = get_csv_itm(csvp, pbstr); pbf = atof(pbstr);
jknowles 3:12b494808ffa 274 */
jknowles 3:12b494808ffa 275 }
jknowles 3:12b494808ffa 276 wait(2.0);
jknowles 3:12b494808ffa 277 }
jknowles 3:12b494808ffa 278
jknowles 3:12b494808ffa 279
jknowles 3:12b494808ffa 280
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 2:14dc9a7c52ac 290
jknowles 2:14dc9a7c52ac 291
Faberge 0:3ea368f65bca 292 }