Kenji Arai / Mbed OS ePD_2R13inch_test_program

Dependencies:   EPD_2R13

Committer:
kenjiArai
Date:
Sat Jun 29 23:54:50 2019 +0000
Revision:
1:271991ff8004
Parent:
0:c0e0a185358d
combined latest mbed-os5 revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:c0e0a185358d 1 /*
kenjiArai 0:c0e0a185358d 2 * Set time into RTC
kenjiArai 0:c0e0a185358d 3 *
kenjiArai 0:c0e0a185358d 4 * Copyright (c) 2019 Kenji Arai / JH1PJL
kenjiArai 0:c0e0a185358d 5 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:c0e0a185358d 6 * http://mbed.org/users/kenjiArai/
kenjiArai 0:c0e0a185358d 7 * Created: April 27th, 2019
kenjiArai 1:271991ff8004 8 * Revised: June 29th, 2019
kenjiArai 0:c0e0a185358d 9 */
kenjiArai 0:c0e0a185358d 10
kenjiArai 0:c0e0a185358d 11 #include "mbed.h"
kenjiArai 0:c0e0a185358d 12
kenjiArai 0:c0e0a185358d 13 extern Serial pc;
kenjiArai 0:c0e0a185358d 14
kenjiArai 0:c0e0a185358d 15 static void chk_and_set_time(char *ptr);
kenjiArai 0:c0e0a185358d 16 static int32_t xatoi (char **str, int32_t *res);
kenjiArai 0:c0e0a185358d 17 static void get_line (char *buff, int len);
kenjiArai 0:c0e0a185358d 18
kenjiArai 0:c0e0a185358d 19 void time_enter_mode(void)
kenjiArai 0:c0e0a185358d 20 {
kenjiArai 0:c0e0a185358d 21 char *ptr;
kenjiArai 0:c0e0a185358d 22 char linebuf[64];
kenjiArai 0:c0e0a185358d 23
kenjiArai 0:c0e0a185358d 24 pc.printf("\r\nSet time into RTC\r\n");
kenjiArai 1:271991ff8004 25 pc.printf(" e.g. >19 6 29 10 11 12 -> June 29th,'19, 10:11:12\r\n");
kenjiArai 0:c0e0a185358d 26 pc.printf(" If time is fine, just hit enter\r\n");
kenjiArai 0:c0e0a185358d 27 pc.putc('>');
kenjiArai 0:c0e0a185358d 28 ptr = linebuf;
kenjiArai 0:c0e0a185358d 29 get_line(ptr, sizeof(linebuf));
kenjiArai 0:c0e0a185358d 30 pc.printf("\r");
kenjiArai 0:c0e0a185358d 31 chk_and_set_time(ptr);
kenjiArai 0:c0e0a185358d 32 }
kenjiArai 0:c0e0a185358d 33
kenjiArai 0:c0e0a185358d 34 static void get_line (char *buff, int len)
kenjiArai 0:c0e0a185358d 35 {
kenjiArai 0:c0e0a185358d 36 char c;
kenjiArai 0:c0e0a185358d 37 uint32_t idx = 0;
kenjiArai 0:c0e0a185358d 38
kenjiArai 0:c0e0a185358d 39 while(true) {
kenjiArai 0:c0e0a185358d 40 c = pc.getc();
kenjiArai 0:c0e0a185358d 41 if (c == '\r') {
kenjiArai 0:c0e0a185358d 42 buff[idx++] = c;
kenjiArai 0:c0e0a185358d 43 break;
kenjiArai 0:c0e0a185358d 44 }
kenjiArai 0:c0e0a185358d 45 if ((c == '\b') && idx) {
kenjiArai 0:c0e0a185358d 46 idx--;
kenjiArai 0:c0e0a185358d 47 pc.putc(c);
kenjiArai 0:c0e0a185358d 48 pc.putc(' ');
kenjiArai 0:c0e0a185358d 49 pc.putc(c);
kenjiArai 0:c0e0a185358d 50 }
kenjiArai 0:c0e0a185358d 51 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 0:c0e0a185358d 52 buff[idx++] = c;
kenjiArai 0:c0e0a185358d 53 pc.putc(c);
kenjiArai 0:c0e0a185358d 54 }
kenjiArai 0:c0e0a185358d 55 }
kenjiArai 0:c0e0a185358d 56 buff[idx] = 0;
kenjiArai 0:c0e0a185358d 57 pc.puts("\r\n");
kenjiArai 0:c0e0a185358d 58 }
kenjiArai 0:c0e0a185358d 59
kenjiArai 0:c0e0a185358d 60 static void chk_and_set_time(char *ptr)
kenjiArai 0:c0e0a185358d 61 {
kenjiArai 0:c0e0a185358d 62 int32_t p1;
kenjiArai 0:c0e0a185358d 63 struct tm t;
kenjiArai 0:c0e0a185358d 64 time_t seconds;
kenjiArai 0:c0e0a185358d 65
kenjiArai 0:c0e0a185358d 66 if (xatoi(&ptr, &p1)) {
kenjiArai 0:c0e0a185358d 67 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 0:c0e0a185358d 68 pc.printf("Year:%d ",p1);
kenjiArai 0:c0e0a185358d 69 xatoi( &ptr, &p1 );
kenjiArai 0:c0e0a185358d 70 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 0:c0e0a185358d 71 pc.printf("Month:%d ",p1);
kenjiArai 0:c0e0a185358d 72 xatoi( &ptr, &p1 );
kenjiArai 0:c0e0a185358d 73 t.tm_mday = (uint8_t)p1;
kenjiArai 0:c0e0a185358d 74 pc.printf("Day:%d ",p1);
kenjiArai 0:c0e0a185358d 75 xatoi( &ptr, &p1 );
kenjiArai 0:c0e0a185358d 76 t.tm_hour = (uint8_t)p1;
kenjiArai 0:c0e0a185358d 77 pc.printf("Hour:%d ",p1);
kenjiArai 0:c0e0a185358d 78 xatoi( &ptr, &p1 );
kenjiArai 0:c0e0a185358d 79 t.tm_min = (uint8_t)p1;
kenjiArai 0:c0e0a185358d 80 pc.printf("Min:%d ",p1);
kenjiArai 0:c0e0a185358d 81 xatoi( &ptr, &p1 );
kenjiArai 0:c0e0a185358d 82 t.tm_sec = (uint8_t)p1;
kenjiArai 0:c0e0a185358d 83 pc.printf("Sec: %d \r\n",p1);
kenjiArai 0:c0e0a185358d 84 } else {
kenjiArai 0:c0e0a185358d 85 return;
kenjiArai 0:c0e0a185358d 86 }
kenjiArai 0:c0e0a185358d 87 seconds = mktime(&t);
kenjiArai 0:c0e0a185358d 88 set_time(seconds);
kenjiArai 0:c0e0a185358d 89 pc.printf(
kenjiArai 0:c0e0a185358d 90 "Date: %04d/%02d/%02d, %02d:%02d:%02d\r\n",
kenjiArai 0:c0e0a185358d 91 t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec
kenjiArai 0:c0e0a185358d 92 );
kenjiArai 0:c0e0a185358d 93 }
kenjiArai 0:c0e0a185358d 94
kenjiArai 0:c0e0a185358d 95 static int32_t xatoi (char **str, int32_t *res)
kenjiArai 0:c0e0a185358d 96 {
kenjiArai 0:c0e0a185358d 97 int32_t val;
kenjiArai 0:c0e0a185358d 98 uint8_t c, radix, s = 0;
kenjiArai 0:c0e0a185358d 99
kenjiArai 0:c0e0a185358d 100 while ((c = **str) == ' ') {
kenjiArai 0:c0e0a185358d 101 (*str)++;
kenjiArai 0:c0e0a185358d 102 }
kenjiArai 0:c0e0a185358d 103 if (c == '-') {
kenjiArai 0:c0e0a185358d 104 s = 1;
kenjiArai 0:c0e0a185358d 105 c = *(++(*str));
kenjiArai 0:c0e0a185358d 106 }
kenjiArai 0:c0e0a185358d 107 if (c == '0') {
kenjiArai 0:c0e0a185358d 108 c = *(++(*str));
kenjiArai 0:c0e0a185358d 109 if (c <= ' ') {
kenjiArai 0:c0e0a185358d 110 *res = 0;
kenjiArai 0:c0e0a185358d 111 return 1;
kenjiArai 0:c0e0a185358d 112 }
kenjiArai 0:c0e0a185358d 113 if (c == 'x') {
kenjiArai 0:c0e0a185358d 114 radix = 16;
kenjiArai 0:c0e0a185358d 115 c = *(++(*str));
kenjiArai 0:c0e0a185358d 116 } else {
kenjiArai 0:c0e0a185358d 117 if (c == 'b') {
kenjiArai 0:c0e0a185358d 118 radix = 2;
kenjiArai 0:c0e0a185358d 119 c = *(++(*str));
kenjiArai 0:c0e0a185358d 120 } else {
kenjiArai 0:c0e0a185358d 121 if ((c >= '0')&&(c <= '9')) {
kenjiArai 0:c0e0a185358d 122 radix = 8;
kenjiArai 0:c0e0a185358d 123 } else {
kenjiArai 0:c0e0a185358d 124 return 0;
kenjiArai 0:c0e0a185358d 125 }
kenjiArai 0:c0e0a185358d 126 }
kenjiArai 0:c0e0a185358d 127 }
kenjiArai 0:c0e0a185358d 128 } else {
kenjiArai 0:c0e0a185358d 129 if ((c < '1')||(c > '9')) {
kenjiArai 0:c0e0a185358d 130 return 0;
kenjiArai 0:c0e0a185358d 131 }
kenjiArai 0:c0e0a185358d 132 radix = 10;
kenjiArai 0:c0e0a185358d 133 }
kenjiArai 0:c0e0a185358d 134 val = 0;
kenjiArai 0:c0e0a185358d 135 while (c > ' ') {
kenjiArai 0:c0e0a185358d 136 if (c >= 'a') {
kenjiArai 0:c0e0a185358d 137 c -= 0x20;
kenjiArai 0:c0e0a185358d 138 }
kenjiArai 0:c0e0a185358d 139 c -= '0';
kenjiArai 0:c0e0a185358d 140 if (c >= 17) {
kenjiArai 0:c0e0a185358d 141 c -= 7;
kenjiArai 0:c0e0a185358d 142 if (c <= 9) {
kenjiArai 0:c0e0a185358d 143 return 0;
kenjiArai 0:c0e0a185358d 144 }
kenjiArai 0:c0e0a185358d 145 }
kenjiArai 0:c0e0a185358d 146 if (c >= radix) {
kenjiArai 0:c0e0a185358d 147 return 0;
kenjiArai 0:c0e0a185358d 148 }
kenjiArai 0:c0e0a185358d 149 val = val * radix + c;
kenjiArai 0:c0e0a185358d 150 c = *(++(*str));
kenjiArai 0:c0e0a185358d 151 }
kenjiArai 0:c0e0a185358d 152 if (s) {
kenjiArai 0:c0e0a185358d 153 val = -val;
kenjiArai 0:c0e0a185358d 154 }
kenjiArai 0:c0e0a185358d 155 *res = val;
kenjiArai 0:c0e0a185358d 156 return 1;
kenjiArai 0:c0e0a185358d 157 }