This is sample program for Nucleo L152RE (and F401RE & F411RE) mbed-rtos. You need to modify mbed-src and mbed-rtos before compile it.

Dependencies:   mbed-rtos mbed-src SetRTC

Fork of GR-PEACH_test_on_rtos_works_well by Kenji Arai

Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/

Committer:
kenjiArai
Date:
Sat May 16 00:43:39 2015 +0000
Revision:
10:1c0f58b9c048
Parent:
9:de986e74bd93
Sample program for mbed-src usage sample. You need to modify both mbed-rtos and mbed-src before compile it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 4:76b3113c79ff 1 /*
kenjiArai 4:76b3113c79ff 2 * mbed Application program
kenjiArai 4:76b3113c79ff 3 *
kenjiArai 4:76b3113c79ff 4 * Copyright (c) 2010-2014 Kenji Arai / JH1PJL
kenjiArai 4:76b3113c79ff 5 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 4:76b3113c79ff 6 * http://mbed.org/users/kenjiArai/
kenjiArai 4:76b3113c79ff 7 * Created: May 15th, 2010
kenjiArai 4:76b3113c79ff 8 * Spareted: June 25th, 2014 mon() & mon_hw()
kenjiArai 4:76b3113c79ff 9 * Ported: July 12th, 2014 from L152RE
kenjiArai 10:1c0f58b9c048 10 * Revised: May 16th, 2015
kenjiArai 4:76b3113c79ff 11 *
kenjiArai 4:76b3113c79ff 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 4:76b3113c79ff 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 4:76b3113c79ff 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 4:76b3113c79ff 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 4:76b3113c79ff 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 4:76b3113c79ff 17 */
kenjiArai 4:76b3113c79ff 18
kenjiArai 4:76b3113c79ff 19 // Include ---------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 20 #include "mbed.h"
kenjiArai 4:76b3113c79ff 21 #include "rtos.h"
kenjiArai 4:76b3113c79ff 22
kenjiArai 4:76b3113c79ff 23 // Object ----------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 24 extern Serial pc;
kenjiArai 4:76b3113c79ff 25
kenjiArai 4:76b3113c79ff 26 // Definition ------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 27 #define BAUD(x) pc.baud(x)
kenjiArai 4:76b3113c79ff 28 #define GETC(x) pc.getc(x)
kenjiArai 8:4006b111c0d4 29 #define PUTC(x) pc.putc(x);
kenjiArai 4:76b3113c79ff 30 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 4:76b3113c79ff 31 #define READABLE(x) pc.readable(x)
kenjiArai 4:76b3113c79ff 32
kenjiArai 4:76b3113c79ff 33 // RAM -------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 34 char linebuf[64];
kenjiArai 4:76b3113c79ff 35
kenjiArai 4:76b3113c79ff 36 extern float fa[3]; // Acc 0:X, 1:Y, 2:Z
kenjiArai 4:76b3113c79ff 37 extern float fg[3]; // Gyro 0:X, 1:Y, 2:Z
kenjiArai 10:1c0f58b9c048 38 extern float analog[2];
kenjiArai 8:4006b111c0d4 39 extern uint8_t show_flag0;
kenjiArai 8:4006b111c0d4 40 extern uint8_t show_flag1;
kenjiArai 4:76b3113c79ff 41
kenjiArai 4:76b3113c79ff 42 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 43 static char *const mon_msg = "Monitor for mbed system, created on "__DATE__"";
kenjiArai 4:76b3113c79ff 44
kenjiArai 4:76b3113c79ff 45 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 46 extern void mon_hw(void);
kenjiArai 10:1c0f58b9c048 47
kenjiArai 4:76b3113c79ff 48 extern void debug_interface(void);
kenjiArai 10:1c0f58b9c048 49 extern int read_sw(void);
kenjiArai 10:1c0f58b9c048 50
kenjiArai 10:1c0f58b9c048 51 static void put_r ( void );
kenjiArai 10:1c0f58b9c048 52 static void get_line (char *buff, int len);
kenjiArai 10:1c0f58b9c048 53 static int xatoi (char **str, int32_t *res);
kenjiArai 10:1c0f58b9c048 54 static void put_rn ( void );
kenjiArai 10:1c0f58b9c048 55 static void msg_hlp (void);
kenjiArai 10:1c0f58b9c048 56 static void chk_and_set_time(char *ptr);
kenjiArai 4:76b3113c79ff 57
kenjiArai 4:76b3113c79ff 58 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 59 // Control Program
kenjiArai 4:76b3113c79ff 60 //-------------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 61 // Help Massage
kenjiArai 10:1c0f58b9c048 62 static void msg_hlp (void){
kenjiArai 10:1c0f58b9c048 63 PRINTF(mon_msg); put_rn();
kenjiArai 10:1c0f58b9c048 64 PRINTF("a - Show analog data"); put_rn();
kenjiArai 10:1c0f58b9c048 65 PRINTF("d - Show control data"); put_rn();
kenjiArai 10:1c0f58b9c048 66 PRINTF("m - Show mail data"); put_rn();
kenjiArai 10:1c0f58b9c048 67 PRINTF("s - Show USER Button"); put_rn();
kenjiArai 10:1c0f58b9c048 68 PRINTF("t - Check and set RTC"); put_rn();
kenjiArai 10:1c0f58b9c048 69 PRINTF("x - Goto HW monitor"); put_rn();
kenjiArai 10:1c0f58b9c048 70 PRINTF("q - Return to main"); put_rn();
kenjiArai 10:1c0f58b9c048 71 }
kenjiArai 10:1c0f58b9c048 72
kenjiArai 10:1c0f58b9c048 73 // ---------- Program starts here! ---------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 74 int mon(void) {
kenjiArai 10:1c0f58b9c048 75 char *ptr;
kenjiArai 10:1c0f58b9c048 76
kenjiArai 10:1c0f58b9c048 77 BAUD(9600);
kenjiArai 10:1c0f58b9c048 78 put_rn();
kenjiArai 10:1c0f58b9c048 79 put_rn();
kenjiArai 10:1c0f58b9c048 80 PRINTF("%s [Help:'?' key]", mon_msg);
kenjiArai 10:1c0f58b9c048 81 put_rn();
kenjiArai 10:1c0f58b9c048 82 for (;;) {
kenjiArai 10:1c0f58b9c048 83 put_r();
kenjiArai 10:1c0f58b9c048 84 PUTC('>');
kenjiArai 10:1c0f58b9c048 85 ptr = linebuf;
kenjiArai 10:1c0f58b9c048 86 get_line(ptr, sizeof(linebuf));
kenjiArai 10:1c0f58b9c048 87 switch (*ptr++) {
kenjiArai 10:1c0f58b9c048 88 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 89 // Check control data
kenjiArai 10:1c0f58b9c048 90 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 91 case 'a' :
kenjiArai 10:1c0f58b9c048 92 while(true) {
kenjiArai 10:1c0f58b9c048 93 put_r();
kenjiArai 10:1c0f58b9c048 94 PRINTF("A:%+6.1f,%+6.1f", analog[0], analog[1]);
kenjiArai 10:1c0f58b9c048 95 put_rn();
kenjiArai 10:1c0f58b9c048 96 if ( READABLE() ) {
kenjiArai 10:1c0f58b9c048 97 break;
kenjiArai 10:1c0f58b9c048 98 }
kenjiArai 10:1c0f58b9c048 99 Thread::wait(500); // Wait 200mS
kenjiArai 10:1c0f58b9c048 100 }
kenjiArai 10:1c0f58b9c048 101 break;
kenjiArai 10:1c0f58b9c048 102 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 103 // Check control data
kenjiArai 10:1c0f58b9c048 104 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 105 case 'd' :
kenjiArai 10:1c0f58b9c048 106 while(true) {
kenjiArai 10:1c0f58b9c048 107 put_r();
kenjiArai 10:1c0f58b9c048 108 PRINTF("G:%+6.1f,%+6.1f,%+6.1f, ", fg[0], fg[1], fg[2]);
kenjiArai 10:1c0f58b9c048 109 Thread::yield(); // change thread
kenjiArai 10:1c0f58b9c048 110 PRINTF("A:%+6.1f,%+6.1f,%+6.1f ", fa[0], fa[1], fa[2]);
kenjiArai 10:1c0f58b9c048 111 put_rn();
kenjiArai 10:1c0f58b9c048 112 if ( READABLE() ) {
kenjiArai 10:1c0f58b9c048 113 break;
kenjiArai 10:1c0f58b9c048 114 }
kenjiArai 10:1c0f58b9c048 115 Thread::wait(200); // Wait 200mS
kenjiArai 10:1c0f58b9c048 116 }
kenjiArai 10:1c0f58b9c048 117 break;
kenjiArai 10:1c0f58b9c048 118 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 119 // Show Mail data
kenjiArai 10:1c0f58b9c048 120 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 121 case 'm' :
kenjiArai 10:1c0f58b9c048 122 put_rn();
kenjiArai 10:1c0f58b9c048 123 while(true) {
kenjiArai 10:1c0f58b9c048 124 show_flag0 = 1;
kenjiArai 10:1c0f58b9c048 125 if ( READABLE() ) {
kenjiArai 10:1c0f58b9c048 126 break;
kenjiArai 10:1c0f58b9c048 127 }
kenjiArai 10:1c0f58b9c048 128 Thread::wait(100); // Wait 100mS
kenjiArai 10:1c0f58b9c048 129 }
kenjiArai 10:1c0f58b9c048 130 show_flag0 = 0;
kenjiArai 10:1c0f58b9c048 131 break;
kenjiArai 10:1c0f58b9c048 132 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 133 // Show switch status
kenjiArai 10:1c0f58b9c048 134 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 135 case 's' :
kenjiArai 10:1c0f58b9c048 136 put_r();
kenjiArai 10:1c0f58b9c048 137 PRINTF("Show USER_Button status");
kenjiArai 10:1c0f58b9c048 138 put_rn();
kenjiArai 10:1c0f58b9c048 139 PRINTF("every 500mS - hit any key for stop");
kenjiArai 10:1c0f58b9c048 140 put_rn();
kenjiArai 10:1c0f58b9c048 141 while (true){
kenjiArai 10:1c0f58b9c048 142 PRINTF("SW0 = ");
kenjiArai 10:1c0f58b9c048 143 if (read_sw() == 1) {
kenjiArai 10:1c0f58b9c048 144 PRINTF("ON ");
kenjiArai 10:1c0f58b9c048 145 } else {
kenjiArai 10:1c0f58b9c048 146 PRINTF("OFF");
kenjiArai 10:1c0f58b9c048 147 }
kenjiArai 10:1c0f58b9c048 148 put_rn();
kenjiArai 10:1c0f58b9c048 149 if (READABLE()){ GETC(); break;}
kenjiArai 10:1c0f58b9c048 150 wait(0.5);
kenjiArai 10:1c0f58b9c048 151 }
kenjiArai 10:1c0f58b9c048 152 break;
kenjiArai 10:1c0f58b9c048 153 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 154 // check and set RTC
kenjiArai 10:1c0f58b9c048 155 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 156 case 't' :
kenjiArai 10:1c0f58b9c048 157 put_r();
kenjiArai 10:1c0f58b9c048 158 chk_and_set_time(ptr);
kenjiArai 10:1c0f58b9c048 159 break;
kenjiArai 10:1c0f58b9c048 160 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 161 // Hardware monitor
kenjiArai 10:1c0f58b9c048 162 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 163 case 'x' :
kenjiArai 10:1c0f58b9c048 164 put_r();
kenjiArai 10:1c0f58b9c048 165 mon_hw();
kenjiArai 10:1c0f58b9c048 166 break;
kenjiArai 10:1c0f58b9c048 167 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 168 // help
kenjiArai 10:1c0f58b9c048 169 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 170 case '?' :
kenjiArai 10:1c0f58b9c048 171 put_r();
kenjiArai 10:1c0f58b9c048 172 msg_hlp();
kenjiArai 10:1c0f58b9c048 173 break;
kenjiArai 10:1c0f58b9c048 174 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 175 // Go back to main()
kenjiArai 10:1c0f58b9c048 176 //---------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 177 case 'q' : // Quit
kenjiArai 10:1c0f58b9c048 178 PRINTF("\rReturn to main\r\n");
kenjiArai 10:1c0f58b9c048 179 PRINTF("cannot control anymore from here\r\n");
kenjiArai 10:1c0f58b9c048 180 return 0;
kenjiArai 10:1c0f58b9c048 181 }
kenjiArai 10:1c0f58b9c048 182 }
kenjiArai 10:1c0f58b9c048 183 }
kenjiArai 10:1c0f58b9c048 184
kenjiArai 10:1c0f58b9c048 185 //-------------------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 186 // Monitor related subroutines
kenjiArai 10:1c0f58b9c048 187 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 188 // Put \r\n
kenjiArai 4:76b3113c79ff 189 static void put_rn ( void ){
kenjiArai 4:76b3113c79ff 190 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 191 PUTC('\r');
kenjiArai 4:76b3113c79ff 192 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 193 PUTC('\n');
kenjiArai 4:76b3113c79ff 194 }
kenjiArai 4:76b3113c79ff 195
kenjiArai 4:76b3113c79ff 196 // Put \r
kenjiArai 4:76b3113c79ff 197 static void put_r ( void ){
kenjiArai 4:76b3113c79ff 198 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 199 PUTC('\r');
kenjiArai 4:76b3113c79ff 200 }
kenjiArai 4:76b3113c79ff 201
kenjiArai 4:76b3113c79ff 202 // Change string -> integer
kenjiArai 4:76b3113c79ff 203 static int xatoi (char **str, int32_t *res){
kenjiArai 4:76b3113c79ff 204 unsigned long val;
kenjiArai 4:76b3113c79ff 205 unsigned char c, radix, s = 0;
kenjiArai 4:76b3113c79ff 206
kenjiArai 4:76b3113c79ff 207 while ((c = **str) == ' ') (*str)++;
kenjiArai 4:76b3113c79ff 208 if (c == '-') {
kenjiArai 4:76b3113c79ff 209 s = 1;
kenjiArai 4:76b3113c79ff 210 c = *(++(*str));
kenjiArai 4:76b3113c79ff 211 }
kenjiArai 4:76b3113c79ff 212 if (c == '0') {
kenjiArai 4:76b3113c79ff 213 c = *(++(*str));
kenjiArai 4:76b3113c79ff 214 if (c <= ' ') { *res = 0; return 1; }
kenjiArai 4:76b3113c79ff 215 if (c == 'x') {
kenjiArai 4:76b3113c79ff 216 radix = 16;
kenjiArai 4:76b3113c79ff 217 c = *(++(*str));
kenjiArai 4:76b3113c79ff 218 } else {
kenjiArai 4:76b3113c79ff 219 if (c == 'b') {
kenjiArai 4:76b3113c79ff 220 radix = 2;
kenjiArai 4:76b3113c79ff 221 c = *(++(*str));
kenjiArai 4:76b3113c79ff 222 } else {
kenjiArai 4:76b3113c79ff 223 if ((c >= '0')&&(c <= '9')){ radix = 8;
kenjiArai 4:76b3113c79ff 224 } else { return 0;}
kenjiArai 4:76b3113c79ff 225 }
kenjiArai 4:76b3113c79ff 226 }
kenjiArai 4:76b3113c79ff 227 } else {
kenjiArai 4:76b3113c79ff 228 if ((c < '1')||(c > '9')){ return 0;}
kenjiArai 4:76b3113c79ff 229 radix = 10;
kenjiArai 4:76b3113c79ff 230 }
kenjiArai 4:76b3113c79ff 231 val = 0;
kenjiArai 4:76b3113c79ff 232 while (c > ' ') {
kenjiArai 4:76b3113c79ff 233 if (c >= 'a') c -= 0x20;
kenjiArai 4:76b3113c79ff 234 c -= '0';
kenjiArai 4:76b3113c79ff 235 if (c >= 17) {
kenjiArai 4:76b3113c79ff 236 c -= 7;
kenjiArai 4:76b3113c79ff 237 if (c <= 9) return 0;
kenjiArai 4:76b3113c79ff 238 }
kenjiArai 4:76b3113c79ff 239 if (c >= radix) return 0;
kenjiArai 4:76b3113c79ff 240 val = val * radix + c;
kenjiArai 4:76b3113c79ff 241 c = *(++(*str));
kenjiArai 4:76b3113c79ff 242 }
kenjiArai 4:76b3113c79ff 243 if (s) val = -val;
kenjiArai 4:76b3113c79ff 244 *res = val;
kenjiArai 4:76b3113c79ff 245 return 1;
kenjiArai 4:76b3113c79ff 246 }
kenjiArai 4:76b3113c79ff 247
kenjiArai 4:76b3113c79ff 248 // Get key input data
kenjiArai 4:76b3113c79ff 249 static void get_line (char *buff, int len){
kenjiArai 4:76b3113c79ff 250 char c;
kenjiArai 4:76b3113c79ff 251 int idx = 0;
kenjiArai 4:76b3113c79ff 252
kenjiArai 4:76b3113c79ff 253 for (;;) {
kenjiArai 4:76b3113c79ff 254 c = GETC();
kenjiArai 4:76b3113c79ff 255 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 4:76b3113c79ff 256 if (c == '\r') {
kenjiArai 4:76b3113c79ff 257 buff[idx++] = c;
kenjiArai 4:76b3113c79ff 258 break;
kenjiArai 4:76b3113c79ff 259 }
kenjiArai 4:76b3113c79ff 260 if ((c == '\b') && idx) {
kenjiArai 4:76b3113c79ff 261 idx--;
kenjiArai 4:76b3113c79ff 262 PUTC(c);
kenjiArai 4:76b3113c79ff 263 PUTC(' ');
kenjiArai 4:76b3113c79ff 264 PUTC(c);
kenjiArai 4:76b3113c79ff 265 }
kenjiArai 4:76b3113c79ff 266 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 4:76b3113c79ff 267 buff[idx++] = c;
kenjiArai 4:76b3113c79ff 268 PUTC(c);
kenjiArai 4:76b3113c79ff 269 }
kenjiArai 4:76b3113c79ff 270 Thread::yield(); // change thread
kenjiArai 4:76b3113c79ff 271 Thread::wait(10); // Wait 10mS
kenjiArai 4:76b3113c79ff 272 }
kenjiArai 4:76b3113c79ff 273 buff[idx] = 0;
kenjiArai 4:76b3113c79ff 274 PUTC('\n');
kenjiArai 4:76b3113c79ff 275 }
kenjiArai 4:76b3113c79ff 276
kenjiArai 4:76b3113c79ff 277 // RTC related subroutines
kenjiArai 4:76b3113c79ff 278 static void chk_and_set_time(char *ptr){
kenjiArai 4:76b3113c79ff 279 //unsigned long p1;
kenjiArai 4:76b3113c79ff 280 int32_t p1;
kenjiArai 4:76b3113c79ff 281 struct tm t;
kenjiArai 4:76b3113c79ff 282 time_t seconds;
kenjiArai 4:76b3113c79ff 283 char buf[40];
kenjiArai 4:76b3113c79ff 284
kenjiArai 4:76b3113c79ff 285 if (xatoi(&ptr, &p1)){
kenjiArai 4:76b3113c79ff 286 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 4:76b3113c79ff 287 PRINTF("Year:%d ",p1);
kenjiArai 4:76b3113c79ff 288 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 289 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 4:76b3113c79ff 290 PRINTF("Month:%d ",p1);
kenjiArai 4:76b3113c79ff 291 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 292 t.tm_mday = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 293 PRINTF("Day:%d ",p1);
kenjiArai 4:76b3113c79ff 294 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 295 t.tm_hour = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 296 PRINTF("Hour:%d ",p1);
kenjiArai 4:76b3113c79ff 297 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 298 t.tm_min = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 299 PRINTF("Min:%d ",p1);
kenjiArai 4:76b3113c79ff 300 xatoi( &ptr, &p1 );
kenjiArai 4:76b3113c79ff 301 t.tm_sec = (uint8_t)p1;
kenjiArai 4:76b3113c79ff 302 PRINTF("Sec: %d \r\n",p1);
kenjiArai 4:76b3113c79ff 303 seconds = mktime(&t);
kenjiArai 4:76b3113c79ff 304 set_time(seconds);
kenjiArai 4:76b3113c79ff 305 }
kenjiArai 4:76b3113c79ff 306 seconds = time(NULL);
kenjiArai 4:76b3113c79ff 307 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 4:76b3113c79ff 308 PRINTF("Date: %s\r\n", buf);
kenjiArai 4:76b3113c79ff 309 }