afLib 1.3 which is supporting both SPI and UART

Dependencies:   vt100 mbed afLib_1_3

Committer:
Rhyme
Date:
Mon Apr 23 06:15:26 2018 +0000
Revision:
0:87662653a3c6
First UART working version

Who changed what in which revision?

UserRevisionLine numberNew 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, &current_time) ;
Rhyme 0:87662653a3c6 42 // ts2time(edge_time, &current_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, &timestruct) ;
Rhyme 0:87662653a3c6 145 print_time(&timestruct) ;
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, &timestruct) ;
Rhyme 0:87662653a3c6 152 print_time(&timestruct) ;
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, &timestruct) ;
Rhyme 0:87662653a3c6 192 time2str(&timestruct, 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, &timestruct) ;
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, &timestruct) ;
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 }