27,374
社区成员
发帖
与我相关
我的任务
分享
void EC20_Task(void *pvParameters)
{
USART2_Configuration();
USART2_DMA_Tx_Configuration();
USART2_DMA_Rx_Configuration();
while(1)
{
EC20_4G_Poll();
}
}
uint16_t EC20_4G_isr = 12;
uint16_t EC20_4G_Outtime = 0x00;
uint16_t EC20_TCP_port_count = 0x00;
char EC20_send_string[MSCOMM_BUFFER_LENGTH];
char EC20_source_string[MSCOMM_BUFFER_LENGTH];
char EC20_target_string[MSCOMM_BUFFER_LENGTH];
void EC20_4G_Poll(void)
{
BaseType_t xResult;
BaseType_t xStatus;
switch (EC20_4G_isr)
{
case 0:
strcpy(EC20_send_string , "AT\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
EC20_4G_Outtime_Init();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "AT\r\r\nOK\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 1;
}
}
break;
case 1:
if (++EC20_4G_Outtime > 2)
{
EC20_4G_Outtime = 0x00;
EC20_4G_isr = 0;
break;
}
strcpy(EC20_send_string , "ATE1\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "ATE1\r\r\nOK\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 2;
}
}
break;
case 2:
if (++EC20_4G_Outtime > 2)
{
EC20_4G_Outtime = 0x00;
EC20_4G_isr = 0;
break;
}
strcpy(EC20_send_string , "AT+CPIN?\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "AT+CPIN?\r\r\n+CPIN: READY\r\n\r\nOK\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 3;
}
}
break;
case 3:
if (++EC20_4G_Outtime > 2)
{
EC20_4G_Outtime = 0x00;
EC20_4G_isr = 0;
break;
}
strcpy(EC20_send_string , "AT+CREG=?\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "AT+CREG=?\r\r\n+CREG:");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 4;
}
}
break;
case 4:
if (++EC20_4G_Outtime > 2)
{
EC20_4G_Outtime = 0x00;
EC20_4G_isr = 0;
break;
}
strcpy(EC20_send_string , "AT+CSQ\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "AT+CSQ\r\r\n+CSQ:");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 5;
}
}
break;
case 5:
if (++EC20_4G_Outtime > 2)
{
EC20_4G_Outtime = 0x00;
EC20_4G_isr = 0;
break;
}
strcpy(EC20_send_string , "AT+QIDEACT=1\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "AT+QIDEACT=1\r\r\nOK\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 7;
}
}
break;
case 7:
strcpy(EC20_send_string , "AT+QIOPEN=1,0,\"TCP\",\"218.6.144.60\",5000,0,2\r\0");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "\r\nCONNECT\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_TCP_port_count = 0x00;
EC20_4G_isr = 20;
break;
}
if (++EC20_TCP_port_count >= 8)
{
EC20_TCP_port_count = 0x00;
EC20_4G_isr = 10;
break;
}
EC20_4G_isr = 0;
}
break;
case 9:
strcpy(EC20_send_string , "AT+QPOWD\r");
MB_USART2.sendCount = EC20_Connect_Buffer_Init(EC20_send_string , MB_USART2.send_buffer);
USART2_Begin_Send();
EC20_4G_isr = 11;
break;
case 10:
GPIO_EC20_RESET_0();
vTaskDelay(1000 / portTICK_RATE_MS);
GPIO_EC20_RESET_1();
EC20_4G_isr = 11;
break;
case 11:
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string ,"\r\nRDY\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 0;
break;
}
EC20_4G_isr = 0;
}
break;
case 12:
GPIO_EC20_POWER_SLEEP();
vTaskDelay(200 / portTICK_RATE_MS);
GPIO_EC20_POWER_NO_SLEEP();
vTaskDelay(15000 / portTICK_RATE_MS);
EC20_4G_isr = 10;
break;
case 20:
xStatus = xQueueReceive( xQueue, &Buffer, portMAX_DELAY);
if( xStatus == pdPASS )
{
switch (Buffer[0])
{
case 2:
Over |= 0x01; //bit0=1,表示收到SD2405ALPI_Task任务的消息队列数据
MODBUS_Clock.year = Buffer[1];
MODBUS_Clock.month = Buffer[2];
MODBUS_Clock.day = Buffer[3];
MODBUS_Clock.hour = Buffer[4];
MODBUS_Clock.minute = Buffer[5];
MODBUS_Clock.second = Buffer[6];
MODBUS_Clock.week = Buffer[7];
break;
case 3:
Over |= 0x02; //bit1=1,表示收到DI1_Task任务的消息队列数据
MODBUS_DI1_1 = Buffer[1];
MODBUS_DI1_2 = Buffer[2];
break;
case 4:
Over |= 0x04; //bit2=1,表示收到DI2_Task任务的消息队列数据
MODBUS_DI2_1 = Buffer[1];
MODBUS_DI2_2 = Buffer[2];
break;
}//switch (Buffer[0])
}//if( xStatus == pdPASS )
//收到数据然后整理发送出去
//收到数据然后整理发送出去
//收到数据然后整理发送出去
xResult = xSemaphoreTake(xSemaphore, portMAX_DELAY);
if (xResult == pdTRUE)
{
strcpy(EC20_target_string , "\r\nNO CARRIER\r\n");
hex_to_string(MB_USART2.mscomm_buffer , EC20_source_string , MB_USART2.receCount);
if (strstr(EC20_source_string , EC20_target_string) != NULL)
{
EC20_4G_Outtime_Init();
EC20_4G_isr = 10;
break;
}
}
break;
}//switch (EC20_4G_isr)
}