| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 | /********************************* (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_BT6703#include "board_bt6703.h"#elif defined HARDWARE_BT6707 || HARDWARE_BT6709#include "board_bt6707.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 <stdio.h>#endif#ifdef PRINTF_CUSTOM#include "tinystdio.h"#endif#include <string.h>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;/**  * @brief  Флаг ининциализации Eth интерфейса  */extern unsigned char eth_ready_flag;// -------------------------------------------------------------------------- ////                              __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);}#ifndef HARDWARE_BT6709/**  * @brief    */void Test_DRY(void){    uint8_t inputState;#if defined HARDWARE_BT6707    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_BT6703    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);#if defined HARDWARE_BT6707    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);}#endif/**  * @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;    int timeout = 100; /* 10 sec timeout */     // if (ethernetInit == false)    {        if (eth_ready_flag == 0) {        	if(!ethernetInit){        		ethernetInit = true;				ETH_BSP_Config();				 LwIP_Init();        	}        	else{        		init_get_ip_address_controller();        	}        }        /* Waiting ETH init */        while ((eth_ready_flag == 0) && (timeout-- > 0)) {            vTaskDelay(100);        }        if (eth_ready_flag == 0) {            printf("ETH FAIL\r\n");        }        else {            sys_thread_new("HTTP", vTaskTcpServer, NULL, 4*configMINIMAL_STACK_SIZE, tskIDLE_PRIORITY);            ethernetInit = true;        }    }  /*  else {        printf("ETH OK\r\n");    }*/   	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) РОТЕК **********************************/
 |