diff --git a/pin_control/CMakeLists.txt b/pin_control/CMakeLists.txt new file mode 100644 index 0000000..93a5805 --- /dev/null +++ b/pin_control/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.20) + +project(PinControl) +find_package(PkgConfig REQUIRED) +pkg_check_modules(LIBGPIOD REQUIRED libgpiod) + +add_library(pin_control SHARED src/pin_control.c) + +target_include_directories(pin_control PUBLIC include/ PRIVATE ${LIBGPIOD_INCLUDE_DIRS}) +target_link_libraries(pin_control PUBLIC ${LIBGPIOD_LIBRARIES}) +set_target_properties(pin_control PROPERTIES POSITION_INDEPENDENT_CODE ON) + +target_compile_options(pin_control PUBLIC -Wall -Wextra -Werror) + +install(TARGETS pin_control LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES include/pin_control.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) \ No newline at end of file diff --git a/pin_control/default.nix b/pin_control/default.nix new file mode 100644 index 0000000..8c845ff --- /dev/null +++ b/pin_control/default.nix @@ -0,0 +1,10 @@ +{ stdenv, libgpiod, cmake, pkg-config }: +stdenv.mkDerivation { + pname = "pin_control"; + version = "0.0.1"; + src = ./.; + buildInputs = [ libgpiod ]; + nativeBuildInputs = [ cmake pkg-config ]; + + outputs = [ "out" "dev" ]; +} diff --git a/pin_control/pin_control.h b/pin_control/include/pin_control.h similarity index 100% rename from pin_control/pin_control.h rename to pin_control/include/pin_control.h diff --git a/pin_control/readme.md b/pin_control/readme.md index 5f8c1ca..c8d4cba 100644 --- a/pin_control/readme.md +++ b/pin_control/readme.md @@ -1 +1,5 @@ -gcc -o pin_contro_test main.c pin_control.c -lgpiod \ No newline at end of file +Compilation command: + +``` + +``` \ No newline at end of file diff --git a/pin_control/pin_control.c b/pin_control/src/pin_control.c similarity index 90% rename from pin_control/pin_control.c rename to pin_control/src/pin_control.c index b5d5cd9..aa2b386 100644 --- a/pin_control/pin_control.c +++ b/pin_control/src/pin_control.c @@ -74,6 +74,8 @@ int turn_off_all_pins() { } int button_presssed(int event, unsigned int pin, const struct timespec * timestamp, void *data) { + (void) event; + (void) timestamp; * (int *) data = (int) pin; return GPIOD_CTXLESS_EVENT_POLL_RET_STOP; } @@ -83,20 +85,20 @@ int wait_for_button_press(unsigned int pins[]) { int pressed_pin = -1; - struct timespec { - time_t 3600; /* Seconds */ - long 0; /* Nanoseconds */ - } ts; - - gpiod_ctxless_event_monitor_multiple(chip, + struct timespec ts = { + .tv_sec = 3600, + .tv_nsec = 0, + }; + + return gpiod_ctxless_event_monitor_multiple(GPIO_CHIP, GPIOD_CTXLESS_EVENT_FALLING_EDGE, pins, 5, true, "house-leds", - ts, // big timout + &ts, // big timout NULL, button_presssed, &pressed_pin - ) + ); }