For coursework of group 3 in SOFT564Z
Dependencies: Motordriver ros_lib_kinetic
dateTime.cpp@12:82b8fe254222, 2020-01-05 (annotated)
- Committer:
- Jonathan738
- Date:
- Sun Jan 05 15:42:22 2020 +0000
- Revision:
- 12:82b8fe254222
- Parent:
- 5:207e0cd8b9de
Added working version of TOF code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jonathan738 | 5:207e0cd8b9de | 1 | /*------------------------------------------------------------------------------ |
Jonathan738 | 5:207e0cd8b9de | 2 | Creator : Ben Gordon |
Jonathan738 | 5:207e0cd8b9de | 3 | Date : 08/01/2019 |
Jonathan738 | 5:207e0cd8b9de | 4 | Module : ELEC351 |
Jonathan738 | 5:207e0cd8b9de | 5 | Note : Code Ripped from coursework of Group A for ELEC351 |
Jonathan738 | 5:207e0cd8b9de | 6 | ------------------------------------------------------------------------------*/ |
Jonathan738 | 5:207e0cd8b9de | 7 | #include "dateTime.hpp" |
Jonathan738 | 5:207e0cd8b9de | 8 | #include "Debug.hpp" |
Jonathan738 | 5:207e0cd8b9de | 9 | |
Jonathan738 | 5:207e0cd8b9de | 10 | struct tm _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 11 | struct tm _setTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 12 | |
Jonathan738 | 5:207e0cd8b9de | 13 | struct tm _updateTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 14 | |
Jonathan738 | 5:207e0cd8b9de | 15 | DigitalOut _green(PB_11); |
Jonathan738 | 5:207e0cd8b9de | 16 | DigitalOut _yellow(PB_10); |
Jonathan738 | 5:207e0cd8b9de | 17 | DigitalOut _red(PE_15); |
Jonathan738 | 5:207e0cd8b9de | 18 | |
Jonathan738 | 5:207e0cd8b9de | 19 | char dateTimeStr[20]; |
Jonathan738 | 5:207e0cd8b9de | 20 | char dateStr[11]; |
Jonathan738 | 5:207e0cd8b9de | 21 | char timeStr[9]; |
Jonathan738 | 5:207e0cd8b9de | 22 | |
Jonathan738 | 5:207e0cd8b9de | 23 | extern EventQueue TerminalQueue; |
Jonathan738 | 5:207e0cd8b9de | 24 | extern Terminal PC; |
Jonathan738 | 5:207e0cd8b9de | 25 | |
Jonathan738 | 5:207e0cd8b9de | 26 | ////---------------------------SET DATE AND TIME----------------------------//// |
Jonathan738 | 5:207e0cd8b9de | 27 | BYTE setTime(S_BYTE hours, S_BYTE minutes, S_BYTE seconds) |
Jonathan738 | 5:207e0cd8b9de | 28 | { |
Jonathan738 | 5:207e0cd8b9de | 29 | //Get currently set time |
Jonathan738 | 5:207e0cd8b9de | 30 | _setTime_struct = getRawTime(); |
Jonathan738 | 5:207e0cd8b9de | 31 | |
Jonathan738 | 5:207e0cd8b9de | 32 | //Setting Time |
Jonathan738 | 5:207e0cd8b9de | 33 | _setTime_struct.tm_hour = hours; |
Jonathan738 | 5:207e0cd8b9de | 34 | _setTime_struct.tm_min = minutes; |
Jonathan738 | 5:207e0cd8b9de | 35 | _setTime_struct.tm_sec = seconds; |
Jonathan738 | 5:207e0cd8b9de | 36 | |
Jonathan738 | 5:207e0cd8b9de | 37 | return updateSystemTime(); |
Jonathan738 | 5:207e0cd8b9de | 38 | } |
Jonathan738 | 5:207e0cd8b9de | 39 | |
Jonathan738 | 5:207e0cd8b9de | 40 | //Setting the date and time |
Jonathan738 | 5:207e0cd8b9de | 41 | BYTE setDate(S_BYTE days, S_BYTE months, INT_32 years) |
Jonathan738 | 5:207e0cd8b9de | 42 | { |
Jonathan738 | 5:207e0cd8b9de | 43 | //Get currently set time |
Jonathan738 | 5:207e0cd8b9de | 44 | _setTime_struct = getRawTime(); |
Jonathan738 | 5:207e0cd8b9de | 45 | |
Jonathan738 | 5:207e0cd8b9de | 46 | //Setting Date |
Jonathan738 | 5:207e0cd8b9de | 47 | _setTime_struct.tm_mday = days; |
Jonathan738 | 5:207e0cd8b9de | 48 | _setTime_struct.tm_mon = months -1; |
Jonathan738 | 5:207e0cd8b9de | 49 | _setTime_struct.tm_year = years -1900; |
Jonathan738 | 5:207e0cd8b9de | 50 | |
Jonathan738 | 5:207e0cd8b9de | 51 | return updateSystemTime(); |
Jonathan738 | 5:207e0cd8b9de | 52 | } |
Jonathan738 | 5:207e0cd8b9de | 53 | ////------------------------------------------------------------------------//// |
Jonathan738 | 5:207e0cd8b9de | 54 | //////////////////////////////////////////////////////////////////////////////// |
Jonathan738 | 5:207e0cd8b9de | 55 | ////---------------------------ADD DATE AND TIME----------------------------//// |
Jonathan738 | 5:207e0cd8b9de | 56 | void overFlow(INT_32 *base, INT_32 lower, INT_32 upper) |
Jonathan738 | 5:207e0cd8b9de | 57 | { |
Jonathan738 | 5:207e0cd8b9de | 58 | if(*base < lower) |
Jonathan738 | 5:207e0cd8b9de | 59 | { |
Jonathan738 | 5:207e0cd8b9de | 60 | *base = upper; |
Jonathan738 | 5:207e0cd8b9de | 61 | } |
Jonathan738 | 5:207e0cd8b9de | 62 | else if (*base > upper) |
Jonathan738 | 5:207e0cd8b9de | 63 | { |
Jonathan738 | 5:207e0cd8b9de | 64 | *base = lower; |
Jonathan738 | 5:207e0cd8b9de | 65 | } |
Jonathan738 | 5:207e0cd8b9de | 66 | } |
Jonathan738 | 5:207e0cd8b9de | 67 | |
Jonathan738 | 5:207e0cd8b9de | 68 | void addDay(S_BYTE days) |
Jonathan738 | 5:207e0cd8b9de | 69 | { |
Jonathan738 | 5:207e0cd8b9de | 70 | struct tm _newTime_struct = _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 71 | |
Jonathan738 | 5:207e0cd8b9de | 72 | _newTime_struct.tm_mday = _newTime_struct.tm_mday + days; |
Jonathan738 | 5:207e0cd8b9de | 73 | |
Jonathan738 | 5:207e0cd8b9de | 74 | overFlow(&_newTime_struct.tm_mday,1,31); |
Jonathan738 | 5:207e0cd8b9de | 75 | |
Jonathan738 | 5:207e0cd8b9de | 76 | BYTE error = checkStruct(_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 77 | |
Jonathan738 | 5:207e0cd8b9de | 78 | if(!(error > 1)) |
Jonathan738 | 5:207e0cd8b9de | 79 | { |
Jonathan738 | 5:207e0cd8b9de | 80 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 81 | } |
Jonathan738 | 5:207e0cd8b9de | 82 | } |
Jonathan738 | 5:207e0cd8b9de | 83 | |
Jonathan738 | 5:207e0cd8b9de | 84 | void addMonth(S_BYTE months) |
Jonathan738 | 5:207e0cd8b9de | 85 | { |
Jonathan738 | 5:207e0cd8b9de | 86 | struct tm _newTime_struct = _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 87 | |
Jonathan738 | 5:207e0cd8b9de | 88 | _newTime_struct.tm_mon = _newTime_struct.tm_mon + months; |
Jonathan738 | 5:207e0cd8b9de | 89 | |
Jonathan738 | 5:207e0cd8b9de | 90 | overFlow(&_newTime_struct.tm_mon,1-1,12-1); |
Jonathan738 | 5:207e0cd8b9de | 91 | |
Jonathan738 | 5:207e0cd8b9de | 92 | BYTE error = checkStruct(_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 93 | if(!(error > 1)) |
Jonathan738 | 5:207e0cd8b9de | 94 | { |
Jonathan738 | 5:207e0cd8b9de | 95 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 96 | } |
Jonathan738 | 5:207e0cd8b9de | 97 | } |
Jonathan738 | 5:207e0cd8b9de | 98 | |
Jonathan738 | 5:207e0cd8b9de | 99 | void addYear(INT_32 years) |
Jonathan738 | 5:207e0cd8b9de | 100 | { |
Jonathan738 | 5:207e0cd8b9de | 101 | struct tm _newTime_struct = _addTime_struct; //Define a structure for the new calculated |
Jonathan738 | 5:207e0cd8b9de | 102 | |
Jonathan738 | 5:207e0cd8b9de | 103 | _newTime_struct.tm_year = _newTime_struct.tm_year + years; //Update new time |
Jonathan738 | 5:207e0cd8b9de | 104 | |
Jonathan738 | 5:207e0cd8b9de | 105 | overFlow(&_newTime_struct.tm_year,1970-1900,2106-1900); |
Jonathan738 | 5:207e0cd8b9de | 106 | |
Jonathan738 | 5:207e0cd8b9de | 107 | BYTE error = checkStruct(_newTime_struct); //Check for errors |
Jonathan738 | 5:207e0cd8b9de | 108 | |
Jonathan738 | 5:207e0cd8b9de | 109 | if(!(error > 1)) //If no errors are found, update the time structure |
Jonathan738 | 5:207e0cd8b9de | 110 | { |
Jonathan738 | 5:207e0cd8b9de | 111 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 112 | } |
Jonathan738 | 5:207e0cd8b9de | 113 | } |
Jonathan738 | 5:207e0cd8b9de | 114 | |
Jonathan738 | 5:207e0cd8b9de | 115 | void addHour(S_BYTE hours) |
Jonathan738 | 5:207e0cd8b9de | 116 | { |
Jonathan738 | 5:207e0cd8b9de | 117 | struct tm _newTime_struct = _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 118 | |
Jonathan738 | 5:207e0cd8b9de | 119 | _newTime_struct.tm_hour = _newTime_struct.tm_hour + hours; |
Jonathan738 | 5:207e0cd8b9de | 120 | |
Jonathan738 | 5:207e0cd8b9de | 121 | overFlow(&_newTime_struct.tm_hour,0,23); |
Jonathan738 | 5:207e0cd8b9de | 122 | |
Jonathan738 | 5:207e0cd8b9de | 123 | BYTE error = checkStruct(_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 124 | if(!((error > 1)||(_newTime_struct.tm_hour < 0)||(_newTime_struct.tm_hour > 23))) |
Jonathan738 | 5:207e0cd8b9de | 125 | { |
Jonathan738 | 5:207e0cd8b9de | 126 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 127 | } |
Jonathan738 | 5:207e0cd8b9de | 128 | } |
Jonathan738 | 5:207e0cd8b9de | 129 | |
Jonathan738 | 5:207e0cd8b9de | 130 | void addMin(S_BYTE minutes) |
Jonathan738 | 5:207e0cd8b9de | 131 | { |
Jonathan738 | 5:207e0cd8b9de | 132 | struct tm _newTime_struct = _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 133 | |
Jonathan738 | 5:207e0cd8b9de | 134 | _newTime_struct.tm_min = _newTime_struct.tm_min + minutes; |
Jonathan738 | 5:207e0cd8b9de | 135 | |
Jonathan738 | 5:207e0cd8b9de | 136 | overFlow(&_newTime_struct.tm_min,0,59); |
Jonathan738 | 5:207e0cd8b9de | 137 | |
Jonathan738 | 5:207e0cd8b9de | 138 | BYTE error = checkStruct(_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 139 | if(!((error > 1)||(_newTime_struct.tm_min < 0)||(_newTime_struct.tm_min > 59))) |
Jonathan738 | 5:207e0cd8b9de | 140 | { |
Jonathan738 | 5:207e0cd8b9de | 141 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 142 | } |
Jonathan738 | 5:207e0cd8b9de | 143 | } |
Jonathan738 | 5:207e0cd8b9de | 144 | |
Jonathan738 | 5:207e0cd8b9de | 145 | void addSec(S_BYTE seconds) |
Jonathan738 | 5:207e0cd8b9de | 146 | { |
Jonathan738 | 5:207e0cd8b9de | 147 | struct tm _newTime_struct = _addTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 148 | |
Jonathan738 | 5:207e0cd8b9de | 149 | _newTime_struct.tm_sec = _newTime_struct.tm_sec + seconds; |
Jonathan738 | 5:207e0cd8b9de | 150 | |
Jonathan738 | 5:207e0cd8b9de | 151 | overFlow(&_newTime_struct.tm_sec,0,59); |
Jonathan738 | 5:207e0cd8b9de | 152 | |
Jonathan738 | 5:207e0cd8b9de | 153 | BYTE error = checkStruct(_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 154 | if(!((error > 1)||(_newTime_struct.tm_sec < 0)||(_newTime_struct.tm_sec > 59))) |
Jonathan738 | 5:207e0cd8b9de | 155 | { |
Jonathan738 | 5:207e0cd8b9de | 156 | _addTime_struct = _newTime_struct; |
Jonathan738 | 5:207e0cd8b9de | 157 | } |
Jonathan738 | 5:207e0cd8b9de | 158 | } |
Jonathan738 | 5:207e0cd8b9de | 159 | |
Jonathan738 | 5:207e0cd8b9de | 160 | BYTE checkStruct(struct tm check) |
Jonathan738 | 5:207e0cd8b9de | 161 | { |
Jonathan738 | 5:207e0cd8b9de | 162 | //Initialise LEDs [for debugging] |
Jonathan738 | 5:207e0cd8b9de | 163 | _green = 0; |
Jonathan738 | 5:207e0cd8b9de | 164 | _yellow = 0; |
Jonathan738 | 5:207e0cd8b9de | 165 | _red = 0; |
Jonathan738 | 5:207e0cd8b9de | 166 | |
Jonathan738 | 5:207e0cd8b9de | 167 | //Check new set time is within range of valid dates (1970 - 2106) |
Jonathan738 | 5:207e0cd8b9de | 168 | if((check.tm_year < 1970-1900)||(check.tm_year > 2106-1900)) |
Jonathan738 | 5:207e0cd8b9de | 169 | { |
Jonathan738 | 5:207e0cd8b9de | 170 | _red = 1; |
Jonathan738 | 5:207e0cd8b9de | 171 | Error msgs; |
Jonathan738 | 5:207e0cd8b9de | 172 | msgs.ErrorCode = warning; |
Jonathan738 | 5:207e0cd8b9de | 173 | msgs.ErrorMSGS = "Year outside of valid range [1970 - 2106]"; |
Jonathan738 | 5:207e0cd8b9de | 174 | TerminalQueue.call(&PC, &Terminal::ERROR_MSGS, msgs); |
Jonathan738 | 5:207e0cd8b9de | 175 | return 2; //ERROR_2 Year outside of valid range [1970 - 2106] |
Jonathan738 | 5:207e0cd8b9de | 176 | } |
Jonathan738 | 5:207e0cd8b9de | 177 | |
Jonathan738 | 5:207e0cd8b9de | 178 | //Update structure with correct dates (e.g. 32/10 would become 1/11) |
Jonathan738 | 5:207e0cd8b9de | 179 | struct tm _newTime_struct = check; |
Jonathan738 | 5:207e0cd8b9de | 180 | time_t _newTime_time = mktime(&_newTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 181 | _newTime_struct = *localtime(&_newTime_time); |
Jonathan738 | 5:207e0cd8b9de | 182 | |
Jonathan738 | 5:207e0cd8b9de | 183 | //Check structure has remained same (if not, invalid input has been entered (eg 32nd day or 61s minute) |
Jonathan738 | 5:207e0cd8b9de | 184 | if((check.tm_year != _newTime_struct.tm_year)|| |
Jonathan738 | 5:207e0cd8b9de | 185 | (check.tm_mon != _newTime_struct.tm_mon )|| |
Jonathan738 | 5:207e0cd8b9de | 186 | (check.tm_mday != _newTime_struct.tm_mday)|| |
Jonathan738 | 5:207e0cd8b9de | 187 | (check.tm_hour != _newTime_struct.tm_hour)|| |
Jonathan738 | 5:207e0cd8b9de | 188 | (check.tm_min != _newTime_struct.tm_min )|| |
Jonathan738 | 5:207e0cd8b9de | 189 | (check.tm_sec != _newTime_struct.tm_sec )) |
Jonathan738 | 5:207e0cd8b9de | 190 | { |
Jonathan738 | 5:207e0cd8b9de | 191 | _yellow = 1; |
Jonathan738 | 5:207e0cd8b9de | 192 | if(_newTime_struct.tm_year < (1970-1900)) |
Jonathan738 | 5:207e0cd8b9de | 193 | { |
Jonathan738 | 5:207e0cd8b9de | 194 | Error msgs; |
Jonathan738 | 5:207e0cd8b9de | 195 | msgs.ErrorCode = warning; |
Jonathan738 | 5:207e0cd8b9de | 196 | msgs.ErrorMSGS = "Date exceeds maximum range [06/02/2106 06:28:14]"; |
Jonathan738 | 5:207e0cd8b9de | 197 | TerminalQueue.call(&PC, &Terminal::ERROR_MSGS, msgs); |
Jonathan738 | 5:207e0cd8b9de | 198 | _red = 1; |
Jonathan738 | 5:207e0cd8b9de | 199 | return 3; //ERROR_03 Date exceeds maximum range [06/02/2106 06:28:14] |
Jonathan738 | 5:207e0cd8b9de | 200 | } |
Jonathan738 | 5:207e0cd8b9de | 201 | Error msgs; |
Jonathan738 | 5:207e0cd8b9de | 202 | msgs.ErrorCode = warning; |
Jonathan738 | 5:207e0cd8b9de | 203 | msgs.ErrorMSGS = "Index exceeds max value [e.g Date = 32/31 or Hour = 26/24]"; |
Jonathan738 | 5:207e0cd8b9de | 204 | TerminalQueue.call(&PC, &Terminal::ERROR_MSGS, msgs); |
Jonathan738 | 5:207e0cd8b9de | 205 | return 1; //ERROR_01 Index exceeds max value [e.g Date = 32/31 or Hour = 26/24] |
Jonathan738 | 5:207e0cd8b9de | 206 | } |
Jonathan738 | 5:207e0cd8b9de | 207 | _green = 1; |
Jonathan738 | 5:207e0cd8b9de | 208 | return 0; //ERROR_00 No errors |
Jonathan738 | 5:207e0cd8b9de | 209 | } |
Jonathan738 | 5:207e0cd8b9de | 210 | ////------------------------------------------------------------------------//// |
Jonathan738 | 5:207e0cd8b9de | 211 | //////////////////////////////////////////////////////////////////////////////// |
Jonathan738 | 5:207e0cd8b9de | 212 | |
Jonathan738 | 5:207e0cd8b9de | 213 | BYTE updateSystemTime() |
Jonathan738 | 5:207e0cd8b9de | 214 | { |
Jonathan738 | 5:207e0cd8b9de | 215 | //Checking DateTime remains in valid format |
Jonathan738 | 5:207e0cd8b9de | 216 | BYTE error = checkStruct(_setTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 217 | |
Jonathan738 | 5:207e0cd8b9de | 218 | //If no errors are returned, then set the DateTime to set values. |
Jonathan738 | 5:207e0cd8b9de | 219 | if(!error){ |
Jonathan738 | 5:207e0cd8b9de | 220 | set_time(mktime(&_setTime_struct)); |
Jonathan738 | 5:207e0cd8b9de | 221 | } |
Jonathan738 | 5:207e0cd8b9de | 222 | |
Jonathan738 | 5:207e0cd8b9de | 223 | //Return error to be used for terminal display |
Jonathan738 | 5:207e0cd8b9de | 224 | return error; |
Jonathan738 | 5:207e0cd8b9de | 225 | } |
Jonathan738 | 5:207e0cd8b9de | 226 | |
Jonathan738 | 5:207e0cd8b9de | 227 | BYTE confirmDate() |
Jonathan738 | 5:207e0cd8b9de | 228 | { |
Jonathan738 | 5:207e0cd8b9de | 229 | BYTE error; |
Jonathan738 | 5:207e0cd8b9de | 230 | error = checkStruct(_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 231 | char* temp; |
Jonathan738 | 5:207e0cd8b9de | 232 | sprintf(temp,"error->%d",error); |
Jonathan738 | 5:207e0cd8b9de | 233 | |
Jonathan738 | 5:207e0cd8b9de | 234 | if(!error) |
Jonathan738 | 5:207e0cd8b9de | 235 | { |
Jonathan738 | 5:207e0cd8b9de | 236 | //errorReport("No Error"); |
Jonathan738 | 5:207e0cd8b9de | 237 | mktime(&_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 238 | updateSystemTime(); |
Jonathan738 | 5:207e0cd8b9de | 239 | } |
Jonathan738 | 5:207e0cd8b9de | 240 | else |
Jonathan738 | 5:207e0cd8b9de | 241 | { |
Jonathan738 | 5:207e0cd8b9de | 242 | //errorReport("Error"); |
Jonathan738 | 5:207e0cd8b9de | 243 | while(error) |
Jonathan738 | 5:207e0cd8b9de | 244 | { |
Jonathan738 | 5:207e0cd8b9de | 245 | _addTime_struct.tm_mday = _addTime_struct.tm_mday - 1; |
Jonathan738 | 5:207e0cd8b9de | 246 | error = checkStruct(_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 247 | } |
Jonathan738 | 5:207e0cd8b9de | 248 | mktime(&_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 249 | return 1; |
Jonathan738 | 5:207e0cd8b9de | 250 | } |
Jonathan738 | 5:207e0cd8b9de | 251 | return 0; |
Jonathan738 | 5:207e0cd8b9de | 252 | } |
Jonathan738 | 5:207e0cd8b9de | 253 | |
Jonathan738 | 5:207e0cd8b9de | 254 | char* getSetDate() |
Jonathan738 | 5:207e0cd8b9de | 255 | { |
Jonathan738 | 5:207e0cd8b9de | 256 | return printDate(_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 257 | } |
Jonathan738 | 5:207e0cd8b9de | 258 | |
Jonathan738 | 5:207e0cd8b9de | 259 | char* getSetTime() |
Jonathan738 | 5:207e0cd8b9de | 260 | { |
Jonathan738 | 5:207e0cd8b9de | 261 | return printTime(_addTime_struct); |
Jonathan738 | 5:207e0cd8b9de | 262 | } |
Jonathan738 | 5:207e0cd8b9de | 263 | |
Jonathan738 | 5:207e0cd8b9de | 264 | char* startEditDate() |
Jonathan738 | 5:207e0cd8b9de | 265 | { |
Jonathan738 | 5:207e0cd8b9de | 266 | _addTime_struct = getRawTime(); |
Jonathan738 | 5:207e0cd8b9de | 267 | return getSetDate(); |
Jonathan738 | 5:207e0cd8b9de | 268 | } |
Jonathan738 | 5:207e0cd8b9de | 269 | |
Jonathan738 | 5:207e0cd8b9de | 270 | char* startEditTime() |
Jonathan738 | 5:207e0cd8b9de | 271 | { |
Jonathan738 | 5:207e0cd8b9de | 272 | _addTime_struct = getRawTime(); |
Jonathan738 | 5:207e0cd8b9de | 273 | return getSetTime(); |
Jonathan738 | 5:207e0cd8b9de | 274 | } |
Jonathan738 | 5:207e0cd8b9de | 275 | |
Jonathan738 | 5:207e0cd8b9de | 276 | void endEdit() |
Jonathan738 | 5:207e0cd8b9de | 277 | { |
Jonathan738 | 5:207e0cd8b9de | 278 | set_time(mktime(&_addTime_struct)); |
Jonathan738 | 5:207e0cd8b9de | 279 | } |
Jonathan738 | 5:207e0cd8b9de | 280 | |
Jonathan738 | 5:207e0cd8b9de | 281 | char* getSystemDateTime() |
Jonathan738 | 5:207e0cd8b9de | 282 | { |
Jonathan738 | 5:207e0cd8b9de | 283 | struct tm _current_time = getRawTime(); |
Jonathan738 | 5:207e0cd8b9de | 284 | sprintf(dateTimeStr,"%s %s",printDate(_current_time),printTime(_current_time)); |
Jonathan738 | 5:207e0cd8b9de | 285 | return dateTimeStr; |
Jonathan738 | 5:207e0cd8b9de | 286 | } |
Jonathan738 | 5:207e0cd8b9de | 287 | |
Jonathan738 | 5:207e0cd8b9de | 288 | ////------------------------------------------------------------------------//// |
Jonathan738 | 5:207e0cd8b9de | 289 | |
Jonathan738 | 5:207e0cd8b9de | 290 | |
Jonathan738 | 5:207e0cd8b9de | 291 | struct tm getRawTime() |
Jonathan738 | 5:207e0cd8b9de | 292 | { |
Jonathan738 | 5:207e0cd8b9de | 293 | time_t rawTime; |
Jonathan738 | 5:207e0cd8b9de | 294 | time(&rawTime); |
Jonathan738 | 5:207e0cd8b9de | 295 | return *localtime(&rawTime); |
Jonathan738 | 5:207e0cd8b9de | 296 | } |
Jonathan738 | 5:207e0cd8b9de | 297 | |
Jonathan738 | 5:207e0cd8b9de | 298 | //time_t range 0 - 0xFFFFFFFFFFFE [01/01/1970 00:00:00 - 06/02/2106 06:28:14] |
Jonathan738 | 5:207e0cd8b9de | 299 | |
Jonathan738 | 5:207e0cd8b9de | 300 | char* printDate(struct tm _time_struct) |
Jonathan738 | 5:207e0cd8b9de | 301 | { |
Jonathan738 | 5:207e0cd8b9de | 302 | sprintf(dateStr,"%02d/%02d/%4d", |
Jonathan738 | 5:207e0cd8b9de | 303 | getDay(_time_struct), |
Jonathan738 | 5:207e0cd8b9de | 304 | getMonth(_time_struct), |
Jonathan738 | 5:207e0cd8b9de | 305 | getYear(_time_struct)); |
Jonathan738 | 5:207e0cd8b9de | 306 | return dateStr; |
Jonathan738 | 5:207e0cd8b9de | 307 | } |
Jonathan738 | 5:207e0cd8b9de | 308 | |
Jonathan738 | 5:207e0cd8b9de | 309 | char* printTime(struct tm _time_struct) |
Jonathan738 | 5:207e0cd8b9de | 310 | { |
Jonathan738 | 5:207e0cd8b9de | 311 | sprintf(timeStr,"%02d:%02d:%02d", |
Jonathan738 | 5:207e0cd8b9de | 312 | getHour(_time_struct), |
Jonathan738 | 5:207e0cd8b9de | 313 | getMin(_time_struct), |
Jonathan738 | 5:207e0cd8b9de | 314 | getSec(_time_struct)); |
Jonathan738 | 5:207e0cd8b9de | 315 | return timeStr; |
Jonathan738 | 5:207e0cd8b9de | 316 | } |
Jonathan738 | 5:207e0cd8b9de | 317 | |
Jonathan738 | 5:207e0cd8b9de | 318 | signed INT_32 getYear(struct tm _time_struct) {return _time_struct.tm_year + 1900;} |
Jonathan738 | 5:207e0cd8b9de | 319 | BYTE getMonth(struct tm _time_struct) {return _time_struct.tm_mon + 1; } |
Jonathan738 | 5:207e0cd8b9de | 320 | BYTE getDay(struct tm _time_struct) {return _time_struct.tm_mday; } |
Jonathan738 | 5:207e0cd8b9de | 321 | BYTE getHour(struct tm _time_struct) {return _time_struct.tm_hour; } |
Jonathan738 | 5:207e0cd8b9de | 322 | BYTE getMin(struct tm _time_struct) {return _time_struct.tm_min; } |
Jonathan738 | 5:207e0cd8b9de | 323 | BYTE getSec(struct tm _time_struct) {return _time_struct.tm_sec; } |