Quellcode durchsuchen

网络OTA更新测试,tcp修改为ec例程

CHENJIE-PC\QiXiang_CHENJIE vor 4 Jahren
Ursprung
Commit
1a431ca687
5 geänderte Dateien mit 614 neuen und 149 gelöschten Zeilen
  1. 14 9
      inc/app.h
  2. 19 3
      inc/hal_module_adapter.h
  3. 301 131
      src/app.c
  4. 15 2
      src/bsp_custom.c
  5. 265 4
      src/hal_module_adapter.c

+ 14 - 9
inc/app.h

@@ -15,20 +15,13 @@ extern "C" {
 
 #include "cisAsynEntry.h"
 
-// #define QMSG_ID_BASE               (0x160) 
-// #define QMSG_ID_NW_IPV4_READY      (QMSG_ID_BASE)
-// #define QMSG_ID_NW_IPV6_READY      (QMSG_ID_BASE + 1)
-// #define QMSG_ID_NW_IPV4_6_READY    (QMSG_ID_BASE + 2)
-// #define QMSG_ID_NW_DISCONNECT      (QMSG_ID_BASE + 3)
-// #define QMSG_ID_SOCK_SENDPKG       (QMSG_ID_BASE + 4)
-// #define QMSG_ID_SOCK_RECVPKG       (QMSG_ID_BASE + 5)
-
 #define QMSG_ID_BASE               (0x160) 
 #define QMSG_ID_NW_IP_READY        (QMSG_ID_BASE)
 #define QMSG_ID_NW_IP_SUSPEND      (QMSG_ID_BASE + 1)
 #define QMSG_ID_NW_IP_NOREACHABLE  (QMSG_ID_BASE + 2)
 #define QMSG_ID_SOCK_SENDPKG       (QMSG_ID_BASE + 4)
 #define QMSG_ID_SOCK_RECVPKG       (QMSG_ID_BASE + 5)
+#define QMSG_ID_SOCK_EXIT       (QMSG_ID_BASE + 6)
 typedef enum
 {
     APP_INIT_STATE,
@@ -38,6 +31,18 @@ typedef enum
     APP_IDLE_STATE,
     APP_WAIT_STATE
 } appRunningState_t;
+typedef enum
+{
+    APP_SOCKET_CONNECTION_CLOSED,
+    APP_SOCKET_CONNECTION_CONNECTING,
+    APP_SOCKET_CONNECTION_CONNECTED,    
+}AppSocketConnectionStatus;
+
+typedef struct AppSocketConnectionContext_Tag
+{
+    INT32 id;
+    INT32 status;
+}AppSocketConnectionContext;
 
 typedef struct Uart_Receive_Type
 {
@@ -51,7 +56,7 @@ typedef struct Uart_Receive_Type
 
 typedef struct Fota_Type
 {
-    bool Fota_update ;
+    bool Fota_update_flag ;
     bool Fota_update_error ;
     uint32_t Fota_All_Data_Len ;
     uint32_t Fota_Current_Addres ;

+ 19 - 3
inc/hal_module_adapter.h

@@ -123,6 +123,16 @@ typedef struct _Can_TxMsgType
     UINT8 Data[8];
 }Can_TxMsgType;
 
+#ifdef BL_FILE_LOG
+typedef enum
+{
+	BL_LEVEL0, 
+	BL_LEVEL1, 
+	BL_LEVEL2, 
+	BL_LEVEL3, 
+}BlLogLevel;
+#endif
+
 typedef void (*posGGACallBack )(UINT8 res, UINT8 * params);
 void PowerPinConfig(IOType iotype);
 
@@ -144,11 +154,17 @@ void CanTiggerEvt(UINT8 cmd);
 #endif
 INT32 CAN_WriteReg(UINT8 addr, UINT8 value);
 INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf);
-void HAL_Can_Init(Can_InitType param);
+ void HAL_Can_Init(Can_InitType param);
  void HAL_Can_Sleep(void);
-INT32 HAL_Can_Reset(void);
+ INT32 HAL_Can_Reset(void);
 INT32 HAL_Can_Transmit(Can_TxMsgType Can_TxMsg);
-UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf);
+ UINT8  HAL_Can_Receive(UINT32 *CAN_ID,UINT8 *CAN_RX_Buf);
+ #ifdef BL_FILE_LOG
+void bluejoy_printf(BlLogLevel level, const UINT8 *format, ...);
+void bluejoy_read_logfile(void);
+void bluejoy_del_logfile(void);
+#endif
+
 #ifdef __cplusplus
 }
 #endif

+ 301 - 131
src/app.c

@@ -21,7 +21,7 @@
 #include "debug_log.h"
 #include "slpman_ec616.h"
 #include "plat_config.h"
-
+#include "ec_tcpip_api.h"
 
 //Main Area
 #define PROC_MAIN_TASK_STACK_SIZE           (1024)
@@ -39,26 +39,22 @@ static process_Main 		    gProcess_Main_Task = PROCESS_STATE_IDLE;
 #define PROC_MAIN_STATE_SWITCH(a)  (gProcess_Main_Task = a)
 
 //tcp area
