123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- /********************************* (C) РОТЕК ***********************************
- * @module commands_api
- * @file commands_api.c
- * @version 1.0.0
- * @date XX.XX.XXXX
- * $brief commands_api
- *******************************************************************************
- * @history Version Author Comment
- * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
- *******************************************************************************
- */
- #include "common_config.h"
- #include "stm32f4xx.h"
- #include "commands_api.h"
- #include "settings_api.h"
- #include "sys_api.h"
- #include "buttons.h"
- #include "led.h"
- #include "usart.h"
- #include "parameters.h"
- #include "bt_6701_settings.h"
- #include "bt_6701_commands.h"
- #include "netconf.h"
- #include "stm32f4x7_eth.h"
- #include "http_server.h"
- #include "config_service.h"
- #include "rtc.h"
- #include "port_microrl.h"
- #include "hash.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "lwip/opt.h"
- #include "lwip/api.h"
- #include "lwip/sys.h"
- #ifdef PRINTF_STDLIB
- #include <stdio.h>
- #endif
- #ifdef PRINTF_CUSTOM
- #include "tinystdio.h"
- #endif
- #define UDP_PORT 49049
- TESTING_STATE_t TESTING_STATE = TEST_IDLE;
- static TEST_t testState = TEST_WAIT;
- bool ifTest_DEF = false;
- bool ifTest_SET = false;
- bool macWaiting = false;
- bool macIsInstalled = false;
- bool fUpdatable = false;
- bool fDefPressed = false;
- bool testEthernet = false;
- bool testRtc = false;
- bool testSerno = false;
- bool testT2Ready = false;
- bool testSet = false;
- #define MSG_LEN 300
- char msg[MSG_LEN];
- extern char STM_ID[33];
- extern char STM_ID_HEX[12];
- /**
- * @brief Общая структура настроек
- */
- extern SETTINGS_t sSettings;
- /**
- * @brief
- */
- void vTestCommands(void *params)
- {
- for (;;)
- {
- if (fUpdatable) {
- if(RTC_GetUnixTime() <= 946685800)
- {
- memset(SETTINGS_GetTestState(), 0, 16);
- SETTINGS_SetTest(SETTINGS_GetTestState());
- #ifdef LED_ALARM
- LED_On(LED_ALARM);
- #endif
- //xTaskCreate(vTaskServiceLedBlinkErr, "LED_Blink_Err", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- xTaskCreate(vTaskServiceLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- while(1){
- vTaskDelay(10);
- }
- }
- //COM_TestEthernet();
- SETTINGS_SetInfoDef();
- Test_Ethernet();
- vTaskDelay(8000);
- /* Стартует таск для опроса кнопки DEF */
- //xTaskCreate(vBootloaderButton, "DEF_Bootloader", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- xTaskCreate(vTaskButtons, "DEF_Waiting", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- xTaskCreate(vTaskServiceLedBlink, "LED_Blink", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
-
- while (!fDefPressed) {
- vTaskDelay(10);
- }
- #ifdef LED_INIT_ERR
- LED_On(LED_INIT_ERR);
- #endif
- #ifdef LED_ALARM
- LED_On(LED_ALARM);
- #endif
- #ifdef LED_RED_MINOR
- LED_On(LED_RED_MINOR);
- #endif
- //sSettings.bootParams.loadMode = 1;
- SetLoadMode();
- COM_TestSerno();
- COM_SetTestState(T2READY);
- vTaskDelay(1000);
- NVIC_SystemReset();
- while (1) {};
- }
-
- switch (testState)
- {
- case TEST_WAIT :
- break;
-
- case TEST_U232 :
- Test_U232();
- break;
- #ifdef DALLAS_SENSOR_ENABLE
- case TEST_OW :
- COM_TestOW();
- break;
- #endif
- #ifdef DINS_ENABLE || DOUTS_ENABLE
- case TEST_DRY :
- Test_DRY();
- break;
- #endif
- case TEST_DEF :
- if (!ifTest_DEF) {
- ifTest_DEF = true;
- xTaskCreate(vTest_DEF, "DEF_Test", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- }
- break;
- case TEST_SET :
- if (!ifTest_SET) {
- ifTest_SET = true;
- xTaskCreate(vTest_SET, "SET_Test", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
- }
- break;
- case TEST_RTC :
- COM_TestRtc();
- break;
- case TEST_SPIFLASH :
- COM_TestSPIflash();
- break;
- case TEST_ETHERNET :
- COM_SetMAC();
- Test_Ethernet();
- break;
-
- case TEST_SERNO :
- Test_Serno();
- break;
-
-
- default :
- break;
- }
-
- vTaskDelay(200);
- //TestProcessing();
- }
- }
- /**
- * @brief
- */
- void TEST_SetTest(TEST_t state)
- {
- // Изменяем стейт только в том случае если контроллер находится в режиме ожидания
- if (testState == TEST_WAIT)
- testState = state;
-
- // На TEST_WAIT можно изменить всегда
- if (state == TEST_WAIT)
- testState = state;
- }
- /**
- * @brief Считать статут тестирования (T0, T1, etc)
- */
- void COM_ReadTestState(void)
- {
- if (strncmp(SETTINGS_GetTestState(), "T0READY", 5) == 0) {
- TESTING_STATE = T0READY;
- printf("T0READY\r\n");
- }
- else if (strncmp(SETTINGS_GetTestState(), "T0OK", 5) == 0)
- TESTING_STATE = T0OK;
- else if (strncmp(SETTINGS_GetTestState(), "T1OK", 5) == 0) {
- TESTING_STATE = T1OK;
- // TODO Если осуществлять поддержку старых версий UCN нужно учесть этот флаг
- fUpdatable = true;
- }
- else if (strncmp(SETTINGS_GetTestState(), "T2READY", 8) == 0) {
- TESTING_STATE = T2READY;
- }
- else
- TESTING_STATE = TEST_IDLE;
- }
- /**
- * @brief Сохранение Serno и отправка сообщения на сервер
- */
- void COM_TestSerno(void)
- {
- struct netconn *conn;
- struct netbuf *buf;
- char *data;
- err_t err;
- char str[20] = {0};
- uint8_t len;
- /* Отправляем сообщение на сервер по UDP */
- memset(msg, 0, MSG_LEN);
- conn = netconn_new( NETCONN_UDP );
- if (conn!= NULL)
- {
- err = netconn_bind(conn, IP_ADDR_ANY, UDP_PORT);
- if (err == ERR_OK)
- {
- netconn_connect(conn, IP_ADDR_BROADCAST, UDP_PORT);
- memset(str, 0, 20);
- GetModelStr(str, &len);
- #ifdef HARDWARE_BT6709
- strcat(str, "_BEELINE");
- #endif
- //strcpy(msg, sSettings.sSnmp.sysName);
- strcpy(msg, str);
- strcat(msg, ";");
- memset(str, 0, 20);
- GetSerialNumberStr(str, &len);
- //strcat(msg, sSettings.sInfo.serialNumber);
- strcat(msg, str);
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- strcat(msg, VERSION_TEST);
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- strcat(msg, STM_ID);
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- if (TESTING_STATE == T0OK)
- strcat(msg, "T0OK");
- else if (TESTING_STATE == T1OK)
- strcat(msg, "T1OK");
- else if (TESTING_STATE == T0READY)
- strcat(msg, "T0READY");
- else if (TESTING_STATE == T2READY)
- strcat(msg, "T2READY");
- strcat(msg, ";");
- /* empty column (format reqs)*/
- strcat(msg, ";");
- buf = netbuf_new();
- data = netbuf_alloc(buf, strlen(msg));
- memcpy(data, msg, strlen(msg));
- netconn_send(conn, buf);
- netbuf_delete(buf);
- }
- else
- netconn_delete(conn);
- }
- }
- /**
- * @brief Устанавливает mac адрес исходя из unique id
- */
- void COM_SetMAC(void)
- {
- uint8_t octet1 = 0;
- uint8_t octet2 = 0;
- uint8_t octet3 = 0;
- uint8_t octet4 = 0;
- uint8_t octet5 = 0;
- uint8_t len;
- uint8_t hash[16];
- md5hash(hash, STM_ID_HEX, sizeof(STM_ID_HEX));
- octet1 = hash[0];
- octet2 = hash[1];
- octet3 = hash[2];
- octet4 = hash[3];
- octet5 = hash[4];
- /* Устанавливаем MAC, но не сохраняем */
- snprintf(sSettings.sInfo.mac, MAC_LEN, "EC-%02X-%02X-%02X-%02X-%02X", octet1, octet2, octet3, octet4, octet5);
- }
- /**
- * @brief Установить статут тестирования (T0, T1, etc)
- */
- void COM_SetTestState(TESTING_STATE_t status)
- {
- switch (status)
- {
- case T0READY :
- //memset(sSettings.sFlags.testState, 0, 16);
- //strncpy(sSettings.sFlags.testState, "T0READY", 7);
- memset(SETTINGS_GetTestState(), 0, 16);
- strncpy(SETTINGS_GetTestState(), "T0READY", 7);
- TESTING_STATE = T0READY;
- break;
- case T0OK :
- //memset(sSettings.sFlags.testState, 0, 16);
- //strncpy(sSettings.sFlags.testState, "T0OK", 4);
- memset(SETTINGS_GetTestState(), 0, 16);
- strncpy(SETTINGS_GetTestState(), "T0OK", 4);
- TESTING_STATE = T0OK;
- break;
- case T1OK :
- //memset(sSettings.sFlags.testState, 0, 16);
- //strncpy(sSettings.sFlags.testState, "T1OK", 4);
- memset(SETTINGS_GetTestState(), 0, 16);
- strncpy(SETTINGS_GetTestState(), "T1OK", 4);
- TESTING_STATE = T1OK;
- break;
- case T2READY :
- //memset(sSettings.sFlags.testState, 0, 16);
- //strncpy(sSettings.sFlags.testState, "T2READY", 7);
- memset(SETTINGS_GetTestState(), 0, 16);
- strncpy(SETTINGS_GetTestState(), "T2READY", 7);
- TESTING_STATE = T2READY;
- break;
- }
- SETTINGS_SetTest(SETTINGS_GetTestState());
- }
- /********************************* (C) РОТЕК **********************************/
|