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

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?

UserRevisionLine numberNew 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 }