|
@@ -1,6 +1,6 @@
|
|
|
/*******************************
|
|
|
*
|
|
|
- * 骑享程序V2版本
|
|
|
+ * 骑享OTA更新测试
|
|
|
*
|
|
|
* ****************************/
|
|
|
#include "bsp.h"
|
|
@@ -22,16 +22,13 @@
|
|
|
#include "slpman_ec616.h"
|
|
|
#include "plat_config.h"
|
|
|
|
|
|
-//基础定义
|
|
|
-#define Batt_Cell_Num (17)//默认数值14、17
|
|
|
-#define Batt_Temp_Num (7)//默认数值5、7
|
|
|
-#define Batt_Cell_Num_2 (Batt_Cell_Num*2)
|
|
|
-//主任务调度定义
|
|
|
-#define PROC_MAIN_TASK_STACK_SIZE (512)
|
|
|
-static StaticTask_t gProcess_Main_Task_t;
|
|
|
-static UINT8 gProcess_Main_TaskStack[PROC_MAIN_TASK_STACK_SIZE];
|
|
|
+
|
|
|
+//Main Area
|
|
|
+#define PROC_MAIN_TASK_STACK_SIZE (1024)
|
|
|
uint8_t deepslpTimerID = DEEPSLP_TIMER_ID7;
|
|
|
uint8_t MainSlpHandler = 0xff;
|
|
|
+static StaticTask_t gProcess_Main_Task_t;
|
|
|
+static UINT8 gProcess_Main_TaskStack[PROC_MAIN_TASK_STACK_SIZE];
|
|
|
typedef enum
|
|
|
{
|
|
|
PROCESS_STATE_IDLE = 0,
|
|
@@ -40,13 +37,16 @@ typedef enum
|
|
|
}process_Main;
|
|
|
static process_Main gProcess_Main_Task = PROCESS_STATE_IDLE;
|
|
|
#define PROC_MAIN_STATE_SWITCH(a) (gProcess_Main_Task = a)
|
|
|
-volatile bool Sleep_Flag = false;//主线程睡眠标志位
|
|
|
|
|
|
-//Tcp线程定义
|
|
|
+//tcp area
|
|
|
#define PROC_TCP_TASK_STACK_SIZE (1024)
|
|
|
static StaticTask_t gProcess_Tcp_Task_t;
|
|
|
static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
|
|
|
-#define APP_EVENT_QUEUE_SIZE (10)
|
|
|
+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
|
|
|
{
|
|
@@ -57,12 +57,7 @@ typedef enum
|
|
|
}process_TCP;
|
|
|
static process_TCP gProcess_Tcp_Task = PROCESS_TCP_STATE_IDLE;
|
|
|
#define PROC_TCP_STATE_SWITCH(a) (gProcess_Tcp_Task = a)
|
|
|
-
|
|
|
-//Fota线程定义
|
|
|
-#define PROC_FOTA_TASK_STACK_SIZE (1024)
|
|
|
-static StaticTask_t gProcess_Fota_Task_t;
|
|
|
-static UINT8 gProcess_Fota_TaskStack[PROC_FOTA_TASK_STACK_SIZE];
|
|
|
-Fota_Type Fota_Struct;
|
|
|
+volatile bool Tcp_Sleep_Flag = false;
|
|
|
|
|
|
//睡眠进出函数
|
|
|
static void appBeforeHib(void *pdata, slpManLpState state)
|
|
@@ -75,12 +70,14 @@ static void appBeforeHib(void *pdata, slpManLpState state)
|
|
|
slpManAONIOLatchEn(AonIOLatch_Enable);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
static void appAfterHib(void *pdata, slpManLpState state)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("Try Hibernate Failed:%d \n",state);
|
|
|
#endif
|
|
|
}
|
|
|
+
|
|
|
static void appBeforeSlp1(void *pdata, slpManLpState state)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
@@ -88,12 +85,15 @@ static void appBeforeSlp1(void *pdata, slpManLpState state)
|
|
|
#endif
|
|
|
slpManAONIOLatchEn(AonIOLatch_Enable);
|
|
|
}
|
|
|
+
|
|
|
static void appAfterSlp1(void *pdata, slpManLpState state)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("After Sleep1:%d \n",state);
|
|
|
#endif
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
static void appBeforeSlp2(void *pdata, slpManLpState state)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
@@ -101,6 +101,7 @@ static void appBeforeSlp2(void *pdata, slpManLpState state)
|
|
|
#endif
|
|
|
slpManAONIOLatchEn(AonIOLatch_Enable);
|
|
|
}
|
|
|
+
|
|
|
static void appAfterSlp2(void *pdata, slpManLpState state)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
@@ -110,26 +111,28 @@ static void appAfterSlp2(void *pdata, slpManLpState state)
|
|
|
// 主任务线程
|
|
|
static void Main_Task(void* arg)
|
|
|
{
|
|
|
- uint32_t sleep_count = 0;
|
|
|
- uint32_t Uart_time = 0;
|
|
|
- uint32_t sleep_time_value;
|
|
|
+ UINT16 Can_index = 0;
|
|
|
+ UINT16 Uart_index = 0;
|
|
|
+ UINT16 Tcp_index = 0;
|
|
|
+ uint32_t sleep_index = 0;
|
|
|
+ uint32_t sleep_time_flag;
|
|
|
int32_t inParam = 0xAABBCCDD;
|
|
|
- uint32_t Chrgend_Work_time = 18000;
|
|
|
- uint32_t Wakeup_Work_time = 3000;
|
|
|
- uint32_t Sleep_Time = 20000;
|
|
|
+ uint32_t Chrgend_Work_time = 1800;
|
|
|
+ uint32_t Wakeup_Work_time = 120;
|
|
|
+ uint32_t Sleep_Time = 120;
|
|
|
//上述参数应写入文件里
|
|
|
- slpManSlpState_t State;
|
|
|
- uint8_t cnt;
|
|
|
slpManWakeSrc_e Wakeup_source;
|
|
|
-
|
|
|
+ PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
|
|
|
NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
|
|
|
NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
|
|
|
NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
|
|
|
NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
|
|
|
FaultDisplay(LED_TURN_OFF);
|
|
|
NVIC_EnableIRQ(PadWakeup1_IRQn);
|
|
|
+
|
|
|
slpManSetPmuSleepMode(true,SLP_HIB_STATE,false);
|
|
|
slpManApplyPlatVoteHandle("MainSlp",&MainSlpHandler);
|
|
|
+ slpManPlatVoteDisableSleep(MainSlpHandler, SLP_SLP2_STATE);
|
|
|
slpManRegisterUsrdefinedBackupCb(appBeforeHib,&inParam,SLPMAN_HIBERNATE_STATE);
|
|
|
slpManRegisterUsrdefinedRestoreCb(appAfterHib,NULL,SLPMAN_HIBERNATE_STATE);
|
|
|
slpManRegisterUsrdefinedBackupCb(appBeforeSlp1,NULL,SLPMAN_SLEEP1_STATE);
|
|
@@ -137,8 +140,8 @@ static void Main_Task(void* arg)
|
|
|
slpManRegisterUsrdefinedBackupCb(appBeforeSlp2,NULL,SLPMAN_SLEEP2_STATE);
|
|
|
slpManRegisterUsrdefinedRestoreCb(appAfterSlp2,NULL,SLPMAN_SLEEP2_STATE);
|
|
|
|
|
|
- slpManPlatVoteDisableSleep(MainSlpHandler, SLP_SLP1_STATE);
|
|
|
slpManSlpState_t slpstate = slpManGetLastSlpState();
|
|
|
+
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("slpstate:%d \n",slpstate);
|
|
|
#endif
|
|
@@ -146,18 +149,17 @@ static void Main_Task(void* arg)
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("Wakeup_source:%d \n",Wakeup_source);
|
|
|
#endif
|
|
|
- PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
|
|
|
if (Wakeup_source==0)
|
|
|
{
|
|
|
- sleep_time_value = Wakeup_Work_time;
|
|
|
+ sleep_time_flag = Wakeup_Work_time;
|
|
|
}
|
|
|
else if (Wakeup_source==1)
|
|
|
{
|
|
|
- sleep_time_value = Wakeup_Work_time;
|
|
|
+ sleep_time_flag = Wakeup_Work_time;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- sleep_time_value = Chrgend_Work_time;
|
|
|
+ sleep_time_flag = Chrgend_Work_time;
|
|
|
}
|
|
|
if((slpstate == SLP_SLP2_STATE) || (slpstate == SLP_HIB_STATE))
|
|
|
{
|
|
@@ -167,60 +169,50 @@ static void Main_Task(void* arg)
|
|
|
{
|
|
|
PROC_MAIN_STATE_SWITCH(PROCESS_STATE_WORK);
|
|
|
}
|
|
|
- //线程初始化完成
|
|
|
while (true)
|
|
|
{
|
|
|
switch(gProcess_Main_Task)
|
|
|
{
|
|
|
case PROCESS_STATE_IDLE:
|
|
|
{
|
|
|
+ // 暂时不区分唤醒
|
|
|
PROC_MAIN_STATE_SWITCH(PROCESS_STATE_WORK);
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_STATE_WORK:
|
|
|
{
|
|
|
- osDelay(100/portTICK_PERIOD_MS);
|
|
|
- sleep_count++;
|
|
|
- Uart_time++;
|
|
|
- if (Uart_time >10)
|
|
|
+ osDelay(10/portTICK_PERIOD_MS);
|
|
|
+ Can_index++;
|
|
|
+ Uart_index++;
|
|
|
+ Tcp_index++;
|
|
|
+ sleep_index++;
|
|
|
+ if (Tcp_index >=100)//Tcp 1s 调用一次
|
|
|
{
|
|
|
- Uart_time = 0;
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_WORK);
|
|
|
- }
|
|
|
- if(Fota_Struct.Fota_update)
|
|
|
- {
|
|
|
- sleep_count = 0;
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("[%d]_sleep count \r\n",sleep_index);
|
|
|
+ #endif
|
|
|
+ Tcp_index = 0;
|
|
|
+ PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_LINK);
|
|
|
}
|
|
|
- if (sleep_count >=sleep_time_value)
|
|
|
+ if (sleep_index >=sleep_time_flag*100)
|
|
|
{
|
|
|
PROC_MAIN_STATE_SWITCH(PROCESS_STATE_SLEEP);
|
|
|
- sleep_count = 0;
|
|
|
+ sleep_index = 0;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_STATE_SLEEP:
|
|
|
{
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("[%d]Main_sleep\r\n",__LINE__);
|
|
|
- #endif
|
|
|
- while(true)
|
|
|
- {
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
|
|
|
- if(Uart_Sleep_State)
|
|
|
- break;
|
|
|
- Sleep_Flag = true;
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("Uart_Sleep_State:%d\r\n",Uart_Sleep_State);
|
|
|
- #endif
|
|
|
- osDelay(1000/portTICK_PERIOD_MS);
|
|
|
- }
|
|
|
+ osDelay(10000);
|
|
|
+ slpManSlpState_t State;
|
|
|
+ uint8_t cnt;
|
|
|
if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("[%d]We Can Check Vote Main State, state=%d, cnt=%d\r\n",__LINE__,State,cnt);
|
|
|
#endif
|
|
|
}
|
|
|
- slpManPlatVoteForceEnableSleep(MainSlpHandler, SLP_SLP1_STATE); //增加强制投票
|
|
|
+ slpManPlatVoteForceEnableSleep(MainSlpHandler, SLP_SLP2_STATE); //增加强制投票
|
|
|
if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
|
|
|
{
|
|
|
#ifdef USING_PRINTF
|
|
@@ -230,6 +222,7 @@ static void Main_Task(void* arg)
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("[%d]Waiting sleep\r\n",__LINE__);
|
|
|
#endif
|
|
|
+ FaultDisplay(LED_TURN_ON);
|
|
|
slpManSlpState_t slpstate = slpManPlatGetSlpState();
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("which slpstate can go now :%d \n",slpstate);
|
|
@@ -241,14 +234,17 @@ static void Main_Task(void* arg)
|
|
|
{
|
|
|
slpManDeepSlpTimerDel(deepslpTimerID);
|
|
|
}
|
|
|
- slpManDeepSlpTimerStart(deepslpTimerID, Sleep_Time);
|
|
|
+ slpManDeepSlpTimerStart(deepslpTimerID, Sleep_Time*1000);
|
|
|
osDelay(60000/portTICK_PERIOD_MS);
|
|
|
}
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
-//NB事件回调函数
|
|
|
static INT32 socketRegisterPSUrcCallback(urcID_t eventID, void *param, UINT32 paramLen)
|
|
|
{
|
|
|
CmiSimImsiStr *imsi = NULL;
|
|
@@ -316,28 +312,13 @@ static void Tcp_Task(void* arg)
|
|
|
CHAR serverip[] = "120.26.68.165";
|
|
|
CHAR serverport[] = "14319";
|
|
|
struct addrinfo hints, *server_res;
|
|
|
- int TcpsendID = -1;
|
|
|
memset( &hints, 0, sizeof( hints ) );
|
|
|
hints.ai_socktype = SOCK_STREAM;
|
|
|
hints.ai_protocol = IPPROTO_TCP;
|
|
|
- PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
- static INT32 sockfd = -1;
|
|
|
- int TcpconnectID = -1;
|
|
|
uint8_t* TcpSendBuffer=NULL;
|
|
|
- uint8_t Reconnect_Num = 0;//重新连接次数
|
|
|
- appSetEDRXSettingSync(0,5,1800000);
|
|
|
- appSetPSMSettingSync(1,3*60*60,10);
|
|
|
- slpManWakeSrc_e Wakeup_source;
|
|
|
- Wakeup_source = slpManGetWakeupSrc();//获取唤醒源
|
|
|
- if(Wakeup_source==0)
|
|
|
- {
|
|
|
- Tcp_statuts = 0;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- Tcp_statuts = 1;
|
|
|
- }
|
|
|
- appSetCFUN(1);
|
|
|
+ uint8_t Reconnect_Num = 0;
|
|
|
+ int TcpsendID = -1;
|
|
|
+ PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
while(true)
|
|
|
{
|
|
|
switch(gProcess_Tcp_Task)
|
|
@@ -369,7 +350,6 @@ static void Tcp_Task(void* arg)
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("TCP connect unresolved dns\n");
|
|
|
#endif
|
|
|
- Tcp_statuts=0;
|
|
|
}
|
|
|
Tcp_statuts=2;
|
|
|
break;
|
|
@@ -395,7 +375,7 @@ static void Tcp_Task(void* arg)
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("Connect failed!%d,Reconnect:%d\n",TcpconnectID,Reconnect_Num);
|
|
|
#endif
|
|
|
- close(sockfd);
|
|
|
+ // close(sockfd);
|
|
|
Tcp_statuts=2;
|
|
|
PROC_TCP_STATE_SWITCH(PROCESS_TCP_STATE_IDLE);
|
|
|
Reconnect_Num++;
|
|
@@ -405,17 +385,17 @@ static void Tcp_Task(void* arg)
|
|
|
Tcp_statuts=3;
|
|
|
Reconnect_Num = 0;
|
|
|
}
|
|
|
- if(Reconnect_Num>=20)//重新连接
|
|
|
+ if(Reconnect_Num>=20)
|
|
|
{
|
|
|
appSetCFUN(0);
|
|
|
- osDelay(100);
|
|
|
+ osDelay(10);
|
|
|
appSetCFUN(1);
|
|
|
PSInitEventCallbackTable();
|
|
|
Tcp_statuts=1;
|
|
|
Reconnect_Num = 0;
|
|
|
}
|
|
|
}
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
case 3://3代表连接建立成功
|
|
|
{
|
|
@@ -432,19 +412,27 @@ static void Tcp_Task(void* arg)
|
|
|
}
|
|
|
case PROCESS_TCP_STATE_WORK:
|
|
|
{
|
|
|
- TcpSendBuffer = (uint8_t *)malloc(1);
|
|
|
+ TcpSendBuffer = (uint8_t *)malloc(3);
|
|
|
*(TcpSendBuffer+0) = 0x23;
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("TCP_STATE_WORK!\n");
|
|
|
- #endif
|
|
|
- TcpsendID = send(sockfd, TcpSendBuffer, 1, 0 );
|
|
|
- free(TCPSendBuffer);
|
|
|
+ *(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);
|
|
|
- //deregisterPSEventCallback(socketRegisterPSUrcCallback);//注销NB网络事件函数
|
|
|
#ifdef USING_PRINTF
|
|
|
printf("TCP_STATE_SLEEP\n");
|
|
|
#endif
|
|
@@ -454,6 +442,7 @@ static void Tcp_Task(void* arg)
|
|
|
{
|
|
|
osDelay(30000/portTICK_PERIOD_MS);
|
|
|
}
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -468,20 +457,22 @@ void Tcp_Task_Init()
|
|
|
task_attr.name = "Tcp_Task";
|
|
|
task_attr.stack_mem = gProcess_Tcp_TaskStack;
|
|
|
task_attr.stack_size = PROC_TCP_TASK_STACK_SIZE;
|
|
|
- task_attr.priority = osPriorityBelowNormal7;
|
|
|
- task_attr.cb_mem = &gProcess_Tcp_TaskStack;
|
|
|
+ task_attr.priority = osPriorityNormal;
|
|
|
+ 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()
|
|
|
{
|
|
|
#ifndef USING_PRINTF
|
|
|
- if(BSP_GetPlatConfigItemValue(PLAT_CONFIG_ITEM_LOG_CONTROL) != 0)
|
|
|
- {
|
|
|
- HAL_UART_RecvFlowControl(false);
|
|
|
- }
|
|
|
+ if(BSP_GetPlatConfigItemValue(PLAT_CONFIG_ITEM_LOG_CONTROL) != 0)
|
|
|
+ {
|
|
|
+ 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);
|