-#define PROC_TCP_TASK_STACK_SIZE           (1024)
+#define PROC_TCP_TASK_STACK_SIZE           (1024*2)
 static StaticTask_t             gProcess_Tcp_Task_t;
 static UINT8                  gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
 static volatile UINT32          Event;
 static UINT8                    gImsi[16] = {0};
 static INT32                    sockfd = -1;
 static UINT32                   gCellID = 0;
-int TcpconnectID = -1;
-volatile uint8_t Tcp_statuts = 0;
-typedef enum
-{
-    PROCESS_TCP_STATE_IDLE = 0,
-    PROCESS_TCP_STATE_LINK,
-    PROCESS_TCP_STATE_WORK,
-    PROCESS_TCP_STATE_SLEEP
-}process_TCP;
-static process_TCP 		    gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
-#define PROC_TCP_STATE_SWITCH(a)  (gProcess_Tcp_Task = a)
-volatile bool Tcp_Sleep_Flag = false;
-
+static UINT8  Tcp_serviece;
+static QueueHandle_t            psEventQueueHandle;//队列句柄
+#define APP_EVENT_QUEUE_SIZE    (10)//队列大小
+static AppSocketConnectionContext socContext = {-1, APP_SOCKET_CONNECTION_CLOSED};
+//fota area
+Fota_Type Fota_S={0,0,0,0,0,0,0,0};
+//函数声明
+void Tcp_Recv_info(uint8_t* p);
+void Tcp_Recv_fota(uint8_t* p);
 //睡眠进出函数
 static void appBeforeHib(void *pdata, slpManLpState state)
 {
@@ -108,6 +104,20 @@ static void appAfterSlp2(void *pdata, slpManLpState state)
         printf("sleep2 failed:%d \n",state);
     #endif
 }
+//Tcp 状态转换函数
+static void sendQueueMsg(UINT32 msgId, UINT32 xTickstoWait)
+{
+    eventCallbackMessage_t *queueMsg = NULL;
+    queueMsg = malloc(sizeof(eventCallbackMessage_t));
+    queueMsg->messageId = msgId;
+    if (psEventQueueHandle)
+    {
+        if (pdTRUE != xQueueSend(psEventQueueHandle, &queueMsg, xTickstoWait))
+        {
+            ECOMM_TRACE(UNILOG_PLA_APP, sendQueueMsg_1, P_ERROR, 0, "xQueueSend error");
+        }
+    }
+}
 // 主任务线程
 static void Main_Task(void* arg)
 {
@@ -186,13 +196,10 @@ static void Main_Task(void* arg)
                 Uart_index++;
                 Tcp_index++;
                 sleep_index++;
-                if (Tcp_index >=100)//Tcp 1s 调用一次
+                if(Tcp_index>5*100 && socContext.id>=0)
                 {
-                    #ifdef USING_PRINTF
-                        printf("[%d]_sleep count \r\n",sleep_index);
-                    #endif
+                    sendQueueMsg(QMSG_ID_SOCK_SENDPKG, 0);
                     Tcp_index = 0;
-                    PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
                 }
                 if (sleep_index >=sleep_time_flag*100)
                 {
@@ -203,7 +210,8 @@ static void Main_Task(void* arg)
             }
             case PROCESS_STATE_SLEEP:
             {
-                osDelay(10000);
+                sendQueueMsg(QMSG_ID_SOCK_EXIT, 0);
+                osDelay(5000);
                 slpManSlpState_t State;
                 uint8_t cnt;
                 if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
@@ -270,7 +278,6 @@ static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 pa
             #ifdef USING_PRINTF
                 printf("RSSI signal=%d\n",rssi);
             #endif
-            ECOMM_TRACE(UNILOG_PLA_APP, socketRegisterPSUrcCallback_1, P_INFO, 1, "RSSI signal=%d", rssi);
             break;
         }
         case NB_URC_ID_PS_BEARER_ACTED:
@@ -300,150 +307,314 @@ static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 pa
         {
             netif = (NmAtiNetifInfo *)param;
             if (netif->netStatus == NM_NETIF_ACTIVATED)
-                //sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
-                Tcp_statuts = 1;
+                sendQueueMsg(QMSG_ID_NW_IP_READY, 0);
             break;
         }
     }
     return 0;
 }
