diff --git a/DateTimeCore.cpp b/DateTimeCore.cpp index 7370793..8340054 100644 --- a/DateTimeCore.cpp +++ b/DateTimeCore.cpp @@ -20,24 +20,24 @@ static char ReturnStr[30]; //--------------------------------------------------------------------------- -// Set current time on real-time clock bool SetTime( unsigned char Hours, unsigned char Minutes, unsigned char Seconds ) { struct tm NewTime; struct timeval tv; struct timezone tz; - // Get current date and time + // Get current Epoch (UTC) gettimeofday( &tv, &tz); - // Change to new time + // Convert to local time localtime_r( &tv.tv_sec, &NewTime ); + // Set new time (keep date as is) NewTime.tm_hour = Hours; NewTime.tm_min = Minutes; NewTime.tm_sec = Seconds; - // Convert back + // Convert back from local time to epoch time tv.tv_sec = mktime( &NewTime ); tv.tv_usec = 0; @@ -47,43 +47,24 @@ bool SetTime( unsigned char Hours, unsigned char Minutes, unsigned char Seconds } //--------------------------------------------------------------------------- -// Get current time from real-time clock -bool GetTime( unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) -{ - struct tm CurrentTime; - time_t UTC; - - // Get current date and time - time( &UTC ); - localtime_r( &UTC, &CurrentTime ); - - // Extract time - Hours = CurrentTime.tm_hour; - Minutes = CurrentTime.tm_min; - Seconds = CurrentTime.tm_sec; - - return true; -} -//--------------------------------------------------------------------------- - -// Set current date on real-time clock bool SetDate( unsigned char Day, unsigned char Month, unsigned Year ) { struct tm NewDate; struct timeval tv; struct timezone tz; - // Get current date and time + // Get current Epoch (UTC) gettimeofday( &tv, &tz ); - // Change to new time + // Convert to local time localtime_r( &tv.tv_sec, &NewDate ); + // Set new date (keep time as is) NewDate.tm_year = Year - 1900; NewDate.tm_mon = Month - 1; NewDate.tm_mday = Day; - // Convert back + // Convert back from local time to epoch time tv.tv_sec = mktime( &NewDate ); tv.tv_usec = 0; @@ -94,17 +75,70 @@ bool SetDate( unsigned char Day, unsigned char Month, unsigned Year ) } //--------------------------------------------------------------------------- -// Get current data from real-time clock +bool SetDateTime( unsigned char Day, unsigned char Month, unsigned Year, + unsigned char Hours, unsigned char Minutes, unsigned char Seconds ) +{ + struct tm NewTime; + struct timeval tv; + struct timezone tz; + + // Get current Epoch (UTC) + gettimeofday( &tv, &tz); + + // Convert to local time + localtime_r( &tv.tv_sec, &NewTime ); + + // Set new date & time + NewTime.tm_year = Year - 1900; + NewTime.tm_mon = Month - 1; + NewTime.tm_mday = Day; + + NewTime.tm_hour = Hours; + NewTime.tm_min = Minutes; + NewTime.tm_sec = Seconds; + + // Convert back from local time to epoch time + tv.tv_sec = mktime( &NewTime ); + tv.tv_usec = 0; + + // Set date and new time + settimeofday( &tv, &tz); + return true; +} +//--------------------------------------------------------------------------- + +bool GetTime( unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) +{ + struct tm CurrentTime; + time_t UTC; + + // Get current UTC date and time + time( &UTC ); + + // Convert to local time + localtime_r( &UTC, &CurrentTime ); + + // Extract time only + Hours = CurrentTime.tm_hour; + Minutes = CurrentTime.tm_min; + Seconds = CurrentTime.tm_sec; + + return true; +} +//--------------------------------------------------------------------------- + bool GetDate( unsigned char &Day, unsigned char &Month, unsigned &Year ) { struct tm CurrentDate; time_t UTC; - // Get current date and time + // Get current UTC date and time time( &UTC ); + + // Convert to local time localtime_r( &UTC, &CurrentDate ); - // Extract date + // Extract date only Day = CurrentDate.tm_mday; Month = CurrentDate.tm_mon + 1; Year = CurrentDate.tm_year + 1900; @@ -113,7 +147,31 @@ bool GetDate( unsigned char &Day, unsigned char &Month, unsigned &Year ) } //--------------------------------------------------------------------------- -// Get the current date in a string +bool GetDateTime( unsigned char &Day, unsigned char &Month, unsigned &Year, + unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) +{ + struct tm CurrentTime; + time_t UTC; + + // Get current UTC date and time + time( &UTC ); + + // Convert to local time + localtime_r( &UTC, &CurrentTime ); + + // Extract Date & time + Day = CurrentTime.tm_mday; + Month = CurrentTime.tm_mon + 1; + Year = CurrentTime.tm_year + 1900; + + Hours = CurrentTime.tm_hour; + Minutes = CurrentTime.tm_min; + Seconds = CurrentTime.tm_sec; + + return true; +} +//--------------------------------------------------------------------------- + char const * GetDateStr( const char * DateSeparator ) { unsigned char Day; @@ -172,12 +230,15 @@ char const * GetDateTimeStr( const char * DateSeparator, const char * TimeSepar //--------------------------------------------------------------------------- // Get current time from real-time clock -bool ReadTime( const time_t EpochTime, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) +bool ReadTime( const time_t EpochTime, bool LocalTime, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) { struct tm CurrentTime; // Get current date and time - localtime_r( &EpochTime, &CurrentTime ); + if (LocalTime) + localtime_r( &EpochTime, &CurrentTime ); + else + gmtime_r( &EpochTime, &CurrentTime ); // Extract time Hours = CurrentTime.tm_hour; @@ -188,12 +249,15 @@ bool ReadTime( const time_t EpochTime, unsigned char &Hours, unsigned char &Minu } //--------------------------------------------------------------------------- -bool ReadDate( const time_t EpochTime, unsigned char &Day, unsigned char &Month, unsigned &Year ) +bool ReadDate( const time_t EpochTime, bool LocalTime, unsigned char &Day, unsigned char &Month, unsigned &Year ) { struct tm CurrentDate; // Get current date and time - localtime_r( &EpochTime, &CurrentDate ); + if (LocalTime) + localtime_r( &EpochTime, &CurrentDate ); + else + gmtime_r( &EpochTime, &CurrentDate ); // Extract date Day = CurrentDate.tm_mday; @@ -204,13 +268,16 @@ bool ReadDate( const time_t EpochTime, unsigned char &Day, unsigned char &Month, } //--------------------------------------------------------------------------- -bool ReadDateTime( const time_t EpochTime, unsigned char &Day, unsigned char &Month, unsigned &Year, +bool ReadDateTime( const time_t EpochTime, bool LocalTime, unsigned char &Day, unsigned char &Month, unsigned &Year, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ) { struct tm CurrentTime; // Get current date and time - localtime_r( &EpochTime, &CurrentTime ); + if (LocalTime) + localtime_r( &EpochTime, &CurrentTime ); + else + gmtime_r( &EpochTime, &CurrentTime ); // Extract time Hours = CurrentTime.tm_hour; @@ -247,7 +314,7 @@ bool ReadTimeStr( const char *DateTimeStr, unsigned char &Hours, unsigned char Seconds = (TempSeconds != -1)? TempSeconds : (Maxtime)? 59 : 0; // Check if success - return ((ItemsAssigned == 6)? true : false); + return ((ItemsAssigned >= 3)? true : false); } //--------------------------------------------------------------------------- @@ -271,7 +338,7 @@ bool ReadDateStr( const char *DateTimeStr, unsigned char &Day, unsigned char &M Year = TempYear; // Check if success - return ((ItemsAssigned == 6)? true : false); + return ((ItemsAssigned >= 3)? true : false); } //--------------------------------------------------------------------------- @@ -300,19 +367,19 @@ bool ReadDateTimeStr( const char *DateTimeStr, unsigned char &Day, unsigned cha Seconds = (TempSeconds != -1)? TempSeconds : (Maxtime)? 59 : 0; // Check if success - return ((ItemsAssigned == 6)? true : false); + return ((ItemsAssigned >= 3)? true : false); } //--------------------------------------------------------------------------- // Get the current date in a string -char const * BuildDateStr( const time_t EpochTime, const char * DateSeparator ) +char const * BuildDateStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator ) { unsigned char Day; unsigned char Month; unsigned int Year; // Get Date - ReadDate( EpochTime, Day, Month, Year ); + ReadDate( EpochTime, LocalTime, Day, Month, Year ); // Build String sprintf( ReturnStr, "%04d%s%02d%s%02d", @@ -323,14 +390,14 @@ char const * BuildDateStr( const time_t EpochTime, const char * DateSeparator ) } //--------------------------------------------------------------------------- -char const * BuildTimeStr( const time_t EpochTime, const char * TimeSeparator ) +char const * BuildTimeStr( const time_t EpochTime, bool LocalTime, const char * TimeSeparator ) { unsigned char Hours; unsigned char Minutes; unsigned char Seconds; // Get Date & Time - ReadTime( EpochTime, Hours, Minutes, Seconds ); + ReadTime( EpochTime, LocalTime, Hours, Minutes, Seconds ); // Build String sprintf( ReturnStr, "%02d%s%02d%s%02d", @@ -340,7 +407,7 @@ char const * BuildTimeStr( const time_t EpochTime, const char * TimeSeparator ) } //--------------------------------------------------------------------------- -char const * BuildDateTimeStr( const time_t EpochTime, const char * DateSeparator, const char * TimeSeparator ) +char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator, const char * TimeSeparator ) { unsigned char Day; unsigned char Month; @@ -350,7 +417,7 @@ char const * BuildDateTimeStr( const time_t EpochTime, const char * DateSeparato unsigned char Seconds; // Get Date & Time - ReadDateTime( EpochTime, Day, Month, Year, Hours, Minutes, Seconds ); + ReadDateTime( EpochTime, LocalTime, Day, Month, Year, Hours, Minutes, Seconds ); // Build String sprintf( ReturnStr, "%04d%s%02d%s%02d %02d%s%02d%s%02d", diff --git a/DateTimeCore.h b/DateTimeCore.h index 7b3c198..e3992c3 100644 --- a/DateTimeCore.h +++ b/DateTimeCore.h @@ -17,11 +17,15 @@ //--------------------------------------------------------------------------- // Get and set System Date and Time -bool SetTime( unsigned char Hours, unsigned char Minutes, unsigned char Seconds ); bool GetTime( unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ); - -bool SetDate( unsigned char Day, unsigned char Month, unsigned Year ); bool GetDate( unsigned char &Day, unsigned char &Month, unsigned &Year ); +bool GetDateTime( unsigned char &Day, unsigned char &Month, unsigned &Year, + unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ); + +bool SetTime( unsigned char Hours, unsigned char Minutes, unsigned char Seconds ); +bool SetDate( unsigned char Day, unsigned char Month, unsigned Year ); +bool SetDateTime( unsigned char Day, unsigned char Month, unsigned Year, + unsigned char Hours, unsigned char Minutes, unsigned char Seconds ); char const * GetDateStr( const char * DateSeparator = "/" ); char const * GetTimeStr( const char * TimeSeparator = ":" ); @@ -29,9 +33,10 @@ char const * GetDateTimeStr( const char * DateSeparator = "/", const char * Tim //--------------------------------------------------------------------------- -bool ReadTime( const time_t EpochTime, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ); -bool ReadDate( const time_t EpochTime, unsigned char &Day, unsigned char &Month, unsigned &Year ); -bool ReadDateTime( const time_t EpochTime, unsigned char &Day, unsigned char &Month, unsigned &Year, +// Build or interpret time data +bool ReadTime( const time_t EpochTime, bool LocalTime, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ); +bool ReadDate( const time_t EpochTime, bool LocalTime, unsigned char &Day, unsigned char &Month, unsigned &Year ); +bool ReadDateTime( const time_t EpochTime, bool LocalTime, unsigned char &Day, unsigned char &Month, unsigned &Year, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds ); bool ReadTimeStr( const char *DateTimeStr, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds, bool Maxtime ); @@ -39,9 +44,9 @@ bool ReadDateStr( const char *DateTimeStr, unsigned char &Day, unsigned char bool ReadDateTimeStr( const char *DateTimeStr, unsigned char &Day, unsigned char &Month, unsigned &Year, unsigned char &Hours, unsigned char &Minutes, unsigned char &Seconds, bool Maxtime ); -char const * BuildDateStr( const time_t EpochTime, const char * DateSeparator = "/" ); -char const * BuildTimeStr( const time_t EpochTime, const char * TimeSeparator = ":" ); -char const * BuildDateTimeStr( const time_t EpochTime, const char * DateSeparator = "/", const char * TimeSeparator = ":" ); +char const * BuildDateStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator = "/" ); +char const * BuildTimeStr( const time_t EpochTime, bool LocalTime, const char * TimeSeparator = ":" ); +char const * BuildDateTimeStr( const time_t EpochTime, bool LocalTime, const char * DateSeparator = "/", const char * TimeSeparator = ":" ); //--------------------------------------------------------------------------- diff --git a/DeviceCore.cpp b/DeviceCore.cpp index d648dae..125c6cb 100644 --- a/DeviceCore.cpp +++ b/DeviceCore.cpp @@ -1534,7 +1534,7 @@ bool CDeviceCore::GetCmdParam( const char * Start, char * Param, char ** NextPar } //--------------------------------------------------------------------------- -int CDeviceCore::HandleCommand( const char *ChannelName, const char * Data, const int MaxLen ) +int CDeviceCore::HandleCommand( const char *ChannelName, const char * SourceRef, const char * Data, const int MaxLen ) { int Len; char Value[50]; diff --git a/DeviceCore.h b/DeviceCore.h index 7d601d5..a982257 100644 --- a/DeviceCore.h +++ b/DeviceCore.h @@ -387,7 +387,7 @@ public: // Handle Interface Commands bool GetCmdParam( const char * Start, char * Param, char ** NextParam ); - int HandleCommand( const char *ChannelName, const char * Data, const int MaxLen ); + int HandleCommand( const char *ChannelName, const char * SourceRef, const char * Data, const int MaxLen ); // Command Text Interfaces bool SetValue( TDeviceParam * Param, const char * Value, const int Len, bool Force ); diff --git a/FunctionCore.cpp b/FunctionCore.cpp index c7cc299..f56f82f 100644 --- a/FunctionCore.cpp +++ b/FunctionCore.cpp @@ -43,7 +43,6 @@ CFunctionCore::CFunctionCore( const char * pName, const char * pType ) : Type( p CFunctionCore::~CFunctionCore() { TChannel * NextChannel = NULL; - TChannelLink * NextLinkedChannel = NULL; // Destroy Channels while (FirstChannel)