浏览代码

启源WIFI开发测试

LAPTOP-KB7QFH2U\ChenJie-PC 2 年之前
父节点
当前提交
e478ca38c2

+ 0 - 2
.settings/org.eclipse.core.resources.prefs

@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8

+ 1 - 1
FreeRTOS/Source/include/FreeRTOSConfig.h

@@ -72,7 +72,7 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */
 /* Memory allocation related definitions. */
 #define configSUPPORT_STATIC_ALLOCATION             0
 #define configSUPPORT_DYNAMIC_ALLOCATION            1
-#define configTOTAL_HEAP_SIZE                       (( size_t ) 8192*4 )
+#define configTOTAL_HEAP_SIZE                       (( size_t ) 8192*8 )
 #define configAPPLICATION_ALLOCATED_HEAP            0
 
 /* Hook function related definitions. */

+ 1 - 0
Project_Settings/Debugger/S32K146_wifi_master_Debug_FLASH_PNE.launch

@@ -216,4 +216,5 @@
 </listAttribute>
 <stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#13;&#10;"/>
 <stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
+<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20002720,0x1fff3e38,0x1fff3c38,0x1fff3c37"/>
 </launchConfiguration>

+ 1 - 0
Project_Settings/Startup_Code/exceptions.c

@@ -89,6 +89,7 @@ void NMI_Handler(void)
 }
 void HardFault_Handler(void)
 {
+	//ASM_KEYWORD("bx lr");
     while(TRUE){};
 }
 void MemManage_Handler(void)

+ 4 - 0
RTD/include/Lpuart_Uart_Ip_HwAccess.h

@@ -640,6 +640,10 @@ static inline void Lpuart_Uart_Ip_ClearStatusFlag(LPUART_Type * Base, Lpuart_Uar
         case LPUART_UART_IP_PARITY_ERR:
             Base->STAT = (Base->STAT & (~LPUART_FEATURE_STAT_REG_FLAGS_MASK)) | LPUART_STAT_PF_MASK;
             break;
+
+        case LPUART_UART_IP_IDLE://Chenjie
+            Base->STAT = (Base->STAT & (~LPUART_FEATURE_STAT_REG_FLAGS_MASK)) | LPUART_STAT_IDLE_MASK;
+            break;
         default:
             /* Dummy code */
             break;

+ 34 - 33
RTD/src/Lpuart_Uart_Ip.c

@@ -161,7 +161,7 @@ Lpuart_Uart_Ip_StateStructureType Lpuart_Uart_Ip_apStateStructure[LPUART_UART_IP
 #include "Uart_MemMap.h"
 
 /* Pointer to lpuart runtime state structure */
-static Lpuart_Uart_Ip_StateStructureType * Lpuart_Uart_Ip_apStateStructuresArray[LPUART_UART_IP_NUMBER_OF_INSTANCES];
+Lpuart_Uart_Ip_StateStructureType * Lpuart_Uart_Ip_apStateStructuresArray[LPUART_UART_IP_NUMBER_OF_INSTANCES];
 
 /** @brief User config structure. */
 const Lpuart_Uart_Ip_UserConfigType * Lpuart_Uart_Ip_apUserConfig[LPUART_UART_IP_NUMBER_OF_INSTANCES];
@@ -218,7 +218,6 @@ static void Lpuart_Uart_Ip_SetupIntDmaMode(const uint8 Instance, boolean Enable)
 static void Lpuart_Uart_Ip_PutData(const uint8 Instance);
 static void Lpuart_Uart_Ip_GetData(const uint8 Instance);
 static void Lpuart_Uart_Ip_RxIrqHandler(const uint8 Instance);
-static void Lpuart_Uart_Ip_RxIdleIrqHandler(uint32 Instance);//zhenchao
 static void Lpuart_Uart_Ip_TxEmptyIrqHandler(const uint8 Instance);
 static void Lpuart_Uart_Ip_TxCompleteIrqHandler(const uint8 Instance);
 static void Lpuart_Uart_Ip_ErrIrqHandler(const uint8 Instance);
@@ -1122,6 +1121,32 @@ Lpuart_Uart_Ip_StatusType Lpuart_Uart_Ip_SetRxBuffer(const uint8 Instance,
     return LPUART_UART_IP_STATUS_SUCCESS;
 }
 
+//zhengchao
+static void Lpuart_Uart_Ip_RxIdleIrqHandler(uint32 Instance)
+{
+    Lpuart_Uart_Ip_StateStructureType * UartState;
+    const Lpuart_Uart_Ip_UserConfigType *UartUserCfg;
+
+    LPUART_Type * Base;
+    Base = Lpuart_Uart_Ip_apBases[Instance];
+
+    UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[Instance];
+    UartUserCfg = (Lpuart_Uart_Ip_UserConfigType*) Lpuart_Uart_Ip_apUserConfig[Instance];
+
+//    /* Disable receive idle interrupt. */
+//    Lpuart_Uart_Ip_SetIntMode(Base, (uint32)LPUART_CTRL_ILIE_SHIFT, FALSE);
+    
+    /* Invoke callback if there is one */
+	/* Clear idle flag*/
+	Lpuart_Uart_Ip_ClearStatusFlag(Base, LPUART_UART_IP_IDLE);
+    if (UartUserCfg->Callback != NULL_PTR)
+    {
+    	UartUserCfg->Callback(Instance, LPUART_UART_IP_EVENT_RECV_IDLE,UartUserCfg->CallbackParam);
+    }
+    UartState->ReceiveStatus = LPUART_UART_IP_STATUS_SUCCESS;
+    Lpuart_Uart_Ip_CompleteReceiveUsingDma(Instance);
+}
+
 /*FUNCTION**********************************************************************
  *
  * Function Name : Lpuart_Uart_Ip_IrqHandler
@@ -1196,13 +1221,13 @@ void Lpuart_Uart_Ip_IrqHandler(const uint8 Instance)
                 /* Do nothing, because TC can not clear without affecting to normal operation*/
             }
         }
-        /*Handle receiving data idle interrupt*/
-		if (Lpuart_Uart_Ip_GetStatusFlag(Base, (uint32)LPUART_UART_IP_IDLE) && (FALSE == IsReturn))
+
+        /*Handle receiving data idle interrupt*///zhengchao
+		if (Lpuart_Uart_Ip_GetStatusFlag(Base, LPUART_UART_IP_IDLE) && (FALSE == IsReturn))
 		{
-			if (Lpuart_Uart_Ip_GetIntMode(Base, (uint32)LPUART_UART_IP_IDLE))
+			if (Lpuart_Uart_Ip_GetIntMode(Base, LPUART_UART_IP_IDLE))
 			{
 				Lpuart_Uart_Ip_RxIdleIrqHandler(Instance);
-				//return;
 			}
 			else
 			{
@@ -1211,31 +1236,7 @@ void Lpuart_Uart_Ip_IrqHandler(const uint8 Instance)
 		}
     }
 }
-//zhengchao
-static void Lpuart_Uart_Ip_RxIdleIrqHandler(uint32 Instance)
-{
-    Lpuart_Uart_Ip_StateStructureType * UartState;
-    const Lpuart_Uart_Ip_UserConfigType *UartUserCfg;
-
-    LPUART_Type * Base;
-    Base = Lpuart_Uart_Ip_apBases[Instance];
-
-    UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[Instance];
-    UartUserCfg = (Lpuart_Uart_Ip_UserConfigType*) Lpuart_Uart_Ip_apUserConfig[Instance];
 
-    /* Disable receive idle interrupt. */
-    Lpuart_Uart_Ip_SetIntMode(Base, (uint32)LPUART_CTRL_ILIE_SHIFT, FALSE);
-    /* Clear idle flag*/
-    Base->STAT |= LPUART_STAT_IDLE(0);
-
-    /* Invoke callback if there is one */
-    if (UartUserCfg->Callback != NULL_PTR)
-    {
-    	UartUserCfg->Callback(Instance, LPUART_UART_IP_EVENT_RECV_IDLE,UartUserCfg->CallbackParam);
-    }
-    UartState->ReceiveStatus = LPUART_UART_IP_STATUS_SUCCESS;
-
-}
 /*FUNCTION**********************************************************************
  *
  * Function Name : Lpuart_Uart_Ip_RxIrqHandler
@@ -1872,7 +1873,7 @@ static void Lpuart_Uart_Ip_CompleteReceiveDataUsingInt(const uint8 Instance)
     /* In Abort case, the transmission need to stop instantly */
     if (UartState->ReceiveStatus == LPUART_UART_IP_STATUS_ABORTED)
     {
-        Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US, LPUART_UART_IP_TIMEOUT_TYPE);
+        Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US/10, LPUART_UART_IP_TIMEOUT_TYPE);
         /* Wait until the data is completely received */
         while (!Lpuart_Uart_Ip_GetStatusFlag(Base, LPUART_UART_IP_DATA_REG_FULL) && \
                !Lpuart_Uart_Ip_CheckTimeout(&StartTime, &ElapsedTicks, TimeoutTicks, LPUART_UART_IP_TIMEOUT_TYPE))
@@ -1984,7 +1985,7 @@ void Lpuart_Uart_Ip_CompleteReceiveUsingDma(uint8 Instance)
         if (UartState->ReceiveStatus == LPUART_UART_IP_STATUS_ABORTED)
         {
             /* Wait until the last transmission complete */
-            Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US, LPUART_UART_IP_TIMEOUT_TYPE);
+            Lpuart_Uart_Ip_StartTimeout(&StartTime, &TimeoutTicks, LPUART_UART_IP_TIMEOUT_VALUE_US/10, LPUART_UART_IP_TIMEOUT_TYPE);
             while (!Lpuart_Uart_Ip_GetStatusFlag(Base, LPUART_UART_IP_DATA_REG_FULL) && \
                !Lpuart_Uart_Ip_CheckTimeout(&StartTime, &ElapsedTicks, TimeoutTicks, LPUART_UART_IP_TIMEOUT_TYPE))
             {}
@@ -2032,7 +2033,7 @@ static void Lpuart_Uart_Ip_SetupIntDmaMode(const uint8 Instance, boolean Enable)
       Base = Lpuart_Uart_Ip_apBases[Instance];
 
       /* Setup error interrupts */
-      Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_RX_OVERRUN, Enable);
+      Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_RX_OVERRUN, 0);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_PARITY_ERR_FLAG, Enable);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_NOISE_ERR_FLAG, Enable);
       Lpuart_Uart_Ip_SetIntMode(Base, LPUART_UART_IP_INT_FRAME_ERR_FLAG, Enable);

+ 2 - 2
RTD/src/Uart_Ipw.c