-static void Tcp_Task(void* arg)
+void socketAppConnectionCallBack(UINT8 connectionEventType, void *bodyEvent)
 {
-    CHAR   serverip[] = "120.26.68.165";
-    CHAR  serverport[] = "14319";
-    struct addrinfo hints, *server_res;
-    memset( &hints, 0, sizeof( hints ) );
-    hints.ai_socktype = SOCK_STREAM;
-    hints.ai_protocol = IPPROTO_TCP;
-    uint8_t* TcpSendBuffer=NULL;
-    uint8_t Reconnect_Num = 0;
-    int TcpsendID = -1;
-    PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
-    while(true)
+    switch(connectionEventType)
     {
-        switch(gProcess_Tcp_Task)
+        case TCPIP_CONNECTION_STATUS_EVENT:
         {
-            case PROCESS_TCP_STATE_IDLE:
+            TcpipConnectionStatusInd *statusInd;
+            statusInd = (TcpipConnectionStatusInd *)bodyEvent;
+            if(statusInd != PNULL)
             {
-                osDelay(100);
-                break;
+                if(statusInd->status == TCPIP_CONNECTION_STATUS_CLOSED)
+                {
+                    #ifdef USING_PRINTF
+                        printf("socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
+                    #endif
+                    ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_1, P_ERROR, 2, "socketAppConnectionCallBack socket connection %u closed,cause %u", statusInd->connectionId, statusInd->cause);
+                    if(statusInd->connectionId == socContext.id)
+                    {
+                        socContext.id = -1;
+                        socContext.status = APP_SOCKET_CONNECTION_CLOSED;
+                    }
+                }
+                else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTING)
+                {
+                    #ifdef USING_PRINTF
+                        printf("socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
+                    #endif
+                    ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_2, P_INFO, 1, "socketAppConnectionCallBack socket connection %u is connecting", statusInd->connectionId);
+                    if(statusInd->connectionId == socContext.id)
+                    {
+                        socContext.status = APP_SOCKET_CONNECTION_CONNECTING;
+                    }
+                }
+                else if(statusInd->status == TCPIP_CONNECTION_STATUS_CONNECTED)
+                {
+                    #ifdef USING_PRINTF
+                        printf("socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
+                    #endif
+                    ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_3, P_ERROR, 1, "socketAppConnectionCallBack socket connection %u is connected", statusInd->connectionId);
+                    if(statusInd->connectionId == socContext.id)
+                    {
+                        socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
+                    }
+                }
+            }
+            else
+            {
+                #ifdef USING_PRINTF
+                    printf("socketAppConnectionCallBack invalid connection status event");
+                #endif
+                ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_4, P_ERROR, 0, "socketAppConnectionCallBack invalid connection status event");
             }
-            case PROCESS_TCP_STATE_LINK:
+
+            break;
+        }
+        case TCPIP_CONNECTION_RECEIVE_EVENT:
+        {
+            TcpipConnectionRecvDataInd *rcvInd;
+            rcvInd = (TcpipConnectionRecvDataInd *)bodyEvent;
+            if(rcvInd != PNULL)
             {
+                uint8_t* Ptr;
                 #ifdef USING_PRINTF
-                    printf("TCP_statuts:%d\n",Tcp_statuts);
+                
+                    Ptr=rcvInd->data;
+                    printf("socketAppConnectionCallBack socket connection %u receive length %u data:", rcvInd->connectionId, rcvInd->length);
+                    for(int i = 0;i<rcvInd->length;i++)
+                        printf("%x",*(Ptr+i));
                 #endif
-                switch(Tcp_statuts)
+                Tcp_Recv_info(Ptr);//Tcp 接收
+                ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_5, P_INFO, 2, "socketAppConnectionCallBack socket connection %u receive length %u data", rcvInd->connectionId, rcvInd->length);
+            }
+            else
+            {
+                #ifdef USING_PRINTF
+                    printf( "socketAppConnectionCallBack invalid connection rcv event");
+                #endif
+                ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_6, P_ERROR, 0, "socketAppConnectionCallBack invalid connection rcv event");
+            }
+            break;
+        }
+        case TCPIP_CONNECTION_UL_STATUS_EVENT:
+        {
+            TcpipConnectionUlDataStatusInd *ulStatusInd;
+            ulStatusInd = (TcpipConnectionUlDataStatusInd *)bodyEvent;
+            if(ulStatusInd != PNULL)
+            {
+                if(ulStatusInd->status == Tcpip_Connection_UL_DATA_SUCCESS)
                 {
-                    case 0://0代表网络为驻网前
+                    #ifdef USING_PRINTF
+                        printf( "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
+                    #endif
+                    ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_7, P_INFO, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent success", ulStatusInd->connectionId, ulStatusInd->sequence);
+                }
+                else if(ulStatusInd->status == Tcpip_Connection_UL_DATA_FAIL)
+                {
+                    #ifdef USING_PRINTF
+                        printf("socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
+                    #endif
+                    ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_8, P_WARNING, 2, "socketAppConnectionCallBack socket connection %u sequence %u data has sent fail", ulStatusInd->connectionId, ulStatusInd->sequence);
+                }
+            }
+            else
+            {
+                #ifdef USING_PRINTF
+                    printf("socketAppConnectionCallBack invalid connection ul status event");
+                #endif
+                ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_9, P_ERROR, 0, "socketAppConnectionCallBack invalid connection ul status event");
+            }
+            break;
+        }
+        default:
+            #ifdef USING_PRINTF
+                printf("socketAppConnectionCallBack invalid event type %u", connectionEventType);
+            #endif
+            ECOMM_TRACE(UNILOG_PLA_APP, socketAppConnectionCallBack_10, P_ERROR, 1, "socketAppConnectionCallBack invalid event type %u", connectionEventType);
+            break;
+    }
+    
+}
+void Tcp_Recv_fota(uint8_t* P)
+{
+    #ifdef USING_PRINTF
+        printf("fota data handle\n");
+    #endif
+}
+void Tcp_Recv_info(uint8_t* P)
+{
+    switch(*(P+1))
+    {
+        case 0x00://非应答
+            Tcp_serviece=01;
+            break;
+        case 0xfe://应答
+            Tcp_serviece=01;
+            switch(*(P))
+            {
+                case 0x80:
+                    break;
+                case 0x82:
+                    Fota_S.Fota_update_flag=true;
+                    Tcp_Recv_fota(P);
+                    break;
+                default:
+                    Fota_S.Fota_update_flag = false;
+            }
+            break;
+    }
+}
+uint8_t Fota_crc_chk(uint8_t* data,uint8_t length)
+{  
+    uint8_t reg_crc=0x00;
+    while(length--)
+    { 
+        reg_crc ^= *data++;
+    }
+    return reg_crc;
+}
+void Tcp_Send_fota()
+{
+    tcpipConnectionSend(socContext.id, "fota", 5, 0, 0, 0);
+}
+void Tcp_Send_info()
+{
+    static UINT8 send_counter=0;   
+    int len;
+    if(send_counter%1==0)
+    {
+        len = tcpipConnectionSend(socContext.id, {02,00,80}, 4, 0, 0, 0);
+    }
+    if(send_counter%6==0)
+    {
+        len = tcpipConnectionSend(socContext.id, {01 00}, 3, 0, 0, 0);
+    }
+    if(send_counter>=6*10+1)
+    {
+        send_counter=1;
+    }
+    else 
+    {
+        send_counter++;
+    }
+
+    if(len > 0)
+    {
+        #ifdef USING_PRINTF
+            printf("connection %u send len %u success", socContext.id, len);
+        #endif
+        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_7, P_INFO, 2, "connection %u send len %u success", socContext.id, len);  
+    }
+    else
+    {
+        #ifdef USING_PRINTF
+            printf("connection %u sent data fail", socContext.id);
+        #endif
+        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_8, P_ERROR, 1, "connection %u sent data fail", socContext.id);
+    }
+}
+static void Tcp_Task(void* arg)
+{
+    uint16 send_counter;
+    eventCallbackMessage_t *queueItem = NULL;
+    appSetEDRXSettingSync(0,5,1800000);
+    appSetPSMSettingSync(1,3*60*60,10);
+    CHAR   APP_SOCKET_DAEMON_SERVER_IP[] = "120.26.68.165";
+    uint16_t   APP_SOCKET_DAEMON_SERVER_PORT = 14319;
+    INT32 connectionId = -1;
+    INT32 len;
+    UINT8 data[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
+    psEventQueueHandle = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(eventCallbackMessage_t*));
+    if (psEventQueueHandle == NULL)
+    {
+        return;
+    }
+    appSetCFUN(1);
+    while(1){
+        if (xQueueReceive(psEventQueueHandle, &queueItem, portMAX_DELAY))
+        {
+            #ifdef USING_PRINTF
+                printf("Queue receive->0x%x\n", queueItem->messageId);
+            #endif
+            switch(queueItem->messageId)
+            {
+                case QMSG_ID_NW_IP_READY:
+                    connectionId = tcpipConnectionCreate(TCPIP_CONNECTION_PROTOCOL_TCP, PNULL, 0, APP_SOCKET_DAEMON_SERVER_IP, APP_SOCKET_DAEMON_SERVER_PORT, socketAppConnectionCallBack);
+                    if(connectionId >= 0)
+                    {
+                        socContext.id = connectionId;
+                        socContext.status = APP_SOCKET_CONNECTION_CONNECTED;
+                        #ifdef USING_PRINTF
+                            printf("create connection %u success", socContext.id);
+                        #endif
+                        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_2, P_INFO, 1, "create connection %u success", socContext.id);
+                    }
+                    else
                     {
                         #ifdef USING_PRINTF
-                                printf("TCP Not Ready\n");
+                            printf("create connection fail\n");
                         #endif
-                        PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
-                        break;
+                        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_3, P_ERROR, 0, "create connection fail");
                     }
-                    case 1://1代表网络驻网
+                    break;
+                case QMSG_ID_NW_IP_NOREACHABLE:
+                    break;
+                case QMSG_ID_SOCK_SENDPKG:
+                    if (socContext.id >= 0 && socContext.status == APP_SOCKET_CONNECTION_CONNECTED)
                     {
-                        if (getaddrinfo( serverip, serverport , &hints, &server_res ) != 0 )
+                        if(Tcp_Servies)
                         {
-                            #ifdef USING_PRINTF
-                                printf("TCP connect unresolved dns\n");
-                            #endif
+                            Tcp_Send_info();
                         }
-                        Tcp_statuts=2;
-                        break;
                     }
-                    case 2://2代表尝试建立连接
+                    else
                     {
                         #ifdef USING_PRINTF
-                            printf("Connecting...!%d\n",TcpconnectID);
+                            printf("connection %u or status invalid", socContext.id, socContext.status);
                         #endif
-                        sockfd = socket(AF_INET, SOCK_STREAM, 0);
-                        if(sockfd<0)
+                        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_9, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status); 
+                    }
+                    break;
+                case QMSG_ID_NW_IP_SUSPEND:
+                    if (socContext.id >= 0 && socContext.status != APP_SOCKET_CONNECTION_CLOSED)
+                    {
+                        if(tcpipConnectionClose(socContext.id) < 0)
                         {
+                            socContext.id = -1;
+                            socContext.status = APP_SOCKET_CONNECTION_CLOSED;
                             #ifdef USING_PRINTF
-                                printf("socket create error\n");
+                                printf("close connection %u success", socContext.id);
                             #endif
-                            Tcp_statuts=1;
+                            ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_4, P_INFO, 1, "close connection %u success", socContext.id);                            
                         }
                         else
                         {
-                            TcpconnectID = connect(sockfd, (struct sockaddr *) server_res->ai_addr, server_res->ai_addrlen);
-                            if(TcpconnectID<0 && errno != EINPROGRESS)
-                            {
-                                #ifdef USING_PRINTF
-                                    printf("Connect failed!%d,Reconnect:%d\n",TcpconnectID,Reconnect_Num);
-                                #endif
-                                // close(sockfd);
-                                Tcp_statuts=2;
-                                PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
-                                Reconnect_Num++;
-                            }
-                            else
-                            {
-                                Tcp_statuts=3;
-                                Reconnect_Num = 0;
-                            }
-                            if(Reconnect_Num>=20)
-                            {
-                                appSetCFUN(0);
-                                osDelay(10);
-                                appSetCFUN(1);
-                                PSInitEventCallbackTable();
-                                Tcp_statuts=1;
-                                Reconnect_Num = 0;
-                            }
+                            #ifdef USING_PRINTF
+                                printf("close connection %u fail", socContext.id);
+                            #endif
+                            ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_5, P_ERROR, 1, "close connection %u fail", socContext.id);
                         }
