You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.0 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "config.h"
  2. #include <lwip/sockets.h>
  3. #include "lwip/api.h"
  4. #include "lwip/opt.h"
  5. #include "lwip/sys.h"
  6. #include "zflash.h"
  7. #include "zboard.h"
  8. #define FLASH_WRITE(data) \
  9. status = FlashWrite(config_flash_write_start_address, data); \
  10. if (status != HAL_OK) \
  11. { \
  12. printf("flash write error, status:%d\r\n", status); \
  13. return -2; \
  14. } \
  15. config_flash_write_start_address += 4;
  16. #define FLASH_READ(data) \
  17. data = FlashRead(config_flash_write_start_address); \
  18. config_flash_write_start_address += 4;
  19. #define CONFIG_SIZE ((sizeof(config_t) / 4) + ((sizeof(config_t) % 4) > 0 ? 1 : 0))
  20. #define COINFIG_WRITED_FLAG 0X88888888
  21. static config_t s_config;
  22. static bool s_is_first_init = false;
  23. void config_init(void)
  24. {
  25. config_flash_read();
  26. if (s_config.config_writed_flag != COINFIG_WRITED_FLAG)
  27. {
  28. IP4_ADDR((ip4_addr_t *)&s_config.ip, 192, 168, 8, 10);
  29. IP4_ADDR((ip4_addr_t *)&s_config.gw, 192, 168, 8, 1);
  30. IP4_ADDR((ip4_addr_t *)&s_config.netmask, 255, 255, 255, 0);
  31. s_config.localport = SERVICE_PORT;
  32. s_config.obtaining_ip_mode = OBTAINING_IP_MODE_DHCP; // dhcp
  33. s_config.mask = 1; //
  34. s_config.config_writed_flag = COINFIG_WRITED_FLAG;
  35. if (config_flash_write() < 0)
  36. {
  37. printf("flash write config error\r\n");
  38. }
  39. else
  40. {
  41. printf("flash write config success\r\n");
  42. }
  43. }
  44. /*dumpconfig*/
  45. config_dump_config();
  46. }
  47. bool config_is_first_init(void) { return s_is_first_init; }
  48. void config_dump_config(void)
  49. {
  50. printf("=================config================\r\n");
  51. printf("= config obtaining_ip_mode %u\r\n", s_config.obtaining_ip_mode);
  52. printf("= config ip %s\r\n", inet_ntoa(s_config.ip));
  53. printf("= config gw: %s\r\n", inet_ntoa(s_config.gw));
  54. printf("= config netmask: %s\r\n", inet_ntoa(s_config.netmask));
  55. printf("= config localport: %u\r\n", s_config.localport);
  56. }
  57. void config_flash_read(void)
  58. {
  59. uint32_t config_flash_write_start_address = FLASH_START_ADDRESS;
  60. FLASH_READ(s_config.mask);
  61. FLASH_READ(s_config.obtaining_ip_mode);
  62. FLASH_READ(s_config.ip);
  63. FLASH_READ(s_config.gw);
  64. FLASH_READ(s_config.netmask);
  65. FLASH_READ(s_config.localport);
  66. FLASH_READ(s_config.config_writed_flag);
  67. }
  68. config_t *config_get(void) { return &s_config; }
  69. int8_t config_flash_write(void)
  70. {
  71. HAL_StatusTypeDef status;
  72. uint32_t config_flash_write_start_address = FLASH_START_ADDRESS;
  73. status = FlashErase();
  74. if (status != HAL_OK)
  75. {
  76. printf("flash erase error, status:%d\r\n", status);
  77. return -1;
  78. }
  79. FLASH_WRITE(s_config.mask);
  80. FLASH_WRITE(s_config.obtaining_ip_mode);
  81. FLASH_WRITE(s_config.ip);
  82. FLASH_WRITE(s_config.gw);
  83. FLASH_WRITE(s_config.netmask);
  84. FLASH_WRITE(s_config.localport);
  85. FLASH_WRITE(s_config.config_writed_flag);
  86. return 0;
  87. }