12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133 |
- #include "at32f403a_407.h"
- #include "settings_api.h"
- #include "sys_api.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "queue.h"
- #include "semphr.h"
- #include "common_config.h"
- #include "common.h"
- #include "at32_uid.h"
- #include "hash.h"
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- SemaphoreHandle_t flash_mutex;
- // Флаг подтверждения новых сетевых параметров пользователем
- bool fConfirmWebParams = false;
-
- // Системные настройки
- sys_settings_t sys_settings;
- // Общая структура настроек
- settings_t settings;
- //
- void init_settings(void)
- {
- flash_mutex = xSemaphoreCreateMutex();
- }
- // Загрузка структуры настроек из flesh
- void settings_load(settings_t *settings)
- {
- uint32_t loadCRC; // CRC из flash
- uint32_t newCRC; // CRC загруженной структуры настроек
- bool need_default = false;
-
- settings_read_from_flash((uint8_t*)settings, sizeof(settings_t));
-
- // Считываем CRC из флеш памяти
- loadCRC = (*(uint32_t*)CRC_ADDRESS);
-
- // Рассчитываем CRC для структуры настроек
- newCRC = settings_get_crc(settings);
- // Если CRC не совпадают нужно прошивать дефолтные настройки
- if (loadCRC != newCRC) {
- need_default = true;
- }
- // CRC совпала, проверяем контрольное слово если слово не совпадает
- // то это значит, что поплыла структура нстроек, прошиваем дефолт
- else if (settings->control_word != SETTINGS_CONTROL_WORD)
- {
- need_default = true;
- }
- // CRC и контрольное слово совпали, проверяем номер версии настроек.
- // Если версия в настройках и прошивке не совпадают
- // (при обновлении изменили структуру настроек), прошиваем дефолт
- else if (settings->settings_version != SETTINGS_VERSION)
- {
- need_default = true;
- }
-
- // Прошиваем дефолтные настройки если нужно
- if (need_default)
- {
- settings_set_all_default();
- settings_save(settings);
- }
- #if 1
- //SETTINGS_Print();
- #endif
- }
- //
- void settings_read_from_flash(uint8_t *data, uint32_t size)
- {
- uint32_t baseAddress = SETTINGS_SECTOR;
-
- for (uint32_t i = 0; i < size; i++)
- *data++ = (*(uint32_t*)baseAddress++);;
- }
- //
- uint32_t settings_get_crc(settings_t *settings)
- {
- crc_data_reset();
- return crc_block_calculate((uint32_t*)settings, sizeof(settings_t)/4 - 1);
- }
- //
- uint32_t settings_get_crit_sec_crc(settings_t *settings)
- {
- crc_data_reset();
- uint32_t critsec_len = (uint32_t)((uint8_t *)(&settings->critical_section_crc) - (uint8_t *)settings) / 4;
- return crc_block_calculate((uint32_t *)settings, critsec_len);
- }
- // Сброс всех настроек в значения по умолчанию
- void settings_set_all_default(void)
- {
- settings_set_modbus_def(&settings.com_settings.mb_port);
-
- settings.settings_version = SETTINGS_VERSION;
- settings.critical_section_crc = settings_get_crit_sec_crc(&settings);
- settings.control_word = SETTINGS_CONTROL_WORD;
-
- #if 0
- SETTINGS_SetWebParamsDef();
- SETTINGS_SetTempWebParamsDef();
- SETTINGS_SetInfoDef();
- SETTINGS_SetGSMDef();
- SETTINGS_SetFlagsDef();
-
- SETTINGS_SetEthternetSwitchDef();
- SETTINGS_SetSntpDef();
- SETTINGS_SetServerParamsDef();
- SETTINGS_SetProxyParamsDef();
- SETTINGS_SetPortGwDef();
- SETTINGS_SetPSDDef();
- SETTINGS_SetServiceDef();
-
- sSettings.settVer = SETTINGS_VERSION;
-
- sSettings.CritSecCRC = settings_get_crit_sec_crc();
-
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- #endif
- }
- // -------------------------------------------------------------------------- //
- // Настройки по умолчанию
- //
- void settings_set_modbus_def(uint16_t *mb_port)
- {
- modbus_t mb_settings;
-
- mb_settings.baud = BRD_115200;
- mb_settings.parity = NO_PAR;
- mb_settings.databits = DATABITS_8;
- mb_settings.stopbits = STOP_1;
-
- settings_conv_modbus_def(&mb_settings, mb_port);
- }
- //
- void settings_conv_modbus_def(modbus_t *mb_settings, uint16_t *mb_port)
- {
- uint16_t param = 0;
- // Количестро стоп бит (0-1 биты)
- if (mb_settings->stopbits == STOP_1)
- param = 0x00;
- else if (mb_settings->stopbits == STOP_2)
- param = 0x02;
- // Длина слова (2ой бит)
- param |= 0x00 << 2;
- // Контроль четности (3-4 биты)
- if (mb_settings->parity == NO_PAR)
- param |= 0x00 << 3;
- else if (mb_settings->parity == EVEN_PAR)
- param |= 0x02 << 3;
- else if (mb_settings->parity == ODD_PAR)
- param |= 0x03 << 3;
- // Скорость (5 - 7 биты)
- switch (mb_settings->baud)
- {
- case BRD_2400 :
- param |= 0x00 << 5;
- break;
- case BRD_4800 :
- param |= 0x01 << 5;
- break;
- case BRD_9600 :
- param |= 0x02 << 5;
- break;
- case BRD_19200 :
- param |= 0x03 << 5;
- break;
- case BRD_38400 :
- param |= 0x04 << 5;
- break;
- case BRD_57600 :
- param |= 0x05 << 5;
- break;
- case BRD_115200 :
- param |= 0x06 << 5;
- break;
- default : break;
- }
- *mb_port = param;
- }
- // -------------------------------------------------------------------------- //
- // Запись структуры настроек во flash
- void settings_save(settings_t *settings)
- {
- xSemaphoreTake(flash_mutex, portMAX_DELAY);
-
- settings->critical_section_crc = settings_get_crit_sec_crc(settings);
-
- settings_write_to_flash((uint8_t*)settings, sizeof(settings_t));
- xSemaphoreGive(flash_mutex);
- }
- //
- void settings_write_to_flash(uint8_t *data, uint32_t size)
- {
- uint32_t baseAddress = SETTINGS_SECTOR;
- uint32_t checkCrc = 0;
- uint32_t crc = settings_get_crc((settings_t*)data);
- flash_status_type status;
- uint8_t *ptr = data;
-
- for (uint8_t i = 0; i < 3; i++)
- {
- flash_unlock();
-
- settings_erase_flash_sector();
- for (uint32_t i = 0; i < size; i++)
- if ((status = flash_byte_program(baseAddress++, *data++)) != FLASH_OPERATE_DONE) {
- DBG printf("FLASH_ProgramByte error: status = %d\r\n", status);
- break;
- }
-
- if ((status = flash_word_program((uint32_t)CRC_ADDRESS, crc)) != FLASH_OPERATE_DONE) {
- DBG printf("FLASH_ProgramWord error: status = %d\r\n", status);
- }
-
- flash_lock();
-
- /* Считываем что записали */
- settings_read_from_flash(ptr, sizeof(settings_t));
-
- checkCrc = settings_get_crc((settings_t*)ptr);
-
- /* Проверяем CRC того что было записано */
- if (checkCrc == crc)
- break;
- }
- }
- // Очистка сектора настроек
- void settings_erase_flash_sector(void)
- {
- flash_status_type status;
- if ((status = flash_sector_erase(SETTINGS_SECTOR)) != FLASH_OPERATE_DONE) {
- DBG printf("SETTINGS_EraseFlashSector error: status = %d/r/n", status);
- }
- }
- #if 0
- // Установить параметры сетевого подключения по умолчанию
- void SETTINGS_SetWebParamsDef(void)
- {
- strcpy(sSettings.sWebParams.ip, "192.168.10.254");
- strcpy(sSettings.sWebParams.gate, "192.168.10.1");
- strcpy(sSettings.sWebParams.mask, "255.255.255.0");
- strcpy(sSettings.sWebParams.dns1, "8.8.8.8");
- strcpy(sSettings.sWebParams.dns2, "8.8.4.4");
- sSettings.sWebParams.dhcpEnable = 1;
- }
- // Установить временные параметры сетевого подключения по умолчанию
- void SETTINGS_SetTempWebParamsDef(void)
- {
- strcpy(sSettings.sWebTempParams.ip, "192.168.10.254");
- strcpy(sSettings.sWebTempParams.gate, "192.168.10.1");
- strcpy(sSettings.sWebTempParams.mask, "255.255.255.0");
- strcpy(sSettings.sWebTempParams.dns1, "8.8.8.8");
- strcpy(sSettings.sWebTempParams.dns2, "8.8.4.4");
- sSettings.sWebTempParams.dhcpEnable = 1;
- }
- // Установить Информацию об устройстве по умолчанию
- void SETTINGS_SetInfoDef(void)
- {
- #if 0
- sys_settings_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
-
- if (sSys)
- {
- SYS_Load(sSys);
- strcpy(sSettings.sInfo.mac, sSys->mac);
- strcpy(sSettings.sInfo.serialNumber, sSys->serial);
- strcpy(sSettings.sInfo.productionData, sSys->proddate);
- strcpy(sSettings.sFlags.testState, sSys->testState);
- vPortFree(sSys);
- }
- else
- {
- strcpy(sSettings.sInfo.productionData, "00.00.00 00:00");
- strcpy(sSettings.sInfo.mac, DEVICE_MAC);
- strcpy(sSettings.sInfo.serialNumber, DEVICE_SERIAL);
- memset(sSettings.sFlags.testState, 0, 16);
- }
-
- sSettings.sInfo.id = 0;
- strcpy(sSettings.sInfo.location, "");
- strcpy(sSettings.sInfo.owner, "");
- strcpy(sSettings.sInfo.comments, "");
- strcpy(sSettings.sInfo.incharge, "");
- #endif
- }
- /**
- * @brief Установить флаги по умолчанию
- */
- void SETTINGS_SetFlagsDef(void)
- {
- sSettings.sFlags.netsettingsChanged = false;
- }
- /**
- * @brief Установить параметры сетевого подключения по умолчанию
- */
- void SETTINGS_SetEthternetSwitchDef(void)
- {
- sSettings.sEthernet.Enabled = true;
- sSettings.sEthernet.prior = 1;
- strcpy(sSettings.sEthernet.ip_test, "10.254.0.33");
- }
- /**
- * @brief Установить параметры GSM подключения по умолчанию
- */
- void SETTINGS_SetGSMDef(void)
- {
- for(uint8_t i = 0; i < NUM_GSM; i++)
- {
- sSettings.sGSM[i].Enabled = true;
- sSettings.sGSM[i].prior = 0;
- sSettings.sGSM[i].type_profile = USER;
- strcpy(sSettings.sGSM[i].ip_test, "10.254.0.33");
- strcpy(sSettings.sGSM[i].APNaddr, "MDUDPTN");
- strcpy(sSettings.sGSM[i].APNlogin, "");
- strcpy(sSettings.sGSM[i].APNpass, "");
- strcpy(sSettings.sGSM[i].msisdn, "");
- sSettings.sGSM[i].timeout = 30;
- sSettings.sGSM[i].period_test = 100;
- sSettings.sGSM[i].num_bad_connect = 3;
- sSettings.sGSM[i].modem_mode = AUTOMATIC;
- }
- sSettings.sGSM[0].prior = 3;
- sSettings.sGSM[1].prior = 2;
- }
- /**
- * @brief Установить параметры SNTP по умолчанию
- */
- void SETTINGS_SetSntpDef(void)
- {
- sSettings.sSNTP.sntpEnable = true;
- strcpy(sSettings.sSNTP.ip1, "10.254.0.50");
- strcpy(sSettings.sSNTP.ip2, "10.254.0.50");
- sSettings.sSNTP.timeZone = 3.0;
- strcpy(sSettings.sSNTP.data, "none");
- }
- /**
- * @brief Установить параметры подключения к серверу по умолчанию
- */
- void SETTINGS_SetServerParamsDef(void)
- {
- strcpy(sSettings.sServer.ip, "10.254.0.69");
- sSettings.sServer.port = 1884;
- sSettings.sServer.serverEnable = true;
- sSettings.sServer.controlConnect = true;
- }
- /**
- * @brief Установить параметры PROXY по умолчанию
- */
- void SETTINGS_SetProxyParamsDef(void)
- {
- strcpy(sSettings.sProxy.ip, "79.135.245.84");
- sSettings.sProxy.port = 55679;
- sSettings.sProxy.local_port = 0;
- }
- /**
- * @brief Установить значение настроек прозрачного порта по умолчанию
- */
- void SETTINGS_SetPortGwDef(void)
- {
- for(uint8_t i = 0; i < NUM_PORTGW; i ++)
- {
- sSettings.sPortGw[i].enableDispatch = false; // Параллельная диспетчеризация (Вкл./Выкл.)
- sSettings.sPortGw[i].type_port = ACCOUNT_METER; // Тип порта (Модем / Прибор учета)
- sSettings.sPortGw[i].connect_port = 2; // Связанный порт (#1-#3)
- strcpy(sSettings.sPortGw[i].description, ""); // Описание
- sSettings.sPortGw[i].enabled = true; // Вкл/Откл
- sSettings.sPortGw[i].transtype = GW_TCP; // Тип транспорта (TCP/UDP)
- sSettings.sPortGw[i].mode = GW_SERVER; // Режим: Клиент/Сервер
- strcpy(sSettings.sPortGw[i].ip, "192.168.1.2"); // IP-адрес сервера (для клиента)
- sSettings.sPortGw[i].port = 1001; // Порт
- sSettings.sPortGw[i].rs_mode = RS_485_1; // Режим (RS-232/RS-485)
- sSettings.sPortGw[i].uart_set.baud = BRD_9600; // Скорость порта
- sSettings.sPortGw[i].uart_set.parity = NO_PAR; // Четность
- sSettings.sPortGw[i].uart_set.databits = DATABITS_8; // Число бит данных
- sSettings.sPortGw[i].uart_set.stopbits = STOP_1; // Число стоп-бит
- }
- sSettings.sPortGw[0].rs_mode = RS_232_1;
- sSettings.sPortGw[0].port = 1001;
- sSettings.sPortGw[0].connect_port = 1;
-
- sSettings.sPortGw[1].rs_mode = RS_485_1;
- sSettings.sPortGw[1].port = 1002;
- sSettings.sPortGw[1].connect_port = 2;
- sSettings.sPortGw[1].enabled = false;
-
- sSettings.sPortGw[2].rs_mode = RS_232_2;
- sSettings.sPortGw[2].port = 1003;
- sSettings.sPortGw[2].connect_port = 0;
- sSettings.sPortGw[2].enabled = false;
- }
- /**
- * @brief Установить значение системы параллельной диспетчеризации по умолчанию
- */
- void SETTINGS_SetPSDDef(void)
- {
- sSettings.sPSD.enabled = false;
- sSettings.sPSD.mux_mode = PSD_MODE_7;
- sSettings.sPSD.rs_mode = RS_232_1;
- sSettings.sPSD.web_port = 0;
- sSettings.sPSD.assd_timeout = 120;
- }
- /**
- * @brief Установить значение пароля по умолчанию
- */
- void SETTINGS_SetServiceDef(void)
- {
- sSettings.sAuth[0].level = ADMIN;
- strcpy(sSettings.sAuth[0].login, "user");
- //"b26b1868 705a3f0a a82cbd79 7cd58b4e" uchetmo
- *(uint32_t *)sSettings.sAuth[0].hash = 0x68186bb2;
- *(uint32_t *)(sSettings.sAuth[0].hash + 4) = 0x0a3f5a70;
- *(uint32_t *)(sSettings.sAuth[0].hash + 8) = 0x79bd2ca8;
- *(uint32_t *)(sSettings.sAuth[0].hash + 12) = 0x4e8bd57c;
- }
- /**
- * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек
- */
- void SETTINGS_SetPartDefault(void)
- {
- SETTINGS_SetFlagsDef();
-
- SETTINGS_SetEthternetSwitchDef();
- SETTINGS_SetWebParamsDef();
- SETTINGS_SetTempWebParamsDef();
- SETTINGS_SetGSMDef();
- SETTINGS_SetSntpDef();
- SETTINGS_SetServerParamsDef();
- SETTINGS_SetProxyParamsDef();
- SETTINGS_SetPortGwDef();
- SETTINGS_SetPSDDef();
-
- sSettings.settVer = SETTINGS_VERSION;
-
- sSettings.CritSecCRC = settings_get_crit_sec_crc();
-
- sSettings.controlWorld = SETTINGS_CONTROL_WORD;
- }
-
- #endif
- #if 0
- /**
- * @brief
- */
- /**
- * @brief Сброс флага boottry в регистре RTC
- */
- void SETTINGS_ResetBootTry(void)
- {
- uint8_t bootTry = (uint8_t)bpr_data_read(BPR_DATA2);
- #if 0
- if (bootTry > 0 )
- {
- bootTry = 0;
- bpr_data_write(BPR_DATA2, 0);
-
- // Check FW update flag
- if (bpr_data_read(BPR_DATA3)) {
- log_add_record(UPDATED_FW, 0);
- // Clear FW update flag
- bpr_data_write(BPR_DATA3, 0);
- }
- }
- #endif
- }
- /**
- * @brief Преобразует mac адрес строкового формата в массив uint8_t
- * @param mac - буфер для вывода mac адреса
- */
- void SETTINGS_GetMac(uint8_t *mac)
- {
- char dummy[2];
- char *macPtr = sSettings.sInfo.mac;
-
- for (uint8_t i = 0; i < 6; i++)
- {
- strncpy(dummy, macPtr+i*3, 2);
- mac[i] = (uint8_t)strtol(dummy, NULL, 16);
- }
- }
- /**
- * @brief Установить дату производства
- */
- void SETTINGS_SetProDate(char *proDate, uint8_t len)
- {
- #if 0
- sys_settings_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sys_settings_t));
- if (sSys)
- {
- SYS_Load(sSys);
- strcpy(sSys->proddate, proDate);
- sys_save(sSys);
- memset(sSettings.sInfo.productionData, 0, 40);
- memcpy(sSettings.sInfo.productionData, proDate, len);
- vPortFree(sSys);
- //SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Установить серийный номер
- */
- void SETTINGS_SetSerialNumber(char *sn, uint8_t len)
- {
- #if 0
- sys_settings_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
- if (sSys)
- {
- SYS_Load(sSys);
- strcpy(sSys->serial, sn);
- sys_save(sSys);
- memset(sSettings.sInfo.serialNumber, 0, 16);
- memcpy(sSettings.sInfo.serialNumber, sn, len);
- vPortFree(sSys);
- //SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Установить MAC
- */
- void SysSETTINGS_SetMAC(char *mac, uint8_t len)
- {
- #if 0
- sys_settings_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
- if (sSys)
- {
- SYS_Load(sSys);
- strcpy(sSys->mac, mac);
- sys_save(sSys);
- memset(sSettings.sInfo.mac, 0, 18);
- memcpy(sSettings.sInfo.mac, mac, len);
- vPortFree(sSys);
- //SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Установить статус тестирования
- */
- void SETTINGS_StatusTest(char *status, uint8_t len)
- {
- #if 0
- SYS_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
- if (sSys)
- {
- SYS_Load(sSys);
- strcpy(sSys->testState, status);
- sys_save(sSys);
- memset(sSettings.sFlags.testState, 0, 16);
- memcpy(sSettings.sFlags.testState, status, len);
- vPortFree(sSys);
- SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Установить статус тестирования "T2OK"
- */
- void SETTINGS_SetT2OK(void)
- {
- #if 0
- SYS_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
- if (sSys)
- {
- SYS_Load(sSys);
-
- //SETTINGS_SetEthternetSwitchDef(); // TODO временное решение
-
- memset(sSettings.sFlags.testState, 0, 16);
- memcpy(sSettings.sFlags.testState, "T2OK", 4);
- strcpy(sSys->testState, sSettings.sFlags.testState);
- sys_save(sSys);
- vPortFree(sSys);
- SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Сбросить статус тестирования "T2OK"
- */
- void SETTINGS_ResetT2OK(void)
- {
- #if 0
- SYS_t *sSys = NULL;
-
- sSys = pvPortMalloc(sizeof(*sSys));
- if (sSys)
- {
- SYS_Load(sSys);
-
- SETTINGS_SetEthternetSwitchDef(); // TODO временное решение
-
- memset(sSettings.sFlags.testState, 0, 16);
- strcpy(sSys->testState, sSettings.sFlags.testState);
- sys_save(sSys);
- vPortFree(sSys);
- SETTINGS_Save();
- }
- #endif
- }
- /**
- * @brief Устанавливает mac адрес исходя из unique id
- */
- void COM_SetTestMAC(void)
- {
- uint8_t octet1 = 0;
- uint8_t octet2 = 0;
- uint8_t octet3 = 0;
- uint8_t octet4 = 0;
- uint8_t octet5 = 0;
- char AT_ID_HEX[12];
- uint8_t hash[16];
-
- GetAT32IDInt(AT_ID_HEX);
-
- md5hash(hash, (unsigned char*)AT_ID_HEX, sizeof(AT_ID_HEX));
-
- octet1 = hash[0];
- octet2 = hash[1];
- octet3 = hash[2];
- octet4 = hash[3];
- octet5 = hash[4];
- /* Устанавливаем MAC, но не сохраняем */
- //snprintf(sSettings.sInfo.mac, MAC_LEN, "%02X-%02X-%02X-%02X-%02X-00", octet1 & 0xFE, octet2, octet3, octet4, octet5);
- }
- /**
- * @brief Включить DHCP
- */
- void SETTINGS_SetDHCPOn(void)
- {
- sSettings.sWebTempParams.dhcpEnable = 1;
- }
- //
- void SETTINGS_Print(void)
- {
- printf("\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
- printf(" Общие настройки для bootloader и FW");
- printf("\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\n");
-
- printf("Сетевые настройки:\r\n");
-
- printf("\tIP: ");
- printf("%s\r\n", sSettings.sWebParams.ip);
-
- printf("\tGate: ");
- printf("%s\r\n", sSettings.sWebParams.gate);
-
- printf("\tMask: ");
- printf("%s\r\n", sSettings.sWebParams.mask);
-
- printf("\tDNS1: ");
- printf("%s\r\n", sSettings.sWebParams.dns1);
-
- printf("\tDNS2: ");
- printf("%s\r\n", sSettings.sWebParams.dns2);
-
- if (sSettings.sWebParams.dhcpEnable)
- printf("\tDHCP: On\r\n");
- else
- printf("\tDHCP: Off\r\n");
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nИнформация об устройстве:\r\n");
-
- printf("\tID: ");
- printf("%u\r\n", sSettings.sInfo.id);
-
- printf("\tДата производства: ");
- printf("%s\r\n", sSettings.sInfo.productionData);
-
- printf("\tMAC: ");
- printf("%s\r\n", sSettings.sInfo.mac);
-
- printf("\tСерийный номер: ");
- printf("%s\r\n", sSettings.sInfo.serialNumber);
-
- printf("\tВладелец: ");
- printf("%s\r\n", sSettings.sInfo.owner);
-
- printf("\tАдрес: ");
- printf("%s\r\n", sSettings.sInfo.location);
-
- printf("\tКомментарии: ");
- printf("%s\r\n", sSettings.sInfo.comments);
-
- printf("\tОтветственное лицо: ");
- printf("%s\r\n", sSettings.sInfo.incharge);
-
- // -------------------------------------------------------------------------- //
-
- for (uint8_t i = 0; i < NUM_GSM; i++)
- {
- printf("\r\nНастройки GSM модема:\r\n");
- printf("Профиль GSM %u:\r\n", i + 1);
-
- if (sSettings.sGSM[i].Enabled)
- printf("\tChannel: On\r\n");
- else
- printf("\tChannel: Off\r\n");
-
- printf("\tПриоритет: %u\r\n", sSettings.sGSM[i].prior);
-
- switch (sSettings.sGSM[i].type_profile)
- {
- case BEELINE :
- printf("\tТип профиля: BEELINE\r\n");
- break;
- case MTS :
- printf("\tТип профиля: MTS\r\n");
- break;
- case MEGAFON :
- printf("\tТип профиля: MEGAFON\r\n");
- break;
- case TELE2 :
- printf("\tТип профиля: TELE2\r\n");
- break;
- case USER :
- printf("\tТип профиля: USER\r\n");
- break;
- }
-
- printf("\tAPN: %s\r\n", sSettings.sGSM[i].APNaddr);
- printf("\tAPN логин: %s\r\n", sSettings.sGSM[i].APNlogin);
- printf("\tAPN пароль: %s\r\n", sSettings.sGSM[i].APNpass);
- printf("\tIP для проверки связи: %s\r\n", sSettings.sGSM[i].ip_test);
- printf("\tНомер SIM карты: %s\r\n", sSettings.sGSM[i].msisdn);
- printf("\tТаймаут ожидания ответа: %u, с\r\n", sSettings.sGSM[i].timeout);
- printf("\tВремя проверки каналов связи: %u\r\n", sSettings.sGSM[i].period_test);
- printf("\tКоличество неудачных попыток: %u\r\n", sSettings.sGSM[i].num_bad_connect);
- printf("\tРежим работы GSM модема: ");
-
- switch (sSettings.sGSM[i].modem_mode)
- {
- case AUTOMATIC :
- printf("Automatic\r\n");
- break;
-
- case GSM_3G :
- printf("GSM + 3G\r\n");
- break;
-
- case LTE :
- printf("LTE only\r\n");
- break;
-
- case WCDMA :
- printf("3G only\r\n");
- break;
-
- case GSM :
- printf("GSM only\r\n");
- break;
- }
-
- }
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nCRC критической секции: %X\r\n", sSettings.CritSecCRC);
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
- printf(" Секция настрок для FW");
- printf("\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\n");
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nФлаги:\r\n");
-
- printf("\tИзменение сетевых настроек: %u\r\n", sSettings.sFlags.netsettingsChanged);
- printf("\tСтатус тестирования: %s\r\n", sSettings.sFlags.testState);
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nEthernet канал:\r\n");
-
- if (sSettings.sEthernet.Enabled)
- printf("\tКанал: вкл\r\n");
- else
- printf("\tКанал: выкл\r\n");
- printf("\tПриоритет: %u\r\n", sSettings.sEthernet.prior);
- printf("\tIP для проверки связи: %s\r\n", sSettings.sEthernet.ip_test);
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nСервер:\r\n");
-
- if (sSettings.sServer.serverEnable)
- printf("\tСервер: вкл\r\n");
- else
- printf("\tСервер: выкл\r\n");
-
- printf("\tIP: %s\r\n", sSettings.sServer.ip);
- printf("\tPort: %u\r\n", sSettings.sServer.port);
-
- if (sSettings.sServer.controlConnect)
- printf("\tКонтроль соединения: вкл\r\n");
- else
- printf("\tКонтроль соединения: выкл\r\n");
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nProxy:\r\n");
-
- printf("\tIP: %s\r\n", sSettings.sProxy.ip);
- printf("\tPort: %u\r\n", sSettings.sProxy.port);
- printf("\tLocal port: %u\r\n", sSettings.sProxy.local_port);
-
- // -------------------------------------------------------------------------- //
- for (uint8_t i = 0; i < MAX_WEB_USERS; i++)
- {
- printf("\r\nНастройки аутентификации пользователя %u:\r\n", i + 1);
- switch (sSettings.sAuth[i].level)
- {
- case FACTORY :
- printf("\tУровень пользователя: FACTORY\r\n");
- break;
- case ADMIN :
- printf("\tУровень пользователя: ADMIN\r\n");
- break;
- }
-
- printf("\tlogin: %s\r\n", sSettings.sAuth[i].login);
- printf("\thash: %X\r\n", sSettings.sAuth[i].hash);
- }
-
- // -------------------------------------------------------------------------- //
-
- for (uint8_t i = 0; i < NUM_PORTGW; i++)
- {
- printf("\r\nНастройки прозрачного порта %u:\r\n", i + 1);
-
- if (sSettings.sPortGw[i].enableDispatch)
- printf("\tПараллельная диспетчеризация: вкл\r\n");
- else
- printf("\tПараллельная диспетчеризация: выкл\r\n");
-
- if (sSettings.sPortGw[i].enabled)
- printf("\tПрозрачный порт: вкл\r\n");
- else
- printf("\tПрозрачный порт: выкл\r\n");
-
- switch (sSettings.sPortGw[i].type_port)
- {
- case MODEM :
- printf("\tТип порта: Модем\r\n");
- break;
- case ACCOUNT_METER :
- printf("\tТип порта: Прибор учета\r\n");
- break;
- }
-
- printf("\tСвязанный порт %u:\r\n", sSettings.sPortGw[i].connect_port);
- printf("\tОписание: %s\r\n", sSettings.sPortGw[i].description);
-
-
- switch (sSettings.sPortGw[i].transtype)
- {
- case GW_UDP :
- printf("\tТип транспорта: UDP\r\n");
- break;
- case GW_TCP :
- printf("\tТип транспорта: TCP\r\n");
- break;
- }
-
- switch (sSettings.sPortGw[i].mode)
- {
- case GW_SERVER :
- printf("\tРежим: сервер\r\n");
- break;
- case GW_CLIENT :
- printf("\tРежим: клиент\r\n");
- break;
- }
-
- printf("\tIP сервера (режим клиента): %s\r\n", sSettings.sPortGw[i].ip);
- printf("\tПорт: %u\r\n", sSettings.sPortGw[i].port);
-
- switch (sSettings.sPortGw[i].rs_mode)
- {
- case RS_232_1 :
- printf("\tРежим (RS-232/RS-485): RS_232_1\r\n");
- break;
- case RS_232_2 :
- printf("\tРежим (RS-232/RS-485): RS_232_2\r\n");
- break;
- case RS_232_3 :
- printf("\tРежим (RS-232/RS-485): RS_232_3\r\n");
- break;
- case RS_485_1 :
- printf("\tРежим (RS-232/RS-485): RS_485_1\r\n");
- break;
- case RS_485_2 :
- printf("\tРежим (RS-232/RS-485): RS_485_2\r\n");
- break;
- }
-
- switch (sSettings.sPortGw[i].uart_set.baud)
- {
- case BRD_1200 :
- printf("\tBaudrate: 1200\r\n");
- break;
- case BRD_2400 :
- printf("\tBaudrate: 2400\r\n");
- break;
- case BRD_4800 :
- printf("\tBaudrate: 4800\r\n");
- break;
- case BRD_9600 :
- printf("\tBaudrate: 9600\r\n");
- break;
- case BRD_19200 :
- printf("\tBaudrate: 19200\r\n");
- break;
- case BRD_38400 :
- printf("\tBaudrate: 38400\r\n");
- break;
- case BRD_57600 :
- printf("\tBaudrate: 57600\r\n");
- break;
- case BRD_115200 :
- printf("\tBaudrate: 115200\r\n");
- break;
- case BRD_230400 :
- printf("\tBaudrate: 230400\r\n");
- break;
- case BRD_460800 :
- printf("\tBaudrate: 460800\r\n");
- break;
- }
- switch (sSettings.sPortGw[i].uart_set.databits)
- {
- case DATABITS_7 :
- printf("\tData bits: 7\r\n");
- break;
- case DATABITS_8 :
- printf("\tData bits: 8\r\n");
- break;
- }
-
- switch (sSettings.sPortGw[i].uart_set.stopbits)
- {
- case STOP_0_5 :
- printf("\tStop bits: 0_5\r\n");
- break;
- case STOP_1 :
- printf("\tStop bits: 1\r\n");
- break;
- case STOP_1_5 :
- printf("\tStop bits: 1_5\r\n");
- break;
- case STOP_2 :
- printf("\tStop bits: 2\r\n");
- break;
- }
- }
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nПротокол SNTP:\r\n");
-
- if (sSettings.sSNTP.sntpEnable)
- printf("\tSNTP: вкл\r\n");
- else
- printf("\tSNTP: выкл\r\n");
-
- printf("\tСервер 1 IP: %s\r\n", sSettings.sSNTP.ip1);
- printf("\tСервер 2 IP: %s\r\n", sSettings.sSNTP.ip2);
- printf("\tДата последней синхронизации: %s\r\n", sSettings.sSNTP.data);
- printf("\tЧасовой пояс (utc): %f\r\n", sSettings.sSNTP.timeZone);
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\nПараллельная диспетчеризация:\r\n");
-
- if (sSettings.sPSD.enabled)
- printf("\tДиспечеризация: вкл\r\n");
- else
- printf("\tДиспечеризация: выкл\r\n");
- switch (sSettings.sPSD.mux_mode)
- {
- case PSD_MODE_1 :
- printf("\tРежим (управление мультиплексором): MODE_1 - RS232#1 <-> RS232#2, USART6 <-> RS232#3\r\n");
- break;
- case PSD_MODE_2 :
- printf("\tРежим (управление мультиплексором): MODE_2 - RS485#1 <-> RS232#2, USART6 <-> RS232#3\r\n");
- break;
- case PSD_MODE_3 :
- printf("\tРежим (управление мультиплексором): MODE_3 - RS232#1 <-> RS485#2, USART6 <-> RS232#3\r\n");
- break;
- case PSD_MODE_4 :
- printf("\tРежим (управление мультиплексором): MODE_4 - RS485#1 <-> RS485#2, USART6 <-> RS232#3\r\n");
- break;
- case PSD_MODE_5 :
- printf("\tРежим (управление мультиплексором): MODE_5 - RS232#1 <-> RS232#3\r\n");
- break;
- case PSD_MODE_6 :
- printf("\tРежим (управление мультиплексором): MODE_6 - RS485#1 <-> RS232#3\r\n");
- break;
- case PSD_MODE_7 :
- printf("\tРежим (управление мультиплексором): MODE_7 - USART1 <-> RS485#1, \r\n\t\tUSART3 <-> RS485#2, USART4 <-> RS232#1, \r\n\t\tUSART5 <-> RS232#2, USART6 <-> RS232#3\r\n");
- break;
-
- }
-
- switch (sSettings.sPSD.rs_mode)
- {
- case RS_232_1 :
- printf("\tРежим (RS-232/RS-485): RS_232_1\r\n");
- break;
- case RS_232_2 :
- printf("\tРежим (RS-232/RS-485): RS_232_2\r\n");
- break;
- case RS_232_3 :
- printf("\tРежим (RS-232/RS-485): RS_232_3\r\n");
- break;
- case RS_485_1 :
- printf("\tРежим (RS-232/RS-485): RS_485_1\r\n");
- break;
- case RS_485_2 :
- printf("\tРежим (RS-232/RS-485): RS_485_2\r\n");
- break;
- }
-
- printf("\tНомер прозрачного порта: %u\r\n", sSettings.sPSD.web_port);
- printf("\tТаймаут: %u, сек\r\n", sSettings.sPSD.assd_timeout);
-
- // -------------------------------------------------------------------------- //
-
- printf("\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
-
- printf("\tКонтрольное слово: %u\r\n", sSettings.controlWorld);
- printf("\tCRC: %X\r\n", *(uint32_t*)CRC_ADDRESS);
- }
- #endif
|