Skip to content

Commit

Permalink
Add support for Raspberry Pi Zero 2 W
Browse files Browse the repository at this point in the history
  • Loading branch information
visuve committed May 26, 2024
1 parent 5bb6ebf commit c1a1940
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 5 deletions.
21 changes: 20 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,26 @@
file(GLOB sykerolabs_src "*.cpp")

add_executable(sykerolabs ${sykerolabs_src})

set(BASE_MODEL_PATH "/sys/firmware/devicetree/base/model")

if (EXISTS ${BASE_MODEL_PATH})
file(READ ${BASE_MODEL_PATH} RPI_BASE_MODEL)
message("RPI_BASE_MODEL=${RPI_BASE_MODEL}")

if (${RPI_BASE_MODEL} MATCHES "Raspberry Pi Zero 2 W")
add_compile_definitions(SYKEROLABS_RPIZ2W)
elseif(${RPI_BASE_MODEL} MATCHES "Raspberry Pi 5")
add_compile_definitions(SYKEROLABS_RPI5)
else()
message(SEND_ERROR "Unsupported platform for Sykerolabs3!")
endif()
else()
message(WARNING "${BASE_MODEL_PATH} not found.")
add_compile_definitions(SYKEROLABS_RPI5)
endif()

target_precompile_headers(sykerolabs PRIVATE "mega.pch")
target_link_libraries(sykerolabs)

install(TARGETS sykerolabs)
install(TARGETS sykerolabs)
24 changes: 20 additions & 4 deletions src/sykerolabs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,22 @@ namespace sl
};
}

namespace paths
{
#ifdef SYKEROLABS_RPI5
constexpr char PWM[] = "/sys/class/pwm/pwmchip2";
constexpr char GPIO[] = "/dev/gpiochip4";
constexpr char THERMAL[] = "/sys/class/thermal/thermal_zone0/temp";
constexpr char ONEWIRE[] = "/sys/bus/w1/devices/";
#endif
#ifdef SYKEROLABS_RPIZ2W
constexpr char PWM[] = "/sys/class/pwm/pwmchip0";
constexpr char GPIO[] = "/dev/gpiochip0";
constexpr char THERMAL[] = "/sys/class/thermal/thermal_zone0/temp";
constexpr char ONEWIRE[] = "/sys/bus/w1/devices/";
#endif
}

std::atomic<int> signaled = 0;

constexpr size_t water_level_sensor_count = 2;
Expand Down Expand Up @@ -240,7 +256,7 @@ namespace sl
{
const std::regex regex("^28-[0-9a-f]{12}$");

for (const auto& entry : std::filesystem::directory_iterator("/sys/bus/w1/devices/"))
for (const auto& entry : std::filesystem::directory_iterator(sl::paths::ONEWIRE))
{
const std::filesystem::path path = entry.path();
const std::string filename = path.filename().string();
Expand Down Expand Up @@ -323,7 +339,7 @@ namespace sl
pins::FAN_2_TACHOMETER
};

gpio::chip chip("/dev/gpiochip4");
gpio::chip chip(sl::paths::GPIO);

// I do not have an oscilloscope so these values are arbitrary
constexpr auto water_level_sensor_debounce = std::chrono::milliseconds(10);
Expand All @@ -348,9 +364,9 @@ namespace sl
// Confusingly enough, the Rasperry Pi PWM 0 is in pwmchip2
// Fans use 25kHz https://www.mouser.com/pdfDocs/San_Ace_EPWMControlFunction.pdf
// https://noctua.at/pub/media/wysiwyg/Noctua_PWM_specifications_white_paper.pdf
pwm::chip fan_pwm("/sys/class/pwm/pwmchip2", 0, 25000);
pwm::chip fan_pwm(sl::paths::PWM, 0, 25000);

io::file_descriptor thermal_zone0("/sys/class/thermal/thermal_zone0/temp");
io::file_descriptor thermal_zone0(sl::paths::THERMAL);
io::file_descriptor ds18b20(find_temperature_sensor_path());

std::jthread water_level_monitoring_thread(monitor_water_level_sensors, std::cref(water_level_sensors));
Expand Down

0 comments on commit c1a1940

Please sign in to comment.