Kenji Arai
/
ePD_4R2inch_test_program_on_nRF52
test program for 4.2inch e-Paper
set_RTC.cpp@0:2b41523348df, 2019-08-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |