afLib 1.3 which is supporting both SPI and UART
Dependencies: vt100 mbed afLib_1_3
edge_utils/edge_time.cpp@0:87662653a3c6, 2018-04-23 (annotated)
- Committer:
- Rhyme
- Date:
- Mon Apr 23 06:15:26 2018 +0000
- Revision:
- 0:87662653a3c6
First UART working version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Rhyme | 0:87662653a3c6 | 1 | #include "mbed.h" |
| Rhyme | 0:87662653a3c6 | 2 | #include "edge_mgr.h" |
| Rhyme | 0:87662653a3c6 | 3 | #include "edge_time.h" |
| Rhyme | 0:87662653a3c6 | 4 | |
| Rhyme | 0:87662653a3c6 | 5 | static const uint8_t daysInMonth[12] = { |
| Rhyme | 0:87662653a3c6 | 6 | 31, 28, 31, 30, |
| Rhyme | 0:87662653a3c6 | 7 | 31, 30, 31, 31, |
| Rhyme | 0:87662653a3c6 | 8 | 30, 31, 30, 31 |
| Rhyme | 0:87662653a3c6 | 9 | } ; |
| Rhyme | 0:87662653a3c6 | 10 | |
| Rhyme | 0:87662653a3c6 | 11 | const char *nameOfDay[7] = { |
| Rhyme | 0:87662653a3c6 | 12 | "Sunday", "Monday", "Tuesday", "Wednesday", |
| Rhyme | 0:87662653a3c6 | 13 | "Thursday", "Friday", "Saturday" |
| Rhyme | 0:87662653a3c6 | 14 | } ; |
| Rhyme | 0:87662653a3c6 | 15 | |
| Rhyme | 0:87662653a3c6 | 16 | uint32_t edge_time = 0 ; |
| Rhyme | 0:87662653a3c6 | 17 | uint32_t utc_offset = 9 * 60 * 60 ; |
| Rhyme | 0:87662653a3c6 | 18 | tm current_time ; |
| Rhyme | 0:87662653a3c6 | 19 | Ticker *tokei = 0 ; |
| Rhyme | 0:87662653a3c6 | 20 | |
| Rhyme | 0:87662653a3c6 | 21 | void inc_sec(void) |
| Rhyme | 0:87662653a3c6 | 22 | { |
| Rhyme | 0:87662653a3c6 | 23 | __disable_irq() ; // Disable Interrupts |
| Rhyme | 0:87662653a3c6 | 24 | edge_time++ ; |
| Rhyme | 0:87662653a3c6 | 25 | __enable_irq() ; // Enable Interrupts |
| Rhyme | 0:87662653a3c6 | 26 | } |
| Rhyme | 0:87662653a3c6 | 27 | |
| Rhyme | 0:87662653a3c6 | 28 | void init_timer(void) |
| Rhyme | 0:87662653a3c6 | 29 | { |
| Rhyme | 0:87662653a3c6 | 30 | tokei = new Ticker() ; |
| Rhyme | 0:87662653a3c6 | 31 | tokei->attach(inc_sec, 1.0) ; |
| Rhyme | 0:87662653a3c6 | 32 | } |
| Rhyme | 0:87662653a3c6 | 33 | |
| Rhyme | 0:87662653a3c6 | 34 | void set_time(const uint16_t valueLen, const uint8_t *value) |
| Rhyme | 0:87662653a3c6 | 35 | { |
| Rhyme | 0:87662653a3c6 | 36 | uint32_t tmp_timestamp = 0 ; |
| Rhyme | 0:87662653a3c6 | 37 | for (int i = 0 ; i < valueLen ; i++ ) { |
| Rhyme | 0:87662653a3c6 | 38 | tmp_timestamp |= (value[i] & 0xFF) << (i * 8) ; |
| Rhyme | 0:87662653a3c6 | 39 | } |
| Rhyme | 0:87662653a3c6 | 40 | edge_time = tmp_timestamp ; |
| Rhyme | 0:87662653a3c6 | 41 | ts2tm(edge_time, ¤t_time) ; |
| Rhyme | 0:87662653a3c6 | 42 | // ts2time(edge_time, ¤t_time) ; |
| Rhyme | 0:87662653a3c6 | 43 | } |
| Rhyme | 0:87662653a3c6 | 44 | |
| Rhyme | 0:87662653a3c6 | 45 | void ts2time(uint32_t timestamp, struct tm *tm) |
| Rhyme | 0:87662653a3c6 | 46 | { |
| Rhyme | 0:87662653a3c6 | 47 | uint32_t seconds, minutes, hours, days, month, year ; |
| Rhyme | 0:87662653a3c6 | 48 | uint32_t dayOfWeek ; |
| Rhyme | 0:87662653a3c6 | 49 | |
| Rhyme | 0:87662653a3c6 | 50 | // timestamp += (3600 * 9) ; /* +9 hours for JST */ |
| Rhyme | 0:87662653a3c6 | 51 | timestamp += utc_offset ; |
| Rhyme | 0:87662653a3c6 | 52 | |
| Rhyme | 0:87662653a3c6 | 53 | seconds = timestamp % 60 ; |
| Rhyme | 0:87662653a3c6 | 54 | minutes = timestamp / 60 ; |
| Rhyme | 0:87662653a3c6 | 55 | hours = minutes / 60 ; /* +9 for JST */ |
| Rhyme | 0:87662653a3c6 | 56 | minutes -= hours * 60 ; |
| Rhyme | 0:87662653a3c6 | 57 | days = hours / 24 ; |
| Rhyme | 0:87662653a3c6 | 58 | hours -= days * 24 ; |
| Rhyme | 0:87662653a3c6 | 59 | |
| Rhyme | 0:87662653a3c6 | 60 | tm->tm_sec = seconds ; |
| Rhyme | 0:87662653a3c6 | 61 | tm->tm_min = minutes ; |
| Rhyme | 0:87662653a3c6 | 62 | tm->tm_hour = hours ; |
| Rhyme | 0:87662653a3c6 | 63 | tm->tm_mday = days + 1 ; |
| Rhyme | 0:87662653a3c6 | 64 | // tm->tm_mon = month ; |
| Rhyme | 0:87662653a3c6 | 65 | // tm->tm_year = year ; |
| Rhyme | 0:87662653a3c6 | 66 | // tm->tm_wday = dayOfWeek ; |
| Rhyme | 0:87662653a3c6 | 67 | } |
| Rhyme | 0:87662653a3c6 | 68 | |
| Rhyme | 0:87662653a3c6 | 69 | void ts2tm(uint32_t timestamp, struct tm *tm) |
| Rhyme | 0:87662653a3c6 | 70 | { |
| Rhyme | 0:87662653a3c6 | 71 | uint32_t seconds, minutes, hours, days, month, year ; |
| Rhyme | 0:87662653a3c6 | 72 | uint32_t dayOfWeek ; |
| Rhyme | 0:87662653a3c6 | 73 | |
| Rhyme | 0:87662653a3c6 | 74 | // timestamp += (3600 * 9) ; /* +9 hours for JST */ |
| Rhyme | 0:87662653a3c6 | 75 | timestamp += utc_offset ; |
| Rhyme | 0:87662653a3c6 | 76 | |
| Rhyme | 0:87662653a3c6 | 77 | seconds = timestamp % 60 ; |
| Rhyme | 0:87662653a3c6 | 78 | minutes = timestamp / 60 ; |
| Rhyme | 0:87662653a3c6 | 79 | hours = minutes / 60 ; /* +9 for JST */ |
| Rhyme | 0:87662653a3c6 | 80 | minutes -= hours * 60 ; |
| Rhyme | 0:87662653a3c6 | 81 | days = hours / 24 ; |
| Rhyme | 0:87662653a3c6 | 82 | hours -= days * 24 ; |
| Rhyme | 0:87662653a3c6 | 83 | |
| Rhyme | 0:87662653a3c6 | 84 | /* Unix timestamp start 1-Jan-1970 Thursday */ |
| Rhyme | 0:87662653a3c6 | 85 | year = 1970 ; |
| Rhyme | 0:87662653a3c6 | 86 | dayOfWeek = 4 ; /* Thursday */ |
| Rhyme | 0:87662653a3c6 | 87 | |
| Rhyme | 0:87662653a3c6 | 88 | while(1) { |
| Rhyme | 0:87662653a3c6 | 89 | bool isLeapYear = |
| Rhyme | 0:87662653a3c6 | 90 | (((year % 4) == 0) |
| Rhyme | 0:87662653a3c6 | 91 | &&(((year % 100) != 0) |
| Rhyme | 0:87662653a3c6 | 92 | || ((year % 400) == 0))) ; |
| Rhyme | 0:87662653a3c6 | 93 | uint16_t daysInYear = isLeapYear ? 366 : 365 ; |
| Rhyme | 0:87662653a3c6 | 94 | if (days >= daysInYear) { |
| Rhyme | 0:87662653a3c6 | 95 | dayOfWeek += isLeapYear ? 2 : 1 ; |
| Rhyme | 0:87662653a3c6 | 96 | days -= daysInYear ; |
| Rhyme | 0:87662653a3c6 | 97 | if (dayOfWeek >= 7) { |
| Rhyme | 0:87662653a3c6 | 98 | dayOfWeek -= 7 ; |
| Rhyme | 0:87662653a3c6 | 99 | } |
| Rhyme | 0:87662653a3c6 | 100 | year++ ; |
| Rhyme | 0:87662653a3c6 | 101 | } else { |
| Rhyme | 0:87662653a3c6 | 102 | tm->tm_yday = days ; |
| Rhyme | 0:87662653a3c6 | 103 | dayOfWeek += days ; |
| Rhyme | 0:87662653a3c6 | 104 | dayOfWeek %= 7 ; |
| Rhyme | 0:87662653a3c6 | 105 | |
| Rhyme | 0:87662653a3c6 | 106 | /* calc the month and the day */ |
| Rhyme | 0:87662653a3c6 | 107 | for (month = 0 ; month < 12 ; month++) { |
| Rhyme | 0:87662653a3c6 | 108 | uint8_t dim = daysInMonth[month] ; |
| Rhyme | 0:87662653a3c6 | 109 | |
| Rhyme | 0:87662653a3c6 | 110 | /* add a day to feburary if this is a leap year */ |
| Rhyme | 0:87662653a3c6 | 111 | if ((month == 1) && (isLeapYear)) { |
| Rhyme | 0:87662653a3c6 | 112 | dim++ ; |
| Rhyme | 0:87662653a3c6 | 113 | } |
| Rhyme | 0:87662653a3c6 | 114 | |
| Rhyme | 0:87662653a3c6 | 115 | if (days >= dim) { |
| Rhyme | 0:87662653a3c6 | 116 | days -= dim ; |
| Rhyme | 0:87662653a3c6 | 117 | } else { |
| Rhyme | 0:87662653a3c6 | 118 | break ; |
| Rhyme | 0:87662653a3c6 | 119 | } |
| Rhyme | 0:87662653a3c6 | 120 | } |
| Rhyme | 0:87662653a3c6 | 121 | break ; |
| Rhyme | 0:87662653a3c6 | 122 | } |
| Rhyme | 0:87662653a3c6 | 123 | } |
| Rhyme | 0:87662653a3c6 | 124 | tm->tm_sec = seconds ; |
| Rhyme | 0:87662653a3c6 | 125 | tm->tm_min = minutes ; |
| Rhyme | 0:87662653a3c6 | 126 | tm->tm_hour = hours ; |
| Rhyme | 0:87662653a3c6 | 127 | tm->tm_mday = days + 1 ; |
| Rhyme | 0:87662653a3c6 | 128 | tm->tm_mon = month ; |
| Rhyme | 0:87662653a3c6 | 129 | tm->tm_year = year ; |
| Rhyme | 0:87662653a3c6 | 130 | tm->tm_wday = dayOfWeek ; |
| Rhyme | 0:87662653a3c6 | 131 | } |
| Rhyme | 0:87662653a3c6 | 132 | |
| Rhyme | 0:87662653a3c6 | 133 | void print_time(struct tm *tm) |
| Rhyme | 0:87662653a3c6 | 134 | { |
| Rhyme | 0:87662653a3c6 | 135 | tty->printf("%02d:%02d:%02d", |
| Rhyme | 0:87662653a3c6 | 136 | tm->tm_hour, |
| Rhyme | 0:87662653a3c6 | 137 | tm->tm_min, |
| Rhyme | 0:87662653a3c6 | 138 | tm->tm_sec ) ; |
| Rhyme | 0:87662653a3c6 | 139 | } |
| Rhyme | 0:87662653a3c6 | 140 | |
| Rhyme | 0:87662653a3c6 | 141 | void print_time(uint32_t thetime) |
| Rhyme | 0:87662653a3c6 | 142 | { |
| Rhyme | 0:87662653a3c6 | 143 | struct tm timestruct ; |
| Rhyme | 0:87662653a3c6 | 144 | ts2time(thetime, ×truct) ; |
| Rhyme | 0:87662653a3c6 | 145 | print_time(×truct) ; |
| Rhyme | 0:87662653a3c6 | 146 | } |
| Rhyme | 0:87662653a3c6 | 147 | |
| Rhyme | 0:87662653a3c6 | 148 | void print_time(void) |
| Rhyme | 0:87662653a3c6 | 149 | { |
| Rhyme | 0:87662653a3c6 | 150 | struct tm timestruct ; |
| Rhyme | 0:87662653a3c6 | 151 | ts2time(edge_time, ×truct) ; |
| Rhyme | 0:87662653a3c6 | 152 | print_time(×truct) ; |
| Rhyme | 0:87662653a3c6 | 153 | } |
| Rhyme | 0:87662653a3c6 | 154 | |
| Rhyme | 0:87662653a3c6 | 155 | void print_date(struct tm *tm) |
| Rhyme | 0:87662653a3c6 | 156 | { |
| Rhyme | 0:87662653a3c6 | 157 | tty->printf("%d/%d/%d %02d:%02d:%02d", |
| Rhyme | 0:87662653a3c6 | 158 | tm->tm_year, |
| Rhyme | 0:87662653a3c6 | 159 | tm->tm_mon + 1, |
| Rhyme | 0:87662653a3c6 | 160 | tm->tm_mday, |
| Rhyme | 0:87662653a3c6 | 161 | tm->tm_hour, |
| Rhyme | 0:87662653a3c6 | 162 | tm->tm_min, |
| Rhyme | 0:87662653a3c6 | 163 | tm->tm_sec |
| Rhyme | 0:87662653a3c6 | 164 | ) ; |
| Rhyme | 0:87662653a3c6 | 165 | } |
| Rhyme | 0:87662653a3c6 | 166 | |
| Rhyme | 0:87662653a3c6 | 167 | void print_date_wd(struct tm *tm) |
| Rhyme | 0:87662653a3c6 | 168 | { |
| Rhyme | 0:87662653a3c6 | 169 | tty->printf("%d/%d/%d %02d:%02d:%02d (%s)", |
| Rhyme | 0:87662653a3c6 | 170 | tm->tm_year, |
| Rhyme | 0:87662653a3c6 | 171 | tm->tm_mon + 1, |
| Rhyme | 0:87662653a3c6 | 172 | tm->tm_mday, |
| Rhyme | 0:87662653a3c6 | 173 | tm->tm_hour, |
| Rhyme | 0:87662653a3c6 | 174 | tm->tm_min, |
| Rhyme | 0:87662653a3c6 | 175 | tm->tm_sec, |
| Rhyme | 0:87662653a3c6 | 176 | nameOfDay[tm->tm_wday] |
| Rhyme | 0:87662653a3c6 | 177 | ) ; |
| Rhyme | 0:87662653a3c6 | 178 | } |
| Rhyme | 0:87662653a3c6 | 179 | |
| Rhyme | 0:87662653a3c6 | 180 | void time2str(struct tm *tm, char *timestr) |
| Rhyme | 0:87662653a3c6 | 181 | { |
| Rhyme | 0:87662653a3c6 | 182 | sprintf(timestr, "%02d:%02d:%02d", |
| Rhyme | 0:87662653a3c6 | 183 | tm->tm_hour, |
| Rhyme | 0:87662653a3c6 | 184 | tm->tm_min, |
| Rhyme | 0:87662653a3c6 | 185 | tm->tm_sec ) ; |
| Rhyme | 0:87662653a3c6 | 186 | } |
| Rhyme | 0:87662653a3c6 | 187 | |
| Rhyme | 0:87662653a3c6 | 188 | void time2str(char *timestr) |
| Rhyme | 0:87662653a3c6 | 189 | { |
| Rhyme | 0:87662653a3c6 | 190 | struct tm timestruct ; |
| Rhyme | 0:87662653a3c6 | 191 | ts2time(edge_time, ×truct) ; |
| Rhyme | 0:87662653a3c6 | 192 | time2str(×truct, timestr) ; |
| Rhyme | 0:87662653a3c6 | 193 | } |
| Rhyme | 0:87662653a3c6 | 194 | |
| Rhyme | 0:87662653a3c6 | 195 | int32_t time2seq(uint32_t timestamp) |
| Rhyme | 0:87662653a3c6 | 196 | { |
| Rhyme | 0:87662653a3c6 | 197 | struct tm timestruct ; |
| Rhyme | 0:87662653a3c6 | 198 | int32_t result ; |
| Rhyme | 0:87662653a3c6 | 199 | ts2time(timestamp, ×truct) ; |
| Rhyme | 0:87662653a3c6 | 200 | result = timestruct.tm_hour * 10000 |
| Rhyme | 0:87662653a3c6 | 201 | + timestruct.tm_min * 100 |
| Rhyme | 0:87662653a3c6 | 202 | + timestruct.tm_sec ; |
| Rhyme | 0:87662653a3c6 | 203 | return(result) ; |
| Rhyme | 0:87662653a3c6 | 204 | } |
| Rhyme | 0:87662653a3c6 | 205 | |
| Rhyme | 0:87662653a3c6 | 206 | void time2seq(uint32_t timestamp, char *timestr) |
| Rhyme | 0:87662653a3c6 | 207 | { |
| Rhyme | 0:87662653a3c6 | 208 | struct tm timestruct ; |
| Rhyme | 0:87662653a3c6 | 209 | ts2tm(timestamp, ×truct) ; |
| Rhyme | 0:87662653a3c6 | 210 | sprintf(timestr, "%d%02d%02d%02d%02d%02d", |
| Rhyme | 0:87662653a3c6 | 211 | timestruct.tm_year, |
| Rhyme | 0:87662653a3c6 | 212 | timestruct.tm_mon + 1, |
| Rhyme | 0:87662653a3c6 | 213 | timestruct.tm_mday, |
| Rhyme | 0:87662653a3c6 | 214 | timestruct.tm_hour, |
| Rhyme | 0:87662653a3c6 | 215 | timestruct.tm_min, |
| Rhyme | 0:87662653a3c6 | 216 | timestruct.tm_sec |
| Rhyme | 0:87662653a3c6 | 217 | ) ; |
| Rhyme | 0:87662653a3c6 | 218 | } |
| Rhyme | 0:87662653a3c6 | 219 | |
| Rhyme | 0:87662653a3c6 | 220 | void time2date(struct tm *tm, char *datestr) |
| Rhyme | 0:87662653a3c6 | 221 | { |
| Rhyme | 0:87662653a3c6 | 222 | sprintf(datestr, "%d/%d/%d %02d:%02d:%02d (%s)", |
| Rhyme | 0:87662653a3c6 | 223 | tm->tm_year, |
| Rhyme | 0:87662653a3c6 | 224 | tm->tm_mon + 1, |
| Rhyme | 0:87662653a3c6 | 225 | tm->tm_mday, |
| Rhyme | 0:87662653a3c6 | 226 | tm->tm_hour, |
| Rhyme | 0:87662653a3c6 | 227 | tm->tm_min, |
| Rhyme | 0:87662653a3c6 | 228 | tm->tm_sec, |
| Rhyme | 0:87662653a3c6 | 229 | nameOfDay[tm->tm_wday] |
| Rhyme | 0:87662653a3c6 | 230 | ) ; |
| Rhyme | 0:87662653a3c6 | 231 | } |