Merge branch 'main' of git.sr.ht:~fabianmv/triviOS
This commit is contained in:
commit
7a4f651bd2
16
pin_control/CMakeLists.txt
Normal file
16
pin_control/CMakeLists.txt
Normal file
|
@ -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})
|
10
pin_control/default.nix
Normal file
10
pin_control/default.nix
Normal file
|
@ -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" ];
|
||||||
|
}
|
|
@ -1 +1,5 @@
|
||||||
gcc -o pin_contro_test main.c pin_control.c -lgpiod
|
Compilation command:
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
|
@ -1,6 +1,8 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <gpiod.h>
|
#include <gpiod.h>
|
||||||
|
|
||||||
|
// https://docs.kernel.org/driver-api/gpio/using-gpio.html
|
||||||
|
|
||||||
#define GPIO_CHIP "gpiochip0"
|
#define GPIO_CHIP "gpiochip0"
|
||||||
|
|
||||||
struct gpiod_chip *chip;
|
struct gpiod_chip *chip;
|
||||||
|
@ -47,27 +49,6 @@ int set_pin_state(int pin, int state) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_button(int pin) {
|
|
||||||
// https://libgpiod-dlang.dpldocs.info/gpiod.gpiod_chip_get_line.html
|
|
||||||
struct gpiod_line *line = gpiod_chip_get_line(chip, pin + PIN_OFFSET);
|
|
||||||
if (!line) {
|
|
||||||
printf("Error getting GPIO line");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://libgpiod-dlang.dpldocs.info/gpiod.gpiod_line_request_input.html
|
|
||||||
if (gpiod_line_request_input(line, "house-leds") < 0) {
|
|
||||||
printf("Error setting GPIO line direction to input");
|
|
||||||
gpiod_line_release(line);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://libgpiod-dlang.dpldocs.info/gpiod.gpiod_line_get_value.html
|
|
||||||
int value = gpiod_line_get_value(line);
|
|
||||||
gpiod_line_release(line);
|
|
||||||
return value; // either 0 or 1
|
|
||||||
}
|
|
||||||
|
|
||||||
int turn_on_pin(int pin) {
|
int turn_on_pin(int pin) {
|
||||||
return set_pin_state(pin, 1);
|
return set_pin_state(pin, 1);
|
||||||
}
|
}
|
||||||
|
@ -92,11 +73,32 @@ int turn_off_all_pins() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wait_for_button_press(int button_pin) {
|
int button_presssed(int event, unsigned int pin, const struct timespec * timestamp, void *data) {
|
||||||
while (1) {
|
(void) event;
|
||||||
int button_state = read_button(button_pin); // maybe make it so that this works with a range of pins instead of just one
|
(void) timestamp;
|
||||||
if (button_state == 1) {
|
* (int *) data = (int) pin;
|
||||||
return button_pin;
|
return GPIOD_CTXLESS_EVENT_POLL_RET_STOP;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
int wait_for_button_press(unsigned int pins[]) {
|
||||||
|
// https://www.lane-fu.com/linuxmirror/libgpiod/doc/html/group______high__level____.html#ga3ac28eb59bbd31b8b2298f76047d377d
|
||||||
|
|
||||||
|
int pressed_pin = -1;
|
||||||
|
|
||||||
|
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
|
||||||
|
NULL,
|
||||||
|
button_presssed,
|
||||||
|
&pressed_pin
|
||||||
|
);
|
||||||
}
|
}
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
uwsgi = {
|
uwsgi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
group = "nginx";
|
|
||||||
|
user = "nginx";
|
||||||
plugins = [ "python3" ];
|
plugins = [ "python3" ];
|
||||||
|
|
||||||
instance = {
|
instance = {
|
||||||
|
|
Loading…
Reference in a new issue