From 3361ec390daf13cd8aa085e9214c09d5a31c81e2 Mon Sep 17 00:00:00 2001 From: RetiredWizard Date: Sat, 21 Jan 2023 22:19:10 -0500 Subject: [PATCH 1/5] Broadcom port: Add 'fake' RTC support The Broadcom chips apparently don't have an RTC, so this PR uses the timer to add dummy RTC responses and allow resonable results from time.localtime() as well as setting the time and date while the board is powered. --- ports/broadcom/common-hal/rtc/RTC.c | 66 ++++++++++++++++++++++++ ports/broadcom/common-hal/rtc/RTC.h | 34 ++++++++++++ ports/broadcom/common-hal/rtc/__init__.c | 0 ports/broadcom/mpconfigport.mk | 2 +- ports/broadcom/supervisor/port.c | 2 +- 5 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 ports/broadcom/common-hal/rtc/RTC.c create mode 100644 ports/broadcom/common-hal/rtc/RTC.h create mode 100644 ports/broadcom/common-hal/rtc/__init__.c diff --git a/ports/broadcom/common-hal/rtc/RTC.c b/ports/broadcom/common-hal/rtc/RTC.c new file mode 100644 index 0000000000..9d219dbe05 --- /dev/null +++ b/ports/broadcom/common-hal/rtc/RTC.c @@ -0,0 +1,66 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Nick Moore for Adafruit Industries + * Copyright (c) 2019 Artur Pacholec + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include + +#include "py/obj.h" +#include "py/runtime.h" +#include "shared/timeutils/timeutils.h" +#include "shared-bindings/rtc/__init__.h" +#include "shared-bindings/rtc/RTC.h" +#include "common-hal/rtc/RTC.h" +#include "supervisor/port.h" +#include "supervisor/shared/translate/translate.h" + +void rtc_init(void) { +} + +// This is the time in seconds since 2000 that the RTC was started. +// TODO: Change the offset to ticks so that it can be a subsecond adjustment. +static uint32_t rtc_offset = 0; + +void common_hal_rtc_get_time(timeutils_struct_time_t *tm) { + uint64_t ticks_s = port_get_raw_ticks(NULL) / 1024; + timeutils_seconds_since_2000_to_struct_time(rtc_offset + ticks_s, tm); +} + +void common_hal_rtc_set_time(timeutils_struct_time_t *tm) { + uint64_t ticks_s = port_get_raw_ticks(NULL) / 1024; + uint32_t epoch_s = timeutils_seconds_since_2000( + tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec + ); + rtc_offset = epoch_s - ticks_s; +} + +int common_hal_rtc_get_calibration(void) { + return 0; +} + +void common_hal_rtc_set_calibration(int calibration) { + // SNVS has HPCALB_VAL bits for calibration. + mp_raise_NotImplementedError_varg(translate("%q"), MP_QSTR_calibration); +} diff --git a/ports/broadcom/common-hal/rtc/RTC.h b/ports/broadcom/common-hal/rtc/RTC.h new file mode 100644 index 0000000000..4965356c50 --- /dev/null +++ b/ports/broadcom/common-hal/rtc/RTC.h @@ -0,0 +1,34 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Noralf Trønnes + * Copyright (c) 2019 Artur Pacholec + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H +#define MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H + +extern void rtc_init(void); +extern void rtc_reset(void); + +#endif // MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H diff --git a/ports/broadcom/common-hal/rtc/__init__.c b/ports/broadcom/common-hal/rtc/__init__.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ports/broadcom/mpconfigport.mk b/ports/broadcom/mpconfigport.mk index 839ef00514..73c91752c6 100644 --- a/ports/broadcom/mpconfigport.mk +++ b/ports/broadcom/mpconfigport.mk @@ -15,7 +15,7 @@ CIRCUITPY_PARALLELDISPLAY = 0 CIRCUITPY_PULSEIO = 0 CIRCUITPY_PWMIO = 0 CIRCUITPY_ROTARYIO = 0 -CIRCUITPY_RTC = 0 +CIRCUITPY_RTC = 1 CIRCUITPY_SDIOIO = 1 CIRCUITPY_VIDEOCORE = 1 diff --git a/ports/broadcom/supervisor/port.c b/ports/broadcom/supervisor/port.c index e036a76cef..fcb86674c5 100644 --- a/ports/broadcom/supervisor/port.c +++ b/ports/broadcom/supervisor/port.c @@ -32,7 +32,7 @@ #include "genhdr/mpversion.h" -// #include "common-hal/rtc/RTC.h" +#include "common-hal/rtc/RTC.h" #include "common-hal/busio/I2C.h" #include "common-hal/busio/SPI.h" #include "common-hal/busio/UART.h" From 4f830f1bbb8038015a759a015281bcea6cfb7669 Mon Sep 17 00:00:00 2001 From: RetiredWizard Date: Sat, 21 Jan 2023 22:57:52 -0500 Subject: [PATCH 2/5] Fix parameter name and remove unnecessary function --- ports/broadcom/common-hal/rtc/RTC.c | 4 ---- ports/broadcom/common-hal/rtc/RTC.h | 7 +++---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/ports/broadcom/common-hal/rtc/RTC.c b/ports/broadcom/common-hal/rtc/RTC.c index 9d219dbe05..7be9a39803 100644 --- a/ports/broadcom/common-hal/rtc/RTC.c +++ b/ports/broadcom/common-hal/rtc/RTC.c @@ -32,13 +32,9 @@ #include "shared/timeutils/timeutils.h" #include "shared-bindings/rtc/__init__.h" #include "shared-bindings/rtc/RTC.h" -#include "common-hal/rtc/RTC.h" #include "supervisor/port.h" #include "supervisor/shared/translate/translate.h" -void rtc_init(void) { -} - // This is the time in seconds since 2000 that the RTC was started. // TODO: Change the offset to ticks so that it can be a subsecond adjustment. static uint32_t rtc_offset = 0; diff --git a/ports/broadcom/common-hal/rtc/RTC.h b/ports/broadcom/common-hal/rtc/RTC.h index 4965356c50..09ae4ea86f 100644 --- a/ports/broadcom/common-hal/rtc/RTC.h +++ b/ports/broadcom/common-hal/rtc/RTC.h @@ -25,10 +25,9 @@ * THE SOFTWARE. */ -#ifndef MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H -#define MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H +#ifndef MICROPY_INCLUDED_BROADCOM_COMMON_HAL_RTC_RTC_H +#define MICROPY_INCLUDED_BROADCOM_COMMON_HAL_RTC_RTC_H -extern void rtc_init(void); extern void rtc_reset(void); -#endif // MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_RTC_RTC_H +#endif // MICROPY_INCLUDED_BROADCOM_COMMON_HAL_RTC_RTC_H From 43b1d2618e259695bc9b0f16c7c701641b863244 Mon Sep 17 00:00:00 2001 From: RetiredWizard Date: Mon, 23 Jan 2023 14:19:27 -0500 Subject: [PATCH 3/5] Remove erroneous left over comment --- ports/broadcom/common-hal/rtc/RTC.c | 1 - 1 file changed, 1 deletion(-) diff --git a/ports/broadcom/common-hal/rtc/RTC.c b/ports/broadcom/common-hal/rtc/RTC.c index 7be9a39803..898a5c84bb 100644 --- a/ports/broadcom/common-hal/rtc/RTC.c +++ b/ports/broadcom/common-hal/rtc/RTC.c @@ -57,6 +57,5 @@ int common_hal_rtc_get_calibration(void) { } void common_hal_rtc_set_calibration(int calibration) { - // SNVS has HPCALB_VAL bits for calibration. mp_raise_NotImplementedError_varg(translate("%q"), MP_QSTR_calibration); } From fb4def282472de96b1e9bc7a0b05e62d9555c4b0 Mon Sep 17 00:00:00 2001 From: RetiredWizard Date: Mon, 23 Jan 2023 14:52:20 -0500 Subject: [PATCH 4/5] remove CIRCUITPY_RTC = 1 from mpconfigport.mk Full build includes the RTC bits so don't need to enable it in ports/broadcom/mpconfigport.mk --- ports/broadcom/mpconfigport.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/ports/broadcom/mpconfigport.mk b/ports/broadcom/mpconfigport.mk index 73c91752c6..b992d24f0e 100644 --- a/ports/broadcom/mpconfigport.mk +++ b/ports/broadcom/mpconfigport.mk @@ -15,7 +15,6 @@ CIRCUITPY_PARALLELDISPLAY = 0 CIRCUITPY_PULSEIO = 0 CIRCUITPY_PWMIO = 0 CIRCUITPY_ROTARYIO = 0 -CIRCUITPY_RTC = 1 CIRCUITPY_SDIOIO = 1 CIRCUITPY_VIDEOCORE = 1 From ecde85734ca90953821f95e647e63979a355f63d Mon Sep 17 00:00:00 2001 From: RetiredWizard Date: Mon, 23 Jan 2023 15:17:24 -0500 Subject: [PATCH 5/5] Remove a couple unneeded includes. --- ports/broadcom/common-hal/rtc/RTC.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ports/broadcom/common-hal/rtc/RTC.c b/ports/broadcom/common-hal/rtc/RTC.c index 898a5c84bb..8f6743cb05 100644 --- a/ports/broadcom/common-hal/rtc/RTC.c +++ b/ports/broadcom/common-hal/rtc/RTC.c @@ -30,10 +30,7 @@ #include "py/obj.h" #include "py/runtime.h" #include "shared/timeutils/timeutils.h" -#include "shared-bindings/rtc/__init__.h" -#include "shared-bindings/rtc/RTC.h" #include "supervisor/port.h" -#include "supervisor/shared/translate/translate.h" // This is the time in seconds since 2000 that the RTC was started. // TODO: Change the offset to ticks so that it can be a subsecond adjustment.