onewire_cli.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include <cli/cli.h>
  4. #include <toolbox/args.h>
  5. #include <one_wire/one_wire_host.h>
  6. static void onewire_cli(Cli* cli, FuriString* args, void* context);
  7. void onewire_on_system_start() {
  8. #ifdef SRV_CLI
  9. Cli* cli = furi_record_open(RECORD_CLI);
  10. cli_add_command(cli, "onewire", CliCommandFlagDefault, onewire_cli, cli);
  11. furi_record_close(RECORD_CLI);
  12. #else
  13. UNUSED(onewire_cli);
  14. #endif
  15. }
  16. static void onewire_cli_print_usage() {
  17. printf("Usage:\r\n");
  18. printf("onewire search\r\n");
  19. };
  20. static void onewire_cli_search(Cli* cli) {
  21. UNUSED(cli);
  22. OneWireHost* onewire = onewire_host_alloc(&ibutton_gpio);
  23. uint8_t address[8];
  24. bool done = false;
  25. printf("Search started\r\n");
  26. onewire_host_start(onewire);
  27. furi_hal_power_enable_otg();
  28. while(!done) {
  29. if(onewire_host_search(onewire, address, OneWireHostSearchModeNormal) != 1) {
  30. printf("Search finished\r\n");
  31. onewire_host_reset_search(onewire);
  32. done = true;
  33. } else {
  34. printf("Found: ");
  35. for(uint8_t i = 0; i < 8; i++) {
  36. printf("%02X", address[i]);
  37. }
  38. printf("\r\n");
  39. }
  40. furi_delay_ms(100);
  41. }
  42. furi_hal_power_disable_otg();
  43. onewire_host_free(onewire);
  44. }
  45. void onewire_cli(Cli* cli, FuriString* args, void* context) {
  46. UNUSED(context);
  47. FuriString* cmd;
  48. cmd = furi_string_alloc();
  49. if(!args_read_string_and_trim(args, cmd)) {
  50. furi_string_free(cmd);
  51. onewire_cli_print_usage();
  52. return;
  53. }
  54. if(furi_string_cmp_str(cmd, "search") == 0) {
  55. onewire_cli_search(cli);
  56. }
  57. furi_string_free(cmd);
  58. }