@@ -947,8 +947,8 @@ static Uart_EventType Uart_Ipw_LpuartConvertEventType(Lpuart_Uart_Ip_EventType E
             TempEvent = UART_EVENT_ERROR;
             break;
         case LPUART_UART_IP_EVENT_RECV_IDLE:  //zhengchao
-			TempEvent = UART_EVENT_IDLE;
-			break;
+        	TempEvent = UART_EVENT_IDLE;
+        	break;
         default:
             /* Nothing to do */
             break;

+ 1 - 1
generate/include/Flexio_Uart_Ip_Defines.h

@@ -92,7 +92,7 @@ extern "C"{
 #define FLEXIO_UART_IP_TIMEOUT_TYPE                     (OSIF_COUNTER_SYSTEM)
 
 /* @brief Number of loops before returning FLEXIO_STATUS_TIMEOUT.*/
-#define FLEXIO_UART_IP_TIMEOUT_VALUE_US                 (10000U)
+#define FLEXIO_UART_IP_TIMEOUT_VALUE_US                 (100000U)
 
 /* @brief Support for User mode. If this parameter has been configured to TRUE, the Uart driver can be executed from both supervisor and user mode. */
 #define FLEXIO_UART_IP_ENABLE_USER_MODE_SUPPORT         (STD_OFF)

+ 1 - 1
generate/include/Lpuart_Uart_Ip_Defines.h

@@ -86,7 +86,7 @@ extern "C"{
 #define LPUART_UART_IP_TIMEOUT_TYPE                 (OSIF_COUNTER_SYSTEM)
 
 /* @brief Number of loops before returning LPUART_STATUS_TIMEOUT.*/
-#define LPUART_UART_IP_TIMEOUT_VALUE_US             (100000U)
+#define LPUART_UART_IP_TIMEOUT_VALUE_US             (10000U)  //zhengchao
 
 /* @brief LPUART DMA support */
 #define LPUART_UART_IP_HAS_DMA_ENABLED              (STD_ON)

+ 1 - 1
generate/include/Uart_Defines.h

@@ -92,7 +92,7 @@ extern "C"
 #define UART_TIMEOUT_TYPE               (OSIF_COUNTER_SYSTEM)
 
 /* @brief Number of loops before returning Timeout status */
-#define UART_TIMEOUT_VALUE_US           (10000U)
+#define UART_TIMEOUT_VALUE_US           (100000U)
 
 /* @brief Switches the Uart_GetVersionInfo() API ON or OFF. Support for version info API. */
 #define UART_VERSION_INFO_API           (STD_ON)

+ 27 - 6
src/AppFuncLib.c

@@ -9,8 +9,8 @@
  */
 /*
  * AppFuncLib.c
- *
- *  Created on: 2022Äê1ÔÂ21ÈÕ
+ *应用层函数库
+ *  Created on: 2022年1月21日
  *      Author: QiXiang_CHENJIE
  */
 
@@ -68,7 +68,7 @@ unsigned char HexToChar(unsigned char bHex)
 {
     if ((bHex >= 0) && (bHex <= 9))
         bHex += 0x30;
-    else if ((bHex >= 10) && (bHex <= 15)) //´óд×Öĸ
+    else if ((bHex >= 10) && (bHex <= 15)) //大写字�
         bHex += 0x37;
     else
         bHex = 0xff;
@@ -78,9 +78,9 @@ unsigned char CharToHex(unsigned char bChar)
 {
     if ((bChar >= 0x30) && (bChar <= 0x39))
         bChar -= 0x30;
-    else if ((bChar >= 0x41) && (bChar <= 0x46)) //´óд×Öĸ
+    else if ((bChar >= 0x41) && (bChar <= 0x46)) //大写字�
         bChar -= 0x37;
-    else if ((bChar >= 0x61) && (bChar <= 0x66)) //Сд×Öĸ
+    else if ((bChar >= 0x61) && (bChar <= 0x66)) //�写字�
         bChar -= 0x57;
     else
         bChar = 0xff;
@@ -91,7 +91,7 @@ uint8 AtStrCompare(const char *a, const char *b)
     uint8 out = 1;
     while (1)
     {
-        if (*a == '\0' || *b == '\0') //ÅÐ¶ÏÆäÖÐÊÇ·ñÓÐ×Ö·û´®½áÊø
+        if (*a == '\0' || *b == '\0') //判断其中是�有字符串结�
         {
             if (strlen(a) == strlen(b))
             {
@@ -142,3 +142,24 @@ unsigned short CRC16_Modbus ( unsigned char *pdata, int len)
 	}
 	return crc;
 }
+uint16 crc_chk(uint8 *data, uint8 length)
+{
+	uint8 j;
+	uint16 reg_crc = 0xFFFF;
+	while (length--)
+	{
+		reg_crc ^= *data++;
+		for (j = 0; j < 8; j++)
+		{
+			if (reg_crc & 0x01)
+			{
+				reg_crc = (reg_crc >> 1) ^ 0xA001;
+			}
+			else
+			{
+				reg_crc = reg_crc >> 1;
+			}
+		}
+	}
+	return reg_crc;
+}

+ 1 - 0
src/AppFuncLib.h

@@ -24,4 +24,5 @@ unsigned char HexToChar(unsigned char bHex);
 unsigned char CharToHex(unsigned char bChar);
 uint8 AtStrCompare(const char *a, const char *b);
 unsigned short CRC16_Modbus ( unsigned char *pdata, int len);
+uint16 crc_chk(uint8 *data, uint8 length);
 #endif /* APPFUNCLIB_H_ */

+ 19 - 13
src/AppGlobalVar.c

@@ -10,30 +10,36 @@
 /*
  * AppGlobalVar.c
  *
- *  Created on: 2022Äê1ÔÂ19ÈÕ
+ *  Created on: 2022年1月19日
  *      Author: QiXiang_CHENJIE
  */
 
 #include "AppGlobalVar.h"
-//*È«¾Ö±äÁ¿*//
-uint32 BleVersion = 0x01010401;         // bleµÄÈí¼þ°æ±¾
+//*全局��*//
+uint32 BleVersion = 0x01010401;         // ble的软件版本
 uint8 BleMacAddr[6];
 uint8 BleTargetMacAddr[6] = {0xBE, 0x84, 0xCC, 0x29, 0x3B, 0xCB};
 uint8 BleCurrentRole = 0;
-uint8 BleSetRole = 0;          // 0-´Ó»ú£¨Ä¬ÈÏ£©£¬1-Ö÷»ú
-uint8 BleSetRoleEnable = 0;    //ĬÈϽÇÉ«²»ÉèÖÃ
-uint8 BleConnectEnable = 0;    //Ö÷»úÀ¶ÑÀÁ¬½ÓʹÄÜ,0-δʹÄÜ£¬1-ʹÄÜ
-uint8 BleConnectFlg = 0;       //Ö÷»úÀ¶ÑÀÁ¬½Ó״̬£¬0-δÁ¬½Ó£¬1-Á¬½Ó
-uint8 BleDisconnectEnable = 0; //Ö÷»úÀ¶ÑÀ¶Ï¿ªÊ¹ÄÜ,0-δʹÄÜ£¬1-ʹÄÜ
-uint8 BleDisconnectFlg = 0;    //Ö÷»úÀ¶ÑÀ¶Ï¿ªÁ¬½Ó״̬£¬0-δÁ¬½Ó£¬1-Á¬½Ó
-uint8 BlePwrControlEnable = 0; //À¶ÑÀ¿ª¹Ø»úʹÄÜ£¬Ä¬Èϲ»Ê¹ÄÜ£¬×Ô¶¯¿ª»ú
-uint8 BlePwrControlFlg = 0;    //À¶ÑÀ¿ª¹Ø»ú¿ØÖÆ£¬1-¹Ø»ú£¬0-¿ª»ú£¬2-ÖØÆô
-uint8 BlePwrState = 0;         //À¶ÑÀ¿ª¹Ø»ú״̬
+uint8 BleSetRole = 0;          // 0-从机(默认),1-主机
+uint8 BleSetRoleEnable = 0;    //默认角色�设置
+uint8 BleConnectEnable = 0;    //主机�牙连接使能,0-未使能,1-使能
+uint8 BleConnectFlg = 0;       //主机�牙连接状�,0-未连接,1-连接
+uint8 BleDisconnectEnable = 0; //主机�牙断开使能,0-未使能,1-使能
+uint8 BleDisconnectFlg = 0;    //主机�牙断开连接状�,0-未连接,1-连接
+uint8 BlePwrControlEnable = 0; //�牙开关机使能,默认�使能,自动开机
+uint8 BlePwrControlFlg = 0;    //�牙开关机控制,1-关机,0-开机,2-��
+uint8 BlePwrState = 0;         //�牙开关机状�
 
-uint8 AT_MsgFlag = false; //ÊÇ·ñÓÐÊý¾Ý´«ÊäÐèÇó
+uint8 AT_MsgFlag = false; //是�有数�传输需求
 QueueHandle_t McuDataSendHandle;
 QueueHandle_t McuDataRecvHandle;
 SemaphoreHandle_t ConnSemaphore;
+
+SemaphoreHandle_t ConnSemaphore_wifi;
+QueueHandle_t McuDataSend_wifi;
+QueueHandle_t McuDataRecv_wifi;
+uint8 wifiConnFlg = 0;//WIFI 连接状�
+uint8 wifiAskFlg = false; //Mcu是�有数�传输需求
 /*Can*/
 uint8 CanIf_u8TxConfirmCnt = 0U;
 boolean CanIf_bTxFlag = false;

+ 17 - 17
src/AppGlobalVar.h

@@ -10,36 +10,36 @@
 /*
  * AppGlobal.h
  *
- *  Created on: 2022年1月19日
+ *  Created on:
  *      Author: QiXiang_CHENJIE
  */
 #ifndef APPGLOBALVAR_H_
 #define APPGLOBALVAR_H_
 
 #include "hal_adapter.h"
-//*全局变量*//
+
 extern uint8 BleMacAddr[6];
 extern uint8 BleTargetMacAddr[6];
 extern uint8 BleCurrentRole;
-extern uint8 BleSetRole;          // 0-从机(默认),1-主机
-extern uint8 BleSetRoleEnable;    //默认角色不设置
-extern uint8 BleConnectEnable;    //主机蓝牙连接使能,0-未使能,1-使能
-extern uint8 BleConnectFlg;       //主机蓝牙连接状态,0-未连接,1-连接
-extern uint8 BleDisconnectEnable; //主机蓝牙断开使能,0-未使能,1-使能
-extern uint8 BleDisconnectFlg;    //主机蓝牙断开连接状态,0-未连接,1-连接
-extern uint8 BlePwrControlEnable; //蓝牙开关机使能,默认不使能,自动开机
-extern uint8 BlePwrControlFlg;    //蓝牙开关机控制,1-关机,0-开机
-extern uint8 BlePwrState;         //蓝牙开关机状态
-extern uint32 BleVersion;         // ble的软件版本
+extern uint8 BleSetRole;
+extern uint8 BleSetRoleEnable;
+extern uint8 BleConnectEnable;
+extern uint8 BleConnectFlg;
+extern uint8 BleDisconnectEnable;
+extern uint8 BleDisconnectFlg;
+extern uint8 BlePwrControlEnable;
+extern uint8 BlePwrControlFlg;
+extern uint8 BlePwrState;
+extern uint32 BleVersion;
 extern uint8 AT_MsgFlag;
 extern QueueHandle_t McuDataSendHandle;
 extern QueueHandle_t McuDataRecvHandle;
 extern SemaphoreHandle_t ConnSemaphore;
-typedef struct
-{
-	uint8 RealLen;
-    uint8 *DataPtr;
-} BleRecvDataFromUart2;
+extern SemaphoreHandle_t ConnSemaphore_wifi;
+extern QueueHandle_t McuDataSend_wifi;
+extern QueueHandle_t McuDataRecv_wifi;
+extern uint8 wifiConnFlg;
+extern uint8 wifiAskFlg ;
 typedef struct
 {
 	uint8 RealLen;

+ 531 - 543
src/AppTaskBle.c

@@ -1,548 +1,536 @@
-///*
-// * AppTaskBle.c
-// *
-// *  Created on: 2022年1月19日
-// *      Author: 陈杰
-// */
-//#include "AppTaskBle.h"
-//const BleAtCmdFunc_t BleAtCmdFunc[] = {
-//	{AT_Cmd_Test, "AT", at_callbackFunc},
-//	{AT_GetMac, "AT+MAC?", at_callbackFunc},
-//	{AT_NameChk, "AT+NAME?", at_callbackFunc},
-//	{AT_NameSet, "AT+NAME=", at_callbackFunc},
-//	{AT_AutoConnSet, "AT+AUTOCONN=", at_callbackFunc},
-//	{AT_LogMsgSet, "AT+LOGMSG=", at_callbackFunc},
-//	{AT_RoleChk, "AT+ROLE?", at_callbackFunc},
-//	{AT_RoleSet, "AT+ROLE=", at_callbackFunc},
-//	{AT_Conn, "AT+CONN=", at_callbackFunc},
-//	{AT_DisCon, "AT+DISCON", at_callbackFunc},
-//	{AT_Reset, "AT+RESET", at_callbackFunc}};
-//static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, uint8 *CmdRead, sint8 *retFunc);
-//static void bleInit(void);
-//static sint8 bleRoleSetFunc(void);
-//void BleTask(void *pvParameters)
-//{
-//	(void)pvParameters;
-//	uint8 McuDataSend[10] = {0};
-//	sint8 QueueRet = -1;
-//	uint8 AtCmdRead[150] = {0};
-//	Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
-//	bleInit();
-//	Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
-//	uint8 bleWorkState = 0;
-//	sint8 ret = -1;
-//	QueueDataTrans_Type BleAnsData={0,NULL};
-//	QueueDataTrans_Type BleAskData={0,NULL};
-//	uint16 ReadLen = 0;
-//	uint8 *retptr = NULL;
-//	uint8 *pSend = NULL;
-//	for (;;)
-//	{
-//		switch (bleWorkState)
-//		{
-//		case 0: //等待连接或者主动连接
-//		{
-//			if (BleSetRoleEnable) //是否更改角色
-//			{
-//				if (bleRoleSetFunc() == 0)
-//				{
-//					BleSetRoleEnable = 0;
-//				}
-//			}
-//			if (BleCurrentRole == 1)
-//			{
-//				if (BleConnectEnable == 1 && BleConnectFlg == 0) //主机蓝牙主动请求连接
-//				{
-//					Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
-//					AtcmdTransmit(AT_Conn, BleTargetMacAddr, sizeof(BleTargetMacAddr), AtCmdRead, &ret);
-//					if (ret == 0) //连接成功
-//					{
-//						bleWorkState = 1;
-//						BleConnectEnable = 0;
-//						BleConnectFlg = 1;
-//						BleDisconnectFlg = 0;
-//						xSemaphoreGive(ConnSemaphore);
-//					}
-//					else
-//					{
-//						BleConnectFlg = 0;
-//					}
-//					Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
-//				}
-//			}
-//
-//			memset(RX_Buffer[UART_LPUART2], 0x00, sizeof(RX_Buffer[UART_LPUART2]));
-//			UART_Receive_Data(UART_LPUART2, RX_Buffer[UART_LPUART2],&ReadLen, 100);
-//			memcpy(AtCmdRead, RX_Buffer[UART_LPUART2], sizeof(AtCmdRead));
-//			if (ReadLen>0)//未连接状态下,蓝牙串口处会发送连接状态以及扫描的内容
-//			{
-//				retptr = (uint8 *)strstr((char *)AtCmdRead, (char *)("STA:connect"));
-//				if (retptr)
-//				{
-//					bleWorkState = 1;
-//					BleConnectEnable = 0;
-//					BleConnectFlg = 1;
-//					BleDisconnectFlg = 0;
-//					xSemaphoreGive(ConnSemaphore);
-//				}
-//				if(BleCurrentRole == 0)//如果从机在串口0上收到数据,则证明已连接
-//				{
-//					uint8 DataTemp[8] = {0x00};
-//					DataTemp[0] = 0x01;
-//					DataTemp[1] = 0x01;
-//					bleWorkState = 1;
-//					BleConnectFlg = 1;
-//					BleDisconnectFlg = 0;
-//					BleAskData.RealLen = 1;
-//					BleAskData.DataPtr = DataTemp;
-//					xQueueSend(Uart2ToCanDataHandle,&BleAskData,0);
-//				}
-//			}
-//			break;
-//		}
-//		case 1: //已连接
-//		{
-//			if (BleDisconnectEnable == 1 && BleDisconnectFlg == 0)//主从机均可断开连接
-//			{
-//				//蓝牙断开指令,Mod拉低,才能发送命令
-//				/*S32K*/
-//				Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
-//
-//				memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//				AtcmdTransmit(AT_DisCon, NULL, 0, AtCmdRead, &ret);
-//				if (ret == 0)
-//				{
-//					memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//					AtcmdTransmit(AT_Reset, NULL, 0, AtCmdRead, &ret);
-//					if (ret == 0)
-//					{
-//						BleDisconnectFlg = 1;
-//						BleDisconnectEnable = 0;
-//						BleConnectFlg = 0;
-//						/*S32K*/
-//						bleWorkState = 0;
-//						Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
-//					}
-//				}
-//				else
-//				{
-//					BleDisconnectFlg = 0;
-//				}
-//			}
-//			/*已连接状态下的数据交换在此进行
-//			UartTramsit;
-//			*/
-//			/*S32K144*/
-//			if (BleCurrentRole == 1)//主机蓝牙在连接状态下的蓝牙串口发送功能,从MCU串口0队列得到,发给串口2
-//			{
-//				if(AT_MsgFlag)
-//				{
-//					QueueRet = xQueueReceive(McuDataSendHandle,McuDataSend,0);
-//					UART_Send_Data(UART_LPUART2,McuDataSend,sizeof(McuDataSend),1000);
-//					AT_MsgFlag = false;
-//				}
-//			}
-//			else if(BleCurrentRole == 0)//从机蓝牙在连接状态下的蓝牙串口发送功能,从CAN队列得到,发给串口2
-//			{
-//				if((xQueueReceive(CanToUart2DataHandle,&BleAnsData,0)==pdPASS))
-//				{
-//					UART_Send_Data(UART_LPUART2,BleAnsData.DataPtr,BleAnsData.RealLen,1000);
-//					if(BleAnsData.DataPtr)
-//					{
-//						free(BleAnsData.DataPtr);
-//					}
-//					BleAnsData.DataPtr = NULL;
-//				}
-//			}
-//			memset(RX_Buffer[UART_LPUART2], 0x00, sizeof(RX_Buffer[UART_LPUART2]));
-//			UART_Receive_Data(UART_LPUART2, RX_Buffer[UART_LPUART2],&ReadLen, 100);
-//			memcpy(AtCmdRead, RX_Buffer[UART_LPUART2], sizeof(AtCmdRead));
-//			if (ReadLen>0)//连接的状态下,蓝牙串口会发送断开状态以及发送的内容
-//			{
-//				uint8 *retptr = NULL;
-//				retptr = (uint8 *)strstr((char *)AtCmdRead, (char *)("STA:disconnec"));
-//				if(retptr)
-//				{
-//					bleWorkState = 0;
-//					BleDisconnectFlg = 1;
-//					BleConnectFlg = 0;
-//					if(BleCurrentRole == 0)//从机断开连接,主动给ebc发送一帧信息
-//					{
-//						uint8 DataTemp[8] = {0x00};
-//						DataTemp[0] = 0x01;
-//						DataTemp[1] = 0x02;
-//						BleAskData.RealLen = 1;
-//						BleAskData.DataPtr = DataTemp;
-//						xQueueSend(Uart2ToCanDataHandle,&BleAskData,0);
-//					}
-//				}
-//				else
-//				{
-//					if(BleCurrentRole == 1)
-//					{
-//						BleRecvDataFromUart2 DataSend={0,NULL};
-//						DataSend.RealLen = ReadLen;
-//						DataSend.DataPtr = malloc(ReadLen+1);
-//						memset(DataSend.DataPtr,0x00,ReadLen+1);
-//						memcpy(DataSend.DataPtr,AtCmdRead,DataSend.RealLen);
-//						sint8 McuDataRet = -1;
-//						McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);//增加数据的有效性判定,主机蓝牙从Uart2->Uart0数据的有效性,len>7?
-//						if(McuDataRet!=pdPASS)
-//						{
-//							if(DataSend.DataPtr != NULL)
-//							{
-//								free(DataSend.DataPtr);
-//							}
-//							DataSend.DataPtr = NULL;
-//						}
-//					}
-//					else if(BleCurrentRole == 0 && ReadLen==10)
-//					{
-//						BleAskData.RealLen = ReadLen;
-//						BleAskData.DataPtr = malloc(ReadLen);
-//						memset(BleAskData.DataPtr,0x00,BleAskData.RealLen);
-//						memcpy(BleAskData.DataPtr,AtCmdRead,BleAskData.RealLen);
-//						if(xQueueSend(Uart2ToCanDataHandle,&BleAskData,1000*5)!=pdPASS)
-//						{
-//							if(BleAskData.DataPtr != NULL)
-//							{
-//								free(BleAskData.DataPtr);
-//							}
-//							BleAskData.DataPtr = NULL;
-//						}
-//					}
-//				}
-//			}
-//			break;
-//		}
-//		default:
-//			bleWorkState = 0;
-//			break;
-//		}
-//	}
-//}
-//static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, uint8 *CmdRead, sint8 *retFunc)
-//{
-//	uint16 ReadLen = 0;
-//	uint8 ATCmd_Send[50];
-//	uint16 ATCmd_SendLen;
-//	memset(ATCmd_Send, 0x00, sizeof(ATCmd_Send));
-//	ATCmd_SendLen = mstrlen(BleAtCmdFunc[CmdIdx].str);
-//	memcpy(ATCmd_Send, BleAtCmdFunc[CmdIdx].str, ATCmd_SendLen);
-//	if (SetValuePtr != NULL)
-//	{
-//		memcpy(&ATCmd_Send[ATCmd_SendLen], SetValuePtr, SetValueLen);
-//	}
-//	ATCmd_SendLen = ATCmd_SendLen + SetValueLen;
-//	/**/
-//	memset(RX_Buffer[UART_LPUART2], 0x00, sizeof(RX_Buffer[UART_LPUART2]));
-//	UART_Query_Data(UART_LPUART2, UART_LPUART2, ATCmd_Send, ATCmd_SendLen, RX_Buffer[UART_LPUART2],&ReadLen, 1000);
-//	memcpy(CmdRead, RX_Buffer[UART_LPUART2], 50);
-//	/*
-//	UartTramsit(ATCmd_Send, ATCmd_SendLen, CmdRead, 1, osWaitForever);
-//	*/
-//	*retFunc = BleAtCmdFunc[CmdIdx].cb(ATCmd_Send, CmdRead, CmdIdx);
-//	return;
-//}
-//static void bleInit(void)
-//{
-//	uint8 AtCmdRead[50];
-//	sint8 ret = -1;
-//	uint8 bleInitStep = 0;
-//	uint8 BleCurrentName[6];
-//	while (1)
-//	{
-//		vTaskDelay(pdMS_TO_TICKS(100));
-//		switch (bleInitStep)
-//		{
-//		case 0: // AT同步
-//		{
-//			//UartTramsit(NULL, 0, AtCmdRead, 1, 100);
-//			uint16 Readlen = 0;
-//			UART_Receive_Data(UART_LPUART2, AtCmdRead,&Readlen, 100);
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_Cmd_Test, NULL, 0, AtCmdRead, &ret);
-//			if (ret == 0)
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				vTaskDelay(pdMS_TO_TICKS(1000));
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 1: //获取Mac地址
-//		{
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_GetMac, NULL, 0, AtCmdRead, &ret);
-//			memcpy(BleMacAddr, &AtCmdRead[4], sizeof(BleMacAddr));
-//			if (ret == 0)
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 2: //广播名称设置
-//		{
-//			uint8 NameChk = 0; //默认不需要设置
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_NameChk, NULL, 0, AtCmdRead, &ret);
-//			for (uint8 i = 0; i < 6; i++)
-//			{
-//				if (mstrlen((char *)AtCmdRead) != 16)
-//				{
-//					NameChk = 1;
-//					break;
-//				}
-//				else
-//				{
-//					BleCurrentName[i] = (CharToHex(AtCmdRead[(i * 2) + 4]) << 4) + CharToHex(AtCmdRead[(i * 2 + 1) + 4]);
-//					if (BleMacAddr[i] != BleCurrentName[i])
-//					{
-//						NameChk = 1;
-//						break;
-//					}
-//				}
-//			}
-//			if (NameChk)
-//			{
-//				uint8 NameTemp[12] = {0};
-//				for (uint8 i = 0; i < 6; i++)
-//				{
-//					NameTemp[(i * 2)] = HexToChar(BleMacAddr[i] >> 4);
-//					NameTemp[(i * 2) + 1] = HexToChar(BleMacAddr[i] & 0x0F);
-//				}
-//				memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//				AtcmdTransmit(AT_NameSet, NameTemp, 12, AtCmdRead, &ret);
-//			}
-//			if (ret == 0)
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 3: //关闭自动连接
-//		{
-//			uint8 CmdTemp = '0';
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_AutoConnSet, &CmdTemp, 1, AtCmdRead, &ret);
-//			if (ret == 0)
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 4: //打开log输出
-//		{
-//			uint8 CmdTemp = '1';
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_LogMsgSet, &CmdTemp, 1, AtCmdRead, &ret);
-//			if (ret == 0)
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 5: //角色获取
-//		{
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_RoleChk, NULL, 0, AtCmdRead, &ret);
-//			BleCurrentRole = CharToHex(AtCmdRead[4]);
-//			if (ret == 0 && (BleCurrentRole == 0 || BleCurrentRole == 1))
-//			{
-//				bleInitStep++;
-//			}
-//			else
-//			{
-//				bleInitStep = 0;
-//			}
-//			break;
-//		}
-//		case 6:
-//		{
-//			return;
-//		}
-//		default:
-//			bleInitStep = 0;
-//			break;
-//		}
-//	}
-//	return;
-//}
-//static sint8 bleRoleSetFunc(void)
-//{
-//	uint8 AtCmdRead[50];
-//	sint8 ret = -1;
-//	uint8 BleRoleSetStep = 0;
-//	uint16 ReadLen = 0;
-//	while (1)
-//	{
-//		vTaskDelay(pdMS_TO_TICKS(100));
-//		switch (BleRoleSetStep)
-//		{
-//		case 0: // AT同步
-//		{
-//			//			UartTramsit(NULL, 0, AtCmdRead, 1, 100);
-//			UART_Receive_Data(UART_LPUART2, AtCmdRead,&ReadLen, 1000);
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_Cmd_Test, NULL, 0, AtCmdRead, &ret);
-//			if (ret == 0)
-//			{
-//				BleRoleSetStep++;
-//			}
-//			else
-//			{
-//				return -1;
-//			}
-//			break;
-//		}
-//		case 1: //角色检查
-//		{
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_RoleChk, NULL, 0, AtCmdRead, &ret);
-//			BleCurrentRole = CharToHex(AtCmdRead[4]);
-//			if (ret == 0)
-//			{
-//				if (BleCurrentRole == BleSetRole)
-//				{
-//					return 0;
-//				}
-//				else
-//				{
-//					BleRoleSetStep++;
-//				}
-//			}
-//			else
-//			{
-//				BleRoleSetStep = 0;
-//			}
-//			break;
-//		}
-//		case 2: //角色设置
-//		{
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			uint8 RoleTemp;
-//			RoleTemp = HexToChar(BleSetRole);
-//			AtcmdTransmit(AT_RoleSet, &RoleTemp, 1, AtCmdRead, &ret);
-//			if (ret == 0)
-//			{
-//				BleRoleSetStep++;
-//			}
-//			else
-//			{
-//				BleRoleSetStep = 0;
-//			}
-//			break;
-//		}
-//		case 3: //蓝牙模块重启
-//		{
-//			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
-//			AtcmdTransmit(AT_Reset, NULL, 0, AtCmdRead, &ret);
-//			BleRoleSetStep = 0;
-//			break;
-//		}
-//		default:
-//			BleRoleSetStep = 0;
-//			break;
-//		}
-//	}
-//	return 0;
-//}
-//sint8 at_callbackFunc(uint8 *PSendStr, uint8 *ptr, BleAtCmd CmdIdx)
-//{
-//	uint16 pReadLen = 0;
-//	sint8 returnvalue = -1;
-//	uint8 *retptr = NULL;
-//	switch (CmdIdx)
-//	{
-//	case AT_Cmd_Test:
-//	{
-//		pReadLen = ATstrdel((char *)ptr);
-//		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
-//		if (retptr && strlen((char *)ptr) < 5)
-//		{
-//			returnvalue = 0;
-//		}
-//		else
-//		{
-//			returnvalue = -1;
-//		}
-//		break;
-//	}
-//	case AT_GetMac:
-//	{
-//		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
-//		if (retptr && strlen((char *)ptr) > 5)
-//		{
-//			returnvalue = 0;
-//		}
-//		else
-//		{
-//			returnvalue = -1;
-//		}
-//		break;
-//	}
-//	case AT_NameChk:
-//	{
-//		pReadLen = ATstrdel((char *)ptr);
-//		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
-//		if (retptr && strlen((char *)ptr) > 5)
-//		{
-//			returnvalue = 0;
-//		}
-//		else
-//		{
-//			returnvalue = -1;
-//		}
-//		break;
-//	}
-//	case AT_Conn:
-//	{
-//		pReadLen = ATstrdel((char *)ptr);
-////		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
-////		if (retptr)
-////		{
-////			returnvalue = 0;
-////		}
-//		retptr = (uint8 *)strstr((char *)ptr, (char *)("ERR=-14"));//利用最大连接数错误判断连接成功
-//		if(retptr)
-//		{
-//			returnvalue = 0;
-//		}
-//		break;
-//	}
-//	default:
-//	{
-//		pReadLen = ATstrdel((char *)ptr);
+/*
+ * AppTaskBle.c
+ *
+ *  Created on: 2022
+ *      Author: 闄堟澃
+ */
+#include "AppTaskBle.h"
+const BleAtCmdFunc_t BleAtCmdFunc[] = {
+	{AT_Cmd_Test, "AT", at_callbackFunc},
+	{AT_GetMac, "AT+MAC?", at_callbackFunc},
+	{AT_NameChk, "AT+NAME?", at_callbackFunc},
+	{AT_NameSet, "AT+NAME=", at_callbackFunc},
+	{AT_AutoConnSet, "AT+AUTOCONN=", at_callbackFunc},
+	{AT_LogMsgSet, "AT+LOGMSG=", at_callbackFunc},
+	{AT_RoleChk, "AT+ROLE?", at_callbackFunc},
+	{AT_RoleSet, "AT+ROLE=", at_callbackFunc},
+	{AT_Conn, "AT+CONN=", at_callbackFunc},
+	{AT_DisCon, "AT+DISCON", at_callbackFunc},
+	{AT_Reset, "AT+RESET", at_callbackFunc}};
+static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, uint8 *CmdRead, sint8 *retFunc);
+static void bleInit(void);
+static sint8 bleRoleSetFunc(void);
+void BleTask(void *pvParameters)
+{
+	(void)pvParameters;
+	uint8 McuDataSend[10] = {0};
+	sint8 QueueRet = -1;
+	uint8 AtCmdRead[150] = {0};
+    Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_BT_POW_EN,STD_ON);
+
+	Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
+	bleInit();
+	Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
+	uint8 bleWorkState = 0;
+	sint8 ret = -1;
+	QueueDataTrans_Type BleAnsData={0,NULL};
+	QueueDataTrans_Type BleAskData={0,NULL};
+	uint16 ReadLen = 0;
+	uint8 *retptr = NULL;
+	uint8 *pSend = NULL;
+	for (;;)
+	{
+		switch (bleWorkState)
+		{
+		case 0: //绛夊緟杩炴帴鎴栬€呬富鍔ㄨ繛鎺�
+		{
+			if (BleSetRoleEnable) //鏄�惁鏇存敼瑙掕壊
+			{
+				if (bleRoleSetFunc() == 0)
+				{
+					BleSetRoleEnable = 0;
+				}
+			}
+			if (BleCurrentRole == 1)
+			{
+				if (BleConnectEnable == 1 && BleConnectFlg == 0) //涓绘満钃濈墮涓诲姩璇锋眰杩炴帴
+				{
+					Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
+					AtcmdTransmit(AT_Conn, BleTargetMacAddr, sizeof(BleTargetMacAddr), AtCmdRead, &ret);
+					if (ret == 0) //杩炴帴鎴愬姛
+					{
+						bleWorkState = 1;
+						BleConnectEnable = 0;
+						BleConnectFlg = 1;
+						BleDisconnectFlg = 0;
+						xSemaphoreGive(ConnSemaphore);
+					}
+					else
+					{
+						BleConnectFlg = 0;
+					}
+					Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
+				}
+			}
+			UART_Receive_Data(UART_LPUART2, AtCmdRead,&ReadLen, 100);
+			if (ReadLen>0)//鏈�繛鎺ョ姸鎬佷笅锛岃摑鐗欎覆鍙e�浼氬彂閫佽繛鎺ョ姸鎬佷互鍙婃壂鎻忕殑鍐呭�
+			{
+				retptr = (uint8 *)strstr((char *)AtCmdRead, (char *)("STA:connect"));
+				if (retptr)
+				{
+					bleWorkState = 1;
+					BleConnectEnable = 0;
+					BleConnectFlg = 1;
+					BleDisconnectFlg = 0;
+					xSemaphoreGive(ConnSemaphore);
+				}
+				if(BleCurrentRole == 0)//濡傛灉浠庢満鍦ㄤ覆鍙�0涓婃敹鍒版暟鎹�紝鍒欒瘉鏄庡凡杩炴帴
+				{
+					uint8 DataTemp[8] = {0x00};
+					DataTemp[0] = 0x01;
+					DataTemp[1] = 0x01;
+					bleWorkState = 1;
+					BleConnectFlg = 1;
+					BleDisconnectFlg = 0;
+					BleAskData.RealLen = 1;
+					BleAskData.DataPtr = DataTemp;
+					xQueueSend(Uart2ToCanDataHandle,&BleAskData,0);
+				}
+			}
+			break;
+		}
+		case 1: //宸茶繛鎺�
+		{
+			if (BleDisconnectEnable == 1 && BleDisconnectFlg == 0)//涓讳粠鏈哄潎鍙�柇寮€杩炴帴
+			{
+				//钃濈墮鏂�紑鎸囦护锛孧od鎷変綆锛屾墠鑳藉彂閫佸懡浠�
+				/*S32K*/
+				Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_OFF);
+
+				memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+				AtcmdTransmit(AT_DisCon, NULL, 0, AtCmdRead, &ret);
+				if (ret == 0)
+				{
+					memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+					AtcmdTransmit(AT_Reset, NULL, 0, AtCmdRead, &ret);
+					if (ret == 0)
+					{
+						BleDisconnectFlg = 1;
+						BleDisconnectEnable = 0;
+						BleConnectFlg = 0;
+						/*S32K*/
+						bleWorkState = 0;
+						Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD, STD_ON);
+					}
+				}
+				else
+				{
+					BleDisconnectFlg = 0;
+				}
+			}
+			/*宸茶繛鎺ョ姸鎬佷笅鐨勬暟鎹�氦鎹㈠湪姝よ繘琛�
+			UartTramsit;
+			*/
+			/*S32K144*/
+			if (BleCurrentRole == 1)//涓绘満钃濈墮鍦ㄨ繛鎺ョ姸鎬佷笅鐨勮摑鐗欎覆鍙e彂閫佸姛鑳斤紝浠嶮CU涓插彛0闃熷垪寰楀埌锛屽彂缁欎覆鍙�2
+			{
+				if(AT_MsgFlag)
+				{
+					QueueRet = xQueueReceive(McuDataSendHandle,McuDataSend,0);
+					UART_Send_Data(UART_LPUART2,McuDataSend,sizeof(McuDataSend),100);
+					AT_MsgFlag = false;
+				}
+			}
+			else if(BleCurrentRole == 0)//浠庢満钃濈墮鍦ㄨ繛鎺ョ姸鎬佷笅鐨勮摑鐗欎覆鍙e彂閫佸姛鑳斤紝浠嶤AN闃熷垪寰楀埌锛屽彂缁欎覆鍙�2
+			{
+				if((xQueueReceive(CanToUart2DataHandle,&BleAnsData,0)==pdPASS))
+				{
+					UART_Send_Data(UART_LPUART2,BleAnsData.DataPtr,BleAnsData.RealLen,1000);
+					if(BleAnsData.DataPtr)
+					{
+						free(BleAnsData.DataPtr);
+					}
+					BleAnsData.DataPtr = NULL;
+				}
+			}
+			UART_Receive_Data(UART_LPUART2, AtCmdRead,&ReadLen, 100);
+			if (ReadLen>0)//杩炴帴鐨勭姸鎬佷笅锛岃摑鐗欎覆鍙d細鍙戦€佹柇寮€鐘舵€佷互鍙婂彂閫佺殑鍐呭�
+			{
+				uint8 *retptr = NULL;
+				retptr = (uint8 *)strstr((char *)AtCmdRead, (char *)("STA:disconnec"));
+				if(retptr)
+				{
+					bleWorkState = 0;
+					BleDisconnectFlg = 1;
+					BleConnectFlg = 0;
+					if(BleCurrentRole == 0)//浠庢満鏂�紑杩炴帴锛屼富鍔ㄧ粰ebc鍙戦€佷竴甯т俊鎭�
+					{
+						uint8 DataTemp[8] = {0x00};
+						DataTemp[0] = 0x01;
+						DataTemp[1] = 0x02;
+						BleAskData.RealLen = 1;
+						BleAskData.DataPtr = DataTemp;
+						xQueueSend(Uart2ToCanDataHandle,&BleAskData,0);
+					}
+				}
+				else
+				{
+					if(BleCurrentRole == 1)
+					{
+						QueueDataTrans_Type DataSend={0,NULL};
+						DataSend.RealLen = ReadLen;
+						DataSend.DataPtr = malloc(ReadLen+1);
+						memset(DataSend.DataPtr,0x00,ReadLen+1);
+						memcpy(DataSend.DataPtr,AtCmdRead,DataSend.RealLen);
+						sint8 McuDataRet = -1;
+						McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);//澧炲姞鏁版嵁鐨勬湁鏁堟€у垽瀹氾紝涓绘満钃濈墮浠嶶art2->Uart0鏁版嵁鐨勬湁鏁堟€э紝len>7?
+						if(McuDataRet!=pdPASS)
+						{
+							if(DataSend.DataPtr != NULL)
+							{
+								free(DataSend.DataPtr);
+							}
+							DataSend.DataPtr = NULL;
+						}
+					}
+					else if(BleCurrentRole == 0 && ReadLen==10)
+					{
+						BleAskData.RealLen = ReadLen;
+						BleAskData.DataPtr = malloc(ReadLen);
+						memset(BleAskData.DataPtr,0x00,BleAskData.RealLen);
+						memcpy(BleAskData.DataPtr,AtCmdRead,BleAskData.RealLen);
+						if(xQueueSend(Uart2ToCanDataHandle,&BleAskData,1000*5)!=pdPASS)
+						{
+							if(BleAskData.DataPtr != NULL)
+							{
+								free(BleAskData.DataPtr);
+							}
+							BleAskData.DataPtr = NULL;
+						}
+					}
+				}
+			}
+			break;
+		}
+		default:
+			bleWorkState = 0;
+			break;
+		}
+	}
+}
+static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, uint8 *CmdRead, sint8 *retFunc)
+{
+	uint16 ReadLen = 0;
+	uint8 ATCmd_Send[50];
+	uint16 ATCmd_SendLen;
+	memset(ATCmd_Send, 0x00, sizeof(ATCmd_Send));
+	ATCmd_SendLen = mstrlen(BleAtCmdFunc[CmdIdx].str);
+	memcpy(ATCmd_Send, BleAtCmdFunc[CmdIdx].str, ATCmd_SendLen);
+	if (SetValuePtr != NULL)
+	{
+		memcpy(&ATCmd_Send[ATCmd_SendLen], SetValuePtr, SetValueLen);
+	}
+	ATCmd_SendLen = ATCmd_SendLen + SetValueLen;
+	UART_Query_Data(UART_LPUART2, UART_LPUART2, ATCmd_Send, ATCmd_SendLen, CmdRead,&ReadLen, 1000);
+	*retFunc = BleAtCmdFunc[CmdIdx].cb(ATCmd_Send, CmdRead, CmdIdx);
+	return;
+}
+static void bleInit(void)
+{
+	uint8 AtCmdRead[50];
+	sint8 ret = -1;
+	uint8 bleInitStep = 0;
+	uint8 BleCurrentName[6];
+	uint16 Readlen = 0;
+	while (1)
+	{
+		vTaskDelay(pdMS_TO_TICKS(100));
+		switch (bleInitStep)
+		{
+		case 0: // AT鍚屾�
+		{
+			AtcmdTransmit(AT_Cmd_Test, NULL, 0, AtCmdRead, &ret);
+			if (ret == 0)
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				vTaskDelay(pdMS_TO_TICKS(1000));
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 1: //鑾峰彇Mac鍦板潃
+		{
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_GetMac, NULL, 0, AtCmdRead, &ret);
+			memcpy(BleMacAddr, &AtCmdRead[4], sizeof(BleMacAddr));
+			if (ret == 0)
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 2: //骞挎挱鍚嶇О璁剧疆
+		{
+			uint8 NameChk = 0; //榛樿�涓嶉渶瑕佽�缃�
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_NameChk, NULL, 0, AtCmdRead, &ret);
+			for (uint8 i = 0; i < 6; i++)
+			{
+				if (mstrlen((char *)AtCmdRead) != 16)
+				{
+					NameChk = 1;
+					break;
+				}
+				else
+				{
+					BleCurrentName[i] = (CharToHex(AtCmdRead[(i * 2) + 4]) << 4) + CharToHex(AtCmdRead[(i * 2 + 1) + 4]);
+					if (BleMacAddr[i] != BleCurrentName[i])
+					{
+						NameChk = 1;
+						break;
+					}
+				}
+			}
+			if (NameChk)
+			{
+				uint8 NameTemp[12] = {0};
+				for (uint8 i = 0; i < 6; i++)
+				{
+					NameTemp[(i * 2)] = HexToChar(BleMacAddr[i] >> 4);
+					NameTemp[(i * 2) + 1] = HexToChar(BleMacAddr[i] & 0x0F);
+				}
+				memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+				AtcmdTransmit(AT_NameSet, NameTemp, 12, AtCmdRead, &ret);
+			}
+			if (ret == 0)
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 3: //鍏抽棴鑷�姩杩炴帴
+		{
+			uint8 CmdTemp = '0';
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_AutoConnSet, &CmdTemp, 1, AtCmdRead, &ret);
+			if (ret == 0)
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 4: //鎵撳紑log杈撳嚭
+		{
+			uint8 CmdTemp = '1';
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_LogMsgSet, &CmdTemp, 1, AtCmdRead, &ret);
+			if (ret == 0)
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 5: //瑙掕壊鑾峰彇
+		{
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_RoleChk, NULL, 0, AtCmdRead, &ret);
+			BleCurrentRole = CharToHex(AtCmdRead[4]);
+			if (ret == 0 && (BleCurrentRole == 0 || BleCurrentRole == 1))
+			{
+				bleInitStep++;
+			}
+			else
+			{
+				bleInitStep = 0;
+			}
+			break;
+		}
+		case 6:
+		{
+			return;
+		}
+		default:
+			bleInitStep = 0;
+			break;
+		}
+	}
+	return;
+}
+static sint8 bleRoleSetFunc(void)
+{
+	uint8 AtCmdRead[50];
+	sint8 ret = -1;
+	uint8 BleRoleSetStep = 0;
+	uint16 ReadLen = 0;
+	while (1)
+	{
+		vTaskDelay(pdMS_TO_TICKS(100));
+		switch (BleRoleSetStep)
+		{
+		case 0: // AT鍚屾�
+		{
+			//			UartTramsit(NULL, 0, AtCmdRead, 1, 100);
+			UART_Receive_Data(UART_LPUART2, AtCmdRead,&ReadLen, 1000);
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_Cmd_Test, NULL, 0, AtCmdRead, &ret);
+			if (ret == 0)
+			{
+				BleRoleSetStep++;
+			}
+			else
+			{
+				return -1;
+			}
+			break;
+		}
+		case 1: //瑙掕壊妫€鏌�
+		{
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_RoleChk, NULL, 0, AtCmdRead, &ret);
+			BleCurrentRole = CharToHex(AtCmdRead[4]);
+			if (ret == 0)
+			{
+				if (BleCurrentRole == BleSetRole)
+				{
+					return 0;
+				}
+				else
+				{
+					BleRoleSetStep++;
+				}
+			}
+			else
+			{
+				BleRoleSetStep = 0;
+			}
+			break;
+		}
+		case 2: //瑙掕壊璁剧疆
+		{
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			uint8 RoleTemp;
+			RoleTemp = HexToChar(BleSetRole);
+			AtcmdTransmit(AT_RoleSet, &RoleTemp, 1, AtCmdRead, &ret);
+			if (ret == 0)
+			{
+				BleRoleSetStep++;
+			}
+			else
+			{
+				BleRoleSetStep = 0;
+			}
+			break;
+		}
+		case 3: //钃濈墮妯″潡閲嶅惎
+		{
+			memset(AtCmdRead, 0x00, sizeof(AtCmdRead));
+			AtcmdTransmit(AT_Reset, NULL, 0, AtCmdRead, &ret);
+			BleRoleSetStep = 0;
+			break;
+		}
+		default:
+			BleRoleSetStep = 0;
+			break;
+		}
+	}
+	return 0;
+}
+sint8 at_callbackFunc(uint8 *PSendStr, uint8 *ptr, BleAtCmd CmdIdx)
+{
+	uint16 pReadLen = 0;
+	sint8 returnvalue = -1;
+	uint8 *retptr = NULL;
+	switch (CmdIdx)
+	{
+	case AT_Cmd_Test:
+	{
+		pReadLen = ATstrdel((char *)ptr);
+		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
+		if (retptr && strlen((char *)ptr) < 5)
+		{
+			returnvalue = 0;
+		}
+		else
+		{
+			returnvalue = -1;
+		}
+		break;
+	}
+	case AT_GetMac:
+	{
+		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
+		if (retptr && strlen((char *)ptr) > 5)
+		{
+			returnvalue = 0;
+		}
+		else
+		{
+			returnvalue = -1;
+		}
+		break;
+	}
+	case AT_NameChk:
+	{
+		pReadLen = ATstrdel((char *)ptr);
+		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
+		if (retptr && strlen((char *)ptr) > 5)
+		{
+			returnvalue = 0;
+		}
+		else
+		{
+			returnvalue = -1;
+		}
+		break;
+	}
+	case AT_Conn:
+	{
+		pReadLen = ATstrdel((char *)ptr);
 //		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
 //		if (retptr)
 //		{
 //			returnvalue = 0;
 //		}
-//		else
-//		{
-//			returnvalue = -1;
-//		}
-//		break;
-//	}
-//	}
-//	return returnvalue;
-//}
+		retptr = (uint8 *)strstr((char *)ptr, (char *)("ERR=-14"));//鍒╃敤鏈€澶ц繛鎺ユ暟閿欒�鍒ゆ柇杩炴帴鎴愬姛
+		if(retptr)
+		{
+			returnvalue = 0;
+		}
+		break;
+	}
+	default:
+	{
+		pReadLen = ATstrdel((char *)ptr);
+		retptr = (uint8 *)strstr((char *)ptr, (char *)("OK"));
+		if (retptr)
+		{
+			returnvalue = 0;
+		}
+		else
+		{
+			returnvalue = -1;
+		}
+		break;
+	}
+	}
+	return returnvalue;
+}

