/********************************* (C) РОТЕК *********************************** * @module bt_6701_commands * @file bt_6701_commands.c * @version 1.0.0 * @date XX.XX.XXXX * $brief bt_6701_commands ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "bt_6701_commands.h" #include "commands_api.h" #include "common_config.h" #include "gpio.h" #if defined HARDWARE_BT6702 #include "board_bt6702.h" #elif defined HARDWARE_BT6706 #include "board_bt6706.h" #endif #include "buttons.h" #include "led.h" #include "netconf.h" #include "stm32f4x7_eth_bsp.h" #include "http_server.h" #include "rtc.h" #include "sntp_api.h" #include "d_inouts.h" #include "config_service.h" #include "usart.h" #include "spi_flash.h" #include "FreeRTOS.h" #include "task.h" #include "lwip/opt.h" #include "lwip/api.h" #include "lwip/sys.h" #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #include bool ntpResult = false; uint32_t SNTP_Time; extern uint8_t DefCounter; extern BUTTON_NO_FIX_t defButton; extern uint8_t SetCounter; extern BUTTON_NO_FIX_t setButton; // -------------------------------------------------------------------------- // // __weak функции /** * @brief */ void TestProcessing(void) { vTaskDelay(200); } /** * @brief */ void Test_U232(void) { // Отправляем символы в RS232 for (uint16_t i = 0; i < 1023; i++) ups_putchar('A'); vTaskDelay(10); for (uint16_t i = 0; i < 1023; i++) { if (ups_getchar(500) != 'A') { printf("U232 FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } } printf("U232 OK\r\n"); TEST_SetTest(TEST_WAIT); } /** * @brief */ void Test_DRY(void) { uint8_t inputState; #ifdef HARDWARE_BT6706 uint8_t start_state = 0; uint8_t end_state = 1; set_state_douts(DOUT1, 1); set_state_douts(DOUT2, 1); set_state_douts(DOUT3, 1); #endif #ifdef HARDWARE_BT6702 uint8_t start_state = 1; uint8_t end_state = 0; #endif vTaskDelay(10); inputState = get_state_din_outs(DIN1); set_state_douts(DOUT1, start_state); vTaskDelay(10); if (get_state_din_outs(DIN1) == inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } set_state_douts(DOUT1, end_state); vTaskDelay(10); if (get_state_din_outs(DIN1) != inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } inputState = get_state_din_outs(DIN1); set_state_douts(DOUT2, start_state); vTaskDelay(10); if (get_state_din_outs(DIN1) == inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } set_state_douts(DOUT2, end_state); vTaskDelay(10); if (get_state_din_outs(DIN1) != inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } vTaskDelay(10); #ifdef HARDWARE_BT6706 inputState = get_state_din_outs(DIN1); set_state_douts(DOUT3, start_state); vTaskDelay(10); if (get_state_din_outs(DIN1) == inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } set_state_douts(DOUT3, end_state); vTaskDelay(10); if (get_state_din_outs(DIN1) != inputState) { printf("DRY FAIL\r\n"); TEST_SetTest(TEST_WAIT); return; } vTaskDelay(10); #endif printf("DRY OK\r\n"); TEST_SetTest(TEST_WAIT); } /** * @brief */ void vTest_DEF(void *params) { static uint32_t timeout = 0; for (;;) { if (timeout++ > BUTTON_TIMEOUT) { timeout = 0; DefCounter = 0; LED_Off(LED_INIT_R); LED_Off(LED_MAJOR_R); LED_Off(LED_MINOR_R); printf("DEF FAIL\r\n"); TEST_SetTest(TEST_WAIT); ifTest_DEF = false; vTaskDelete(NULL); } BUTTON_NoFixHandler(&defButton); if (DefCounter == 3) { timeout = 0; DefCounter = 0; printf("DEF OK\r\n"); /* Завершение теста T0 */ /* Устанавливаем статус T0READY, сохраняем статус во флеш */ COM_SetTestState(T0READY); TEST_SetTest(TEST_WAIT); ifTest_DEF = false; vTaskDelete(NULL); } vTaskDelay(10); } } /** * @brief */ void vTest_SET(void *params) { static uint32_t timeout_set = 0; for (;;) { if (timeout_set++ > BUTTON_TIMEOUT) { timeout_set = 0; SetCounter = 0; LED_Off(LED_INIT_G); LED_Off(LED_MINOR_G); printf("SET FAIL\r\n"); TEST_SetTest(TEST_WAIT); ifTest_SET = false; vTaskDelete(NULL); } BUTTON_NoFixHandler(&setButton); if (SetCounter == 3) { timeout_set = 0; SetCounter = 0; printf("SET OK\r\n"); /* Завершение теста T0 */ /* Устанавливаем статус T0READY, сохраняем статус во флеш */ COM_SetTestState(T0READY); TEST_SetTest(TEST_WAIT); ifTest_SET = false; vTaskDelete(NULL); } vTaskDelay(10); } } /** * @brief Тестирование RTC */ void COM_TestRtc(void) { /* Пытаемся синхронизироваться с NTP сервером */ SNTP_Enable(true); SNTP_Poll(); vTaskDelay(1000); /* Синхронизация удалась */ if (ntpResult) { printf("RTC OK\r\n"); } else printf("RTC FAIL SYNC\r\n"); TEST_SetTest(TEST_WAIT); } /** * @brief Тестирование SPIFLASH */ void COM_TestSPIflash(void) { if (spi_flash_test()) { printf("SPIFLASH OK\r\n"); } else printf("SPIFLASH FAIL SYNC\r\n"); TEST_SetTest(TEST_WAIT); } /** * @brief */ void Test_Ethernet(void) { static bool ethernetInit = false; if (ethernetInit == false) { ethernetInit = true; COM_SetMAC(); ETH_BSP_Config(); LwIP_Init(); sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY); } TEST_SetTest(TEST_WAIT); } /** * @brief */ void Test_Serno(void) { macWaiting = true; macIsInstalled = false; // Устанавливаем статус тестирования "T1OK" COM_SetTestState(T0OK); // Отправляем udp пакет с информацией //COM_TestSerno(); // Пауза. В это время должен прийти GET запрос с MAC адресом. //vTaskDelay(8000); //macWaiting = false; //if (!macIsInstalled) // printf("SERNO FAIL\r\n"); for (uint8_t i = 0; i < 4; i++) { // Отправляем udp пакет с информацией COM_TestSerno(); // Пауза. В это время должен прийти GET запрос с MAC адресом. vTaskDelay(8000); if (macIsInstalled) break; } if (!macIsInstalled) printf("SERNO FAIL\r\n"); TEST_SetTest(TEST_WAIT); } // -------------------------------------------------------------------------- // /********************************* (C) РОТЕК **********************************/