Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel
ampel-firmware
Commits
2a388717
Commit
2a388717
authored
Feb 08, 2022
by
Eric Duminil
Browse files
Added custom code to NTP
parent
69c37eaf
Pipeline
#5754
canceled with stage
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
ampel-firmware/src/lib/NTPClient-master/NTPClient.cpp
View file @
2a388717
...
...
@@ -210,3 +210,50 @@ void NTPClient::setRandomPort(unsigned int minValue, unsigned int maxValue) {
randomSeed
(
analogRead
(
0
));
this
->
_port
=
random
(
minValue
,
maxValue
);
}
/*** Custom code for ampel-firmware ***/
void
NTPClient
::
getFormattedTime
(
char
*
formatted_time
,
unsigned
long
secs
)
{
unsigned
long
rawTime
=
secs
?
secs
:
this
->
getEpochTime
();
unsigned
int
hours
=
(
rawTime
%
86400L
)
/
3600
;
unsigned
int
minutes
=
(
rawTime
%
3600
)
/
60
;
unsigned
int
seconds
=
rawTime
%
60
;
snprintf
(
formatted_time
,
9
,
"%02d:%02d:%02d"
,
hours
,
minutes
,
seconds
);
}
#define LEAP_YEAR(Y) ( (Y>0) && !(Y%4) && ( (Y%100) || !(Y%400) ) )
// Based on https://github.com/PaulStoffregen/Time/blob/master/Time.cpp
void
NTPClient
::
getFormattedDate
(
char
*
formatted_date
,
unsigned
long
secs
)
{
unsigned
long
rawTime
=
(
secs
?
secs
:
this
->
getEpochTime
())
/
86400L
;
// in days
unsigned
long
days
=
0
,
year
=
1970
;
uint8_t
month
;
static
const
uint8_t
monthDays
[]
=
{
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
};
while
((
days
+=
(
LEAP_YEAR
(
year
)
?
366
:
365
))
<=
rawTime
)
year
++
;
rawTime
-=
days
-
(
LEAP_YEAR
(
year
)
?
366
:
365
);
// now it is days in this year, starting at 0
days
=
0
;
for
(
month
=
0
;
month
<
12
;
month
++
)
{
uint8_t
monthLength
;
if
(
month
==
1
)
{
// february
monthLength
=
LEAP_YEAR
(
year
)
?
29
:
28
;
}
else
{
monthLength
=
monthDays
[
month
];
}
if
(
rawTime
<
monthLength
)
break
;
rawTime
-=
monthLength
;
}
month
++
;
// jan is month 1
rawTime
++
;
// first day is day 1
char
formatted_time
[
9
];
this
->
getFormattedTime
(
formatted_time
,
secs
);
snprintf
(
formatted_date
,
23
,
"%4lu-%02d-%02lu %s%+03d"
,
year
,
month
,
rawTime
,
formatted_time
,
this
->
_timeOffset
/
3600
);
}
void
NTPClient
::
setEpochTime
(
unsigned
long
secs
)
{
this
->
_currentEpoc
=
secs
;
}
/**************************************************************/
\ No newline at end of file
ampel-firmware/src/lib/NTPClient-master/NTPClient.h
View file @
2a388717
...
...
@@ -111,4 +111,24 @@ class NTPClient {
* Stops the underlying UDP client
*/
void
end
();
/*** Custom code for ampel-firmware ***/
/**
* @return secs argument (or 0 for current time) formatted like `hh:mm:ss`
*/
void
getFormattedTime
(
char
*
formatted_time
,
unsigned
long
secs
=
0
);
/**
* @return secs argument (or 0 for current date) formatted to ISO 8601
* like `2004-02-12T15:19:21+00:00`
*/
void
getFormattedDate
(
char
*
formatted_date
,
unsigned
long
secs
=
0
);
/**
* Replace the NTP-fetched time with seconds since Jan. 1, 1970
*/
void
setEpochTime
(
unsigned
long
secs
);
/**************************************************************/
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment