settings.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. #include "settings.h"
  2. String Settings::getSettingsString() {
  3. return this->json_settings_string;
  4. }
  5. bool Settings::begin() {
  6. if(!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)){
  7. Serial.println("Settings SPIFFS Mount Failed");
  8. return false;
  9. }
  10. File settingsFile;
  11. //SPIFFS.remove("/settings.json"); // NEED TO REMOVE THIS LINE
  12. if (SPIFFS.exists("/settings.json")) {
  13. settingsFile = SPIFFS.open("/settings.json", FILE_READ);
  14. if (!settingsFile) {
  15. settingsFile.close();
  16. Serial.println(F("Could not find settings file"));
  17. if (this->createDefaultSettings(SPIFFS))
  18. return true;
  19. else
  20. return false;
  21. }
  22. }
  23. else {
  24. Serial.println("Settings file does not exist");
  25. if (this->createDefaultSettings(SPIFFS))
  26. return true;
  27. else
  28. return false;
  29. }
  30. String json_string;
  31. DynamicJsonDocument jsonBuffer(1024);
  32. DeserializationError error = deserializeJson(jsonBuffer, settingsFile);
  33. serializeJson(jsonBuffer, json_string);
  34. //Serial.println("Settings: " + (String)json_string + "\n");
  35. //this->printJsonSettings(json_string);
  36. this->json_settings_string = json_string;
  37. return true;
  38. }
  39. template <typename T>
  40. T Settings::loadSetting(String key) {}
  41. // Get type int settings
  42. template<>
  43. int Settings::loadSetting<int>(String key) {
  44. DynamicJsonDocument json(1024); // ArduinoJson v6
  45. if (deserializeJson(json, this->json_settings_string)) {
  46. Serial.println("\nCould not parse json");
  47. }
  48. for (int i = 0; i < json["Settings"].size(); i++) {
  49. if (json["Settings"][i]["name"].as<String>() == key)
  50. return json["Settings"][i]["value"];
  51. }
  52. return 0;
  53. }
  54. // Get type string settings
  55. template<>
  56. String Settings::loadSetting<String>(String key) {
  57. //return this->json_settings_string;
  58. DynamicJsonDocument json(1024); // ArduinoJson v6
  59. if (deserializeJson(json, this->json_settings_string)) {
  60. Serial.println("\nCould not parse json");
  61. }
  62. for (int i = 0; i < json["Settings"].size(); i++) {
  63. if (json["Settings"][i]["name"].as<String>() == key)
  64. return json["Settings"][i]["value"];
  65. }
  66. return "";
  67. }
  68. // Get type bool settings
  69. template<>
  70. bool Settings::loadSetting<bool>(String key) {
  71. DynamicJsonDocument json(1024); // ArduinoJson v6
  72. if (deserializeJson(json, this->json_settings_string)) {
  73. Serial.println("\nCould not parse json");
  74. }
  75. for (int i = 0; i < json["Settings"].size(); i++) {
  76. if (json["Settings"][i]["name"].as<String>() == key)
  77. return json["Settings"][i]["value"];
  78. }
  79. return false;
  80. }
  81. //Get type uint8_t settings
  82. template<>
  83. uint8_t Settings::loadSetting<uint8_t>(String key) {
  84. DynamicJsonDocument json(1024); // ArduinoJson v6
  85. if (deserializeJson(json, this->json_settings_string)) {
  86. Serial.println("\nCould not parse json");
  87. }
  88. for (int i = 0; i < json["Settings"].size(); i++) {
  89. if (json["Settings"][i]["name"].as<String>() == key)
  90. return json["Settings"][i]["value"];
  91. }
  92. return 0;
  93. }
  94. template <typename T>
  95. T Settings::saveSetting(String key, bool value) {}
  96. template<>
  97. bool Settings::saveSetting<bool>(String key, bool value) {
  98. DynamicJsonDocument json(1024); // ArduinoJson v6
  99. if (deserializeJson(json, this->json_settings_string)) {
  100. Serial.println("\nCould not parse json");
  101. }
  102. String settings_string;
  103. for (int i = 0; i < json["Settings"].size(); i++) {
  104. if (json["Settings"][i]["name"].as<String>() == key) {
  105. json["Settings"][i]["value"] = value;
  106. Serial.println("Saving setting...");
  107. File settingsFile = SPIFFS.open("/settings.json", FILE_WRITE);
  108. if (!settingsFile) {
  109. Serial.println(F("Failed to create settings file"));
  110. return false;
  111. }
  112. if (serializeJson(json, settingsFile) == 0) {
  113. Serial.println(F("Failed to write to file"));
  114. }
  115. if (serializeJson(json, settings_string) == 0) {
  116. Serial.println(F("Failed to write to string"));
  117. }
  118. // Close the file
  119. settingsFile.close();
  120. this->json_settings_string = settings_string;
  121. this->printJsonSettings(settings_string);
  122. return true;
  123. }
  124. }
  125. return false;
  126. }
  127. bool Settings::toggleSetting(String key) {
  128. DynamicJsonDocument json(1024); // ArduinoJson v6
  129. if (deserializeJson(json, this->json_settings_string)) {
  130. Serial.println("\nCould not parse json");
  131. }
  132. for (int i = 0; i < json["Settings"].size(); i++) {
  133. if (json["Settings"][i]["name"].as<String>() == key) {
  134. if (json["Settings"][i]["value"]) {
  135. saveSetting<bool>(key, false);
  136. Serial.println("Setting value to false");
  137. return false;
  138. }
  139. else {
  140. saveSetting<bool>(key, true);
  141. Serial.println("Setting value to true");
  142. return true;
  143. }
  144. return false;
  145. }
  146. }
  147. }
  148. String Settings::setting_index_to_name(int i) {
  149. DynamicJsonDocument json(1024); // ArduinoJson v6
  150. if (deserializeJson(json, this->json_settings_string)) {
  151. Serial.println("\nCould not parse json");
  152. }
  153. return json["Settings"][i]["name"];
  154. }
  155. int Settings::getNumberSettings() {
  156. DynamicJsonDocument json(1024); // ArduinoJson v6
  157. if (deserializeJson(json, this->json_settings_string)) {
  158. Serial.println("\nCould not parse json");
  159. }
  160. return json["Settings"].size();
  161. }
  162. String Settings::getSettingType(String key) {
  163. DynamicJsonDocument json(1024); // ArduinoJson v6
  164. if (deserializeJson(json, this->json_settings_string)) {
  165. Serial.println("\nCould not parse json");
  166. }
  167. for (int i = 0; i < json["Settings"].size(); i++) {
  168. if (json["Settings"][i]["name"].as<String>() == key)
  169. return json["Settings"][i]["type"];
  170. }
  171. }
  172. void Settings::printJsonSettings(String json_string) {
  173. DynamicJsonDocument json(1024); // ArduinoJson v6
  174. if (deserializeJson(json, json_string)) {
  175. Serial.println("\nCould not parse json");
  176. }
  177. Serial.println("Settings\n----------------------------------------------");
  178. for (int i = 0; i < json["Settings"].size(); i++) {
  179. Serial.println("Name: " + json["Settings"][i]["name"].as<String>());
  180. Serial.println("Type: " + json["Settings"][i]["type"].as<String>());
  181. Serial.println("Value: " + json["Settings"][i]["value"].as<String>());
  182. Serial.println("----------------------------------------------");
  183. }
  184. }
  185. bool Settings::createDefaultSettings(fs::FS &fs) {
  186. Serial.println(F("Creating default settings file: settings.json"));
  187. File settingsFile = fs.open("/settings.json", FILE_WRITE);
  188. if (!settingsFile) {
  189. Serial.println(F("Failed to create settings file"));
  190. return false;
  191. }
  192. DynamicJsonDocument jsonBuffer(1024);
  193. String settings_string;
  194. //jsonBuffer["Settings"][0]["name"] = "Channel";
  195. //jsonBuffer["Settings"][0]["type"] = "uint8_t";
  196. //jsonBuffer["Settings"][0]["value"] = 11;
  197. //jsonBuffer["Settings"][0]["range"]["min"] = 1;
  198. //jsonBuffer["Settings"][0]["range"]["max"] = 14;
  199. //jsonBuffer["Settings"][1]["name"] = "Channel Hop Delay";
  200. //jsonBuffer["Settings"][1]["type"] = "int";
  201. //jsonBuffer["Settings"][1]["value"] = 1;
  202. //jsonBuffer["Settings"][1]["range"]["min"] = 1;
  203. //jsonBuffer["Settings"][1]["range"]["max"] = 10;
  204. jsonBuffer["Settings"][0]["name"] = "ForcePMKID";
  205. jsonBuffer["Settings"][0]["type"] = "bool";
  206. jsonBuffer["Settings"][0]["value"] = true;
  207. jsonBuffer["Settings"][0]["range"]["min"] = false;
  208. jsonBuffer["Settings"][0]["range"]["max"] = true;
  209. jsonBuffer["Settings"][1]["name"] = "ForceProbe";
  210. jsonBuffer["Settings"][1]["type"] = "bool";
  211. jsonBuffer["Settings"][1]["value"] = true;
  212. jsonBuffer["Settings"][1]["range"]["min"] = false;
  213. jsonBuffer["Settings"][1]["range"]["max"] = true;
  214. jsonBuffer["Settings"][2]["name"] = "SavePCAP";
  215. jsonBuffer["Settings"][2]["type"] = "bool";
  216. jsonBuffer["Settings"][2]["value"] = true;
  217. jsonBuffer["Settings"][2]["range"]["min"] = false;
  218. jsonBuffer["Settings"][2]["range"]["max"] = true;
  219. //jsonBuffer.printTo(settingsFile);
  220. if (serializeJson(jsonBuffer, settingsFile) == 0) {
  221. Serial.println(F("Failed to write to file"));
  222. }
  223. if (serializeJson(jsonBuffer, settings_string) == 0) {
  224. Serial.println(F("Failed to write to string"));
  225. }
  226. // Close the file
  227. settingsFile.close();
  228. this->json_settings_string = settings_string;
  229. this->printJsonSettings(settings_string);
  230. return true;
  231. }
  232. void Settings::main(uint32_t currentTime) {
  233. }