-                        break;
                     }
-                    case 3://3代表连接建立成功
+                    else
                     {
-                        PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_WORK);
-                        break;
-                    }
-                    case 4://4代表连接断开
+                        #ifdef USING_PRINTF
+                            printf("connection %u or status invalid", socContext.id, socContext.status);
+                        #endif
+                        ECOMM_TRACE(UNILOG_PLA_APP, ecTestCaseTcpClient_6, P_ERROR, 2, "connection %u or status invalid", socContext.id, socContext.status); 
+                    }                    
+                    break;
+                case QMSG_ID_SOCK_EXIT:
+                    #ifdef USING_PRINTF
+                        printf("socket disconnect\n");
+                    #endif
+                    if (sockfd >= 0)
                     {
-                        Tcp_statuts=2;
-                        break;
+                       close(sockfd);
+                       sockfd = -1;
                     }
-                }
-                break;
-            }
-            case PROCESS_TCP_STATE_WORK:
-            {
-                TcpSendBuffer = (uint8_t *)malloc(3);
-                *(TcpSendBuffer+0) = 0x23;
-                *(TcpSendBuffer+1) = 0x23;
-                *(TcpSendBuffer+2) = 0x02;
-                TcpsendID = send(sockfd, TcpSendBuffer, 3, 0 );
-                if (TcpsendID<0)
-                {
-                    closesocket(sockfd);
-                    TcpconnectID = -1;
-                    Tcp_statuts = 4;
-                    PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
-                }
-                else
-                {
-                    PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
-                }
-                break;
-            }
-            case PROCESS_TCP_STATE_SLEEP:
-            {
-                closesocket(sockfd);
-                #ifdef USING_PRINTF
-                    printf("TCP_STATE_SLEEP\n");
-                #endif
-                Tcp_Sleep_Flag = TRUE;
-                appSetCFUN(0);
-                while(1)
-                {
-                    osDelay(30000/portTICK_PERIOD_MS);
-                }
-                break;
+                    appSetCFUN(0);
+                    free(queueItem);
+                    osThreadExit();
             }
