From b369e3a1c00e0726f75b938fab0cdefadfcaaf6c Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Tue, 31 Oct 2017 11:58:04 +0100 Subject: [PATCH] shell: implement buzzer command --- source/shell/buzzer.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 source/shell/buzzer.c diff --git a/source/shell/buzzer.c b/source/shell/buzzer.c new file mode 100644 index 0000000..0c1d388 --- /dev/null +++ b/source/shell/buzzer.c @@ -0,0 +1,47 @@ +#include +#include +#include + +#include +#include + +extern struct buzzer buzzers[]; +extern size_t nbuzzers; + +int shell_buzzer(struct console *con, size_t argc, const char **argv) +{ + struct buzzer *buzzer; + size_t buzzer_id = 0; + uint32_t freq = 0; + int state = 0; + + if (argc >= 3) + freq = strtoul(argv[2], NULL, 0); + + if (argc >= 2) + state = (strcmp(argv[1], "on") == 0); + + if (argc >= 1) + buzzer_id = strtoul(argv[0], NULL, 0); + + fprintf(con->fp, "%u %d %u\n", buzzer_id, state, freq); + + if (buzzer_id > nbuzzers) { + fprintf(con->fp, "error: invalid buzzer ID %d\n", buzzer_id); + return -1; + } + + buzzer = buzzers + buzzer_id; + + if (!state) { + buzzer_disable(buzzer); + return 0; + } + + if (freq) + buzzer_set_freq(buzzer, freq); + + buzzer_enable(buzzer); + + return 0; +}