/********************************* (C) РОТЕК *********************************** * @module testing * @file testing.c * @version 1.0.0 * @date XX.XX.XXXX * $brief Template ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "testing.h" #include "settings_api.h" #include "common_config.h" #include "stm32_uid.h" #include "led.h" #include "hal.h" #include "FreeRTOS.h" #include "task.h" #include "lwip/opt.h" #include "lwip/arch.h" #include "lwip/api.h" #include "lwip/tcp.h" #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #include #include #define UDP_PORT 49049 bool fTesting = false; bool fServer = false; #define MSG_LEN 300 char ID[33]; extern SETTINGS_t sSettings; // Общая структура настроек extern bool isIpReceived; /** * @brief Тестирование */ // TODO Убрать заглушки void vTaskTesting(void *params) { uint8_t len; while (!isIpReceived) { vTaskDelay(100); } for (;;) { //printf("Start testing task\r\n"); memset(ID, 0, 33); /* Читаем ID */ GetSTM32IDStr(ID, &len); /* Отправляем запрос */ vTaskDelay(3000); TEST_SendData(); /* Ждем timeout и высылаем ответ на тестер */ vTaskDelay(2000); /* Если все прошло хорошо*/ if (fServer) { SETTINGS_SetAllDefault(); SETTINGS_Save(); #ifdef LED_INIT_ERR LED_On(LED_INIT_ERR); #endif /* Устанавливаем статус тестирования "T2OK" и сохраняем настройки */ SETTINGS_SetT2OK(); #ifdef LED_INIT_ERR LED_Off(LED_INIT_ERR); #endif fServer = false; vTaskDelay(2000); // Reboot(); vTaskDelete(NULL); } vTaskDelay(100); } } /** * @brief Отправляет строку данных по UDP */ void TEST_SendData(void) { struct netconn *conn; struct netbuf *buf; char *data; char msg[MSG_LEN]; err_t err; /* Отправляем сообщение на сервер по 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); strcpy(msg, HW_REV); #ifdef HARDWARE_BT6709 strcat(msg, "_BEELINE"); #elif HARDWARE_BT6709_MTS strcat(msg, "_MTS"); #endif strcat(msg, ";"); /* Заглушка */ //strcat(msg, "KN-03-00001;EC-4C-4D-00-90-01;0.8_DEMO;;;"); strcat(msg, sSettings.sInfo.serialNumber); strcat(msg, ";"); strcat(msg, sSettings.sInfo.mac); strcat(msg, ";"); strcat(msg, VERSION); strcat(msg, ";;;"); // for (uint8_t i = 0; i < 12; i++) { strcat(msg, ID); } strcat(msg, ";;;"); strcat(msg, sSettings.sFlags.testState); strcat(msg, ";;"); buf = netbuf_new(); data = netbuf_alloc(buf, strlen(msg)); memcpy(data, msg, strlen(msg)); netconn_send(conn, buf); netbuf_delete(buf); netconn_delete(conn); } else netconn_delete(conn); } } /** * @brief */ void TEST_SetServerFlag(void) { fServer = true; } /********************************* (C) РОТЕК **********************************/