From 88519ec9ad8fc7ce7fc3c45fb559bb0a4afb4d63 Mon Sep 17 00:00:00 2001 From: Kevin Townsend Date: Sat, 14 Apr 2012 21:22:43 +0200 Subject: [PATCH] Added missing files --- drivers/rtc/rtc.c | 85 ++++++++++++++++++ drivers/rtc/rtc.h | 45 ++++++++++ .../at86rf212_matching/Labels-SmithChart.png | Bin 12546 -> 0 bytes 3 files changed, 130 insertions(+) create mode 100644 drivers/rtc/rtc.c create mode 100644 drivers/rtc/rtc.h delete mode 100644 tools/validation/at86rf212_matching/Labels-SmithChart.png diff --git a/drivers/rtc/rtc.c b/drivers/rtc/rtc.c new file mode 100644 index 0000000..0875756 --- /dev/null +++ b/drivers/rtc/rtc.c @@ -0,0 +1,85 @@ +/**************************************************************************/ +/*! + @file rtc.c + @author K. Townsend (microBuilder.eu) + + @brief Generic time and RTC-related helper functions + + @section DESCRIPTION + + Time and RTC-related helper functions. + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2012, microBuilder SARL + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ +#include "rtc.h" + +/**************************************************************************/ +/*! + @brief Converts the supplied date and time to seconds since the + epoch (00h00, 1 Jan 1970). + + @section EXAMPLE + + @code + + long epochTime; + // 19 Jan 2012 at 13:42:27 ... DST unnknown (-1) + epochTime = rtcToEpochTime(2012, 0, 19, 13, 42, 27, -1); + + // Should return 1326980547 (number of seconds since epoch) + + @endcode +*/ +/**************************************************************************/ +long rtcToEpochTime(int year, int month, int mday, int hour, int min, int sec, int isdst) +{ + // This is purely a convenience function since it uses mktime beneath the hood + struct tm t; + time_t time; + + if (year > 1900) year -= 1900; + + t.tm_year = year; + t.tm_mon = month; // Month, 0 - jan + t.tm_mday = mday; // Day of the month + t.tm_hour = hour; + t.tm_min = min; + t.tm_sec = sec; + t.tm_isdst = isdst; // Is DST on? 1 = yes, 0 = no, -1 = unknown + time = mktime(&t); + + // Return seconds since the epoch (00h00, 1 Jan 1970) + return (long)time; +} + +void rtcFunction(void) +{ +} diff --git a/drivers/rtc/rtc.h b/drivers/rtc/rtc.h new file mode 100644 index 0000000..fea5513 --- /dev/null +++ b/drivers/rtc/rtc.h @@ -0,0 +1,45 @@ +/**************************************************************************/ +/*! + @file rtc.h + @author K. Townsend (microBuilder.eu) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2012, microBuilder SARL + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ + +#ifndef _RTC_H_ +#define _RTC_H_ + +#include +#include "projectconfig.h" + +long rtcToEpochTime(int year, int month, int mday, int hour, int min, int sec, int isdst); + +#endif diff --git a/tools/validation/at86rf212_matching/Labels-SmithChart.png b/tools/validation/at86rf212_matching/Labels-SmithChart.png deleted file mode 100644 index 4a2ac6ba816af7ba1dcd594968be79cecb9e5c85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12546 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