+ 1 - 1
src/AppTaskBle.h

@@ -10,7 +10,7 @@
 /*
  * AppTaskBle.h
  *
- *  Created on: 2022Äê1ÔÂ19ÈÕ
+ *  Created on: 2022Äê1ÔÂ19ÈÕ
  *      Author: QiXiang_CHENJIE
  */
 

+ 31 - 31
src/AppTaskCan.c

@@ -1,7 +1,7 @@
 /*
  * AppTaskCan.c
  *
- *  Created on: 2022Äê2ÔÂ8ÈÕ
+ *  Created on: 2022年2月8日
  *      Author: QiXiang_CHENJIE
  */
 #include "AppTaskCan.h"
@@ -18,15 +18,15 @@ static void vCanRxCallback(TimerHandle_t pxTimer)
 		Can_MainFunction_Read();
 	}
 }
-
+     
 void CanTask(void *data)
 {
 	(void)data;
-	CanRecvQueueHandle   = xQueueCreate(16, sizeof(Can_Msg_Type_Data));  // CAN»ñÈ¡ÏûÏ¢¶ÓÁд´½¨:CAN½ÓÊÕ¶ÓÁÐ,½ÓÊÕEBCµÄCAN±¨ÎÄ
+	CanRecvQueueHandle   = xQueueCreate(16, sizeof(Can_Msg_Type_Data));  // CAN获�消�队列创建:CAN接收队列,接收EBC的CAN报文
 
-	Uart2ToCanDataHandle = xQueueCreate(2, sizeof(QueueDataTrans_Type)); // CANÊý¾Ý²éѯ¶ÓÁд´½¨:CAN·¢ËͶÓÁÐ,·¢ËÍCAN±¨ÎĸøEBC
+	Uart2ToCanDataHandle = xQueueCreate(2, sizeof(QueueDataTrans_Type)); // CAN数�查询队列创建:CAN��队列,��CAN报文给EBC
 
-	CanToUart2DataHandle = xQueueCreate(1, sizeof(QueueDataTrans_Type)); // CANÊý¾Ý»Ø¸´¶ÓÁд´½¨:´Ó»úµÄWIFIͨѶµÄ·¢ËͶÓÁÐ
+	CanToUart2DataHandle = xQueueCreate(1, sizeof(QueueDataTrans_Type)); // CAN数�回�队列创建:从机的WIFI通讯的��队列
 	uint8 CanState = 0;
 	CanIf_bRxFlag = false;
 	Can_Msg_Type_Data CanRxMsg;
@@ -54,7 +54,7 @@ void CanTask(void *data)
 				{
 					BleCanTransmit(CanRxMsg.id, CanRxMsg.data);
 				}
-				BaseType_t ret2 = xQueueReceive(Uart2ToCanDataHandle,&CanAskData,10);//´øÓÐУÑéÂë
+				BaseType_t ret2 = xQueueReceive(Uart2ToCanDataHandle,&CanAskData,10);//带有校验�
 				if (ret2 == pdPASS)
 				{
 					CanDataAsk(CanAskData);
@@ -83,7 +83,7 @@ static void CanDataAsk(QueueDataTrans_Type AskData)
 			CanIf_SendMessage(0, CanTxMsg);
 		}
 	}
