An example to display some text and graphics on a Waveshare 2.7" ePaper display tri-colour. From Kanjia 2.13" code.

Dependencies:   EPD_2R7b

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?

UserRevisionLine numberNew 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