diff --git a/applications/cli/cli_commands.c b/applications/cli/cli_commands.c index fab9f556..3e1e67e3 100644 --- a/applications/cli/cli_commands.c +++ b/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); } diff --git a/firmware/targets/api-hal-include/api-hal-vibro.h b/firmware/targets/api-hal-include/api-hal-vibro.h new file mode 100644 index 00000000..586b31f1 --- /dev/null +++ b/firmware/targets/api-hal-include/api-hal-vibro.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include +#include + +#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 diff --git a/firmware/targets/api-hal-include/api-hal.h b/firmware/targets/api-hal-include/api-hal.h index f547da45..5a6fdd93 100644 --- a/firmware/targets/api-hal-include/api-hal.h +++ b/firmware/targets/api-hal-include/api-hal.h @@ -22,5 +22,6 @@ template 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(); diff --git a/firmware/targets/f5/api-hal/api-hal-vibro.c b/firmware/targets/f5/api-hal/api-hal-vibro.c new file mode 100644 index 00000000..d418aacc --- /dev/null +++ b/firmware/targets/f5/api-hal/api-hal-vibro.c @@ -0,0 +1,11 @@ +#include +#include + +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); +} diff --git a/firmware/targets/f5/api-hal/api-hal.c b/firmware/targets/f5/api-hal/api-hal.c index f337be81..c2da1754 100644 --- a/firmware/targets/f5/api-hal/api-hal.c +++ b/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(); }