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