Barometer program : Data Logger function includes Barometer & temperature (BMP180), Humidity & temp. (RHT03), Sunshine (Cds), RTC(M41T62) data. : Logging data saves into EEPROM (AT24C1024) using ring buffer function.

Dependencies:   AT24C1024 RHT03 TextLCD BMP180 M41T62

Fork of mbed_blinky by Mbed

Please see https://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-barometer-with-data-logging/#

Committer:
kenjiArai
Date:
Sat Aug 08 07:01:19 2020 +0000
Revision:
18:b3a27f681171
Parent:
16:f164f8912201
change to mbed-os-6.2.0 but not work this revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 15:065fbeddc305 1 /*
kenjiArai 15:065fbeddc305 2 * mbed Application program
kenjiArai 18:b3a27f681171 3 * Data logging & Monitor program for only LPC1114FN28
kenjiArai 15:065fbeddc305 4 *
kenjiArai 18:b3a27f681171 5 * Copyright (c) 2010,'14,'20 Kenji Arai / JH1PJL
kenjiArai 18:b3a27f681171 6 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 18:b3a27f681171 7 * https://os.mbed.com/users/kenjiArai/
kenjiArai 18:b3a27f681171 8 * Created: May 15th, 2010
kenjiArai 18:b3a27f681171 9 * Spareted: June 25th, 2014 mon() & mon_hw()
kenjiArai 18:b3a27f681171 10 * Revised: August 8th, 2020
kenjiArai 15:065fbeddc305 11 */
kenjiArai 15:065fbeddc305 12
kenjiArai 18:b3a27f681171 13 // Include --------------------------------------------------------------------
kenjiArai 15:065fbeddc305 14 #include "mbed.h"
kenjiArai 16:f164f8912201 15 #include "m41t62_rtc.h" // Own lib. / RTC control
kenjiArai 16:f164f8912201 16 #include "AT24C1024.h" // Own lib. / EEPROM control
kenjiArai 15:065fbeddc305 17 #include "dt_log.h"
kenjiArai 18:b3a27f681171 18 #include "redirect_stdio.h"
kenjiArai 15:065fbeddc305 19
kenjiArai 18:b3a27f681171 20 // Object ---------------------------------------------------------------------
kenjiArai 18:b3a27f681171 21 extern I2C xi2c; // SDA, SCL
kenjiArai 18:b3a27f681171 22 extern M41T62 xm41t62; // STmicro RTC(M41T62)
kenjiArai 18:b3a27f681171 23 AT24C1024 at24c1024(dp5,dp27); // Atmel 1Mbit EE-PROM
kenjiArai 18:b3a27f681171 24
kenjiArai 18:b3a27f681171 25 // Definition -----------------------------------------------------------------
kenjiArai 18:b3a27f681171 26 #define GETC(x) getc(x)
kenjiArai 18:b3a27f681171 27 #define PUTC(x) putc(x)
kenjiArai 18:b3a27f681171 28 #define PRINTF(...) printf(__VA_ARGS__)
kenjiArai 18:b3a27f681171 29 #define READABLE(x) readable(x)
kenjiArai 15:065fbeddc305 30
kenjiArai 15:065fbeddc305 31 // EEPROM
kenjiArai 16:f164f8912201 32 #define EEP_TOP 0x0
kenjiArai 15:065fbeddc305 33
kenjiArai 18:b3a27f681171 34 // RAM ------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 35 char linebuf[64];
kenjiArai 15:065fbeddc305 36 int buf_size = sizeof(linebuf);
kenjiArai 15:065fbeddc305 37
kenjiArai 15:065fbeddc305 38 // for EEPROM control
kenjiArai 16:f164f8912201 39 int16_t read_pointer;
kenjiArai 16:f164f8912201 40
kenjiArai 16:f164f8912201 41 typedef struct {
kenjiArai 16:f164f8912201 42 uint16_t head;
kenjiArai 16:f164f8912201 43 uint16_t tail;
kenjiArai 16:f164f8912201 44 } ring_t;
kenjiArai 15:065fbeddc305 45
kenjiArai 18:b3a27f681171 46 union _inf {
kenjiArai 18:b3a27f681171 47 uint8_t buf_pointer[PTR_SIZE];
kenjiArai 18:b3a27f681171 48 ring_t log_inf;
kenjiArai 18:b3a27f681171 49 } inf;
kenjiArai 16:f164f8912201 50
kenjiArai 16:f164f8912201 51 typedef struct {
kenjiArai 18:b3a27f681171 52 uint32_t time;
kenjiArai 18:b3a27f681171 53 uint16_t vcc;
kenjiArai 18:b3a27f681171 54 uint16_t baro;
kenjiArai 18:b3a27f681171 55 int16_t b_temp;
kenjiArai 18:b3a27f681171 56 uint16_t humi;
kenjiArai 18:b3a27f681171 57 int16_t h_temp;
kenjiArai 18:b3a27f681171 58 uint16_t lux;
kenjiArai 18:b3a27f681171 59 } one_log; // 16 bytes total
kenjiArai 15:065fbeddc305 60
kenjiArai 18:b3a27f681171 61 union _one {
kenjiArai 18:b3a27f681171 62 uint8_t bf[PKT_SIZE];
kenjiArai 18:b3a27f681171 63 one_log lg;
kenjiArai 18:b3a27f681171 64 } one;
kenjiArai 15:065fbeddc305 65
kenjiArai 15:065fbeddc305 66 extern float baro;
kenjiArai 15:065fbeddc305 67 extern float baro_temp;
kenjiArai 15:065fbeddc305 68 extern float cal_vcc;
kenjiArai 15:065fbeddc305 69 extern float lux;
kenjiArai 15:065fbeddc305 70 extern float humidity;
kenjiArai 15:065fbeddc305 71 extern float humidity_temp;
kenjiArai 15:065fbeddc305 72 extern float lux;
kenjiArai 15:065fbeddc305 73
kenjiArai 18:b3a27f681171 74 // ROM / Constant data --------------------------------------------------------
kenjiArai 18:b3a27f681171 75 static const char *const mon_msg =
kenjiArai 18:b3a27f681171 76 "Monitor for mbed system, created on " __DATE__ "";
kenjiArai 15:065fbeddc305 77
kenjiArai 18:b3a27f681171 78 const char *const log_head =
kenjiArai 18:b3a27f681171 79 // $, 2014/6/29,12:43:16,3.293,1004.5,+29.3,45.8,+29.2,1234,*
kenjiArai 18:b3a27f681171 80 "$,YYYY/MM/DD,HH:MM:SS,Vcc ,Press ,Temp ,Humi,Temp ,Lux ,*";
kenjiArai 18:b3a27f681171 81 const char *const msg_emty = "Data empty";
kenjiArai 18:b3a27f681171 82 const char *const msg_end = "\r\nreach to end";
kenjiArai 15:065fbeddc305 83
kenjiArai 18:b3a27f681171 84 // Function prototypes --------------------------------------------------------
kenjiArai 18:b3a27f681171 85 //extern void mon_hw(void); // ROM& RAM limitation
kenjiArai 15:065fbeddc305 86
kenjiArai 18:b3a27f681171 87 //------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 88 // Control Program
kenjiArai 18:b3a27f681171 89 //------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 90 // Put \r\n
kenjiArai 18:b3a27f681171 91 void put_rn ( void )
kenjiArai 18:b3a27f681171 92 {
kenjiArai 18:b3a27f681171 93 PUTC('\r');
kenjiArai 18:b3a27f681171 94 PUTC('\n');
kenjiArai 18:b3a27f681171 95 }
kenjiArai 15:065fbeddc305 96
kenjiArai 15:065fbeddc305 97 // Put \r
kenjiArai 18:b3a27f681171 98 void put_r ( void )
kenjiArai 18:b3a27f681171 99 {
kenjiArai 18:b3a27f681171 100 PUTC('\r');
kenjiArai 18:b3a27f681171 101 }
kenjiArai 15:065fbeddc305 102
kenjiArai 15:065fbeddc305 103 // Put ", "
kenjiArai 18:b3a27f681171 104 void put_lin ( void )
kenjiArai 18:b3a27f681171 105 {
kenjiArai 18:b3a27f681171 106 PRINTF(", ");
kenjiArai 18:b3a27f681171 107 }
kenjiArai 15:065fbeddc305 108
kenjiArai 15:065fbeddc305 109 // Put space n
kenjiArai 18:b3a27f681171 110 void put_spc( uint8_t n)
kenjiArai 18:b3a27f681171 111 {
kenjiArai 18:b3a27f681171 112 for(; n > 0; n--) {
kenjiArai 18:b3a27f681171 113 PUTC(' ');
kenjiArai 18:b3a27f681171 114 }
kenjiArai 18:b3a27f681171 115 }
kenjiArai 15:065fbeddc305 116
kenjiArai 15:065fbeddc305 117 // Change string -> integer
kenjiArai 18:b3a27f681171 118 int xatoi (char **str, unsigned long *res)
kenjiArai 18:b3a27f681171 119 {
kenjiArai 18:b3a27f681171 120 unsigned long val;
kenjiArai 18:b3a27f681171 121 unsigned char c, radix, s = 0;
kenjiArai 15:065fbeddc305 122
kenjiArai 15:065fbeddc305 123 while ((c = **str) == ' ') (*str)++;
kenjiArai 15:065fbeddc305 124 if (c == '-') {
kenjiArai 15:065fbeddc305 125 s = 1;
kenjiArai 15:065fbeddc305 126 c = *(++(*str));
kenjiArai 15:065fbeddc305 127 }
kenjiArai 15:065fbeddc305 128 if (c == '0') {
kenjiArai 15:065fbeddc305 129 c = *(++(*str));
kenjiArai 18:b3a27f681171 130 if (c <= ' ') {
kenjiArai 18:b3a27f681171 131 *res = 0;
kenjiArai 18:b3a27f681171 132 return 1;
kenjiArai 18:b3a27f681171 133 }
kenjiArai 15:065fbeddc305 134 if (c == 'x') {
kenjiArai 15:065fbeddc305 135 radix = 16;
kenjiArai 15:065fbeddc305 136 c = *(++(*str));
kenjiArai 15:065fbeddc305 137 } else {
kenjiArai 15:065fbeddc305 138 if (c == 'b') {
kenjiArai 15:065fbeddc305 139 radix = 2;
kenjiArai 15:065fbeddc305 140 c = *(++(*str));
kenjiArai 15:065fbeddc305 141 } else {
kenjiArai 18:b3a27f681171 142 if ((c >= '0')&&(c <= '9')) {
kenjiArai 18:b3a27f681171 143 radix = 8;
kenjiArai 18:b3a27f681171 144 } else {
kenjiArai 18:b3a27f681171 145 return 0;
kenjiArai 18:b3a27f681171 146 }
kenjiArai 15:065fbeddc305 147 }
kenjiArai 15:065fbeddc305 148 }
kenjiArai 15:065fbeddc305 149 } else {
kenjiArai 18:b3a27f681171 150 if ((c < '1')||(c > '9')) {
kenjiArai 18:b3a27f681171 151 return 0;
kenjiArai 18:b3a27f681171 152 }
kenjiArai 15:065fbeddc305 153 radix = 10;
kenjiArai 15:065fbeddc305 154 }
kenjiArai 15:065fbeddc305 155 val = 0;
kenjiArai 15:065fbeddc305 156 while (c > ' ') {
kenjiArai 15:065fbeddc305 157 if (c >= 'a') c -= 0x20;
kenjiArai 15:065fbeddc305 158 c -= '0';
kenjiArai 15:065fbeddc305 159 if (c >= 17) {
kenjiArai 15:065fbeddc305 160 c -= 7;
kenjiArai 15:065fbeddc305 161 if (c <= 9) return 0;
kenjiArai 15:065fbeddc305 162 }
kenjiArai 15:065fbeddc305 163 if (c >= radix) return 0;
kenjiArai 15:065fbeddc305 164 val = val * radix + c;
kenjiArai 15:065fbeddc305 165 c = *(++(*str));
kenjiArai 15:065fbeddc305 166 }
kenjiArai 15:065fbeddc305 167 if (s) val = -val;
kenjiArai 15:065fbeddc305 168 *res = val;
kenjiArai 15:065fbeddc305 169 return 1;
kenjiArai 15:065fbeddc305 170 }
kenjiArai 15:065fbeddc305 171
kenjiArai 18:b3a27f681171 172 //------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 173 // Data Logging / Save into EEPROM
kenjiArai 18:b3a27f681171 174 //------------------------------------------------------------------------------
kenjiArai 16:f164f8912201 175 /*
kenjiArai 16:f164f8912201 176 head = H, tail =T
kenjiArai 16:f164f8912201 177 state 1: H=1(RING_TOP),T=1(RING_TOP) -> just after Clear command
kenjiArai 18:b3a27f681171 178 state 2: H=1,T=n -> n = 2 to RING_TAIL-1 (not filled yet)
kenjiArai 16:f164f8912201 179 state 3: H=1,T=RING_TAIL -> need to check!!!! (just filled)
kenjiArai 16:f164f8912201 180 state 4: H=2,T=1(RING_TOP) -> start ringed state
kenjiArai 16:f164f8912201 181 state 5: H=n,T=n-1 -> n = 2 to RING_TAIL-1 (ringed)
kenjiArai 16:f164f8912201 182 state 6: H=RING_TAIL,T=RING_TAIL-1 -> need to check!!!!!
kenjiArai 16:f164f8912201 183 state 7: H=1(RING_TOP),T=RING_TAIL -> need to check!!!!!
kenjiArai 18:b3a27f681171 184 state 8: same as "state 5"
kenjiArai 16:f164f8912201 185 -> Need to check state 3,6,7
kenjiArai 16:f164f8912201 186 */
kenjiArai 15:065fbeddc305 187 // Make one data packet data structure
kenjiArai 18:b3a27f681171 188 void dtlog_data_pack(void)
kenjiArai 18:b3a27f681171 189 {
kenjiArai 18:b3a27f681171 190 struct tm t;
kenjiArai 15:065fbeddc305 191
kenjiArai 15:065fbeddc305 192 xm41t62.read_rtc_std(&t);
kenjiArai 16:f164f8912201 193 one.lg.time = mktime(&t);
kenjiArai 16:f164f8912201 194 one.lg.vcc = (uint16_t)(cal_vcc * 1000);
kenjiArai 16:f164f8912201 195 one.lg.baro = (uint16_t)(baro * 10);
kenjiArai 16:f164f8912201 196 one.lg.b_temp = (int16_t)(baro_temp * 10);
kenjiArai 16:f164f8912201 197 one.lg.humi = (uint16_t)(humidity * 10);
kenjiArai 16:f164f8912201 198 one.lg.h_temp = (int16_t)(humidity_temp * 10);
kenjiArai 16:f164f8912201 199 one.lg.lux = (uint16_t)lux;
kenjiArai 15:065fbeddc305 200 }
kenjiArai 15:065fbeddc305 201
kenjiArai 15:065fbeddc305 202 // Print one packet as normalized data
kenjiArai 18:b3a27f681171 203 void print_one_block_data(void)
kenjiArai 18:b3a27f681171 204 {
kenjiArai 18:b3a27f681171 205 struct tm *t;
kenjiArai 18:b3a27f681171 206 time_t seconds;
kenjiArai 18:b3a27f681171 207 uint16_t dt0;
kenjiArai 18:b3a27f681171 208 int16_t dt1;
kenjiArai 15:065fbeddc305 209
kenjiArai 15:065fbeddc305 210 put_rn();
kenjiArai 15:065fbeddc305 211 PUTC( '$' );
kenjiArai 15:065fbeddc305 212 //--- Time
kenjiArai 16:f164f8912201 213 seconds = one.lg.time;
kenjiArai 15:065fbeddc305 214 t = localtime(&seconds);
kenjiArai 18:b3a27f681171 215 PRINTF(",%04d/%02d/%02d,%02d:%02d:%02d,",
kenjiArai 18:b3a27f681171 216 t->tm_year + 1900, t->tm_mon + 1,
kenjiArai 18:b3a27f681171 217 t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
kenjiArai 18:b3a27f681171 218 //--- Vcc
kenjiArai 18:b3a27f681171 219 dt0 = one.lg.vcc;
kenjiArai 18:b3a27f681171 220 PRINTF("%01d.%03d,", dt0/1000, dt0%1000);
kenjiArai 18:b3a27f681171 221 //--- Pressure
kenjiArai 18:b3a27f681171 222 dt0 = one.lg.baro;
kenjiArai 18:b3a27f681171 223 PRINTF("%04d.%01d,", dt0/10, dt0%10 );
kenjiArai 18:b3a27f681171 224 //--- Temp.
kenjiArai 18:b3a27f681171 225 dt1 = one.lg.b_temp;
kenjiArai 18:b3a27f681171 226 PRINTF("%+03d.%01d,", dt1/10, abs(dt1)%10 );
kenjiArai 18:b3a27f681171 227 //--- Humidity
kenjiArai 18:b3a27f681171 228 dt0 = one.lg.humi;
kenjiArai 18:b3a27f681171 229 PRINTF("%02d.%01d,", dt0/10, dt0%10 );
kenjiArai 18:b3a27f681171 230 //--- Temp.
kenjiArai 18:b3a27f681171 231 dt1 = one.lg.h_temp;
kenjiArai 18:b3a27f681171 232 PRINTF("%+03d.%01d,", dt1/10, abs(dt1)%10 );
kenjiArai 18:b3a27f681171 233 //--- Lux
kenjiArai 18:b3a27f681171 234 dt0 = one.lg.lux;
kenjiArai 18:b3a27f681171 235 PRINTF("%05d,*", dt0);
kenjiArai 15:065fbeddc305 236 }
kenjiArai 15:065fbeddc305 237
kenjiArai 16:f164f8912201 238 // Read buffer pointer
kenjiArai 18:b3a27f681171 239 static void dtlog_pointer_read(void)
kenjiArai 18:b3a27f681171 240 {
kenjiArai 18:b3a27f681171 241 uint8_t i;
kenjiArai 18:b3a27f681171 242 uint8_t *addr;
kenjiArai 15:065fbeddc305 243
kenjiArai 16:f164f8912201 244 /* Read EEPROM and save to buf_pointer[] */
kenjiArai 18:b3a27f681171 245 for ( i = 0; i < PTR_SIZE; i++ ) {
kenjiArai 16:f164f8912201 246 addr = (uint8_t *)(EEP_TOP + i);
kenjiArai 16:f164f8912201 247 inf.buf_pointer[i] = at24c1024.read((int)addr);
kenjiArai 18:b3a27f681171 248 ThisThread::sleep_for(2ms);
kenjiArai 15:065fbeddc305 249 }
kenjiArai 16:f164f8912201 250 // PRINTF("head %d, Tail %d\r\n", inf.log_inf.head, inf.log_inf.tail);
kenjiArai 15:065fbeddc305 251 }
kenjiArai 15:065fbeddc305 252
kenjiArai 15:065fbeddc305 253 // Write one packet
kenjiArai 18:b3a27f681171 254 void dtlog_one_write(void)
kenjiArai 18:b3a27f681171 255 {
kenjiArai 18:b3a27f681171 256 uint8_t i;
kenjiArai 18:b3a27f681171 257 uint8_t *addr;
kenjiArai 15:065fbeddc305 258
kenjiArai 16:f164f8912201 259 // Read EEPROM buffer pointer to RAM
kenjiArai 18:b3a27f681171 260 for ( i = 0; i < PTR_SIZE; i++ ) {
kenjiArai 16:f164f8912201 261 addr = (uint8_t *)(EEP_TOP + i);
kenjiArai 16:f164f8912201 262 inf.buf_pointer[i] = at24c1024.read((int)addr);
kenjiArai 18:b3a27f681171 263 ThisThread::sleep_for(2ms);
kenjiArai 16:f164f8912201 264 }
kenjiArai 18:b3a27f681171 265 //PRINTF("head %d, Tail %d\r\n", inf.log_inf.head, inf.log_inf.tail);
kenjiArai 16:f164f8912201 266 // Write data_pack[] into EEPROM
kenjiArai 18:b3a27f681171 267 for (i = 0; i < PKT_SIZE; i++) {
kenjiArai 18:b3a27f681171 268 addr = (uint8_t *)(EEP_TOP + (inf.log_inf.tail * PTR_SIZE) + i);
kenjiArai 16:f164f8912201 269 at24c1024.write((int)addr, one.bf[i]);
kenjiArai 18:b3a27f681171 270 ThisThread::sleep_for(8ms);
kenjiArai 15:065fbeddc305 271 }
kenjiArai 16:f164f8912201 272 // Increment buffer pointer in RAM
kenjiArai 18:b3a27f681171 273 if (inf.log_inf.head == RING_TOP) { // check state 1,2,3
kenjiArai 18:b3a27f681171 274 if (inf.log_inf.tail == RING_TAIL) { // check state 3
kenjiArai 18:b3a27f681171 275 inf.log_inf.tail = RING_TOP; // set state 4
kenjiArai 18:b3a27f681171 276 inf.log_inf.head = 2; // missing one oldest data
kenjiArai 18:b3a27f681171 277 } else {
kenjiArai 18:b3a27f681171 278 inf.log_inf.tail++; // set state 2
kenjiArai 18:b3a27f681171 279 }
kenjiArai 16:f164f8912201 280 } else { // check state 4,5,6,7
kenjiArai 18:b3a27f681171 281 if (inf.log_inf.head == RING_TAIL) { // check state 6
kenjiArai 18:b3a27f681171 282 inf.log_inf.head = RING_TOP; // set state 7
kenjiArai 18:b3a27f681171 283 inf.log_inf.tail = RING_TAIL;
kenjiArai 18:b3a27f681171 284 // check state 4,5
kenjiArai 18:b3a27f681171 285 } else if (inf.log_inf.tail == inf.log_inf.head - 1) {
kenjiArai 18:b3a27f681171 286 ++inf.log_inf.tail; // continue state 5
kenjiArai 18:b3a27f681171 287 ++inf.log_inf.head;
kenjiArai 18:b3a27f681171 288 }
kenjiArai 15:065fbeddc305 289 }
kenjiArai 18:b3a27f681171 290 // Write buffer pointer into EEPROM
kenjiArai 18:b3a27f681171 291 for (i = 0; i < PTR_SIZE; i++) {
kenjiArai 18:b3a27f681171 292 addr = (uint8_t *)(EEP_TOP + i);
kenjiArai 16:f164f8912201 293 at24c1024.write((int)addr, inf.buf_pointer[i]);
kenjiArai 18:b3a27f681171 294 ThisThread::sleep_for(8ms);
kenjiArai 18:b3a27f681171 295 }
kenjiArai 15:065fbeddc305 296 }
kenjiArai 15:065fbeddc305 297
kenjiArai 16:f164f8912201 298 // Read some block from buffer
kenjiArai 18:b3a27f681171 299 void dtlog_block_read(int16_t *pt, uint16_t n)
kenjiArai 18:b3a27f681171 300 {
kenjiArai 18:b3a27f681171 301 uint8_t i;
kenjiArai 18:b3a27f681171 302 uint8_t *addr;
kenjiArai 18:b3a27f681171 303 uint16_t num;
kenjiArai 16:f164f8912201 304
kenjiArai 15:065fbeddc305 305 dtlog_pointer_read();
kenjiArai 18:b3a27f681171 306 if (inf.log_inf.tail == inf.log_inf.head) { // Check pointer
kenjiArai 16:f164f8912201 307 PRINTF(msg_emty);
kenjiArai 16:f164f8912201 308 put_rn();
kenjiArai 16:f164f8912201 309 return;
kenjiArai 16:f164f8912201 310 }
kenjiArai 18:b3a27f681171 311 PRINTF("Head:%d, Tail:%d, Start pointer:%d, Number of data:%d\r\n",
kenjiArai 18:b3a27f681171 312 inf.log_inf.head, inf.log_inf.tail, *pt, n);
kenjiArai 16:f164f8912201 313 PRINTF( log_head );
kenjiArai 18:b3a27f681171 314 for (num = 0; num < n; num++) {
kenjiArai 16:f164f8912201 315 /* Read EEPROM and save to data_pack[] */
kenjiArai 18:b3a27f681171 316 for (i = 0; i < PKT_SIZE; i++) {
kenjiArai 16:f164f8912201 317 addr = (uint8_t *)(EEP_TOP + (*pt * PTR_SIZE) + i);
kenjiArai 16:f164f8912201 318 one.bf[i] =at24c1024.read((int)addr);
kenjiArai 18:b3a27f681171 319 ThisThread::sleep_for(2ms);
kenjiArai 16:f164f8912201 320 }
kenjiArai 16:f164f8912201 321 print_one_block_data();
kenjiArai 18:b3a27f681171 322 if (READABLE()) {
kenjiArai 18:b3a27f681171 323 GETC();
kenjiArai 18:b3a27f681171 324 break;
kenjiArai 18:b3a27f681171 325 }
kenjiArai 18:b3a27f681171 326 ThisThread::sleep_for(1ms);
kenjiArai 18:b3a27f681171 327 if (inf.log_inf.head == RING_TOP) { // check state 1,2,3
kenjiArai 18:b3a27f681171 328 *pt += 1;
kenjiArai 18:b3a27f681171 329 if (*pt >= inf.log_inf.tail) { // check state 2,3
kenjiArai 18:b3a27f681171 330 PRINTF(msg_end);
kenjiArai 18:b3a27f681171 331 break;
kenjiArai 16:f164f8912201 332 }
kenjiArai 18:b3a27f681171 333 } else { // state 4,5,6,7
kenjiArai 18:b3a27f681171 334 if (inf.log_inf.head == RING_TAIL) { // check state 6
kenjiArai 18:b3a27f681171 335 if (inf.log_inf.tail == RING_TAIL -1) { // check state 6
kenjiArai 18:b3a27f681171 336 if (*pt == RING_TAIL) { // same as :pt += 1
kenjiArai 18:b3a27f681171 337 *pt = RING_TOP;
kenjiArai 18:b3a27f681171 338 } else { // next read
kenjiArai 18:b3a27f681171 339 *pt += 1;
kenjiArai 18:b3a27f681171 340 if (*pt >= inf.log_inf.tail) {
kenjiArai 18:b3a27f681171 341 PRINTF(msg_end);
kenjiArai 18:b3a27f681171 342 break;
kenjiArai 18:b3a27f681171 343 }
kenjiArai 18:b3a27f681171 344 }
kenjiArai 18:b3a27f681171 345 }
kenjiArai 18:b3a27f681171 346 // check state 5
kenjiArai 18:b3a27f681171 347 } else if (inf.log_inf.tail == inf.log_inf.head - 1) {
kenjiArai 18:b3a27f681171 348 *pt += 1;
kenjiArai 18:b3a27f681171 349 if (*pt > RING_TAIL) { // same as :pt += 1
kenjiArai 18:b3a27f681171 350 *pt = RING_TOP;
kenjiArai 18:b3a27f681171 351 } else if (*pt == inf.log_inf.tail) { // reach to end
kenjiArai 18:b3a27f681171 352 PRINTF(msg_end);
kenjiArai 18:b3a27f681171 353 break;
kenjiArai 18:b3a27f681171 354 }
kenjiArai 18:b3a27f681171 355 }
kenjiArai 18:b3a27f681171 356 }
kenjiArai 16:f164f8912201 357 }
kenjiArai 16:f164f8912201 358 put_rn();
kenjiArai 15:065fbeddc305 359 }
kenjiArai 15:065fbeddc305 360
kenjiArai 15:065fbeddc305 361 // Clear all buffer
kenjiArai 18:b3a27f681171 362 void dtlog_clear_all_buff(void)
kenjiArai 18:b3a27f681171 363 {
kenjiArai 18:b3a27f681171 364 uint8_t i;
kenjiArai 18:b3a27f681171 365 uint8_t *addr;
kenjiArai 15:065fbeddc305 366
kenjiArai 15:065fbeddc305 367 /* Set initial data */
kenjiArai 18:b3a27f681171 368 inf.log_inf.head = inf.log_inf.tail = RING_TOP;
kenjiArai 15:065fbeddc305 369 /* Write buffer pointer */
kenjiArai 18:b3a27f681171 370 for (i = 0; i < PTR_SIZE; i++) {
kenjiArai 15:065fbeddc305 371 addr = (uint8_t *)(EEP_TOP + i);
kenjiArai 16:f164f8912201 372 at24c1024.write((int)addr, inf.buf_pointer[i]);
kenjiArai 18:b3a27f681171 373 ThisThread::sleep_for(8ms);
kenjiArai 15:065fbeddc305 374 }
kenjiArai 15:065fbeddc305 375 }
kenjiArai 15:065fbeddc305 376
kenjiArai 16:f164f8912201 377 // EEPROM buffer occupation
kenjiArai 18:b3a27f681171 378 uint16_t dtlog_buf_occupation(void)
kenjiArai 18:b3a27f681171 379 {
kenjiArai 18:b3a27f681171 380 uint16_t i = 0;
kenjiArai 18:b3a27f681171 381 uint16_t dt = 0;
kenjiArai 18:b3a27f681171 382 uint8_t *addr;
kenjiArai 16:f164f8912201 383
kenjiArai 16:f164f8912201 384 // Read EEPROM buffer pointer to RAM
kenjiArai 18:b3a27f681171 385 for ( i = 0; i < PTR_SIZE; i++ ) {
kenjiArai 16:f164f8912201 386 addr = (uint8_t *)(EEP_TOP + i);
kenjiArai 16:f164f8912201 387 inf.buf_pointer[i] = at24c1024.read((int)addr);
kenjiArai 18:b3a27f681171 388 ThisThread::sleep_for(2ms);
kenjiArai 16:f164f8912201 389 }
kenjiArai 16:f164f8912201 390 // check buffer pointer
kenjiArai 18:b3a27f681171 391 if (inf.log_inf.head == inf.log_inf.tail) {
kenjiArai 15:065fbeddc305 392 PRINTF(msg_emty);
kenjiArai 15:065fbeddc305 393 put_rn();
kenjiArai 16:f164f8912201 394 return 0;
kenjiArai 15:065fbeddc305 395 }
kenjiArai 18:b3a27f681171 396 if (inf.log_inf.head == RING_TOP) { // check state 1,2,3
kenjiArai 18:b3a27f681171 397 dt = inf.log_inf.tail - inf.log_inf.head;
kenjiArai 16:f164f8912201 398 } else { // state 4,5,6,7
kenjiArai 18:b3a27f681171 399 if (inf.log_inf.head == RING_TAIL) { // check state 6
kenjiArai 18:b3a27f681171 400 if (inf.log_inf.tail == RING_TAIL - 1) { // check state 6
kenjiArai 18:b3a27f681171 401 dt = inf.log_inf.tail - RING_TOP + 1;
kenjiArai 18:b3a27f681171 402 }
kenjiArai 18:b3a27f681171 403 // check state 4,5
kenjiArai 18:b3a27f681171 404 } else if (inf.log_inf.tail == inf.log_inf.head - 1) {
kenjiArai 18:b3a27f681171 405 dt = RING_TAIL;
kenjiArai 18:b3a27f681171 406 } else { // error
kenjiArai 18:b3a27f681171 407 dt = 0;
kenjiArai 18:b3a27f681171 408 }
kenjiArai 15:065fbeddc305 409 }
kenjiArai 16:f164f8912201 410 return dt;
kenjiArai 15:065fbeddc305 411 }
kenjiArai 15:065fbeddc305 412
kenjiArai 15:065fbeddc305 413 // Read block number
kenjiArai 18:b3a27f681171 414 void dtlog_num_of_block(void)
kenjiArai 18:b3a27f681171 415 {
kenjiArai 18:b3a27f681171 416 uint16_t dt;
kenjiArai 15:065fbeddc305 417
kenjiArai 18:b3a27f681171 418 dt = dtlog_buf_occupation();
kenjiArai 18:b3a27f681171 419 if (dt == 0) {
kenjiArai 18:b3a27f681171 420 PRINTF(msg_emty);
kenjiArai 16:f164f8912201 421 } else {
kenjiArai 18:b3a27f681171 422 PRINTF("Number of data = %d", dt);
kenjiArai 18:b3a27f681171 423 put_rn();
kenjiArai 18:b3a27f681171 424 dt = (uint16_t)(((uint32_t)dt * 1000 )/ (BLK_NO - 2));
kenjiArai 18:b3a27f681171 425 PRINTF("EEPROM Occupation = %d.%01d%%", dt / 10, dt % 10);
kenjiArai 15:065fbeddc305 426 }
kenjiArai 15:065fbeddc305 427 put_rn();
kenjiArai 15:065fbeddc305 428 }
kenjiArai 15:065fbeddc305 429
kenjiArai 18:b3a27f681171 430 //------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 431 // Monitor
kenjiArai 18:b3a27f681171 432 //------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 433 // Help Massage
kenjiArai 18:b3a27f681171 434 void msg_hlp (void)
kenjiArai 18:b3a27f681171 435 {
kenjiArai 18:b3a27f681171 436 PRINTF(mon_msg);
kenjiArai 18:b3a27f681171 437 put_rn();
kenjiArai 18:b3a27f681171 438 PRINTF("d - Data logger");
kenjiArai 18:b3a27f681171 439 put_rn();
kenjiArai 18:b3a27f681171 440 PRINTF("t - Check and set RTC");
kenjiArai 18:b3a27f681171 441 put_rn();
kenjiArai 18:b3a27f681171 442 PRINTF("x - Goto HW monitor");
kenjiArai 18:b3a27f681171 443 put_rn();
kenjiArai 18:b3a27f681171 444 PRINTF("q - Return to main");
kenjiArai 18:b3a27f681171 445 put_rn();
kenjiArai 15:065fbeddc305 446 }
kenjiArai 15:065fbeddc305 447
kenjiArai 15:065fbeddc305 448 // Get key input data
kenjiArai 18:b3a27f681171 449 void get_line (char *buff, int len)
kenjiArai 18:b3a27f681171 450 {
kenjiArai 18:b3a27f681171 451 char c;
kenjiArai 18:b3a27f681171 452 int idx = 0;
kenjiArai 15:065fbeddc305 453
kenjiArai 15:065fbeddc305 454 for (;;) {
kenjiArai 15:065fbeddc305 455 c = GETC();
kenjiArai 15:065fbeddc305 456 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 15:065fbeddc305 457 if (c == '\r') {
kenjiArai 15:065fbeddc305 458 buff[idx++] = c;
kenjiArai 15:065fbeddc305 459 break;
kenjiArai 15:065fbeddc305 460 }
kenjiArai 15:065fbeddc305 461 if ((c == '\b') && idx) {
kenjiArai 15:065fbeddc305 462 idx--;
kenjiArai 15:065fbeddc305 463 PUTC(c);
kenjiArai 15:065fbeddc305 464 PUTC(' ');
kenjiArai 15:065fbeddc305 465 PUTC(c);
kenjiArai 15:065fbeddc305 466 }
kenjiArai 15:065fbeddc305 467 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 15:065fbeddc305 468 buff[idx++] = c;
kenjiArai 15:065fbeddc305 469 PUTC(c);
kenjiArai 15:065fbeddc305 470 }
kenjiArai 15:065fbeddc305 471 }
kenjiArai 15:065fbeddc305 472 buff[idx] = 0;
kenjiArai 15:065fbeddc305 473 PUTC('\n');
kenjiArai 15:065fbeddc305 474 }
kenjiArai 15:065fbeddc305 475
kenjiArai 15:065fbeddc305 476
kenjiArai 15:065fbeddc305 477 // RTC related subroutines
kenjiArai 18:b3a27f681171 478 void chk_and_set_time(char *ptr)
kenjiArai 18:b3a27f681171 479 {
kenjiArai 18:b3a27f681171 480 unsigned long p1;
kenjiArai 18:b3a27f681171 481 struct tm t;
kenjiArai 15:065fbeddc305 482
kenjiArai 18:b3a27f681171 483 if (xatoi(&ptr, &p1)) {
kenjiArai 18:b3a27f681171 484 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 18:b3a27f681171 485 PRINTF("Year:%d ",(int)p1);
kenjiArai 18:b3a27f681171 486 xatoi( &ptr, &p1 );
kenjiArai 18:b3a27f681171 487 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 18:b3a27f681171 488 PRINTF("Month:%d ",(int)p1);
kenjiArai 18:b3a27f681171 489 xatoi( &ptr, &p1 );
kenjiArai 18:b3a27f681171 490 t.tm_mday = (uint8_t)p1;
kenjiArai 18:b3a27f681171 491 PRINTF("Day:%d ",(int)p1);
kenjiArai 18:b3a27f681171 492 xatoi( &ptr, &p1 );
kenjiArai 18:b3a27f681171 493 t.tm_hour = (uint8_t)p1;
kenjiArai 18:b3a27f681171 494 PRINTF("Hour:%d ",(int)p1);
kenjiArai 18:b3a27f681171 495 xatoi( &ptr, &p1 );
kenjiArai 18:b3a27f681171 496 t.tm_min = (uint8_t)p1;
kenjiArai 18:b3a27f681171 497 PRINTF("Min:%d ",(int)p1);
kenjiArai 18:b3a27f681171 498 xatoi( &ptr, &p1 );
kenjiArai 18:b3a27f681171 499 t.tm_sec = (uint8_t)p1;
kenjiArai 18:b3a27f681171 500 PRINTF("Sec: %d \r\n",(int)p1);
kenjiArai 18:b3a27f681171 501 xm41t62.write_rtc_std(&t);
kenjiArai 18:b3a27f681171 502 }
kenjiArai 15:065fbeddc305 503 xm41t62.read_rtc_std(&t);
kenjiArai 15:065fbeddc305 504 // Show Time with several example
kenjiArai 15:065fbeddc305 505 // ex.1
kenjiArai 15:065fbeddc305 506 PRINTF("Date: %04d/%02d/%02d, %02d:%02d:%02d\r\n",
kenjiArai 18:b3a27f681171 507 t.tm_year + 1900, t.tm_mon + 1,
kenjiArai 18:b3a27f681171 508 t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
kenjiArai 15:065fbeddc305 509 #if 0
kenjiArai 18:b3a27f681171 510 time_t seconds;
kenjiArai 18:b3a27f681171 511 char buf[40];
kenjiArai 18:b3a27f681171 512
kenjiArai 18:b3a27f681171 513 seconds = mktime(&t);
kenjiArai 15:065fbeddc305 514 // ex.2
kenjiArai 15:065fbeddc305 515 strftime(buf, 40, "%x %X", localtime(&seconds));
kenjiArai 15:065fbeddc305 516 PRINTF("Date: %s\r\n", buf);
kenjiArai 15:065fbeddc305 517 // ex.3
kenjiArai 15:065fbeddc305 518 strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 15:065fbeddc305 519 PRINTF("Date: %s\r\n", buf);
kenjiArai 15:065fbeddc305 520 // ex.4
kenjiArai 15:065fbeddc305 521 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 15:065fbeddc305 522 PRINTF("Date: %s\r\n", buf);
kenjiArai 15:065fbeddc305 523 #endif
kenjiArai 15:065fbeddc305 524 }
kenjiArai 15:065fbeddc305 525
kenjiArai 15:065fbeddc305 526 // Data Logger / Check status and Output data
kenjiArai 18:b3a27f681171 527 static void data_logger(char *ptr)
kenjiArai 18:b3a27f681171 528 {
kenjiArai 18:b3a27f681171 529 char c;
kenjiArai 18:b3a27f681171 530 unsigned long dt;
kenjiArai 18:b3a27f681171 531 uint16_t n;
kenjiArai 18:b3a27f681171 532 const char * Msg = "Data Logger Mode, ?[Help]";
kenjiArai 15:065fbeddc305 533
kenjiArai 18:b3a27f681171 534 PRINTF("%s", Msg);
kenjiArai 18:b3a27f681171 535 put_rn();
kenjiArai 18:b3a27f681171 536 /* Get EEPROM resource */
kenjiArai 18:b3a27f681171 537 dtlog_pointer_read();
kenjiArai 18:b3a27f681171 538 dt = inf.log_inf.head;
kenjiArai 18:b3a27f681171 539 while (1) {
kenjiArai 18:b3a27f681171 540 /* Get EEPROM resource */
kenjiArai 18:b3a27f681171 541 dtlog_pointer_read();
kenjiArai 18:b3a27f681171 542 PRINTF("DL>");
kenjiArai 15:065fbeddc305 543 ptr = linebuf;
kenjiArai 15:065fbeddc305 544 get_line(ptr, buf_size);
kenjiArai 18:b3a27f681171 545 switch (*ptr++) {
kenjiArai 18:b3a27f681171 546 case 'a' :
kenjiArai 18:b3a27f681171 547 put_r();
kenjiArai 18:b3a27f681171 548 read_pointer = inf.log_inf.head;
kenjiArai 18:b3a27f681171 549 n = dtlog_buf_occupation();
kenjiArai 18:b3a27f681171 550 dtlog_block_read(&read_pointer, n);
kenjiArai 18:b3a27f681171 551 break;
kenjiArai 18:b3a27f681171 552 case 'c' : // Clear data
kenjiArai 18:b3a27f681171 553 put_r();
kenjiArai 18:b3a27f681171 554 PRINTF("Delete all data?");
kenjiArai 18:b3a27f681171 555 put_rn();
kenjiArai 18:b3a27f681171 556 PRINTF("Enter y/n (n-cancel)");
kenjiArai 18:b3a27f681171 557 put_rn();
kenjiArai 18:b3a27f681171 558 c = GETC();
kenjiArai 18:b3a27f681171 559 PUTC(c);
kenjiArai 18:b3a27f681171 560 put_rn();
kenjiArai 18:b3a27f681171 561 if (c == 'y') {
kenjiArai 18:b3a27f681171 562 PRINTF("Cleared all logging data");
kenjiArai 18:b3a27f681171 563 dtlog_clear_all_buff();
kenjiArai 18:b3a27f681171 564 } else {
kenjiArai 18:b3a27f681171 565 PRINTF("Canceled");
kenjiArai 18:b3a27f681171 566 }
kenjiArai 18:b3a27f681171 567 put_rn();
kenjiArai 18:b3a27f681171 568 break;
kenjiArai 18:b3a27f681171 569 case 'd' : // d <pointer> [<count>] - Dump buffer
kenjiArai 18:b3a27f681171 570 put_r();
kenjiArai 18:b3a27f681171 571 if (xatoi(&ptr, &dt)) {
kenjiArai 18:b3a27f681171 572 read_pointer = (uint16_t)dt;
kenjiArai 18:b3a27f681171 573 } else {
kenjiArai 18:b3a27f681171 574 read_pointer = inf.log_inf.head;
kenjiArai 18:b3a27f681171 575 }
kenjiArai 18:b3a27f681171 576 if (xatoi(&ptr, &dt)) {
kenjiArai 18:b3a27f681171 577 n = (uint8_t)dt;
kenjiArai 18:b3a27f681171 578 } else {
kenjiArai 18:b3a27f681171 579 n = BLK_SIZE;
kenjiArai 18:b3a27f681171 580 }
kenjiArai 18:b3a27f681171 581 if (read_pointer == 0) {
kenjiArai 18:b3a27f681171 582 read_pointer = 1;
kenjiArai 18:b3a27f681171 583 }
kenjiArai 18:b3a27f681171 584 dtlog_block_read(&read_pointer, n);
kenjiArai 18:b3a27f681171 585 break;
kenjiArai 18:b3a27f681171 586 case 0x0d : // CR
kenjiArai 18:b3a27f681171 587 put_r();
kenjiArai 18:b3a27f681171 588 dtlog_block_read(&read_pointer, BLK_SIZE);
kenjiArai 18:b3a27f681171 589 break;
kenjiArai 18:b3a27f681171 590 case 'b' : // Back
kenjiArai 18:b3a27f681171 591 put_r();
kenjiArai 18:b3a27f681171 592 read_pointer -= (BLK_SIZE * 2);
kenjiArai 18:b3a27f681171 593 if (read_pointer <= 0) {
kenjiArai 18:b3a27f681171 594 read_pointer = 1;
kenjiArai 18:b3a27f681171 595 }
kenjiArai 18:b3a27f681171 596 dtlog_block_read(&read_pointer, n);
kenjiArai 18:b3a27f681171 597 break;
kenjiArai 18:b3a27f681171 598 case 'n' :
kenjiArai 18:b3a27f681171 599 case 's' : // Status
kenjiArai 18:b3a27f681171 600 put_r();
kenjiArai 18:b3a27f681171 601 dtlog_num_of_block();
kenjiArai 18:b3a27f681171 602 break;
kenjiArai 18:b3a27f681171 603 case 'q' : // exit
kenjiArai 18:b3a27f681171 604 linebuf[0] = 0;
kenjiArai 18:b3a27f681171 605 return;
kenjiArai 18:b3a27f681171 606 case '?' :
kenjiArai 18:b3a27f681171 607 put_r();
kenjiArai 18:b3a27f681171 608 PRINTF("d - <pointer> [<count>] Dump one block data");
kenjiArai 18:b3a27f681171 609 put_rn();
kenjiArai 18:b3a27f681171 610 PRINTF("a - Dump all log data");
kenjiArai 18:b3a27f681171 611 put_rn();
kenjiArai 18:b3a27f681171 612 PRINTF("c - Clear log data");
kenjiArai 18:b3a27f681171 613 put_rn();
kenjiArai 18:b3a27f681171 614 PRINTF("s - Logger status");
kenjiArai 18:b3a27f681171 615 put_rn();
kenjiArai 18:b3a27f681171 616 PRINTF("q - Exit DL mode");
kenjiArai 18:b3a27f681171 617 put_rn();
kenjiArai 18:b3a27f681171 618 break;
kenjiArai 18:b3a27f681171 619 default:
kenjiArai 18:b3a27f681171 620 PUTC('?');
kenjiArai 18:b3a27f681171 621 put_rn();
kenjiArai 18:b3a27f681171 622 break;
kenjiArai 18:b3a27f681171 623 }
kenjiArai 18:b3a27f681171 624 }
kenjiArai 15:065fbeddc305 625 }
kenjiArai 15:065fbeddc305 626
kenjiArai 18:b3a27f681171 627 // ---------- Program starts here! ---------------------------------------------
kenjiArai 18:b3a27f681171 628 int mon(void)
kenjiArai 18:b3a27f681171 629 {
kenjiArai 18:b3a27f681171 630 char *ptr;
kenjiArai 15:065fbeddc305 631
kenjiArai 15:065fbeddc305 632 put_rn();
kenjiArai 15:065fbeddc305 633 put_rn();
kenjiArai 15:065fbeddc305 634 PRINTF("%s [Help:'?' key]", mon_msg);
kenjiArai 15:065fbeddc305 635 put_rn();
kenjiArai 15:065fbeddc305 636 for (;;) {
kenjiArai 15:065fbeddc305 637 put_r();
kenjiArai 15:065fbeddc305 638 PUTC('>');
kenjiArai 15:065fbeddc305 639 ptr = linebuf;
kenjiArai 15:065fbeddc305 640 get_line(ptr, sizeof(linebuf));
kenjiArai 15:065fbeddc305 641 switch (*ptr++) {
kenjiArai 18:b3a27f681171 642 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 643 // check and set RTC
kenjiArai 18:b3a27f681171 644 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 645 case 't' :
kenjiArai 18:b3a27f681171 646 put_r();
kenjiArai 18:b3a27f681171 647 chk_and_set_time(ptr);
kenjiArai 18:b3a27f681171 648 break;
kenjiArai 18:b3a27f681171 649 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 650 // check EEPROM status
kenjiArai 18:b3a27f681171 651 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 652 case 'd' :
kenjiArai 18:b3a27f681171 653 put_r();
kenjiArai 18:b3a27f681171 654 data_logger(ptr);
kenjiArai 18:b3a27f681171 655 break;
kenjiArai 18:b3a27f681171 656 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 657 // help
kenjiArai 18:b3a27f681171 658 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 659 case '?' :
kenjiArai 18:b3a27f681171 660 put_r();
kenjiArai 18:b3a27f681171 661 msg_hlp();
kenjiArai 18:b3a27f681171 662 break;
kenjiArai 18:b3a27f681171 663 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 664 // Go to special command
kenjiArai 18:b3a27f681171 665 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 666 case 'x' : //
kenjiArai 18:b3a27f681171 667 PRINTF("->ROM & RAM size limitation. ");
kenjiArai 18:b3a27f681171 668 PRINTF("-> Cannot impliment the function\r\n");
kenjiArai 18:b3a27f681171 669 //mon_hw();
kenjiArai 18:b3a27f681171 670 PRINTF("->Came back monitor\r\n");
kenjiArai 18:b3a27f681171 671 break;
kenjiArai 18:b3a27f681171 672 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 673 // Go back to main()
kenjiArai 18:b3a27f681171 674 //------------------------------------------------------------------
kenjiArai 18:b3a27f681171 675 case 'q' : // Quit
kenjiArai 18:b3a27f681171 676 PRINTF("\rReturn to main\r\n");
kenjiArai 18:b3a27f681171 677 PRINTF("cannot control anymore from here\r\n");
kenjiArai 18:b3a27f681171 678 return 0;
kenjiArai 15:065fbeddc305 679 }
kenjiArai 15:065fbeddc305 680 }
kenjiArai 15:065fbeddc305 681 }