+            free(queueItem);
         }
     }
 }
@@ -461,8 +632,8 @@ void Tcp_Task_Init()
     task_attr.cb_mem = &gProcess_Tcp_Task_t;
     task_attr.cb_size = sizeof(StaticTask_t);
     osThreadNew(Tcp_Task, NULL, &task_attr);
-
 }
+
 //主任务线程初始化
 void Main_Task_Init()
 {
@@ -472,7 +643,6 @@ void Main_Task_Init()
         HAL_UART_RecvFlowControl(false);
     }
     #endif
-    //slpManDeepSlpTimerRegisterExpCb(slpManTimerCb);
     osThreadAttr_t task_attr;
     memset(&task_attr,0,sizeof(task_attr));
     memset(gProcess_Main_TaskStack, 0xA5, PROC_MAIN_TASK_STACK_SIZE);

+ 15 - 2
src/bsp_custom.c

@@ -14,6 +14,12 @@
 #include "plat_config.h"
 #include "debug_log.h"
 
+//#define USING_PRINTF
+
+#ifdef BL_FILE_LOG
+extern uint8_t lockoutState;
+#endif
+
 void GPR_SetUartClk(void)
 {
     GPR_ClockDisable(GPR_UART0FuncClk);
@@ -73,6 +79,7 @@ static void SetPrintUart(usart_port_t port)
                         ARM_USART_FLOW_CONTROL_NONE, 115200ul);
 }
 
