CommonCLI.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #pragma once
  2. #include "Mesh.h"
  3. #include <helpers/IdentityStore.h>
  4. #include <helpers/SensorManager.h>
  5. #include <helpers/ClientACL.h>
  6. #if defined(WITH_RS232_BRIDGE) || defined(WITH_ESPNOW_BRIDGE)
  7. #define WITH_BRIDGE
  8. #endif
  9. #define ADVERT_LOC_NONE 0
  10. #define ADVERT_LOC_SHARE 1
  11. #define ADVERT_LOC_PREFS 2
  12. struct NodePrefs { // persisted to file
  13. float airtime_factor;
  14. char node_name[32];
  15. double node_lat, node_lon;
  16. char password[16];
  17. float freq;
  18. int8_t tx_power_dbm;
  19. uint8_t disable_fwd;
  20. uint8_t advert_interval; // minutes / 2
  21. uint8_t flood_advert_interval; // hours
  22. float rx_delay_base;
  23. float tx_delay_factor;
  24. char guest_password[16];
  25. float direct_tx_delay_factor;
  26. uint32_t guard;
  27. uint8_t sf;
  28. uint8_t cr;
  29. uint8_t allow_read_only;
  30. uint8_t multi_acks;
  31. float bw;
  32. uint8_t flood_max;
  33. uint8_t interference_threshold;
  34. uint8_t agc_reset_interval; // secs / 4
  35. // Bridge settings
  36. uint8_t bridge_enabled; // boolean
  37. uint16_t bridge_delay; // milliseconds (default 500 ms)
  38. uint8_t bridge_pkt_src; // 0 = logTx, 1 = logRx (default logTx)
  39. uint32_t bridge_baud; // 9600, 19200, 38400, 57600, 115200 (default 115200)
  40. uint8_t bridge_channel; // 1-14 (ESP-NOW only)
  41. char bridge_secret[16]; // for XOR encryption of bridge packets (ESP-NOW only)
  42. // Power setting
  43. uint8_t powersaving_enabled; // boolean
  44. // Gps settings
  45. uint8_t gps_enabled;
  46. uint32_t gps_interval; // in seconds
  47. uint8_t advert_loc_policy;
  48. uint32_t discovery_mod_timestamp;
  49. float adc_multiplier;
  50. char owner_info[120];
  51. };
  52. class CommonCLICallbacks {
  53. public:
  54. virtual void savePrefs() = 0;
  55. virtual const char* getFirmwareVer() = 0;
  56. virtual const char* getBuildDate() = 0;
  57. virtual const char* getRole() = 0;
  58. virtual bool formatFileSystem() = 0;
  59. virtual void sendSelfAdvertisement(int delay_millis, bool flood) = 0;
  60. virtual void updateAdvertTimer() = 0;
  61. virtual void updateFloodAdvertTimer() = 0;
  62. virtual void setLoggingOn(bool enable) = 0;
  63. virtual void eraseLogFile() = 0;
  64. virtual void dumpLogFile() = 0;
  65. virtual void setTxPower(int8_t power_dbm) = 0;
  66. virtual void formatNeighborsReply(char *reply) = 0;
  67. virtual void removeNeighbor(const uint8_t* pubkey, int key_len) {
  68. // no op by default
  69. };
  70. virtual void formatStatsReply(char *reply) = 0;
  71. virtual void formatRadioStatsReply(char *reply) = 0;
  72. virtual void formatPacketStatsReply(char *reply) = 0;
  73. virtual mesh::LocalIdentity& getSelfId() = 0;
  74. virtual void saveIdentity(const mesh::LocalIdentity& new_id) = 0;
  75. virtual void clearStats() = 0;
  76. virtual void applyTempRadioParams(float freq, float bw, uint8_t sf, uint8_t cr, int timeout_mins) = 0;
  77. virtual void setBridgeState(bool enable) {
  78. // no op by default
  79. };
  80. virtual void restartBridge() {
  81. // no op by default
  82. };
  83. };
  84. class CommonCLI {
  85. mesh::RTCClock* _rtc;
  86. NodePrefs* _prefs;
  87. CommonCLICallbacks* _callbacks;
  88. mesh::MainBoard* _board;
  89. SensorManager* _sensors;
  90. ClientACL* _acl;
  91. char tmp[PRV_KEY_SIZE*2 + 4];
  92. mesh::RTCClock* getRTCClock() { return _rtc; }
  93. void savePrefs();
  94. void loadPrefsInt(FILESYSTEM* _fs, const char* filename);
  95. public:
  96. CommonCLI(mesh::MainBoard& board, mesh::RTCClock& rtc, SensorManager& sensors, ClientACL& acl, NodePrefs* prefs, CommonCLICallbacks* callbacks)
  97. : _board(&board), _rtc(&rtc), _sensors(&sensors), _acl(&acl), _prefs(prefs), _callbacks(callbacks) { }
  98. void loadPrefs(FILESYSTEM* _fs);
  99. void savePrefs(FILESYSTEM* _fs);
  100. void handleCommand(uint32_t sender_timestamp, const char* command, char* reply);
  101. uint8_t buildAdvertData(uint8_t node_type, uint8_t* app_data);
  102. };