Basic Example / test application for the on-board MICRON QSPI-Flash. Ported from DISCO_L476VG_QSPI. Added printing on serial output and LCD screen.

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG QSPI_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
capsavon
Date:
Tue Oct 20 15:00:59 2015 +0000
Revision:
2:a655d6640167
Parent:
1:7bec6efe01d9
Child:
3:13b323fb08e8
Menu display and transitions OK.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
capsavon 0:742b53764813 1 #include "mbed.h"
capsavon 0:742b53764813 2 #include "TS_DISCO_F746NG.h"
capsavon 0:742b53764813 3 #include "LCD_DISCO_F746NG.h"
capsavon 0:742b53764813 4
capsavon 2:a655d6640167 5 #include "MenuGUIButton.h"
capsavon 2:a655d6640167 6 #include "MenuGUIMenu.h"
capsavon 2:a655d6640167 7 #include "MenuGUI.h"
capsavon 2:a655d6640167 8 #include "main.h"
capsavon 2:a655d6640167 9
capsavon 0:742b53764813 10 LCD_DISCO_F746NG lcd;
capsavon 0:742b53764813 11 TS_DISCO_F746NG ts;
capsavon 0:742b53764813 12
capsavon 2:a655d6640167 13 //MenuGUIButton button01;
capsavon 2:a655d6640167 14 //MenuGUIButton button02;
capsavon 2:a655d6640167 15
capsavon 2:a655d6640167 16 // TODO : add Ticker function
capsavon 2:a655d6640167 17
capsavon 0:742b53764813 18 int main()
capsavon 0:742b53764813 19 {
capsavon 0:742b53764813 20 TS_StateTypeDef TS_State;
capsavon 0:742b53764813 21 uint16_t x, y;
capsavon 0:742b53764813 22 uint8_t text[30];
capsavon 0:742b53764813 23 uint8_t status;
capsavon 0:742b53764813 24 uint8_t idx;
capsavon 0:742b53764813 25 uint8_t cleared = 0;
capsavon 0:742b53764813 26 uint8_t prev_nb_touches = 0;
capsavon 0:742b53764813 27
capsavon 0:742b53764813 28 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
capsavon 2:a655d6640167 29 wait(0.2);
capsavon 0:742b53764813 30
capsavon 0:742b53764813 31 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
capsavon 0:742b53764813 32 if (status != TS_OK) {
capsavon 0:742b53764813 33 lcd.Clear(LCD_COLOR_RED);
capsavon 0:742b53764813 34 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 0:742b53764813 35 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 36 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
capsavon 0:742b53764813 37 } else {
capsavon 0:742b53764813 38 lcd.Clear(LCD_COLOR_GREEN);
capsavon 0:742b53764813 39 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 0:742b53764813 40 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 41 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
capsavon 0:742b53764813 42 }
capsavon 0:742b53764813 43
capsavon 2:a655d6640167 44 wait(0.2);
capsavon 0:742b53764813 45 lcd.SetFont(&Font12);
capsavon 0:742b53764813 46 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 0:742b53764813 47 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 1:7bec6efe01d9 48
capsavon 2:a655d6640167 49 /* For test / demo
capsavon 2:a655d6640167 50 ------------------
capsavon 2:a655d6640167 51 2 menus + 1 main menu. The main menu has two buttons, each calling one of the two sub-menus:
capsavon 2:a655d6640167 52
capsavon 2:a655d6640167 53 |------| |------| |------|
capsavon 2:a655d6640167 54 | b1 | | b3 | | b6 |
capsavon 2:a655d6640167 55 |------| |------| |------|
capsavon 2:a655d6640167 56 ->menu01
capsavon 2:a655d6640167 57
capsavon 2:a655d6640167 58 |------| |------| |------|
capsavon 2:a655d6640167 59 | b2 | | b4 | | b7 |
capsavon 2:a655d6640167 60 |------| |------| |------|
capsavon 2:a655d6640167 61 ->menu02
capsavon 0:742b53764813 62
capsavon 2:a655d6640167 63 |------| |------|
capsavon 2:a655d6640167 64 | b5 | | b8 |
capsavon 2:a655d6640167 65 |------| |------|
capsavon 2:a655d6640167 66 menu_main menu01 menu02
capsavon 2:a655d6640167 67
capsavon 2:a655d6640167 68 */
capsavon 2:a655d6640167 69
capsavon 2:a655d6640167 70 MenuGUIButton button01 (10, 80, 80, 50, "b1", &lcd);
capsavon 2:a655d6640167 71 MenuGUIButton button02 (10, 140, 80, 50, "b2", &lcd);
capsavon 2:a655d6640167 72 MenuGUIButton button03 (100, 80, 80, 50, "b3", &lcd);
capsavon 2:a655d6640167 73 MenuGUIButton button04 (100, 140, 80, 50, "b4", &lcd);
capsavon 2:a655d6640167 74
capsavon 2:a655d6640167 75 MenuGUIButton button05 (190, 80, 80, 50, "b5", &lcd);
capsavon 2:a655d6640167 76 MenuGUIButton button06 (190, 140, 80, 50, "b6", &lcd);
capsavon 2:a655d6640167 77 MenuGUIButton button07 (190, 80, 80, 50, "b7", &lcd);
capsavon 2:a655d6640167 78 MenuGUIButton button08 (190, 140, 80, 50, "b8", &lcd);
capsavon 2:a655d6640167 79
capsavon 2:a655d6640167 80 // Main menu
capsavon 2:a655d6640167 81 MenuGUIMenu menu_main (2, 10, 80);
capsavon 2:a655d6640167 82 menu_main.add_button(&button01, 0, 1);
capsavon 2:a655d6640167 83 menu_main.add_button(&button02, 1, 1);
capsavon 2:a655d6640167 84
capsavon 2:a655d6640167 85 // Menu01
capsavon 2:a655d6640167 86 MenuGUIMenu menu01 (3, 100, 80);
capsavon 2:a655d6640167 87 menu01.add_button(&button03, 0, 1);
capsavon 2:a655d6640167 88 menu01.add_button(&button04, 1, 1);
capsavon 2:a655d6640167 89 menu01.add_button(&button05, 2, 1);
capsavon 2:a655d6640167 90
capsavon 2:a655d6640167 91 // Menu02
capsavon 2:a655d6640167 92 MenuGUIMenu menu02 (3, 190, 80);
capsavon 2:a655d6640167 93 menu02.add_button(&button06, 0, 1);
capsavon 2:a655d6640167 94 menu02.add_button(&button07, 1, 1);
capsavon 2:a655d6640167 95 menu02.add_button(&button08, 2, 1);
capsavon 2:a655d6640167 96
capsavon 2:a655d6640167 97 // Main MenuGUI object
capsavon 2:a655d6640167 98 MenuGUI menugui01 (3);
capsavon 2:a655d6640167 99 menugui01.add_menu (&menu_main, 0);
capsavon 2:a655d6640167 100 menugui01.add_menu (&menu01, 1);
capsavon 2:a655d6640167 101 menugui01.add_menu (&menu02, 2);
capsavon 2:a655d6640167 102
capsavon 2:a655d6640167 103 // Set transitions
capsavon 2:a655d6640167 104 menugui01.set_transition(1, 0, 0);
capsavon 2:a655d6640167 105 menugui01.set_transition(2, 0, 1);
capsavon 2:a655d6640167 106
capsavon 2:a655d6640167 107
capsavon 0:742b53764813 108 while(1) {
capsavon 2:a655d6640167 109
capsavon 2:a655d6640167 110 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 2:a655d6640167 111 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 112
capsavon 0:742b53764813 113 ts.GetState(&TS_State);
capsavon 0:742b53764813 114 if (TS_State.touchDetected) {
capsavon 0:742b53764813 115 // Clear lines corresponding to old touches coordinates
capsavon 0:742b53764813 116 if (TS_State.touchDetected < prev_nb_touches) {
capsavon 0:742b53764813 117 for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
capsavon 0:742b53764813 118 lcd.ClearStringLine(idx);
capsavon 0:742b53764813 119 }
capsavon 0:742b53764813 120 }
capsavon 0:742b53764813 121 prev_nb_touches = TS_State.touchDetected;
capsavon 0:742b53764813 122
capsavon 0:742b53764813 123 cleared = 0;
capsavon 0:742b53764813 124
capsavon 0:742b53764813 125 sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
capsavon 0:742b53764813 126 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 0:742b53764813 127
capsavon 0:742b53764813 128 for (idx = 0; idx < TS_State.touchDetected; idx++) {
capsavon 0:742b53764813 129 x = TS_State.touchX[idx];
capsavon 0:742b53764813 130 y = TS_State.touchY[idx];
capsavon 0:742b53764813 131 sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
capsavon 0:742b53764813 132 lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 133
capsavon 0:742b53764813 134 }
capsavon 0:742b53764813 135
capsavon 0:742b53764813 136 lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
capsavon 1:7bec6efe01d9 137
capsavon 0:742b53764813 138 } else {
capsavon 0:742b53764813 139 if (!cleared) {
capsavon 0:742b53764813 140 lcd.Clear(LCD_COLOR_BLUE);
capsavon 0:742b53764813 141 sprintf((char*)text, "Touches: 0");
capsavon 0:742b53764813 142 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 143
capsavon 0:742b53764813 144 cleared = 1;
capsavon 0:742b53764813 145 }
capsavon 0:742b53764813 146 }
capsavon 2:a655d6640167 147
capsavon 2:a655d6640167 148 /* ------------------------------------------------------------------------ */
capsavon 2:a655d6640167 149
capsavon 2:a655d6640167 150 // Touch detection of one button
capsavon 2:a655d6640167 151 if (TS_State.touchDetected > 0) {
capsavon 2:a655d6640167 152
capsavon 2:a655d6640167 153 menugui01.update(TS_State.touchX[0], TS_State.touchY[0]);
capsavon 2:a655d6640167 154
capsavon 2:a655d6640167 155 }
capsavon 2:a655d6640167 156 else {
capsavon 2:a655d6640167 157
capsavon 2:a655d6640167 158 menugui01.update();
capsavon 2:a655d6640167 159
capsavon 2:a655d6640167 160 }
capsavon 2:a655d6640167 161
capsavon 2:a655d6640167 162 menugui01.display();
capsavon 2:a655d6640167 163
capsavon 0:742b53764813 164 }
capsavon 0:742b53764813 165 }
capsavon 1:7bec6efe01d9 166
capsavon 2:a655d6640167 167
capsavon 2:a655d6640167 168
capsavon 2:a655d6640167 169
capsavon 2:a655d6640167 170