cli_i.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. #define CLI_LINE_SIZE_MAX
  9. #define CLI_COMMANDS_TREE_RANK 4
  10. typedef struct {
  11. CliCallback callback;
  12. void* context;
  13. uint32_t flags;
  14. } CliCommand;
  15. typedef struct CliSession CliSession;
  16. struct CliSession {
  17. void (*init)(void);
  18. void (*deinit)(void);
  19. size_t (*rx)(uint8_t* buffer, size_t size, uint32_t timeout);
  20. void (*tx)(const uint8_t* buffer, size_t size);
  21. void (*tx_stdout)(const char* data, size_t size);
  22. bool (*is_connected)(void);
  23. };
  24. BPTREE_DEF2(
  25. CliCommandTree,
  26. CLI_COMMANDS_TREE_RANK,
  27. string_t,
  28. STRING_OPLIST,
  29. CliCommand,
  30. M_POD_OPLIST)
  31. #define M_OPL_CliCommandTree_t() BPTREE_OPLIST(CliCommandTree, M_POD_OPLIST)
  32. struct Cli {
  33. CliCommandTree_t commands;
  34. FuriMutex* mutex;
  35. FuriSemaphore* idle_sem;
  36. string_t last_line;
  37. string_t line;
  38. CliSession* session;
  39. size_t cursor_position;
  40. };
  41. Cli* cli_alloc();
  42. void cli_reset(Cli* cli);
  43. void cli_putc(Cli* cli, char c);
  44. void cli_stdout_callback(void* _cookie, const char* data, size_t size);