Просмотр исходного кода

[FL-936] CLI commands for vibro, led and display backlight support (#367)

* api-hal: add api-hal-vibro
* cli: add vibro cli command
* cli: add cli commands for led and disp backlight
gornekich 4 лет назад
Родитель
Сommit
73e5379520

+ 52 - 0
applications/cli/cli_commands.c

@@ -74,6 +74,56 @@ void cli_command_log(string_t args, void* context) {
     furi_stdglue_set_global_stdout_callback(NULL);
 }
 
+void cli_command_vibro(string_t args, void* context) {
+    if(!string_cmp(args, "0")) {
+        api_hal_vibro_on(false);
+    } else if(!string_cmp(args, "1")) {
+        api_hal_vibro_on(true);
+    } else {
+        printf("Wrong input");
+    }
+}
+
+void cli_command_led(string_t args, void* context) {
+    // Get first word as light name
+    Light light;
+    string_t light_name;
+    string_init(light_name);
+    size_t ws = string_search_char(args, ' ');
+    if(ws == STRING_FAILURE) {
+        printf("Wrong input");
+        string_clear(light_name);
+        return;
+    } else {
+        string_set_n(light_name, args, 0, ws);
+        string_right(args, ws);
+        string_strim(args);
+    }
+    // Check light name
+    if(!string_cmp(light_name, "r")) {
+        light = LightRed;
+    } else if(!string_cmp(light_name, "g")) {
+        light = LightGreen;
+    } else if(!string_cmp(light_name, "b")) {
+        light = LightBlue;
+    } else if(!string_cmp(light_name, "bl")) {
+        light = LightBacklight;
+    } else {
+        printf("Wrong argument");
+        string_clear(light_name);
+        return;
+    }
+    string_clear(light_name);
+    // Read light value from the rest of the string
+    char* end_ptr;
+    uint32_t value = strtoul(string_get_cstr(args), &end_ptr, 0);
+    if(!(value < 256 && *end_ptr == '\0')) {
+        printf("Wrong argument");
+        return;
+    }
+    api_hal_light_set(light, value);
+}
+
 void cli_commands_init(Cli* cli) {
     cli_add_command(cli, "help", cli_command_help, cli);
     cli_add_command(cli, "?", cli_command_help, cli);
@@ -82,4 +132,6 @@ void cli_commands_init(Cli* cli) {
     cli_add_command(cli, "uid", cli_command_uuid, cli);
     cli_add_command(cli, "date", cli_command_date, cli);
     cli_add_command(cli, "log", cli_command_log, cli);
+    cli_add_command(cli, "vibro", cli_command_vibro, cli);
+    cli_add_command(cli, "led", cli_command_led, cli);
 }

+ 19 - 0
firmware/targets/api-hal-include/api-hal-vibro.h

@@ -0,0 +1,19 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <api-hal-resources.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Initialize vibro */
+void api_hal_vibro_init();
+
+/* Turn on/off vibro */
+void api_hal_vibro_on(bool value);
+
+#ifdef __cplusplus
+}
+#endif

+ 1 - 0
firmware/targets/api-hal-include/api-hal.h

@@ -22,5 +22,6 @@ template <unsigned int N> struct STOP_EXTERNING_ME {};
 #include "api-hal-spi.h"
 #include "api-hal-flash.h"
 #include "api-hal-subghz.h"
+#include "api-hal-vibro.h"
 
 void api_hal_init();

+ 11 - 0
firmware/targets/f5/api-hal/api-hal-vibro.c

@@ -0,0 +1,11 @@
+#include <api-hal-vibro.h>
+#include <api-hal-gpio.h>
+
+void api_hal_vibro_init() {
+    hal_gpio_init(&vibro_gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
+    hal_gpio_write(&vibro_gpio, false);
+}
+
+void api_hal_vibro_on(bool value) {
+    hal_gpio_write(&vibro_gpio, value);
+}

+ 1 - 0
firmware/targets/f5/api-hal/api-hal.c

@@ -7,4 +7,5 @@ void api_hal_init() {
     api_hal_i2c_init();
     api_hal_power_init();
     api_hal_light_init();
+    api_hal_vibro_init();
 }