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:
Wed Oct 21 18:08:19 2015 +0000
Revision:
3:13b323fb08e8
Parent:
2:a655d6640167
Child:
4:95cde28a5cf1
Callbacks work !

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 "main.h"
capsavon 2:a655d6640167 6
capsavon 0:742b53764813 7 LCD_DISCO_F746NG lcd;
capsavon 0:742b53764813 8 TS_DISCO_F746NG ts;
capsavon 3:13b323fb08e8 9 DigitalOut myled(LED1);
capsavon 0:742b53764813 10
capsavon 2:a655d6640167 11 //MenuGUIButton button01;
capsavon 2:a655d6640167 12 //MenuGUIButton button02;
capsavon 2:a655d6640167 13
capsavon 2:a655d6640167 14 // TODO : add Ticker function
capsavon 2:a655d6640167 15
capsavon 0:742b53764813 16 int main()
capsavon 0:742b53764813 17 {
capsavon 0:742b53764813 18 TS_StateTypeDef TS_State;
capsavon 0:742b53764813 19 uint16_t x, y;
capsavon 0:742b53764813 20 uint8_t text[30];
capsavon 0:742b53764813 21 uint8_t status;
capsavon 0:742b53764813 22 uint8_t idx;
capsavon 0:742b53764813 23 uint8_t cleared = 0;
capsavon 0:742b53764813 24 uint8_t prev_nb_touches = 0;
capsavon 0:742b53764813 25
capsavon 0:742b53764813 26 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
capsavon 3:13b323fb08e8 27 led_on();
capsavon 2:a655d6640167 28 wait(0.2);
capsavon 0:742b53764813 29
capsavon 0:742b53764813 30 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
capsavon 0:742b53764813 31 if (status != TS_OK) {
capsavon 0:742b53764813 32 lcd.Clear(LCD_COLOR_RED);
capsavon 0:742b53764813 33 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 0:742b53764813 34 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 35 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
capsavon 0:742b53764813 36 } else {
capsavon 0:742b53764813 37 lcd.Clear(LCD_COLOR_GREEN);
capsavon 0:742b53764813 38 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 0:742b53764813 39 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 40 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
capsavon 0:742b53764813 41 }
capsavon 0:742b53764813 42
capsavon 2:a655d6640167 43 wait(0.2);
capsavon 0:742b53764813 44 lcd.SetFont(&Font12);
capsavon 0:742b53764813 45 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 0:742b53764813 46 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 3:13b323fb08e8 47 led_off();
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 3:13b323fb08e8 61 ->menu02 -> Led ON
capsavon 0:742b53764813 62
capsavon 2:a655d6640167 63 |------| |------|
capsavon 2:a655d6640167 64 | b5 | | b8 |
capsavon 2:a655d6640167 65 |------| |------|
capsavon 3:13b323fb08e8 66 -> Led OFF
capsavon 2:a655d6640167 67 menu_main menu01 menu02
capsavon 2:a655d6640167 68
capsavon 2:a655d6640167 69 */
capsavon 2:a655d6640167 70
capsavon 2:a655d6640167 71 MenuGUIButton button01 (10, 80, 80, 50, "b1", &lcd);
capsavon 2:a655d6640167 72 MenuGUIButton button02 (10, 140, 80, 50, "b2", &lcd);
capsavon 2:a655d6640167 73 MenuGUIButton button03 (100, 80, 80, 50, "b3", &lcd);
capsavon 2:a655d6640167 74 MenuGUIButton button04 (100, 140, 80, 50, "b4", &lcd);
capsavon 2:a655d6640167 75
capsavon 2:a655d6640167 76 MenuGUIButton button05 (190, 80, 80, 50, "b5", &lcd);
capsavon 3:13b323fb08e8 77 button05.callback = true;
capsavon 3:13b323fb08e8 78 //button05.callback_function = led_off;
capsavon 3:13b323fb08e8 79 button05.callback_function = led_toggle;
capsavon 2:a655d6640167 80 MenuGUIButton button06 (190, 140, 80, 50, "b6", &lcd);
capsavon 2:a655d6640167 81 MenuGUIButton button07 (190, 80, 80, 50, "b7", &lcd);
capsavon 3:13b323fb08e8 82 button07.callback = true;
capsavon 3:13b323fb08e8 83 //button07.callback_function = led_on;
capsavon 3:13b323fb08e8 84 button07.callback_function = led_toggle;
capsavon 2:a655d6640167 85 MenuGUIButton button08 (190, 140, 80, 50, "b8", &lcd);
capsavon 2:a655d6640167 86
capsavon 2:a655d6640167 87 // Main menu
capsavon 2:a655d6640167 88 MenuGUIMenu menu_main (2, 10, 80);
capsavon 2:a655d6640167 89 menu_main.add_button(&button01, 0, 1);
capsavon 2:a655d6640167 90 menu_main.add_button(&button02, 1, 1);
capsavon 2:a655d6640167 91
capsavon 2:a655d6640167 92 // Menu01
capsavon 2:a655d6640167 93 MenuGUIMenu menu01 (3, 100, 80);
capsavon 2:a655d6640167 94 menu01.add_button(&button03, 0, 1);
capsavon 2:a655d6640167 95 menu01.add_button(&button04, 1, 1);
capsavon 2:a655d6640167 96 menu01.add_button(&button05, 2, 1);
capsavon 2:a655d6640167 97
capsavon 2:a655d6640167 98 // Menu02
capsavon 2:a655d6640167 99 MenuGUIMenu menu02 (3, 190, 80);
capsavon 2:a655d6640167 100 menu02.add_button(&button06, 0, 1);
capsavon 2:a655d6640167 101 menu02.add_button(&button07, 1, 1);
capsavon 2:a655d6640167 102 menu02.add_button(&button08, 2, 1);
capsavon 2:a655d6640167 103
capsavon 2:a655d6640167 104 // Main MenuGUI object
capsavon 2:a655d6640167 105 MenuGUI menugui01 (3);
capsavon 2:a655d6640167 106 menugui01.add_menu (&menu_main, 0);
capsavon 2:a655d6640167 107 menugui01.add_menu (&menu01, 1);
capsavon 2:a655d6640167 108 menugui01.add_menu (&menu02, 2);
capsavon 2:a655d6640167 109
capsavon 2:a655d6640167 110 // Set transitions
capsavon 2:a655d6640167 111 menugui01.set_transition(1, 0, 0);
capsavon 2:a655d6640167 112 menugui01.set_transition(2, 0, 1);
capsavon 2:a655d6640167 113
capsavon 2:a655d6640167 114
capsavon 0:742b53764813 115 while(1) {
capsavon 2:a655d6640167 116
capsavon 2:a655d6640167 117 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 2:a655d6640167 118 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 119
capsavon 0:742b53764813 120 ts.GetState(&TS_State);
capsavon 0:742b53764813 121 if (TS_State.touchDetected) {
capsavon 0:742b53764813 122 // Clear lines corresponding to old touches coordinates
capsavon 0:742b53764813 123 if (TS_State.touchDetected < prev_nb_touches) {
capsavon 0:742b53764813 124 for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
capsavon 0:742b53764813 125 lcd.ClearStringLine(idx);
capsavon 0:742b53764813 126 }
capsavon 0:742b53764813 127 }
capsavon 0:742b53764813 128 prev_nb_touches = TS_State.touchDetected;
capsavon 0:742b53764813 129
capsavon 0:742b53764813 130 cleared = 0;
capsavon 0:742b53764813 131
capsavon 0:742b53764813 132 sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
capsavon 0:742b53764813 133 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 0:742b53764813 134
capsavon 0:742b53764813 135 for (idx = 0; idx < TS_State.touchDetected; idx++) {
capsavon 0:742b53764813 136 x = TS_State.touchX[idx];
capsavon 0:742b53764813 137 y = TS_State.touchY[idx];
capsavon 0:742b53764813 138 sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
capsavon 0:742b53764813 139 lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 140
capsavon 0:742b53764813 141 }
capsavon 0:742b53764813 142
capsavon 0:742b53764813 143 lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
capsavon 1:7bec6efe01d9 144
capsavon 0:742b53764813 145 } else {
capsavon 0:742b53764813 146 if (!cleared) {
capsavon 0:742b53764813 147 lcd.Clear(LCD_COLOR_BLUE);
capsavon 0:742b53764813 148 sprintf((char*)text, "Touches: 0");
capsavon 0:742b53764813 149 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 150
capsavon 0:742b53764813 151 cleared = 1;
capsavon 0:742b53764813 152 }
capsavon 0:742b53764813 153 }
capsavon 2:a655d6640167 154
capsavon 2:a655d6640167 155 /* ------------------------------------------------------------------------ */
capsavon 2:a655d6640167 156
capsavon 2:a655d6640167 157 // Touch detection of one button
capsavon 2:a655d6640167 158 if (TS_State.touchDetected > 0) {
capsavon 2:a655d6640167 159
capsavon 2:a655d6640167 160 menugui01.update(TS_State.touchX[0], TS_State.touchY[0]);
capsavon 2:a655d6640167 161
capsavon 2:a655d6640167 162 }
capsavon 2:a655d6640167 163 else {
capsavon 2:a655d6640167 164
capsavon 2:a655d6640167 165 menugui01.update();
capsavon 2:a655d6640167 166
capsavon 2:a655d6640167 167 }
capsavon 2:a655d6640167 168
capsavon 2:a655d6640167 169 menugui01.display();
capsavon 2:a655d6640167 170
capsavon 0:742b53764813 171 }
capsavon 0:742b53764813 172 }
capsavon 1:7bec6efe01d9 173
capsavon 2:a655d6640167 174
capsavon 3:13b323fb08e8 175 // Functions definition
capsavon 3:13b323fb08e8 176 void led_power (int state) {
capsavon 3:13b323fb08e8 177 myled = state;
capsavon 3:13b323fb08e8 178 }
capsavon 3:13b323fb08e8 179
capsavon 3:13b323fb08e8 180 void led_on (void) {
capsavon 3:13b323fb08e8 181 led_power(1);
capsavon 3:13b323fb08e8 182 }
capsavon 3:13b323fb08e8 183
capsavon 3:13b323fb08e8 184 void led_off (void) {
capsavon 3:13b323fb08e8 185 led_power(0);
capsavon 3:13b323fb08e8 186 }
capsavon 3:13b323fb08e8 187
capsavon 3:13b323fb08e8 188 void led_toggle (void) {
capsavon 3:13b323fb08e8 189 static int toggle = 0;
capsavon 3:13b323fb08e8 190 if (toggle) {
capsavon 3:13b323fb08e8 191 led_on();
capsavon 3:13b323fb08e8 192 toggle = 0;
capsavon 3:13b323fb08e8 193 }
capsavon 3:13b323fb08e8 194 else {
capsavon 3:13b323fb08e8 195 led_off();
capsavon 3:13b323fb08e8 196 toggle = 1;
capsavon 3:13b323fb08e8 197 }
capsavon 3:13b323fb08e8 198 }
capsavon 2:a655d6640167 199
capsavon 2:a655d6640167 200