time_core.c (1044B)
1 #include <time.h> 2 #include <string.h> 3 #include <stdint.h> 4 5 /* table of memory 6 * | function | size | loc | 7 * +----------+------+-----+ 8 * | year | 2 | 0 | 9 * | month | 1 | 2 | 10 * | day | 1 | 3 | 11 * | hour | 1 | 4 | 12 * | min | 1 | 5 | 13 * | sec | 1 | 6 | 14 */ 15 16 enum table { 17 YEAR = 0, 18 MONTH = 2, 19 DAY, 20 HOUR, 21 MIN, 22 SEC, 23 }; 24 25 int 26 getsize() { 27 return 7; 28 } 29 30 void 31 onread(char *addr, char *loc) { 32 time_t t; 33 struct tm *tval; 34 if (loc - addr < 7 && loc - addr > 0) { 35 t = time(NULL); 36 tval = localtime(&t); 37 } else return; 38 39 uint8_t val8; 40 uint16_t val16; 41 42 switch (loc - addr) { 43 case YEAR: val16 = tval->tm_year; break; 44 case MONTH: val8 = tval->tm_mon; break; 45 case DAY: val8 = tval->tm_mday; break; 46 case HOUR: val8 = tval->tm_hour; break; 47 case MIN: val8 = tval->tm_min; break; 48 case SEC: val8 = tval->tm_sec; break; 49 } 50 51 if (loc - addr == YEAR) 52 memcpy(loc, (uint16_t *)&val16, sizeof(uint16_t)); 53 else 54 memcpy(loc, (uint8_t *)&val8, sizeof(uint8_t)); 55 } 56 57 void 58 onwrite() { 59 return; 60 }