Skip to content

Commit

Permalink
pcf85063a: Set PICO_INCLUDE_RTC_DATETIME.
Browse files Browse the repository at this point in the history
And remove set_datetime and get_datetime gracefully when it's not set.

This is a temporary work-around for RP2350 lacking an RTC and not
requiring the datetime_t type. These functions should be re-implemented
in terms of C standards.
  • Loading branch information
Gadgetoid committed Nov 25, 2024
1 parent c08f496 commit b6f657f
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/pcf85063a/pcf85063a.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,9 @@ target_sources(${DRIVER_NAME} INTERFACE

target_include_directories(${DRIVER_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR})

# Include datetime_t for cross-compatibility with RP2350 (no RTC) boards
# TODO: We should migrate away from using this non-standard type
target_compile_definitions(${DRIVER_NAME} INTERFACE PICO_INCLUDE_RTC_DATETIME=1)

# Pull in pico libraries that we need
target_link_libraries(${DRIVER_NAME} INTERFACE pico_stdlib hardware_i2c pimoroni_i2c)
target_link_libraries(${DRIVER_NAME} INTERFACE pico_stdlib pico_util hardware_i2c pimoroni_i2c)
4 changes: 4 additions & 0 deletions drivers/pcf85063a/pcf85063a.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ namespace pimoroni {
return interrupt;
}

#if PICO_INCLUDE_RTC_DATETIME

datetime_t PCF85063A::get_datetime() {
uint8_t result[7] = {0};

Expand Down Expand Up @@ -85,6 +87,8 @@ namespace pimoroni {
i2c->write_bytes(address, Registers::SECONDS, data, 7);
}

#endif

void PCF85063A::set_alarm(int second, int minute, int hour, int day) {
uint8_t alarm[5] = {
uint8_t(second != PARAM_UNUSED ? bcd_encode(second) : 0x80),
Expand Down
2 changes: 2 additions & 0 deletions drivers/pcf85063a/pcf85063a.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,12 @@ namespace pimoroni {
int get_scl() const;
int get_int() const;

#if PICO_INCLUDE_RTC_DATETIME
// Set and get the date and time
// Uses datetime_t from pico sdk (hardware/rtc) for compatibility
datetime_t get_datetime();
void set_datetime(datetime_t *t);
#endif

// Alarm manipulation methods
void set_alarm(int second = PARAM_UNUSED, int minute = PARAM_UNUSED,
Expand Down

0 comments on commit b6f657f

Please sign in to comment.