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
Please see https://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-barometer-with-data-logging/#
mon.cpp@15:065fbeddc305, 2014-06-29 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Jun 29 06:58:00 2014 +0000
- Revision:
- 15:065fbeddc305
- Child:
- 16:f164f8912201
Barometer program / Step by step approach -> final step,; Barometer, Humidity, Sunshine, RTC data into EEPROM (logging)
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 | 15:065fbeddc305 | 10 | * Revised: June 29th, 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 | 15:065fbeddc305 | 21 | #include "m41t62_rtc.h" // Own lib. / RTC control |
kenjiArai | 15:065fbeddc305 | 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 | 15:065fbeddc305 | 32 | #define BAUD(x) pc.baud(x) |
kenjiArai | 15:065fbeddc305 | 33 | #define GETC(x) pc.getc(x) |
kenjiArai | 15:065fbeddc305 | 34 | #define PUTC(x) pc.putc(x) |
kenjiArai | 15:065fbeddc305 | 35 | #define PRINTF(...) pc.printf(__VA_ARGS__) |
kenjiArai | 15:065fbeddc305 | 36 | #define READABLE(x) pc.readable(x) |
kenjiArai | 15:065fbeddc305 | 37 | |
kenjiArai | 15:065fbeddc305 | 38 | // EEPROM |
kenjiArai | 15:065fbeddc305 | 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 | 15:065fbeddc305 | 46 | uint8_t buf_pointer[PTR_SIZE]; |
kenjiArai | 15:065fbeddc305 | 47 | xEeprom_ptr log_inf; |
kenjiArai | 15:065fbeddc305 | 48 | |
kenjiArai | 15:065fbeddc305 | 49 | struct one_log{ |
kenjiArai | 15:065fbeddc305 | 50 | uint32_t time; |
kenjiArai | 15:065fbeddc305 | 51 | uint16_t vcc; |
kenjiArai | 15:065fbeddc305 | 52 | uint16_t baro; |
kenjiArai | 15:065fbeddc305 | 53 | int16_t b_temp; |
kenjiArai | 15:065fbeddc305 | 54 | uint16_t humi; |
kenjiArai | 15:065fbeddc305 | 55 | int16_t h_temp; |
kenjiArai | 15:065fbeddc305 | 56 | uint16_t lux; |
kenjiArai | 15:065fbeddc305 | 57 | }; // 16 bytes total |
kenjiArai | 15:065fbeddc305 | 58 | |
kenjiArai | 15:065fbeddc305 | 59 | one_log lg; |
kenjiArai | 15:065fbeddc305 | 60 | uint8_t bf[PKT_SIZE]; |
kenjiArai | 15:065fbeddc305 | 61 | |
kenjiArai | 15:065fbeddc305 | 62 | extern float baro; |
kenjiArai | 15:065fbeddc305 | 63 | extern float baro_temp; |
kenjiArai | 15:065fbeddc305 | 64 | extern float cal_vcc; |
kenjiArai | 15:065fbeddc305 | 65 | extern float lux; |
kenjiArai | 15:065fbeddc305 | 66 | extern float humidity; |
kenjiArai | 15:065fbeddc305 | 67 | extern float humidity_temp; |
kenjiArai | 15:065fbeddc305 | 68 | extern float lux; |
kenjiArai | 15:065fbeddc305 | 69 | |
kenjiArai | 15:065fbeddc305 | 70 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 71 | static char *const mon_msg = "Monitor for mbed system, created on "__DATE__""; |
kenjiArai | 15:065fbeddc305 | 72 | |
kenjiArai | 15:065fbeddc305 | 73 | // $, 2014/6/29,12:43:16,3.293,1004.5,+29.3,45.8,+29.2,1234,* |
kenjiArai | 15:065fbeddc305 | 74 | char *const log_head = "$,YYYY/MM/DD,HH:MM:SS,Vcc ,Press ,Temp ,Humi,Temp ,Lux ,*"; |
kenjiArai | 15:065fbeddc305 | 75 | char *const msg_emty = "Data empty"; |
kenjiArai | 15:065fbeddc305 | 76 | |
kenjiArai | 15:065fbeddc305 | 77 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 78 | extern void mon_hw(void); |
kenjiArai | 15:065fbeddc305 | 79 | |
kenjiArai | 15:065fbeddc305 | 80 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 81 | // Control Program |
kenjiArai | 15:065fbeddc305 | 82 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 83 | // Put \r\n |
kenjiArai | 15:065fbeddc305 | 84 | void put_rn ( void ){ PUTC('\r'); PUTC('\n');} |
kenjiArai | 15:065fbeddc305 | 85 | |
kenjiArai | 15:065fbeddc305 | 86 | // Put \r |
kenjiArai | 15:065fbeddc305 | 87 | void put_r ( void ){ PUTC('\r');} |
kenjiArai | 15:065fbeddc305 | 88 | |
kenjiArai | 15:065fbeddc305 | 89 | // Put ", " |
kenjiArai | 15:065fbeddc305 | 90 | void put_lin ( void ){ PRINTF(", ");} |
kenjiArai | 15:065fbeddc305 | 91 | |
kenjiArai | 15:065fbeddc305 | 92 | // Put space n |
kenjiArai | 15:065fbeddc305 | 93 | void put_spc( uint8_t n){ for(;n > 0; n--){ PUTC(' '); }} |
kenjiArai | 15:065fbeddc305 | 94 | |
kenjiArai | 15:065fbeddc305 | 95 | // Change string -> integer |
kenjiArai | 15:065fbeddc305 | 96 | int xatoi (char **str, unsigned long *res){ |
kenjiArai | 15:065fbeddc305 | 97 | unsigned long val; |
kenjiArai | 15:065fbeddc305 | 98 | unsigned char c, radix, s = 0; |
kenjiArai | 15:065fbeddc305 | 99 | |
kenjiArai | 15:065fbeddc305 | 100 | while ((c = **str) == ' ') (*str)++; |
kenjiArai | 15:065fbeddc305 | 101 | if (c == '-') { |
kenjiArai | 15:065fbeddc305 | 102 | s = 1; |
kenjiArai | 15:065fbeddc305 | 103 | c = *(++(*str)); |
kenjiArai | 15:065fbeddc305 | 104 | } |
kenjiArai | 15:065fbeddc305 | 105 | if (c == '0') { |
kenjiArai | 15:065fbeddc305 | 106 | c = *(++(*str)); |
kenjiArai | 15:065fbeddc305 | 107 | if (c <= ' ') { *res = 0; return 1; } |
kenjiArai | 15:065fbeddc305 | 108 | if (c == 'x') { |
kenjiArai | 15:065fbeddc305 | 109 | radix = 16; |
kenjiArai | 15:065fbeddc305 | 110 | c = *(++(*str)); |
kenjiArai | 15:065fbeddc305 | 111 | } else { |
kenjiArai | 15:065fbeddc305 | 112 | if (c == 'b') { |
kenjiArai | 15:065fbeddc305 | 113 | radix = 2; |
kenjiArai | 15:065fbeddc305 | 114 | c = *(++(*str)); |
kenjiArai | 15:065fbeddc305 | 115 | } else { |
kenjiArai | 15:065fbeddc305 | 116 | if ((c >= '0')&&(c <= '9')){ radix = 8; |
kenjiArai | 15:065fbeddc305 | 117 | } else { return 0;} |
kenjiArai | 15:065fbeddc305 | 118 | } |
kenjiArai | 15:065fbeddc305 | 119 | } |
kenjiArai | 15:065fbeddc305 | 120 | } else { |
kenjiArai | 15:065fbeddc305 | 121 | if ((c < '1')||(c > '9')){ return 0;} |
kenjiArai | 15:065fbeddc305 | 122 | radix = 10; |
kenjiArai | 15:065fbeddc305 | 123 | } |
kenjiArai | 15:065fbeddc305 | 124 | val = 0; |
kenjiArai | 15:065fbeddc305 | 125 | while (c > ' ') { |
kenjiArai | 15:065fbeddc305 | 126 | if (c >= 'a') c -= 0x20; |
kenjiArai | 15:065fbeddc305 | 127 | c -= '0'; |
kenjiArai | 15:065fbeddc305 | 128 | if (c >= 17) { |
kenjiArai | 15:065fbeddc305 | 129 | c -= 7; |
kenjiArai | 15:065fbeddc305 | 130 | if (c <= 9) return 0; |
kenjiArai | 15:065fbeddc305 | 131 | } |
kenjiArai | 15:065fbeddc305 | 132 | if (c >= radix) return 0; |
kenjiArai | 15:065fbeddc305 | 133 | val = val * radix + c; |
kenjiArai | 15:065fbeddc305 | 134 | c = *(++(*str)); |
kenjiArai | 15:065fbeddc305 | 135 | } |
kenjiArai | 15:065fbeddc305 | 136 | if (s) val = -val; |
kenjiArai | 15:065fbeddc305 | 137 | *res = val; |
kenjiArai | 15:065fbeddc305 | 138 | return 1; |
kenjiArai | 15:065fbeddc305 | 139 | } |
kenjiArai | 15:065fbeddc305 | 140 | |
kenjiArai | 15:065fbeddc305 | 141 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 142 | // Data Logging / Save into EEPROM |
kenjiArai | 15:065fbeddc305 | 143 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 144 | // Read buffer pointer |
kenjiArai | 15:065fbeddc305 | 145 | static void dtlog_pointer_read(void){ |
kenjiArai | 15:065fbeddc305 | 146 | uint8_t i; |
kenjiArai | 15:065fbeddc305 | 147 | uint8_t *addr; |
kenjiArai | 15:065fbeddc305 | 148 | |
kenjiArai | 15:065fbeddc305 | 149 | /* Read EEPROM and save to buf_pointer[] */ |
kenjiArai | 15:065fbeddc305 | 150 | for ( i = 0; i < PTR_SIZE; i++ ){ |
kenjiArai | 15:065fbeddc305 | 151 | addr = (uint8_t *)(EEP_TOP + i); |
kenjiArai | 15:065fbeddc305 | 152 | buf_pointer[i] = at24c1024.read((int)addr); |
kenjiArai | 15:065fbeddc305 | 153 | wait(0.002); |
kenjiArai | 15:065fbeddc305 | 154 | } |
kenjiArai | 15:065fbeddc305 | 155 | } |
kenjiArai | 15:065fbeddc305 | 156 | |
kenjiArai | 15:065fbeddc305 | 157 | // Make one data packet data structure |
kenjiArai | 15:065fbeddc305 | 158 | void dtlog_data_pack(void){ |
kenjiArai | 15:065fbeddc305 | 159 | struct tm t; |
kenjiArai | 15:065fbeddc305 | 160 | |
kenjiArai | 15:065fbeddc305 | 161 | xm41t62.read_rtc_std(&t); |
kenjiArai | 15:065fbeddc305 | 162 | lg.time = mktime(&t); |
kenjiArai | 15:065fbeddc305 | 163 | bf[0] = (uint8_t)(lg.time >> 24); |
kenjiArai | 15:065fbeddc305 | 164 | bf[1] = (uint8_t)(lg.time >> 16); |
kenjiArai | 15:065fbeddc305 | 165 | bf[2] = (uint8_t)(lg.time >> 8); |
kenjiArai | 15:065fbeddc305 | 166 | bf[3] = (uint8_t)(lg.time >> 0); |
kenjiArai | 15:065fbeddc305 | 167 | lg.vcc = (uint16_t)(cal_vcc * 1000); |
kenjiArai | 15:065fbeddc305 | 168 | bf[4] = (uint8_t)(lg.vcc >> 8); |
kenjiArai | 15:065fbeddc305 | 169 | bf[5] = (uint8_t)(lg.vcc >> 0); |
kenjiArai | 15:065fbeddc305 | 170 | lg.baro = (uint16_t)(baro * 10); |
kenjiArai | 15:065fbeddc305 | 171 | bf[6] = (uint8_t)(lg.baro >> 8); |
kenjiArai | 15:065fbeddc305 | 172 | bf[7] = (uint8_t)(lg.baro >> 0); |
kenjiArai | 15:065fbeddc305 | 173 | lg.b_temp = (int16_t)(baro_temp * 10); |
kenjiArai | 15:065fbeddc305 | 174 | bf[8] = (uint8_t)(lg.b_temp >> 8); |
kenjiArai | 15:065fbeddc305 | 175 | bf[9] = (uint8_t)(lg.b_temp >> 0); |
kenjiArai | 15:065fbeddc305 | 176 | lg.humi = (uint16_t)(humidity * 10); |
kenjiArai | 15:065fbeddc305 | 177 | bf[10] = (uint8_t)(lg.humi >> 8); |
kenjiArai | 15:065fbeddc305 | 178 | bf[11] = (uint8_t)(lg.humi >> 0); |
kenjiArai | 15:065fbeddc305 | 179 | lg.h_temp = (int16_t)(humidity_temp * 10); |
kenjiArai | 15:065fbeddc305 | 180 | bf[12] = (uint8_t)(lg.h_temp >> 8); |
kenjiArai | 15:065fbeddc305 | 181 | bf[13] = (uint8_t)(lg.h_temp >> 0); |
kenjiArai | 15:065fbeddc305 | 182 | lg.lux = (uint16_t)lux; |
kenjiArai | 15:065fbeddc305 | 183 | bf[14] = (uint8_t)(lg.lux >> 8); |
kenjiArai | 15:065fbeddc305 | 184 | bf[15] = (uint8_t)(lg.lux >> 0); |
kenjiArai | 15:065fbeddc305 | 185 | } |
kenjiArai | 15:065fbeddc305 | 186 | |
kenjiArai | 15:065fbeddc305 | 187 | // Print one packet as normalized data |
kenjiArai | 15:065fbeddc305 | 188 | void print_one_block_data(void){ |
kenjiArai | 15:065fbeddc305 | 189 | struct tm *t; |
kenjiArai | 15:065fbeddc305 | 190 | time_t seconds; |
kenjiArai | 15:065fbeddc305 | 191 | uint16_t dt0; |
kenjiArai | 15:065fbeddc305 | 192 | int16_t dt1; |
kenjiArai | 15:065fbeddc305 | 193 | |
kenjiArai | 15:065fbeddc305 | 194 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 195 | PUTC( '$' ); |
kenjiArai | 15:065fbeddc305 | 196 | //--- Time |
kenjiArai | 15:065fbeddc305 | 197 | seconds = (time_t)bf[0] * 16777216 + (time_t)bf[1] * 65536 + (time_t)bf[2] * 256 + (time_t)bf[3]; |
kenjiArai | 15:065fbeddc305 | 198 | //PRINTF(",0x%x,",seconds); |
kenjiArai | 15:065fbeddc305 | 199 | t = localtime(&seconds); |
kenjiArai | 15:065fbeddc305 | 200 | PRINTF(",%04d/%02d/%02d,%02d:%02d:%02d,", |
kenjiArai | 15:065fbeddc305 | 201 | t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); |
kenjiArai | 15:065fbeddc305 | 202 | //--- Vcc |
kenjiArai | 15:065fbeddc305 | 203 | dt0 = (uint16_t)bf[4] * 256 + (uint16_t)bf[5]; |
kenjiArai | 15:065fbeddc305 | 204 | //PRINTF("0x%x,",dt0); |
kenjiArai | 15:065fbeddc305 | 205 | PRINTF("%01d.%03d,", dt0/1000, dt0%1000); |
kenjiArai | 15:065fbeddc305 | 206 | //--- Pressure |
kenjiArai | 15:065fbeddc305 | 207 | dt0 = (uint16_t)bf[6] * 256 + (uint16_t)bf[7]; |
kenjiArai | 15:065fbeddc305 | 208 | //PRINTF("0x%x,",dt0); |
kenjiArai | 15:065fbeddc305 | 209 | PRINTF("%04d.%01d,", dt0/10, dt0%10 ); |
kenjiArai | 15:065fbeddc305 | 210 | //--- Temp. |
kenjiArai | 15:065fbeddc305 | 211 | dt1 = (int16_t)bf[8] * 256 + (int16_t)bf[9]; |
kenjiArai | 15:065fbeddc305 | 212 | //PRINTF("0x%x,",dt1); |
kenjiArai | 15:065fbeddc305 | 213 | PRINTF("%\+-03d.%01d,", dt1/10, abs(dt1)%10 ); |
kenjiArai | 15:065fbeddc305 | 214 | //--- Humidity |
kenjiArai | 15:065fbeddc305 | 215 | dt0 = (uint16_t)bf[10] * 256 + (uint16_t)bf[11]; |
kenjiArai | 15:065fbeddc305 | 216 | //PRINTF("0x%x,",dt0); |
kenjiArai | 15:065fbeddc305 | 217 | PRINTF("%02d.%01d,", dt0/10, dt0%10 ); |
kenjiArai | 15:065fbeddc305 | 218 | //--- Temp. |
kenjiArai | 15:065fbeddc305 | 219 | dt1 = (int16_t)bf[12] * 256 + (int16_t)bf[13]; |
kenjiArai | 15:065fbeddc305 | 220 | //PRINTF("0x%x,",dt1); |
kenjiArai | 15:065fbeddc305 | 221 | PRINTF("%\+-03d.%01d,", dt1/10, abs(dt1)%10 ); |
kenjiArai | 15:065fbeddc305 | 222 | //--- Lux |
kenjiArai | 15:065fbeddc305 | 223 | dt0 = (uint16_t)bf[14] * 256 + (uint16_t)bf[15]; |
kenjiArai | 15:065fbeddc305 | 224 | //PRINTF("0x%x",dt0); |
kenjiArai | 15:065fbeddc305 | 225 | PRINTF("%05d,*", dt0); |
kenjiArai | 15:065fbeddc305 | 226 | } |
kenjiArai | 15:065fbeddc305 | 227 | |
kenjiArai | 15:065fbeddc305 | 228 | // Read block data |
kenjiArai | 15:065fbeddc305 | 229 | static void dtlog_blk_read(xEeprom_ptr *read_inf){ |
kenjiArai | 15:065fbeddc305 | 230 | uint8_t i; |
kenjiArai | 15:065fbeddc305 | 231 | uint8_t *addr; |
kenjiArai | 15:065fbeddc305 | 232 | |
kenjiArai | 15:065fbeddc305 | 233 | PRINTF( log_head ); |
kenjiArai | 15:065fbeddc305 | 234 | for ( ; ; ){ |
kenjiArai | 15:065fbeddc305 | 235 | /* Read EEPROM and save to data_pack[] */ |
kenjiArai | 15:065fbeddc305 | 236 | for (i = 0; i < PKT_SIZE; i++){ |
kenjiArai | 15:065fbeddc305 | 237 | addr = (uint8_t *)(EEP_TOP + (read_inf->ptr * PTR_SIZE) + i); |
kenjiArai | 15:065fbeddc305 | 238 | bf[i] =at24c1024.read((int)addr); |
kenjiArai | 15:065fbeddc305 | 239 | wait(0.002); |
kenjiArai | 15:065fbeddc305 | 240 | } |
kenjiArai | 15:065fbeddc305 | 241 | print_one_block_data(); |
kenjiArai | 15:065fbeddc305 | 242 | wait(0.001); |
kenjiArai | 15:065fbeddc305 | 243 | if (++read_inf->ptr >= read_inf->max){ |
kenjiArai | 15:065fbeddc305 | 244 | break; |
kenjiArai | 15:065fbeddc305 | 245 | } |
kenjiArai | 15:065fbeddc305 | 246 | if (READABLE() != 0){ |
kenjiArai | 15:065fbeddc305 | 247 | break; |
kenjiArai | 15:065fbeddc305 | 248 | } |
kenjiArai | 15:065fbeddc305 | 249 | } |
kenjiArai | 15:065fbeddc305 | 250 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 251 | } |
kenjiArai | 15:065fbeddc305 | 252 | |
kenjiArai | 15:065fbeddc305 | 253 | // Write one packet |
kenjiArai | 15:065fbeddc305 | 254 | void dtlog_one_write(void){ |
kenjiArai | 15:065fbeddc305 | 255 | xEeprom_ptr write_inf; |
kenjiArai | 15:065fbeddc305 | 256 | uint8_t i; |
kenjiArai | 15:065fbeddc305 | 257 | uint8_t *addr; |
kenjiArai | 15:065fbeddc305 | 258 | |
kenjiArai | 15:065fbeddc305 | 259 | /* Read buffer pointer */ |
kenjiArai | 15:065fbeddc305 | 260 | dtlog_pointer_read(); |
kenjiArai | 15:065fbeddc305 | 261 | write_inf.wr_pointer = READ_POINTER(); |
kenjiArai | 15:065fbeddc305 | 262 | write_inf.status = RD_STATUS(); |
kenjiArai | 15:065fbeddc305 | 263 | if (write_inf.status == BUF_FULL){ return;} |
kenjiArai | 15:065fbeddc305 | 264 | /* Write data_pack[] into EEPROM */ |
kenjiArai | 15:065fbeddc305 | 265 | for (i = 0; i < PKT_SIZE; i++){ |
kenjiArai | 15:065fbeddc305 | 266 | addr = (uint8_t *)(EEP_TOP + (write_inf.wr_pointer * PTR_SIZE) + i); |
kenjiArai | 15:065fbeddc305 | 267 | at24c1024.write((int)addr, bf[i]); |
kenjiArai | 15:065fbeddc305 | 268 | wait(0.008); |
kenjiArai | 15:065fbeddc305 | 269 | } |
kenjiArai | 15:065fbeddc305 | 270 | /* Write buffer pointer */ |
kenjiArai | 15:065fbeddc305 | 271 | if (++write_inf.wr_pointer == BLK_NO){ |
kenjiArai | 15:065fbeddc305 | 272 | write_inf.status = BUF_FULL; |
kenjiArai | 15:065fbeddc305 | 273 | } else { |
kenjiArai | 15:065fbeddc305 | 274 | write_inf.status = 0; |
kenjiArai | 15:065fbeddc305 | 275 | } |
kenjiArai | 15:065fbeddc305 | 276 | WRITE_POINTER(write_inf.wr_pointer); |
kenjiArai | 15:065fbeddc305 | 277 | WR_STATUS(write_inf.status); |
kenjiArai | 15:065fbeddc305 | 278 | for (i = 0; i < PTR_SIZE; i++){ |
kenjiArai | 15:065fbeddc305 | 279 | addr = (uint8_t *)(EEP_TOP + i); |
kenjiArai | 15:065fbeddc305 | 280 | at24c1024.write((int)addr, buf_pointer[i]); |
kenjiArai | 15:065fbeddc305 | 281 | wait(0.008); |
kenjiArai | 15:065fbeddc305 | 282 | } |
kenjiArai | 15:065fbeddc305 | 283 | } |
kenjiArai | 15:065fbeddc305 | 284 | |
kenjiArai | 15:065fbeddc305 | 285 | // Read Data Pointer Information |
kenjiArai | 15:065fbeddc305 | 286 | void dtlog_rd_buf_inf(xEeprom_ptr *log_ptr_inf){ |
kenjiArai | 15:065fbeddc305 | 287 | dtlog_pointer_read(); |
kenjiArai | 15:065fbeddc305 | 288 | log_ptr_inf->wr_pointer = READ_POINTER(); |
kenjiArai | 15:065fbeddc305 | 289 | log_ptr_inf->status = RD_STATUS(); |
kenjiArai | 15:065fbeddc305 | 290 | } |
kenjiArai | 15:065fbeddc305 | 291 | |
kenjiArai | 15:065fbeddc305 | 292 | // Clear all buffer |
kenjiArai | 15:065fbeddc305 | 293 | void dtlog_clear_all_buff(xEeprom_ptr *log_ptr_inf){ |
kenjiArai | 15:065fbeddc305 | 294 | uint8_t i; |
kenjiArai | 15:065fbeddc305 | 295 | uint8_t *addr; |
kenjiArai | 15:065fbeddc305 | 296 | |
kenjiArai | 15:065fbeddc305 | 297 | /* Set initial data */ |
kenjiArai | 15:065fbeddc305 | 298 | WRITE_POINTER(1); |
kenjiArai | 15:065fbeddc305 | 299 | log_ptr_inf->wr_pointer = 1; |
kenjiArai | 15:065fbeddc305 | 300 | WR_STATUS(0); |
kenjiArai | 15:065fbeddc305 | 301 | log_ptr_inf->status = 0; |
kenjiArai | 15:065fbeddc305 | 302 | log_ptr_inf->max = BLK_NO; |
kenjiArai | 15:065fbeddc305 | 303 | log_ptr_inf->ptr = 1; |
kenjiArai | 15:065fbeddc305 | 304 | log_ptr_inf->size = BLK_SIZE; |
kenjiArai | 15:065fbeddc305 | 305 | /* Write buffer pointer */ |
kenjiArai | 15:065fbeddc305 | 306 | for (i = 0; i < PTR_SIZE; i++){ |
kenjiArai | 15:065fbeddc305 | 307 | addr = (uint8_t *)(EEP_TOP + i); |
kenjiArai | 15:065fbeddc305 | 308 | at24c1024.write((int)addr, buf_pointer[i]); |
kenjiArai | 15:065fbeddc305 | 309 | wait(0.008); |
kenjiArai | 15:065fbeddc305 | 310 | } |
kenjiArai | 15:065fbeddc305 | 311 | } |
kenjiArai | 15:065fbeddc305 | 312 | |
kenjiArai | 15:065fbeddc305 | 313 | // Read some block from buffer |
kenjiArai | 15:065fbeddc305 | 314 | void dtlog_block_read(xEeprom_ptr *read_inf){ |
kenjiArai | 15:065fbeddc305 | 315 | if (read_inf->wr_pointer == BUF_HEAD){ // Check pointer |
kenjiArai | 15:065fbeddc305 | 316 | PRINTF(msg_emty); |
kenjiArai | 15:065fbeddc305 | 317 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 318 | return; |
kenjiArai | 15:065fbeddc305 | 319 | } |
kenjiArai | 15:065fbeddc305 | 320 | if (read_inf->ptr >= read_inf->wr_pointer){ |
kenjiArai | 15:065fbeddc305 | 321 | PRINTF("Reach to end!"); |
kenjiArai | 15:065fbeddc305 | 322 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 323 | return; |
kenjiArai | 15:065fbeddc305 | 324 | } |
kenjiArai | 15:065fbeddc305 | 325 | if (read_inf->wr_pointer > (read_inf->ptr + read_inf->size)){ |
kenjiArai | 15:065fbeddc305 | 326 | read_inf->max = read_inf->ptr + read_inf->size; |
kenjiArai | 15:065fbeddc305 | 327 | } else { |
kenjiArai | 15:065fbeddc305 | 328 | read_inf->max = read_inf->wr_pointer; |
kenjiArai | 15:065fbeddc305 | 329 | } |
kenjiArai | 15:065fbeddc305 | 330 | dtlog_blk_read(read_inf); |
kenjiArai | 15:065fbeddc305 | 331 | } |
kenjiArai | 15:065fbeddc305 | 332 | |
kenjiArai | 15:065fbeddc305 | 333 | // EEPROM buffer occupation |
kenjiArai | 15:065fbeddc305 | 334 | uint16_t dtlog_buf_occupation(void){ |
kenjiArai | 15:065fbeddc305 | 335 | return (uint16_t)(((uint32_t)READ_POINTER() * 1000 )/ BLK_NO); |
kenjiArai | 15:065fbeddc305 | 336 | } |
kenjiArai | 15:065fbeddc305 | 337 | |
kenjiArai | 15:065fbeddc305 | 338 | // Read block number |
kenjiArai | 15:065fbeddc305 | 339 | void dtlog_num_of_block(xEeprom_ptr *read_inf){ |
kenjiArai | 15:065fbeddc305 | 340 | uint16_t dt; |
kenjiArai | 15:065fbeddc305 | 341 | |
kenjiArai | 15:065fbeddc305 | 342 | if (read_inf->wr_pointer == BUF_HEAD){ |
kenjiArai | 15:065fbeddc305 | 343 | PRINTF(msg_emty); |
kenjiArai | 15:065fbeddc305 | 344 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 345 | return; |
kenjiArai | 15:065fbeddc305 | 346 | } |
kenjiArai | 15:065fbeddc305 | 347 | dt = read_inf->wr_pointer - 1; |
kenjiArai | 15:065fbeddc305 | 348 | PRINTF("Number of data = %d", dt); |
kenjiArai | 15:065fbeddc305 | 349 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 350 | dt = dtlog_buf_occupation(); |
kenjiArai | 15:065fbeddc305 | 351 | PRINTF("EEPROM Occupation = %d.%01d%%", dt/10, dt%10); |
kenjiArai | 15:065fbeddc305 | 352 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 353 | } |
kenjiArai | 15:065fbeddc305 | 354 | |
kenjiArai | 15:065fbeddc305 | 355 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 356 | // Monitor |
kenjiArai | 15:065fbeddc305 | 357 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 358 | // Help Massage |
kenjiArai | 15:065fbeddc305 | 359 | void msg_hlp (void){ |
kenjiArai | 15:065fbeddc305 | 360 | PRINTF(mon_msg); put_rn(); |
kenjiArai | 15:065fbeddc305 | 361 | PRINTF("d - Data logger"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 362 | PRINTF("t - Check and set RTC"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 363 | PRINTF("x - Goto HW monitor"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 364 | PRINTF("q - Return to main"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 365 | } |
kenjiArai | 15:065fbeddc305 | 366 | |
kenjiArai | 15:065fbeddc305 | 367 | // Get key input data |
kenjiArai | 15:065fbeddc305 | 368 | void get_line (char *buff, int len){ |
kenjiArai | 15:065fbeddc305 | 369 | char c; |
kenjiArai | 15:065fbeddc305 | 370 | int idx = 0; |
kenjiArai | 15:065fbeddc305 | 371 | |
kenjiArai | 15:065fbeddc305 | 372 | for (;;) { |
kenjiArai | 15:065fbeddc305 | 373 | c = GETC(); |
kenjiArai | 15:065fbeddc305 | 374 | // Added by Kenji Arai / JH1PJL May 9th, 2010 |
kenjiArai | 15:065fbeddc305 | 375 | if (c == '\r') { |
kenjiArai | 15:065fbeddc305 | 376 | buff[idx++] = c; |
kenjiArai | 15:065fbeddc305 | 377 | break; |
kenjiArai | 15:065fbeddc305 | 378 | } |
kenjiArai | 15:065fbeddc305 | 379 | if ((c == '\b') && idx) { |
kenjiArai | 15:065fbeddc305 | 380 | idx--; |
kenjiArai | 15:065fbeddc305 | 381 | PUTC(c); |
kenjiArai | 15:065fbeddc305 | 382 | PUTC(' '); |
kenjiArai | 15:065fbeddc305 | 383 | PUTC(c); |
kenjiArai | 15:065fbeddc305 | 384 | } |
kenjiArai | 15:065fbeddc305 | 385 | if (((uint8_t)c >= ' ') && (idx < len - 1)) { |
kenjiArai | 15:065fbeddc305 | 386 | buff[idx++] = c; |
kenjiArai | 15:065fbeddc305 | 387 | PUTC(c); |
kenjiArai | 15:065fbeddc305 | 388 | } |
kenjiArai | 15:065fbeddc305 | 389 | } |
kenjiArai | 15:065fbeddc305 | 390 | buff[idx] = 0; |
kenjiArai | 15:065fbeddc305 | 391 | PUTC('\n'); |
kenjiArai | 15:065fbeddc305 | 392 | } |
kenjiArai | 15:065fbeddc305 | 393 | |
kenjiArai | 15:065fbeddc305 | 394 | |
kenjiArai | 15:065fbeddc305 | 395 | // RTC related subroutines |
kenjiArai | 15:065fbeddc305 | 396 | void chk_and_set_time(char *ptr){ |
kenjiArai | 15:065fbeddc305 | 397 | unsigned long p1; |
kenjiArai | 15:065fbeddc305 | 398 | struct tm t; |
kenjiArai | 15:065fbeddc305 | 399 | |
kenjiArai | 15:065fbeddc305 | 400 | if (xatoi(&ptr, &p1)){ |
kenjiArai | 15:065fbeddc305 | 401 | t.tm_year = (uint8_t)p1 + 100; |
kenjiArai | 15:065fbeddc305 | 402 | PRINTF("Year:%d ",p1); |
kenjiArai | 15:065fbeddc305 | 403 | xatoi( &ptr, &p1 ); |
kenjiArai | 15:065fbeddc305 | 404 | t.tm_mon = (uint8_t)p1 - 1; |
kenjiArai | 15:065fbeddc305 | 405 | PRINTF("Month:%d ",p1); |
kenjiArai | 15:065fbeddc305 | 406 | xatoi( &ptr, &p1 ); |
kenjiArai | 15:065fbeddc305 | 407 | t.tm_mday = (uint8_t)p1; |
kenjiArai | 15:065fbeddc305 | 408 | PRINTF("Day:%d ",p1); |
kenjiArai | 15:065fbeddc305 | 409 | xatoi( &ptr, &p1 ); |
kenjiArai | 15:065fbeddc305 | 410 | t.tm_hour = (uint8_t)p1; |
kenjiArai | 15:065fbeddc305 | 411 | PRINTF("Hour:%d ",p1); |
kenjiArai | 15:065fbeddc305 | 412 | xatoi( &ptr, &p1 ); |
kenjiArai | 15:065fbeddc305 | 413 | t.tm_min = (uint8_t)p1; |
kenjiArai | 15:065fbeddc305 | 414 | PRINTF("Min:%d ",p1); |
kenjiArai | 15:065fbeddc305 | 415 | t.tm_sec = (uint8_t)p1; |
kenjiArai | 15:065fbeddc305 | 416 | PRINTF("Sec: %d \r\n",p1); |
kenjiArai | 15:065fbeddc305 | 417 | xm41t62.write_rtc_std(&t); |
kenjiArai | 15:065fbeddc305 | 418 | } |
kenjiArai | 15:065fbeddc305 | 419 | xm41t62.read_rtc_std(&t); |
kenjiArai | 15:065fbeddc305 | 420 | // Show Time with several example |
kenjiArai | 15:065fbeddc305 | 421 | // ex.1 |
kenjiArai | 15:065fbeddc305 | 422 | PRINTF("Date: %04d/%02d/%02d, %02d:%02d:%02d\r\n", |
kenjiArai | 15:065fbeddc305 | 423 | t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); |
kenjiArai | 15:065fbeddc305 | 424 | #if 0 |
kenjiArai | 15:065fbeddc305 | 425 | time_t seconds; |
kenjiArai | 15:065fbeddc305 | 426 | char buf[40]; |
kenjiArai | 15:065fbeddc305 | 427 | |
kenjiArai | 15:065fbeddc305 | 428 | seconds = mktime(&t); |
kenjiArai | 15:065fbeddc305 | 429 | // ex.2 |
kenjiArai | 15:065fbeddc305 | 430 | strftime(buf, 40, "%x %X", localtime(&seconds)); |
kenjiArai | 15:065fbeddc305 | 431 | PRINTF("Date: %s\r\n", buf); |
kenjiArai | 15:065fbeddc305 | 432 | // ex.3 |
kenjiArai | 15:065fbeddc305 | 433 | strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds)); |
kenjiArai | 15:065fbeddc305 | 434 | PRINTF("Date: %s\r\n", buf); |
kenjiArai | 15:065fbeddc305 | 435 | // ex.4 |
kenjiArai | 15:065fbeddc305 | 436 | strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds)); |
kenjiArai | 15:065fbeddc305 | 437 | PRINTF("Date: %s\r\n", buf); |
kenjiArai | 15:065fbeddc305 | 438 | #endif |
kenjiArai | 15:065fbeddc305 | 439 | } |
kenjiArai | 15:065fbeddc305 | 440 | |
kenjiArai | 15:065fbeddc305 | 441 | // Data Logger / Check status and Output data |
kenjiArai | 15:065fbeddc305 | 442 | static void data_logger(char *ptr){ |
kenjiArai | 15:065fbeddc305 | 443 | char c; |
kenjiArai | 15:065fbeddc305 | 444 | unsigned long dt; |
kenjiArai | 15:065fbeddc305 | 445 | char *const Msg = "Data Logger Mode, ?[Help]"; |
kenjiArai | 15:065fbeddc305 | 446 | |
kenjiArai | 15:065fbeddc305 | 447 | PRINTF(Msg); |
kenjiArai | 15:065fbeddc305 | 448 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 449 | /* Get EEPROM resource */ |
kenjiArai | 15:065fbeddc305 | 450 | dtlog_rd_buf_inf(&log_inf); |
kenjiArai | 15:065fbeddc305 | 451 | while (1){ |
kenjiArai | 15:065fbeddc305 | 452 | PRINTF("DL>"); |
kenjiArai | 15:065fbeddc305 | 453 | ptr = linebuf; |
kenjiArai | 15:065fbeddc305 | 454 | get_line(ptr, buf_size); |
kenjiArai | 15:065fbeddc305 | 455 | switch (*ptr++) { |
kenjiArai | 15:065fbeddc305 | 456 | case 'a' : |
kenjiArai | 15:065fbeddc305 | 457 | put_r(); |
kenjiArai | 15:065fbeddc305 | 458 | log_inf.ptr = BUF_HEAD; |
kenjiArai | 15:065fbeddc305 | 459 | log_inf.size = log_inf.wr_pointer; |
kenjiArai | 15:065fbeddc305 | 460 | dtlog_block_read(&log_inf); |
kenjiArai | 15:065fbeddc305 | 461 | log_inf.ptr = BUF_HEAD; |
kenjiArai | 15:065fbeddc305 | 462 | log_inf.size = BLK_SIZE; |
kenjiArai | 15:065fbeddc305 | 463 | break; |
kenjiArai | 15:065fbeddc305 | 464 | case 'c' : // Clear data |
kenjiArai | 15:065fbeddc305 | 465 | put_r(); |
kenjiArai | 15:065fbeddc305 | 466 | PRINTF("Delete all data?"); |
kenjiArai | 15:065fbeddc305 | 467 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 468 | PRINTF("Enter y/n (n-cancel)"); |
kenjiArai | 15:065fbeddc305 | 469 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 470 | c = GETC(); |
kenjiArai | 15:065fbeddc305 | 471 | PUTC(c); |
kenjiArai | 15:065fbeddc305 | 472 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 473 | if (c == 'y'){ |
kenjiArai | 15:065fbeddc305 | 474 | PRINTF("Cleared all logging data"); |
kenjiArai | 15:065fbeddc305 | 475 | dtlog_clear_all_buff(&log_inf); |
kenjiArai | 15:065fbeddc305 | 476 | } else { |
kenjiArai | 15:065fbeddc305 | 477 | PRINTF("Canceled"); |
kenjiArai | 15:065fbeddc305 | 478 | } |
kenjiArai | 15:065fbeddc305 | 479 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 480 | break; |
kenjiArai | 15:065fbeddc305 | 481 | case 'd' : // d <pointer> [<count>] - Dump buffer |
kenjiArai | 15:065fbeddc305 | 482 | put_r(); |
kenjiArai | 15:065fbeddc305 | 483 | log_inf.size = BLK_SIZE; |
kenjiArai | 15:065fbeddc305 | 484 | if (xatoi(&ptr, &dt)){ log_inf.ptr = (uint16_t)dt; |
kenjiArai | 15:065fbeddc305 | 485 | } else { log_inf.ptr = BUF_HEAD; } |
kenjiArai | 15:065fbeddc305 | 486 | if (xatoi(&ptr, &dt)){ log_inf.size = (uint8_t)dt; |
kenjiArai | 15:065fbeddc305 | 487 | } else { log_inf.size = BLK_SIZE; } |
kenjiArai | 15:065fbeddc305 | 488 | dtlog_block_read(&log_inf); |
kenjiArai | 15:065fbeddc305 | 489 | break; |
kenjiArai | 15:065fbeddc305 | 490 | case 0x0d : // CR |
kenjiArai | 15:065fbeddc305 | 491 | put_r(); |
kenjiArai | 15:065fbeddc305 | 492 | log_inf.size = BLK_SIZE; |
kenjiArai | 15:065fbeddc305 | 493 | dtlog_block_read(&log_inf); |
kenjiArai | 15:065fbeddc305 | 494 | break; |
kenjiArai | 15:065fbeddc305 | 495 | case 'b' : // Back |
kenjiArai | 15:065fbeddc305 | 496 | put_r(); |
kenjiArai | 15:065fbeddc305 | 497 | log_inf.size = BLK_SIZE; |
kenjiArai | 15:065fbeddc305 | 498 | if (log_inf.ptr > log_inf.size){ |
kenjiArai | 15:065fbeddc305 | 499 | log_inf.ptr -= log_inf.size; |
kenjiArai | 15:065fbeddc305 | 500 | if (log_inf.ptr == 0){ |
kenjiArai | 15:065fbeddc305 | 501 | log_inf.ptr = 1; |
kenjiArai | 15:065fbeddc305 | 502 | --log_inf.size; |
kenjiArai | 15:065fbeddc305 | 503 | } |
kenjiArai | 15:065fbeddc305 | 504 | } else { |
kenjiArai | 15:065fbeddc305 | 505 | log_inf.size = log_inf.ptr - 1; |
kenjiArai | 15:065fbeddc305 | 506 | log_inf.ptr = 1; |
kenjiArai | 15:065fbeddc305 | 507 | } |
kenjiArai | 15:065fbeddc305 | 508 | dtlog_block_read(&log_inf); |
kenjiArai | 15:065fbeddc305 | 509 | break; |
kenjiArai | 15:065fbeddc305 | 510 | case 'n' : |
kenjiArai | 15:065fbeddc305 | 511 | case 's' : // Status |
kenjiArai | 15:065fbeddc305 | 512 | put_r(); |
kenjiArai | 15:065fbeddc305 | 513 | dtlog_num_of_block(&log_inf); |
kenjiArai | 15:065fbeddc305 | 514 | break; |
kenjiArai | 15:065fbeddc305 | 515 | case 'q' : // exit |
kenjiArai | 15:065fbeddc305 | 516 | linebuf[0] = 0; |
kenjiArai | 15:065fbeddc305 | 517 | return; |
kenjiArai | 15:065fbeddc305 | 518 | case '?' : |
kenjiArai | 15:065fbeddc305 | 519 | put_r(); |
kenjiArai | 15:065fbeddc305 | 520 | PRINTF("d - <pointer> [<count>] Dump one block data"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 521 | PRINTF("a - Dump all log data"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 522 | PRINTF("c - Clear log data"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 523 | PRINTF("s - Logger status"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 524 | PRINTF("q - Exit DL mode"); put_rn(); |
kenjiArai | 15:065fbeddc305 | 525 | break; |
kenjiArai | 15:065fbeddc305 | 526 | default: |
kenjiArai | 15:065fbeddc305 | 527 | PUTC('?'); |
kenjiArai | 15:065fbeddc305 | 528 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 529 | break; |
kenjiArai | 15:065fbeddc305 | 530 | } |
kenjiArai | 15:065fbeddc305 | 531 | } |
kenjiArai | 15:065fbeddc305 | 532 | } |
kenjiArai | 15:065fbeddc305 | 533 | |
kenjiArai | 15:065fbeddc305 | 534 | // ---------- Program starts here! --------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 535 | int mon(void) { |
kenjiArai | 15:065fbeddc305 | 536 | char *ptr; |
kenjiArai | 15:065fbeddc305 | 537 | |
kenjiArai | 15:065fbeddc305 | 538 | BAUD(9600); |
kenjiArai | 15:065fbeddc305 | 539 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 540 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 541 | PRINTF("%s [Help:'?' key]", mon_msg); |
kenjiArai | 15:065fbeddc305 | 542 | put_rn(); |
kenjiArai | 15:065fbeddc305 | 543 | for (;;) { |
kenjiArai | 15:065fbeddc305 | 544 | put_r(); |
kenjiArai | 15:065fbeddc305 | 545 | PUTC('>'); |
kenjiArai | 15:065fbeddc305 | 546 | ptr = linebuf; |
kenjiArai | 15:065fbeddc305 | 547 | get_line(ptr, sizeof(linebuf)); |
kenjiArai | 15:065fbeddc305 | 548 | switch (*ptr++) { |
kenjiArai | 15:065fbeddc305 | 549 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 550 | // check and set RTC |
kenjiArai | 15:065fbeddc305 | 551 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 552 | case 't' : |
kenjiArai | 15:065fbeddc305 | 553 | put_r(); |
kenjiArai | 15:065fbeddc305 | 554 | chk_and_set_time(ptr); |
kenjiArai | 15:065fbeddc305 | 555 | break; |
kenjiArai | 15:065fbeddc305 | 556 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 557 | // check EEPROM status |
kenjiArai | 15:065fbeddc305 | 558 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 559 | case 'd' : |
kenjiArai | 15:065fbeddc305 | 560 | put_r(); |
kenjiArai | 15:065fbeddc305 | 561 | data_logger(ptr); |
kenjiArai | 15:065fbeddc305 | 562 | break; |
kenjiArai | 15:065fbeddc305 | 563 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 564 | // help |
kenjiArai | 15:065fbeddc305 | 565 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 566 | case '?' : |
kenjiArai | 15:065fbeddc305 | 567 | put_r(); |
kenjiArai | 15:065fbeddc305 | 568 | msg_hlp(); |
kenjiArai | 15:065fbeddc305 | 569 | break; |
kenjiArai | 15:065fbeddc305 | 570 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 571 | // Go to special command |
kenjiArai | 15:065fbeddc305 | 572 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 573 | case 'x' : // |
kenjiArai | 15:065fbeddc305 | 574 | mon_hw(); |
kenjiArai | 15:065fbeddc305 | 575 | PRINTF("->Came back monitor\r\n"); |
kenjiArai | 15:065fbeddc305 | 576 | break; |
kenjiArai | 15:065fbeddc305 | 577 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 578 | // Go back to main() |
kenjiArai | 15:065fbeddc305 | 579 | //--------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 580 | case 'q' : // Quit |
kenjiArai | 15:065fbeddc305 | 581 | PRINTF("\rReturn to main\r\n"); |
kenjiArai | 15:065fbeddc305 | 582 | PRINTF("cannot control anymore from here\r\n"); |
kenjiArai | 15:065fbeddc305 | 583 | return 0; |
kenjiArai | 15:065fbeddc305 | 584 | } |
kenjiArai | 15:065fbeddc305 | 585 | } |
kenjiArai | 15:065fbeddc305 | 586 | } |