cli.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef __CLI_H
  2. #define __CLI_H
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "FreeRTOS.h"
  6. #include "fr_timers.h"
  7. #include "settings_api.h"
  8. #include "log.h"
  9. #if defined TELNET_ENABLE || defined SSH_ENABLE
  10. #define CLI_ENABLE
  11. #endif
  12. /* Dimensions the buffer into which input characters are placed. */
  13. #define cmdMAX_INPUT_SIZE 144
  14. #define MAX_SESSIONS 5
  15. #define array_len(x) (sizeof(x)/sizeof(x[0]))
  16. typedef enum{
  17. CLI_AUTH = 0,
  18. CLI_AUTH_PASSW,
  19. CLI_CMD,
  20. CLI_CHANGE_PWD,
  21. CLI_CHANGE_PWD_ACK
  22. } input_state_t;
  23. typedef enum {
  24. STATE_UNUSED,
  25. STATE_NORMAL,
  26. STATE_CLOSE,
  27. } conn_state_t;
  28. /**
  29. * A cli connection structure.
  30. */
  31. typedef struct {
  32. TimerHandle_t RepeatSensorInfoTimer;
  33. conn_state_t state;
  34. char buf[cmdMAX_INPUT_SIZE];
  35. uint_fast8_t bufptr;
  36. char prev_cmd[cmdMAX_INPUT_SIZE];
  37. uint8_t optlen;
  38. input_state_t input_state;
  39. user_level_t user_id;
  40. user_level_t id_change_pwd;
  41. char login[MAX_WEB_LOGIN_LEN];
  42. uint8_t login_err; // the number of failed password entry attempts
  43. bool flag_telnet_ip_option; // wtf is this
  44. void (*send)(intptr_t fd, const char *str, unsigned len);
  45. intptr_t num_connect; // fd
  46. } cli_state_t;
  47. extern cli_state_t cli_states[MAX_SESSIONS];
  48. extern const char pcWarningMessage[];
  49. extern const unsigned pcWarningMessageLen;
  50. void cli_init(void);
  51. void cli_getchar(cli_state_t *s, char incoming_char, bool echo_enabled);
  52. cli_state_t *alloc_state(void);
  53. void free_state(cli_state_t *state);
  54. void cli_hello(cli_state_t *cli_state);
  55. void cli_save_config(cli_state_t *cli_state);
  56. user_level_t cli_auth_user(const char *user, const char *password, log_type_t log_entry_type);
  57. void cli_close_connections(void);
  58. #endif