-	else if(AskData.RealLen==1)//´Ó»úÁ¬½ÓÓë¶Ï¿ª£¬Ö÷¶¯¸øEBC·¢ËÍһ֡״̬
+	else if(AskData.RealLen==1)//从机连接与断开,主动给EBC��一帧状�
 	{
 		CanTxMsg.id = 0X1CEF0002;
 		CanTxMsg.idFrame = CAN_EXTENDED_ID_TYPE;
@@ -105,15 +105,15 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 	uint8 AnsData[8];
 	memset(AnsData, 0x00, 8);
 	static QueueDataTrans_Type CanAnsData={0,NULL};
-	static uint8 CanDataCounter = 0;//Êý¾Ý´ò°üÐèÒªµÄ°üÊý
-	static uint8 DataPackDone = 0;//ÒÑ´ò°üÊýÄ¿
+	static uint8 CanDataCounter = 0;//数�打包需�的包数
+	static uint8 DataPackDone = 0;//已打包数目
 	static uint8 CanByte0Idx = 0;
-	static volatile uint8 PackState = 0;//0-δ´ò°ü£¬1-ÕýÔÚ´ò°ü£¬2-´ò°üÍê³É
+	static volatile uint8 PackState = 0;//0-未打包,1-正在打包,2-打包完�
 	uint8 CanAnsPerLen = 7;
 	uint8 CanByte0Seq = 0;
 	switch (AskCanID)
 	{
-	case 0X1CEE0000: //Êý¾ÝͨµÀ£¬»»µç¿ØÖƵÄÊý¾Ý·¢¹ýÀ´ÔÚ´Ë´ò°üºóתuart2
+	case 0X1CEE0000: //数�通�,�电控制的数��过�在此打包�转uart2
 	{
 		if(PackState==0)
 		{
@@ -136,7 +136,7 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 				}
 				if(DataPackDone<CanDataCounter)
 				{
-					memcpy(CanAnsData.DataPtr+(CanByte0Seq - 1)*CanAnsPerLen,AskData,CanAnsPerLen);//´ÓCANÐÅÏ¢ÖÐÖ»½ØÈ¡Ç°7¸öÊý¾Ý
+					memcpy(CanAnsData.DataPtr+(CanByte0Seq - 1)*CanAnsPerLen,AskData,CanAnsPerLen);//从CAN信�中�截��7个数�
 					DataPackDone++;
 				}
 				if(DataPackDone==CanDataCounter)
@@ -145,7 +145,7 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 					PackState = 2;
 				}
 			}
-			else//ÐòºÅ²»¶Ô£¬´ò°üÁ¢¿ÌÍê³É£¬¸ü¸ÄÊý¾Ý³¤¶È
+			else//���对,打包立刻完�,更改数�长度
 			{
 				CanAnsData.RealLen = DataPackDone*CanAnsPerLen + 2;
 				PackState = 2;
@@ -175,9 +175,9 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 		CanIf_SendMessage(0, CanTxMsg);
 		return;
 	}
-	case 0X1CEE0001: //²éѯ
+	case 0X1CEE0001: //查询
 	{
-		if (AskData[0] == 1) //Èí¼þ°æ±¾²éѯ
+		if (AskData[0] == 1) //软件版本查询
 		{
 			AnsData[0] = 0x01;
 			AnsData[1] = (BleVersion >> 24) & 0xFF;
@@ -185,7 +185,7 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 			AnsData[3] = (BleVersion >> 8) & 0xFF;
 			AnsData[4] = (BleVersion >> 0) & 0xFF;
 		}
-		else if (AskData[0] == 2) // MacµØÖ·²éѯ
+		else if (AskData[0] == 2) // Mac地�查询
 		{
 			AnsData[0] = 0x02;
 			AnsData[1] = (BleMacAddr[0]) & 0xFF;
@@ -203,14 +203,14 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 		CanIf_SendMessage(0, CanTxMsg);
 		break;
 	}
-	case 0X1CEE0002: //Á¬½Ó¿ØÖÆ
+	case 0X1CEE0002: //连接控制
 	{
-		if (AskData[0] == 1) //Á¬½Ó״̬²éѯ
+		if (AskData[0] == 1) //连接状�查询
 		{
 			AnsData[0] = 0x01;
 			AnsData[1] = (BleDisconnectFlg<<1)|(BleConnectFlg);
 		}
-		else if (AskData[0] == 2) //Á¬½ÓÖ¸¶¨MacµØÖ·
+		else if (AskData[0] == 2) //连接指定Mac地�
 		{
 			BleTargetMacAddr[0] = AskData[1];
 			BleTargetMacAddr[1] = AskData[2];
@@ -222,7 +222,7 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 			AnsData[0] = 2;
 			AnsData[1] = 2;
 		}
-		else if (AskData[0] == 3) //¶Ï¿ªÁ¬½Ó
+		else if (AskData[0] == 3) //断开连接
 		{
 			BleDisconnectEnable = 1;
 			AnsData[0] = 3;
@@ -236,14 +236,14 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 		CanIf_SendMessage(0, CanTxMsg);
 		break;
 	}
-	case 0X1CEE0003: //½ÇÉ«¿ØÖÆ
+	case 0X1CEE0003: //角色控制
 	{
-		if (AskData[0] == 1) //µ±Ç°½ÇÉ«²éѯ
+		if (AskData[0] == 1) //当�角色查询
 		{
 			AnsData[0] = 0x01;
 			AnsData[1] = BleCurrentRole;
 		}
-		else if (AskData[0] == 2) //½ÇÉ«ÉèÖÃ
+		else if (AskData[0] == 2) //角色设置
 		{
 			BleSetRoleEnable = 1;
 			BleSetRole = AskData[1] & 0x03;
@@ -258,21 +258,21 @@ void BleCanTransmit(uint32 AskCanID, uint8 AskData[])
 		CanIf_SendMessage(0, CanTxMsg);
 		break;
 	}
-	case 0X1CEE0004: //À¶ÑÀ¿ª¹Ø»ú¿ØÖÆ
+	case 0X1CEE0004: //�牙开关机控制
 	{
 		if (AskData[0] == 1)
 		{
-			if (AskData[1] == 0) //¿ª»ú
+			if (AskData[1] == 0) //开机
 			{
 				BlePwrControlEnable = 1;
 				BlePwrControlFlg = 0;
 			}
-			else if (AskData[1] == 1) //¹Ø»ú
+			else if (AskData[1] == 1) //关机
 			{
 				BlePwrControlEnable = 1;
 				BlePwrControlFlg = 1;
 			}
-			else if (AskData[1] == 2) //ÖØÆô
+			else if (AskData[1] == 2) //��
 			{
 				BlePwrControlEnable = 1;
 				BlePwrControlFlg = 2;
@@ -340,7 +340,7 @@ void udsService(uint8 *DataIn)
 		{
 			switch(UdsSubService)
 			{
-			case 0x01://Èí¼þ°æ±¾²éѯ
+			case 0x01://软件版本查询
 			{
 				AnsData[0] = (BleVersion >> 24) & 0xFF;
 				AnsData[1] = (BleVersion >> 16) & 0xFF;
@@ -349,7 +349,7 @@ void udsService(uint8 *DataIn)
 				UdsAns(true,UdsService,UdsSubService,0x00,AnsData,4);
 				break;
 			}
-			case 0x02://MACµØÖ·²éѯ
+			case 0x02://MAC地�查询
 			{
 				memcpy(AnsData,BleMacAddr,6);
 				for(uint8 i=0;i<2;i++)
@@ -358,13 +358,13 @@ void udsService(uint8 *DataIn)
 				}
 				break;
 			}
-			case 0x03://½ÇÉ«²éѯ
+			case 0x03://角色查询
 			{
 				AnsData[0] = (BleCurrentRole) & 0xFF;
 				UdsAns(true,UdsService,UdsSubService,0x00,AnsData,1);
 				break;
 			}
-			case 0x04://Á¬½Ó²éѯ
+			case 0x04://连接查询
 			{
 				AnsData[0] = (BleConnectFlg) & 0xFF;
 				UdsAns(true,UdsService,UdsSubService,0x00,AnsData,1);

+ 1 - 1
src/AppTaskCan.h

@@ -1,7 +1,7 @@
 /*
  * AppTaskCan.h
  *
- *  Created on: 2022Äê2ÔÂ8ÈÕ
+ *  Created on: 2022年2月8日
  *      Author: QiXiang_CHENJIE
  */
 

+ 1 - 1
src/AppTaskMain.c

@@ -1,7 +1,7 @@
 /*
  * AppTaskMain.c
  *
- *  Created on: 2022Äê2ÔÂ22ÈÕ
+ *  Created on: 2022年2月22日
  *      Author: QiXiang_CHENJIE
  */
 

+ 1 - 1
src/AppTaskMain.h

@@ -1,7 +1,7 @@
 /*
  * AppTaskMain.h
  *
- *  Created on: 2022Äê2ÔÂ22ÈÕ
+ *  Created on: 2022年2月22日
  *      Author: QiXiang_CHENJIE
  */
 

+ 362 - 297
src/AppTaskUart0.c

@@ -1,23 +1,12 @@
 /*
  * AppTaskUart0.c
  *
- *  Created on: 2022��2��8��
+ *  Created on: 
  *      Author: QiXiang_CHENJIE
  */
 #include "AppTaskUart0.h"
-const char* UNLOAD_ORDER = "The directive is not legal\r\n";
-
-static UART_THREAD_MESS sendMess = {0};
 const McuAtCmdFunc_t McuAtCmdFunc[] =
 {
-
-	{AT_TEST, "AT", McuAtCallbackFunc},
-	{PC_IP_INFO, "PC_IP_INFO", McuAtCallbackFunc},
-	{PC_ORDER_LOCK, "PC_ORDER_LOCK", McuAtCallbackFunc},
-	{PC_ORDER_UNLOCK, "PC_ORDER_UNLOCK", McuAtCallbackFunc},
-	{PC_ORDER_HEARTBEATS, "PC_ORDER_HEARTBEATS", McuAtCallbackFunc},
-	{PC_ORDER_NUM_MAX, "\r\n", McuAtCallbackFunc},
-#if 0
 	{MAT, "AT", McuAtCallbackFunc},
 	{MAT_Version, "AT+VERSION?", McuAtCallbackFunc},
 	{MAT_Connect, "AT+CONNECT=", McuAtCallbackFunc},
@@ -27,45 +16,35 @@ const McuAtCmdFunc_t McuAtCmdFunc[] =
 	{MAT_Power, "AT+POWER=", McuAtCallbackFunc},
 	{MAT_Role, "AT+ROLE=", McuAtCallbackFunc},
 	{MAT_GetMac, "AT+MAC=?", McuAtCallbackFunc},
-#endif
+	{MAT_Wset, "AT+WSET=", McuAtCallbackFunc},
+	{MAT_Wmsg, "AT+WMSG=", McuAtCallbackFunc},//此命令变化,416行长度也需要同步修改
+	{MAT_Wconchk, "AT+WCONNCHK=?", McuAtCallbackFunc},
+	{MAT_Wrole, "AT+WROLE=", McuAtCallbackFunc},
+	{MAT_CMD_MAXNUM,"ERROR",McuAtCallbackFunc},
 };
 void UartTask(void *pvParameters)
 {
 	(void)pvParameters;
-	ConnSemaphore = xSemaphoreCreateBinary();//����״̬�ź���
-
-	/*����WIFIͨ������0��plc�õ������ݷŵ����͸�wifi�ӻ��Ķ�����*/
-	McuDataSendHandle = xQueueCreate(2, 10);// Mcu��AT����ָ��Ͷ���
-
-	/*����WIFIͨ��wifi�õ������ݷŵ��ظ���λ���Ķ�����*/
-	McuDataRecvHandle = xQueueCreate(1, sizeof(BleRecvDataFromUart2)); // Mcu��AT�������ݻ�ȡ����
-
-	char AtCmdRead[50+7];
-	uint8 temp[6] = {0xBE, 0xC8, 0xD9, 0xA2, 0xE2, 0x2B};
-	memcpy(&AtCmdRead[strlen(AtCmdRead)], temp, sizeof(temp));
-	char McuAtCmdAns[300] = {0};
-	uint8 McuAtCmdAnsLen;
+	ConnSemaphore = xSemaphoreCreateBinary();
+	McuDataSendHandle = xQueueCreate(2, 10);
+	McuDataRecvHandle = xQueueCreate(1, sizeof(QueueDataTrans_Type));
+	McuDataSend_wifi = xQueueCreate(2, 10);
+	McuDataRecv_wifi = xQueueCreate(1, sizeof(QueueDataTrans_Type));
+	char AtCmdRead[128] = {0};
+	char AtCmdAns[256] = {0};
+	uint16 AtCmdAnsLen;
 	uint8 RecvRet = 1;
 	uint16 ReadLen = 0;
 	for (;;)
 	{
-		vTaskDelay(pdMS_TO_TICKS(10));
-		RecvRet = UART_Receive_Data(UART_LPUART0, RX_Buffer[UART_LPUART0],&ReadLen, 1000);
-		memcpy(AtCmdRead, RX_Buffer[UART_LPUART0], sizeof(AtCmdRead));
-		memset(RX_Buffer[UART_LPUART0], 0x00, sizeof(RX_Buffer[UART_LPUART0]));
-		if(sizeof(AtCmdRead) <= ReadLen)	/* ��ֹ�������ݹ��� */
-		{
-			McuAtCmdFunc[PC_ORDER_NUM_MAX].cb(AtCmdRead,ReadLen, PC_ORDER_NUM_MAX, McuAtCmdAns, McuAtCmdAnsLen);
-			//UART_Send_Data(UART_LPUART0, UNLOAD_ORDER, strlen(UNLOAD_ORDER), 1000);
-		}
-
+		memset(AtCmdRead,0x00,sizeof(AtCmdRead));
+		RecvRet = UART_Receive_Data(UART_LPUART0, AtCmdRead,&ReadLen, 100);
 		if(!RecvRet)
 		{
-			memset(McuAtCmdAns,0x00,sizeof(McuAtCmdAns));
-
-			McuAtCmdAnsLen = 0;
-			McuATCmdTransmit(AtCmdRead, ReadLen, McuAtCmdAns, &McuAtCmdAnsLen);
-			//UART_Send_Data(UART_LPUART0,McuAtCmdAns,McuAtCmdAnsLen,1000);//�ظ���λ��plc
+			AtCmdAnsLen = 0;
+			memset(AtCmdAns,0x00,sizeof(AtCmdAns));
+			McuATCmdTransmit(AtCmdRead, ReadLen, AtCmdAns, &AtCmdAnsLen);
+			UART_Send_Data(UART_LPUART0,AtCmdAns,AtCmdAnsLen,100);
 		}
 	}
 }
@@ -73,52 +52,21 @@ void McuATCmdTransmit(char *Readptr, uint16 Readlen, char *AnsPtr, uint8 *AnsPtr
 {
 
 	uint8 ret = 0;
-	for (uint8 i = 0; i < PC_ORDER_NUM_MAX; i++)
+	for (uint8 i = 0; i < MAT_CMD_MAXNUM; i++)
 	{
-		ret = strcmp(Readptr, McuAtCmdFunc[i].str);
-		//ret = AtStrCompare(Readptr, McuAtCmdFunc[i].str);
-		if (0 == ret)
+		ret = AtStrCompare(Readptr, McuAtCmdFunc[i].str);
+		if (ret)
 		{
 			McuAtCmdFunc[i].cb(Readptr,Readlen, i, AnsPtr, AnsPtrLen);
 			return;
 		}
 	}
-	McuAtCmdFunc[PC_ORDER_NUM_MAX].cb(Readptr,Readlen, PC_ORDER_NUM_MAX, AnsPtr, AnsPtrLen);
+	McuAtCmdFunc[MAT_CMD_MAXNUM].cb(Readptr,Readlen, MAT_CMD_MAXNUM, AnsPtr, AnsPtrLen);
 	return;
 }
 sint8 McuAtCallbackFunc(char *Readptr, uint16 ReadLen, McuAtCmd McuAtIdx, char *AnsPtr, uint8 *AnsPtrLen)
 {
-	//const char *ErrAns = "CMD_ERROR\r\n";
-	const char *AT_MESS = "AT\r\n";
 
-	sendMess.uartId = UART_LPUART0;
-	switch (McuAtIdx)
-	{
-		case AT_TEST:
-			sendMess.SendCMD = AT_AT;
-			xQueueSend(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-			break;
-		case PC_IP_INFO:
-			sendMess.SendCMD = AT_IP_INFO;
-			xQueueSend(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-			break;
-		case PC_ORDER_LOCK:
-			sendMess.SendCMD = CMD_TO_TBOX_LOCK;
-			xQueueSend(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-			break;
-		case PC_ORDER_UNLOCK:
-			sendMess.SendCMD = CMD_TO_TBOX_UNLOCK;
-			xQueueSend(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-			break;
-		case PC_ORDER_HEARTBEATS:
-			break;
-		default:
-			sendMess.SendCMD = PC_ORDER_NUM_MAX;
-			xQueueSendToBack(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-			break;
-	}
-}
-#if 0
 	char *SucAns = "OK\r\n";
 	char *ErrAns = "ERROR\r\n";
 	char *OffAns = "OFF\r\n";
@@ -133,315 +81,432 @@ sint8 McuAtCallbackFunc(char *Readptr, uint16 ReadLen, McuAtCmd McuAtIdx, char *
 			memcpy(AnsPtr, SucAns, *AnsPtrLen);
 			break;
 		}
-	case MAT_Version:
-	{
-		uint8 chartemp;
-		memcpy(AnsPtr, SucAns, strlen(SucAns));
-		*AnsPtrLen = strlen(SucAns);
-		for (uint8 i = 0; i < sizeof(BleVersion) * 2; i++)
+		case MAT_Version:
 		{
-			chartemp = HexToChar(BleVersion >> (28 - 4 * i));
-			memcpy(AnsPtr + *AnsPtrLen + i, &chartemp, 1);
-		}
-
-		*AnsPtrLen = sizeof(BleVersion) * 2 + *AnsPtrLen;
-		break;
-	}
-	case MAT_Connect:
-	{
-		if (ReadLen == (strlen((McuAtCmdFunc[McuAtIdx].str)) + 12))
-		{
-			if (BleConnectFlg)
+			uint8 chartemp;
+			memcpy(AnsPtr, SucAns, strlen(SucAns));
+			*AnsPtrLen = strlen(SucAns);
+			for (uint8 i = 0; i < sizeof(BleVersion) * 2; i++)
 			{
-				memcpy(AnsPtr, SucAns, strlen(SucAns));
-				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
+				chartemp = HexToChar(BleVersion >> (28 - 4 * i));
+				memcpy(AnsPtr + *AnsPtrLen + i, &chartemp, 1);
 			}
-			else
+
+			*AnsPtrLen = sizeof(BleVersion) * 2 + *AnsPtrLen;
+			break;
+		}
+		case MAT_Connect:
+		{
+			if (ReadLen == (strlen((McuAtCmdFunc[McuAtIdx].str)) + 12))
 			{
-				if (BleCurrentRole == 1)
+				if (BleConnectFlg)
 				{
-					for(uint8 i=0;i<6;i++)
-					{
-						uint8 temp1 = 0x00;
-						uint8 temp2 = 0x00;
-						temp1 = (CharToHex(*(Readptr + i*2 + strlen(McuAtCmdFunc[McuAtIdx].str)))<<4);
-						temp2 = CharToHex(*(Readptr + i*2 + 1 + strlen(McuAtCmdFunc[McuAtIdx].str)));
-						BleTargetMacAddr[i] = temp1|temp2;
-					}
-					BleConnectEnable = 1;
-					if( xSemaphoreTake( ConnSemaphore, 5000 ) == pdTRUE )//����ͨѶ�����Ѿ�����
+					memcpy(AnsPtr, SucAns, strlen(SucAns));
+					*AnsPtrLen = strlen(SucAns);
+					memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
+				}
+				else
+				{
+					if (BleCurrentRole == 1)
 					{
-						memcpy(AnsPtr, SucAns, strlen(SucAns));
-						*AnsPtrLen = strlen(SucAns);
-						memcpy(AnsPtr + *AnsPtrLen, (char *)("SUC\n"), strlen((char *)("SUC\n")));
-						*AnsPtrLen = *AnsPtrLen + strlen((char *)("SUC\n"));
+						for(uint8 i=0;i<6;i++)
+						{
+							uint8 temp1 = 0x00;
+							uint8 temp2 = 0x00;
+							temp1 = (CharToHex(*(Readptr + i*2 + strlen(McuAtCmdFunc[McuAtIdx].str)))<<4);
+							temp2 = CharToHex(*(Readptr + i*2 + 1 + strlen(McuAtCmdFunc[McuAtIdx].str)));
+							BleTargetMacAddr[i] = temp1|temp2;
+						}
+						BleConnectEnable = 1;
+						if( xSemaphoreTake( ConnSemaphore, 5000 ) == pdTRUE )
+						{
+							memcpy(AnsPtr, SucAns, strlen(SucAns));
+							*AnsPtrLen = strlen(SucAns);
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("SUC\n"), strlen((char *)("SUC\n")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("SUC\n"));
+						}
+						else
+						{
+							memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+							*AnsPtrLen = strlen(ErrAns);
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("-1\n"), strlen((char *)("-1\n")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("-1\n"));
+						}
 					}
 					else
 					{
-						memcpy(AnsPtr, ErrAns, strlen(ErrAns));
-						*AnsPtrLen = strlen(ErrAns);
-						memcpy(AnsPtr + *AnsPtrLen, (char *)("-1\n"), strlen((char *)("-1\n")));
-						*AnsPtrLen = *AnsPtrLen + strlen((char *)("-1\n"));
+						*AnsPtrLen = strlen((char *)ErrAns);
+						memcpy(AnsPtr, ErrAns, *AnsPtrLen);
 					}
 				}
-				else
-				{
-					*AnsPtrLen = strlen((char *)ErrAns);
-					memcpy(AnsPtr, ErrAns, *AnsPtrLen);
-				}
 			}
-		}
-		else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
-		{
-			if (BleConnectFlg)
+			else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
 			{
-				if (BleCurrentRole == 1)
+				if (BleConnectFlg)
 				{
+					if (BleCurrentRole == 1)
+					{
 
-					memcpy(AnsPtr, SucAns, strlen(SucAns));
-					*AnsPtrLen = strlen(SucAns);
-					memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
-					*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
-					for(uint8 i=0;i<6;i++)
+						memcpy(AnsPtr, SucAns, strlen(SucAns));
+						*AnsPtrLen = strlen(SucAns);
+						memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
+						*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
+						for(uint8 i=0;i<6;i++)
+						{
+							*(AnsPtr + *AnsPtrLen + i*2) = HexToChar((BleTargetMacAddr[i]>>4)&0x0F);
+							*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar(BleTargetMacAddr[i]&0x0F);
+						}
+						*AnsPtrLen = *AnsPtrLen + sizeof(BleTargetMacAddr)*2;
+						break;
+					}
+					else
 					{
-						*(AnsPtr + *AnsPtrLen + i*2) = HexToChar((BleTargetMacAddr[i]>>4)&0x0F);
-						*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar(BleTargetMacAddr[i]&0x0F);
+						memcpy(AnsPtr, SucAns, strlen(SucAns));
+						*AnsPtrLen = strlen(SucAns);
+						memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
+						*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
 					}
-					*AnsPtrLen = *AnsPtrLen + sizeof(BleTargetMacAddr)*2;
-					break;
 				}
 				else
 				{
 					memcpy(AnsPtr, SucAns, strlen(SucAns));
 					*AnsPtrLen = strlen(SucAns);
-					memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
-					*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
+					memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
 				}
 			}
 			else
 			{
-				memcpy(AnsPtr, SucAns, strlen(SucAns));
-				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
+				*AnsPtrLen = strlen((char *)ErrAns);
+				memcpy(AnsPtr, ErrAns, *AnsPtrLen);
 			}
+			break;
 		}
-		else
+		case MAT_DisConnect:
 		{
-			*AnsPtrLen = strlen((char *)ErrAns);
-			memcpy(AnsPtr, ErrAns, *AnsPtrLen);
+			BleDisconnectEnable = 1;
+			memcpy(AnsPtr, SucAns, strlen(SucAns));
+			*AnsPtrLen = strlen(SucAns);
+			break;
 		}
-		break;
-	}
-	case MAT_DisConnect:
-	{
-		BleDisconnectEnable = 1;
-		memcpy(AnsPtr, SucAns, strlen(SucAns));
-		*AnsPtrLen = strlen(SucAns);
-		break;
-	}
-	case MAT_Msg:
-	{
-		uint8 Databuffer[10] = {0};
-		uint16 CrcChkGet;
-		uint16 CrcChkCal;
-		//���ݴ���ͨ��
-		if(BleConnectFlg)
+		case MAT_Msg:
 		{
-			if(*(Readptr+7)=='0' && *(Readptr+9)=='1'&& *(Readptr+10)=='0'&& ReadLen==22)//Hex
-			{
-				memcpy(Databuffer,Readptr+12,8);
-				CrcChkGet = (*(Readptr+12+8))|(*(Readptr+12+9)<<8);
-			}
-			else if(*(Readptr+7)=='1'&&*(Readptr+9)=='2'&& *(Readptr+10)=='0' && ReadLen==32)//string
+			uint8 Databuffer[10] = {0};
+			uint16 CrcChkGet;
+			uint16 CrcChkCal;
+
+			if(BleConnectFlg)
 			{
-				for(uint8 i=0;i<8;i++)
+				if(*(Readptr+7)=='0' && *(Readptr+9)=='1'&& *(Readptr+10)=='0'&& ReadLen==22)//Hex
 				{
-					Databuffer[i] = (CharToHex(*(Readptr+12+i*2))<<4) | (CharToHex(*(Readptr+12+i*2+1))<<0);
+					memcpy(Databuffer,Readptr+12,8);
+					CrcChkGet = (*(Readptr+12+8))|(*(Readptr+12+9)<<8);
 				}
-				CrcChkGet = (CharToHex(*(Readptr+12+18))<<12) | (CharToHex(*(Readptr+12+19))<<8)|(CharToHex(*(Readptr+12+16))<<4) | (CharToHex(*(Readptr+12+17))<<0);
-			}
-			else
-			{
-				memcpy(AnsPtr, ErrAns, strlen(ErrAns));
-				*AnsPtrLen = strlen(ErrAns);
-				memcpy(AnsPtr + *AnsPtrLen, (char *)("-1\n"), strlen((char *)("-1\n")));
-				*AnsPtrLen = *AnsPtrLen + strlen((char *)("-1\n"));
-				break;
-			}
-			CrcChkCal = CRC16_Modbus (Databuffer, 8);//plc�·������ݣ��Լ�У���crc
-			if(CrcChkCal==CrcChkGet)//У��ͨ��
-			{
-				AT_MsgFlag = true;
-				Databuffer[8] = CrcChkGet&0xff;
-				Databuffer[9] = (CrcChkGet>>8)&0xff;
-				xQueueSend(McuDataSendHandle,Databuffer,1000);//����wifi���Ͷ���
-				//�˴�Ӧ�ȴ�Msg����Ϣ���غ��� oswait
-				BleRecvDataFromUart2 RecvDatabuffer={0,NULL};
-				sint8 QueneRetRev = -1;
-				xQueueReset(McuDataRecvHandle);
-				QueneRetRev = xQueueReceive(McuDataRecvHandle,&RecvDatabuffer,1000*3);//����wifi���ն���
-				if(QueneRetRev==pdPASS)
+				else if(*(Readptr+7)=='1'&&*(Readptr+9)=='2'&& *(Readptr+10)=='0' && ReadLen==32)//string
+				{
+					for(uint8 i=0;i<8;i++)
+					{
+						Databuffer[i] = (CharToHex(*(Readptr+12+i*2))<<4) | (CharToHex(*(Readptr+12+i*2+1))<<0);
+					}
+					CrcChkGet = (CharToHex(*(Readptr+12+18))<<12) | (CharToHex(*(Readptr+12+19))<<8)|(CharToHex(*(Readptr+12+16))<<4) | (CharToHex(*(Readptr+12+17))<<0);
+				}
+				else
+				{
+					memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+					*AnsPtrLen = strlen(ErrAns);
+					memcpy(AnsPtr + *AnsPtrLen, (char *)("-1\n"), strlen((char *)("-1\n")));
+					*AnsPtrLen = *AnsPtrLen + strlen((char *)("-1\n"));
+					break;
+				}
+				CrcChkCal = CRC16_Modbus (Databuffer, 8);
+				if(CrcChkCal==CrcChkGet)
 				{
-					uint8 DataLen = RecvDatabuffer.RealLen;
-					CrcChkGet = 0x00;
-					CrcChkCal = 0xff;
-					CrcChkGet = (*(RecvDatabuffer.DataPtr+DataLen-1)<<8)| (*(RecvDatabuffer.DataPtr+DataLen-2));
-					CrcChkCal = CRC16_Modbus(RecvDatabuffer.DataPtr,DataLen-2);
-					if(CrcChkCal==CrcChkGet)
+					AT_MsgFlag = true;
+					Databuffer[8] = CrcChkGet&0xff;
+					Databuffer[9] = (CrcChkGet>>8)&0xff;
+					xQueueSend(McuDataSendHandle,Databuffer,1000);
+					QueueDataTrans_Type RecvDatabuffer={0,NULL};
+					sint8 QueneRetRev = -1;
+					xQueueReset(McuDataRecvHandle);
+					QueneRetRev = xQueueReceive(McuDataRecvHandle,&RecvDatabuffer,1000*3);//����wifi���ն���
+					if(QueneRetRev==pdPASS)
 					{
-						memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:OK,"), strlen((char *)("Recv:OK,")));
-						*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:OK,"));
-						//��Ҫת��ΪASCII�뷢��
-						for(uint8 i=0;i<DataLen;i++)
+						uint8 DataLen = RecvDatabuffer.RealLen;
+						CrcChkGet = 0x00;
+						CrcChkCal = 0xff;
+						CrcChkGet = (*(RecvDatabuffer.DataPtr+DataLen-1)<<8)| (*(RecvDatabuffer.DataPtr+DataLen-2));
+						CrcChkCal = CRC16_Modbus(RecvDatabuffer.DataPtr,DataLen-2);
+						if(CrcChkCal==CrcChkGet)
+						{
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:OK,"), strlen((char *)("Recv:OK,")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:OK,"));
+							//��Ҫת��ΪASCII�뷢��
+							for(uint8 i=0;i<DataLen;i++)
+							{
+								*(AnsPtr + *AnsPtrLen + i*2 + 0) = HexToChar((*(RecvDatabuffer.DataPtr+i)>>4)&0x0F);
+								*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar((*(RecvDatabuffer.DataPtr+i)&0x0F));
+							}
+							*AnsPtrLen = *AnsPtrLen + DataLen*2;
+							//ֱ�ӷ���memcpy(AnsPtr + *AnsPtrLen,RecvDatabuffer.DataPtr,DataLen);
+							//*AnsPtrLen = *AnsPtrLen + DataLen;
+						}
+						else
 						{
-							*(AnsPtr + *AnsPtrLen + i*2 + 0) = HexToChar((*(RecvDatabuffer.DataPtr+i)>>4)&0x0F);
-							*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar((*(RecvDatabuffer.DataPtr+i)&0x0F));
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-2"), strlen((char *)("Recv:ERROR,-2")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-2"));
 						}
-						*AnsPtrLen = *AnsPtrLen + DataLen*2;
-						//ֱ�ӷ���memcpy(AnsPtr + *AnsPtrLen,RecvDatabuffer.DataPtr,DataLen);
-						//*AnsPtrLen = *AnsPtrLen + DataLen;
 					}
 					else
 					{
-						memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-2"), strlen((char *)("Recv:ERROR,-2")));
-						*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-2"));
+						memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-1"), strlen((char *)("Recv:ERROR,-1")));
+						*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-1"));
+					}
+					if(RecvDatabuffer.DataPtr!=NULL)
+					{
+						free(RecvDatabuffer.DataPtr);
 					}
+					RecvDatabuffer.DataPtr = NULL;
+					break;
 				}
 				else
 				{
-					memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-1"), strlen((char *)("Recv:ERROR,-1")));
-					*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-1"));
-				}
-				if(RecvDatabuffer.DataPtr!=NULL)
-				{
-					free(RecvDatabuffer.DataPtr);
+					memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+					*AnsPtrLen = strlen(ErrAns);
+					memcpy(AnsPtr + *AnsPtrLen, (char *)("-2\n"), strlen((char *)("-2\n")));
+					*AnsPtrLen = *AnsPtrLen + strlen((char *)("-2\n"));
+					break;
 				}
-				RecvDatabuffer.DataPtr = NULL;
-				break;
+
 			}
 			else
 			{
 				memcpy(AnsPtr, ErrAns, strlen(ErrAns));
 				*AnsPtrLen = strlen(ErrAns);
-				memcpy(AnsPtr + *AnsPtrLen, (char *)("-2\n"), strlen((char *)("-2\n")));
-				*AnsPtrLen = *AnsPtrLen + strlen((char *)("-2\n"));
-				break;
+				memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
+				*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
 			}
-
+			break;
 		}
-		else
+		case MAT_NameSet:
 		{
-			memcpy(AnsPtr, ErrAns, strlen(ErrAns));
-			*AnsPtrLen = strlen(ErrAns);
-			memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
-			*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
+			*AnsPtrLen = strlen((char *)ErrAns);
+			memcpy(AnsPtr, ErrAns, *AnsPtrLen);
+			break;
 		}
-		break;
-	}
-	case MAT_NameSet:
-	{
-		*AnsPtrLen = strlen((char *)ErrAns);
-		memcpy(AnsPtr, ErrAns, *AnsPtrLen);
-		break;
-	}
-	case MAT_Power:
-	{
-		if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
+		case MAT_Power:
 		{
-			if (BlePwrState == 0) //Ϊ0����
+			if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
+			{
+				if (BlePwrState == 0) //Ϊ0����
+				{
+					memcpy(AnsPtr, SucAns, strlen(SucAns));
+					*AnsPtrLen = strlen(SucAns);
+					memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
+				}
+				else
+				{
+					memcpy(AnsPtr, SucAns, strlen(SucAns));
+					*AnsPtrLen = strlen(SucAns);
+					memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
+				}
+			}
+			else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == 'O' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 1) == 'N')
 			{
+				BlePwrControlEnable = 1;
+				BlePwrControlFlg = 0;
 				memcpy(AnsPtr, SucAns, strlen(SucAns));
 				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
 			}
-			else
+			else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == 'O' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 1) == 'F' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 2) == 'F')
 			{
+				BlePwrControlEnable = 1;
+				BlePwrControlFlg = 1;
 				memcpy(AnsPtr, SucAns, strlen(SucAns));
 				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
 			}
+			else
+			{
+				*AnsPtrLen = strlen((char *)ErrAns);
+				memcpy(AnsPtr, ErrAns, *AnsPtrLen);
+			}
+			break;
 		}
-		else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == 'O' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 1) == 'N')
+		case MAT_Role: //��ɫ��ѯ������
 		{
-			BlePwrControlEnable = 1;
-			BlePwrControlFlg = 0;
-			memcpy(AnsPtr, SucAns, strlen(SucAns));
-			*AnsPtrLen = strlen(SucAns);
+			if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
+			{
+				if (BleCurrentRole == 0) //Ϊ0�ӻ�
+				{
+					memcpy(AnsPtr, SucAns, strlen(SucAns));
+					*AnsPtrLen = strlen(SucAns);
+					memcpy(AnsPtr + *AnsPtrLen, SlaveAns, strlen(SlaveAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(SlaveAns);
+				}
+				else
+				{
+					memcpy(AnsPtr, SucAns, strlen(SucAns));
+					*AnsPtrLen = strlen(SucAns);
+					memcpy(AnsPtr + *AnsPtrLen, MasterAns, strlen(MasterAns));
+					*AnsPtrLen = *AnsPtrLen + strlen(MasterAns);
+				}
+			}
+			else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == *MasterAns)
+			{
+				BleSetRoleEnable = 1;
+				BleSetRole = 1;
+				memcpy(AnsPtr, SucAns, strlen(SucAns));
+				*AnsPtrLen = strlen(SucAns);
+			}
+			else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == *SlaveAns)
+			{
+				BleSetRoleEnable = 1;
+				BleSetRole = 0;
+				memcpy(AnsPtr, SucAns, strlen(SucAns));
+				*AnsPtrLen = strlen(SucAns);
+			}
+			else
+			{
+				*AnsPtrLen = strlen((char *)ErrAns);
+				memcpy(AnsPtr, ErrAns, *AnsPtrLen);
+			}
+			break;
 		}
-		else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == 'O' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 1) == 'F' && *(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str) + 2) == 'F')
+		case MAT_GetMac:
 		{
-			BlePwrControlEnable = 1;
-			BlePwrControlFlg = 1;
 			memcpy(AnsPtr, SucAns, strlen(SucAns));
 			*AnsPtrLen = strlen(SucAns);
+			for(uint8 i=0;i<6;i++)
+			{
+				*(AnsPtr + *AnsPtrLen + i*2) = HexToChar((BleMacAddr[i]>>4)&0x0F);
+				*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar(BleMacAddr[i]&0x0F);
+			}
+			*AnsPtrLen = *AnsPtrLen + sizeof(BleMacAddr)*2;
+			break;
 		}
-		else
-		{
-			*AnsPtrLen = strlen((char *)ErrAns);
-			memcpy(AnsPtr, ErrAns, *AnsPtrLen);
-		}
-		break;
-	}
-	case MAT_Role: //��ɫ��ѯ������
-	{
-		if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == '?')
+		case MAT_Wconchk:
 		{
-			if (BleCurrentRole == 0) //Ϊ0�ӻ�
+			if (wifiConnFlg)
 			{
 				memcpy(AnsPtr, SucAns, strlen(SucAns));
 				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, SlaveAns, strlen(SlaveAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(SlaveAns);
+				memcpy(AnsPtr + *AnsPtrLen, OnAns, strlen(OnAns));
+				*AnsPtrLen = *AnsPtrLen + strlen(OnAns);
 			}
 			else
 			{
 				memcpy(AnsPtr, SucAns, strlen(SucAns));
 				*AnsPtrLen = strlen(SucAns);
-				memcpy(AnsPtr + *AnsPtrLen, MasterAns, strlen(MasterAns));
-				*AnsPtrLen = *AnsPtrLen + strlen(MasterAns);
+				memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
+				*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
 			}
+			break;
 		}
-		else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == *MasterAns)
-		{
-			BleSetRoleEnable = 1;
-			BleSetRole = 1;
-			memcpy(AnsPtr, SucAns, strlen(SucAns));
-			*AnsPtrLen = strlen(SucAns);
-		}
-		else if (*(Readptr + strlen(McuAtCmdFunc[McuAtIdx].str)) == *SlaveAns)
+		case MAT_Wmsg:
 		{
-			BleSetRoleEnable = 1;
-			BleSetRole = 0;
-			memcpy(AnsPtr, SucAns, strlen(SucAns));
-			*AnsPtrLen = strlen(SucAns);
+			uint8 Databuffer[10] = {0};
+			uint16 CrcChkGet;
+			uint16 CrcChkCal;
+			uint8 DataLen = 0;
+			sint8 QueneRetRev = -1;
+			if(wifiConnFlg)
+			{
+				if(*(Readptr+8)=='0' && *(Readptr+10)=='1'&& *(Readptr+11)=='0'&& ReadLen==23)//Hex
+				{
+					memcpy(Databuffer,Readptr+12,8);
+					CrcChkGet = (*(Readptr+12+8))|(*(Readptr+12+9)<<8);
+				}
+				else if(*(Readptr+8)=='1'&&*(Readptr+10)=='2'&& *(Readptr+11)=='0' && ReadLen==33)//string
+				{
+					for(uint8 i=0;i<8;i++)
+					{
+						Databuffer[i] = (CharToHex(*(Readptr+13+i*2))<<4) | (CharToHex(*(Readptr+13+i*2+1))<<0);
+					}
+					CrcChkGet = (CharToHex(*(Readptr+13+18))<<12) | (CharToHex(*(Readptr+13+19))<<8)|(CharToHex(*(Readptr+13+16))<<4) | (CharToHex(*(Readptr+13+17))<<0);
+				}
+				else
+				{
+					memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+					*AnsPtrLen = strlen(ErrAns);
+					memcpy(AnsPtr + *AnsPtrLen, (char *)("-1\n"), strlen((char *)("-1\n")));
+					*AnsPtrLen = *AnsPtrLen + strlen((char *)("-1\n"));
+					break;
+				}
+				CrcChkCal = CRC16_Modbus (Databuffer, 8);
+				if(CrcChkCal==CrcChkGet)
+				{
+					wifiAskFlg = true;
+					Databuffer[8] = CrcChkGet&0xff;
+					Databuffer[9] = (CrcChkGet>>8)&0xff;
+					xQueueSend(McuDataSend_wifi,Databuffer,1000);
+					QueueDataTrans_Type RecvDatabuffer={0,NULL};
+					xQueueReset(McuDataRecv_wifi);
+					QueneRetRev = xQueueReceive(McuDataRecv_wifi,&RecvDatabuffer,1000*2);
+					if(QueneRetRev==pdPASS)
+					{
+						DataLen = RecvDatabuffer.RealLen;
+						CrcChkGet = 0x00;
+						CrcChkCal = 0xff;
+						CrcChkGet = (*(RecvDatabuffer.DataPtr+DataLen-1)<<8)| (*(RecvDatabuffer.DataPtr+DataLen-2));
+						CrcChkCal = CRC16_Modbus(RecvDatabuffer.DataPtr,DataLen-2);
+						if(CrcChkCal==CrcChkGet)
+						{
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:OK,"), strlen((char *)("Recv:OK,")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:OK,"));
+							for(uint8 i=0;i<DataLen;i++)
+							{
+								*(AnsPtr + *AnsPtrLen + i*2 + 0) = HexToChar((*(RecvDatabuffer.DataPtr+i)>>4)&0x0F);
+								*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar((*(RecvDatabuffer.DataPtr+i)&0x0F));
+							}
+							*AnsPtrLen = *AnsPtrLen + DataLen*2;
+						}
+						else
+						{
+							memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-2"), strlen((char *)("Recv:ERROR,-2")));
+							*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-2"));
+						}
+					}
+					else
+					{
+						memcpy(AnsPtr + *AnsPtrLen, (char *)("Recv:ERROR,-1"), strlen((char *)("Recv:ERROR,-1")));
+						*AnsPtrLen = *AnsPtrLen + strlen((char *)("Recv:ERROR,-1"));
+					}
+					if(RecvDatabuffer.DataPtr!=NULL)
+					{
+						free(RecvDatabuffer.DataPtr);
+					}
+					RecvDatabuffer.DataPtr = NULL;
+					break;
+				}
+				else
+				{
+					memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+					*AnsPtrLen = strlen(ErrAns);
+					memcpy(AnsPtr + *AnsPtrLen, (char *)("-2\n"), strlen((char *)("-2\n")));
+					*AnsPtrLen = *AnsPtrLen + strlen((char *)("-2\n"));
+					break;
+				}
+
+			}
+			else
+			{
+				memcpy(AnsPtr, ErrAns, strlen(ErrAns));
+				*AnsPtrLen = strlen(ErrAns);
+				memcpy(AnsPtr + *AnsPtrLen, OffAns, strlen(OffAns));
+				*AnsPtrLen = *AnsPtrLen + strlen(OffAns);
+			}
+			break;
 		}
-		else
+		case MAT_CMD_MAXNUM:
 		{
 			*AnsPtrLen = strlen((char *)ErrAns);
 			memcpy(AnsPtr, ErrAns, *AnsPtrLen);
+			break;
 		}
-		break;
-	}
-	case MAT_GetMac:
-	{
-		memcpy(AnsPtr, SucAns, strlen(SucAns));
-		*AnsPtrLen = strlen(SucAns);
-		for(uint8 i=0;i<6;i++)
-		{
-			*(AnsPtr + *AnsPtrLen + i*2) = HexToChar((BleMacAddr[i]>>4)&0x0F);
-			*(AnsPtr + *AnsPtrLen + i*2 + 1) = HexToChar(BleMacAddr[i]&0x0F);
-		}
-		*AnsPtrLen = *AnsPtrLen + sizeof(BleMacAddr)*2;
-		break;
-	}
-	default:
-		break;
+		default:
+			break;
 	}
 	return 0;
 }
-#endif

+ 8 - 18
src/AppTaskUart0.h

@@ -1,7 +1,7 @@
 /*
  * AppTaskUart0.h
  *
- *  Created on: 2022年2月8日
+ *  Created on: 2022锟斤拷2锟斤拷8锟斤拷
  *      Author: QiXiang_CHENJIE
  */
 
@@ -11,9 +11,7 @@
 #include "AppGlobalVar.h"
 #include "AppFuncLib.h"
 
-#include "UartExchange.h"
-
-#if 0
+#if 1
 
 typedef enum
 {
@@ -26,23 +24,15 @@ typedef enum
 	MAT_Power,
 	MAT_Role,
 	MAT_GetMac,
-	MAT_Num
+	MAT_Wset,
+	MAT_Wmsg,
+	MAT_Wconchk,
+	MAT_Wrole,
+	/*new cmd area*/
+	MAT_CMD_MAXNUM
 } McuAtCmd;
 
 #endif
-
-typedef enum
-{
-	AT_TEST = 0,
-	PC_IP_INFO,
-	PC_ORDER_LOCK,
-	PC_ORDER_UNLOCK,
-	PC_ORDER_HEARTBEATS,
-
-	PC_ORDER_NUM_MAX,
-
-}McuAtCmd;
-
 typedef sint8 (*McuPFunc)(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx,char *AnsPtr,uint8 *AnsPtrLen);
 sint8 McuAtCallbackFunc(char *Readptr,uint16 ReadLen, McuAtCmd McuAtIdx,char *AnsPtr,uint8 *AnsPtrLen);
 void McuATCmdTransmit(char *Readptr,uint16 ReadLen,char *AnsPtr,uint8 *AnsPtrLen);

+ 131 - 156
src/AppTaskUart1.c

@@ -47,13 +47,9 @@ static void wifi_init(void);
 static void tcp_send_data(void);
 static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, sint8 *retFunc);
 static sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint16 pReadLen);
-
-
-static uint8_t receive_buffer[RECEIVE_DATA_LEN];
-static UART_THREAD_MESS sendMess = {0};
-
+static void wifiDataDecode(uint8 ConnId,uint8 *dataIn,uint16 dataLen);
 volatile uint32 TimerCounter = 0; //ms单位
