storage.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "storage.h"
  2. #include <EEPROM.h>
  3. #define SSID_LENGTH 64
  4. #define PASSWORD_LENGTH 64
  5. #define HOSTNAME_LENGTH 32
  6. struct Config {
  7. // WIFI
  8. char SSID[SSID_LENGTH];
  9. char WifiPassword[PASSWORD_LENGTH];
  10. char Hostname[HOSTNAME_LENGTH];
  11. char OTAPassword[PASSWORD_LENGTH];
  12. } currentConfig;
  13. const size_t ConfigLength = sizeof(currentConfig);
  14. void ReadConfig() {
  15. char *c = (char *)(&currentConfig);
  16. for (int i=0; i<ConfigLength;i++) {
  17. c[i] = EEPROM.read(i);
  18. if (c[i] == (char)255)
  19. c[i] = 0;
  20. }
  21. // Pad all strings to be null terminated
  22. currentConfig.SSID[SSID_LENGTH-1] = 0x00;
  23. currentConfig.WifiPassword[PASSWORD_LENGTH-1] = 0x00;
  24. currentConfig.OTAPassword[PASSWORD_LENGTH-1] = 0x00;
  25. currentConfig.Hostname[HOSTNAME_LENGTH-1] = 0x00;
  26. }
  27. void SaveConfig() {
  28. currentConfig.SSID[SSID_LENGTH-1] = 0x00;
  29. currentConfig.WifiPassword[PASSWORD_LENGTH-1] = 0x00;
  30. currentConfig.OTAPassword[PASSWORD_LENGTH-1] = 0x00;
  31. currentConfig.Hostname[HOSTNAME_LENGTH-1] = 0x00;
  32. char *c = (char *)(&currentConfig);
  33. for (int i=0; i<ConfigLength;i++) {
  34. EEPROM.write(i, c[i]);
  35. }
  36. EEPROM.commit();
  37. }
  38. String GetWifiSSID() {
  39. return String(currentConfig.SSID);
  40. }
  41. String GetWifiPassword() {
  42. return String(currentConfig.WifiPassword);
  43. }
  44. String GetOTAPassword() {
  45. return String(currentConfig.OTAPassword);
  46. }
  47. String GetHostname() {
  48. return String(currentConfig.Hostname);
  49. }
  50. void SaveWifiSSID(String ssid) {
  51. int maxLen = SSID_LENGTH-1;
  52. if (ssid.length() < maxLen) {
  53. maxLen = ssid.length();
  54. }
  55. for (int i = 0; i < SSID_LENGTH; i++) {
  56. if (i < maxLen) {
  57. currentConfig.SSID[i] = ssid[i];
  58. } else {
  59. currentConfig.SSID[i] = 0x00;
  60. }
  61. }
  62. SaveConfig();
  63. }
  64. void SaveWifiPassword(String pass) {
  65. int maxLen = PASSWORD_LENGTH-1;
  66. if (pass.length() < maxLen) {
  67. maxLen = pass.length();
  68. }
  69. for (int i = 0; i < PASSWORD_LENGTH; i++) {
  70. if (i < maxLen) {
  71. currentConfig.WifiPassword[i] = pass[i];
  72. } else {
  73. currentConfig.WifiPassword[i] = 0x00;
  74. }
  75. }
  76. SaveConfig();
  77. }
  78. void SaveOTAPassword(String pass) {
  79. int maxLen = PASSWORD_LENGTH-1;
  80. if (pass.length() < maxLen) {
  81. maxLen = pass.length();
  82. }
  83. for (int i = 0; i < PASSWORD_LENGTH; i++) {
  84. if (i < maxLen) {
  85. currentConfig.OTAPassword[i] = pass[i];
  86. } else {
  87. currentConfig.OTAPassword[i] = 0x00;
  88. }
  89. }
  90. SaveConfig();
  91. }
  92. void SaveHostname(String hostname) {
  93. int maxLen = HOSTNAME_LENGTH-1;
  94. if (hostname.length() < maxLen) {
  95. maxLen = hostname.length();
  96. }
  97. for (int i = 0; i < HOSTNAME_LENGTH; i++) {
  98. if (i < maxLen) {
  99. currentConfig.Hostname[i] = hostname[i];
  100. } else {
  101. currentConfig.Hostname[i] = 0x00;
  102. }
  103. }
  104. SaveConfig();
  105. }
  106. void InitStorage() {
  107. EEPROM.begin(ConfigLength);
  108. #if 1
  109. SaveWifiSSID("Hyperion-2");
  110. SaveWifiPassword("eUrPp7xtbexWm4TEu7nDtGLRcGP9hvYo");
  111. SaveHostname("max80");
  112. SaveOTAPassword("max80");
  113. #endif
  114. ReadConfig();
  115. }