settings_api.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. #ifndef SETTINGS_API_H
  2. #define SETTINGS_API_H
  3. #include "at32f403a_407.h"
  4. #include <stdbool.h>
  5. //#include "units.h"
  6. #include "usart.h"
  7. #include "sys_api.h"
  8. /* Reference SETTINGS_t structure size value */
  9. /* Modify this value every time you change its size and increse SETTINGS_VERSION value */
  10. #define REF_SETTINGS_SIZE 0x56C
  11. /* Changing SETTINGS_VERSION causes loading default settings on start. */
  12. #define SETTINGS_VERSION 0
  13. #define NUM_GSM 2 // количество GSM каналов (количество SIM)
  14. #define NUM_PORTGW 3 // количество прозрачных портов
  15. /* Максимальная длинна логина и пароля для входа в Web */
  16. #define MAX_WEB_LOGIN_LEN 11
  17. #define MAX_WEB_COOKIE_LEN 16
  18. /* Максимальная длинна строки параметра, передаваемого в Web */
  19. #define MAX_WEB_PARAM_LEN 102//64
  20. /* Max WEB users in the system/
  21. *
  22. **/
  23. #define MAX_WEB_USERS 1
  24. /**
  25. * @brief Параметры сетевого подключения
  26. */
  27. typedef struct
  28. {
  29. char ip[16];
  30. char gate[16];
  31. char mask[16];
  32. char dns1[16];
  33. char dns2[16];
  34. uint8_t dhcpEnable; // 0 - DHCP отключен, 1 - включен
  35. } WEB_PARAMS_t;
  36. /**
  37. * @brief Настройки Ethernet подключения
  38. */
  39. typedef struct
  40. {
  41. bool Enabled; // Вкл/Выкл Ethernet
  42. uint8_t prior; // Приоритет (1/2/3)
  43. char ip_test[32]; // IP-адрес проверки связи
  44. }ETHERNET_t;
  45. /**
  46. * @brief Типы профиля GSM
  47. */
  48. typedef enum
  49. {
  50. BEELINE = 0,
  51. MTS,
  52. MEGAFON,
  53. TELE2,
  54. USER,
  55. MAX_GSM_TYPES_PROFILE
  56. } type_profile_gsm_t;
  57. /**
  58. * @brief Типы GSM модема
  59. */
  60. typedef enum
  61. {
  62. SIM800 = 0,
  63. SIM7500,
  64. } MODEM_TYPE_t;
  65. /**
  66. * @brief Режим работы GSM модема
  67. */
  68. typedef enum
  69. {
  70. AUTOMATIC = 2,
  71. GSM_3G = 48,
  72. LTE = 38,
  73. WCDMA = 14,
  74. GSM = 13,
  75. } MODEM_MODE_t;
  76. /**
  77. * @brief Настройки GSM модуля
  78. */
  79. typedef struct
  80. {
  81. bool Enabled; // Вкл/Выкл GSM модуля
  82. uint8_t prior; // Приоритет (1/2/3)
  83. type_profile_gsm_t type_profile; // Тип профиля
  84. char APNaddr[64]; // Адрес точки доступа APN
  85. char APNlogin[32]; // Логин APN
  86. char APNpass[32]; // Пароль APN
  87. char ip_test[32]; // IP-адрес проверки связи
  88. char msisdn[14]; // Номер SIM-карты (MSISDN)
  89. uint32_t timeout; // Таймаут ожидания ответа, сек
  90. uint32_t period_test; // Время между проверками доступности канала связи
  91. uint8_t num_bad_connect; // Количество неудачных попыток до переключения канала
  92. MODEM_MODE_t modem_mode; // Режим работы GSM модема
  93. } GSM_t;
  94. /**
  95. * @brief Параметры SNTP
  96. */
  97. typedef struct
  98. {
  99. bool sntpEnable; // Вкл/выкл
  100. char ip1[16]; // Адрес SNTP сервера 1
  101. char ip2[16]; // Адрес SNTP сервера 2
  102. char data[30]; // Дата последней синхронизации
  103. float timeZone; // Часовой пояс
  104. } SNTP_t;
  105. /**
  106. * @brief Параметры сервера
  107. */
  108. typedef struct
  109. {
  110. bool serverEnable; // Вкл/выкл
  111. char ip[16]; // Адрес сервера
  112. uint16_t port; // Номер порта
  113. bool controlConnect; // Контроль соединения (1 - да; 0 - нет)
  114. } SERVER_t;
  115. /**
  116. * @brief Параметры PROXY PROXY
  117. */
  118. typedef struct
  119. {
  120. char ip[16]; // IP-адрес подключения
  121. uint16_t port; // Порт подключения
  122. uint8_t local_port; // Локальный порт
  123. } PROXY_t;
  124. /**
  125. * @brief Информация об устройстве
  126. */
  127. typedef struct
  128. {
  129. uint32_t id; // Цифровой идентификатор
  130. char productionData[40]; // Дата производства
  131. char mac[18]; // MAC адрес
  132. char serialNumber[16]; // Серийный номер
  133. char owner[102]; // Владелец
  134. char location[102]; // Адрес
  135. char comments[102]; // Комментарии
  136. char incharge[62]; // Ответсвенное лицо
  137. } DEVICE_INFO_t;
  138. /**
  139. * @brief Уровни пользователей Web.
  140. */
  141. typedef enum
  142. {
  143. FACTORY = 0,
  144. ADMIN,
  145. MAX_USER_LEVELS
  146. } user_level_t;
  147. /**
  148. * @brief Настройки аутентификации.
  149. */
  150. typedef struct
  151. {
  152. user_level_t level;
  153. char login[MAX_WEB_LOGIN_LEN];
  154. uint8_t hash[16];
  155. } AUTH_t;
  156. /**
  157. * @brief Флаги, ключи и т.д.
  158. */
  159. typedef struct
  160. {
  161. bool netsettingsChanged; // Признак изменения сетевых настроек пользователем
  162. char testState[16]; // Статус производственного тестирования
  163. } FLAGS_t;
  164. /**
  165. * @brief Типы транспорта прозрачного порта
  166. */
  167. typedef enum
  168. {
  169. GW_UDP = 0,
  170. GW_TCP,
  171. MAX_TRANS_TYPES
  172. } gwtrans_t;
  173. /**
  174. * @brief Режим прозрачного порта
  175. */
  176. typedef enum
  177. {
  178. GW_SERVER = 0,
  179. GW_CLIENT,
  180. MAX_MODE_TYPES
  181. } gwmode_t;
  182. /**
  183. * @brief Режим (RS-232/RS-485)
  184. */
  185. typedef enum
  186. {
  187. RS_232_1 = 0,
  188. RS_232_2,
  189. RS_232_3,
  190. RS_485_1,
  191. RS_485_2,
  192. MAX_RS_PORTS
  193. } rsmode_t;
  194. /**
  195. * @brief Тип порта (Модем / Прибор учета)
  196. */
  197. typedef enum
  198. {
  199. MODEM = 0,
  200. ACCOUNT_METER,
  201. MAX_DISPATCH_MODES
  202. } dispatchport_t;
  203. /**
  204. * @brief Настройки прозрачного порта
  205. */
  206. typedef struct
  207. {
  208. bool enableDispatch; // Параллельная диспетчеризация (Вкл./Выкл.)
  209. bool enabled; // Вкл/Откл
  210. dispatchport_t type_port; // Тип порта (Модем / Прибор учета)
  211. uint8_t connect_port; // Связанный порт (#1-#3)
  212. char description[30]; // Описание
  213. gwtrans_t transtype; // Тип транспорта
  214. gwmode_t mode; // Режим: Клиент/Сервер
  215. char ip[16]; // IP-адрес сервера (для клиента)
  216. uint16_t port; // Порт
  217. rsmode_t rs_mode; // Режим (RS-232/RS-485)
  218. uart_settings_t uart_set; // Настройки UART прозрачного порта
  219. } PORTGW_t;
  220. /**
  221. * @brief Режимы параллельной диспетчеризации
  222. */
  223. typedef enum
  224. {
  225. PSD_MODE_1 = 0, // RS232#1 <-> RS232#2, USART6 <-> RS232#3
  226. PSD_MODE_2, // RS485#1 <-> RS232#2, USART6 <-> RS232#3
  227. PSD_MODE_3, // RS232#1 <-> RS485#2, USART6 <-> RS232#3
  228. PSD_MODE_4, // RS485#1 <-> RS485#2, USART6 <-> RS232#3
  229. PSD_MODE_5, // RS232#1 <-> RS232#3
  230. PSD_MODE_6, // RS485#1 <-> RS232#3
  231. PSD_MODE_7, // USART1 <-> RS485#1, USART3 <-> RS485#2, USART4 <-> RS232#1, USART5 <-> RS232#2, USART6 <-> RS232#3,
  232. MAX_PSD_MODES
  233. } PSD_MODE_t;
  234. /**
  235. * @brief Настройки системы параллельной диспетчеризации
  236. */
  237. typedef struct
  238. {
  239. bool enabled; // Вкл/Откл
  240. PSD_MODE_t mux_mode; // Режим (управление мультиплексором)
  241. rsmode_t rs_mode; // Режим (RS-232/RS-485)
  242. uint8_t web_port; // На каком из прозрачных портов работает PSD
  243. uint16_t assd_timeout; // Timeout
  244. } PSD_t;
  245. /**
  246. * @brief Общая структура настроек
  247. */
  248. typedef struct
  249. {
  250. WEB_PARAMS_t sWebParams;
  251. WEB_PARAMS_t sWebTempParams;
  252. DEVICE_INFO_t sInfo;
  253. uint32_t CritSecCRC;
  254. /* WARNING! До поля CritSecCRC включительно структура настроек должна быть
  255. * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО.
  256. * Контроль целостности настроек внутри IAP выполняется только для критической секции,
  257. * т.к. контроль целостности всей структуры не имеет смысла
  258. * (структура настроек всегда будет отличаться внутри основного ПО).
  259. * В случае повреждения критического сектора, загружаются параметры по умолчанию. */
  260. GSM_t sGSM[NUM_GSM];
  261. FLAGS_t sFlags;
  262. ETHERNET_t sEthernet; //настройка подключения Ethernet
  263. SERVER_t sServer;
  264. PROXY_t sProxy;
  265. AUTH_t sAuth[MAX_WEB_USERS];
  266. PORTGW_t sPortGw[NUM_PORTGW]; // Настройки прозрачного порта
  267. SNTP_t sSNTP;
  268. PSD_t sPSD;
  269. uint16_t settVer; // Версия структуры настроек
  270. uint32_t controlWorld; // Слово для контроля целостности структуры настроек
  271. } SETTINGS_t;
  272. /**
  273. * @brief Общая структура настроек
  274. */
  275. extern SETTINGS_t sSettings;
  276. /**
  277. * @brief
  278. * @retval
  279. */
  280. uint32_t SETTINGS_GetCritSecCRC(void);
  281. /**
  282. * @brief Установить параметры сетевого подключения по умолчанию
  283. */
  284. void SETTINGS_SetWebParamsDef(void);
  285. /**
  286. * @brief Установить временные параметры сетевого подключения по умолчанию
  287. */
  288. void SETTINGS_SetTempWebParamsDef(void);
  289. /**
  290. * @brief Установить Информацию об устройстве по умолчанию
  291. */
  292. void SETTINGS_SetInfoDef(void);
  293. /**
  294. * @brief Установить параметры сетевого подключения по умолчанию
  295. */
  296. void SETTINGS_SetEthternetSwitchDef(void);
  297. /**
  298. * @brief Установить параметры GSM подключения по умолчанию
  299. */
  300. void SETTINGS_SetGSMDef(void);
  301. /**
  302. * @brief Установить параметры SNTP по умолчанию
  303. */
  304. void SETTINGS_SetSntpDef(void);
  305. /**
  306. * @brief Установить параметры подключения к серверу по умолчанию
  307. */
  308. void SETTINGS_SetServerParamsDef(void);
  309. /**
  310. * @brief Установить параметры PROXY по умолчанию
  311. */
  312. void SETTINGS_SetProxyParamsDef(void);
  313. /**
  314. * @brief Очистка сектора настроек
  315. */
  316. void SETTINGS_EraseFlashSector(void);
  317. /**
  318. * @brief Установить значение пароля по умолчанию
  319. */
  320. void SETTINGS_SetServiceDef(void);
  321. /**
  322. * @brief Установить значение настроек прозрачного порта по умолчанию
  323. */
  324. void SETTINGS_SetPortGwDef(void);
  325. /**
  326. * @brief Установить значение системы параллельной диспетчеризации по умолчанию
  327. */
  328. void SETTINGS_SetPDSDef(void);
  329. /**
  330. * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек
  331. */
  332. void SETTINGS_SetPartDefault(void);
  333. /**
  334. * @brief Сброс всех настроек в значения по умолчанию
  335. */
  336. void SETTINGS_SetAllDefault(void);
  337. /**
  338. * @brief Запись структуры настроек во flesh
  339. */
  340. void SETTINGS_Save(void);
  341. /**
  342. * @brief Загрузка структуры настроек из flesh
  343. */
  344. void SETTINGS_Load(void);
  345. /**
  346. * @brief
  347. */
  348. void SETTINGS_WriteToFlash(uint8_t *data, uint32_t size);
  349. /**
  350. * @brief
  351. */
  352. void SETTINGS_ReadFromFlash(uint8_t *data, uint32_t size);
  353. /**
  354. * @brief
  355. */
  356. uint32_t SETTINGS_GetCRC(void);
  357. /**
  358. * @brief Сброс флага boottry и сохранение структуры настроек
  359. */
  360. void SETTINGS_ResetBootTry(void);
  361. /**
  362. * @brief Преобразует mac адрес строкового формата в массив uint8_t
  363. * @param mac - буфер для вывода mac адреса
  364. */
  365. void SETTINGS_GetMac(uint8_t *mac);
  366. /**
  367. * @brief Установить дату производства
  368. */
  369. void SETTINGS_SetProDate(char *proDate, uint8_t len);
  370. /**
  371. * @brief Установить серийный номер
  372. */
  373. void SETTINGS_SetSerialNumber(char *sn, uint8_t len);
  374. /**
  375. * @brief Установить MAC
  376. */
  377. void SysSETTINGS_SetMAC(char *mac, uint8_t len);
  378. /**
  379. * @brief Установить статус тестирования
  380. */
  381. void SETTINGS_StatusTest(char *status, uint8_t len);
  382. /**
  383. * @brief Установить статус тестирования "T2OK"
  384. */
  385. void SETTINGS_SetT2OK(void);
  386. /**
  387. * @brief Сбросить статус тестирования "T2OK"
  388. */
  389. void SETTINGS_ResetT2OK(void);
  390. /**
  391. * @brief Устанавливает mac адрес исходя из unique id
  392. */
  393. void COM_SetTestMAC(void);
  394. /**
  395. * @brief Включить DHCP
  396. */
  397. void SETTINGS_SetDHCPOn(void);
  398. //
  399. void init_settings(void);
  400. //
  401. void SETTINGS_Print(void);
  402. //
  403. bool SETTINGS_Check_9b(void);
  404. //
  405. void SETTINGS_Replace_9b(void);
  406. // Системные настройки
  407. extern SYS_t sSys;
  408. #endif /* #ifndef SETTINGS_API_H */
  409. /********************************* (C) РОТЕК **********************************/