/* USER CODE BEGIN Header */ /** ****************************************************************************** * File Name : freertos.c * Description : Code for freertos applications ****************************************************************************** * @attention * * Copyright (c) 2024 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "key.h" #include "tt808.h" #include "usart.h" #include "interface.h" #include "database.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ extern BtFrame btframe; extern LockInfo lockinfo; extern Menu_table menu; extern bool refresh; extern TipsFlag tipsflag; /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN Variables */ uint8_t nomalCount = 0; /* USER CODE END Variables */ osThreadId ScanKeyTaskHandle; osThreadId BT4GTaskHandle; osThreadId testTaskHandle; osThreadId loginfoTaskHandle; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ /* USER CODE END FunctionPrototypes */ void StartScanKeyTask(void const * argument); void StarBT4GTask(void const * argument); void StartTestTask(void const * argument); void StartloginfoTaskTask(void const * argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ /* GetIdleTaskMemory prototype (linked to static allocation support) */ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */ static StaticTask_t xIdleTaskTCBBuffer; static StackType_t xIdleStack[configMINIMAL_STACK_SIZE]; void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) { *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer; *ppxIdleTaskStackBuffer = &xIdleStack[0]; *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; /* place for user code */ } /* USER CODE END GET_IDLE_TASK_MEMORY */ /** * @brief FreeRTOS initialization * @param None * @retval None */ void MX_FREERTOS_Init(void) { /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ /* Create the thread(s) */ /* definition and creation of ScanKeyTask */ osThreadDef(ScanKeyTask, StartScanKeyTask, osPriorityRealtime, 0, 128); ScanKeyTaskHandle = osThreadCreate(osThread(ScanKeyTask), NULL); /* definition and creation of BT4GTask */ osThreadDef(BT4GTask, StarBT4GTask, osPriorityRealtime, 0, 128); BT4GTaskHandle = osThreadCreate(osThread(BT4GTask), NULL); /* definition and creation of testTask */ osThreadDef(testTask, StartTestTask, osPriorityRealtime, 0, 128); testTaskHandle = osThreadCreate(osThread(testTask), NULL); /* definition and creation of loginfoTask */ osThreadDef(loginfoTask, StartloginfoTaskTask, osPriorityRealtime, 0, 128); loginfoTaskHandle = osThreadCreate(osThread(loginfoTask), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ } /* USER CODE BEGIN Header_StartScanKeyTask */ /** * @brief Function implementing the ScanKeyTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartScanKeyTask */ void StartScanKeyTask(void const * argument) { /* USER CODE BEGIN StartScanKeyTask */ /* Infinite loop */ for(;;) { osDelay(1); updatekeystate(); //扫描键值 Jump_interface(); //跳转界面 OLED_Refresh(); //刷新界面 Test485Re();//485CMD ReBTcall();//蓝牙回应 if(BT_Rebuffer[2]==0x02 || BT_Rebuffer[2]==0x03)//开锁回复 { if(BT_Rebuffer[4]==0x01) { printf("\r\n***接收完成\r\n"); macsetptr->macWorked+=1;//个数 macsetptr->worked[workedLock]=1; devices[workedLock]=1; workedLock+=1; if(BT_Rebuffer[2]==0x02) { macsetptr->sta=BtUnlocking;//蓝牙开锁 } else if(BT_Rebuffer[2]==0x03) { macsetptr->sta=LockSuccessClosed;//关锁成功 } for(int i = 0; i < NUM_OF_DEVICES; i++) { if(macsetptr->worked[i]) { macsetptr->worked[i] = false;//置0 tt808FsFunc(macsetptr->mactemp[i], 6, MessageID_uploadLock); } else { printf("%d锁未操作\r\n",i+1); } } } else if(BT_Rebuffer[4]==0x02) { printf("\r\n***流水号异常\r\n"); macsetptr->macWorkedfail+=1; //USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接 } memset(BT_Rebuffer,0,20); } if((macsetptr->macWorked == macsetptr->macCount) && menu.current==3) { menu.current=5; refresh=true; } } /* USER CODE END StartScanKeyTask */ } /* USER CODE BEGIN Header_StarBT4GTask */ /** * @brief Function implementing the BT4GTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StarBT4GTask */ void StarBT4GTask(void const * argument) { /* USER CODE BEGIN StarBT4GTask */ /* Infinite loop */ for(;;) { osDelay(1); { Printf_u4u5logbyU1(); //打印log0 ReMIPURC(); //各式接收处理1 ReU4Proces(); //2 MIPURCHandle(); //平台接收处理(鉴权应答等)3 } } /* USER CODE END StarBT4GTask */ } /* USER CODE BEGIN Header_StartTestTask */ /** * @brief Function implementing the testTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartTestTask */ void StartTestTask(void const * argument) { /* USER CODE BEGIN StartTestTask */ /* Infinite loop */ for(;;) { osDelay(1); RESET_4G_MODULE(); //4G启动(复位) 标志位->reset4Gmodule Pre_processing_4G(); //4G传递准备 标志位->module4G_F if(Allopen) { Allopen=false; uint8_t macset[]={macsetptr->macCount&0xff}; tt808FsFunc(macset, 1, MessageID_Getauth);//全部打开获取权限 } if(reAuth) {//权限回复正确 HAL_Delay(500); reAuth = false; if(menu.enter==0)//开锁 { openOrClose = menu.enter; SET_MENU_STATUS(3,1,0,4); } if(menu.enter==1)//开锁 { openOrClose = menu.enter; SET_MENU_STATUS(3,0,1,4); } } if(menu.current==3 && menu.enter==4) { //uint8_t lockCount = macsetptr->macCount;//共操作锁数 //printf("共操作锁数%d\r\n",lockCount); open_close_lock(); } } /* USER CODE END StartTestTask */ } /* USER CODE BEGIN Header_StartloginfoTaskTask */ /** * @brief Function implementing the loginfoTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartloginfoTaskTask */ void StartloginfoTaskTask(void const * argument) { /* USER CODE BEGIN StartloginfoTaskTask */ /* Infinite loop */ for(;;) { osDelay(10000);//10S更新一次信息 #if openUpload == 1 if(MgnssFlag) { // USART_SendString(&huart4, "AT+CSQ\r\n"); // USART_SendString(&huart4, "AT+MGNSSLOC\r\n"); } #endif //PushpullWork(); //*30s上传信息 nomalCount+=1; if(nomalCount==3) { nomalCount=0; if(uploaweork) { //tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlagH), 34, MessageID_location); //*向主题a发布(保活心跳30s) MQTT_PUB(0,topica,"1234","+MQTTURC: \"puback\""); } } #if timingPush ==1 timecountSec+=1; if(timecountSec==30)//5min { timecountSec=0;//清0 timecountMin+=1;//加1min timecount +=1; //记4为20min } #endif } /* USER CODE END StartloginfoTaskTask */ } /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ /* USER CODE END Application */