45 lines
873 B
C
45 lines
873 B
C
#include <gpiod.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
#include "buzzer.h"
|
|
|
|
buzzer_handle_t init_buzzer()
|
|
{
|
|
struct gpiod_chip *chip = gpiod_chip_open_by_name("gpiochip1");
|
|
if (chip == NULL) {
|
|
fprintf(stderr, "Unable to find gpiochip1\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
struct gpiod_line *line = gpiod_chip_get_line(chip, 19);
|
|
if (line == NULL) {
|
|
fprintf(stderr, "Unable to get line 19\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
gpiod_line_request_output(line, "buzzer", 0);
|
|
|
|
return (buzzer_handle_t) {
|
|
chip,
|
|
line,
|
|
};
|
|
}
|
|
|
|
void sound_buzzer(buzzer_handle_t buzzer, int delay, int length)
|
|
{
|
|
for (int cycle = 0; cycle < length; cycle++) {
|
|
gpiod_line_set_value(buzzer.line, 1);
|
|
usleep(delay);
|
|
gpiod_line_set_value(buzzer.line, 0);
|
|
usleep(delay);
|
|
}
|
|
}
|
|
|
|
void destroy_buzzer(buzzer_handle_t buzzer)
|
|
{
|
|
gpiod_line_release(buzzer.line);
|
|
gpiod_chip_close(buzzer.chip);
|
|
}
|
|
|