-
+sint8 tcpSendFunc(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDataLen);
 
 typedef enum
 {
@@ -87,182 +83,109 @@ void wifi_task(void *pvParameters)
 	sint8 ATRet = -1;
 	uint16 ReadLen = 0;
 	uint8 AtCmdRead[150] = {0};
+	uint8 UartDataBuffer[512] = {0};
 	//TimerHandle_t softTimer1 = xTimerCreate("softTimer1", 10, pdTRUE, (void *)0, vTimerCallback);
-
     Dio_WriteChannel(DioConf_DioChannel_PTD16_GPIO_OUT_MCU_WIFI_POW_EN, STD_ON);//wifi开机
 	vTaskDelay(pdMS_TO_TICKS(5000));//开机后等一段时间模块可能会返回开机后的指令 不做处理
 	wifi_init();
-
 	tcp_server_process_status = TCP_IDLE;
-	sendMess.uartId = UART_LPUART1;
-
+	uint16 pReadLen = 0;
 	while(1)
 	{
-		/*********************主机收到WIFI从机的数据****************/
-		memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-		UART_Receive_Data(UART_LPUART1, RX_Buffer[UART_LPUART1], &ReadLen, 1000);
-		memcpy(AtCmdRead, RX_Buffer[UART_LPUART2], sizeof(AtCmdRead));
-		if(0 >= ReadLen)
-		{
-			continue;
-		}
-		int index_strstr = strstr(RX_Buffer[UART_LPUART1], "+IPD");
-		if(0 != index_strstr)//收到从机的数据
-		{
-			/* 协议处理 */
-			uint8_t* data = (uint8_t*)strstr(RX_Buffer[UART_LPUART1], ":") + 1; /* 确定数据开头位置 */
-
-			FRAME_HEAD_TEST frame_send = {0};
-
-			char time_test[8] = {0x14, 0x14, 0x01,0x01,0x01,0x01, 0x01, 0x01};
-			uint8_t back_status = 0;
-			if(0X68 == data[0])
-			{
-				memcpy(&frame_send, data, sizeof(frame_send));
-				if(0x03 == frame_send.cmd)
-				{
-					frame_send.cmd = 0x04;
-
-					//int frame_len = sizeof(FRAME_HEAD) + 8 + 1 + 1;
-					frame_send.FRAME_LEN = sizeof(FRAME_HEAD_TEST);
-					frame_send.end = 0x68;
-					frame_send.status = 1;
-					memset(receive_buffer, 0x00, RECEIVE_DATA_LEN);
-					memcpy(frame_send.time, time_test, 8);
-					memcpy(receive_buffer, &frame_send, sizeof(FRAME_HEAD_TEST));
-
-
-					sendMess.SendCMD = CMD_TO_TBOX_HEAT;
-					sendMess.sendDataLen = frame_send.FRAME_LEN;
-					xQueueSendToBack(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-				}
-				else if(0x06 == frame_send.cmd)
-				{
-					if(0xFF == frame_send.status)
-					{
-						sendMess.SendCMD = CMD_INFO_PRINT_LOCK_FF;
-					}
-					else
-					{
-						sendMess.SendCMD = frame_send.status + CMD_INFO_PRINT_LOCK_SU;
-					}
-
-					xQueueSendToBack(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-				}
-				else if(0x08 == frame_send.cmd)
-				{
-					if(0xFF == frame_send.status)
-					{
-						sendMess.SendCMD = CMD_INFO_PRINT_UNLOCK_FF;
-					}
-					else
-					{
-						sendMess.SendCMD = frame_send.status + CMD_INFO_PRINT_UNLOCK_SU;
-					}
-
-					xQueueSendToBack(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-				}
-				else
-				{
-					back_status = 0;
-				}
-			}
-		}
-		else
-		{
-			memset(receive_buffer, 0x00, RECEIVE_DATA_LEN);
-			memcpy(receive_buffer, RX_Buffer[UART_LPUART1], ReadLen);
-			sendMess.SendCMD = CMD_INFO_PRINT;
-			xQueueSendToBack(uart0_uart1_all_txqueue_ex, &sendMess, 1000);
-		}
-		vTaskDelay(pdMS_TO_TICKS(100));
-#if 0
 		switch(tcp_server_process_status)
 		{
 
 			case TCP_IDLE://等待从机加入wifi,等待从机连接服务器
 			{
-				uint16 pReadLen = 0;
-				memset(RX_Buffer[UART_LPUART1],0x00,sizeof(RX_Buffer[UART_LPUART1]));
-				UART_Receive_Data(UART_LPUART1,RX_Buffer[UART_LPUART1],&pReadLen,1000);
+
+				memset(UartDataBuffer,0x00,sizeof(UartDataBuffer));
+				UART_Receive_Data(UART_LPUART1,UartDataBuffer,&pReadLen,100);
 				if(pReadLen>0)
 				{
-					if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("+STA_CONNECTED:")))//从机连上wifi
+					if(strstr((char *)UartDataBuffer,(char *)("+STA_CONNECTED:")))//从机连上wifi
 					{
-						tcp_server_process_status = TCP_SERVER_OK;
-						vTaskDelay(pdMS_TO_TICKS(10));
+						tcp_server_process_status = TCP_IDLE;
 					}
-					else if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("+STA_DISCONNECTED:"))||strstr((char *)RX_Buffer[UART_LPUART1],(char *)("CLOSED")))//从机断开wifi
+					else if(strstr((char *)UartDataBuffer,(char *)("+STA_DISCONNECTED:"))||strstr((char *)UartDataBuffer,(char *)("CLOSED")))//从机断开wifi
 					{
 						tcp_server_process_status = TCP_SERVER_CLOSE;
 					}
-					else if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("CONNECT"))) //从机tcp连上服务器
+					else if(strstr((char *)UartDataBuffer,(char *)("CONNECT"))) //从机tcp连上服务器
 					{
 						tcp_server_process_status = TCP_SERVER_OK;
-						xSemaphoreGive(ConnSemaphore);
+						wifiConnFlg = true;
 					}
 				}
-				else
-				{
-				}
+
 				break;
 			}
 			case TCP_SERVER_OK://可以正常进行数据交互
 			{
 				/*********主机收到上位机的指令,向WIFI从机发送数据*********/
-				if(AT_MsgFlag)
+				if(wifiAskFlg)
 				{
 					sint8 outValue = -1;
 					uint8 McuDataSend[10] = {1,1,1,1,1,1,1,1,1,1};
-					sint8 QueueRet = xQueueReceive(McuDataSendHandle,McuDataSend,0);
-
+					sint8 QueueRet = xQueueReceive(McuDataSend_wifi,McuDataSend,0);
 					uint8 DataSendLen = sizeof(McuDataSend);
 					char AtCmdSend[10] = {0};
 					uint8 AtCmdSendTotalLen = 0;
-					sprintf(AtCmdSend, "%d\r\n",DataSendLen); //此处需要优化
+					sprintf(AtCmdSend, "%d\r\n",DataSendLen);
 					AtCmdSendTotalLen = strlen(AtCmdSend);
 					AtcmdTransmit(AT_SEND_DATA, AtCmdSend, AtCmdSendTotalLen, &ATRet);
 					if (ATRet == 0)
 					{
 						vTaskDelay(pdMS_TO_TICKS(100));
-						memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-						UART_Query_Data(UART_LPUART1, UART_LPUART1, McuDataSend, DataSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 1000 * 10);
-						if ((uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("SEND OK")))
+						memset(UartDataBuffer, 0x00, sizeof(UartDataBuffer));
+						UART_Query_Data(UART_LPUART1, UART_LPUART1, McuDataSend, DataSendLen, UartDataBuffer, &ReadLen, 1000);
+						if ((uint8 *)strstr((char *)UartDataBuffer, (char *)("SEND OK")))
 						{
 							outValue = 0;
 						}
 					}
-					//UART_Send_Data(UART_LPUART1,McuDataSend,sizeof(McuDataSend),1000);
-					AT_MsgFlag = false;
+					wifiAskFlg = false;
 				}
 
 				/*********************主机收到WIFI从机的数据****************/
-				memset(RX_Buffer[UART_LPUART1],0x00,sizeof(RX_Buffer[UART_LPUART1]));
-				UART_Receive_Data(UART_LPUART1,RX_Buffer[UART_LPUART1],&ReadLen,1000);
-				memcpy(AtCmdRead, RX_Buffer[UART_LPUART2], sizeof(AtCmdRead));
+				memset(UartDataBuffer, 0x00, sizeof(UartDataBuffer));
+				UART_Receive_Data(UART_LPUART1,UartDataBuffer,&ReadLen,100);
 				if(ReadLen>0)
 				{
-					if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("+STA_DISCONNECTED")))//从机tcp断开
+					if(strstr((char *)UartDataBuffer,(char *)("+STA_DISCONNECTED")))//从机tcp断开
 					{
 						tcp_server_process_status = TCP_SERVER_CLOSE;
+						wifiAskFlg = false;
 					}
-					else if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("CLOSED")))//从机tcp断开与服务器的链接
+					else if(strstr((char *)UartDataBuffer,(char *)("CLOSED")))//从机tcp断开与服务器的链接
 					{
 						tcp_server_process_status = TCP_SERVER_CLOSE;
-
+						wifiAskFlg = false;
 					}
-					else if(strstr((char *)RX_Buffer[UART_LPUART1],(char *)("+IPD")))//收到从机的数据
+					else if(strstr((char *)UartDataBuffer,(char *)("+IPD")))//收到从机的数据
 					{
-						tcp_send_data();
-
-						BleRecvDataFromUart2 DataSend={0, NULL};
-						DataSend.RealLen = ReadLen;
-						DataSend.DataPtr = malloc(ReadLen+1);
+						uint8 *retptr = NULL;
+						uint16 TcpDataLen = 0;
+						uint16 NumCalTemp = 1;
+						retptr = (uint8 *)strstr((char *)UartDataBuffer, (char *)(":"));
+						for (uint8 i = 0; i < 3; i++)
+						{
+							if (*(retptr - i - 1) == ',')
+							{
+								break;
+							}
+							TcpDataLen = TcpDataLen + CharToHex(*(retptr - i - 1)) * NumCalTemp;
+							NumCalTemp = NumCalTemp * 10;
+						}
+						tcpSendFunc(0,retptr+1,TcpDataLen);
 
+						wifiDataDecode(0,retptr+1,TcpDataLen);
+						QueueDataTrans_Type DataSend={0, NULL};
+						DataSend.RealLen = TcpDataLen;
+						DataSend.DataPtr = malloc(TcpDataLen+1);
 						memset(DataSend.DataPtr,0x00,ReadLen+1);
-						memcpy(DataSend.DataPtr,AtCmdRead,DataSend.RealLen);
+						memcpy(DataSend.DataPtr,retptr+1,DataSend.RealLen);
 						sint8 McuDataRet = -1;
-						McuDataRet= xQueueSend(McuDataRecvHandle,&DataSend,1000*2);//增加数据的有效性判定,主机蓝牙从Uart2->Uart0数据的有效性,len>7?
+						McuDataRet= xQueueSend(McuDataRecv_wifi,&DataSend,1000);
 						if(McuDataRet != pdPASS)
 						{
 							if(DataSend.DataPtr != NULL)
@@ -281,19 +204,57 @@ void wifi_task(void *pvParameters)
 				break;
 			}
 		}
-#endif
-
 	}
 }
-
-
-
+/************************************************************************/
+static void wifiDataDecode(uint8 ConnId,uint8 *dataIn,uint16 dataLen)
+{
+	uint8 lockState = 0;
+	uint8 accState = 0;
+	uint8 lockDrvState = 0;
+	uint8 procState = 0;
+	uint8 cmd = 0;
+	uint8 timeArray[8];
+	uint8 dataHeader[3]={0x68,0x23,0x24};
+	uint8 dataVinInfo[17]={0};
+	uint8 dataInLen = 0;
+	uint8 dataOutLen = 0;
+	uint8 dataOutBuffer[128];
+	dataInLen = (*(dataIn+4)<<8)|(*(dataIn+3));
+	memcpy(dataVinInfo,dataIn+5,17);
+	if(dataLen==dataInLen)
+	{
+		cmd = *(dataIn+5);
+		memcpy(timeArray,dataIn+23,8);
+		switch(cmd)
+		{
+			case 0x03://heartData
+			{
+				lockState = *(dataIn+31);
+				accState = *(dataIn+32);
+				lockDrvState = *(dataIn+32);
+				memcpy(dataOutBuffer + dataOutLen,dataHeader,3);
+				dataOutLen = dataOutLen + 3;
+				dataOutLen = dataOutLen + 2;//长度跳过
+				memcpy(dataOutBuffer + dataOutLen,dataVinInfo,17);
+				dataOutLen = dataOutLen + 17;
+				memcpy(dataOutBuffer + dataOutLen,timeArray,8);
+				dataOutLen = dataOutLen + 8;//未完成
+				tcpSendFunc(ConnId,dataOutBuffer,dataOutLen);
+				break;
+			}
+			default:
+				break;
+		}
+	}
+}
 
 
 static void tcp_send_data(void)
 {
 	/*组包数据*/
 	uint16 DataSendLen = 0;
+	uint8 UartRecvData[256];
 	uint8 *pSendData = NULL;
 	sint8 ATRet = -1;
 	uint8 ReadLen = 0;
@@ -308,10 +269,8 @@ static void tcp_send_data(void)
 	AtcmdTransmit(AT_SEND_DATA, AtCmdSend, AtCmdSendTotalLen, &ATRet);
 	if (ATRet == 0)
 	{
-		vTaskDelay(pdMS_TO_TICKS(100));
-		memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-		UART_Query_Data(UART_LPUART1, UART_LPUART1, send_buf, DataSendLen, RX_Buffer[UART_LPUART1], &ReadLen, 1000 * 10);
-		if ((uint8 *)strstr((char *)RX_Buffer[UART_LPUART1], (char *)("SEND OK")))
+		UART_Query_Data(UART_LPUART1, UART_LPUART1, send_buf, DataSendLen, UartRecvData, &ReadLen, 1000);
+		if ((uint8 *)strstr((char *)UartRecvData, (char *)("SEND OK")))
 		{
 			outValue = 0;
 		}
@@ -322,23 +281,54 @@ static void tcp_send_data(void)
 	}
 	pSendData = NULL;
 }
