test program for 4.2inch e-Paper

Dependencies:   EPD_4R2

/media/uploads/kenjiArai/epaper4r2.jpg

Committer:
kenjiArai
Date:
Wed Aug 28 23:37:43 2019 +0000
Revision:
0:2b41523348df
Test program for 4.2inch e-Paper HAT (C) made by WAVESHARE

Who changed what in which revision?

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