Check RTC LSE(External Xtal, 32.768kHz) mode

Dependencies:   mbed CheckRTC

Please refer follow links.
My notebook
http://developer.mbed.org/users/kenjiArai/notebook/nucleo-series-clock-structure-and-xtal-oscillation/
Q&A for RTC Xtal
http://developer.mbed.org/questions/4531/RTC-External-Crystal-Nucleo/

Committer:
kenjiArai
Date:
Sat Nov 01 01:48:56 2014 +0000
Revision:
3:921a09e41147
Parent:
2:8b6a8cfa173a
Child:
4:56a0cbad89b0
Select two functions 1) Check start-up time, 2) Set RTC time and date

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 1:eaa3c3f36c03 1 /*
kenjiArai 1:eaa3c3f36c03 2 * mbed Application program
kenjiArai 1:eaa3c3f36c03 3 *
kenjiArai 1:eaa3c3f36c03 4 * Copyright (c) 2010-2014 Kenji Arai / JH1PJL
kenjiArai 1:eaa3c3f36c03 5 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 1:eaa3c3f36c03 6 * http://mbed.org/users/kenjiArai/
kenjiArai 2:8b6a8cfa173a 7 * Created: March 27th, 2010
kenjiArai 2:8b6a8cfa173a 8 * Revised: November 1st, 2014
kenjiArai 1:eaa3c3f36c03 9 *
kenjiArai 1:eaa3c3f36c03 10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 1:eaa3c3f36c03 11 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 1:eaa3c3f36c03 12 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 1:eaa3c3f36c03 13 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 1:eaa3c3f36c03 14 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 1:eaa3c3f36c03 15 */
bcostm 0:bad75bd13618 16
kenjiArai 2:8b6a8cfa173a 17 //#define USE_TEXT_LCD
kenjiArai 2:8b6a8cfa173a 18
kenjiArai 3:921a09e41147 19 #define CHECK_RTC
kenjiArai 3:921a09e41147 20 //#define SET_RTC
kenjiArai 3:921a09e41147 21
kenjiArai 1:eaa3c3f36c03 22 // Include ---------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 23 #include "mbed.h"
kenjiArai 2:8b6a8cfa173a 24 #ifdef USE_TEXT_LCD
kenjiArai 2:8b6a8cfa173a 25 #include "TextLCD.h"
kenjiArai 2:8b6a8cfa173a 26 #endif
kenjiArai 2:8b6a8cfa173a 27 #include "CheckRTC.h"
bcostm 0:bad75bd13618 28
kenjiArai 1:eaa3c3f36c03 29 // Object ----------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 30 Serial pc(USBTX, USBRX);
kenjiArai 2:8b6a8cfa173a 31 DigitalOut myled1(LED1); // Assign LED1 output port
kenjiArai 2:8b6a8cfa173a 32 #ifdef USE_TEXT_LCD
kenjiArai 2:8b6a8cfa173a 33 TextLCD lcd(p22, p21, p8, p7, p6, p5,TextLCD::LCD40x2); // rs, e, d4-d7
kenjiArai 2:8b6a8cfa173a 34 #endif
kenjiArai 3:921a09e41147 35 Timer t;
kenjiArai 1:eaa3c3f36c03 36
kenjiArai 1:eaa3c3f36c03 37 // RAM -------------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 38
kenjiArai 1:eaa3c3f36c03 39 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 40
kenjiArai 1:eaa3c3f36c03 41 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 42 void msg_hlp (void);
kenjiArai 2:8b6a8cfa173a 43 void chk_and_set_time(char *ptr);
kenjiArai 2:8b6a8cfa173a 44 void put_rn (void);
kenjiArai 2:8b6a8cfa173a 45 void put_r (void);
kenjiArai 2:8b6a8cfa173a 46 int xatoi (char **str, int32_t *res);
kenjiArai 2:8b6a8cfa173a 47 void get_line (char *buff, int len);
kenjiArai 2:8b6a8cfa173a 48
kenjiArai 2:8b6a8cfa173a 49 // Definition ------------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 50 #define BAUD(x) pc.baud(x)
kenjiArai 2:8b6a8cfa173a 51 #define GETC(x) pc.getc(x)
kenjiArai 2:8b6a8cfa173a 52 #define PUTC(x) pc.putc(x)
kenjiArai 2:8b6a8cfa173a 53 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 2:8b6a8cfa173a 54 #define READABLE(x) pc.readable(x)
kenjiArai 2:8b6a8cfa173a 55
kenjiArai 2:8b6a8cfa173a 56 #ifdef USE_TEXT_LCD
kenjiArai 2:8b6a8cfa173a 57 #define L_CLS(x) lcd.cls(x)
kenjiArai 2:8b6a8cfa173a 58 #define L_LOC(x,y) lcd.locate(0, 0);
kenjiArai 2:8b6a8cfa173a 59 #define L_PRINTF(...) lcd.printf(__VA_ARGS__)
kenjiArai 2:8b6a8cfa173a 60 #else
kenjiArai 2:8b6a8cfa173a 61 #define L_CLS(x) {;}
kenjiArai 2:8b6a8cfa173a 62 #define L_LOC(x,y) {;}
kenjiArai 2:8b6a8cfa173a 63 #define L_PRINTF(...) {;}
kenjiArai 2:8b6a8cfa173a 64 #endif
kenjiArai 2:8b6a8cfa173a 65
kenjiArai 2:8b6a8cfa173a 66 #define STYLE1
kenjiArai 2:8b6a8cfa173a 67 //#define STYLE2
kenjiArai 2:8b6a8cfa173a 68 //#define STYLE_COM
bcostm 0:bad75bd13618 69
kenjiArai 1:eaa3c3f36c03 70 //-------------------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 71 // Control Program
kenjiArai 1:eaa3c3f36c03 72 //-------------------------------------------------------------------------------------------------
kenjiArai 3:921a09e41147 73 #if defined(CHECK_RTC)
kenjiArai 3:921a09e41147 74 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE)
kenjiArai 3:921a09e41147 75 int main()
kenjiArai 2:8b6a8cfa173a 76 {
kenjiArai 3:921a09e41147 77 while(true)
kenjiArai 3:921a09e41147 78 {
kenjiArai 3:921a09e41147 79 while (!READABLE()){
kenjiArai 3:921a09e41147 80 PRINTF("Please hit any key to start measure\r");
kenjiArai 3:921a09e41147 81 }
kenjiArai 3:921a09e41147 82 PRINTF("\r\nSelect RTC clock source\r\n");
kenjiArai 3:921a09e41147 83 t.reset();
kenjiArai 3:921a09e41147 84 t.start();
kenjiArai 3:921a09e41147 85 CheckRTC();
kenjiArai 3:921a09e41147 86 t.stop();
kenjiArai 3:921a09e41147 87 PRINTF("Use special function (extend time-out)\r\n");
kenjiArai 3:921a09e41147 88 PRINTF("Start-up time was %f sec. (Time-out setting:%f sec.)\r\n",
kenjiArai 3:921a09e41147 89 t.read(), (float)(float)TIMEOUT/1000);
kenjiArai 3:921a09e41147 90 switch (get_RTCSEL()) {
kenjiArai 3:921a09e41147 91 case 0: // no clock
kenjiArai 3:921a09e41147 92 PRINTF("No clock");
kenjiArai 3:921a09e41147 93 break;
kenjiArai 3:921a09e41147 94 case 1: // LSE
kenjiArai 3:921a09e41147 95 PRINTF("Use LSE");
kenjiArai 3:921a09e41147 96 break;
kenjiArai 3:921a09e41147 97 case 2: // LSI
kenjiArai 3:921a09e41147 98 PRINTF("Use LSI");
kenjiArai 3:921a09e41147 99 break;
kenjiArai 3:921a09e41147 100 case 3: // HSE
kenjiArai 3:921a09e41147 101 PRINTF("Use HSE");
kenjiArai 3:921a09e41147 102 break;
kenjiArai 3:921a09e41147 103 default: // Not come here
kenjiArai 3:921a09e41147 104 PRINTF("?");
kenjiArai 3:921a09e41147 105 break;
kenjiArai 3:921a09e41147 106 }
kenjiArai 3:921a09e41147 107 PRINTF("\r\n");
kenjiArai 3:921a09e41147 108 CheckRTC();
kenjiArai 3:921a09e41147 109 if (get_RTCSEL() == 2) {
kenjiArai 3:921a09e41147 110 PRINTF("Use LSI again");
kenjiArai 3:921a09e41147 111 }
kenjiArai 3:921a09e41147 112 PRINTF("\r\nRepeat again? [y/n]\r\n");
kenjiArai 3:921a09e41147 113 PRINTF(" If yes, please pusch [RESET] buttom.\r\n");
kenjiArai 3:921a09e41147 114 PRINTF(" recomend to remove USB connecter then re-plug it.\r\n");
kenjiArai 3:921a09e41147 115 PRINTF(" If no, please hit any key.\r\n");
kenjiArai 3:921a09e41147 116 if (GETC()){
kenjiArai 3:921a09e41147 117 break;
kenjiArai 3:921a09e41147 118 }
kenjiArai 3:921a09e41147 119 }
kenjiArai 3:921a09e41147 120 PRINTF("next\r\n");
kenjiArai 3:921a09e41147 121 CheckRTC();
kenjiArai 2:8b6a8cfa173a 122 }
kenjiArai 2:8b6a8cfa173a 123
kenjiArai 3:921a09e41147 124 #else
kenjiArai 3:921a09e41147 125 #warning "Cannot use this function. Please comment out #define CHECK_RTC and use #define SET_RTC
kenjiArai 3:921a09e41147 126 #endif
kenjiArai 3:921a09e41147 127 #elif defined(SET_RTC) // defined(CHECK_RTC)
kenjiArai 3:921a09e41147 128
kenjiArai 1:eaa3c3f36c03 129 int main()
kenjiArai 1:eaa3c3f36c03 130 {
kenjiArai 2:8b6a8cfa173a 131 char *ptr;
kenjiArai 2:8b6a8cfa173a 132 char linebuf[64];
kenjiArai 2:8b6a8cfa173a 133 char buf[40];
kenjiArai 2:8b6a8cfa173a 134 time_t seconds;
kenjiArai 2:8b6a8cfa173a 135
kenjiArai 2:8b6a8cfa173a 136 CheckRTC();
kenjiArai 2:8b6a8cfa173a 137 L_CLS();
kenjiArai 2:8b6a8cfa173a 138 L_LOC(0, 0);
kenjiArai 2:8b6a8cfa173a 139 L_LOC(0, 0); // 1st line top
kenjiArai 2:8b6a8cfa173a 140 // 1234567890123456789012345678901234567890
kenjiArai 2:8b6a8cfa173a 141 L_PRINTF(" Waiting for time adjustment via com ");
kenjiArai 2:8b6a8cfa173a 142 put_rn();
kenjiArai 2:8b6a8cfa173a 143 seconds = time(NULL);
kenjiArai 2:8b6a8cfa173a 144 PRINTF("Current time is");
kenjiArai 2:8b6a8cfa173a 145 put_rn();
kenjiArai 2:8b6a8cfa173a 146 #ifdef STYLE_COM
kenjiArai 2:8b6a8cfa173a 147 PRINTF("Time: %s", ctime(&seconds));
kenjiArai 2:8b6a8cfa173a 148 #else
kenjiArai 2:8b6a8cfa173a 149 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 150 PRINTF("Time: %s", buf);
kenjiArai 2:8b6a8cfa173a 151 #endif
kenjiArai 2:8b6a8cfa173a 152 put_rn();
kenjiArai 2:8b6a8cfa173a 153 PRINTF("Is it correct time?");
kenjiArai 2:8b6a8cfa173a 154 put_rn();
kenjiArai 2:8b6a8cfa173a 155 PRINTF("YES -> please enter '/'");
kenjiArai 2:8b6a8cfa173a 156 put_rn();
kenjiArai 2:8b6a8cfa173a 157 PRINTF("NO -> please enter t yy mm dd hh mm ss <ret>");
kenjiArai 2:8b6a8cfa173a 158 put_rn();
kenjiArai 2:8b6a8cfa173a 159 PRINTF("e.g. >t 14 11 1 8 5 15<ret>");
kenjiArai 2:8b6a8cfa173a 160 put_rn();
kenjiArai 2:8b6a8cfa173a 161 for (;;) {
kenjiArai 2:8b6a8cfa173a 162 put_r();
kenjiArai 2:8b6a8cfa173a 163 PUTC('>');
kenjiArai 2:8b6a8cfa173a 164 ptr = linebuf;
kenjiArai 2:8b6a8cfa173a 165 get_line(ptr, sizeof(linebuf));
kenjiArai 2:8b6a8cfa173a 166 switch (*ptr++) {
kenjiArai 2:8b6a8cfa173a 167 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 168 // check and set RTC
kenjiArai 2:8b6a8cfa173a 169 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 170 case 't' :
kenjiArai 2:8b6a8cfa173a 171 put_r();
kenjiArai 2:8b6a8cfa173a 172 chk_and_set_time(ptr);
kenjiArai 1:eaa3c3f36c03 173 break;
kenjiArai 2:8b6a8cfa173a 174 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 175 // check and set RTC
kenjiArai 2:8b6a8cfa173a 176 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 177 case '/' :
kenjiArai 2:8b6a8cfa173a 178 put_r();
kenjiArai 2:8b6a8cfa173a 179 PRINTF("Current Time -> Plese see LCD also");
kenjiArai 2:8b6a8cfa173a 180 put_rn();
kenjiArai 2:8b6a8cfa173a 181 while (1) {
kenjiArai 2:8b6a8cfa173a 182 if (READABLE()) {
kenjiArai 2:8b6a8cfa173a 183 break;
kenjiArai 2:8b6a8cfa173a 184 }
kenjiArai 2:8b6a8cfa173a 185 while ( seconds == time(NULL)) ;
kenjiArai 2:8b6a8cfa173a 186 seconds = time(NULL);
kenjiArai 2:8b6a8cfa173a 187 myled1 = !myled1;
kenjiArai 2:8b6a8cfa173a 188 L_CLS();
kenjiArai 2:8b6a8cfa173a 189 L_LOC(0, 0); // 1st line top
kenjiArai 2:8b6a8cfa173a 190 L_PRINTF("It is %d sec since Jan.1,1970\n", seconds);
kenjiArai 2:8b6a8cfa173a 191 L_LOC(0, 1); // 2nd line top
kenjiArai 2:8b6a8cfa173a 192 #ifdef STYLE1
kenjiArai 2:8b6a8cfa173a 193 // 27 Mar 2010 13:24:00
kenjiArai 2:8b6a8cfa173a 194 strftime(buf,40, "%x %X ", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 195 #endif
kenjiArai 2:8b6a8cfa173a 196 #ifdef STYLE2
kenjiArai 2:8b6a8cfa173a 197 // 13:24:00 PM (2010/03/27)
kenjiArai 2:8b6a8cfa173a 198 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 199 #endif
kenjiArai 2:8b6a8cfa173a 200 L_PRINTF("Time = %s", buf);
kenjiArai 2:8b6a8cfa173a 201 #ifdef STYLE_COM
kenjiArai 2:8b6a8cfa173a 202 PRINTF("Time: %s", ctime(&seconds));
kenjiArai 2:8b6a8cfa173a 203 #else
kenjiArai 2:8b6a8cfa173a 204 PRINTF("Time: %s", buf);
kenjiArai 2:8b6a8cfa173a 205 #endif
kenjiArai 2:8b6a8cfa173a 206 put_rn();
kenjiArai 2:8b6a8cfa173a 207 }
kenjiArai 1:eaa3c3f36c03 208 break;
kenjiArai 2:8b6a8cfa173a 209 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 210 // check and set RTC
kenjiArai 2:8b6a8cfa173a 211 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 212 case '?' :
kenjiArai 2:8b6a8cfa173a 213 default :
kenjiArai 2:8b6a8cfa173a 214 put_r();
kenjiArai 2:8b6a8cfa173a 215 msg_hlp();
kenjiArai 1:eaa3c3f36c03 216 break;
kenjiArai 1:eaa3c3f36c03 217 }
kenjiArai 1:eaa3c3f36c03 218 }
kenjiArai 2:8b6a8cfa173a 219 }
kenjiArai 2:8b6a8cfa173a 220
kenjiArai 3:921a09e41147 221 #endif // defined(SET_RTC)
kenjiArai 3:921a09e41147 222
kenjiArai 3:921a09e41147 223 // Help Massage
kenjiArai 3:921a09e41147 224 void msg_hlp (void)
kenjiArai 3:921a09e41147 225 {
kenjiArai 3:921a09e41147 226 PRINTF("t - Check and set RTC");
kenjiArai 3:921a09e41147 227 put_rn();
kenjiArai 3:921a09e41147 228 PRINTF("/ - Show time every second (Esc -> hit any key)");
kenjiArai 3:921a09e41147 229 put_rn();
kenjiArai 3:921a09e41147 230 PRINTF("? - Help");
kenjiArai 3:921a09e41147 231 put_rn();
kenjiArai 3:921a09e41147 232 }
kenjiArai 3:921a09e41147 233
kenjiArai 2:8b6a8cfa173a 234 // Put \r\n
kenjiArai 2:8b6a8cfa173a 235 void put_rn (void)
kenjiArai 2:8b6a8cfa173a 236 {
kenjiArai 2:8b6a8cfa173a 237 PUTC('\r');
kenjiArai 2:8b6a8cfa173a 238 PUTC('\n');
kenjiArai 2:8b6a8cfa173a 239 }
kenjiArai 2:8b6a8cfa173a 240
kenjiArai 2:8b6a8cfa173a 241 // Put \r
kenjiArai 2:8b6a8cfa173a 242 void put_r (void)
kenjiArai 2:8b6a8cfa173a 243 {
kenjiArai 2:8b6a8cfa173a 244 PUTC('\r');
kenjiArai 1:eaa3c3f36c03 245 }
bcostm 0:bad75bd13618 246
kenjiArai 2:8b6a8cfa173a 247 // Change string -> number
kenjiArai 2:8b6a8cfa173a 248 int xatoi (char **str, int32_t *res)
kenjiArai 1:eaa3c3f36c03 249 {
kenjiArai 2:8b6a8cfa173a 250 unsigned long val;
kenjiArai 2:8b6a8cfa173a 251 unsigned char c, radix, s = 0;
kenjiArai 2:8b6a8cfa173a 252
kenjiArai 2:8b6a8cfa173a 253 while ((c = **str) == ' ') {
kenjiArai 2:8b6a8cfa173a 254 (*str)++;
kenjiArai 2:8b6a8cfa173a 255 }
kenjiArai 2:8b6a8cfa173a 256 if (c == '-') {
kenjiArai 2:8b6a8cfa173a 257 s = 1;
kenjiArai 2:8b6a8cfa173a 258 c = *(++(*str));
kenjiArai 1:eaa3c3f36c03 259 }
kenjiArai 2:8b6a8cfa173a 260 if (c == '0') {
kenjiArai 2:8b6a8cfa173a 261 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 262 if (c <= ' ') {
kenjiArai 2:8b6a8cfa173a 263 *res = 0;
kenjiArai 2:8b6a8cfa173a 264 return 1;
kenjiArai 2:8b6a8cfa173a 265 }
kenjiArai 2:8b6a8cfa173a 266 if (c == 'x') {
kenjiArai 2:8b6a8cfa173a 267 radix = 16;
kenjiArai 2:8b6a8cfa173a 268 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 269 } else {
kenjiArai 2:8b6a8cfa173a 270 if (c == 'b') {
kenjiArai 2:8b6a8cfa173a 271 radix = 2;
kenjiArai 2:8b6a8cfa173a 272 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 273 } else {
kenjiArai 2:8b6a8cfa173a 274 if ((c >= '0')&&(c <= '9')) {
kenjiArai 2:8b6a8cfa173a 275 radix = 8;
kenjiArai 2:8b6a8cfa173a 276 } else {
kenjiArai 2:8b6a8cfa173a 277 return 0;
kenjiArai 2:8b6a8cfa173a 278 }
kenjiArai 2:8b6a8cfa173a 279 }
kenjiArai 2:8b6a8cfa173a 280 }
kenjiArai 2:8b6a8cfa173a 281 } else {
kenjiArai 2:8b6a8cfa173a 282 if ((c < '1')||(c > '9')) {
kenjiArai 1:eaa3c3f36c03 283 return 0;
kenjiArai 2:8b6a8cfa173a 284 }
kenjiArai 2:8b6a8cfa173a 285 radix = 10;
kenjiArai 2:8b6a8cfa173a 286 }
kenjiArai 2:8b6a8cfa173a 287 val = 0;
kenjiArai 2:8b6a8cfa173a 288 while (c > ' ') {
kenjiArai 2:8b6a8cfa173a 289 if (c >= 'a') {
kenjiArai 2:8b6a8cfa173a 290 c -= 0x20;
kenjiArai 2:8b6a8cfa173a 291 }
kenjiArai 2:8b6a8cfa173a 292 c -= '0';
kenjiArai 2:8b6a8cfa173a 293 if (c >= 17) {
kenjiArai 2:8b6a8cfa173a 294 c -= 7;
kenjiArai 2:8b6a8cfa173a 295 if (c <= 9) {
kenjiArai 2:8b6a8cfa173a 296 return 0;
kenjiArai 2:8b6a8cfa173a 297 }
kenjiArai 2:8b6a8cfa173a 298 }
kenjiArai 2:8b6a8cfa173a 299 if (c >= radix) {
kenjiArai 1:eaa3c3f36c03 300 return 0;
kenjiArai 2:8b6a8cfa173a 301 }
kenjiArai 2:8b6a8cfa173a 302 val = val * radix + c;
kenjiArai 2:8b6a8cfa173a 303 c = *(++(*str));
kenjiArai 1:eaa3c3f36c03 304 }
kenjiArai 2:8b6a8cfa173a 305 if (s) {
kenjiArai 2:8b6a8cfa173a 306 val = -val;
kenjiArai 2:8b6a8cfa173a 307 }
kenjiArai 2:8b6a8cfa173a 308 *res = val;
kenjiArai 1:eaa3c3f36c03 309 return 1;
kenjiArai 1:eaa3c3f36c03 310 }
bcostm 0:bad75bd13618 311
kenjiArai 2:8b6a8cfa173a 312 // Get key input data
kenjiArai 2:8b6a8cfa173a 313 void get_line (char *buff, int len)
kenjiArai 1:eaa3c3f36c03 314 {
kenjiArai 2:8b6a8cfa173a 315 char c;
kenjiArai 2:8b6a8cfa173a 316 int idx = 0;
kenjiArai 2:8b6a8cfa173a 317
kenjiArai 2:8b6a8cfa173a 318 for (;;) {
kenjiArai 2:8b6a8cfa173a 319 c = GETC();
kenjiArai 2:8b6a8cfa173a 320 if (c == '\r') {
kenjiArai 2:8b6a8cfa173a 321 buff[idx++] = c;
kenjiArai 2:8b6a8cfa173a 322 break;
kenjiArai 2:8b6a8cfa173a 323 }
kenjiArai 2:8b6a8cfa173a 324 if ((c == '\b') && idx) {
kenjiArai 2:8b6a8cfa173a 325 idx--;
kenjiArai 2:8b6a8cfa173a 326 PUTC(c);
kenjiArai 2:8b6a8cfa173a 327 PUTC(' ');
kenjiArai 2:8b6a8cfa173a 328 PUTC(c);
kenjiArai 2:8b6a8cfa173a 329 }
kenjiArai 2:8b6a8cfa173a 330 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 2:8b6a8cfa173a 331 buff[idx++] = c;
kenjiArai 2:8b6a8cfa173a 332 PUTC(c);
kenjiArai 2:8b6a8cfa173a 333 }
bcostm 0:bad75bd13618 334 }
kenjiArai 2:8b6a8cfa173a 335 buff[idx] = 0;
kenjiArai 2:8b6a8cfa173a 336 PUTC('\n');
bcostm 0:bad75bd13618 337 }
kenjiArai 1:eaa3c3f36c03 338
kenjiArai 2:8b6a8cfa173a 339 // RTC related subroutines
kenjiArai 2:8b6a8cfa173a 340 void chk_and_set_time(char *ptr)
kenjiArai 1:eaa3c3f36c03 341 {
kenjiArai 2:8b6a8cfa173a 342 int32_t p1;
kenjiArai 2:8b6a8cfa173a 343 struct tm t;
kenjiArai 2:8b6a8cfa173a 344 time_t seconds;
kenjiArai 2:8b6a8cfa173a 345 char buf[40];
kenjiArai 1:eaa3c3f36c03 346
kenjiArai 2:8b6a8cfa173a 347 if (xatoi(&ptr, &p1)) {
kenjiArai 2:8b6a8cfa173a 348 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 2:8b6a8cfa173a 349 PRINTF("Year:%d ",p1);
kenjiArai 2:8b6a8cfa173a 350 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 351 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 2:8b6a8cfa173a 352 PRINTF("Month:%d ",p1);
kenjiArai 2:8b6a8cfa173a 353 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 354 t.tm_mday = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 355 PRINTF("Day:%d ",p1);
kenjiArai 2:8b6a8cfa173a 356 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 357 t.tm_hour = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 358 PRINTF("Hour:%d ",p1);
kenjiArai 2:8b6a8cfa173a 359 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 360 t.tm_min = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 361 PRINTF("Min:%d ",p1);
kenjiArai 2:8b6a8cfa173a 362 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 363 t.tm_sec = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 364 PRINTF("Sec: %d",p1);
kenjiArai 2:8b6a8cfa173a 365 put_rn();
kenjiArai 2:8b6a8cfa173a 366 seconds = mktime(&t);
kenjiArai 2:8b6a8cfa173a 367 set_time(seconds);
kenjiArai 1:eaa3c3f36c03 368 }
kenjiArai 2:8b6a8cfa173a 369 seconds = time(NULL);
kenjiArai 2:8b6a8cfa173a 370 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 371 PRINTF("Time: %s", buf);
kenjiArai 2:8b6a8cfa173a 372 put_rn();
kenjiArai 1:eaa3c3f36c03 373 }