power_cli.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "power_cli.h"
  2. #include <furi_hal.h>
  3. #include <cli/cli.h>
  4. #include <lib/toolbox/args.h>
  5. #include <power/power_service/power.h>
  6. void power_cli_off(Cli* cli, string_t args) {
  7. UNUSED(cli);
  8. UNUSED(args);
  9. Power* power = furi_record_open("power");
  10. printf("It's now safe to disconnect USB from your flipper\r\n");
  11. osDelay(666);
  12. power_off(power);
  13. }
  14. void power_cli_reboot(Cli* cli, string_t args) {
  15. UNUSED(cli);
  16. UNUSED(args);
  17. power_reboot(PowerBootModeNormal);
  18. }
  19. void power_cli_reboot2dfu(Cli* cli, string_t args) {
  20. UNUSED(cli);
  21. UNUSED(args);
  22. power_reboot(PowerBootModeDfu);
  23. }
  24. static void power_cli_info_callback(const char* key, const char* value, bool last, void* context) {
  25. UNUSED(last);
  26. UNUSED(context);
  27. printf("%-24s: %s\r\n", key, value);
  28. }
  29. void power_cli_info(Cli* cli, string_t args) {
  30. UNUSED(cli);
  31. UNUSED(args);
  32. furi_hal_power_info_get(power_cli_info_callback, NULL);
  33. }
  34. void power_cli_debug(Cli* cli, string_t args) {
  35. UNUSED(cli);
  36. UNUSED(args);
  37. furi_hal_power_dump_state();
  38. }
  39. void power_cli_5v(Cli* cli, string_t args) {
  40. UNUSED(cli);
  41. if(!string_cmp(args, "0")) {
  42. furi_hal_power_disable_otg();
  43. } else if(!string_cmp(args, "1")) {
  44. furi_hal_power_enable_otg();
  45. } else {
  46. cli_print_usage("power_otg", "<1|0>", string_get_cstr(args));
  47. }
  48. }
  49. void power_cli_3v3(Cli* cli, string_t args) {
  50. UNUSED(cli);
  51. if(!string_cmp(args, "0")) {
  52. furi_hal_power_disable_external_3_3v();
  53. } else if(!string_cmp(args, "1")) {
  54. furi_hal_power_enable_external_3_3v();
  55. } else {
  56. cli_print_usage("power_ext", "<1|0>", string_get_cstr(args));
  57. }
  58. }
  59. static void power_cli_command_print_usage() {
  60. printf("Usage:\r\n");
  61. printf("power <cmd> <args>\r\n");
  62. printf("Cmd list:\r\n");
  63. printf("\toff\t - shutdown power\r\n");
  64. printf("\treboot\t - reboot\r\n");
  65. printf("\treboot2dfu\t - reboot to dfu bootloader\r\n");
  66. printf("\tinfo\t - show power info\r\n");
  67. printf("\tdebug\t - show debug information\r\n");
  68. printf("\t5v <0 or 1>\t - enable or disable 5v ext\r\n");
  69. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  70. printf("\t3v3 <0 or 1>\t - enable or disable 3v3 ext\r\n");
  71. }
  72. }
  73. void power_cli(Cli* cli, string_t args, void* context) {
  74. UNUSED(context);
  75. string_t cmd;
  76. string_init(cmd);
  77. do {
  78. if(!args_read_string_and_trim(args, cmd)) {
  79. power_cli_command_print_usage();
  80. break;
  81. }
  82. if(string_cmp_str(cmd, "off") == 0) {
  83. power_cli_off(cli, args);
  84. break;
  85. }
  86. if(string_cmp_str(cmd, "reboot") == 0) {
  87. power_cli_reboot(cli, args);
  88. break;
  89. }
  90. if(string_cmp_str(cmd, "reboot2dfu") == 0) {
  91. power_cli_reboot2dfu(cli, args);
  92. break;
  93. }
  94. if(string_cmp_str(cmd, "info") == 0) {
  95. power_cli_info(cli, args);
  96. break;
  97. }
  98. if(string_cmp_str(cmd, "debug") == 0) {
  99. power_cli_debug(cli, args);
  100. break;
  101. }
  102. if(string_cmp_str(cmd, "5v") == 0) {
  103. power_cli_5v(cli, args);
  104. break;
  105. }
  106. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  107. if(string_cmp_str(cmd, "3v3") == 0) {
  108. power_cli_3v3(cli, args);
  109. break;
  110. }
  111. }
  112. power_cli_command_print_usage();
  113. } while(false);
  114. string_clear(cmd);
  115. }
  116. void power_on_system_start() {
  117. #ifdef SRV_CLI
  118. Cli* cli = furi_record_open("cli");
  119. cli_add_command(cli, "power", CliCommandFlagParallelSafe, power_cli, NULL);
  120. furi_record_close("cli");
  121. #else
  122. UNUSED(power_cli);
  123. #endif
  124. }