Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BD_SD_DISCO_F769NI BSP_DISCO_F769NI LCD_DISCO_F769NI TS_DISCO_F769NI USBHost_F769NI
zz_common/opening.cpp@3:35ac9ee7d2d6, 2019-08-07 (annotated)
- 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?
| User | Revision | Line number | New 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 |