-
+sint8 tcpSendFunc(uint8 TcpConnectId, uint8 *SendDataPtr, uint16 SendDataLen)
+{
+	sint8 outValue = -1;
+	uint8  sendErrConuter= 0;
+	uint16 ReadLen = 0;
+	char AtCmdSend[30] = {0};
+	uint8 AtCmdSendTotalLen = 0;
+	uint8 UartRecvPtr[128];
+	uint8 ret = 0;
+	sprintf(AtCmdSend, "AT+CIPSEND=%d,%d\r\n", TcpConnectId, SendDataLen);
+	AtCmdSendTotalLen = mstrlen(AtCmdSend);
+	while(outValue!=0&&sendErrConuter<3)
+	{
+		ret = UART_Query_Data(UART_LPUART1, UART_LPUART1, (uint8 *)AtCmdSend, AtCmdSendTotalLen, UartRecvPtr, &ReadLen, 1000);
+		if (((ret==0)&&(ReadLen>0)&&((uint8 *)strstr((char *)UartRecvPtr, (char *)(">"))))||1)//此IF条件默认通过
+		{
+			UART_Send_Data(UART_LPUART1, (uint8 *)SendDataPtr, SendDataLen, 100);
+			sint8 ret = AtcmdDelayRecvFunc(UART_LPUART1,(char *)("SEND OK"),2000);
+			if (ret==0)
+			{
+				outValue = 0;
+			}
+			else
+			{
+				outValue = -2;
+				sendErrConuter++;
+			}
+		}
+		else
+		{
+			outValue = -1;
+			sendErrConuter++;
+		}
+	}
+	return outValue;
+}
 /**********************************************************************************************/
 static void wifi_init(void)
 {
 	//WIFI模块初始化
 	uint8 InitStep = 0;
 	sint8 ATRet = -1;
-	//uint8 err_cnt = 0;
 	while(1)
 	{
 		switch (InitStep)
 		{
 			case 0: // AT指令同步
 			{
-				/* WiFi 模块加载完毕标志位*/
-				WiFi_Init_Over_Flag = 0;
-
 				AtcmdTransmit(AT_CMD_TEST, NULL, 0, &ATRet);
 				if (ATRet == 0)
 				{
@@ -435,8 +425,6 @@ static void wifi_init(void)
 			}
 			default:
 			{
-				/* WiFi 模块加载完毕标志位*/
-				WiFi_Init_Over_Flag = 1;
 				return;
 				break;
 			}
@@ -445,14 +433,12 @@ static void wifi_init(void)
 }
 
 
-
-
-
 /***********************************************************************************************/
 static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen, sint8 *retFunc)
 {
 	/* 读取长度 */
 	uint16 ReadLen = 0;
+	uint8 UartRecvBuffer[256];
 	uint8 *PtrATCmdSend = NULL;
 	uint8 ATCmdFixedLen = 0;
 	uint16 ATCmdTotalLen = 0;
@@ -465,16 +451,12 @@ static void AtcmdTransmit(sint8 CmdIdx, uint8 *SetValuePtr, uint16 SetValueLen,
 	PtrATCmdSend = malloc(ATCmdTotalLen+1);
 	memset(PtrATCmdSend, 0x00, ATCmdTotalLen+1);
 	memcpy(PtrATCmdSend, Atcmdfunc[CmdIdx].str, ATCmdFixedLen);
-
 	if (SetValuePtr != NULL)
 	{
 		memcpy(PtrATCmdSend + ATCmdFixedLen, SetValuePtr, SetValueLen);
 	}
-	memset(RX_Buffer[UART_LPUART1], 0x00, sizeof(RX_Buffer[UART_LPUART1]));
-
-	UART_Query_Data(UART_LPUART1, UART_LPUART1, PtrATCmdSend, ATCmdTotalLen, RX_Buffer[UART_LPUART1], &ReadLen, 1000 * 100);
-
-	*retFunc = Atcmdfunc[CmdIdx].cb(PtrATCmdSend, RX_Buffer[UART_LPUART1], CmdIdx, ReadLen);
+	UART_Query_Data(UART_LPUART1, UART_LPUART1, PtrATCmdSend, ATCmdTotalLen, UartRecvBuffer, &ReadLen, 1000);
+	*retFunc = Atcmdfunc[CmdIdx].cb(PtrATCmdSend, UartRecvBuffer, CmdIdx, ReadLen);
 	if (PtrATCmdSend != NULL)
 	{
 		memset(PtrATCmdSend, 0x00, ATCmdTotalLen+1);
@@ -498,7 +480,6 @@ static sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint1
 		case AT_SET_MODE:
 		case AT_OPEN_MASTER_WIFI:
 		case AT_SET_MUX:
-		//case AT_TCP_CLOSE:
 		case AT_OPEN_SERVER:
 		case AT_CIPAP_DEF:
 		case AT_CIFSR:
@@ -556,9 +537,3 @@ static sint8 at_callbackFunc(char *PSendStr, char *pReadStr, uint8 CmdIdx, uint1
 	}
 	return OutValue;
 }
-
-uint8_t* getReceiveDate(void)
-{
-	return receive_buffer;
-}
-

+ 4 - 14
src/AppTaskUart1.h

@@ -28,33 +28,23 @@
 #include "AppFunclib.h"
 #include "AppGlobalVar.h"
 
-#include "UartExchange.h"
-
 #define MASTER true
 #define SlAVE  false
 
-extern uint8_t* getReceiveDate(void);
-
-
-
 typedef enum
 {
     AT_CMD_TEST = 0,
 	AT_SET_MODE,
-	AT_OPEN_MASTER_WIFI,//��������WIFI
-	AT_SET_MUX,//���ö�����
-    AT_OPEN_SERVER,//����������
+	AT_OPEN_MASTER_WIFI,
+	AT_SET_MUX,
+    AT_OPEN_SERVER,
 	AT_CIPAP_DEF,
 	AT_CIFSR,     /* 获取IP信息 */
 	AT_SEND_DATA,
-	AT_TCP_CLOSE,//�ر���������
+	AT_TCP_CLOSE,
 	AT_CHECK_LINK_STATUS
 }ATCmd;
 
-
-
-
-
 void wifi_task(void *pvParameters);
 #endif /* APPTASKUART1_H_ */
 

+ 1 - 1
src/Hal_Var.c

@@ -1,7 +1,7 @@
 /*
  * Hal_Var.c
  *
- *  Created on: 2022Äê3ÔÂ14ÈÕ
+ *  Created on: 2022年3月14日
  *      Author: Zhengchao
  */
 #include "Hal_Var.h"

+ 1 - 1
src/Hal_Var.h

@@ -1,7 +1,7 @@
 /*
  * Hal_Var.h
  *
- *  Created on: 2022Äê3ÔÂ14ÈÕ
+ *  Created on: 2022Äê3ÔÂ14ÈÕ
  *      Author: Zhengchao
  */
 

+ 11 - 3
src/Hal_Wdg.c

@@ -1,28 +1,30 @@
 
 #include "Hal_Wdg.h"
+
 volatile uint8 notificationCount = 0;
 
+
 void WdgInit(void)
 {
 	/* Initialize the Wdg driver */
 	Wdg_43_Instance0_Init(&Wdg_Config_0_VS_0);
 
 	/* Set the Wdg Trigger Condition in order to periodically service the Wdg */
-	Wdg_43_Instance0_SetTriggerCondition(1000);
+	Wdg_43_Instance0_SetTriggerCondition(5000);
 
 	/*Change the Wdg mode of operation */
 	Wdg_43_Instance0_SetMode(WDGIF_FAST_MODE);
 
 	/* Set the Wdg Trigger Condition in order to periodically service the Wdg */
-	Wdg_43_Instance0_SetTriggerCondition(1000);
+	Wdg_43_Instance0_SetTriggerCondition(5000);
 }
 
+
 void Wdg_CallBackNotification1(void)
 {
     notificationCount = 1U;
 }
 
-
 static void HAL_1msPeriod(void)
 {
     uint16 cntTmp = 0u;
@@ -101,8 +103,14 @@ void WATCHDOG_HAL_Feed(void)
 	Wdg_43_Instance0_SetTriggerCondition(500);
 }
 
+typedef void (*AppAddr)(void);
 void DoResetECU(void)
 {
 	IsFeedWdg = FALSE;
 	Wdg_43_Instance0_SetTriggerCondition(0);
+	while(1)
+	{
+
+		;
+	}
 }

+ 1 - 1
src/Hal_Wdg.h

@@ -1,7 +1,7 @@
 /*
  * Hal_Wdg.h
  *
- *  Created on: 2022Äê3ÔÂ14ÈÕ
+ *  Created on: 2022年3月14日
  *      Author: Zhengchao
  */
 

+ 0 - 143
src/UartExchange.c

@@ -1,143 +0,0 @@
-/*
- * UartExchange.c
- *
- *  Created on: 2022年9月30日
- *      Author: king
- */
-
-#include "UartExchange.h"
-
-xQueueHandle uart0_uart1_all_txqueue_ex = {0};
-xQueueHandle uart0_rxqueue_ex = {0};
-xQueueHandle uart1_rxqueue_ex = {0};
-
-uint8_t WiFi_Init_Over_Flag = 0;
-
-const char* WiFiNotLoad = "This WiFi is not load";
-/*
- * uart1和uart0串口发送消息都由这个线程接管,接收由对于文件控制
- * 此函数还用于处理WiFi指令的处理
- * 防止 uart1 和 uart0 接收时阻塞
- * ??当WiFi初始化时指令无效
- * */
-void uart0_uart1_deal_task(void *pvParameters)
-{
-	uart0_uart1_all_txqueue_ex = xQueueCreate(UART_EXCHANGE_QUEUE_LEN, sizeof(UART_THREAD_MESS));
-	uart0_rxqueue_ex = xQueueCreate(UART_EXCHANGE_QUEUE_LEN, sizeof(UART_THREAD_MESS));
-	uart1_rxqueue_ex = xQueueCreate(UART_EXCHANGE_QUEUE_LEN, sizeof(UART_THREAD_MESS));
-
-	BaseType_t reStatus = 0;
-	UART_THREAD_MESS quRX = {0};
-	static FRAME_HEAD_TEST frame_send = {0};
-
-	char tx_buffer[256] = {0};
-	for( ; ; )
-	{
-		if(0 == uxQueueMessagesWaiting(uart0_uart1_all_txqueue_ex))
-		{
-			vTaskDelay(pdMS_TO_TICKS(10));
-			continue;
-		}
-		else
-		{
-			memset(&quRX, 0x00, sizeof(UART_THREAD_MESS));
-			reStatus = xQueueReceive(uart0_uart1_all_txqueue_ex, &quRX, 1000);
-
-			if(0 == WiFi_Init_Over_Flag)
-			{
-				//wifi 未初始化完毕
-				UART_Send_Data(UART_LPUART0, WiFiNotLoad, strlen(WiFiNotLoad), 1000);
-			}
-			else if(pdPASS == reStatus)
-			{
-				const char* AT_Test = "AT\r\n";
-				const char* AT_CIPSTATUS = "AT+CIPSTATUS\r\n";
-				const char* noId = "The directive is not legal\r\n";
-				char* Text_str[] =
-				{
-					{"Locked successfully"},
-					{"Failed to add lock"},
-					{"Frame number mismatch"},
-					{"Anomalies"},
-					{"Unlocked successfully"},
-					{"Unlock failure"},
-					{"Frame number mismatch"},
-					{"Anomalies"}
-				};
-				switch(quRX.SendCMD)
-				{
-					case AT_AT:
-						UART_Send_Data(UART_LPUART1, (uint8_t *)AT_Test, strlen(AT_Test), 1000);
-						break;
-					case AT_IP_INFO:
-						UART_Send_Data(UART_LPUART1, (uint8_t *)AT_CIPSTATUS, strlen(AT_CIPSTATUS), 1000);
-						break;
-					case CMD_TO_TBOX_HEAT:
-
-						memcpy(&frame_send, getReceiveDate(), sizeof(FRAME_HEAD_TEST));
-
-						memset(tx_buffer, 0x00, sizeof(tx_buffer));
-						sprintf(tx_buffer, "AT+CIPSEND=0,%d\r\n",sizeof(FRAME_HEAD_TEST));
-						UART_Send_Data(UART_LPUART1, tx_buffer, strlen(tx_buffer), 1000);
-
-						UART_Send_Data(UART_LPUART1, &frame_send, sizeof(FRAME_HEAD_TEST), 1000);
-						break;
-					case CMD_TO_TBOX_LOCK:
-						/* 上面静态得到了基本参数,此处暂时不设置 */
-						frame_send.cmd = 0x05;
-						frame_send.status = 0x55;
-
-						memset(tx_buffer, 0x00, sizeof(tx_buffer));
-						sprintf(tx_buffer, "AT+CIPSEND=0,%d\r\n",sizeof(FRAME_HEAD_TEST));
-						UART_Send_Data(UART_LPUART1, tx_buffer, strlen(tx_buffer), 1000);
-
-						UART_Send_Data(UART_LPUART1, &frame_send, sizeof(FRAME_HEAD_TEST), 1000);
-						break;
-					case CMD_TO_TBOX_UNLOCK:
-						frame_send.cmd = 0x07;
-						frame_send.status = 0x55;
-
-						memset(tx_buffer, 0x00, sizeof(tx_buffer));
-						sprintf(tx_buffer, "AT+CIPSEND=0,%d\r\n",sizeof(FRAME_HEAD_TEST));
-						UART_Send_Data(UART_LPUART1, tx_buffer, strlen(tx_buffer), 1000);
-
-						UART_Send_Data(UART_LPUART1, &frame_send, sizeof(FRAME_HEAD_TEST), 1000);
-						break;
-					case CMD_INFO_PRINT:
-						UART_Send_Data(UART_LPUART0, getReceiveDate(), strlen(getReceiveDate()), 1000);
-						break;
-					case CMD_INFO_PRINT_LOCK_SU:
-
-					case CMD_INFO_PRINT_LOCK_ER:
-
-					case CMD_INFO_PRINT_LOCK_NOCOM:
-
-					case CMD_INFO_PRINT_LOCK_FF:
-
-					case CMD_INFO_PRINT_UNLOCK_SU:
-
-					case CMD_INFO_PRINT_UNLOCK_ER:
-
-					case CMD_INFO_PRINT_UNLOCK_NOCOM:
-
-					case CMD_INFO_PRINT_UNLOCK_FF:
-						memset(tx_buffer, 0x00, sizeof(tx_buffer));
-						sprintf(tx_buffer, "AT+CIPSEND=0,%d\r\n",sizeof(Text_str[quRX.SendCMD - CMD_INFO_PRINT_LOCK_SU]));
-						UART_Send_Data(UART_LPUART1, tx_buffer, strlen(tx_buffer), 1000);
-
-						UART_Send_Data(UART_LPUART0, Text_str[quRX.SendCMD - CMD_INFO_PRINT_LOCK_SU],\
-								strlen(Text_str[quRX.SendCMD - CMD_INFO_PRINT_LOCK_SU]), 1000);
-						break;
-					default:
-						UART_Send_Data(UART_LPUART0, noId, strlen(noId), 1000);
-					break;
-				}
-			}
-			else
-			{
-
-			}
-		}
-		vTaskDelay(pdMS_TO_TICKS(10));
-	}
-}

+ 0 - 71
src/UartExchange.h

@@ -1,71 +0,0 @@
-/*
- * UartExchange.h
- *
- *  Created on: 2022年9月30日
- *      Author: king
- */
-
-#ifndef UARTEXCHANGE_H_
-#define UARTEXCHANGE_H_
-
-#include "hal_adapter.h"
-#include "AppGlobalVar.h"
-#include "AppFuncLib.h"
-#include "AppTaskUart1.h"
-#include "AppTaskUart0.h"
-#include "stdio.h"
-
-#define UART_EXCHANGE_QUEUE_LEN      (32U)
-#define RECEIVE_DATA_LEN              (256U)
-
-extern xQueueHandle uart0_uart1_all_txqueue_ex;
-extern xQueueHandle uart0_rxqueue_ex;
-extern xQueueHandle uart1_rxqueue_ex;
-
-extern uint8_t WiFi_Init_Over_Flag;
-
-typedef struct
-{
-	uint8_t  uartId;
-	int  SendCMD;
-	int  sendDataLen;
-}UART_THREAD_MESS;
-
-typedef enum
-{
-	AT_AT,
-	AT_IP_INFO,
-	CMD_TO_TBOX_HEAT,
-	CMD_TO_TBOX_LOCK,
-	CMD_TO_TBOX_UNLOCK,
-	CMD_INFO_PRINT,
-	CMD_INFO_PRINT_LOCK_SU,  // 成功
-	CMD_INFO_PRINT_LOCK_ER,  // 失败
-	CMD_INFO_PRINT_LOCK_NOCOM, // 不匹配
-	CMD_INFO_PRINT_LOCK_FF,    // 异常
-	CMD_INFO_PRINT_UNLOCK_SU,  // 成功
-	CMD_INFO_PRINT_UNLOCK_ER,  // 失败
-	CMD_INFO_PRINT_UNLOCK_NOCOM, // 不匹配
-	CMD_INFO_PRINT_UNLOCK_FF,    // 异常
-}UART_EXCHANGE_CMD;
-
-#pragma pack(1)
-/* 此结构体作测试用,暂时匹配发送的格式 */
-typedef struct
-{
-	uint8_t HEAD_1;
-	uint8_t HEAD_2;
-	uint8_t HEAD_3;
-	uint16_t FRAME_LEN;
-	uint8_t cmd;
-	uint8_t CAR_NUM[17];
-	uint8_t time[8];
-	uint8_t status;
-	uint8_t end;
-}FRAME_HEAD_TEST;
-#pragma pack()
-
-void uart0_uart1_deal_task(void *pvParameters);
-
-
-#endif /* UARTEXCHANGE_H_ */

+ 687 - 576
src/hal_adapter.c

@@ -1,598 +1,709 @@
 /*
  * hal_adapter.c
  *
- *  Created on: 2022Äê1ÔÂ18ÈÕ
+ *  Created on: 2022年1月18日
  *      Author: QiXiang_CHENJIE
  */
 #include "hal_adapter.h"
 #include "AppGlobalVar.h"
-/*NB*/
-/**
- * @brief :??????
- * @param {UINT8} *pSend
- * @param {UINT32} sendLen
- * @param {UINT8} *pRead
- * @param {UINT32} readLen
- * @param {UINT32} timeout
- * @return {*}
- */
-/*
-UINT8 UartTramsit(UINT8 *pSend, UINT32 sendLen, UINT8 *pRead, UINT32 readLen, UINT32 timeout)
+#include "stdio.h"
+#include "stdarg.h"
+uint8_t __attribute__((section(".non_cacheable_data"))) RX_Buffer[3][BUFFER_SIZE];
+uint32_t bufferIdx[3] = {0};
+    
+volatile Uart_StatusType Uart_TransmitStatus[3] = {UART_STATUS_TIMEOUT, UART_STATUS_TIMEOUT, UART_STATUS_TIMEOUT};
+QueueHandle_t UartRecvQueue[3];
+QueueHandle_t UartSendQueue[3];
+QueueHandle_t UartHalQueueHandle;
+Std_ReturnType UartStartRecvFunc(uint8 channel);
+
+void create_ringBuffer(ringbuffer_t *ringBuf, uint8_t *buf, uint32_t buf_len);
+void clear_ringBuffer(ringbuffer_t *ringBuf);
+uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
+uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
+uint8 ringBufferforUart[3][BUFFER_SIZE];
+ringbuffer_t uartRingBuffer[3];
+
+sint8 AtcmdDelayRecvFunc(uint8 recvChannel, char *ResultStrPtr, uint16 delayTime)
+{
+    sint8 outValue = -1;
+    uint8 delayCnt = 0;
+    uint8 UartData[256];
+    uint16 ReadLen = 0;
+    char *retptr = NULL;
+    while (delayCnt < (delayTime / 1000) && outValue != 0)
+    {
+        UART_Receive_Data(recvChannel, UartData, &ReadLen, 1000);
+        if (ReadLen > 0)
+        {
+            retptr = (char *)strstr((char *)UartData, ResultStrPtr);
+            if (retptr)
+            {
+                outValue = 0;
+                break;
+            }
+        }
+        else
+        {
+            delayCnt++;
+        }
+    }
+    return outValue;
+}
+
+void create_ringBuffer(ringbuffer_t *ringBuf, uint8_t *buf, uint32_t buf_len)
+{
+    ringBuf->br = 0;
+    ringBuf->bw = 0;
+    ringBuf->btoRead = 0;
+    ringBuf->source = buf;
+    ringBuf->length = buf_len;
+}
+void clear_ringBuffer(ringbuffer_t *ringBuf)
+{
+    ringBuf->br = 0;
+    ringBuf->bw = 0;
+    ringBuf->btoRead = 0;
+}
+uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
+{
+    uint32_t len = 0;
+    volatile uint32_t ringBuf_bw = ringBuf->bw;
+    uint32_t ringBuf_len = ringBuf->length;
+    uint8_t *ringBuf_source = ringBuf->source;
+
+    if ((ringBuf_bw + size) > ringBuf_len)
+    {
+        ringBuf_bw = 0;
+    }
+    memcpy(ringBuf_source + ringBuf_bw, buffer, size);
+    ringBuf->bw = (ringBuf_bw + size) % ringBuf_len;
+    ringBuf->btoRead += size;
+
+    /*
+        if(ringBuf->br!=0)
+        {
+            memcpy(ringBuf_source, buffer, size);
+            ringBuf->br = 0;
+        }
+    */
+    /*
+        if( (ringBuf_bw + size) <= ringBuf_len  )
+        {
+            memcpy(ringBuf_source + ringBuf_bw, buffer, size);
+        }
+        else
+        {
+            len = ringBuf_len - ringBuf_bw;
+            memcpy(ringBuf_source + ringBuf_bw, buffer, len);
+            memcpy(ringBuf_source, buffer + ringBuf_bw, size - len);
+        }
+        ringBuf->bw = (ringBuf->bw + size) % ringBuf_len;
+        ringBuf->btoRead += size;
+    */
+
+    return size;
+}
+uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf)
+{
+    uint32_t len = 0;
+    volatile uint32_t ringBuf_br = ringBuf->br;
+    uint32_t ringBuf_len = ringBuf->length;
+    uint8_t *ringBuf_source = ringBuf->source;
+
+    memcpy(buffer, ringBuf_source, size);
+    ringBuf->br = size;
+    //    if( (ringBuf_br + size ) <= ringBuf_len )
+    //    {
+    //        memcpy(buffer, ringBuf_source + ringBuf_br, size);
+    //    }
+    //    else
+    //    {
+    //        len = ringBuf_len - ringBuf_br;
+    //        memcpy(buffer, ringBuf_source + ringBuf_br, len);
+    //        memcpy(buffer + len, ringBuf_source, size - len);
+    //    }
+    //    ringBuf->br = (ringBuf->br + size) % ringBuf_len;
+    //    ringBuf->btoRead -= size;
+
+    return size;
+}
+Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txBuffer, uint16 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout)
+{
+    UartMsg_t UartRecvMsg;
+    UartMsg_t UartSendMsg;
+    BaseType_t Sendret = pdFALSE;
+    BaseType_t Recvret = pdFALSE;
+    uint32 retVal = E_NOT_OK;
+    UartSendMsg.DataLen = sendLength;
+    UartSendMsg.dataPtr = txBuffer;
+    *rxlen = 0;
+    Sendret = xQueueSend(UartSendQueue[transChannel], &UartSendMsg, 50);
+    if (Sendret == pdTRUE)
+    {
+        Recvret = xQueueReceive(UartRecvQueue[recvChannel], &UartRecvMsg, T_timeout);
+        if (Recvret == pdTRUE)
+        {
+            *rxlen = UartRecvMsg.DataLen;
+            //		read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
+            memcpy(rxBuffer, (uint8 *)(UartRecvMsg.dataAddr), UartRecvMsg.DataLen);
+            retVal = E_OK;
+        }
+        else
+        {
+            retVal = 3;
+        }
+    }
+    else
+    {
+        retVal = 2;
+    }
+    return retVal;
+}
+Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint8 *rxlen, uint32 T_timeout)
+{
+    UartMsg_t UartRecvMsg;
+    BaseType_t ret = pdFALSE;
+    uint32 retVal = E_NOT_OK;
+    *rxlen = 0;
+    ret = xQueueReceive(UartRecvQueue[recvChannel], &UartRecvMsg, T_timeout);
+    if (ret == pdTRUE)
+    {
+        *rxlen = UartRecvMsg.DataLen;
+
+        memcpy(rxBuffer, (uint8 *)UartRecvMsg.dataAddr, UartRecvMsg.DataLen);
+
+        retVal = E_OK;
+    }
+    return retVal;
+}
+Std_ReturnType UART_Reset(uint8 recvChannel)
+{
+    uint32 retVal = E_NOT_OK;
+    retVal = xQueueReset(UartRecvQueue[recvChannel]);
+    return retVal;
+}
+Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout)
 {
-    UartBufferPtr UartData = {NULL, 0};
-    uint8 ReadLen = 0;
-    if (pSend)
+    UartMsg_t UartSendMsg;
+    BaseType_t ret = pdFALSE;
+    uint32 retVal = E_NOT_OK;
+    UartSendMsg.DataLen = sendLength;
+    UartSendMsg.dataPtr = txBuffer;
+    ret = xQueueSend(UartSendQueue[transChannel], &UartSendMsg, T_timeout);
+    if (ret == pdTRUE)
     {
-        HAL_UART_SendStr(PORT_USART_0, pSend, sendLen);
+        retVal = E_OK;
     }
-    if (readLen > 0)
+    return retVal;
+}
+void UartInit(void)
+{
+    create_ringBuffer(&uartRingBuffer[0], ringBufferforUart[0], sizeof(ringBufferforUart[0]));
+    create_ringBuffer(&uartRingBuffer[1], ringBufferforUart[1], sizeof(ringBufferforUart[1]));
+    create_ringBuffer(&uartRingBuffer[2], ringBufferforUart[2], sizeof(ringBufferforUart[2]));
+    UartRecvQueue[0] = xQueueCreate(6, sizeof(UartMsg_t));
+    UartRecvQueue[1] = xQueueCreate(6, sizeof(UartMsg_t));
+    UartRecvQueue[2] = xQueueCreate(6, sizeof(UartMsg_t));
+    UartSendQueue[0] = xQueueCreate(3, sizeof(UartMsg_t));
+    UartSendQueue[1] = xQueueCreate(1, sizeof(UartMsg_t));
+    UartSendQueue[2] = xQueueCreate(1, sizeof(UartMsg_t));
+    UartHalQueueHandle = xQueueCreate(9, sizeof(UartHalMsg_t));
+
+    xTaskCreate(Uart_Hal_RecvTask, (const char *const)"UartRecv", 256, (void *)0, main_TASK_PRIORITY + 5, NULL);
+    xTaskCreate(Uart_Hal_SendTask, (const char *const)"UartSend", 256, (void *)0, main_TASK_PRIORITY + 4, NULL);
+}
+Std_ReturnType UartStartRecvFunc(uint8 channel)
+{
+    sint8 out = 0;
+    volatile Std_ReturnType R_Uart_Status = E_NOT_OK;
+    bufferIdx[channel] = 0;
+    memset(RX_Buffer[channel], 0x00, BUFFER_SIZE);
+    switch (channel)
+    {
+    case 0:
+        IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
+        break;
+    case 1:
+        IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
+        break;
+    case 2:
+        IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
+        break;
+    default:
+        break;
+    }
+    Uart_SetBuffer(channel, RX_Buffer[channel], DMA_SIZE, UART_RECEIVE);
+    R_Uart_Status = Uart_AsyncReceive(channel, RX_Buffer[channel], DMA_SIZE);
+    if (E_OK != R_Uart_Status)
+    {
+        Uart_Abort(channel, UART_RECEIVE);
+        out = E_NOT_OK;
+    }
+    return out;
+}
+void Uart_Hal_RecvTask(void *pvParameters)
+{
+    UartHalMsg_t UartHalMsgRecv;
+    UartMsg_t UartRecvMsg;
+    uint16 recvSize = 0;
+    BaseType_t ret = pdFALSE;
+    BaseType_t ret_send = pdFALSE;
+    uint32 T_bytesRemaining[3] = {0};
+    uint16 T_timeout[3] = {0};
+    volatile Uart_StatusType Uart_ReceiveStatus[3] = {UART_STATUS_TIMEOUT, UART_STATUS_TIMEOUT, UART_STATUS_TIMEOUT};
+    uint8 UartIdx = UART_LPUART0;
+    uint8 UartState[3] = {UartAbortRecv, UartAbortRecv, UartAbortRecv};
+    while (1)
     {
-        osStatus_t ret = osMessageQueueGet(uart0DataHandle, &UartData, 0, timeout);
-        if (ret == osOK)
+        if ((T_timeout[UartIdx] > 1000) && (Uart_ReceiveStatus[UartIdx] != UART_STATUS_NO_ERROR)) //判定UART�止,超时�止,�是接收状�则�止
         {
-            if (UartData.dataPtr != NULL)
+            Uart_Abort(UartIdx, UART_RECEIVE);
+            UartState[UartIdx] = UartAbortRecv;
+            T_timeout[UartIdx] = 0;
+        }
+        else if (Uart_ReceiveStatus[UartIdx] == UART_STATUS_NO_ERROR)
+        {
+            UartState[UartIdx] = UartRecvComplete;
+        }
+
+        if ((UartState[UartIdx] == UartAbortRecv) || (UartState[UartIdx] == UartRecvComplete)) //判定UART开始接收:UART�止�开始接收
+        {
+            if (E_OK == UartStartRecvFunc(UartIdx))
             {
-                memcpy(pRead, (UINT8 *)UartData.dataPtr, UartData.len);
-                free(UartData.dataPtr);
+                UartState[UartIdx] = UartStartRecv;
+            }
+        }
+        Uart_ReceiveStatus[UartIdx] = Uart_GetStatus(UartIdx, &T_bytesRemaining[UartIdx], UART_RECEIVE);
+        T_timeout[UartIdx]++;
+        UartIdx = (UartIdx + 1) > 2 ? 0 : (UartIdx + 1);
+        ret = xQueueReceive(UartHalQueueHandle, &UartHalMsgRecv, 1);
+        if (ret == pdTRUE)
+        {
+            if (UartHalMsgRecv.event == LPUART_UART_IP_EVENT_RECV_IDLE)
+            {
+                if (UartHalMsgRecv.value > 0)
+                {
+                    recvSize = write_ringBuffer(RX_Buffer[UartHalMsgRecv.Channel], UartHalMsgRecv.value, &uartRingBuffer[UartHalMsgRecv.Channel]);
+                    UartRecvMsg.DataLen = UartHalMsgRecv.value;
+                    UartRecvMsg.dataAddr = (uint32)(uartRingBuffer[UartHalMsgRecv.Channel].bw + uartRingBuffer[UartHalMsgRecv.Channel].source - UartHalMsgRecv.value);
+                    ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel], &UartRecvMsg, 10);
+                }
+                T_timeout[UartHalMsgRecv.Channel] = 0;
+                UartState[UartHalMsgRecv.Channel] = UartRecvComplete;
+            }
+        }
+    }
+}
+void Uart_Hal_SendTask(void *pvParameters)
+{
+    UartMsg_t UartSendMsg;
+    BaseType_t ret = pdFALSE;
+    uint32 T_bytesRemaining[3] = {0};
+    uint16 T_timeout[3] = {0};
+    volatile Std_ReturnType T_Uart_Status[3];
+    uint8 UartIdx = UART_LPUART0;
+    uint8 UartSendState[3] = {UartNoDataSend, UartNoDataSend, UartNoDataSend};
+    while (1)
+    {
+        ret = xQueueReceive(UartSendQueue[UartIdx], &UartSendMsg, 1);
+        if (ret == pdTRUE)
+        {
+
+            T_Uart_Status[UartIdx] = Uart_AsyncSend(UartIdx, UartSendMsg.dataPtr, UartSendMsg.DataLen);
+            if (E_OK != T_Uart_Status[UartIdx])
+            {
+                Uart_Abort(UartIdx, UART_SEND);
+                UartSendState[UartIdx] = UartAbortSend;
+            }
+            else
+            {
+                UartSendState[UartIdx] = UartStartSend;
+            }
+        }
+        /*开始���的判定*/
+        if (UartSendState[UartIdx] == UartStartSend)
+        {
+            Uart_TransmitStatus[UartIdx] = Uart_GetStatus(UartIdx, &T_bytesRemaining[UartIdx], UART_SEND);
+            T_timeout[UartIdx]++;
+        }
+        if (T_timeout[UartIdx] >= 1000 || ((Uart_TransmitStatus[UartIdx] != UART_STATUS_OPERATION_ONGOING) && (UartSendState[UartIdx] == UartStartSend)))
+        {
+            if (T_timeout[UartIdx] >= 1000)
+            {
+                Uart_Abort(UartIdx, UART_SEND);
+                UartSendState[UartIdx] = UartAbortSend;
+            }
+            else if (Uart_TransmitStatus[UartIdx] == UART_STATUS_NO_ERROR)
+            {
+                UartSendState[UartIdx] = UartSendComplete;
+            }
+            T_timeout[UartIdx] = 0;
+        }
+
+        UartIdx = (UartIdx + 1) > 2 ? 0 : (UartIdx + 1);
+    }
+}
+extern Lpuart_Uart_Ip_StateStructureType *Lpuart_Uart_Ip_apStateStructuresArray[LPUART_UART_IP_NUMBER_OF_INSTANCES];
+void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event)
+{
+    //    (void)userData;
+    Lpuart_Uart_Ip_StateStructureType *UartState;
+    UartState = (Lpuart_Uart_Ip_StateStructureType *)Lpuart_Uart_Ip_apStateStructuresArray[hwInstance];
+
+    /* Check the event type */
+    if (event == LPUART_UART_IP_EVENT_RX_FULL)
+    {
+        /* The reception stops when receiving idle is detected or the buffer is full */
+        if (bufferIdx[hwInstance] <= (BUFFER_SIZE - DMA_SIZE))
+        {
+            /* Update the buffer index and the rx buffer */
+            bufferIdx[hwInstance] += DMA_SIZE;
+            Uart_SetBuffer(hwInstance, &RX_Buffer[hwInstance][bufferIdx[hwInstance]], DMA_SIZE, UART_RECEIVE);
+            // Lpuart_Uart_Ip_SetRxBuffer(hwInstance, &RX_Buffer[bufferIdx], DMA_SIZE);
+        }
+    }
+    if (event == LPUART_UART_IP_EVENT_ERROR)
+    {
+        //     	/*Get the transfered data size. DMA Channel 1 is used for LPUART DMA receiving, please modify accordingly.*/
+        //     	temp = DMA_SIZE - (uint32_t)IP_DMA->TCD->CITER.ELINKNO;
+        //     	/*Add the remaining data size to the sum of the received size*/
+        //     	bufferIdx[hwInstance] += temp;
+        /*Abort the receiving after detecting IDLE receiving*/
+        Lpuart_Uart_Ip_AbortReceivingData(hwInstance);
+        Lpuart_Uart_Ip_AbortSendingData(hwInstance);
+        //    	bufferIdx = 0;
+    }
+    if (event == LPUART_UART_IP_EVENT_RECV_IDLE)
+    {
+        uint32_t temp;
+        UartHalMsg_t UartHalMsg;
+        UartHalMsg.Channel = hwInstance;
+        UartHalMsg.event = event;
+        /*Get the transfered data size. DMA Channel 1 is used for LPUART DMA receiving, please modify accordingly.*/
+        temp = DMA_SIZE - (uint32_t)IP_DMA->TCD[hwInstance].CITER.ELINKNO;
+        /*Add the remaining data size to the sum of the received size*/
+        bufferIdx[hwInstance] += temp;
+        /*Abort the receiving after detecting IDLE receiving*/
+        UartHalMsg.value = bufferIdx[hwInstance];
+        xQueueSendFromISR(UartHalQueueHandle, &UartHalMsg, pdFALSE);
+    }
+}
+
+/*CAN*/
+Can_PduType Can_CreatePduInfo(Can_IdType id, CAN_IdFrameType idFrame, PduIdType swPduHandle, uint8 length, uint8 *sdu)
+{
+    Can_PduType PduInfo;
+    switch (idFrame)
+    {
+    case CAN_STANDARD_ID_TYPE:
+        id = id & 0x7FF;
+        break;
+    case CANFD_STANDARD_ID_TYPE:
+        id = (id & 0x7FF) | 0x40000000;
+        break;
+    case CAN_EXTENDED_ID_TYPE:
+        id = id | 0x80000000;
+        break;
+    case CANFD_EXTENDED_ID_TYPE:
+        id = id | 0xC0000000;
+        break;
+    default:
+        id = id & 0x7FF;
+        break;
+    }
+    PduInfo.id = id;
+    PduInfo.swPduHandle = swPduHandle;
+    PduInfo.length = length;
+    PduInfo.sdu = sdu;
+    return PduInfo;
+}
+Std_ReturnType CanIf_SendMessage(uint8 ControllerId, Can_Msg_Type CanMsg)
+{
+    volatile Can_PduType Can_PduInfo;
+    volatile Std_ReturnType CAN_Write_Status;
+    Std_ReturnType retVal = E_NOT_OK;
+    uint32 u8TimeOut = 100 * 100;
+    Can_HwHandleType Hth = Can0HardwareObject_TX + (Can_HwHandleType)ControllerId; // controller 0 --> Can0HardwareObject_TX
+
+    Can_PduInfo = Can_CreatePduInfo(CanMsg.id, CanMsg.idFrame, 0, CanMsg.length, CanMsg.sdu);
+
+    CAN_Write_Status = Can_Write(Hth, &Can_PduInfo);
+
+    CanIf_bTxFlag = FALSE;
+    if (CAN_Write_Status == E_OK)
+    {
+        while ((!CanIf_bTxFlag) && (u8TimeOut != 0U))
+        {
+            Can_MainFunction_Write();
+            u8TimeOut--;
+        }
+    }
+
+    if (CanIf_bTxFlag == TRUE)
+    {
+        retVal = E_OK;
+    }
+    else
+    {
+        retVal = E_NOT_OK;
+    }
+    return retVal;
+}
+Can_Msg_Type Can_GetMsgInfo(Can_IdType id, uint8 length, uint8 *sdu)
+{
+    Can_Msg_Type CanMsgInfo;
+
+    CanMsgInfo.idFrame = (CAN_IdFrameType)((id >> 30) & 0x03);
+    if (CanMsgInfo.idFrame & 0x01)
+    {
+        CanMsgInfo.id = id & 0x7FF;
+    }
+    else
+    {
+        CanMsgInfo.id = id & 0x1FFFFFFF;
+    }
+    CanMsgInfo.length = length;
+    CanMsgInfo.sdu = sdu;
+
+    return CanMsgInfo;
+}
+
+void CanIf_ControllerBusOff(uint8 ControllerId)
+{
+    (void)ControllerId;
+}
+
+void CanIf_ControllerModeIndication(uint8 ControllerId, Can_ControllerStateType ControllerMode)
+{
+    (void)ControllerId;
+    (void)ControllerMode;
+}
+void CanIf_TxConfirmation(PduIdType CanTxPduId)
+{
+    CanIf_u8TxConfirmCnt++;
+    CanIf_bTxFlag = TRUE;
+    (void)CanTxPduId;
+}
+void CanIf_RxIndication(const Can_HwType *Mailbox, const PduInfoType *PduInfoPtr)
+{
+    Can_Msg_Type canRxMsg_Buff;
+    Can_Msg_Type_Data canRxMsgQueueData;
+    CanIf_bRxFlag = TRUE; // should not be delete
+    // should put the msg into message queue
+    canRxMsg_Buff = Can_GetMsgInfo(Mailbox->CanId, PduInfoPtr->SduLength, PduInfoPtr->SduDataPtr);
+    canRxMsgQueueData.id = canRxMsg_Buff.id;
+    canRxMsgQueueData.length = canRxMsg_Buff.length;
+    memcpy(canRxMsgQueueData.data, canRxMsg_Buff.sdu, canRxMsgQueueData.length);
+    xQueueSend(CanRecvQueueHandle, &canRxMsgQueueData, 0);
+}
+
+void CanIf_CurrentIcomConfiguration(uint8 ControllerId, IcomConfigIdType ConfigurationId, IcomSwitch_ErrorType Error)
+{
+    (void)ControllerId;
+    (void)ConfigurationId;
+    (void)Error;
+}
+
+/*EEP*/
+static Std_ReturnType TestEep_FlexNvmProgramPartCmd(
+    VAR(TestEep_CsecKeySize, AUTOMATIC) eepKeysize,
+    VAR(TestEep_SfeType, AUTOMATIC) eepSecurityFlagExtension,
+    VAR(TestEep_LoadFlexRamType, AUTOMATIC) eepLoadFlexRamAtReset,
+    VAR(TestEep_Eeprom_FlexRamPartitionType, AUTOMATIC) eepFlexRamPartition,
+    VAR(TestEep_Eeprom_FlexNvmPartitionType, AUTOMATIC) eepFlexNvmPartition)
+{
+    Std_ReturnType u8RetVal = (Std_ReturnType)E_OK;
+    uint32 u32FlexNvmPartSize = 0;
+
+    uint32 u32RegSimFcfg1 = 0UL;
+
+    u32RegSimFcfg1 = IP_SIM->FCFG1;
+
+    /*get DEPART value */
+    u32FlexNvmPartSize = (uint32)((u32RegSimFcfg1 & SIM_FCFG1_DEPART_MASK) >> SIM_FCFG1_DEPART_SHIFT);
+
+    /* check that it was not partitioned before */
+    if (u32FlexNvmPartSize == 0xF)
+    {
+        //         /* if error flags are set the cmd is not executed */
+        //         REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8);
+        //
+        //         /*erase DF 0 sector*/
+        //         u32Addr=(TEST_EEP_DEEPROM_SECTOR_0_ADDR32 - D_EEPROM_BASE_ADDR) + 0x800000UL;
+        //
+        //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB0_ADDR32, TEST_EEP_EEPROM_CMD_ERASE_SECTOR);
+        //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB1_ADDR32, (uint8)(u32Addr >> 16UL));
+        //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB2_ADDR32, (uint8)(u32Addr >> 8UL));
+        //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB3_ADDR32, (uint8)(u32Addr >> 0UL));
+        //         REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32 , TEST_EEP_EEPROM_FSTAT_CCIF_U8);
+        //         while((0U == REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_CCIF_U8)))
+        //         {
+        //         }
+        //
+        if (0U == REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8))
+        {
+            /* run program partition command */
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB0_ADDR32, EEPROM_CMD_PROGRAM_PARTITION);
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB1_ADDR32, (uint8)eepKeysize);
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB2_ADDR32, (uint8)eepSecurityFlagExtension);
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB3_ADDR32, (uint8)eepLoadFlexRamAtReset);
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB4_ADDR32, (uint8)eepFlexRamPartition);
+            REG_WRITE8(TEST_EEP_EEPROM_FCCOB5_ADDR32, (uint8)eepFlexNvmPartition);
+            REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_CCIF_U8);
+            while ((0U == REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_CCIF_U8)))
+            {
+                /* wait for operation to finish */
+            }
+            /* check if errors occured  */
+            if (REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8))
+            {
+                /* NOK, error flags are set */
+                u8RetVal = (Std_ReturnType)E_NOT_OK;
             }
