From 26cd0c85095d5dbfffded0831abb2f7abaad0469 Mon Sep 17 00:00:00 2001 From: PaulStoffregen Date: Wed, 11 Nov 2015 09:29:29 -0800 Subject: [PATCH] Fix for includes with Arduino 1.6.6 --- Time.h | 145 +----------------- TimeLib.h | 144 +++++++++++++++++ examples/TimeArduinoDue/TimeArduinoDue.ino | 2 +- examples/TimeGPS/TimeGPS.ino | 2 +- examples/TimeNTP/TimeNTP.ino | 2 +- examples/TimeRTC/{TimeRTC.pde => TimeRTC.ino} | 4 +- .../{TimeRTCLog.pde => TimeRTCLog.ino} | 4 +- examples/TimeRTCSet/TimeRTCSet.ino | 4 +- examples/TimeSerial/TimeSerial.ino | 2 +- .../TimeSerialDateStrings.ino | 2 +- examples/TimeTeensy3/TimeTeensy3.ino | 2 +- keywords.txt | 1 + 12 files changed, 158 insertions(+), 156 deletions(-) create mode 100644 TimeLib.h rename examples/TimeRTC/{TimeRTC.pde => TimeRTC.ino} (97%) rename examples/TimeRTCLog/{TimeRTCLog.pde => TimeRTCLog.ino} (98%) diff --git a/Time.h b/Time.h index 61519f7..a79b080 100644 --- a/Time.h +++ b/Time.h @@ -1,144 +1 @@ -/* - time.h - low level time and date functions -*/ - -/* - July 3 2011 - fixed elapsedSecsThisWeek macro (thanks Vincent Valdy for this) - - fixed daysToTime_t macro (thanks maniacbug) -*/ - -#ifndef _Time_h -#ifdef __cplusplus -#define _Time_h - -#include -#ifndef __AVR__ -#include // for __time_t_defined, but avr libc lacks sys/types.h -#endif - - -#if !defined(__time_t_defined) // avoid conflict with newlib or other posix libc -typedef unsigned long time_t; -#endif - - -// This ugly hack allows us to define C++ overloaded functions, when included -// from within an extern "C", as newlib's sys/stat.h does. Actually it is -// intended to include "time.h" from the C library (on ARM, but AVR does not -// have that file at all). On Mac and Windows, the compiler will find this -// "Time.h" instead of the C library "time.h", so we may cause other weird -// and unpredictable effects by conflicting with the C library header "time.h", -// but at least this hack lets us define C++ functions as intended. Hopefully -// nothing too terrible will result from overriding the C library header?! -extern "C++" { -typedef enum {timeNotSet, timeNeedsSync, timeSet -} timeStatus_t ; - -typedef enum { - dowInvalid, dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday -} timeDayOfWeek_t; - -typedef enum { - tmSecond, tmMinute, tmHour, tmWday, tmDay,tmMonth, tmYear, tmNbrFields -} tmByteFields; - -typedef struct { - uint8_t Second; - uint8_t Minute; - uint8_t Hour; - uint8_t Wday; // day of week, sunday is day 1 - uint8_t Day; - uint8_t Month; - uint8_t Year; // offset from 1970; -} tmElements_t, TimeElements, *tmElementsPtr_t; - -//convenience macros to convert to and from tm years -#define tmYearToCalendar(Y) ((Y) + 1970) // full four digit year -#define CalendarYrToTm(Y) ((Y) - 1970) -#define tmYearToY2k(Y) ((Y) - 30) // offset is from 2000 -#define y2kYearToTm(Y) ((Y) + 30) - -typedef time_t(*getExternalTime)(); -//typedef void (*setExternalTime)(const time_t); // not used in this version - - -/*==============================================================================*/ -/* Useful Constants */ -#define SECS_PER_MIN (60UL) -#define SECS_PER_HOUR (3600UL) -#define SECS_PER_DAY (SECS_PER_HOUR * 24UL) -#define DAYS_PER_WEEK (7UL) -#define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK) -#define SECS_PER_YEAR (SECS_PER_WEEK * 52UL) -#define SECS_YR_2000 (946684800UL) // the time at the start of y2k - -/* Useful Macros for getting elapsed time */ -#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN) -#define numberOfMinutes(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN) -#define numberOfHours(_time_) (( _time_% SECS_PER_DAY) / SECS_PER_HOUR) -#define dayOfWeek(_time_) ((( _time_ / SECS_PER_DAY + 4) % DAYS_PER_WEEK)+1) // 1 = Sunday -#define elapsedDays(_time_) ( _time_ / SECS_PER_DAY) // this is number of days since Jan 1 1970 -#define elapsedSecsToday(_time_) (_time_ % SECS_PER_DAY) // the number of seconds since last midnight -// The following macros are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971 -// Always set the correct time before settting alarms -#define previousMidnight(_time_) (( _time_ / SECS_PER_DAY) * SECS_PER_DAY) // time at the start of the given day -#define nextMidnight(_time_) ( previousMidnight(_time_) + SECS_PER_DAY ) // time at the end of the given day -#define elapsedSecsThisWeek(_time_) (elapsedSecsToday(_time_) + ((dayOfWeek(_time_)-1) * SECS_PER_DAY) ) // note that week starts on day 1 -#define previousSunday(_time_) (_time_ - elapsedSecsThisWeek(_time_)) // time at the start of the week for the given time -#define nextSunday(_time_) ( previousSunday(_time_)+SECS_PER_WEEK) // time at the end of the week for the given time - - -/* Useful Macros for converting elapsed time to a time_t */ -#define minutesToTime_t ((M)) ( (M) * SECS_PER_MIN) -#define hoursToTime_t ((H)) ( (H) * SECS_PER_HOUR) -#define daysToTime_t ((D)) ( (D) * SECS_PER_DAY) // fixed on Jul 22 2011 -#define weeksToTime_t ((W)) ( (W) * SECS_PER_WEEK) - -/*============================================================================*/ -/* time and date functions */ -int hour(); // the hour now -int hour(time_t t); // the hour for the given time -int hourFormat12(); // the hour now in 12 hour format -int hourFormat12(time_t t); // the hour for the given time in 12 hour format -uint8_t isAM(); // returns true if time now is AM -uint8_t isAM(time_t t); // returns true the given time is AM -uint8_t isPM(); // returns true if time now is PM -uint8_t isPM(time_t t); // returns true the given time is PM -int minute(); // the minute now -int minute(time_t t); // the minute for the given time -int second(); // the second now -int second(time_t t); // the second for the given time -int day(); // the day now -int day(time_t t); // the day for the given time -int weekday(); // the weekday now (Sunday is day 1) -int weekday(time_t t); // the weekday for the given time -int month(); // the month now (Jan is month 1) -int month(time_t t); // the month for the given time -int year(); // the full four digit year: (2009, 2010 etc) -int year(time_t t); // the year for the given time - -time_t now(); // return the current time as seconds since Jan 1 1970 -void setTime(time_t t); -void setTime(int hr,int min,int sec,int day, int month, int yr); -void adjustTime(long adjustment); - -/* date strings */ -#define dt_MAX_STRING_LEN 9 // length of longest date string (excluding terminating null) -char* monthStr(uint8_t month); -char* dayStr(uint8_t day); -char* monthShortStr(uint8_t month); -char* dayShortStr(uint8_t day); - -/* time sync functions */ -timeStatus_t timeStatus(); // indicates if time has been set and recently synchronized -void setSyncProvider( getExternalTime getTimeFunction); // identify the external time provider -void setSyncInterval(time_t interval); // set the number of seconds between re-sync - -/* low level functions to convert to and from system time */ -void breakTime(time_t time, tmElements_t &tm); // break time_t into elements -time_t makeTime(tmElements_t &tm); // convert time elements into time_t - -} // extern "C++" -#endif // __cplusplus -#endif /* _Time_h */ - +#include "TimeLib.h" diff --git a/TimeLib.h b/TimeLib.h new file mode 100644 index 0000000..61519f7 --- /dev/null +++ b/TimeLib.h @@ -0,0 +1,144 @@ +/* + time.h - low level time and date functions +*/ + +/* + July 3 2011 - fixed elapsedSecsThisWeek macro (thanks Vincent Valdy for this) + - fixed daysToTime_t macro (thanks maniacbug) +*/ + +#ifndef _Time_h +#ifdef __cplusplus +#define _Time_h + +#include +#ifndef __AVR__ +#include // for __time_t_defined, but avr libc lacks sys/types.h +#endif + + +#if !defined(__time_t_defined) // avoid conflict with newlib or other posix libc +typedef unsigned long time_t; +#endif + + +// This ugly hack allows us to define C++ overloaded functions, when included +// from within an extern "C", as newlib's sys/stat.h does. Actually it is +// intended to include "time.h" from the C library (on ARM, but AVR does not +// have that file at all). On Mac and Windows, the compiler will find this +// "Time.h" instead of the C library "time.h", so we may cause other weird +// and unpredictable effects by conflicting with the C library header "time.h", +// but at least this hack lets us define C++ functions as intended. Hopefully +// nothing too terrible will result from overriding the C library header?! +extern "C++" { +typedef enum {timeNotSet, timeNeedsSync, timeSet +} timeStatus_t ; + +typedef enum { + dowInvalid, dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday +} timeDayOfWeek_t; + +typedef enum { + tmSecond, tmMinute, tmHour, tmWday, tmDay,tmMonth, tmYear, tmNbrFields +} tmByteFields; + +typedef struct { + uint8_t Second; + uint8_t Minute; + uint8_t Hour; + uint8_t Wday; // day of week, sunday is day 1 + uint8_t Day; + uint8_t Month; + uint8_t Year; // offset from 1970; +} tmElements_t, TimeElements, *tmElementsPtr_t; + +//convenience macros to convert to and from tm years +#define tmYearToCalendar(Y) ((Y) + 1970) // full four digit year +#define CalendarYrToTm(Y) ((Y) - 1970) +#define tmYearToY2k(Y) ((Y) - 30) // offset is from 2000 +#define y2kYearToTm(Y) ((Y) + 30) + +typedef time_t(*getExternalTime)(); +//typedef void (*setExternalTime)(const time_t); // not used in this version + + +/*==============================================================================*/ +/* Useful Constants */ +#define SECS_PER_MIN (60UL) +#define SECS_PER_HOUR (3600UL) +#define SECS_PER_DAY (SECS_PER_HOUR * 24UL) +#define DAYS_PER_WEEK (7UL) +#define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK) +#define SECS_PER_YEAR (SECS_PER_WEEK * 52UL) +#define SECS_YR_2000 (946684800UL) // the time at the start of y2k + +/* Useful Macros for getting elapsed time */ +#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN) +#define numberOfMinutes(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN) +#define numberOfHours(_time_) (( _time_% SECS_PER_DAY) / SECS_PER_HOUR) +#define dayOfWeek(_time_) ((( _time_ / SECS_PER_DAY + 4) % DAYS_PER_WEEK)+1) // 1 = Sunday +#define elapsedDays(_time_) ( _time_ / SECS_PER_DAY) // this is number of days since Jan 1 1970 +#define elapsedSecsToday(_time_) (_time_ % SECS_PER_DAY) // the number of seconds since last midnight +// The following macros are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971 +// Always set the correct time before settting alarms +#define previousMidnight(_time_) (( _time_ / SECS_PER_DAY) * SECS_PER_DAY) // time at the start of the given day +#define nextMidnight(_time_) ( previousMidnight(_time_) + SECS_PER_DAY ) // time at the end of the given day +#define elapsedSecsThisWeek(_time_) (elapsedSecsToday(_time_) + ((dayOfWeek(_time_)-1) * SECS_PER_DAY) ) // note that week starts on day 1 +#define previousSunday(_time_) (_time_ - elapsedSecsThisWeek(_time_)) // time at the start of the week for the given time +#define nextSunday(_time_) ( previousSunday(_time_)+SECS_PER_WEEK) // time at the end of the week for the given time + + +/* Useful Macros for converting elapsed time to a time_t */ +#define minutesToTime_t ((M)) ( (M) * SECS_PER_MIN) +#define hoursToTime_t ((H)) ( (H) * SECS_PER_HOUR) +#define daysToTime_t ((D)) ( (D) * SECS_PER_DAY) // fixed on Jul 22 2011 +#define weeksToTime_t ((W)) ( (W) * SECS_PER_WEEK) + +/*============================================================================*/ +/* time and date functions */ +int hour(); // the hour now +int hour(time_t t); // the hour for the given time +int hourFormat12(); // the hour now in 12 hour format +int hourFormat12(time_t t); // the hour for the given time in 12 hour format +uint8_t isAM(); // returns true if time now is AM +uint8_t isAM(time_t t); // returns true the given time is AM +uint8_t isPM(); // returns true if time now is PM +uint8_t isPM(time_t t); // returns true the given time is PM +int minute(); // the minute now +int minute(time_t t); // the minute for the given time +int second(); // the second now +int second(time_t t); // the second for the given time +int day(); // the day now +int day(time_t t); // the day for the given time +int weekday(); // the weekday now (Sunday is day 1) +int weekday(time_t t); // the weekday for the given time +int month(); // the month now (Jan is month 1) +int month(time_t t); // the month for the given time +int year(); // the full four digit year: (2009, 2010 etc) +int year(time_t t); // the year for the given time + +time_t now(); // return the current time as seconds since Jan 1 1970 +void setTime(time_t t); +void setTime(int hr,int min,int sec,int day, int month, int yr); +void adjustTime(long adjustment); + +/* date strings */ +#define dt_MAX_STRING_LEN 9 // length of longest date string (excluding terminating null) +char* monthStr(uint8_t month); +char* dayStr(uint8_t day); +char* monthShortStr(uint8_t month); +char* dayShortStr(uint8_t day); + +/* time sync functions */ +timeStatus_t timeStatus(); // indicates if time has been set and recently synchronized +void setSyncProvider( getExternalTime getTimeFunction); // identify the external time provider +void setSyncInterval(time_t interval); // set the number of seconds between re-sync + +/* low level functions to convert to and from system time */ +void breakTime(time_t time, tmElements_t &tm); // break time_t into elements +time_t makeTime(tmElements_t &tm); // convert time elements into time_t + +} // extern "C++" +#endif // __cplusplus +#endif /* _Time_h */ + diff --git a/examples/TimeArduinoDue/TimeArduinoDue.ino b/examples/TimeArduinoDue/TimeArduinoDue.ino index a19a2e0..f0a9a95 100644 --- a/examples/TimeArduinoDue/TimeArduinoDue.ino +++ b/examples/TimeArduinoDue/TimeArduinoDue.ino @@ -6,7 +6,7 @@ * https://github.com/MarkusLange/Arduino-Due-RTC-Library */ -#include +#include #include // Select the Slowclock source diff --git a/examples/TimeGPS/TimeGPS.ino b/examples/TimeGPS/TimeGPS.ino index 7a0213b..fea9698 100644 --- a/examples/TimeGPS/TimeGPS.ino +++ b/examples/TimeGPS/TimeGPS.ino @@ -4,7 +4,7 @@ * */ -#include +#include #include // http://arduiniana.org/libraries/TinyGPS/ #include // TinyGPS and SoftwareSerial libraries are the work of Mikal Hart diff --git a/examples/TimeNTP/TimeNTP.ino b/examples/TimeNTP/TimeNTP.ino index 0d3820e..17a908f 100644 --- a/examples/TimeNTP/TimeNTP.ino +++ b/examples/TimeNTP/TimeNTP.ino @@ -5,7 +5,7 @@ * This sketch uses the Ethernet library */ -#include +#include #include #include #include diff --git a/examples/TimeRTC/TimeRTC.pde b/examples/TimeRTC/TimeRTC.ino similarity index 97% rename from examples/TimeRTC/TimeRTC.pde rename to examples/TimeRTC/TimeRTC.ino index 42e7e7f..fa10ff6 100644 --- a/examples/TimeRTC/TimeRTC.pde +++ b/examples/TimeRTC/TimeRTC.ino @@ -4,8 +4,8 @@ * */ -#include -#include +#include +#include #include // a basic DS1307 library that returns time as a time_t void setup() { diff --git a/examples/TimeRTCLog/TimeRTCLog.pde b/examples/TimeRTCLog/TimeRTCLog.ino similarity index 98% rename from examples/TimeRTCLog/TimeRTCLog.pde rename to examples/TimeRTCLog/TimeRTCLog.ino index 5715eb0..0b250c2 100644 --- a/examples/TimeRTCLog/TimeRTCLog.pde +++ b/examples/TimeRTCLog/TimeRTCLog.ino @@ -6,8 +6,8 @@ * the time of the event and time since the previous event is calculated and sent to the serial port. */ -#include -#include +#include +#include #include // a basic DS1307 library that returns time as a time_t const int nbrInputPins = 6; // monitor 6 digital pins diff --git a/examples/TimeRTCSet/TimeRTCSet.ino b/examples/TimeRTCSet/TimeRTCSet.ino index b4e4854..49c49f3 100644 --- a/examples/TimeRTCSet/TimeRTCSet.ino +++ b/examples/TimeRTCSet/TimeRTCSet.ino @@ -7,8 +7,8 @@ * On Linux, you can use "date +T%s > /dev/ttyACM0" (UTC time zone) */ -#include -#include +#include +#include #include // a basic DS1307 library that returns time as a time_t diff --git a/examples/TimeSerial/TimeSerial.ino b/examples/TimeSerial/TimeSerial.ino index 426a87c..07e609f 100644 --- a/examples/TimeSerial/TimeSerial.ino +++ b/examples/TimeSerial/TimeSerial.ino @@ -10,7 +10,7 @@ * On Linux, you can use "date +T%s\n > /dev/ttyACM0" (UTC time zone) */ -#include +#include #define TIME_HEADER "T" // Header tag for serial time sync message #define TIME_REQUEST 7 // ASCII bell character requests a time sync message diff --git a/examples/TimeSerialDateStrings/TimeSerialDateStrings.ino b/examples/TimeSerialDateStrings/TimeSerialDateStrings.ino index 6024776..95d2568 100644 --- a/examples/TimeSerialDateStrings/TimeSerialDateStrings.ino +++ b/examples/TimeSerialDateStrings/TimeSerialDateStrings.ino @@ -15,7 +15,7 @@ * send: Fl\n for long date format */ -#include +#include // single character message tags #define TIME_HEADER 'T' // Header tag for serial time sync message diff --git a/examples/TimeTeensy3/TimeTeensy3.ino b/examples/TimeTeensy3/TimeTeensy3.ino index a06a7f9..f68dd8c 100644 --- a/examples/TimeTeensy3/TimeTeensy3.ino +++ b/examples/TimeTeensy3/TimeTeensy3.ino @@ -4,7 +4,7 @@ * */ -#include +#include void setup() { // set the Time library to use Teensy 3.0's RTC to keep time diff --git a/keywords.txt b/keywords.txt index 85b357e..073f8f8 100644 --- a/keywords.txt +++ b/keywords.txt @@ -24,6 +24,7 @@ adjustTime KEYWORD2 setSyncProvider KEYWORD2 setSyncInterval KEYWORD2 timeStatus KEYWORD2 +TimeLib KEYWORD2 ####################################### # Instances (KEYWORD2) #######################################