+
 #if LOW_POWER_AT_TEST
 slpManSlpState_t CheckUsrdefSlpStatus(void)
 {
@@ -97,10 +104,16 @@ void CheckLockOutState(void){
 		#ifdef USING_PRINTF
 			printf("LOCK_OUT DOWN\r\n");
 		#endif	
+		 #ifdef BL_FILE_LOG
+			 lockoutState=1;
+		#endif
 	}else{
 		#ifdef USING_PRINTF
 			printf("LOCK_OUT UP\r\n",__LINE__);
 		#endif	
+		 #ifdef BL_FILE_LOG
+			 lockoutState=0;
+		#endif
 	}
 }
 
@@ -111,7 +124,7 @@ static void PMU_WakeupPadInit(void)
     {
         false, true,             // group0 posedge, negedge
         true, true,             // group1 posedge, negedge
-        false, false,             // group2 posedge, negedge
+        true, true,             // group2 posedge, negedge
     };
 
     slpManSetWakeupPad(cfg);
@@ -139,7 +152,7 @@ void BSP_CustomInit(void)
     BSP_LoadPlatConfigFromRawFlash();
     rawFlashPlatConfig = BSP_GetRawFlashPlatConfig();
 #ifdef USING_PRINTF
-	SetPrintUart(PORT_USART_0);
+	SetPrintUart(PORT_USART_1);
 #else
     if(rawFlashPlatConfig && (rawFlashPlatConfig->logControl != 0 ))
     {

+ 265 - 4
src/hal_module_adapter.c

@@ -163,10 +163,12 @@ extern ARM_DRIVER_I2C Driver_I2C0;
 extern ARM_DRIVER_SPI Driver_SPI0;
 extern ARM_DRIVER_SPI Driver_SPI1;
 extern ARM_DRIVER_USART Driver_USART2;
+extern ARM_DRIVER_USART Driver_USART1;
 uint8_t gps_uart_recv_buf[GPS_DATA_RECV_BUFFER_SIZE];
 static ARM_DRIVER_SPI   *spiMasterDrv = &CREATE_SYMBOL(Driver_SPI, 1);
 static ARM_DRIVER_I2C   *i2cDrvInstance = &CREATE_SYMBOL(Driver_I2C, 0);
 static ARM_DRIVER_USART *usartHandle =  &CREATE_SYMBOL(Driver_USART, 2);
+static ARM_DRIVER_USART *printfHandle =  &CREATE_SYMBOL(Driver_USART, 1);
 //LED define pin index
 #define LED_INX_MAX    										 (5)
 #define LED_PORT_0      										 (0)
@@ -196,6 +198,190 @@ led_pin_config_t gLedCfg[LED_INX_MAX]={{LED_PORT_0,LED_GPIO_PIN_1,LED_PAD_INDEX1
 									 {LED_PORT_0,LED_GPIO_PIN_4,LED_PAD_INDEX4, PAD_MuxAlt0},\
 								       {LED_PORT_1,LED_GPIO_PIN_5,LED_PAD_INDEX5, PAD_MuxAlt0}};
 
+#ifdef BL_FILE_LOG
+#include <stdarg.h>
+static UINT8 blLogFileNux=0;
+
+//UTCת»»Îª±±¾©Ê±¼ä  º¯Êý¿ÉÖ±½Óµ÷ÓÃ
+static void UTCToBeijing(unsigned char * bjttbuf,unsigned int UTCyear,unsigned char UTCmonth,unsigned char UTCday,unsigned int UTChour,unsigned char UTCminute,unsigned char UTCsecond)
+{
+	int year=0,month=0,day=0,hour=0;
+    int lastday = 0;// ÔµÄ×îºóÒ»ÌìÈÕÆÚ
+    int lastlastday = 0;//ÉÏÔµÄ×îºóÒ»ÌìÈÕÆÚ
+	
+	  year=UTCyear;
+		month=UTCmonth;
+	  day=UTCday;
+	  hour=UTChour+8;//UTC+8ת»»Îª±±¾©Ê±¼ä
+	
+	  if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
+		{
+        lastday = 31;
+        if(month == 3)
+				{
+            if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//ÅжÏÊÇ·ñΪÈòÄê
+                lastlastday = 29;//ÈòÄêµÄ2ÔÂΪ29Ì죬ƽÄêΪ28Ìì
+            else
+                lastlastday = 28;
+        }
+        if(month == 8)
+            lastlastday = 31;
+    }
+    else 
+		if(month == 4 || month == 6 || month == 9 || month == 11)
+		{
+        lastday = 30;
+        lastlastday = 31;
+    }
+    else
+		{
+        lastlastday = 31;
+        if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//ÈòÄêµÄ2ÔÂΪ29Ì죬ƽÄêΪ28Ìì
+            lastday = 29;
+        else
+            lastday = 28;
+    }
+		if(hour >= 24)//µ±Ëã³öµÄʱ´óÓÚ»òµÈÓÚ24£º00ʱ£¬Ó¦¼õÈ¥24£º00£¬ÈÕÆÚ¼ÓÒ»Ìì
+		{
+				hour -= 24;
+				day += 1; 
+				if(day > lastday)//µ±Ëã³öµÄÈÕÆÚ´óÓÚ¸ÃÔÂ×îºóÒ»Ììʱ£¬Ó¦¼õÈ¥¸ÃÔÂ×îºóÒ»ÌìµÄÈÕÆÚ£¬Ô·ݼÓÉÏÒ»¸öÔÂ
+				{ 
+						day -= lastday;
+						month += 1;
+
+						if(month > 12)//µ±Ëã³öµÄÔ·ݴóÓÚ12£¬Ó¦¼õÈ¥12£¬Äê·Ý¼ÓÉÏ1Äê
+						{
+								month -= 12;
+								year += 1;
+						}
+				}
+		}
+		
+		sprintf((char *)bjttbuf,"%04d-%02d-%02d %02d:%02d:%02d ",
+							year,month,day,hour,UTCminute,UTCsecond);	//UTCÈÕÆÚʱ·ÖÃëת»»³É±±¾©Ê±¼ä
+}
+
+static void bluejoy_write_logfile(UINT8 * buf)
+{
+	int32_t err;
+	UINT32 Count;
+	OSAFILE file;
+	while(blLogFileNux){
+		 osDelay(10/portTICK_PERIOD_MS);
+	}
+	blLogFileNux=1;
+	file = OsaFopen("blLog","wb");
+	if(file==NULL){
+		//printf("blLog open fail!\r\n");
+		blLogFileNux=0;
+		return;
+	}
+	if(OsaFseek(file, 0, SEEK_END) != 0)
+	{
+	    //printf("Seek file failed [%d] \r\n",__LINE__);
+	    OsaFclose(file);
+	    blLogFileNux=0;
+	    return;
+	}
+	Count = OsaFwrite(buf, 1, strlen(buf), file);
+	if(Count != (strlen(buf))){
+		//printf("blLog write fail!\r\n");
+
+	}
+	OsaFclose(file);
+	blLogFileNux=0;
+}
+
+void bluejoy_read_logfile(void)
+{
+	int32_t err;
+	UINT32 Count;
+	OSAFILE file;
+	UINT8 rbuf[128+1]={0};
+	UINT8 * flag_p;
+	UINT16 pri_l; 
+	
+	printf("%s start\r\n",__FUNCTION__);
+	while(blLogFileNux){
+		 osDelay(10/portTICK_PERIOD_MS);
+	}
+	blLogFileNux=1;
+	file = OsaFopen("blLog","rb");
+	if(file==NULL){
+		printf("blLog not exst!\r\n");
+		blLogFileNux=0;
+		return;
+	}
+	
+	if(OsaFseek(file, 0, SEEK_SET) != 0)
+	{
+	    printf("Seek file failed [%d] \r\n",__LINE__);
+	    OsaFclose(file);
+	    blLogFileNux=0;
+	    return;
+	}
+		
+	do{	
+		memset(rbuf,0,128);
+		Count = OsaFread(rbuf, 1, 128, file);
+		printf("%s",rbuf);
+				
+	}while(Count==128);
+	
+	OsaFclose(file);
+	blLogFileNux=0;
+	printf("%s end! \r\n",__FUNCTION__);
+}
+
+void bluejoy_del_logfile(void)
+{
+	UINT32 ret;
+	//printf("%s start! \r\n",__FUNCTION__);
+	while(blLogFileNux){
+		 osDelay(10/portTICK_PERIOD_MS);
+	}
+	blLogFileNux=1;
+	OsaFremove("blLog");
+	blLogFileNux=0;
+	FaultDisplay(LED_TURN_OFF);
+	 osDelay(1000/portTICK_PERIOD_MS);
+	FaultDisplay(LED_TURN_ON);
+	 osDelay(1000/portTICK_PERIOD_MS);
+	FaultDisplay(LED_TURN_OFF);
+	 osDelay(1000/portTICK_PERIOD_MS);
+	FaultDisplay(LED_TURN_ON);
+}
+
+
+void bluejoy_printf(BlLogLevel level, const UINT8 *format, ...)
+ {
+	UINT8 buf[128+1];
+	va_list args;
+	OsaUtcTimeTValue    timeUtc;
+	UINT16 year;
+	UINT8 month,day,hour,minite,sec;
+	if(level<BL_LEVEL2)
+		return;
+	appGetSystemTimeUtcSync(&timeUtc);
+	year=(timeUtc.UTCtimer1&0xffff0000)>>16;
+	month=(timeUtc.UTCtimer1&0xff00)>>8;
+	day=timeUtc.UTCtimer1&0xff;
+	hour=(timeUtc.UTCtimer2&0xff000000)>>24;
+	minite=(timeUtc.UTCtimer2&0xff0000)>>16;
+	sec=(timeUtc.UTCtimer2&0xff00)>>8;
+	memset(buf,0,128+1);
+	UTCToBeijing(buf,year,month,day,hour,minite,sec);
+	va_start(args, format);
+	vsnprintf(buf+strlen(buf), 128-strlen(buf), format, args);
+	va_end(args);
+	//printf("%s", buf);
+	bluejoy_write_logfile(buf);
+}
+#endif
+
+
+
 #if 0
 /**
   \fn        void NetSocDisplay(UINT8 soc)
@@ -722,13 +908,15 @@ INT32  HAL_Can_Transmit(Can_TxMsgType Can_TxMsg)
 * ����???��  : len(?����?��?��y?Y��?3��?��,0~8��??��)
 * ?��?��    : ?T
 *******************************************************************************/
-UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf)
+UINT8  HAL_Can_Receive(UINT32 *CAN_ID,UINT8 *CAN_RX_Buf)
 {
-	UINT8 i=0,len=0,temp=0;
+	UINT8 i=0,len=0,temp=0,idh,idl;
  
 	CAN_ReadReg(CANINTF,1,&temp);
 	if(temp & 0x01)
 	{
+		CAN_ReadReg(RXB0SIDH,1,&idh);
+		CAN_ReadReg(RXB0SIDL,1,&idl);
 		CAN_ReadReg(RXB0DLC,1,&len);
 		while(i<len)
 		{	
@@ -737,6 +925,8 @@ UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf)
 		}
 		
 	}else if(temp & 0x02){
+		CAN_ReadReg(RXB1SIDH,1,&idh);
+		CAN_ReadReg(RXB1SIDL,1,&idl);
 		CAN_ReadReg(RXB1DLC,1,&len);
 		while(i<len)
 		{	
@@ -744,8 +934,8 @@ UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf)
 			i++;
 		}
 	}
