cli_i.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include "cli.h"
  3. #include <furi.h>
  4. #include <furi_hal.h>
  5. #include <m-dict.h>
  6. #include <m-bptree.h>
  7. #include <m-array.h>
  8. #include "cli_vcp.h"
  9. #define CLI_LINE_SIZE_MAX
  10. #define CLI_COMMANDS_TREE_RANK 4
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. typedef struct {
  15. CliCallback callback;
  16. void* context;
  17. uint32_t flags;
  18. } CliCommand;
  19. struct CliSession {
  20. void (*init)(void);
  21. void (*deinit)(void);
  22. size_t (*rx)(uint8_t* buffer, size_t size, uint32_t timeout);
  23. void (*tx)(const uint8_t* buffer, size_t size);
  24. void (*tx_stdout)(const char* data, size_t size);
  25. bool (*is_connected)(void);
  26. };
  27. BPTREE_DEF2(
  28. CliCommandTree,
  29. CLI_COMMANDS_TREE_RANK,
  30. FuriString*,
  31. FURI_STRING_OPLIST,
  32. CliCommand,
  33. M_POD_OPLIST)
  34. #define M_OPL_CliCommandTree_t() BPTREE_OPLIST(CliCommandTree, M_POD_OPLIST)
  35. struct Cli {
  36. CliCommandTree_t commands;
  37. FuriMutex* mutex;
  38. FuriSemaphore* idle_sem;
  39. FuriString* last_line;
  40. FuriString* line;
  41. CliSession* session;
  42. size_t cursor_position;
  43. };
  44. Cli* cli_alloc();
  45. void cli_reset(Cli* cli);
  46. void cli_putc(Cli* cli, char c);
  47. void cli_stdout_callback(void* _cookie, const char* data, size_t size);
  48. #ifdef __cplusplus
  49. }
  50. #endif