-            UartData.dataPtr = NULL;
-            ReadLen = UartData.len;
         }
         else
         {
-            osDelayUntil(1000);
-            osMessageQueueReset(uart0DataHandle);
-            memset(pRead, 0x00, readLen);
-            ReadLen = 0;
+            /* NOK, error flags are set */
+            u8RetVal = (Std_ReturnType)E_NOT_OK;
         }
     }
-    return ReadLen;
+    else
+    {
+        /* NOK, partitioned already */
+        u8RetVal = (Std_ReturnType)E_NOT_OK;
+    }
+    return u8RetVal;
+}
+
+void Eep_DepartParitition(TestEep_Eeprom_FlexNvmPartitionType T_EEP_SIZE)
+{
+    uint32 u32FlexNvmPartSize = 0;
+
+    uint32 u32RegSimFcfg1 = 0UL;
+
+    u32RegSimFcfg1 = IP_SIM->FCFG1;
+
+    /*get DEPART value */
+    u32FlexNvmPartSize = (uint32)((u32RegSimFcfg1 & SIM_FCFG1_DEPART_MASK) >> SIM_FCFG1_DEPART_SHIFT);
+    if (u32FlexNvmPartSize == 0xF) /* We just partition again if curent size different with expected */
+    {
+        /* partition for EERAM 64K with NOT loading EERAM at reset in hardware */
+        TestEep_FlexNvmProgramPartCmd(EEP_FTFC_KEY_SIZE_0_BYTES, EEP_FTFC_VERIFY_ONLY_DISABLED,
+                                      EEP_FTFC_LOAD_AT_RESET_ENABLED, EEP_FTFC_EERAM_SIZE_4K, T_EEP_SIZE);
+    }
+}
+/* Erase memory by writing erase value */
+Std_ReturnType HAL_EEP_Erase(uint32 eepEraseStartAddr, uint32 eepEraseSize)
+{
+    Std_ReturnType retReturnType = E_OK;
+    MemIf_JobResultType retJobResultType;
+    retReturnType = Eep_Erase(eepEraseStartAddr, eepEraseSize);
+    if (E_OK != retReturnType)
+    {
+        return E_NOT_OK;
+    }
+    while (MEMIF_IDLE != Eep_GetStatus())
+    {
+        Eep_MainFunction();
+    }
+    retJobResultType = Eep_GetJobResult();
+    if (MEMIF_JOB_OK != retJobResultType)
+    {
+        return E_NOT_OK;
+    }
+    return E_OK;
+}
+
+/* Write one or more complete eeprom pages to the eeprom device */
+Std_ReturnType HAL_EEP_Write(uint32 eepWriteStartAddr, uint8 *pDataNeedtoWrite, uint32 dataSize)
+{
+    Std_ReturnType retReturnType = E_OK;
+    MemIf_JobResultType retJobResultType;
+
+    /*Erase the EEP before write*/
+    retReturnType = HAL_EEP_Erase(eepWriteStartAddr, dataSize);
+    if (E_OK != retReturnType)
+    {
+        return E_NOT_OK;
+    }
+
+    retReturnType = Eep_Write(eepWriteStartAddr, pDataNeedtoWrite, dataSize);
+    if (E_OK != retReturnType)
+    {
+        return E_NOT_OK;
+    }
+    while (MEMIF_IDLE != Eep_GetStatus())
+    {
+        Eep_MainFunction();
+    }
+    retJobResultType = Eep_GetJobResult();
+    if (MEMIF_JOB_OK != retJobResultType)
+    {
+        return E_NOT_OK;
+    }
+    return E_OK;
+}
+
+/* Reads from eeprom memory */
+Std_ReturnType HAL_EEP_Read(uint32 eepReadStartAddr, uint8 *pDataBuffer, uint32 dataSize)
+{
+    Std_ReturnType retReturnType = E_OK;
+    MemIf_JobResultType retJobResultType;
+    retReturnType = Eep_Read(eepReadStartAddr, pDataBuffer, dataSize);
+    if (E_OK != retReturnType)
+    {
+        return E_NOT_OK;
+    }
+    while (MEMIF_IDLE != Eep_GetStatus())
+    {
+        Eep_MainFunction();
+    }
+    retJobResultType = Eep_GetJobResult();
+    if (MEMIF_JOB_OK != retJobResultType)
+    {
+        return E_NOT_OK;
+    }
+    return E_OK;
 }
-*/
- uint8_t __attribute__((section(".non_cacheable_data"))) RX_Buffer[UART_CH_MAX_CONFIG][BUFFER_SIZE];
- uint32_t bufferIdx[3] = {0};
- Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 *rxBuffer, uint16 *rxlen,uint32 T_timeout)
- {
-     volatile Std_ReturnType R_Uart_Status;
-     volatile Std_ReturnType T_Uart_Status;
-     volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
-     volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
-     uint32 T_bytesRemaining;
-     uint32 R_bytesRemaining;
-     uint32 timeout = T_timeout;
-     uint32 retVal = E_NOT_OK;
-     //    uint8 Rx_Buffer[MSG_LEN];
-
-     /* Uart_AsyncReceive transmit data */
- //    IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(0);
-     bufferIdx[recvChannel]=0;
- 	switch(recvChannel)
- 	{
- 	case 0:
- 		IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
- 		break;
- 	case 1:
- 		IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
- 		break;
- 	case 2:
- 		IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
- 		break;
- 	default:
- 		break;
- 	}
- if (txBuffer == NULL || rxBuffer == NULL)
- {
-     return retVal;
- }
- /* Uart_AsyncSend transmit data */
- Uart_SetBuffer(transChannel, txBuffer, sendLength, UART_SEND);
- T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
- if (E_OK != T_Uart_Status)
- {
-     Uart_Abort(transChannel, UART_SEND);
-     return E_NOT_OK;
- }
- Uart_SetBuffer(recvChannel, &RX_Buffer[recvChannel][0], DMA_SIZE, UART_RECEIVE);
- R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
- if (E_OK != R_Uart_Status)
- {
-     Uart_Abort(recvChannel, UART_RECEIVE);
-     return E_NOT_OK;
- }
-
- /* Check for no on-going transmission */
- do
- {
-	 if(Uart_TransmitStatus != UART_STATUS_NO_ERROR)
-	 {
-		 Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
-	 }
-	 if(Uart_ReceiveStatus != UART_STATUS_NO_ERROR)
-	 {
-		 Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &R_bytesRemaining, UART_RECEIVE);
-	 }
-     vTaskDelay(pdMS_TO_TICKS(1));
- } while (((UART_STATUS_NO_ERROR != Uart_TransmitStatus || UART_STATUS_NO_ERROR != Uart_ReceiveStatus) && 0 < --timeout));
-
- if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
- {
-     Uart_Abort(transChannel, UART_SEND);
-     retVal = E_NOT_OK;
- }
- else
- {
-     retVal = E_OK;
- }
- if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
- {
-     Uart_Abort(recvChannel, UART_RECEIVE);
-     *rxlen = bufferIdx[recvChannel];
-     //IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
-     retVal = E_NOT_OK;
- }
- else
- {
-	 *rxlen = bufferIdx[recvChannel];
-     retVal = E_OK;
- }
- return retVal;
- }
-
- Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout)
- {
-
-     volatile Std_ReturnType T_Uart_Status;
-     volatile Uart_StatusType Uart_TransmitStatus = UART_STATUS_TIMEOUT;
-     uint32 T_bytesRemaining;
-     uint32 timeout = T_timeout;
-     uint32 retVal = E_NOT_OK;
-     //    uint8 Rx_Buffer[MSG_LEN];
-
-     if (txBuffer == NULL)
-     {
-         return retVal;
-     }
-
-     /* Uart_AsyncSend transmit data */
-//     Uart_SetBuffer(transChannel, txBuffer, sendLength, UART_SEND);
-     T_Uart_Status = Uart_AsyncSend(transChannel, txBuffer, sendLength);
-     if (E_OK != T_Uart_Status)
-     {
-         Uart_Abort(transChannel, UART_SEND);
-         return E_NOT_OK;
-     }
-
-     /* Check for no on-going transmission */
-     do
-     {
-         Uart_TransmitStatus = Uart_GetStatus(transChannel, &T_bytesRemaining, UART_SEND);
-         vTaskDelay(pdMS_TO_TICKS(1));
-     } while ((UART_STATUS_NO_ERROR != Uart_TransmitStatus && 0 < --timeout));
-
-     if ((UART_STATUS_NO_ERROR != Uart_TransmitStatus))
-     {
-         //Uart_Abort(transChannel, UART_SEND);
-         retVal = E_NOT_OK;
-     }
-     else
-     {
-         retVal = E_OK;
-     }
-     return retVal;
- }
-
- Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint16 *rxlen,sint32 T_timeout)
- {
-     volatile Std_ReturnType R_Uart_Status=E_NOT_OK;
-     volatile Uart_StatusType Uart_ReceiveStatus = UART_STATUS_TIMEOUT;
-     uint32 T_bytesRemaining = 0;
-     uint32 retVal = E_NOT_OK;
-     //    uint8 Rx_Buffer[MSG_LEN];
-     bufferIdx[recvChannel]=0;
-     *rxlen = 0;
-     if (rxBuffer == NULL)
-     {
-         return retVal;
-     }
-     /* Uart_AsyncReceive transmit data */
-	switch(recvChannel)
-	{
-		case 0:
-			IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
-			break;
-		case 1:
-			IP_LPUART1->CTRL |= LPUART_CTRL_ILIE(1);
-			break;
-		case 2:
-			IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
-			break;
-		default:
-			break;
-	}
-     Uart_SetBuffer(recvChannel, rxBuffer, DMA_SIZE, UART_RECEIVE);
-     R_Uart_Status = Uart_AsyncReceive(recvChannel, rxBuffer, DMA_SIZE);
-     if (E_OK != R_Uart_Status)
-     {
-         Uart_Abort(recvChannel, UART_RECEIVE);
-         return E_NOT_OK;
-     }
-     /* Check for no on-going transmission */
-     do
-     {
-         Uart_ReceiveStatus = Uart_GetStatus(recvChannel, &T_bytesRemaining, UART_RECEIVE);
-         vTaskDelay(pdMS_TO_TICKS(1));
-     } while ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus)&& 0<T_timeout--);
-     if ((UART_STATUS_NO_ERROR != Uart_ReceiveStatus))
-     {
-         Uart_Abort(recvChannel, UART_RECEIVE);
-         *rxlen = bufferIdx[recvChannel];
-         retVal = E_NOT_OK;
-     }
-     else
-     {
-    	 *rxlen = bufferIdx[recvChannel];
-         retVal = E_OK;
-     }
-     return retVal;
- }
- void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event )
- {
- //    (void)userData;
-     uint32_t temp;
-     /* Check the event type */
-     if (event == LPUART_UART_IP_EVENT_RX_FULL)
-     {
-         /* The reception stops when receiving idle is detected or the buffer is full */
-         if (bufferIdx[hwInstance] <= (BUFFER_SIZE - DMA_SIZE))
-         {
-             /* Update the buffer index and the rx buffer */
-        	 bufferIdx[hwInstance] += DMA_SIZE;
-         	Uart_SetBuffer(hwInstance,&RX_Buffer[hwInstance][bufferIdx[hwInstance]],DMA_SIZE,UART_RECEIVE);
-             //Lpuart_Uart_Ip_SetRxBuffer(hwInstance, &RX_Buffer[bufferIdx], DMA_SIZE);
-         }
-     }
-     else if (event == LPUART_UART_IP_EVENT_ERROR)
-     {
-//     	/*Get the transfered data size. DMA Channel 1 is used for LPUART DMA receiving, please modify accordingly.*/
-//     	temp = DMA_SIZE - (uint32_t)IP_DMA->TCD->CITER.ELINKNO;
-//     	/*Add the remaining data size to the sum of the received size*/
-//     	bufferIdx[hwInstance] += temp;
-         /*Abort the receiving after detecting IDLE receiving*/
-     	Lpuart_Uart_Ip_AbortReceivingData(hwInstance);
- //    	bufferIdx = 0;
-     }
-     else if( event == LPUART_UART_IP_EVENT_RECV_IDLE)
-     {
-     	/*Get the transfered data size. DMA Channel 1 is used for LPUART DMA receiving, please modify accordingly.*/
- 		temp = DMA_SIZE - (uint32_t)IP_DMA->TCD[hwInstance].CITER.ELINKNO;
- 		/*Add the remaining data size to the sum of the received size*/
- 		bufferIdx[hwInstance] += temp;
- 		/*Abort the receiving after detecting IDLE receiving*/
- 		Lpuart_Uart_Ip_AbortReceivingData(hwInstance);
- //		rxSuccess = true;
-     }
-     else
-     {
-    	 temp = 0;
-     }
- }
-
- /*CAN*/
- Can_PduType Can_CreatePduInfo(Can_IdType id, CAN_IdFrameType idFrame, PduIdType swPduHandle, uint8 length, uint8 *sdu)
- {
-     Can_PduType PduInfo;
-     switch (idFrame)
-     {
-     case CAN_STANDARD_ID_TYPE:
-         id = id & 0x7FF;
-         break;
-     case CANFD_STANDARD_ID_TYPE:
-         id = (id & 0x7FF) | 0x40000000;
-         break;
-     case CAN_EXTENDED_ID_TYPE:
-         id = id | 0x80000000;
-         break;
-     case CANFD_EXTENDED_ID_TYPE:
-         id = id | 0xC0000000;
-         break;
-     default:
-         id = id & 0x7FF;
-         break;
-     }
-     PduInfo.id = id;
-     PduInfo.swPduHandle = swPduHandle;
-     PduInfo.length = length;
-     PduInfo.sdu = sdu;
-
-     return PduInfo;
- }
- Std_ReturnType CanIf_SendMessage(uint8 ControllerId, Can_Msg_Type CanMsg)
- {
-     volatile Can_PduType Can_PduInfo;
-     volatile Std_ReturnType CAN_Write_Status;
-     Std_ReturnType retVal = E_NOT_OK;
-     uint32 u8TimeOut = 100*100;
-     Can_HwHandleType Hth = Can0HardwareObject_TX + (Can_HwHandleType)ControllerId; // controller 0 --> Can0HardwareObject_TX
-
-     Can_PduInfo = Can_CreatePduInfo(CanMsg.id, CanMsg.idFrame, 0, CanMsg.length, CanMsg.sdu);
-
-     CAN_Write_Status = Can_Write(Hth, &Can_PduInfo);
-
-     CanIf_bTxFlag = FALSE;
-     if (CAN_Write_Status == E_OK)
-     {
-         while ((!CanIf_bTxFlag) && (u8TimeOut != 0U))
-         {
-             Can_MainFunction_Write();
-             u8TimeOut--;
-         }
-     }
-
-     if (CanIf_bTxFlag == TRUE)
-     {
-         retVal = E_OK;
-     }
-     else
-     {
-         retVal = E_NOT_OK;
-     }
-     return retVal;
- }
- Can_Msg_Type Can_GetMsgInfo(Can_IdType id, uint8 length, uint8 *sdu)
- {
-     Can_Msg_Type CanMsgInfo;
-
-     CanMsgInfo.idFrame = (CAN_IdFrameType)((id >> 30) & 0x03);
-     if (CanMsgInfo.idFrame & 0x01)
-     {
-         CanMsgInfo.id = id & 0x7FF;
-     }
-     else
-     {
-         CanMsgInfo.id = id & 0x1FFFFFFF;
-     }
-     CanMsgInfo.length = length;
-     CanMsgInfo.sdu = sdu;
-
-     return CanMsgInfo;
- }
-
- void CanIf_ControllerBusOff(uint8 ControllerId)
- {
-     (void)ControllerId;
- }
-
- void CanIf_ControllerModeIndication(uint8 ControllerId, Can_ControllerStateType ControllerMode)
- {
-     (void)ControllerId;
-     (void)ControllerMode;
- }
- void CanIf_TxConfirmation(PduIdType CanTxPduId)
- {
-     CanIf_u8TxConfirmCnt++;
-     CanIf_bTxFlag = TRUE;
-     (void)CanTxPduId;
- }
-
- uint32 canrxcounter = 0;
- void CanIf_RxIndication(const Can_HwType *Mailbox, const PduInfoType *PduInfoPtr)
- {
-	 static portBASE_TYPE xHigherPriorityTaskWoken;
-	 xHigherPriorityTaskWoken = pdFALSE;
-	 Can_Msg_Type canRxMsg_Buff;
-     CanIf_bRxFlag = TRUE; // should not be delete
-     // should put the msg into message queue
-     canRxMsg_Buff = Can_GetMsgInfo(Mailbox->CanId, PduInfoPtr->SduLength, PduInfoPtr->SduDataPtr);
-//    xQueueSendFromISR(CanRecvQueueHandle,&canRxMsg_Buff,&xHigherPriorityTaskWoken);
-     Can_Msg_Type_Data Can_Msg_Data;
-     Can_Msg_Data.id = canRxMsg_Buff.id;
-     Can_Msg_Data.length = canRxMsg_Buff.length;
-     memcpy(Can_Msg_Data.data,canRxMsg_Buff.sdu,Can_Msg_Data.length);
-     xQueueSend(CanRecvQueueHandle,&Can_Msg_Data,0);
-	 canrxcounter++;
- }
-
- void CanIf_CurrentIcomConfiguration(uint8 ControllerId, IcomConfigIdType ConfigurationId, IcomSwitch_ErrorType Error)
- {
-     (void)ControllerId;
-     (void)ConfigurationId;
-     (void)Error;
- }
-
-
- /*EEP*/
-  static Std_ReturnType TestEep_FlexNvmProgramPartCmd
-  (
-      VAR(TestEep_CsecKeySize, AUTOMATIC) eepKeysize,
-      VAR(TestEep_SfeType, AUTOMATIC) eepSecurityFlagExtension,
-      VAR(TestEep_LoadFlexRamType, AUTOMATIC) eepLoadFlexRamAtReset,
-      VAR(TestEep_Eeprom_FlexRamPartitionType, AUTOMATIC) eepFlexRamPartition,
-      VAR(TestEep_Eeprom_FlexNvmPartitionType, AUTOMATIC) eepFlexNvmPartition
-  )
-  {
-       Std_ReturnType u8RetVal = (Std_ReturnType)E_OK;
-       uint32 u32Addr=0;
-       uint32 u32FlexNvmPartSize = 0;
-
-      uint32 u32RegSimFcfg1      = 0UL;
-
-      u32RegSimFcfg1 = IP_SIM->FCFG1;
-
-      /*get DEPART value */
-      u32FlexNvmPartSize = (uint32)( (u32RegSimFcfg1 & SIM_FCFG1_DEPART_MASK) >> SIM_FCFG1_DEPART_SHIFT );
-
-      /* check that it was not partitioned before */
-      if (u32FlexNvmPartSize == 0xF)
-      {
- //         /* if error flags are set the cmd is not executed */
- //         REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8);
- //
- //         /*erase DF 0 sector*/
- //         u32Addr=(TEST_EEP_DEEPROM_SECTOR_0_ADDR32 - D_EEPROM_BASE_ADDR) + 0x800000UL;
- //
- //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB0_ADDR32, TEST_EEP_EEPROM_CMD_ERASE_SECTOR);
- //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB1_ADDR32, (uint8)(u32Addr >> 16UL));
- //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB2_ADDR32, (uint8)(u32Addr >> 8UL));
- //         REG_WRITE8(TEST_EEP_EEPROM_FCCOB3_ADDR32, (uint8)(u32Addr >> 0UL));
- //         REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32 , TEST_EEP_EEPROM_FSTAT_CCIF_U8);
- //         while((0U == REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_CCIF_U8)))
- //         {
- //         }
- //
-          if(0U==REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32,TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8))
-          {
-              /* run program partition command */
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB0_ADDR32,EEPROM_CMD_PROGRAM_PARTITION);
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB1_ADDR32, (uint8)eepKeysize);
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB2_ADDR32, (uint8)eepSecurityFlagExtension);
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB3_ADDR32, (uint8)eepLoadFlexRamAtReset);
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB4_ADDR32, (uint8)eepFlexRamPartition);
-              REG_WRITE8(TEST_EEP_EEPROM_FCCOB5_ADDR32, (uint8)eepFlexNvmPartition);
-              REG_WRITE8(TEST_EEP_EEPROM_FSTAT_ADDR32 , TEST_EEP_EEPROM_FSTAT_CCIF_U8);
-              while((0U == REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32, TEST_EEP_EEPROM_FSTAT_CCIF_U8)))
-              {
-              /* wait for operation to finish */
-              }
-              /* check if errors occured  */
-              if(REG_BIT_GET8(TEST_EEP_EEPROM_FSTAT_ADDR32,TEST_EEP_EEPROM_FSTAT_ACCERR_U8 | TEST_EEP_EEPROM_FSTAT_FPVIOL_U8))
-              {
-                  /* NOK, error flags are set */
-                  u8RetVal = (Std_ReturnType)E_NOT_OK;
-              }
-          }
-          else
-          {
-              /* NOK, error flags are set */
-              u8RetVal = (Std_ReturnType)E_NOT_OK;
-          }
-      }
-      else
-      {
-          /* NOK, partitioned already */
-          u8RetVal = (Std_ReturnType)E_NOT_OK;
-      }
-      return u8RetVal;
-  }
-
-  void Eep_DepartParitition(TestEep_Eeprom_FlexNvmPartitionType T_EEP_SIZE)
-  {
-      uint32 u32FlexNvmPartSize = 0;
-
-      uint32 u32RegSimFcfg1      = 0UL;
-
-      u32RegSimFcfg1 = IP_SIM->FCFG1;
-
-      /*get DEPART value */
-      u32FlexNvmPartSize = (uint32)( (u32RegSimFcfg1 & SIM_FCFG1_DEPART_MASK) >> SIM_FCFG1_DEPART_SHIFT );
-      if (u32FlexNvmPartSize == 0xF) /* We just partition again if curent size different with expected */
-      {
-
-          /* partition for EERAM 64K with NOT loading EERAM at reset in hardware */
-          TestEep_FlexNvmProgramPartCmd(EEP_FTFC_KEY_SIZE_0_BYTES, EEP_FTFC_VERIFY_ONLY_DISABLED, \
-                                                 EEP_FTFC_LOAD_AT_RESET_ENABLED, EEP_FTFC_EERAM_SIZE_4K, T_EEP_SIZE);
-      }
-
-  }
-
-
-  /* Erase memory by writing erase value */
-  Std_ReturnType HAL_EEP_Erase(uint32 eepEraseStartAddr,uint32 eepEraseSize)
-  {
- 	 Std_ReturnType retReturnType = E_OK;
- 	 MemIf_JobResultType retJobResultType;
-      retReturnType = Eep_Erase(eepEraseStartAddr, eepEraseSize);
-      if(E_OK != retReturnType)
-      {
-          return E_NOT_OK;
-      }
-      while(MEMIF_IDLE != Eep_GetStatus())
-      {
-          Eep_MainFunction();
-      }
-      retJobResultType = Eep_GetJobResult();
-      if(MEMIF_JOB_OK != retJobResultType)
-      {
-          return E_NOT_OK;
-      }
-      return E_OK;
-  }
-
-   /* Write one or more complete eeprom pages to the eeprom device */
-   Std_ReturnType HAL_EEP_Write(uint32 eepWriteStartAddr,uint8* pDataNeedtoWrite,uint32 dataSize)
-   {
- 	  Std_ReturnType retReturnType = E_OK;
- 	  MemIf_JobResultType retJobResultType;
-
- 	  /*Erase the EEP before write*/
- 	  retReturnType = HAL_EEP_Erase(eepWriteStartAddr,dataSize);
- 	  if(E_OK != retReturnType)
- 	  {
- 		  return E_NOT_OK;
- 	  }
-
-       retReturnType = Eep_Write(eepWriteStartAddr, pDataNeedtoWrite, dataSize);
-       if(E_OK != retReturnType)
-       {
-           return E_NOT_OK;
-       }
-       while(MEMIF_IDLE != Eep_GetStatus())
-       {
-           Eep_MainFunction();
-       }
-       retJobResultType = Eep_GetJobResult();
-       if(MEMIF_JOB_OK != retJobResultType)
-       {
-           return E_NOT_OK;
-       }
-       return E_OK;
-   }
-
-
-  /* Reads from eeprom memory */
-  Std_ReturnType HAL_EEP_Read(uint32 eepReadStartAddr,uint8* pDataBuffer,uint32 dataSize)
-  {
- 	 Std_ReturnType retReturnType = E_OK;
- 	 MemIf_JobResultType retJobResultType;
-      retReturnType = Eep_Read(eepReadStartAddr, pDataBuffer, dataSize);
-      if(E_OK != retReturnType)
-      {
-          return E_NOT_OK;
-      }
-      while(MEMIF_IDLE != Eep_GetStatus())
-      {
-          Eep_MainFunction();
-      }
-      retJobResultType = Eep_GetJobResult();
-      if(MEMIF_JOB_OK != retJobResultType)
-      {
-          return E_NOT_OK;
-      }
-      return E_OK;
-  }
-
-
-
-
-  /* Compares a eeprom memory area with an application data buffer */
-  Std_ReturnType HAL_EEP_Compare(uint32 eepCompareStartAddr,uint8* pDataNeedtoCompare,uint32 dataSize)
-  {
- 	 Std_ReturnType retReturnType = E_OK;
- 	 MemIf_JobResultType retJobResultType;
- 	 retReturnType = Eep_Compare(eepCompareStartAddr, pDataNeedtoCompare, dataSize);
-      if(E_OK != retReturnType)
-      {
-          return E_NOT_OK;
-      }
-      while(MEMIF_IDLE != Eep_GetStatus())
-      {
-          Eep_MainFunction();
-      }
-      retJobResultType = Eep_GetJobResult();
-      if(MEMIF_JOB_OK != retJobResultType)
-      {
-          return E_NOT_OK;
-      }
-      return E_OK;
-  }
 