-	
 	CAN_WriteReg(CANINTF,0);
+	*CAN_ID=(idh<<3)+(idl>>5);
 	return len;
 }
 
@@ -1047,6 +1237,77 @@ static void HAL_I2C_CreateRecvTaskAndQueue(void)
 	g_halI2CInitFlag |=  HAL_I2C_RECV_TASK_QUEUE_CREATED;
 	
 }
+
+
+
+/**
+  \fn     void Usart1Handler(uint8_t* strPtr, uint16_t strLen)
+  \param[in]  PrintfSendStr for  usart port;
+  \brief       config  usart port
+  \return      
+*/
+void PrintfSendStr(const UINT8 *format, ...)
+{
+	va_list args;
+	UINT8 buf[128+1]={0};
+	va_start(args, format);
+	vsnprintf(buf+strlen(buf), 128-strlen(buf), format, args);
+	va_end(args);
+	HAL_UART_SendStr(PORT_USART_1,buf,strlen(buf));
+
+}
+
+#define PRINTF_DATA_RECV_BUFFER_SIZE     						(64)
+uint8_t printf_uart_recv_buf[PRINTF_DATA_RECV_BUFFER_SIZE];
+/**
+  \fn    void PrintfDataRecvCallback(uint32_t event, void* dataPtr, uint32_t dataLen)
+  \param[in]  event   :Data receiving timeout processing and data receiving completion processing;
+  \		    dataPtr : Point to receive data buff
+  \		    dataLen : Received data length	
+  \brief        i2c irq event ,callback function
+  \return      
+*/
+void PrintfDataRecvCallback(UINT32 event, void* dataPtr, UINT32 dataLen)
+{
+	//ECOMM_TRACE(UNILOG_PLA_APP, PrintfDataRecvCallback, P_SIG, 3, "event=%d, dataPtr=%s, dataLen=%d",event,dataPtr,dataLen);
+    slpManStartWaitATTimer(); 
+}
+
+void printfPostSendCallback(hal_uart_send_msg_type_t msgType, void* dataPtr, uint32_t dataLen){
+	// ECOMM_TRACE(UNILOG_PLA_APP, printfPostSendCallback, P_SIG, 3, "msgType=%d, dataPtr=%s, dataLen=%d",msgType,dataPtr,dataLen);
+}
+
+/**
+  \fn     void Usart1Handler(UINT32 baudRate)
+  \param[in]  baudRate for  usart port;
+  \brief       config  usart port
+  \return      
+*/
+void Usart1Handler(UINT32 baudRate)
+{
+	hal_uart_config_t halUartConfig = {0};
+
+	hal_uart_hardware_config_t hwConfig = {
+	                                        ARM_POWER_FULL,
+	                                        ARM_USART_MODE_ASYNCHRONOUS | ARM_USART_DATA_BITS_8 |
+	                                        ARM_USART_PARITY_NONE       | ARM_USART_STOP_BITS_1 |
+	                                        ARM_USART_FLOW_CONTROL_NONE,
+	                                        baudRate
+	                                       };
+
+
+
+	halUartConfig.uartDriverHandler = printfHandle;
+	halUartConfig.recv_cb = PrintfDataRecvCallback;
+	halUartConfig.recvBuffPtr = printf_uart_recv_buf;
+	halUartConfig.recvBuffSize = PRINTF_DATA_RECV_BUFFER_SIZE;
+       halUartConfig.post_send_cb = printfPostSendCallback;
+	HAL_UART_InitHandler(PORT_USART_1, &halUartConfig, &hwConfig, HAL_UART_TASK_CREATE_FLAG_SEND_RECV);
+	HAL_UART_RecvFlowControl(false);
+}
+
+
+
 /**
   \fn         void GsensorI2CCallback(uint32_t event)
   \param[in]  event   : i2c irq event
@@ -1874,5 +2135,5 @@ INT32 posGGAServiceStart(QueueHandle_t handle)
 void posGGAServiceStop( void)
 {	
 	GPSPowerCtr(false);
-	gGPSDataCBfunc = NULL;
+	gpsHandle = NULL;
 }