Kenji Arai / Mbed OS DISCO-F769NI_several_example

Dependencies:   BD_SD_DISCO_F769NI BSP_DISCO_F769NI LCD_DISCO_F769NI TS_DISCO_F769NI USBHost_F769NI

Committer:
kenjiArai
Date:
Wed Aug 07 05:39:01 2019 +0000
Revision:
3:35ac9ee7d2d6
1st trial revision (Not finalized yet)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 3:35ac9ee7d2d6 1 /*
kenjiArai 3:35ac9ee7d2d6 2 * Mbed function
kenjiArai 3:35ac9ee7d2d6 3 *
kenjiArai 3:35ac9ee7d2d6 4 * Created: July 30th, 2019
kenjiArai 3:35ac9ee7d2d6 5 * Revised: July 30th, 2019
kenjiArai 3:35ac9ee7d2d6 6 */
kenjiArai 3:35ac9ee7d2d6 7
kenjiArai 3:35ac9ee7d2d6 8 #include "select_program.h"
kenjiArai 3:35ac9ee7d2d6 9 #if defined(NIOI_SENSOR)
kenjiArai 3:35ac9ee7d2d6 10
kenjiArai 3:35ac9ee7d2d6 11 // Include --------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 12 #include "mbed.h"
kenjiArai 3:35ac9ee7d2d6 13 #include "TS_DISCO_F769NI.h"
kenjiArai 3:35ac9ee7d2d6 14 #include "LCD_DISCO_F769NI.h"
kenjiArai 3:35ac9ee7d2d6 15 #include "FATFileSystem.h"
kenjiArai 3:35ac9ee7d2d6 16 #include "SDBlockDeviceDISCOF769NI.h"
kenjiArai 3:35ac9ee7d2d6 17 #include "button.hpp"
kenjiArai 3:35ac9ee7d2d6 18 #include "button_group.hpp"
kenjiArai 3:35ac9ee7d2d6 19
kenjiArai 3:35ac9ee7d2d6 20 // Definition -----------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 21 using namespace Mikami;
kenjiArai 3:35ac9ee7d2d6 22 #define DATETIME_20190701 1561939200 // passed seconds from 1970/1/1 to 2019/7/1
kenjiArai 3:35ac9ee7d2d6 23 #define FOREVER 0x7fffffff
kenjiArai 3:35ac9ee7d2d6 24
kenjiArai 3:35ac9ee7d2d6 25 #define DEBUG 0
kenjiArai 3:35ac9ee7d2d6 26
kenjiArai 3:35ac9ee7d2d6 27 #if DEBUG
kenjiArai 3:35ac9ee7d2d6 28 #define DBG(...) pc.printf(__VA_ARGS__)
kenjiArai 3:35ac9ee7d2d6 29 #else
kenjiArai 3:35ac9ee7d2d6 30 #define DBG(...) {;}
kenjiArai 3:35ac9ee7d2d6 31 #endif
kenjiArai 3:35ac9ee7d2d6 32
kenjiArai 3:35ac9ee7d2d6 33 // Constructor ----------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 34 extern Serial pc;
kenjiArai 3:35ac9ee7d2d6 35 extern SDBlockDeviceDISCOF769NI bd;
kenjiArai 3:35ac9ee7d2d6 36 extern FATFileSystem fs;
kenjiArai 3:35ac9ee7d2d6 37 extern LCD_DISCO_F769NI lcd;
kenjiArai 3:35ac9ee7d2d6 38 extern TS_DISCO_F769NI ts;
kenjiArai 3:35ac9ee7d2d6 39
kenjiArai 3:35ac9ee7d2d6 40 // RAM ------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 41 extern bool flag_opening_done;
kenjiArai 3:35ac9ee7d2d6 42
kenjiArai 3:35ac9ee7d2d6 43 // ROM / Constant data --------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 44
kenjiArai 3:35ac9ee7d2d6 45 // Function prototypes --------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 46 extern void task_opening_action(void const *args);
kenjiArai 3:35ac9ee7d2d6 47 extern void drawImage(const char * name, uint16_t x, uint16_t y);
kenjiArai 3:35ac9ee7d2d6 48 //extern void draw_bitmap(uint8_t *Name_BMP, uint32_t Xpos, uint32_t Ypos);
kenjiArai 3:35ac9ee7d2d6 49 //extern void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp);
kenjiArai 3:35ac9ee7d2d6 50 extern void time_enter_mode(void);
kenjiArai 3:35ac9ee7d2d6 51
kenjiArai 3:35ac9ee7d2d6 52 //------------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 53 // Control Program
kenjiArai 3:35ac9ee7d2d6 54 //------------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 55 void task_opening_action(void const *args)
kenjiArai 3:35ac9ee7d2d6 56 {
kenjiArai 3:35ac9ee7d2d6 57 time_t seconds;
kenjiArai 3:35ac9ee7d2d6 58 Timer t;
kenjiArai 3:35ac9ee7d2d6 59
kenjiArai 3:35ac9ee7d2d6 60 pc.printf("\x1b[2J\x1b[H %s\r\n %s %s (UTC)\r\n",
kenjiArai 3:35ac9ee7d2d6 61 __FILE__, __DATE__, __TIME__);
kenjiArai 3:35ac9ee7d2d6 62 pc.printf(" MBED_VERSION=%d.%d.%d\r\n",
kenjiArai 3:35ac9ee7d2d6 63 MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
kenjiArai 3:35ac9ee7d2d6 64 // allocate memory to contain the whole file:
kenjiArai 3:35ac9ee7d2d6 65 char *buf = (char*) malloc (64);
kenjiArai 3:35ac9ee7d2d6 66 lcd.Clear(LCD_COLOR_WHITE);
kenjiArai 3:35ac9ee7d2d6 67 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 68 //Mounting SD-based filesystem
kenjiArai 3:35ac9ee7d2d6 69 int error = fs.mount(&bd);
kenjiArai 3:35ac9ee7d2d6 70 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 71 if (error != 0) {
kenjiArai 3:35ac9ee7d2d6 72 pc.printf("retrun error/Failure. %d\r\n", error);
kenjiArai 3:35ac9ee7d2d6 73 }
kenjiArai 3:35ac9ee7d2d6 74 //Drawing BMP file from SD-card
kenjiArai 3:35ac9ee7d2d6 75 drawImage("/fs/bmp/ty_big0.bmp", 16, 200);
kenjiArai 3:35ac9ee7d2d6 76 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 77 t.reset();
kenjiArai 3:35ac9ee7d2d6 78 t.start();
kenjiArai 3:35ac9ee7d2d6 79 seconds = time(NULL);
kenjiArai 3:35ac9ee7d2d6 80 while (seconds < DATETIME_20190701) {
kenjiArai 3:35ac9ee7d2d6 81 lcd.SetTextColor(LCD_COLOR_BLUE);
kenjiArai 3:35ac9ee7d2d6 82 lcd.DisplayStringAt(
kenjiArai 3:35ac9ee7d2d6 83 0,
kenjiArai 3:35ac9ee7d2d6 84 400,
kenjiArai 3:35ac9ee7d2d6 85 (uint8_t *)"Current time is NOT correct!!",
kenjiArai 3:35ac9ee7d2d6 86 CENTER_MODE);
kenjiArai 3:35ac9ee7d2d6 87 lcd.DisplayStringAt(
kenjiArai 3:35ac9ee7d2d6 88 0,
kenjiArai 3:35ac9ee7d2d6 89 420,
kenjiArai 3:35ac9ee7d2d6 90 (uint8_t *)"Plese enter the time from PC VCOM terminal.",
kenjiArai 3:35ac9ee7d2d6 91 CENTER_MODE);
kenjiArai 3:35ac9ee7d2d6 92 strftime(buf, 50, " %B %d,'%y, %H:%M:%S\r\n", localtime(&seconds));
kenjiArai 3:35ac9ee7d2d6 93 pc.printf("[Time] %s", buf);
kenjiArai 3:35ac9ee7d2d6 94 pc.printf("Current time is NOT correct.");
kenjiArai 3:35ac9ee7d2d6 95 pc.printf("Please enter current date and time.\r\n");
kenjiArai 3:35ac9ee7d2d6 96 time_enter_mode();
kenjiArai 3:35ac9ee7d2d6 97 seconds = time(NULL);
kenjiArai 3:35ac9ee7d2d6 98 }
kenjiArai 3:35ac9ee7d2d6 99 strftime(buf, 50, " %B %d,'%y, %H:%M:%S\r\n", localtime(&seconds));
kenjiArai 3:35ac9ee7d2d6 100 pc.printf("[Time] %s", buf);
kenjiArai 3:35ac9ee7d2d6 101 uint32_t time_show = t.read();
kenjiArai 3:35ac9ee7d2d6 102 if (time_show < 1999) {
kenjiArai 3:35ac9ee7d2d6 103 ThisThread::sleep_for(4000 - time_show);
kenjiArai 3:35ac9ee7d2d6 104 }
kenjiArai 3:35ac9ee7d2d6 105 lcd.Clear(LCD_COLOR_WHITE);
kenjiArai 3:35ac9ee7d2d6 106 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 107 //Drawing BMP file from SD-card
kenjiArai 3:35ac9ee7d2d6 108 drawImage("/fs/bmp/ty.bmp", 600, 6);
kenjiArai 3:35ac9ee7d2d6 109 drawImage("/fs/bmp/nioi_title_1_line.bmp", 20,100);
kenjiArai 3:35ac9ee7d2d6 110
kenjiArai 3:35ac9ee7d2d6 111 uint32_t backColor = 0xFF006A6C; // teal green
kenjiArai 3:35ac9ee7d2d6 112 uint32_t inActive = backColor & 0xE0FFFFFF; // color for inactive button
kenjiArai 3:35ac9ee7d2d6 113
kenjiArai 3:35ac9ee7d2d6 114 const string strButton[2] = {"Start measurement", "Show time"};
kenjiArai 3:35ac9ee7d2d6 115 ButtonGroup bGroup(lcd, ts, 465, 280, 320, 90,
kenjiArai 3:35ac9ee7d2d6 116 LCD_COLOR_BLUE, backColor,
kenjiArai 3:35ac9ee7d2d6 117 2, strButton, 0, 15, 1, Font24);
kenjiArai 3:35ac9ee7d2d6 118 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 119
kenjiArai 3:35ac9ee7d2d6 120 int32_t num = -1;
kenjiArai 3:35ac9ee7d2d6 121 // select color pattern and display
kenjiArai 3:35ac9ee7d2d6 122 while (num == -1) {
kenjiArai 3:35ac9ee7d2d6 123 bGroup.GetTouchedNumber(num);
kenjiArai 3:35ac9ee7d2d6 124 }
kenjiArai 3:35ac9ee7d2d6 125 DBG("num:%d\r\n", num);
kenjiArai 3:35ac9ee7d2d6 126 if (num == 1) {
kenjiArai 3:35ac9ee7d2d6 127 lcd.Clear(LCD_COLOR_WHITE);
kenjiArai 3:35ac9ee7d2d6 128 drawImage("/fs/bmp/minion480x272_new.bmp", 150, 110);
kenjiArai 3:35ac9ee7d2d6 129 Button btn(lcd, ts, 605, 10, 180, 80,
kenjiArai 3:35ac9ee7d2d6 130 LCD_COLOR_BLUE, LCD_COLOR_WHITE, "Finish", Font24);
kenjiArai 3:35ac9ee7d2d6 131 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 132 lcd.SetTextColor(LCD_COLOR_BLACK);
kenjiArai 3:35ac9ee7d2d6 133 while(true) {
kenjiArai 3:35ac9ee7d2d6 134 seconds = time(NULL);
kenjiArai 3:35ac9ee7d2d6 135 strftime(buf, 50, " %B %d,'%y, %H:%M:%S ",
kenjiArai 3:35ac9ee7d2d6 136 localtime(&seconds));
kenjiArai 3:35ac9ee7d2d6 137 lcd.DisplayStringAt(
kenjiArai 3:35ac9ee7d2d6 138 0, 420,
kenjiArai 3:35ac9ee7d2d6 139 (uint8_t *)" ",
kenjiArai 3:35ac9ee7d2d6 140 CENTER_MODE);
kenjiArai 3:35ac9ee7d2d6 141 lcd.DisplayStringAt(0, 420,(uint8_t *)buf, CENTER_MODE);
kenjiArai 3:35ac9ee7d2d6 142 if (btn.Touched()) {
kenjiArai 3:35ac9ee7d2d6 143 DBG("line:%d\r\n", __LINE__);
kenjiArai 3:35ac9ee7d2d6 144 break;
kenjiArai 3:35ac9ee7d2d6 145 }
kenjiArai 3:35ac9ee7d2d6 146 if (pc.readable()) {
kenjiArai 3:35ac9ee7d2d6 147 char c = pc.getc();
kenjiArai 3:35ac9ee7d2d6 148 time_enter_mode();
kenjiArai 3:35ac9ee7d2d6 149 seconds = time(NULL);
kenjiArai 3:35ac9ee7d2d6 150 }
kenjiArai 3:35ac9ee7d2d6 151 while (seconds == time(NULL)) {
kenjiArai 3:35ac9ee7d2d6 152 ThisThread::sleep_for(100);
kenjiArai 3:35ac9ee7d2d6 153 }
kenjiArai 3:35ac9ee7d2d6 154
kenjiArai 3:35ac9ee7d2d6 155 }
kenjiArai 3:35ac9ee7d2d6 156 }
kenjiArai 3:35ac9ee7d2d6 157 lcd.Clear(LCD_COLOR_BLUE);
kenjiArai 3:35ac9ee7d2d6 158 t.stop();
kenjiArai 3:35ac9ee7d2d6 159 //Free allocated memory
kenjiArai 3:35ac9ee7d2d6 160 free (buf);
kenjiArai 3:35ac9ee7d2d6 161 ThisThread::sleep_for(10);
kenjiArai 3:35ac9ee7d2d6 162 flag_opening_done = true;
kenjiArai 3:35ac9ee7d2d6 163 while(true) {
kenjiArai 3:35ac9ee7d2d6 164 ThisThread::sleep_for(FOREVER);
kenjiArai 3:35ac9ee7d2d6 165 }
kenjiArai 3:35ac9ee7d2d6 166 }
kenjiArai 3:35ac9ee7d2d6 167
kenjiArai 3:35ac9ee7d2d6 168 #endif