+/* Compares a eeprom memory area with an application data buffer */
+Std_ReturnType HAL_EEP_Compare(uint32 eepCompareStartAddr, uint8 *pDataNeedtoCompare, uint32 dataSize)
+{
+    Std_ReturnType retReturnType = E_OK;
+    MemIf_JobResultType retJobResultType;
+    retReturnType = Eep_Compare(eepCompareStartAddr, pDataNeedtoCompare, dataSize);
+    if (E_OK != retReturnType)
+    {
+        return E_NOT_OK;
+    }
+    while (MEMIF_IDLE != Eep_GetStatus())
+    {
+        Eep_MainFunction();
+    }
+    retJobResultType = Eep_GetJobResult();
+    if (MEMIF_JOB_OK != retJobResultType)
+    {
+        return E_NOT_OK;
+    }
+    return E_OK;
+}
+/* @brief VECTKEY value so that AIRCR register write is not ignored. */
+#define FEATURE_SCB_VECTKEY (0x05FAU)
+void SystemSoftwareReset(void)
+{
+    uint32_t regValue;
+
+    /* Read Application Interrupt and Reset Control Register */
+    regValue = S32_SCB->AIRCR;
 
+    /* Clear register key */
+    regValue &= ~(S32_SCB_AIRCR_VECTKEY_MASK);
+
+    /* Configure System reset request bit and Register Key */
+    regValue |= S32_SCB_AIRCR_VECTKEY(FEATURE_SCB_VECTKEY);
+    regValue |= S32_SCB_AIRCR_SYSRESETREQ(0x1u);
+
+    /* Write computed register value */
+    S32_SCB->AIRCR = regValue;
+}

+ 212 - 180
src/hal_adapter.h

@@ -10,200 +10,232 @@
 /*
  * hal_adapter.h
  *
- *  Created on: 2022年1月18日
+ *  Created on: 2022锟斤拷1锟斤拷18锟斤拷
  *      Author: QiXiang_CHENJIE
  */
 
 #ifndef HAL_ADAPTER_H_
 #define HAL_ADAPTER_H_
-/*NB
-
-#include "commontypedef.h"
-#include "bsp.h"
-#include "bsp_custom.h"
-#include "osasys.h"
-#include "ostask.h"
-#include "queue.h"
-#include "ps_event_callback.h"
-#include "cmisim.h"
-#include "cmimm.h"
-#include "cmips.h"
-#include "sockets.h"
-#include "psifevent.h"
-#include "ps_lib_api.h"
-#include "lwip/netdb.h"
-#include "debug_log.h"
-#include "slpman_ec616.h"
-#include "plat_config.h"
-#include "ec_tcpip_api.h"
+#include "Mcal.h"
+#include "CAN.h"
+#include "SchM_Can.h"
+#include "Mcu.h"
+#include "Mcl.h"
+#include "Port.h"
+#include "Dio.h"
+#include "Uart.h"
+#include "Platform.h"
+#include "Lpuart_Uart_Ip_Irq.h"
+#include "Flexio_Uart_Ip_Irq.h"
+#include <string.h>
 #include <stdlib.h>
-#include "numeric.h"
-#include "AppSignal.h"
-#include "hal_uart.h"
+#include "Dma_Ip.h"
+#include "Dma_Ip_Irq.h"
+#include "Lpuart_Uart_Ip.h"
+#include "FreeRTOS.h"
 #include "timers.h"
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-typedef signed char sint8;
-typedef signed short sint16;
-typedef signed int sint32;
-UINT8 UartTramsit(UINT8 *pSend, UINT32 sendLen, UINT8 *pRead, UINT32 readLen, UINT32 timeout);
- */
- #include "Mcal.h"
- #include "CAN.h"
- #include "SchM_Can.h"
- #include "Mcu.h"
- #include "Mcl.h"
- #include "Port.h"
- #include "Dio.h"
- #include "Uart.h"
- #include "Platform.h"
- #include "Lpuart_Uart_Ip_Irq.h"
- #include "Flexio_Uart_Ip_Irq.h"
- #include <string.h>
- #include <stdlib.h>
- #include "Dma_Ip.h"
- #include "Dma_Ip_Irq.h"
- #include "Lpuart_Uart_Ip.h"
- #include "FreeRTOS.h"
- #include "timers.h"
- #include "task.h"
- #include "semphr.h"
- #include "Eep.h"
-
- #define UART_LPUART0 0
- #define UART_LPUART1 1
- #define UART_LPUART2 2
- #define FLEXIO_RX 3
- #define FLEXIO_TX 4
- #define main_TASK_PRIORITY                ( tskIDLE_PRIORITY + 7 )
-
- #define MSG_LEN 50U
- #define TJA1153_START_ID (uint32_t)(0x555u)
- #define TJA1153_CONFIG_ID (uint32_t)(0x18DA00F1u)
-
- #define BUFFER_SIZE 200
- #define DMA_SIZE 50
- extern uint8_t RX_Buffer[UART_CH_MAX_CONFIG][BUFFER_SIZE];
- Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, const uint8 *txBuffer, uint32 sendLength, uint8 *rxBuffer, uint16 *rxlen,uint32 T_timeout);
- Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout);
- Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer,uint16 *rxlen, sint32 T_timeout);
- void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event);
-
- /*CAN*/
- typedef enum
- {
-     CAN_STANDARD_ID_TYPE = 0x00,   /**< * -00b CAN message with Standard CAN ID  */
-     CANFD_STANDARD_ID_TYPE = 0x01, /**< * -01b CAN FD frame with Standard CAN ID  */
-     CAN_EXTENDED_ID_TYPE = 0x02,   /**< * -10b CAN message with Extended CAN ID  */
-     CANFD_EXTENDED_ID_TYPE = 0x03, /**< * -11b CAN FD frame with Extended CAN ID  */
- } CAN_IdFrameType;
+#include "task.h"
+#include "semphr.h"
+
+#include "Eep.h"
+
+/*锟斤拷应锟皆讹拷锟斤拷*/
+typedef unsigned char UINT8;
+typedef unsigned short UINT16;
+typedef unsigned long UINT32;
+typedef unsigned char BOOL;
+typedef signed char INT8;
+typedef signed short INT16;
+typedef signed long INT32;
+
+#define UARTPRINTF 0
+#define SEGGER_PRINTF 0
+#define CAN0 0
+#define CAN1 1
+#ifndef min
+#define min(A, B) ((A) <= (B) ? (A) : (B))
+#endif
+#ifndef max
+#define max(A, B) ((A) < (B) ? (B) : (A))
+#endif
+#define getbit(x, y) ((x) >> (y)&1) //锟斤拷取x锟侥碉拷y位锟斤拷锟斤拷值
+#define setbit(x, y) x |= (1 << y)  // x锟侥碉拷y位锟斤拷1
+#define clrbit(x, y) x &= ~(1 << y) // x锟侥碉拷y位锟斤拷0
+#define UART_LPUART0 0
+#define UART_LPUART1 1
+#define UART_LPUART2 2
+#define FLEXIO_RX 3
+#define FLEXIO_TX 4
+#define main_TASK_PRIORITY (tskIDLE_PRIORITY + 7)
+
+#define MSG_LEN 50U
+#define TJA1153_START_ID (uint32_t)(0x555u)
+#define TJA1153_CONFIG_ID (uint32_t)(0x18DA00F1u)
+#define NUM_RESULTS ADC_CFGSET_VS_0_GROUP_0_CHANNELS
+#define BUFFER_SIZE 1024
+#define DMA_SIZE 128
+void Uart_Hal_RecvTask(void *pvParameters);
+void Uart_Hal_SendTask(void *pvParameters);
+typedef struct {
+    uint8_t *source;
+    uint32_t br;
+    uint32_t bw;
+    uint32_t btoRead;
+    uint32_t length;
+}ringbuffer_t;
 
  typedef struct
  {
-     Can_IdType id;
-
-     CAN_IdFrameType idFrame;
-
-     uint8 length; /**< @brief DLC = Data Length Code (part of L-PDU that describes
-                                             the SDU length). */
-     uint8 *sdu;   /**< @brief CAN L-SDU = Link Layer Service Data
-                                                            Unit. Data that is transported inside
-                                                            the L-PDU. */
- } Can_Msg_Type;
+     uint16 DataLen;
+     uint8 *dataPtr;
+     uint32 dataAddr;
+ } UartMsg_t;
  typedef struct
  {
-	 Can_IdType id;
-	 uint8 length;
-	 uint8 data[8];
- }Can_Msg_Type_Data;
- extern Std_ReturnType CanIf_SendMessage(uint8 ControllerId, Can_Msg_Type CanMsg);
-
- /*EEP*/
-
- typedef enum
- {
-     EEP_FTFC_KEY_SIZE_0_BYTES   = 0x0,  /**< @brief control code for key size 0 bytes, used for the partitioning command */
-     EEP_FTFC_KEY_SIZE_128_BYTES = 0x1,  /**< @brief control code for key size 128 bytes, used for the partitioning command */
-     EEP_FTFC_KEY_SIZE_256_BYTES = 0x2,  /**< @brief control code for key size 256 bytes, used for the partitioning command */
-     EEP_FTFC_KEY_SIZE_512_BYTES = 0x3   /**< @brief control code for key size 512 bytes, used for the partitioning command */
- } TestEep_CsecKeySize;
-
- /**
-     @brief FlexRamPartition Type used for the partitioning command
- */
+	 uint8 Channel;
+	 Lpuart_Uart_Ip_EventType event;
+     uint16  value;
+ } UartHalMsg_t;
  typedef enum
  {
-     EEP_FTFC_EERAM_SIZE_0K  = 0xF,   /**< @brief control code for flexram partitioned as sram, used for the partitioning command */
-     EEP_FTFC_EERAM_SIZE_4K  = 0x2,   /**< @brief control code for flexram partitioned as eeram, used for the partitioning command */
-     EEP_FTFC_EERAM_SIZE_2K  = 0x3    /**< @brief control code for flexram partitioned as eeram, used for the partitioning command */
- } TestEep_Eeprom_FlexRamPartitionType;
-
- /**
-     @brief FlexNvmPartition Type used for the partitioning command
- */
- typedef enum
- {
-     EEP_FTFC_EEEPROM_SIZE_0K_V1   =  0x0,   /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_0K_V2   =  0xC,   /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_0K_V3   =  0x0F,  /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_32K_V1  = 0x3,    /**< @brief control code to partition EEPROM backup size as 32K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_32K_V2  = 0xB,    /**< @brief control code to partition EEPROM backup size as 32K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_48K_V1  = 0xA,    /**< @brief control code to partition EEPROM backup size as 48K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_64K_V1  = 0x8,    /**< @brief control code to partition EEPROM backup size as 64K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_64K_V2  = 0x4,    /**< @brief control code to partition EEPROM backup size as 64K, used for the partitioning command */
-     EEP_FTFC_EEEPROM_SIZE_24K_V2  = 0x9     /**< @brief control code to partition EEPROM backup size as 24K, used for the partitioning command */
- } TestEep_Eeprom_FlexNvmPartitionType;
- /**
-     @brief Sfe Type used for the partitioning command
- */
- typedef enum
- {
-     EEP_FTFC_VERIFY_ONLY_DISABLED  = 0x0,    /**< @brief control code for sfe verify only disabled, used for the partitioning command */
-     EEP_FTFC_VERIFY_ONLY_ENABLED   = 0x1     /**< @brief control code for sfe verify only enabled, used for the partitioning command */
- } TestEep_SfeType;
-
- /**
-     @brief LoadFlexRam at reset Type used for the partitioning command
- */
- typedef enum
- {
-     EEP_FTFC_LOAD_AT_RESET_ENABLED  = 0x0,  /**< @brief control code for loading flexram at reset, used for the partitioning command */
-     EEP_FTFC_LOAD_AT_RESET_DISABLED = 0x1   /**< @brief control code for not loading flexram at reset, used for the partitioning command */
- } TestEep_LoadFlexRamType;
-
-#define EEP_ERASE_START_ADD         (0U)
-#define EEP_WRTESTPATT_SIZE         (33U)
-#define EEP_RDTESTPATT_SIZE         (33U)
-
-#define REG_WRITE8(address, value)        							(*((volatile uint8*)(address)) = (value))
-#define REG_BIT_GET8(address, mask)       							((*(volatile uint8*)(address))& (mask))
-
-#define T_EEEPROM_SIZE                     							EEP_FTFC_EEEPROM_SIZE_32K_V2
-#define TEST_EEP_EEPROM_FSTAT_ADDR32                               ((uint32)(IP_FTFC_BASE + (uint32)0x00UL)) /**< @brief Eeprom Status Register (FTFE_FSTAT) */
-#define TEST_EEP_EEPROM_FCCOB3_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x04UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB3) */
-#define TEST_EEP_EEPROM_FCCOB2_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x05UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB2) */
-#define TEST_EEP_EEPROM_FCCOB1_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x06UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB1) */
-#define TEST_EEP_EEPROM_FCCOB0_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x07UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB0) */
-#define TEST_EEP_EEPROM_FCCOB7_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x08UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB7) */
-#define TEST_EEP_EEPROM_FCCOB6_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x09UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB6) */
-#define TEST_EEP_EEPROM_FCCOB5_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x0AUL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB5) */
-#define TEST_EEP_EEPROM_FCCOB4_ADDR32                              ((uint32)(IP_FTFC_BASE + (uint32)0x0BUL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB4) */
-
-#define TEST_EEP_EEPROM_FSTAT_CCIF_U8                              (0x0080U)
-#define TEST_EEP_EEPROM_FSTAT_ACCERR_U8                            (0x0020U)
-#define TEST_EEP_EEPROM_FSTAT_FPVIOL_U8                            (0x0010U)
+	 UartStartRecv = 0,
+	 UartAbortRecv,
+	 UartRecvOnGoing,
+	 UartRecvComplete,
+
+	 UartStartSend,
+	 UartAbortSend,
+	 UartSendOnGoing,
+	 UartSendComplete,
+	 UartNoDataSend,
+ }UartHalType;
+
+
+/*CAN*/
+typedef enum
+{
+    CAN_STANDARD_ID_TYPE = 0x00,   /**< * -00b CAN message with Standard CAN ID  */
+    CANFD_STANDARD_ID_TYPE = 0x01, /**< * -01b CAN FD frame with Standard CAN ID  */
+    CAN_EXTENDED_ID_TYPE = 0x02,   /**< * -10b CAN message with Extended CAN ID  */
+    CANFD_EXTENDED_ID_TYPE = 0x03, /**< * -11b CAN FD frame with Extended CAN ID  */
+} CAN_IdFrameType;
+
+typedef struct
+{
+    Can_IdType id;
+
+    CAN_IdFrameType idFrame;
+
+    uint8 length; /**< @brief DLC = Data Length Code (part of L-PDU that describes
+                                            the SDU length). */
+    uint8 *sdu;   /**< @brief CAN L-SDU = Link Layer Service Data
+                                                           Unit. Data that is transported inside
+                                                           the L-PDU. */
+} Can_Msg_Type;
+typedef struct
+{
+    Can_IdType id;
+    uint8 length;
+    uint8 data[8];
+} Can_Msg_Type_Data;
+/*EEP*/
+
+typedef enum
+{
+    EEP_FTFC_KEY_SIZE_0_BYTES = 0x0,   /**< @brief control code for key size 0 bytes, used for the partitioning command */
+    EEP_FTFC_KEY_SIZE_128_BYTES = 0x1, /**< @brief control code for key size 128 bytes, used for the partitioning command */
+    EEP_FTFC_KEY_SIZE_256_BYTES = 0x2, /**< @brief control code for key size 256 bytes, used for the partitioning command */
+    EEP_FTFC_KEY_SIZE_512_BYTES = 0x3  /**< @brief control code for key size 512 bytes, used for the partitioning command */
+} TestEep_CsecKeySize;
+
+/**
+    @brief FlexRamPartition Type used for the partitioning command
+*/
+typedef enum
+{
+    EEP_FTFC_EERAM_SIZE_0K = 0xF, /**< @brief control code for flexram partitioned as sram, used for the partitioning command */
+    EEP_FTFC_EERAM_SIZE_4K = 0x2, /**< @brief control code for flexram partitioned as eeram, used for the partitioning command */
+    EEP_FTFC_EERAM_SIZE_2K = 0x3  /**< @brief control code for flexram partitioned as eeram, used for the partitioning command */
+} TestEep_Eeprom_FlexRamPartitionType;
+
+/**
+    @brief FlexNvmPartition Type used for the partitioning command
+*/
+typedef enum
+{
+    EEP_FTFC_EEEPROM_SIZE_0K_V1 = 0x0,  /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_0K_V2 = 0xC,  /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_0K_V3 = 0x0F, /**< @brief control code to partition EEPROM backup size as 0K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_32K_V1 = 0x3, /**< @brief control code to partition EEPROM backup size as 32K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_32K_V2 = 0xB, /**< @brief control code to partition EEPROM backup size as 32K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_48K_V1 = 0xA, /**< @brief control code to partition EEPROM backup size as 48K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_64K_V1 = 0x8, /**< @brief control code to partition EEPROM backup size as 64K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_64K_V2 = 0x4, /**< @brief control code to partition EEPROM backup size as 64K, used for the partitioning command */
+    EEP_FTFC_EEEPROM_SIZE_24K_V2 = 0x9  /**< @brief control code to partition EEPROM backup size as 24K, used for the partitioning command */
+} TestEep_Eeprom_FlexNvmPartitionType;
+/**
+    @brief Sfe Type used for the partitioning command
+*/
+typedef enum
+{
+    EEP_FTFC_VERIFY_ONLY_DISABLED = 0x0, /**< @brief control code for sfe verify only disabled, used for the partitioning command */
+    EEP_FTFC_VERIFY_ONLY_ENABLED = 0x1   /**< @brief control code for sfe verify only enabled, used for the partitioning command */
+} TestEep_SfeType;
+
+/**
+    @brief LoadFlexRam at reset Type used for the partitioning command
+*/
+typedef enum
+{
+    EEP_FTFC_LOAD_AT_RESET_ENABLED = 0x0, /**< @brief control code for loading flexram at reset, used for the partitioning command */
+    EEP_FTFC_LOAD_AT_RESET_DISABLED = 0x1 /**< @brief control code for not loading flexram at reset, used for the partitioning command */
+} TestEep_LoadFlexRamType;
+
+#define EEP_ERASE_START_ADD (0U)
+#define EEP_WRTESTPATT_SIZE (33U)
+#define EEP_RDTESTPATT_SIZE (33U)
+
+#define REG_WRITE8(address, value) (*((volatile uint8 *)(address)) = (value))
+#define REG_BIT_GET8(address, mask) ((*(volatile uint8 *)(address)) & (mask))
+
+#define T_EEEPROM_SIZE EEP_FTFC_EEEPROM_SIZE_32K_V2
+#define TEST_EEP_EEPROM_FSTAT_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x00UL))  /**< @brief Eeprom Status Register (FTFE_FSTAT) */
+#define TEST_EEP_EEPROM_FCCOB3_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x04UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB3) */
+#define TEST_EEP_EEPROM_FCCOB2_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x05UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB2) */
+#define TEST_EEP_EEPROM_FCCOB1_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x06UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB1) */
+#define TEST_EEP_EEPROM_FCCOB0_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x07UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB0) */
+#define TEST_EEP_EEPROM_FCCOB7_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x08UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB7) */
+#define TEST_EEP_EEPROM_FCCOB6_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x09UL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB6) */
+#define TEST_EEP_EEPROM_FCCOB5_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x0AUL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB5) */
+#define TEST_EEP_EEPROM_FCCOB4_ADDR32 ((uint32)(IP_FTFC_BASE + (uint32)0x0BUL)) /**< @brief Eeprom Common Command Object Registers(FTFE_FCCOB4) */
+
+#define TEST_EEP_EEPROM_FSTAT_CCIF_U8 (0x0080U)
+#define TEST_EEP_EEPROM_FSTAT_ACCERR_U8 (0x0020U)
+#define TEST_EEP_EEPROM_FSTAT_FPVIOL_U8 (0x0010U)
 /* Start address for DFLASH sector 0 */
-#define TEST_EEP_DEEPROM_SECTOR_0_ADDR32                           0x10000000
-#define D_EEPROM_BASE_ADDR                                         (0x10000000UL)
-#define TEST_EEP_EEPROM_CMD_ERASE_SECTOR                           (0x09UL)
-
-#define EEPROM_CMD_PROGRAM_PARTITION                               (0x80UL)
-
- void Eep_DepartParitition(TestEep_Eeprom_FlexNvmPartitionType T_EEP_SIZE);
- Std_ReturnType HAL_EEP_Erase(uint32 eepEraseStartAddr,uint32 eepEraseSize);
- Std_ReturnType HAL_EEP_Read(uint32 eepReadStartAddr,uint8* pDataBuffer,uint32 dataSize);
- Std_ReturnType HAL_EEP_Write(uint32 eepWriteStartAddr,uint8* pDataNeedtoWrite,uint32 dataSize);
- Std_ReturnType HAL_EEP_Compare(uint32 eepCompareStartAddr,uint8* pDataNeedtoCompare,uint32 dataSize);
+#define TEST_EEP_DEEPROM_SECTOR_0_ADDR32 0x10000000
+#define D_EEPROM_BASE_ADDR (0x10000000UL)
+#define TEST_EEP_EEPROM_CMD_ERASE_SECTOR (0x09UL)
+
+#define EEPROM_CMD_PROGRAM_PARTITION (0x80UL)
+extern Std_ReturnType CanIf_SendMessage(uint8 ControllerId, Can_Msg_Type CanMsg);
+void Eep_DepartParitition(TestEep_Eeprom_FlexNvmPartitionType T_EEP_SIZE);
+Std_ReturnType HAL_EEP_Erase(uint32 eepEraseStartAddr, uint32 eepEraseSize);
+Std_ReturnType HAL_EEP_Read(uint32 eepReadStartAddr, uint8 *pDataBuffer, uint32 dataSize);
+Std_ReturnType HAL_EEP_Write(uint32 eepWriteStartAddr, uint8 *pDataNeedtoWrite, uint32 dataSize);
+Std_ReturnType HAL_EEP_Compare(uint32 eepCompareStartAddr, uint8 *pDataNeedtoCompare, uint32 dataSize);
+
+sint8 AtcmdDelayRecvFunc(uint8 recvChannel,char *ResultStrPtr,uint16 delayTime);
+Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txBuffer, uint16 sendLength, uint8 *rxBuffer, uint16 *rxlen, uint32 T_timeout);
+Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32 sendLength, uint32 T_timeout);
+Std_ReturnType UART_Receive_Data(uint8 recvChannel, uint8 *rxBuffer, uint8 *rxlen, uint32 T_timeout);
+Std_ReturnType UART_Reset(uint8 recvChannel);
+void UART_Callback(uint32 hwInstance, Lpuart_Uart_Ip_EventType event);
+void UartInit(void);
+void SystemSoftwareReset(void);
+void create_ringBuffer(ringbuffer_t *ringBuf, uint8_t *buf, uint32_t buf_len);
+void clear_ringBuffer(ringbuffer_t *ringBuf);
+uint32_t write_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
+uint32_t read_ringBuffer(uint8_t *buffer, uint32_t size, ringbuffer_t *ringBuf);
 
 #endif /* HAL_ADAPTER_H_ */

+ 12 - 13
src/main.c

@@ -58,8 +58,6 @@
 #include "AppTaskUart1.h"
 #include "AppTaskUart0.h"
 
-#include "UartExchange.h"
-
 /*!
   \brief The main function for the project.
   \details The startup initialization sequence is the following:
@@ -135,19 +133,20 @@ int main(void)
 	Gpt_Init(&Gpt_Config_VS_0);
 	/* Enable the Gpt notification to periodically service the Wdg */
 	Gpt_EnableNotification(GptConf_GptChannelConfiguration_GptChannelConfiguration_0);
-	WdgInit();
-	IP_LPUART0->CTRL |= LPUART_CTRL_ILIE(1);
-	IP_LPUART2->CTRL |= LPUART_CTRL_ILIE(1);
-    Dio_WriteChannel(DioConf_DioChannel_PTE9_GPIO_OUT_MCU_BT_POW_EN,STD_ON);
-    Dio_WriteChannel(DioConf_DioChannel_PTE7_GPIO_OUT_MCU_BT_MOD,STD_ON);
-
-
+//	WdgInit();
+	IP_LPUART0->CTRL |= LPUART_CTRL_ILT(1);
+	IP_LPUART1->CTRL |= LPUART_CTRL_ILT(1);
+	IP_LPUART2->CTRL |= LPUART_CTRL_ILT(1);
+	IP_LPUART0->CTRL |= LPUART_CTRL_IDLECFG(5);
+	IP_LPUART1->CTRL |= LPUART_CTRL_IDLECFG(3);
+	IP_LPUART2->CTRL |= LPUART_CTRL_IDLECFG(3);
+
+	UartInit();
     xTaskCreate( MainTask, ( const char * const ) "MainTask", 128, (void*)0, main_TASK_PRIORITY+3 , NULL );
     //xTaskCreate( BleTask, ( const char * const ) "BleTask", 256 + 64, (void*)0, main_TASK_PRIORITY , NULL );
-    xTaskCreate( CanTask,  ( const char * const ) "CanTask" , 512, (void*)0, main_TASK_PRIORITY + 2, NULL ); //EBCͨѶ
-    xTaskCreate( uart0_uart1_deal_task,  ( const char * const ) "Uart01Task" , 512, (void*)0, main_TASK_PRIORITY + 1, NULL ); //EBCͨѶ
-    xTaskCreate( UartTask, ( const char * const ) "UartTask" , 512, (void*)0, main_TASK_PRIORITY + 1, NULL );//PLCͨѶ
-    xTaskCreate( wifi_task,( const char * const ) "WifiTask" , 512, (void*)0, main_TASK_PRIORITY, NULL );	 //WIFIͨѶ
+    xTaskCreate( CanTask,  ( const char * const ) "CanTask" , 512, (void*)0, main_TASK_PRIORITY + 2, NULL ); //EBC通讯
+    xTaskCreate( UartTask, ( const char * const ) "UartTask" , 512, (void*)0, main_TASK_PRIORITY + 1, NULL );//PLC通讯
+    xTaskCreate( wifi_task,( const char * const ) "WifiTask" , 512, (void*)0, main_TASK_PRIORITY, NULL );	 //WIFI通讯
 
 
     vTaskStartScheduler();