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 May 16 23:38:13 2015 +0000
Revision:
4:56a0cbad89b0
Parent:
3:921a09e41147
STM team has changed start-up time but still has a problem. Simplified a checking procedure.

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 4:56a0cbad89b0 4 * Copyright (c) 2010-2015 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 4:56a0cbad89b0 8 * Revised: May 16th, 2015
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 1:eaa3c3f36c03 17 // Include ---------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 18 #include "mbed.h"
kenjiArai 2:8b6a8cfa173a 19 #include "CheckRTC.h"
bcostm 0:bad75bd13618 20
kenjiArai 1:eaa3c3f36c03 21 // Object ----------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 22 Serial pc(USBTX, USBRX);
kenjiArai 2:8b6a8cfa173a 23 DigitalOut myled1(LED1); // Assign LED1 output port
kenjiArai 3:921a09e41147 24 Timer t;
kenjiArai 1:eaa3c3f36c03 25
kenjiArai 1:eaa3c3f36c03 26 // RAM -------------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 27
kenjiArai 1:eaa3c3f36c03 28 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 29
kenjiArai 1:eaa3c3f36c03 30 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:56a0cbad89b0 31 int set_time_and_check_time(void);
kenjiArai 2:8b6a8cfa173a 32 void msg_hlp (void);
kenjiArai 2:8b6a8cfa173a 33 void chk_and_set_time(char *ptr);
kenjiArai 2:8b6a8cfa173a 34 int xatoi (char **str, int32_t *res);
kenjiArai 2:8b6a8cfa173a 35 void get_line (char *buff, int len);
kenjiArai 2:8b6a8cfa173a 36
kenjiArai 2:8b6a8cfa173a 37 // Definition ------------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 38 #define BAUD(x) pc.baud(x)
kenjiArai 2:8b6a8cfa173a 39 #define GETC(x) pc.getc(x)
kenjiArai 2:8b6a8cfa173a 40 #define PUTC(x) pc.putc(x)
kenjiArai 4:56a0cbad89b0 41 #define PUTS(x) pc.puts(x)
kenjiArai 2:8b6a8cfa173a 42 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 2:8b6a8cfa173a 43 #define READABLE(x) pc.readable(x)
kenjiArai 2:8b6a8cfa173a 44
kenjiArai 2:8b6a8cfa173a 45 #define STYLE1
kenjiArai 2:8b6a8cfa173a 46 //#define STYLE2
kenjiArai 2:8b6a8cfa173a 47 //#define STYLE_COM
bcostm 0:bad75bd13618 48
kenjiArai 1:eaa3c3f36c03 49 //-------------------------------------------------------------------------------------------------
kenjiArai 1:eaa3c3f36c03 50 // Control Program
kenjiArai 1:eaa3c3f36c03 51 //-------------------------------------------------------------------------------------------------
kenjiArai 3:921a09e41147 52 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE)
kenjiArai 3:921a09e41147 53 int main()
kenjiArai 2:8b6a8cfa173a 54 {
kenjiArai 4:56a0cbad89b0 55 uint32_t state;
kenjiArai 4:56a0cbad89b0 56
kenjiArai 4:56a0cbad89b0 57 while(true) {
kenjiArai 4:56a0cbad89b0 58 PUTS("\r\n\r\nCurrent Nucleo mbed Power-on sequence does NOT consider ");
kenjiArai 4:56a0cbad89b0 59 PUTS("External Xtal start-up.\r\n");
kenjiArai 4:56a0cbad89b0 60 PUTS("Setting time is 5 seconds (improved) ");
kenjiArai 4:56a0cbad89b0 61 PUTS("but sometimes External Xtal 32.768KHz (LSE) does NOT work!\r\n");
kenjiArai 4:56a0cbad89b0 62 PUTS("Current setting: ");
kenjiArai 4:56a0cbad89b0 63 state = get_RTCSEL();
kenjiArai 4:56a0cbad89b0 64 switch (state) {
kenjiArai 3:921a09e41147 65 case 0: // no clock
kenjiArai 4:56a0cbad89b0 66 PUTS("No clock");
kenjiArai 3:921a09e41147 67 break;
kenjiArai 3:921a09e41147 68 case 1: // LSE
kenjiArai 4:56a0cbad89b0 69 PUTS("Use LSE(external Xtal)=32.768KHz");
kenjiArai 3:921a09e41147 70 break;
kenjiArai 3:921a09e41147 71 case 2: // LSI
kenjiArai 4:56a0cbad89b0 72 PUTS("Use LSI(internal RC/Low speed), RC = 17 to 47, typ.32KHz");
kenjiArai 3:921a09e41147 73 break;
kenjiArai 3:921a09e41147 74 case 3: // HSE
kenjiArai 4:56a0cbad89b0 75 PUTS("Use HSE(with prescaler)");
kenjiArai 3:921a09e41147 76 break;
kenjiArai 3:921a09e41147 77 default: // Not come here
kenjiArai 4:56a0cbad89b0 78 PRINTF("No clock");
kenjiArai 3:921a09e41147 79 break;
kenjiArai 3:921a09e41147 80 }
kenjiArai 4:56a0cbad89b0 81 PUTS("\r\n\r\n");
kenjiArai 4:56a0cbad89b0 82 if (state == 1) {
kenjiArai 4:56a0cbad89b0 83 PUTS("LSE is using! No addtional effort but just in case please try follows.\r\n");
kenjiArai 4:56a0cbad89b0 84 } else {
kenjiArai 4:56a0cbad89b0 85 PUTS("Please hit any key to use RTC external clock.\r\n");
kenjiArai 4:56a0cbad89b0 86 while (!READABLE()) {
kenjiArai 4:56a0cbad89b0 87 wait(0.2);
kenjiArai 4:56a0cbad89b0 88 }
kenjiArai 4:56a0cbad89b0 89 PRINTF("\r\nStart measure\r\n");
kenjiArai 4:56a0cbad89b0 90 t.reset();
kenjiArai 4:56a0cbad89b0 91 t.start();
kenjiArai 4:56a0cbad89b0 92 CheckRTC();
kenjiArai 4:56a0cbad89b0 93 t.stop();
kenjiArai 4:56a0cbad89b0 94 PRINTF("Start-up time was %f sec. (Time-out setting:%f sec.)\r\n",
kenjiArai 4:56a0cbad89b0 95 t.read(), (float)(float)TIMEOUT/1000);
kenjiArai 4:56a0cbad89b0 96 PUTS("\r\n");
kenjiArai 4:56a0cbad89b0 97 state = get_RTCSEL();
kenjiArai 4:56a0cbad89b0 98 switch (state) {
kenjiArai 4:56a0cbad89b0 99 case 0: // no clock
kenjiArai 4:56a0cbad89b0 100 PRINTF("No clock");
kenjiArai 4:56a0cbad89b0 101 break;
kenjiArai 4:56a0cbad89b0 102 case 1: // LSE
kenjiArai 4:56a0cbad89b0 103 PRINTF("Use LSE");
kenjiArai 4:56a0cbad89b0 104 break;
kenjiArai 4:56a0cbad89b0 105 case 2: // LSI
kenjiArai 4:56a0cbad89b0 106 PRINTF("Use LSI");
kenjiArai 4:56a0cbad89b0 107 break;
kenjiArai 4:56a0cbad89b0 108 case 3: // HSE
kenjiArai 4:56a0cbad89b0 109 PRINTF("Use HSE");
kenjiArai 4:56a0cbad89b0 110 break;
kenjiArai 4:56a0cbad89b0 111 default: // Not come here
kenjiArai 4:56a0cbad89b0 112 PRINTF("?");
kenjiArai 4:56a0cbad89b0 113 break;
kenjiArai 4:56a0cbad89b0 114 }
kenjiArai 4:56a0cbad89b0 115 PRINTF("\r\n");
kenjiArai 4:56a0cbad89b0 116 CheckRTC();
kenjiArai 4:56a0cbad89b0 117 if (state == 1) {
kenjiArai 4:56a0cbad89b0 118 PUTS("Looks okay right now but always okay or not?!\r\n");
kenjiArai 4:56a0cbad89b0 119 }
kenjiArai 3:921a09e41147 120 }
kenjiArai 4:56a0cbad89b0 121 PUTS("If you would like to masure again,");
kenjiArai 4:56a0cbad89b0 122 PUTS("Please remove JP6/IDO on the mbed board then re-plug it again!.\r\n\r\n");
kenjiArai 4:56a0cbad89b0 123 set_time_and_check_time();
kenjiArai 3:921a09e41147 124 }
kenjiArai 2:8b6a8cfa173a 125 }
kenjiArai 2:8b6a8cfa173a 126
kenjiArai 3:921a09e41147 127 #else
kenjiArai 3:921a09e41147 128 #warning "Cannot use this function. Please comment out #define CHECK_RTC and use #define SET_RTC
kenjiArai 3:921a09e41147 129 #endif
kenjiArai 3:921a09e41147 130
kenjiArai 4:56a0cbad89b0 131 int set_time_and_check_time()
kenjiArai 1:eaa3c3f36c03 132 {
kenjiArai 2:8b6a8cfa173a 133 char *ptr;
kenjiArai 2:8b6a8cfa173a 134 char linebuf[64];
kenjiArai 2:8b6a8cfa173a 135 char buf[40];
kenjiArai 2:8b6a8cfa173a 136 time_t seconds;
kenjiArai 2:8b6a8cfa173a 137
kenjiArai 4:56a0cbad89b0 138 if (READABLE()) {
kenjiArai 4:56a0cbad89b0 139 GETC();
kenjiArai 4:56a0cbad89b0 140 }
kenjiArai 2:8b6a8cfa173a 141 seconds = time(NULL);
kenjiArai 4:56a0cbad89b0 142 PRINTF("Current time is ");
kenjiArai 2:8b6a8cfa173a 143 #ifdef STYLE_COM
kenjiArai 4:56a0cbad89b0 144 PRINTF("Time: %s\r\n", ctime(&seconds));
kenjiArai 2:8b6a8cfa173a 145 #else
kenjiArai 2:8b6a8cfa173a 146 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 4:56a0cbad89b0 147 PRINTF("Time: %s\r\n", buf);
kenjiArai 2:8b6a8cfa173a 148 #endif
kenjiArai 4:56a0cbad89b0 149 PRINTF("Is it correct time?\r\n");
kenjiArai 4:56a0cbad89b0 150 PRINTF("YES -> please enter '/'\r\n");
kenjiArai 4:56a0cbad89b0 151 PRINTF("NO -> please enter t yy mm dd hh mm ss <ret> ");
kenjiArai 4:56a0cbad89b0 152 PRINTF("e.g. >t 15 5 17 10 5 15<ret>\r\n");
kenjiArai 2:8b6a8cfa173a 153 for (;;) {
kenjiArai 4:56a0cbad89b0 154 PUTC('\r');
kenjiArai 2:8b6a8cfa173a 155 PUTC('>');
kenjiArai 2:8b6a8cfa173a 156 ptr = linebuf;
kenjiArai 2:8b6a8cfa173a 157 get_line(ptr, sizeof(linebuf));
kenjiArai 2:8b6a8cfa173a 158 switch (*ptr++) {
kenjiArai 2:8b6a8cfa173a 159 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 160 // check and set RTC
kenjiArai 2:8b6a8cfa173a 161 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 162 case 't' :
kenjiArai 4:56a0cbad89b0 163 PUTC('\r');
kenjiArai 2:8b6a8cfa173a 164 chk_and_set_time(ptr);
kenjiArai 1:eaa3c3f36c03 165 break;
kenjiArai 2:8b6a8cfa173a 166 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 167 // check and set RTC
kenjiArai 2:8b6a8cfa173a 168 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 169 case '/' :
kenjiArai 4:56a0cbad89b0 170 PUTC('\r');
kenjiArai 4:56a0cbad89b0 171 PRINTF("Current Time -> Plese see LCD also\r\n");
kenjiArai 2:8b6a8cfa173a 172 while (1) {
kenjiArai 2:8b6a8cfa173a 173 if (READABLE()) {
kenjiArai 2:8b6a8cfa173a 174 break;
kenjiArai 2:8b6a8cfa173a 175 }
kenjiArai 2:8b6a8cfa173a 176 while ( seconds == time(NULL)) ;
kenjiArai 2:8b6a8cfa173a 177 seconds = time(NULL);
kenjiArai 2:8b6a8cfa173a 178 myled1 = !myled1;
kenjiArai 2:8b6a8cfa173a 179 #ifdef STYLE1
kenjiArai 4:56a0cbad89b0 180 // 17 May 2015 13:24:00
kenjiArai 2:8b6a8cfa173a 181 strftime(buf,40, "%x %X ", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 182 #endif
kenjiArai 2:8b6a8cfa173a 183 #ifdef STYLE2
kenjiArai 4:56a0cbad89b0 184 // 13:24:00 PM (2015/05/17)
kenjiArai 2:8b6a8cfa173a 185 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 2:8b6a8cfa173a 186 #endif
kenjiArai 2:8b6a8cfa173a 187 #ifdef STYLE_COM
kenjiArai 4:56a0cbad89b0 188 PRINTF("Time: %s\r\n", ctime(&seconds));
kenjiArai 2:8b6a8cfa173a 189 #else
kenjiArai 4:56a0cbad89b0 190 PRINTF("Time: %s\r\n", buf);
kenjiArai 2:8b6a8cfa173a 191 #endif
kenjiArai 2:8b6a8cfa173a 192 }
kenjiArai 1:eaa3c3f36c03 193 break;
kenjiArai 2:8b6a8cfa173a 194 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 195 // check and set RTC
kenjiArai 2:8b6a8cfa173a 196 //---------------------------------------------------------------------------------
kenjiArai 2:8b6a8cfa173a 197 case '?' :
kenjiArai 2:8b6a8cfa173a 198 default :
kenjiArai 4:56a0cbad89b0 199 PUTC('\r');
kenjiArai 2:8b6a8cfa173a 200 msg_hlp();
kenjiArai 1:eaa3c3f36c03 201 break;
kenjiArai 1:eaa3c3f36c03 202 }
kenjiArai 1:eaa3c3f36c03 203 }
kenjiArai 2:8b6a8cfa173a 204 }
kenjiArai 2:8b6a8cfa173a 205
kenjiArai 3:921a09e41147 206 // Help Massage
kenjiArai 3:921a09e41147 207 void msg_hlp (void)
kenjiArai 3:921a09e41147 208 {
kenjiArai 4:56a0cbad89b0 209 PUTS("t - Check and set RTC\r\n");
kenjiArai 4:56a0cbad89b0 210 PUTS("/ - Show time every second (Esc -> hit any key)\r\n");
kenjiArai 4:56a0cbad89b0 211 PUTS("? - Help\r\n");
kenjiArai 1:eaa3c3f36c03 212 }
bcostm 0:bad75bd13618 213
kenjiArai 2:8b6a8cfa173a 214 // Change string -> number
kenjiArai 2:8b6a8cfa173a 215 int xatoi (char **str, int32_t *res)
kenjiArai 1:eaa3c3f36c03 216 {
kenjiArai 2:8b6a8cfa173a 217 unsigned long val;
kenjiArai 2:8b6a8cfa173a 218 unsigned char c, radix, s = 0;
kenjiArai 2:8b6a8cfa173a 219
kenjiArai 2:8b6a8cfa173a 220 while ((c = **str) == ' ') {
kenjiArai 2:8b6a8cfa173a 221 (*str)++;
kenjiArai 2:8b6a8cfa173a 222 }
kenjiArai 2:8b6a8cfa173a 223 if (c == '-') {
kenjiArai 2:8b6a8cfa173a 224 s = 1;
kenjiArai 2:8b6a8cfa173a 225 c = *(++(*str));
kenjiArai 1:eaa3c3f36c03 226 }
kenjiArai 2:8b6a8cfa173a 227 if (c == '0') {
kenjiArai 2:8b6a8cfa173a 228 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 229 if (c <= ' ') {
kenjiArai 2:8b6a8cfa173a 230 *res = 0;
kenjiArai 2:8b6a8cfa173a 231 return 1;
kenjiArai 2:8b6a8cfa173a 232 }
kenjiArai 2:8b6a8cfa173a 233 if (c == 'x') {
kenjiArai 2:8b6a8cfa173a 234 radix = 16;
kenjiArai 2:8b6a8cfa173a 235 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 236 } else {
kenjiArai 2:8b6a8cfa173a 237 if (c == 'b') {
kenjiArai 2:8b6a8cfa173a 238 radix = 2;
kenjiArai 2:8b6a8cfa173a 239 c = *(++(*str));
kenjiArai 2:8b6a8cfa173a 240 } else {
kenjiArai 2:8b6a8cfa173a 241 if ((c >= '0')&&(c <= '9')) {
kenjiArai 2:8b6a8cfa173a 242 radix = 8;
kenjiArai 2:8b6a8cfa173a 243 } else {
kenjiArai 2:8b6a8cfa173a 244 return 0;
kenjiArai 2:8b6a8cfa173a 245 }
kenjiArai 2:8b6a8cfa173a 246 }
kenjiArai 2:8b6a8cfa173a 247 }
kenjiArai 2:8b6a8cfa173a 248 } else {
kenjiArai 2:8b6a8cfa173a 249 if ((c < '1')||(c > '9')) {
kenjiArai 1:eaa3c3f36c03 250 return 0;
kenjiArai 2:8b6a8cfa173a 251 }
kenjiArai 2:8b6a8cfa173a 252 radix = 10;
kenjiArai 2:8b6a8cfa173a 253 }
kenjiArai 2:8b6a8cfa173a 254 val = 0;
kenjiArai 2:8b6a8cfa173a 255 while (c > ' ') {
kenjiArai 2:8b6a8cfa173a 256 if (c >= 'a') {
kenjiArai 2:8b6a8cfa173a 257 c -= 0x20;
kenjiArai 2:8b6a8cfa173a 258 }
kenjiArai 2:8b6a8cfa173a 259 c -= '0';
kenjiArai 2:8b6a8cfa173a 260 if (c >= 17) {
kenjiArai 2:8b6a8cfa173a 261 c -= 7;
kenjiArai 2:8b6a8cfa173a 262 if (c <= 9) {
kenjiArai 2:8b6a8cfa173a 263 return 0;
kenjiArai 2:8b6a8cfa173a 264 }
kenjiArai 2:8b6a8cfa173a 265 }
kenjiArai 2:8b6a8cfa173a 266 if (c >= radix) {
kenjiArai 1:eaa3c3f36c03 267 return 0;
kenjiArai 2:8b6a8cfa173a 268 }
kenjiArai 2:8b6a8cfa173a 269 val = val * radix + c;
kenjiArai 2:8b6a8cfa173a 270 c = *(++(*str));
kenjiArai 1:eaa3c3f36c03 271 }
kenjiArai 2:8b6a8cfa173a 272 if (s) {
kenjiArai 2:8b6a8cfa173a 273 val = -val;
kenjiArai 2:8b6a8cfa173a 274 }
kenjiArai 2:8b6a8cfa173a 275 *res = val;
kenjiArai 1:eaa3c3f36c03 276 return 1;
kenjiArai 1:eaa3c3f36c03 277 }
bcostm 0:bad75bd13618 278
kenjiArai 2:8b6a8cfa173a 279 // Get key input data
kenjiArai 2:8b6a8cfa173a 280 void get_line (char *buff, int len)
kenjiArai 1:eaa3c3f36c03 281 {
kenjiArai 2:8b6a8cfa173a 282 char c;
kenjiArai 2:8b6a8cfa173a 283 int idx = 0;
kenjiArai 2:8b6a8cfa173a 284
kenjiArai 2:8b6a8cfa173a 285 for (;;) {
kenjiArai 2:8b6a8cfa173a 286 c = GETC();
kenjiArai 2:8b6a8cfa173a 287 if (c == '\r') {
kenjiArai 2:8b6a8cfa173a 288 buff[idx++] = c;
kenjiArai 2:8b6a8cfa173a 289 break;
kenjiArai 2:8b6a8cfa173a 290 }
kenjiArai 2:8b6a8cfa173a 291 if ((c == '\b') && idx) {
kenjiArai 2:8b6a8cfa173a 292 idx--;
kenjiArai 2:8b6a8cfa173a 293 PUTC(c);
kenjiArai 2:8b6a8cfa173a 294 PUTC(' ');
kenjiArai 2:8b6a8cfa173a 295 PUTC(c);
kenjiArai 2:8b6a8cfa173a 296 }
kenjiArai 2:8b6a8cfa173a 297 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 2:8b6a8cfa173a 298 buff[idx++] = c;
kenjiArai 2:8b6a8cfa173a 299 PUTC(c);
kenjiArai 2:8b6a8cfa173a 300 }
bcostm 0:bad75bd13618 301 }
kenjiArai 2:8b6a8cfa173a 302 buff[idx] = 0;
kenjiArai 2:8b6a8cfa173a 303 PUTC('\n');
bcostm 0:bad75bd13618 304 }
kenjiArai 1:eaa3c3f36c03 305
kenjiArai 2:8b6a8cfa173a 306 // RTC related subroutines
kenjiArai 2:8b6a8cfa173a 307 void chk_and_set_time(char *ptr)
kenjiArai 1:eaa3c3f36c03 308 {
kenjiArai 2:8b6a8cfa173a 309 int32_t p1;
kenjiArai 2:8b6a8cfa173a 310 struct tm t;
kenjiArai 2:8b6a8cfa173a 311 time_t seconds;
kenjiArai 2:8b6a8cfa173a 312 char buf[40];
kenjiArai 1:eaa3c3f36c03 313
kenjiArai 2:8b6a8cfa173a 314 if (xatoi(&ptr, &p1)) {
kenjiArai 2:8b6a8cfa173a 315 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 2:8b6a8cfa173a 316 PRINTF("Year:%d ",p1);
kenjiArai 2:8b6a8cfa173a 317 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 318 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 2:8b6a8cfa173a 319 PRINTF("Month:%d ",p1);
kenjiArai 2:8b6a8cfa173a 320 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 321 t.tm_mday = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 322 PRINTF("Day:%d ",p1);
kenjiArai 2:8b6a8cfa173a 323 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 324 t.tm_hour = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 325 PRINTF("Hour:%d ",p1);
kenjiArai 2:8b6a8cfa173a 326 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 327 t.tm_min = (uint8_t)p1;
kenjiArai 2:8b6a8cfa173a 328 PRINTF("Min:%d ",p1);
kenjiArai 2:8b6a8cfa173a 329 xatoi( &ptr, &p1 );
kenjiArai 2:8b6a8cfa173a 330 t.tm_sec = (uint8_t)p1;
kenjiArai 4:56a0cbad89b0 331 PRINTF("Sec: %d\r\n",p1);
kenjiArai 2:8b6a8cfa173a 332 seconds = mktime(&t);
kenjiArai 2:8b6a8cfa173a 333 set_time(seconds);
kenjiArai 1:eaa3c3f36c03 334 }
kenjiArai 2:8b6a8cfa173a 335 seconds = time(NULL);
kenjiArai 2:8b6a8cfa173a 336 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 4:56a0cbad89b0 337 PRINTF("Time: %s\r\n", buf);
kenjiArai 1:eaa3c3f36c03 338 }