stm32_ota/ABM开发板(APP源码)/FreeRTOS版本/APPV3.0/USER/USERAPP/userapp.c

255 lines
10 KiB
C
Raw Permalink Normal View History

2024-12-17 20:03:43 +08:00
#include "userapp.h"
#include <string.h>
#include <stdlib.h>
/********************************************************************************
* @file gateapp.c
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SmartGateӦ<EFBFBD>ó<EFBFBD><EFBFBD>򣬶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>װ
******************************************************************************
* @attention
* <EFBFBD><EFBFBD><EFBFBD>жԳ<EFBFBD>USER<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gateapp<EFBFBD><EFBFBD>
*******************************************************************************/
/*********Ӧ<>ò<EFBFBD><C3B2>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>*******************************************************/
#include "usart.h" //printf
#include "ec20module.h"
#include "ec20net.h"
#include "ec20tcp.h"
#include "ec20http.h" //RunResult Send_Post( POSTP_s *psHttpP, char* postBody )
#include "key.h"
#include "sysport.h"
#include "malloc.h"
#include "cjson.h"
#include "rtc.h"
#include "beep.h"
#include "led.h"
#include "logflash.h"
#include "syslib.h"
#include "user_oled.h"
#include "user_tcp.h"
#include "user_http.h"
#include "usercmd.h"
#include "logflash.h"
#include "io.h"
#include "pvd.h"
#include "oled.h"
#include "stm32Temp.h"
#include "user_key.h"
/**********************************************************************************/
/**********************************************************************************
*<EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD>õij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**********************************************************************************/
/**********************************************************************************
*<EFBFBD><EFBFBD><EFBFBD>ⲿʹ<EFBFBD>õij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***********************************************************************************/
Application gateApp ; //gateApp<70><70><EFBFBD><EFBFBD>Ӧ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
/*Ӧ<>ò㻺<C3B2><E3BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
EventGroupHandle_t netEventHandler ; //<2F>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><EFBFBD><E9A3A8>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
EventGroupHandle_t osSafeEventHandler ; //<2F>¼<EFBFBD><C2BC><EFBFBD>־<EFBFBD><EFBFBD><E9A3A8>־λOSÿ<53><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SemaphoreHandle_t ec20MutexSemaphore; //<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EC20<32><30>Դ<EFBFBD><D4B4>ռ<EFBFBD><D5BC><EFBFBD>ͷţ<CDB7>
char lastOccupyEc20[30] = {0} ; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>¼<EFBFBD><C2BC>һ<EFBFBD><D2BB>ռ<EFBFBD><D5BC>EC20<32><30>Դ<EFBFBD><D4B4>__FILE__, __LINE__
char lastReleseEc20[30] = {0} ; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>¼<EFBFBD><C2BC>һ<EFBFBD><D2BB><EFBFBD>ͷ<EFBFBD>EC20<32><30>Դ<EFBFBD><D4B4>__FILE__, __LINE__
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void Board_Init(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
**************************************************************************************************/
void Board_Init(void)
{
SysTick_Init() ; //ϵͳ<CFB5>δ<EFBFBD><CEB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> 1ms<6D>ж<EFBFBD>һ<EFBFBD><D2BB> <20>ж<EFBFBD><D0B6>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LogFlash_Init() ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH<53>ܴ洢<DCB4><E6B4A2>LOG
MyMenInit(SRAMIN) ; //<2F><>̬<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
RTC_Init(INT_RANK_15) ; //ʵʱʱ<CAB1>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
PrintfDeviceInfo() ; //UART_DEBUG<55><47><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>Ϣ
Rtc_RegHookCallback(RTC_IT_ALR, Rtc_Alr_Callback) ; //ע<><D7A2>RTC<54><43><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
UserKeyInit() ; //<2F><>ʼ<EFBFBD><CABC>KEY<45><59><EFBFBD><EFBFBD>
Led_Init() ; //<2F><>ʼ<EFBFBD><CABC>LED
Beep_Init() ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
T_Adc_Init() ; //<2F><>ʼ<EFBFBD><CABC>ADC<44><43><EFBFBD><EFBFBD>MCU<43>ڲ<EFBFBD><DAB2>¶ȼ<C2B6><C8BC><EFBFBD>
OLED_Init() ; //OLED<45><44>ʼ<EFBFBD><CABC>
RS232Init(115200) ; //RS232<33><32>ʼ<EFBFBD><CABC>
RS485Init(115200) ; //RS485<38><35>ʼ<EFBFBD><CABC>
//Pvd_Init( EXTI_Trigger_Rising_Falling, INT_RANK_14) ;
PWR_PVD_Init() ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void PrintfDeviceInfo(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DEBUG<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
**************************************************************************************************/
void PrintfDeviceInfo(void)
{
printf("\r\n**************************************************************" ) ;
printf("\r\n<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20>̳ϿƼ<CFBF> 2017/8-2027/8 .\
\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD> : Mr. Wang 13635513618 .") ;
SetBootVersion(&gateApp, (char*)uIapFlash.sIapFlash.BootVers) ;
printf("\r\nBoot<EFBFBD>汾 : %*.*s", 0, VERSION_LEN, gateApp.bootVers) ;
Query_AppVersion((char*)gateApp.appVers) ;
SetAppVersion(&gateApp, (char*)gateApp.appVers) ;
printf("\r\nAPP <20>汾 : %s", gateApp.appVers) ;
printf("\r\nRunAppNum: APP%d", uIapFlash.sIapFlash.RunAppNum-0x30 ) ;
GetDeviceMacAddress((uint8_t*)gateApp.macId, STRMACID) ;
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %.*s", MAC_BYTES_LEN, gateApp.macId) ;
DeviceRstReason((uint8_t*)gateApp.rstReason, VERSION_LEN) ;
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> : %.*s", VERSION_LEN, gateApp.rstReason) ;
printf("\r\n**************************************************************" ) ;
char buf[128] = {0} ;
snprintf(buf, 128, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>:%s.", gateApp.rstReason) ;
WriteLogToFlash(buf) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void DeviceRstReason(uint8_t *reason, uint8_t maxLen)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ж<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>
**************************************************************************************************/
void DeviceRstReason(uint8_t *reason, uint8_t maxLen)
{
if( SET == RCC_GetFlagStatus( RCC_FLAG_PORRST) )
{
strncpy((char*)reason, "<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", maxLen) ;
}
if( SET == RCC_GetFlagStatus(RCC_FLAG_SFTRST) )
{
strncpy((char*)reason, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", maxLen) ;
}
if( SET == RCC_GetFlagStatus(RCC_FLAG_IWDGRST) )
{
strncpy((char*)reason, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", maxLen) ;
}
if( SET == RCC_GetFlagStatus(RCC_FLAG_WWDGRST) )
{
strncpy((char*)reason, "<EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", maxLen) ;
}
if( (RESET == RCC_GetFlagStatus(RCC_FLAG_SFTRST)) &&
(RESET == RCC_GetFlagStatus(RCC_FLAG_IWDGRST)) &&
(RESET == RCC_GetFlagStatus(RCC_FLAG_WWDGRST)) &&
(SET == RCC_GetFlagStatus(RCC_FLAG_PINRST))
)
{
strncpy((char*)reason, "Ӳ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", maxLen) ;
}
RCC_ClearFlag() ;
}
/****************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void OccpyEc20(TickType_t timeout, char* file, int line)
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ȡEC20<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>timeoutû<EFBFBD>л<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>LOGȻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ
* ע <EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ<EFBFBD><EFBFBD>portMAX_DELAY
****************************************************************************/
void OccpyEc20(TickType_t timeout, char* file, int line)
{
BaseType_t result = pdFAIL ;
result = xSemaphoreTake(ec20MutexSemaphore, timeout) ;
if( result == pdPASS )
{
memset(lastOccupyEc20, 0, 30);
snprintf( lastOccupyEc20, 30, "%s %d <20><>ռEC20!", file, line) ;
AppLogPrintf(lastOccupyEc20) ;
//UARTx_SendData(UART_DEBUG, lastOccupyEc20, strlen(lastOccupyEc20)) ;
}
else
{
char *buf = portMalloc(192);
snprintf( buf, 192, "<EFBFBD>ϴ<EFBFBD>:%s, <20>ϴ<EFBFBD>:%s, <20><>ǰ%s %d <20><>ռEC20ʧ<30>ܣ<EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", lastOccupyEc20, lastReleseEc20, file, line ) ;
WriteLogToFlash(buf) ;
AppLogPrintf(buf) ;
portFree(buf) ;
SystemSoftReset() ; //ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
}
}
/****************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void TcpUpFlashLog(void)
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD><EFBFBD>TCP<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH<EFBFBD><EFBFBD><EFBFBD>LOG
****************************************************************************/
void TcpUpFlashLog(void)
{
uint32_t readAddr = LOGFLASH_START_ADDRESS ;
uint8_t* logReadBuffer = portMalloc(FLASH_PAGE_SIZE/8) ;
uint16_t n = uLogFlash.sLogFlash.writeOffset/(FLASH_PAGE_SIZE/8) ;
while(n--)
{
Read_Flash_Byte(readAddr, logReadBuffer, (FLASH_PAGE_SIZE/8)) ;
TcpWritedata( TCPLOGFRAME, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>log:%s", (char*)logReadBuffer);
readAddr = readAddr+(FLASH_PAGE_SIZE/8) ;
}
memset(logReadBuffer, 0, (FLASH_PAGE_SIZE/8)) ;
Read_Flash_Byte(readAddr, logReadBuffer, uLogFlash.sLogFlash.writeOffset%(FLASH_PAGE_SIZE/8) ) ;
TcpWritedata( TCPLOGFRAME, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>log:%s", (char*)logReadBuffer) ;
portFree(logReadBuffer) ;
Erase_LogFlash() ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void RefreshOledTime(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>С<EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<EFBFBD>2018-03-20 17:51<EFBFBD><EFBFBD>
**************************************************************************************************/
void RefreshOledTime(void)
{
static Calendar_u uLastTime ;
if( currentMenuIndex == 0 ) //HTTP<54><50><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־λΪSTATE_OK<4F><4B><EFBFBD><EFBFBD>ʾ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ȷʱ<C8B7><CAB1> (GETHTTPSTATE == STATE_OK) &&
{
if( memcmp(uLastTime.bytes, uCalendar.bytes, 16) == 0 ) /*<2A><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ֻ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
{
DisplayPointBlink() ;
}
else /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ı<EFBFBD>*/
{
DisplayTime() ;
strncpy((char*)uLastTime.bytes, (const char*)uCalendar.bytes, 20) ;
}
}
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void Rtc_Alr_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD>ڶ<EFBFBD><EFBFBD>ͬʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
void Rtc_Alr_Callback(void)
{
Calendar_u uAlaCal ;
memcpy(uAlaCal.bytes, uCalendar.bytes, CALENDAR_LEN) ;
uAlaCal.sCalendar.w_date[1] += 1 ; //<2F><><EFBFBD><EFBFBD>+1<><31>
memcpy((u8*)uAlaCal.sCalendar.hour, "01", 2) ; //<2F>賿1<E8B3BF><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ڴ˿̵<CBBF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֵ//
//memcpy((u8*)uAlaCal.sCalendar.min, "42", 2) ; //<2F>賿30<33><30>//uAlaCal.sCalendar.sec[0] += 2 ;
RTC_Alarm_Set(&uAlaCal) ;
WriteLogToFlash((char*)uCalendar.bytes) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>FLASH<53><48>
WriteLogToFlash("Rtc_Alr_Callback!") ;
SysLog("Rtc_Alr_Callback!") ;
SystemSoftReset() ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void InitApplictationState(Application *appPointer)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Application<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param *appPointer Application<EFBFBD>ָ<EFBFBD><EFBFBD>
*************************************************************************************************/
void InitApplictationState(Application *appPointer)
{
memset(appPointer->appVers, 0, VERSION_LEN+1) ;
memset(appPointer->bootVers, 0, VERSION_LEN+1) ;
memset(appPointer->macId, 0, MAC_BYTES_LEN+1) ;
}
void SetAppVersion(Application *appPointer, char *version)
{
strncpy((char*)appPointer->appVers, version, VERSION_LEN) ;
*(appPointer->appVers+VERSION_LEN+1) = 0 ;
}
void SetBootVersion(Application *appPointer, char *version)
{
strncpy((char*)appPointer->bootVers, version, VERSION_LEN) ;
*(appPointer->bootVers+VERSION_LEN+1) = 0 ;
}