Mbed Clock application using an NTP connection to get internet time and a terminal interface to send commands
Dependencies: 4DGL-uLCD-SE EthernetInterface NTPClient mbed-rtos mbed SDFileSystem wavfile
Clock.cpp@0:4e6ae21cbd31, 2014-12-02 (annotated)
- Committer:
- dudanian
- Date:
- Tue Dec 02 17:22:43 2014 +0000
- Revision:
- 0:4e6ae21cbd31
- Child:
- 2:c939d0501184
initial draft
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dudanian | 0:4e6ae21cbd31 | 1 | #include "Clock.h" |
dudanian | 0:4e6ae21cbd31 | 2 | |
dudanian | 0:4e6ae21cbd31 | 3 | bool Clock::isSet = false; |
dudanian | 0:4e6ae21cbd31 | 4 | |
dudanian | 0:4e6ae21cbd31 | 5 | Clock::Clock() : timezone(UTC) { |
dudanian | 0:4e6ae21cbd31 | 6 | if (!isSet) { |
dudanian | 0:4e6ae21cbd31 | 7 | isSet = true; |
dudanian | 0:4e6ae21cbd31 | 8 | set_time(1388534400); |
dudanian | 0:4e6ae21cbd31 | 9 | } |
dudanian | 0:4e6ae21cbd31 | 10 | } |
dudanian | 0:4e6ae21cbd31 | 11 | |
dudanian | 0:4e6ae21cbd31 | 12 | /** |
dudanian | 0:4e6ae21cbd31 | 13 | * Sets the time and stores it in UTC time |
dudanian | 0:4e6ae21cbd31 | 14 | */ |
dudanian | 0:4e6ae21cbd31 | 15 | void Clock::setTime(int hour, int minute, int period) { |
dudanian | 0:4e6ae21cbd31 | 16 | time_t rawtime = time(NULL); |
dudanian | 0:4e6ae21cbd31 | 17 | struct tm *timeinfo = localtime(&rawtime); |
dudanian | 0:4e6ae21cbd31 | 18 | if (hour == 12) |
dudanian | 0:4e6ae21cbd31 | 19 | hour = 0; |
dudanian | 0:4e6ae21cbd31 | 20 | timeinfo->tm_hour = (((period == AM) ? hour : (hour + 12)) - timezone) % 24; |
dudanian | 0:4e6ae21cbd31 | 21 | timeinfo->tm_min = minute; |
dudanian | 0:4e6ae21cbd31 | 22 | timeinfo->tm_sec = 0; |
dudanian | 0:4e6ae21cbd31 | 23 | set_time(mktime(timeinfo)); |
dudanian | 0:4e6ae21cbd31 | 24 | } |
dudanian | 0:4e6ae21cbd31 | 25 | |
dudanian | 0:4e6ae21cbd31 | 26 | /** |
dudanian | 0:4e6ae21cbd31 | 27 | * Sets the timezone. Since the time is stored in UTC, the system time |
dudanian | 0:4e6ae21cbd31 | 28 | * is not modified |
dudanian | 0:4e6ae21cbd31 | 29 | */ |
dudanian | 0:4e6ae21cbd31 | 30 | void Clock::setTimezone(int timezone) { |
dudanian | 0:4e6ae21cbd31 | 31 | |
dudanian | 0:4e6ae21cbd31 | 32 | this->timezone = timezone; |
dudanian | 0:4e6ae21cbd31 | 33 | } |
dudanian | 0:4e6ae21cbd31 | 34 | |
dudanian | 0:4e6ae21cbd31 | 35 | /** |
dudanian | 0:4e6ae21cbd31 | 36 | * Uses an NTP Client to set the time to UTC |
dudanian | 0:4e6ae21cbd31 | 37 | */ |
dudanian | 0:4e6ae21cbd31 | 38 | int Clock::syncTime() { |
dudanian | 0:4e6ae21cbd31 | 39 | NTPClient ntp; |
dudanian | 0:4e6ae21cbd31 | 40 | return ntp.setTime("0.pool.ntp.org"); |
dudanian | 0:4e6ae21cbd31 | 41 | } |
dudanian | 0:4e6ae21cbd31 | 42 | |
dudanian | 0:4e6ae21cbd31 | 43 | /** |
dudanian | 0:4e6ae21cbd31 | 44 | * Gets the system time in UTC and converts it according to the given timezone |
dudanian | 0:4e6ae21cbd31 | 45 | */ |
dudanian | 0:4e6ae21cbd31 | 46 | time_t Clock::getTime() { |
dudanian | 0:4e6ae21cbd31 | 47 | time_t rawtime = time(NULL); |
dudanian | 0:4e6ae21cbd31 | 48 | struct tm *timeinfo = localtime(&rawtime); |
dudanian | 0:4e6ae21cbd31 | 49 | timeinfo->tm_hour = (timeinfo->tm_hour + timezone) % 24; |
dudanian | 0:4e6ae21cbd31 | 50 | return mktime(timeinfo); |
dudanian | 0:4e6ae21cbd31 | 51 | } |
dudanian | 0:4e6ae21cbd31 | 52 | |
dudanian | 0:4e6ae21cbd31 | 53 | int Clock::getTimezone() { |
dudanian | 0:4e6ae21cbd31 | 54 | return timezone; |
dudanian | 0:4e6ae21cbd31 | 55 | } |