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