X1UWaterWmbusISK/hardinterface/E7025/nb_driver_E7025.c

3401 lines
102 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
/************************************************************************************
* @Copyright (c) :(C)2017, Qindao ieslab Co., Ltd
* @FileName :pic24_nb_driver.c
* @Author :QDIES PLATFORM TEAM
* @Version :V1.0
* @Date :2017-03-01
* @Description :
************************************************************************************/
#include "sys_config.h"
#ifdef NB_MODULE_E7025
#ifdef __cplusplus
extern "C"
{
#endif
#include "nb_uart_driver_e7025.h"
#include "nb_driver_e7025.h"
#include "stdio.h"
#include <time.h>
#include "UWater_timer1uS_driver.h"
#include "UWater_uart_driver.h"
#include "UWater_Rtcc_Driver.h"
#include "UWater_frame_app.h"
/********************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>************************************/
NBIOT_PARA Nbiot_Para;
NBIOT_MSG Nbiot_Msg;
static NBIOT_SEND_DATA Nbiot_Send_Data;
//static u8 *g_s_csq_value;
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>)
u8 g_s_nbiot_main_state = NBIOT_S_IDLE;
//u8 s_send_state;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
u8 g_s_nbiot_task_flag = TASK_INIT;
u8 g_s_nbiot_mode_flag = NO_NBIOT_TASK;
u8 g_s_nbiot_send_type;
u8 g_s_nbiot_read_ccid_flag = FALSE;
u8 g_s_nbiot_read_ECL_flag = FALSE;
u8 flag_clear_ncsearfcn = 0;
u8 nb_power_flag = FALSE;
u8 s_init_state = S_INIT_POWER_ON;
u8 s_coap_connect_state = S_COAP_CONNECT_START;
u8 s_udp_connect_state = S_UDP_CONNECT_START;
u8 s_coap_send_state = S_SEND_START;
u8 s_udp_send_state = S_SEND_START;
u8 s_power_off_state = S_START;
char c_AT_NMGS[40 + UP_BUF_SIZE*2];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ƚ<EFBFBD>С
//ip<69><70>ַ<EFBFBD>Ͷ˿<CDB6>ָ<EFBFBD><D6B8>
unsigned char *coap_ip;
u16 coap_port;
unsigned char *udp_ip1;
u16 udp_port1;
unsigned char *udp_ip2;
u16 udp_port2;
u8 nbiot_temp_connect_type=NBIOT_CONNECT_COAP;
/*****************************<2A>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>***********************************/
void NbiotInitMachine(void);
void CoapConnectMachine(void);
void UdpConnectMachine(void);
void CoapSendDataMachine(void);
void UdpSendDataMachine(void);
void NbiotPowerOffMachine(void);
void UdpReadDataMachine(void);
//static void NbiotMsgDeal(void);
void NbiotReadECLSNRMachine(void);
void StartUdpSendData(void);
void sys_get_three_code (void);
//void sys_get_net_state (void);
void OnenetConnectMachine(void);
void OneNetSendDataMachine(void);
void StartOnenetAckRev(void);
void NbiotRevAckMachine(void);
/*****************************<2A>ڲ<EFBFBD><DAB2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ӿ<EFBFBD>**********************************/
void set_timer_1s(u16 time);
u16 check_timer_1s(void);
void set_timer_1ms(u16 time);
u16 check_timer_1ms(void);
void CoapStartConnect(void);
void StartCoapSendData(void);
void StartNbiotInit(void);
void UdpStartConnect(u8 udp_num);
void OneNetStartConnect(void);
void StartOnenetSendData(void);
void TcpStartConnect(void);
void TcpConnectMachine(void);
void TcpSendDataMachine(void);
/*****************************<2A>ⲿ<EFBFBD>ӿ<EFBFBD>****************************************/
void NB_Power_Disable(void)
{
Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, FALSE);
nb_power_flag = FALSE;
}
void NB_Power_Enable(void)
{
Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, TRUE);
nb_power_flag = TRUE;
}
u8 If_NB_Poweron(void)
{
return nb_power_flag;
}
/***************************************************************************
* @fun_name void NbModuleIOInit(void)
* @brief ģ<EFBFBD><EFBFBD><EFBFBD>IO<EFBFBD><EFBFBD>ģ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>PSM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><EFBFBD>
***************************************************************************/
void NbModuleIOInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
stcGpioCfg.enDir = GpioDirOut; ///< <20>˿ڷ<CBBF><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enDrv = GpioDrvL; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enPu = GpioPuDisable; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><>
stcGpioCfg.enPd = GpioPdDisable;
stcGpioCfg.enOD = GpioOdDisable; ///< <20>˿ڿ<CBBF>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enCtrlMode = GpioAHB; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>->AHB
Gpio_Init(BAT_NB_PORT, BAT_NB_PIN, &stcGpioCfg); //ģ<><EFBFBD><E9B9A9>IO
Gpio_Init(RSTN_NB_PORT, RSTN_NB_PIN, &stcGpioCfg);
Gpio_Init(NB_PSM_WAKE_PORT, NB_PSM_WAKE_PIN, &stcGpioCfg);
Gpio_Init(PWR_NB_PORT, PWR_NB_PIN, &stcGpioCfg); //<2F><>Դ<EFBFBD><D4B4><EFBFBD>ƽ<EFBFBD>
Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, FALSE);
Gpio_WriteOutputIO(PWR_NB_PORT, PWR_NB_PIN, FALSE);
Gpio_WriteOutputIO(RSTN_NB_PORT, RSTN_NB_PIN, FALSE);
Gpio_WriteOutputIO(NB_PSM_WAKE_PORT , NB_PSM_WAKE_PIN, FALSE);
}
/***************************************************************************
* @fun_name void NbiotMainMachine()
* @brief NBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***************************************************************************/
void NbiotMainMachine(void)
{
switch (g_s_nbiot_main_state)
{
case NBIOT_S_IDLE:
{
if(TRUE == UdpIfNeedReadData())
{
ClearUdpReadDataFlag();
g_s_nbiot_main_state = NBIOT_READ_UDP_DATA;
}
if(TRUE == NbiotGetRevAck())//<2F>յ<EFBFBD>ONNET<45>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ƚ<EFBFBD><C8BD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>һ<EFBFBD><D2BB>
{
ClearNbiotGetRevAck();
StartOnenetAckRev();
g_s_nbiot_main_state = NBIOT_REV_ACK;
}
}
break;
case NBIOT_POWER_INIT:
{
if (TASK_INIT == g_s_nbiot_task_flag) //<2F><><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>ʼ״̬
{
NbiotInitMachine(); //ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC>
}
else if (TASK_SUCCESS == g_s_nbiot_task_flag) //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
{
u8 temp_iccid_buf[20];
NbiotGetICCID((char*)temp_iccid_buf); //<2F>й<EFBFBD><D0B9>ƶ<EFBFBD><C6B6><EFBFBD>Ϊ:898600;898602;898604;898607 <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>898603;898611
if(temp_iccid_buf[4] == '0')
{
if((temp_iccid_buf[5] == '0') || (temp_iccid_buf[5] == '2') || (temp_iccid_buf[5] == '4') || (temp_iccid_buf[5] == '7'))
{
Nbiot_Para.Telecom = SIM_CARD_MOBILE;
}
}
Nbiot_Para.net_state = NB_ON_LINE;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
else //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
{
g_s_nbiot_task_flag = TASK_INIT; //<2F><><EFBFBD><EFBFBD>־λ
g_s_nbiot_main_state = NBIOT_S_IDLE; //
}
}
break;
case NBIOT_NET_OPEN:
{
if (TASK_INIT == g_s_nbiot_task_flag)
{
if(nbiot_temp_connect_type == NBIOT_CONNECT_COAP)
{
/*if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)//<2F>ƶ<EFBFBD><C6B6><EFBFBD>
{
OnenetConnectMachine();//<2F><>ONNETƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
}
else//<2F><><EFBFBD>ſ<EFBFBD>
{
CoapConnectMachine(); //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
} */
TcpConnectMachine(); //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
}
else if(nbiot_temp_connect_type == NBIOT_CONNECT_UDP1)
{
UdpConnectMachine();
}
else if(nbiot_temp_connect_type == NBIOT_CONNECT_UDP2)
{
UdpConnectMachine();
}
/*else if(nbiot_temp_connect_type == NBIOT_CONNECT_COAP)
{
TcpConnectMachine(); //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
}*/
else
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
else if (TASK_SUCCESS == g_s_nbiot_task_flag)
{
if(nbiot_temp_connect_type == NBIOT_CONNECT_COAP)
{
Nbiot_Para.coap_state = CONNECT_ON_LINE;
}
else if(nbiot_temp_connect_type == NBIOT_CONNECT_UDP1)
{
Nbiot_Para.udp1_state = CONNECT_ON_LINE;
}
else if(nbiot_temp_connect_type == NBIOT_CONNECT_UDP2)
{
Nbiot_Para.udp2_state = CONNECT_ON_LINE;
}
/*else if (nbiot_temp_connect_type == NBIOT_CONNECT_TCP1)
{
Nbiot_Para.tcp1_state = CONNECT_ON_LINE;
} */
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
else
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
break;
case NBIOT_DATA_SEND:
{
if (g_s_nbiot_task_flag == TASK_INIT)
{
if(g_s_nbiot_send_type == SEND_TYPE_COAP)
{
/*if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)//<2F>ƶ<EFBFBD><C6B6><EFBFBD>
{
OneNetSendDataMachine();
}
else//<2F><><EFBFBD>ſ<EFBFBD>
{
CoapSendDataMachine(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}*/
TcpSendDataMachine(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}
else if(g_s_nbiot_send_type == SEND_TYPE_UDP1)
{
UdpSendDataMachine(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}
else if(g_s_nbiot_send_type == SEND_TYPE_UDP2)
{
UdpSendDataMachine(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}
/*else if(g_s_nbiot_send_type == SEND_TYPE_TCP1)
{
TcpSendDataMachine(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}*/
else
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
else//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>״̬
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
break;
case NBIOT_POWER_OFF:
{
if (TASK_INIT == g_s_nbiot_task_flag)
{
NbiotPowerOffMachine(); //<2F>ϵ<EFBFBD><CFB5>ػ<EFBFBD>
}
else
{
g_s_nbiot_mode_flag = NO_NBIOT_TASK;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
Nbiot_Para.net_state = NB_OFF_LINE;
Nbiot_Para.coap_state = CONNECT_OFF_LINE;
Nbiot_Para.udp1_state = CONNECT_OFF_LINE;
Nbiot_Para.udp2_state = CONNECT_OFF_LINE;
}
}
break;
case NBIOT_READ_UDP_DATA:
{
if (TASK_INIT == g_s_nbiot_task_flag)
{
UdpReadDataMachine(); //
}
else
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
break;
case NBIOT_REV_ACK:
{
if (TASK_INIT == g_s_nbiot_task_flag)
{
NbiotRevAckMachine(); //
}
else
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
}
break;
default:
{
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
break;
}
}
/***************************************************************************
* @fun_name u8 NbiotIfIdle()
* @brief <EFBFBD><EFBFBD>ѯģ<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>״̬
***************************************************************************/
u8 NbiotIfIdle(void)
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
return TASK_IDLE;
}
else
{
return TASK_BUSY;
}
}
/***************************************************************************
* @fun_name u8 NbiotIfOnline()
* @brief <EFBFBD><EFBFBD>ѯNBIOT<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***************************************************************************/
u8 NbiotIfOnline(void)
{
if(NB_ON_LINE == Nbiot_Para.net_state)
{
return TRUE;
}
else
{
return FALSE;
}
}
/***************************************************************************
* @fun_name u8 ConncetIfOnline()
* @brief <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***************************************************************************/
u8 ConncetIfOnline(u8 connect_type)
{
if(connect_type == NBIOT_CONNECT_COAP)
{
if (CONNECT_ON_LINE == Nbiot_Para.coap_state)
{
return TRUE;
}
else
{
return FALSE;
}
}
else if(connect_type == NBIOT_CONNECT_UDP1)
{
if (CONNECT_ON_LINE == Nbiot_Para.udp1_state)
{
return TRUE;
}
else
{
return FALSE;
}
}
else if(connect_type == NBIOT_CONNECT_UDP2)
{
if (CONNECT_ON_LINE == Nbiot_Para.udp2_state)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*else if(connect_type == NBIOT_CONNECT_TCP1)
{
if (CONNECT_ON_LINE == Nbiot_Para.tcp1_state)
{
return TRUE;
}
else
{
return FALSE;
}
}*/
return FALSE;
}
/***************************************************************************
* @fun_name void NbiotOnlineTask(u8 *state)
* @brief NBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] state:״̬<EFBFBD><EFBFBD>Ϣ
***************************************************************************/
void NbiotOnlineTask(u8 *state)
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
if (!NbiotIfOnline())
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
Nbiot_Send_Data.state = state; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
*state = NBIOT_ING;
g_s_nbiot_mode_flag = ONLINE_MODE;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_POWER_INIT;
StartNbiotInit();
}
}
else
{
*state = NBIOT_ONLINE;
}
}
else
{
*state = NBIOT_ERROR;
}
}
/***************************************************************************
* @fun_name void NB_NetConnectStart
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] state:״̬<EFBFBD><EFBFBD>Ϣ
***************************************************************************/
void NB_NetConnectStart(unsigned char* temp_ip, u16 temp_port, u8 connect_type)
{
if(connect_type == NBIOT_CONNECT_COAP)
{
//Nbiot_Para.Telecom = SIM_CARD_TELECOM;//debug ǿ<>Ƹ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ƽ̨ͨ<CCA8><CDA8>
coap_ip = temp_ip;
coap_port = temp_port;
/*if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)//<2F>ƶ<EFBFBD><C6B6><EFBFBD>
{
OneNetStartConnect();
}
else//<2F><><EFBFBD>ſ<EFBFBD>
{
CoapStartConnect();
}*/
TcpStartConnect();
nbiot_temp_connect_type = NBIOT_CONNECT_COAP;
}
else if(connect_type == NBIOT_CONNECT_UDP1)
{
udp_ip1 = temp_ip;
udp_port1 = temp_port;
UdpStartConnect(NBIOT_CONNECT_UDP1);
}
else if(connect_type == NBIOT_CONNECT_UDP2)
{
udp_ip2 = temp_ip;
udp_port2 = temp_port;
UdpStartConnect(NBIOT_CONNECT_UDP2);
}
/*else if(connect_type == NBIOT_CONNECT_TCP1)
{
coap_ip = temp_ip;
coap_port = temp_port;
TcpStartConnect();
}*/
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_NET_OPEN;
}
u8 getNB_NetConnectType(void)
{
return nbiot_temp_connect_type;
}
/***************************************************************************
* @fun_name void NbiotSendTask(u8 *addr, u16 len, u8 send_type,u8 *state)
* @brief NBIOT<EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>׵<EFBFBD>ַ len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[out] state:״̬<EFBFBD><EFBFBD>Ϣ
* @retval None
* @other state(NBIOT_ING<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>, NBIOT_SUCCES<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
***************************************************************************/
void NbiotSendTask(u8 *addr, u16 len, u8 send_type,u8 *state)
{
if ((NBIOT_S_IDLE == g_s_nbiot_main_state) && (len > 0) && (len <= UP_BUF_SIZE))
{
Nbiot_Send_Data.buf = addr; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
Nbiot_Send_Data.len = len; //ֵ<><D6B5><EFBFBD><EFBFBD>
Nbiot_Send_Data.state = state; //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
*state = NBIOT_ING;
g_s_nbiot_mode_flag = SEND_MODE;
g_s_nbiot_send_type = send_type;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_DATA_SEND;
StartNbiotSendData();
}
else
{
*state = NBIOT_ERROR;
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 GetNbiotSendType(void)
{
return g_s_nbiot_send_type;
}
/***************************************************************************
* @fun_name void NbiotReadCsqTask(u8 *out_csq,u8 *state)
* @brief NBIOT<EFBFBD><EFBFBD>ѯ<EFBFBD>ź<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] out_csq<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* @param[out] state:״̬<EFBFBD><EFBFBD>Ϣ
* @retval None
* @other state(CSQ_ING<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>, CSQ_SUCCES<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
***************************************************************************/
/*void NbiotTcpOpenTask(void)
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
if(!TcpIfOnline())
{
g_s_nbiot_mode_flag = ONLINE_MODE;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_TCP_OPEN;
TcpStartConnect();
}
}
}*/
void NbiotReadECLSNRTask(u8 *state)
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
// g_s_ecl_val = out_ecl;
Nbiot_Send_Data.state = state;
*state = ECL_SNR_ING;
g_s_nbiot_mode_flag = READ_ECL_SNR;
g_s_nbiot_read_ECL_flag = FALSE;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_READ_ECL_SNR;
}
else
{
*state = ECL_SNR_ERROR;
}
}
/***************************************************************************
* @fun_name u8 NbiotIfSleep()
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] None
* @param[out] None
* @retval TRUE: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> FALSE:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @other None
***************************************************************************/
u8 NbiotIfSleep(void)
{
if (NBIOT_S_IDLE == g_s_nbiot_main_state)
{
return TRUE;
}
else
{
return FALSE;
}
}
/***************************************************************************
* @fun_name void NbiotPreSleep()
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] None
* @param[out] None
* @retval None
* @other None
***************************************************************************/
void NbiotPreSleep(void)
{
NB_Power_Disable(); //<2F>жϵ<D0B6>Դ
UartPreSleep(NB_UART_COM);
g_s_nbiot_main_state = NBIOT_S_IDLE;
Nbiot_Para.net_state = NB_OFF_LINE;
Nbiot_Para.coap_state = CONNECT_OFF_LINE;
Nbiot_Para.udp1_state = CONNECT_OFF_LINE;
Nbiot_Para.udp2_state = CONNECT_OFF_LINE;
//Nbiot_Para.tcp1_state = CONNECT_OFF_LINE;
//<2F><><EFBFBD><EFBFBD>NB<4E><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
stcGpioCfg.enDir = GpioDirOut; ///< <20>˿ڷ<CBBF><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enDrv = GpioDrvL; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enPu = GpioPuDisable; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-><3E><>
stcGpioCfg.enPd = GpioPdDisable;
stcGpioCfg.enOD = GpioOdDisable; ///< <20>˿ڿ<CBBF>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enCtrlMode = GpioAHB; ///< <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>->AHB
Gpio_Init(BAT_NB_PORT, BAT_NB_PIN, &stcGpioCfg); //ģ<><EFBFBD><E9B9A9>IO
Gpio_Init(RSTN_NB_PORT, RSTN_NB_PIN, &stcGpioCfg);
Gpio_Init(NB_PSM_WAKE_PORT, NB_PSM_WAKE_PIN, &stcGpioCfg);
Gpio_Init(PWR_NB_PORT, PWR_NB_PIN, &stcGpioCfg); //<2F><>Դ<EFBFBD><D4B4><EFBFBD>ƽ<EFBFBD>
Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, FALSE);
Gpio_WriteOutputIO(PWR_NB_PORT, PWR_NB_PIN, FALSE);
Gpio_WriteOutputIO(RSTN_NB_PORT, RSTN_NB_PIN, FALSE);
Gpio_WriteOutputIO(NB_PSM_WAKE_PORT , NB_PSM_WAKE_PIN, FALSE);
Gpio_Init(LPUART1_TX_PORT, LPUART1_TX_PIN, &stcGpioCfg);
Gpio_WriteOutputIO(LPUART1_TX_PORT, LPUART1_TX_PIN, FALSE); //TXҲ<58><D2B2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stcGpioCfg.enDir = GpioDirIn; //RX<52><58><EFBFBD><EFBFBD>
Gpio_Init(LPUART1_RX_PORT, LPUART1_RX_PIN, &stcGpioCfg);
}
/***************************************************************************
* @fun_name void NbiotWakeSleep()
* @brief <EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] None
* @param[out] None
* @retval None
* @other None
***************************************************************************/
void NbiotWakeSleep(void)
{
}
/***************************************************************************
* @fun_name u8 NbiotOfflineReason()
* @brief <EFBFBD><EFBFBD>ѯNBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>
* @param[in] None
* @param[out] None
* @retval NBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @other None
***************************************************************************/
//u8 NbiotOfflineReason(void)
//{
// return Nbiot_Para.offline_reason;
//}
/******************************<2A>ڲ<EFBFBD>״̬<D7B4><CCAC>***********************************/
//
void StartNbiotInit(void)
{
s_init_state = S_INIT_POWER_ON;//
}
/***************************************************************************
* @fun_name void NbiotInitMachine()
* @brief NBIOT<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
* @param[in] None
* @param[out] None
* @retval None
* @other None
***************************************************************************/
#define MODULE_POWER_DELAY_TIME 1000 //mS
#define MODULE_RESET_DELAY_TIME 1000 //mS
//AT+QBAND AT+QBAND=1,5 //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϊ BAND 5
//<2F>й<EFBFBD><D0B9>ƶ<EFBFBD><C6B6><EFBFBD>Ϊ:898600;898602;898604;898607 <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>898603;898611
void NbiotInitMachine_E7025(void)
{
static u8 s_at_error_count = 0; //<2F><>¼AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>ʱ<EEB3AC><CAB1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
static const char* c_ATE1 = "ATE1\r"; //E7025<32>򿪻<EFBFBD><F2BFAABB><EFBFBD>
static const char* c_AT_IMEI = "AT+CGSN=1\r";
static const char* c_AT_CIMI = "AT+CIMI\r";
static const char* c_AT_ICCID = "AT+ECICCID\r";//E7025
static const char* c_AT_CMEE = "AT+CMEE=1\r"; //<2F><><EFBFBD><EFBFBD>ERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
static const char* c_AT_CPSMS = "AT+CPSMS=0\r"; //<2F>ر<EFBFBD>PSMģʽ
static const char* c_AT_NPTWEDRXS = "AT+CEDRXS=0\r"; //<2F>ر<EFBFBD>eDRXģʽ
static const char* c_AT_CSQ = "AT+CSQ\r"; //<2F><>ѯ<EFBFBD>ź<EFBFBD>ֵ
static const char* c_AT_CEREG = "AT+CEREG?\r";
static const char* c_AT_CGATT = "AT+CGATT?\r";
static const char* c_AT_ECCESQS = "AT+ECCESQS=0\r";//<2F>ر<EFBFBD><D8B1>źŸ<C5BA><C5B8>±<EFBFBD><C2B1><EFBFBD>
static const char* c_AT_ECSTATUS = "AT+ECSTATUS\r";//<2F><>ѯ<EFBFBD>źŵȹؼ<C8B9><D8BC><EFBFBD><EFBFBD><EFBFBD>
static u8 c_AT_CGDCONT_APN[APN_SIZE+50] = "AT+CGDCONT=1,\"IP\",\""; //ָ<><D6B8>APN,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ<D0A1>̶<EFBFBD>20<32>ֽ<EFBFBD>+APN<50><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ټ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD>ռ<EFBFBD>
static const char* c_AT_CFUN0 = "AT+CFUN=0\r"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ģʽ
static const char* c_AT_CFUN1 = "AT+CFUN=1\r"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
switch (s_init_state)
{
case S_INIT_POWER_ON://NBģ<42><C4A3><EFBFBD>͵<EFBFBD>
{
NbModuleIOInit(); //<2F><>ʼ<EFBFBD><CABC>Ĭ<EFBFBD><C4AC>ģ<EFBFBD><C4A3><EFBFBD>ϵ<EFBFBD>
UartInit(NB_UART_COM, BAUD9600, DATA_BIT_8, STOPBIT_1, UART_NONE_PARITY,UART_LPUART_Disable);
RSTN_NB_LOW();//ģ<>鸴λʹ<CEBB><CAB9>
PWR_NB_HIG();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
NB_Power_Enable(); //<2F>򿪵<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ʱ1S,<2C>ȴ<EFBFBD><C8B4>ϵ<EFBFBD><CFB5>ȶ<EFBFBD>
set_timer_1ms(MODULE_POWER_DELAY_TIME);
s_init_state = S_INIT_RESET_HIGH;//S_INIT_PWRKEY_LOW;
}
break;
case S_INIT_RESET_HIGH://<2F><><EFBFBD>ɸ<EFBFBD>λNBģ<42><C4A3>
{
if (!check_timer_1ms())
{
RSTN_NB_HIG(); //<2F>ߵ<EFBFBD>ƽ
s_init_state = S_INIT_POWER_ON_WAIT; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ѯCSQ<53><51>CEREG<45><47>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѽ<EFBFBD>Լ<EFBFBD><D4BC>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1> <20><><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
set_timer_1s(5); //<2F>ȴ<EFBFBD>NBģ<42><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>5S --5<><35>ʱ<EFBFBD><EFBFBD><E4B2BB> <20><>ʱ<EFBFBD><CAB1><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
break;
case S_INIT_POWER_ON_WAIT://<2F>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>ʱ
{
if (!check_timer_1s())
{
s_at_error_count = 0; //ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s_init_state = S_INIT_ATS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
break;
case S_INIT_ATS://<2F>򿪻<EFBFBD><F2BFAABB><EFBFBD>, ȷ<><C8B7>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_ATE1, strlen(c_ATE1), cst_AT_No_AT);
s_init_state = S_INIT_ATS_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_INIT_ATS_R://<2F>ȴ<EFBFBD>"ATE1"Ӧ<><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_IMEI; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ѯIMEI
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR)) //Ӧ<><D3A6><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
{
if (++s_at_error_count >= NUM_AT_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_IMEI; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ѯIMEI
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ATS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_ASK_IMEI: //<2F><>ʼ<EFBFBD><CABC>ѯIMEI<45><49>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_IMEI, strlen(c_AT_IMEI), cst_AT_No_AT_IMEI);
s_init_state = S_INIT_ASK_IMEI_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_INIT_ASK_IMEI_R://<2F>ȴ<EFBFBD>IMEIӦ<49><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CIMI;
set_timer_1ms(2 * AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_CIMI_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CIMI;
set_timer_1ms(2 * AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ASK_IMEI;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_ASK_CIMI://<2F><>ʼ<EFBFBD><CABC>ѯCIMI
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CIMI, strlen(c_AT_CIMI), cst_AT_No_AT_CIMI);
s_init_state = S_INIT_ASK_CIMI_R;
set_timer_1ms(3*AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_INIT_ASK_CIMI_R://<2F>ȴ<EFBFBD>CIMIӦ<49><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_ICCID; //<2F><>ʼ<EFBFBD><CABC>ѯICCID
set_timer_1ms(2*AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_CIMI_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_ICCID; //<2F><>ʼ<EFBFBD><CABC>ѯICCID
set_timer_1ms(2*AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ASK_CIMI;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_ASK_ICCID://<2F><>ʼ<EFBFBD><CABC>ѯICCID
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_ICCID, strlen(c_AT_ICCID), cst_AT_No_AT_ICCID);
s_init_state = S_INIT_ASK_ICCID_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_INIT_ASK_ICCID_R://<2F>ȴ<EFBFBD>ICCIDӦ<44><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
//<2F><>IMEI IMSI ICCID ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>RAM
sys_get_three_code();
if(0)//if(0 == Sys_data_object.product_test_state)
{
//Sys_data_object.product_test_state = 1; //<2F><>Ƭ<EFBFBD><C6AC><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ȡ
s_init_state = S_INIT_POWER_ON;
g_s_nbiot_task_flag = TASK_INIT;
StartPowerOffTask(); //<2F><><EFBFBD>ùػ<C3B9><D8BB><EFBFBD><EFBFBD><EFBFBD>
}
else
{
s_init_state = S_INIT_CMEE; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_ICCID_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_CMEE; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ASK_ICCID;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_CMEE: //<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CMEE, strlen(c_AT_CMEE), cst_AT_No_AT_CMEE);
s_init_state = S_INIT_CMEE_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_INIT_CMEE_R://<2F>ȴ<EFBFBD>CMEEӦ<45><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
s_init_state = S_TCP_CPSMS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_CMEE_ERROR)
{
s_at_error_count = 0;
s_init_state = S_TCP_CPSMS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_CMEE;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_TCP_CPSMS://<2F><><EFBFBD>ùر<C3B9>PSMģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CPSMS, strlen(c_AT_CPSMS), cst_AT_No_AT_CPSMS);
s_init_state = S_TCP_CPSMS_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_TCP_CPSMS_R:
{
if (NbiotCheckAtAck() == UART_OK)//Ӧ<><D3A6><EFBFBD><EFBFBD>ȷ-<2D><>һ<EFBFBD><D2BB>
{
s_at_error_count = 0;
s_init_state = S_TCP_NPTWEDRXS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_CPSMS_ERROR)
{
s_at_error_count = 0;
s_init_state = S_TCP_NPTWEDRXS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_TCP_CPSMS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_TCP_NPTWEDRXS://<2F>ر<EFBFBD>eDRXģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_NPTWEDRXS, strlen(c_AT_NPTWEDRXS), cst_AT_No_AT_NPTWEDRXS);
s_init_state = S_TCP_NPTWEDRXS_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_TCP_NPTWEDRXS_R://<2F>ر<EFBFBD>eDRXģʽ --<2D>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_init_state = S_INIT_AT_CGDCONT;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_NPTWEDRXS_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_AT_CGDCONT;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_TCP_NPTWEDRXS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
//////////////////////////////////////////////////////////
case S_INIT_CFUN0://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CFUN0, strlen((const char*) c_AT_CFUN0), cst_AT_No_AT_CFUN);
s_init_state = S_INIT_CFUN0_R;
set_timer_1ms(2 * AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_INIT_CFUN0_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1ms( AT_COMMAND_SEND_INTERVAL_TIME);
s_init_state = S_INIT_AT_CGDCONT;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_CFUN_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_AT_CGDCONT;
}
else
{
s_init_state = S_INIT_CFUN0;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
}
break;
case S_INIT_AT_CGDCONT://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(!check_timer_1ms())
{
u8 ip_apn = 19;
int i;
for(i = 0; i < Sys_data_object.P1.apn[1]; i++)
{
c_AT_CGDCONT_APN[ip_apn++] = Sys_data_object.P1.apn[2 + i];
}
c_AT_CGDCONT_APN[ip_apn++] = '"';
c_AT_CGDCONT_APN[ip_apn++] = '\r';
NbiotUartSend((u8*) c_AT_CGDCONT_APN, ip_apn, cst_AT_No_AT_CGDCONT);
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
s_init_state = S_INIT_AT_CGDCONT_R;
}
}
break;
case S_INIT_AT_CGDCONT_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
s_init_state = S_INIT_ASK_CSQ;
}
else if ((NbiotCheckAtAck() == UART_ERROR) || (!check_timer_1ms()))
{
s_at_error_count++;
if (s_at_error_count >= AT_ERROR)
{
s_at_error_count = 0;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
s_init_state = S_INIT_ASK_CSQ;
}
else
{
s_init_state = S_INIT_AT_CGDCONT;
}
}
}
break;
case S_INIT_CFUN1://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CFUN1, strlen((const char*) c_AT_CFUN1), cst_AT_No_AT_CFUN);
s_init_state = S_INIT_CFUN1_R;
set_timer_1ms(2 * AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_INIT_CFUN1_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1ms( AT_COMMAND_SEND_INTERVAL_TIME);
s_init_state = S_INIT_ASK_CSQ;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_CFUN_ERROR)
{
s_at_error_count = 0;
set_timer_1ms( AT_COMMAND_SEND_INTERVAL_TIME);
s_init_state = S_INIT_ASK_CSQ;
}
else
{
s_init_state = S_INIT_CFUN1;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
}
break;
//////////////////////////////////////////////
case S_INIT_ASK_CSQ://<2F><>ѯCSQ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CSQ, strlen(c_AT_CSQ), cst_AT_No_AT_CSQ);
s_init_state = S_INIT_ASK_CSQ_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_INIT_ASK_CSQ_R://<2F>ȴ<EFBFBD>CSQӦ<51><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
s_init_state = S_INIT_AT_ECCESQS;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))
{
if (++s_at_error_count >= NUM_AT_CSQ_ERROR)
{
s_at_error_count = 0;
s_init_state = S_INIT_AT_ECCESQS; //<2F><>ʼ<EFBFBD><CABC>ѯCEREG
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ASK_CSQ;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_AT_ECCESQS://<2F>ر<EFBFBD><D8B1>źŸ<C5BA><C5B8>±<EFBFBD><C2B1><EFBFBD>
{
if (!check_timer_1s())
{
NbiotUartSend((u8*) c_AT_ECCESQS, strlen(c_AT_ECCESQS), cst_AT_No_AT_ECCESQS);
set_timer_1s(2);
s_init_state = S_INIT_AT_ECCESQS_R;
}
}
break;
case S_INIT_AT_ECCESQS_R:
{
if (!check_timer_1s())
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_init_state = S_INIT_AT_ECSTATUS;
}
else
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
s_at_error_count++;
if (s_at_error_count >= 2)
{
s_at_error_count = 0;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_init_state = S_INIT_AT_ECSTATUS;
}
else
{
s_init_state = S_INIT_AT_ECCESQS;
set_timer_1s(1);
}
}
}
}
break;
case S_INIT_AT_ECSTATUS://<2F><>ѯ<EFBFBD>źŵȹؼ<C8B9><D8BC><EFBFBD><EFBFBD><EFBFBD>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*)c_AT_ECSTATUS, strlen((const char*) c_AT_ECSTATUS), cst_AT_No_AT_ECSTATUS);
set_timer_1ms(4*AT_COMMAND_SEND_INTERVAL_TIME);//2s
s_init_state = S_INIT_AT_ECSTATUS_R;
}
}
break;
case S_INIT_AT_ECSTATUS_R:
{
if (!check_timer_1ms())
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CEREG;
}
else
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
s_at_error_count++;
if (s_at_error_count >= 2)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CEREG;
}
else
{
s_init_state = S_INIT_AT_ECSTATUS;
}
}
}
}
break;
case S_INIT_ASK_CEREG://<2F><>ʼ<EFBFBD><CABC>ѯCEREG
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CEREG, strlen((const char*) c_AT_CEREG), cst_AT_No_AT_CEREG);
s_init_state = S_INIT_ASK_CEREG_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME * 2);
}
}
break;
case S_INIT_ASK_CEREG_R://<2F>ȴ<EFBFBD>CEREGӦ<47><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><>ȷӦ<C8B7><D3A6>
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CGATT;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))//Ӧ<><D3A6><EFBFBD><EFBFBD>ʱ
{
u8 NB_login_ask_times = FrameCheckParaApp(FramePara_NbParaLoginAckTimes);
if (NB_login_ask_times < 30)
{
NB_login_ask_times = 30;
}
if (NB_login_ask_times > 150)
{
NB_login_ask_times = 150;
}
if (++s_at_error_count >= NB_login_ask_times)
{
s_at_error_count = 0;
s_init_state = S_INIT_ASK_CGATT;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_init_state = S_INIT_ASK_CEREG;
set_timer_1ms(2 * AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
case S_INIT_ASK_CGATT://<2F><>ʼ<EFBFBD><CABC>ѯCGATT
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CGATT, strlen(c_AT_CGATT), cst_AT_No_AT_CGATT_how);
s_init_state = S_INIT_ASK_CGATT_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME*2); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_INIT_ASK_CGATT_R://<2F>ȴ<EFBFBD>CGATTӦ<54><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><>ȷӦ<C8B7><D3A6>
{
s_at_error_count = 0;
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
s_init_state = S_INIT_POWER_ON; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB7B5>
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))//Ӧ<><D3A6><EFBFBD><EFBFBD>ʱ
{
if (++s_at_error_count >= NUM_AT_CGATT_ERROR)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = NBIOT_ERROR;
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
s_init_state = S_INIT_POWER_ON;
}
else
{
s_init_state = S_INIT_ASK_CGATT;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
}
break;
default:
{
s_at_error_count = 0;
s_init_state = S_INIT_POWER_ON;
}
break;
}
}
void NbiotInitMachine(void)
{
NbiotInitMachine_E7025();
}
//
void CoapStartConnect(void)
{
s_coap_connect_state = S_COAP_CONNECT_START;
}
/***************************************************************************
* @fun_name static void CoapConnectMachine()
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Coap״̬<EFBFBD><EFBFBD>
***************************************************************************/
void CoapConnectMachine_E7025(void)
{
static u8 s_at_error_count = 0;
unsigned char *nbiot_ip;
u16 nbiot_port;
static char c_AT_CTM2MSETPM[50] = "AT+CTM2MSETPM=\"117.060.157.137\",05683,86400\r"; //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>IOTƽ̨<C6BD><CCA8><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
static const char* c_AT_CTM2MREG = "AT+CTM2MREG\r"; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOTƽ̨
static const char* c_AT_CCLK = "AT+CCLK?\r"; //<2F><>ѯ<EFBFBD><D1AF>վʱ<D5BE><CAB1>
switch (s_coap_connect_state)
{
case S_COAP_CONNECT_START:
{
s_at_error_count=0;
s_coap_connect_state = S_AT_CTM2MSET;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_AT_CTM2MSET://<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>IOTƽ̨<C6BD><CCA8><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
{
if (!check_timer_1ms())
{
u16 len = 15; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nbiot_port = coap_port;
nbiot_ip = coap_ip;
//IP <20>Ĵ洢<C4B4><E6B4A2>Ȼʹ<C8BB><CAB9>ˮ<EFBFBD><CBAE>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桰.<2E><><EFBFBD>ţ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int i;
for (i = 0; i < 4; i++)
{
if (nbiot_ip[i] < 10)
{
c_AT_CTM2MSETPM[len++] = nbiot_ip[i] + 0x30;
}
else if (nbiot_ip[i] < 100)
{
c_AT_CTM2MSETPM[len++] = (nbiot_ip[i] / 10) + 0x30;
c_AT_CTM2MSETPM[len++] = (nbiot_ip[i] % 10) + 0x30;
}
else
{
c_AT_CTM2MSETPM[len++] = (nbiot_ip[i] / 100) + 0x30;
c_AT_CTM2MSETPM[len++] = (nbiot_ip[i] / 10) % 10 + 0x30;
c_AT_CTM2MSETPM[len++] = (nbiot_ip[i] % 10) + 0x30;
}
c_AT_CTM2MSETPM[len++] = '.';
}
len--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
c_AT_CTM2MSETPM[len++] = '\"';
c_AT_CTM2MSETPM[len++] = ',';
c_AT_CTM2MSETPM[len++] = ((nbiot_port) / 10000) + 0x30;
c_AT_CTM2MSETPM[len++] = (((nbiot_port) % 10000) / 1000) + 0x30;
c_AT_CTM2MSETPM[len++] = (((nbiot_port) % 1000) / 100) + 0x30;
c_AT_CTM2MSETPM[len++] = (((nbiot_port) % 100) / 10) + 0x30;
c_AT_CTM2MSETPM[len++] = ((nbiot_port) % 10) + 0x30;
c_AT_CTM2MSETPM[len++] = ',';
c_AT_CTM2MSETPM[len++] = '8';
c_AT_CTM2MSETPM[len++] = '6';
c_AT_CTM2MSETPM[len++] = '4';
c_AT_CTM2MSETPM[len++] = '0';
c_AT_CTM2MSETPM[len++] = '0';
c_AT_CTM2MSETPM[len++] = '\r';
NbiotUartSend((u8*)c_AT_CTM2MSETPM, len, cst_AT_No_AT_CTM2MSET);
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_coap_connect_state = S_AT_CTM2MSET_R;
}
}
break;
case S_AT_CTM2MSET_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_coap_connect_state = S_AT_CTM2MREG;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if (!check_timer_1ms() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_CTM2MSET_ERROR)//
{
s_at_error_count = 0;
s_coap_connect_state = S_AT_CTM2MREG;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_coap_connect_state = S_AT_CTM2MSET;
}
}
}
break;
case S_AT_CTM2MREG://ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOTƽ̨
{
if(!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CTM2MREG, strlen(c_AT_CTM2MREG), cst_AT_No_AT_CTM2MREG);
set_timer_1s(8);
s_coap_connect_state = S_AT_CTM2MREG_R;
}
}
break;
case S_AT_CTM2MREG_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_coap_connect_state = S_AT_COAP_CCLK;
set_timer_1s(1);
}
else if (!check_timer_1s() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_CTM2MREG_ERROR)//
{
*Nbiot_Send_Data.state = NBIOT_ERROR;
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
s_at_error_count = 0;
set_timer_1s(1);
s_coap_connect_state = S_COAP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
else
{
set_timer_1ms(8*AT_COMMAND_SEND_INTERVAL_TIME);
s_coap_connect_state = S_AT_CTM2MREG;
}
}
}
break;
case S_AT_COAP_CCLK://<2F><>ʼ<EFBFBD><CABC>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
if (!check_timer_1s())
{
NbiotUartSend((u8*) c_AT_CCLK, strlen(c_AT_CCLK), cst_AT_No_AT_CCLK);
s_coap_connect_state = S_AT_COAP_CCLK_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_AT_COAP_CCLK_R://<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><>ȷӦ<C8B7><D3A6>
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = NBIOT_ONLINE;
s_coap_connect_state = S_COAP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))//Ӧ<><D3A6><EFBFBD><EFBFBD>ʱ
{
if (++s_at_error_count >= NUM_AT_CCLK_ERROR)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = NBIOT_ONLINE;
s_coap_connect_state = S_COAP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
else
{
s_coap_connect_state = S_COAP_CCLK;
set_timer_1s(1);
}
}
}
break;
default:
{
s_coap_connect_state = S_COAP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
break;
}
}
void CoapConnectMachine(void)
{
CoapConnectMachine_E7025();
}
void StartNbiotSendData(void)
{
if(g_s_nbiot_send_type == SEND_TYPE_COAP)
{
/*if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)//<2F>ƶ<EFBFBD><C6B6><EFBFBD>
{
StartOnenetSendData();
}
else//<2F><><EFBFBD>ſ<EFBFBD>
{
StartCoapSendData(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
}*/
StartTcpSendData();
}
else if(g_s_nbiot_send_type == SEND_TYPE_UDP1)
{
StartUdpSendData(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
UdpStartCheckData();//<2F><>ѯUDP<44><50><EFBFBD><EFBFBD>
}
else if(g_s_nbiot_send_type == SEND_TYPE_UDP2)
{
StartUdpSendData(); //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>״̬<D7B4><CCAC>
UdpStartCheckData();//<2F><>ѯUDP<44><50><EFBFBD><EFBFBD>
}
}
#if SEND_ACKID_ENABLE
u16 Send_AckID = 0;
#endif
//
void StartCoapSendData(void)
{
s_coap_send_state = S_SEND_START;
}
void CoapSendDataMachine_E7025(void)
{
static u8 s_at_error_count = 0; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static const u8 temp_AT_Buffer[]= {"AT+CTM2MSEND="};
switch (s_coap_send_state)
{
case S_SEND_START:
{
s_coap_send_state = S_SEND_DATA; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ᱨERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ1S<31><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_SEND_DATA:
{
if (!check_timer_1ms())
{
u16 len = 13;//8; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int i;
for(i=0; i<13; i++)
{
c_AT_NMGS[i]=temp_AT_Buffer[i];
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (i = 0; i < Nbiot_Send_Data.len; i++)
{
if ((*(Nbiot_Send_Data.buf + i) >> 4) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x30;
}
if ((*(Nbiot_Send_Data.buf + i) & 0x0F) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x30;
}
}
c_AT_NMGS[len++] = '\r';
NbiotUartSend((u8*) c_AT_NMGS, len, cst_AT_No_AT_NMGS);
set_timer_1s(4);
s_coap_send_state = S_SEND_DATA_R;
}
}
break;
case S_SEND_DATA_R:
{
if (NbiotCheckAtAck() == UART_OK) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
g_s_nbiot_task_flag = TASK_SUCCESS;
*Nbiot_Send_Data.state = NBIOT_SUCCESS;
s_coap_send_state = S_SEND_START;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= 2)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_NMGS;
g_s_nbiot_task_flag = TASK_FAIL;
s_coap_send_state = S_SEND_START;
}
else
{
s_coap_send_state = S_SEND_DATA_R;
}
}
}
break;
default:
{
s_coap_send_state = S_SEND_START;
}
break;
}
}
void CoapSendDataMachine(void)
{
CoapSendDataMachine_E7025();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP
void UdpStartConnect(u8 udp_num)
{
nbiot_temp_connect_type = udp_num;
s_udp_connect_state = S_UDP_CONNECT_START;
}
/***************************************************************************
* @fun_name void UdpConnectMachine(void)
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP״̬<EFBFBD><EFBFBD>
***************************************************************************/
void UdpConnectMachine_E7025(void)
{
static u8 s_at_error_count = 0;
static char c_AT_QIOPEN[100];
switch (s_udp_connect_state)
{
case S_UDP_CONNECT_START: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
{
s_at_error_count=0;
s_udp_connect_state = S_UDP_QIOPEN;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_UDP_QIOPEN:
{
if (!check_timer_1ms())
{
u16 len = 21; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char strings_temp[50];
memset(c_AT_QIOPEN,0,sizeof(c_AT_QIOPEN));
memset(strings_temp,0,sizeof(strings_temp));
strcpy(c_AT_QIOPEN,"AT+ECSOCR=DGRAM,17,1234,1,AF_INET\r"); //UDP
len = strlen(c_AT_QIOPEN);
NbiotUartSend((u8*)c_AT_QIOPEN, len, cst_AT_No_AT_QIOPEN);
set_timer_1s(2);
s_udp_connect_state = S_UDP_QIOPEN_R;
}
}
break;
case S_UDP_QIOPEN_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_udp_connect_state = S_UDP_Wait;
set_timer_1s(1);
}
else if (!check_timer_1s() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= AT_ERROR)//
{
s_at_error_count = 0;
s_udp_connect_state = S_UDP_Wait;
set_timer_1s(1);
}
else
{
s_udp_connect_state = S_UDP_QIOPEN;
}
}
}
break;
case S_UDP_Wait:
{
if((!check_timer_1s()))
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = NBIOT_ONLINE;
s_udp_connect_state = S_UDP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
}
break;
default:
{
s_udp_connect_state = S_UDP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
break;
}
}
void UdpConnectMachine(void)
{
UdpConnectMachine_E7025();
}
//TdpConnectMachine
//ģ<><C4A3>ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
S_TCP_CONNECT_START=0,
S_TCP_QIOPEN,
S_TCP_QIOPEN_R,
S_TCP_NCDP_CK,
S_TCP_NCDP_CK_R,
S_TCP_SUCCESS,
S_TCP_FAIL
}TYP_AT_CMDCODE;
const char tcp_socket_buf[6]={'0','1','2','3','4','5'};
u8 tcp_socket_index=0;
TYP_AT_CMDCODE s_tcp_connect_state=S_TCP_CONNECT_START;
static char stringbuffer_temp[256];
void TcpStartConnect(void)
{
s_tcp_connect_state = S_TCP_CONNECT_START;
}
void TcpConnectMachine(void)
{
unsigned char *nbiot_ip;
u16 nbiot_port;
static u8 s_at_error_count = 0;
//static const u8 temp_AT_Buffer[34]= {"AT+ECSOCR=DGRAM,17,1234,1,AF_INET\r"};
static const u8 temp_AT_Buffer[34]= {"AT+ECSOCR=STREAM,6,1234,1,AF_INET\r"};//TCP
static char c_AT_QIOPEN[50];
switch (s_tcp_connect_state)
{
case S_TCP_CONNECT_START: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
{
s_at_error_count=0;
s_tcp_connect_state = S_TCP_QIOPEN;
tcp_socket_index = 0;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_TCP_QIOPEN://<2F><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
if (!check_timer_1ms())
{
u16 len = 0; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int i;
for(i=0; i<34; i++)
{
c_AT_QIOPEN[i]=temp_AT_Buffer[i];
}
if(tcp_socket_index>4)
{
tcp_socket_index = 0;
}
c_AT_QIOPEN[22] = tcp_socket_buf[tcp_socket_index];//<2F><><EFBFBD><EFBFBD>socket
len = 34;
NbiotUartSend((u8*)c_AT_QIOPEN, len, cst_AT_No_AT_QIOPEN);
set_timer_1s(5);
s_tcp_connect_state = S_TCP_QIOPEN_R;
}
}
}
break;
case S_TCP_QIOPEN_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_NCDP_CK;
set_timer_1s(1);
}
else if (!check_timer_1s() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= 3)
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_FAIL;
set_timer_1s(1);
}
else
{
s_tcp_connect_state = S_TCP_QIOPEN;
}
}
}
break;
case S_TCP_NCDP_CK://<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
if (!check_timer_1s())
{
int ip_len = 0;
nbiot_port = coap_port;
nbiot_ip = coap_ip;
memset(stringbuffer_temp,0,sizeof(stringbuffer_temp));
//"AT+ECSOCO=1,"183.230.174.137",6065"
//IP <20>Ĵ洢<C4B4><E6B4A2>Ȼʹ<C8BB><CAB9>ˮ<EFBFBD><CBAE>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桰.<2E><><EFBFBD>ţ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
stringbuffer_temp[ip_len++]='A';
stringbuffer_temp[ip_len++]='T';
stringbuffer_temp[ip_len++]='+';
stringbuffer_temp[ip_len++]='E';
stringbuffer_temp[ip_len++]='C';
stringbuffer_temp[ip_len++]='S';
stringbuffer_temp[ip_len++]='O';
stringbuffer_temp[ip_len++]='C';
stringbuffer_temp[ip_len++]='O';
stringbuffer_temp[ip_len++]='=';
stringbuffer_temp[ip_len++]=NbiotGetE7025TcpSocket();
stringbuffer_temp[ip_len++]=',';
stringbuffer_temp[ip_len++]='"';
for (int i = 0; i < 4; i++)
{
if (nbiot_ip[i] < 10)
{
stringbuffer_temp[ip_len++] = nbiot_ip[i] + 0x30;
}
else if (nbiot_ip[i] < 100)
{
stringbuffer_temp[ip_len++] = (nbiot_ip[i] / 10) + 0x30;
stringbuffer_temp[ip_len++] = (nbiot_ip[i] % 10) + 0x30;
}
else
{
stringbuffer_temp[ip_len++] = (nbiot_ip[i] / 100) + 0x30;
stringbuffer_temp[ip_len++] = (nbiot_ip[i] / 10) % 10 + 0x30;
stringbuffer_temp[ip_len++] = (nbiot_ip[i] % 10) + 0x30;
}
stringbuffer_temp[ip_len++] = '.';
}
ip_len--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
stringbuffer_temp[ip_len++] = '\"';
stringbuffer_temp[ip_len++] = ',';
stringbuffer_temp[ip_len++] = ((nbiot_port) / 10000) + 0x30;
stringbuffer_temp[ip_len++] = (((nbiot_port) % 10000) / 1000) + 0x30;
stringbuffer_temp[ip_len++] = (((nbiot_port) % 1000) / 100) + 0x30;
stringbuffer_temp[ip_len++] = (((nbiot_port) % 100) / 10) + 0x30;
stringbuffer_temp[ip_len++] = ((nbiot_port) % 10) + 0x30;
stringbuffer_temp[ip_len++] = '\r';
NbiotUartSend((u8*)stringbuffer_temp, ip_len, cst_AT_No_AT);
set_timer_1s(10);
s_tcp_connect_state = S_TCP_NCDP_CK_R;
}
}
}
break;
case S_TCP_NCDP_CK_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_SUCCESS;
set_timer_1s(1);
}
else if (!check_timer_1s() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= 5)//
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_FAIL;
set_timer_1s(1);
}
else
{
s_tcp_connect_state = S_TCP_NCDP_CK;
}
}
}
break;
case S_TCP_SUCCESS:
{
if((!check_timer_1s()))
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
}
break;
case S_TCP_FAIL:
{
if((!check_timer_1s()))
{
s_at_error_count = 0;
s_tcp_connect_state = S_TCP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
}
}
break;
default:
{
s_tcp_connect_state = S_TCP_CONNECT_START; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
break;
}
}
//
void StartUdpSendData(void)
{
s_udp_send_state = S_SEND_START;
}
//AT+ECSOST=1,"183.230.174.137",6065,2,"3334"
void UdpSendDataMachine_E7025(void)
{
unsigned char *nbiot_ip;
u16 nbiot_port;
static u8 s_at_error_count = 0; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static const u8 temp_AT_Buffer[10]= {"AT+ECSOST="};
switch (s_udp_send_state)
{
case S_SEND_START:
{
s_udp_send_state = S_SEND_DATA; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ᱨERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ1S<31><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_SEND_DATA:
{
if (!check_timer_1ms())
{
u16 len = 0; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nbiot_port = udp_port1;
nbiot_ip = udp_ip1;
int i;
for(i=0;i<10;i++)
{
c_AT_NMGS[len++] = temp_AT_Buffer[i];
}
//socekt
c_AT_NMGS[len++] = NbiotGetE7025UdpSocket();//socket<65><74>ΧΪ0~6
c_AT_NMGS[len++] = ',';
c_AT_NMGS[len++] = '\"';
//IP: NSOST Udp<64><70><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
for (i = 0; i < 4; i++)
{
if (nbiot_ip[i] < 10)
{
c_AT_NMGS[len++] = nbiot_ip[i] + 0x30;
}
else if (nbiot_ip[i] < 100)
{
c_AT_NMGS[len++] = (nbiot_ip[i] / 10) + 0x30;
c_AT_NMGS[len++] = (nbiot_ip[i] % 10) + 0x30;
}
else
{
c_AT_NMGS[len++] = (nbiot_ip[i] / 100) + 0x30;
c_AT_NMGS[len++] = (nbiot_ip[i] / 10) % 10 + 0x30;
c_AT_NMGS[len++] = (nbiot_ip[i] % 10) + 0x30;
}
c_AT_NMGS[len++] = '.';
}
//<2F>˿ں<CBBF>
len--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
c_AT_NMGS[len++] = '\"';
c_AT_NMGS[len++] = ',';
c_AT_NMGS[len++] = (nbiot_port / 10000) + 0x30;
c_AT_NMGS[len++] = (nbiot_port % 10000) / 1000 + 0x30;
c_AT_NMGS[len++] = (nbiot_port % 1000) / 100 + 0x30;
c_AT_NMGS[len++] = (nbiot_port % 100) / 10 + 0x30;
c_AT_NMGS[len++] = (nbiot_port % 10) + 0x30;
c_AT_NMGS[len++] = ',';
//<2F><><EFBFBD><EFBFBD>
c_AT_NMGS[len++] = (Nbiot_Send_Data.len / 10000) + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 10000) / 1000 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 1000) / 100 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 100) / 10 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 10) + 0x30;
c_AT_NMGS[len++] = ',';
//<2F><><EFBFBD><EFBFBD>
for (i = 0; i < Nbiot_Send_Data.len; i++)
{
if ((*(Nbiot_Send_Data.buf + i) >> 4) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x30;
}
if ((*(Nbiot_Send_Data.buf + i) & 0x0F) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x30;
}
}
c_AT_NMGS[len++] = '\r';
NbiotUartSend((u8*) c_AT_NMGS, len, cst_AT_No_AT_NMGS);
set_timer_1s(4);
s_udp_send_state = S_SEND_DATA_R;
}
}
break;
case S_SEND_DATA_R:
{
if (NbiotCheckAtAck() == UART_OK) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
g_s_nbiot_task_flag = TASK_SUCCESS;
*Nbiot_Send_Data.state = NBIOT_SUCCESS;
s_udp_send_state = S_SEND_START;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= 2)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_NMGS;
g_s_nbiot_task_flag = TASK_SUCCESS;
s_udp_send_state = S_SEND_START;
}
else
{
set_timer_1s(4);
s_udp_send_state = S_SEND_DATA;
}
}
}
break;
default:
{
s_udp_send_state = S_SEND_START;
}
break;
}
}
void UdpSendDataMachine(void)
{
UdpSendDataMachine_E7025();
}
u8 s_tcp_send_state=S_SEND_START;
void StartTcpSendData(void)
{
s_tcp_send_state = S_SEND_START;
}
//AT+ECSOST=1,"183.230.174.137",6065,2,"3334"
//AT+ECSOSD=1,2,"3132"
void TcpSendDataMachine(void)
{
static u8 s_at_error_count = 0; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static const u8 temp_AT_Buffer[10]= {"AT+ECSOSD="};
switch (s_tcp_send_state)
{
case S_SEND_START:
{
s_tcp_send_state = S_SEND_DATA; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ᱨERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ1S<31><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_SEND_DATA:
{
if (!check_timer_1ms())
{
u16 len = 0; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(int i=0;i<10;i++)
{
c_AT_NMGS[len++] = temp_AT_Buffer[i];
}
//socekt
c_AT_NMGS[len++] = NbiotGetE7025TcpSocket();//socket<65><74>ΧΪ0~6
c_AT_NMGS[len++] = ',';
//<2F><><EFBFBD><EFBFBD>
c_AT_NMGS[len++] = (Nbiot_Send_Data.len / 10000) + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 10000) / 1000 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 1000) / 100 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 100) / 10 + 0x30;
c_AT_NMGS[len++] = (Nbiot_Send_Data.len % 10) + 0x30;
c_AT_NMGS[len++] = ',';
c_AT_NMGS[len++] = '\"';
//<2F><><EFBFBD><EFBFBD>
for (int i = 0; i < Nbiot_Send_Data.len; i++)
{
if ((*(Nbiot_Send_Data.buf + i) >> 4) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x30;
}
if ((*(Nbiot_Send_Data.buf + i) & 0x0F) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x30;
}
}
c_AT_NMGS[len++] = '\"';
c_AT_NMGS[len++] = '\r';
NbiotUartSend((u8*) c_AT_NMGS, len, cst_AT_No_AT_NMGS);
set_timer_1s(4);
s_tcp_send_state = S_SEND_DATA_R;
}
}
break;
case S_SEND_DATA_R:
{
if (NbiotCheckAtAck() == UART_OK) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
s_at_error_count = 0;
g_s_nbiot_task_flag = TASK_SUCCESS;
*Nbiot_Send_Data.state = NBIOT_SUCCESS;
s_tcp_send_state = S_SEND_START;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= 2)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_NMGS;
g_s_nbiot_task_flag = TASK_SUCCESS;
s_tcp_send_state = S_SEND_START;
}
else
{
set_timer_1s(4);
s_tcp_send_state = S_SEND_DATA;
}
}
}
break;
default:
{
s_tcp_send_state = S_SEND_START;
}
break;
}
}
void UdpReadDataMachine_E7025(void)
{
static u8 s_error_count; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static u8 s_read_upd_data_state = S_START;
static const u8 temp_AT_Buffer[16]= {"AT+ECSORF=2,512\r"};
switch (s_read_upd_data_state)
{
case S_START:
{
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_error_count = 0;
s_read_upd_data_state = S_AT_QIRD;
}
break;
case S_AT_QIRD:
{
if (!check_timer_1ms())
{
u16 len=0;
int i;
for(i=0;i<16;i++)
{
c_AT_NMGS[len++] = temp_AT_Buffer[i];
}
c_AT_NMGS[10] = NbiotGetE7025UdpSocket();//socket<65><74>ΧΪ0~6
NbiotUartSend((u8*) c_AT_NMGS, len, cst_AT_No_AT_UPD_READ);
set_timer_1ms(3*AT_COMMAND_RECEIVE_WAIT_TIME);
s_read_upd_data_state = S_AT_QIRD_R;
}
}
break;
case S_AT_QIRD_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
*Nbiot_Send_Data.state = QIRD_SUCCESS;
g_s_nbiot_task_flag = TASK_SUCCESS;
s_read_upd_data_state = S_START;
}
else if (!check_timer_1ms())
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
s_error_count++;
if (s_error_count >= 3)
{
s_error_count = 0;
*Nbiot_Send_Data.state = QIRD_ERROR;
g_s_nbiot_task_flag = TASK_FAIL;
s_read_upd_data_state = S_START;
}
else
{
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_read_upd_data_state = S_AT_QIRD;
}
}
}
break;
default:
{
s_read_upd_data_state = S_START;
}
break;
}
}
void UdpReadDataMachine(void)
{
UdpReadDataMachine_E7025();
}
//
//OnenetConnectMachine
u8 s_onenet_connect_state=0;
void OneNetStartConnect(void)
{
s_onenet_connect_state = S_ONENET_CONNECT_START;
}
/***************************************************************************
* @fun_name static void CoapConnectMachine()
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Coap״̬<EFBFBD><EFBFBD>
***************************************************************************/
void OnenetConnectMachine(void)
{
static u8 s_at_error_count = 0;
unsigned char *nbiot_ip;
u16 nbiot_port;
static char c_AT_MIPLCONFIG[40]="AT+MIPLCONFIG=0,183.230.040.040,05683\r";
//static const char* c_AT_MIPLCONFIG_3 = "AT+MIPLCONFIG=3,0\r";
static const char* c_AT_MIPLCONFIG_CK="AT+MIPLCONFIG?\r";//+MIPLCONFIG: 0,183.230.40.40,5683 +MIPLCONFIG: 2,2 +MIPLCONFIG: 3,1 +MIPLCONFIG: 4,0,1
static const char* c_AT_MIPLCREATE="AT+MIPLCREATE\r";
static const char* c_AT_MIPLADDOBJ = "AT+MIPLADDOBJ=0,3200,1,\"1\",4,2\r";
static const char* c_AT_MIPLOPEN ="AT+MIPLOPEN=0,600,60\r";
static const char* c_AT_CCLK = "AT+CCLK?\r"; //<2F><>ѯ<EFBFBD><D1AF>վʱ<D5BE><CAB1>
static char c_AT_MIPLRSP_BUF[40];// AT+MIPLDISCOVERRSP=0,48839,1,4,"5750"
switch (s_onenet_connect_state)
{
case S_ONENET_CONNECT_IDLE:
{
break;
}
case S_ONENET_CONNECT_START: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
{
s_at_error_count=0;
s_onenet_connect_state = S_ONENET_MIPLCONFIG;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_ONENET_MIPLCONFIG:
{
if (!check_timer_1ms())
{
u16 len = 16; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nbiot_port = coap_port;
nbiot_ip = coap_ip;
//IP <20>Ĵ洢<C4B4><E6B4A2>Ȼʹ<C8BB><CAB9>ˮ<EFBFBD><CBAE>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桰.<2E><><EFBFBD>ţ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int i;
for (i = 0; i < 4; i++)
{
if (nbiot_ip[i] < 10)
{
c_AT_MIPLCONFIG[len++] = nbiot_ip[i] + 0x30;
}
else if (nbiot_ip[i] < 100)
{
c_AT_MIPLCONFIG[len++] = (nbiot_ip[i] / 10) + 0x30;
c_AT_MIPLCONFIG[len++] = (nbiot_ip[i] % 10) + 0x30;
}
else
{
c_AT_MIPLCONFIG[len++] = (nbiot_ip[i] / 100) + 0x30;
c_AT_MIPLCONFIG[len++] = (nbiot_ip[i] / 10) % 10 + 0x30;
c_AT_MIPLCONFIG[len++] = (nbiot_ip[i] % 10) + 0x30;
}
c_AT_MIPLCONFIG[len++] = '.';
}
len--; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
c_AT_MIPLCONFIG[len++] = ',';
//c_AT_MIPLCONFIG[len++] = ((nbiot_port) / 10000) + 0x30;
c_AT_MIPLCONFIG[len++] = (((nbiot_port) % 10000) / 1000) + 0x30;
c_AT_MIPLCONFIG[len++] = (((nbiot_port) % 1000) / 100) + 0x30;
c_AT_MIPLCONFIG[len++] = (((nbiot_port) % 100) / 10) + 0x30;
c_AT_MIPLCONFIG[len++] = ((nbiot_port) % 10) + 0x30;
c_AT_MIPLCONFIG[len++] = '\r';
NbiotUartSend((u8*)c_AT_MIPLCONFIG, len, cst_AT_No_AT_MIPLCONFIG);
set_timer_1s(2);
s_onenet_connect_state = S_ONENET_MIPLCONFIG_R;
}
}
break;
case S_ONENET_MIPLCONFIG_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLCONFIG_CK;//S_ONENET_MIPLCONFIG3;
set_timer_1s(2);
}
else if (!check_timer_1s() || NbiotCheckAtAck() == UART_ERROR)
{
s_at_error_count++;
if (s_at_error_count >= AT_ERROR)//
{
//һ<><EFBFBD><EFBFBD><E1B7A2>,<2C>϶<EFBFBD><CFB6>ܲ鵽<DCB2><E9B5BD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLCONFIG_CK;//S_ONENET_MIPLCONFIG3;
set_timer_1s(2);
}
else
{
s_onenet_connect_state = S_ONENET_MIPLCONFIG;
}
}
}
break;
case S_ONENET_MIPLCONFIG_CK:
{
if (!check_timer_1s())
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
NbiotUartSend((u8*)c_AT_MIPLCONFIG_CK, strlen(c_AT_MIPLCONFIG_CK), cst_AT_No_AT_MIPLCONFIG_CK);
s_onenet_connect_state = S_ONENET_MIPLCONFIG_CK_R;
set_timer_1s(2);
}
}
}
break;
case S_ONENET_MIPLCONFIG_CK_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLCREATE;
set_timer_1s(2);
}
else if (!check_timer_1s())
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLCONF_ERROR)//
{
//һ<><EFBFBD><EFBFBD><E1B7A2>,<2C>϶<EFBFBD><CFB6>ܲ鵽<DCB2><E9B5BD><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLCREATE;
set_timer_1s(2);
}
else
{
s_onenet_connect_state = S_ONENET_MIPLCONFIG_CK;
}
}
}
break;
case S_ONENET_MIPLCREATE:
{
if(!check_timer_1s())
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
NbiotUartSend((u8*) c_AT_MIPLCREATE, strlen(c_AT_MIPLCREATE), cst_AT_No_AT_MIPLCREATE);
set_timer_1s(2);
s_onenet_connect_state = S_ONENET_MIPLCREATE_R;
}
}
}
break;
case S_ONENET_MIPLCREATE_R:
{
if(NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLADDOBJ;
set_timer_1s(2);
}
else if(!check_timer_1s())
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLCREATE_ERROR)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLADDOBJ;
set_timer_1s(2);
}
else
{
s_onenet_connect_state = S_ONENET_MIPLCREATE;
set_timer_1s(2);
}
}
}
break;
case S_ONENET_MIPLADDOBJ:
{
if(!check_timer_1s())
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
NbiotUartSend((u8*) c_AT_MIPLADDOBJ, strlen(c_AT_MIPLADDOBJ), cst_AT_No_AT_MIPLADDOBJ);
set_timer_1s(2);
s_onenet_connect_state = S_ONENET_MIPLADDOBJ_R;
}
}
}
break;
case S_ONENET_MIPLADDOBJ_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLOPEN;
set_timer_1s(2);
}
else if ((!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLADDOBJ_ERROR)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLOPEN;
set_timer_1s(2);
}
else
{
s_onenet_connect_state = S_ONENET_MIPLADDOBJ;
set_timer_1s(1);
}
}
}
break;
case S_ONENET_MIPLOPEN:
{
if (!check_timer_1s())
{
NbiotUartSend((u8 *) c_AT_MIPLOPEN, strlen(c_AT_MIPLOPEN), cst_AT_No_AT_MIPLOPEN);
set_timer_1s(10);
s_onenet_connect_state = S_ONENET_MIPLOPEN_R;
}
}
break;
case S_ONENET_MIPLOPEN_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
NbiotClearAtAck();
NbiotSetRevMiplobserve();
set_timer_1s(10);
s_onenet_connect_state = S_ONENET_MIPLOBSERVE;
}
else if ((!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLOPEN_ERROR)
{
*Nbiot_Send_Data.state = NBIOT_ERROR;
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_MIPLOBSERVE;
}
else
{
s_onenet_connect_state = S_ONENET_MIPLOPEN;
set_timer_1s(1);
}
}
}
break;
case S_ONENET_MIPLOBSERVE: //static char c_AT_MIPLDISCOVERRSP[30];// AT+MIPLDISCOVERRSP=0,48839,1,4,"5750"
{
if ((NbiotCheckAtAck() == UART_OK)||(!check_timer_1s()))
{
u8 len;
char observe_num[10];
memset(observe_num, 0, sizeof(observe_num));
memset(c_AT_MIPLRSP_BUF, 0, sizeof(c_AT_MIPLRSP_BUF));
strcpy(c_AT_MIPLRSP_BUF, "AT+MIPLOBSERVERSP=0,");
NbiotGetObserve_num(observe_num);
strcat(c_AT_MIPLRSP_BUF, observe_num);
strcat(c_AT_MIPLRSP_BUF, ",1\r");
len = strlen(c_AT_MIPLRSP_BUF);
NbiotUartSend((u8 *) c_AT_MIPLRSP_BUF, len, cst_AT_No_AT);
set_timer_1s(2);
s_onenet_connect_state = S_ONENET_MIPLOBSERVE_R;
}
}
break;
case S_ONENET_MIPLOBSERVE_R: //Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>--<2D>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ
{
if (NbiotCheckAtAck() == UART_OK)
{
s_at_error_count = 0;
NbiotClearAtAck();
NbiotSetRevMipldiscover();
set_timer_1s(5);
s_onenet_connect_state = S_ONENET_MIPLDISCOVER;
}
else if ((!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLOBSERVERSP_ERROR)
{
*Nbiot_Send_Data.state = NBIOT_ERROR;
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
set_timer_1s(1);
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_CONNECT_IDLE;
}
else
{
set_timer_1s(5);
s_onenet_connect_state = S_ONENET_MIPLOBSERVE;
}
}
}
break;
case S_ONENET_MIPLDISCOVER:
{
if ((NbiotCheckAtAck() == UART_OK)||(!check_timer_1s()))
{
u8 len;
char discover_num[10];
memset(discover_num, 0, sizeof(discover_num));
memset(c_AT_MIPLRSP_BUF, 0, sizeof(c_AT_MIPLRSP_BUF));
strcpy(c_AT_MIPLRSP_BUF, "AT+MIPLDISCOVERRSP=0,");
NbiotGetDiscover_num(discover_num);
strcat(c_AT_MIPLRSP_BUF, discover_num);
strcat(c_AT_MIPLRSP_BUF, ",1,4,\"5750\"\r");
len = strlen(c_AT_MIPLRSP_BUF);
NbiotUartSend((u8 *) c_AT_MIPLRSP_BUF, len, cst_AT_No_AT);
set_timer_1s(5);
s_onenet_connect_state = S_ONENET_MIPLDISCOVER_R;
}
}
break;
case S_ONENET_MIPLDISCOVER_R: //Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>--<2D>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ
{
if (NbiotCheckAtAck() == UART_OK)
{
set_timer_1s(1);
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_CCLK;
}
else if ((!check_timer_1s()))
{
s_at_error_count++;
if (s_at_error_count >= NUM_AT_MIPLDISCOVERRSP_ERROR)
{
*Nbiot_Send_Data.state = NBIOT_ERROR;
g_s_nbiot_task_flag = TASK_FAIL; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
set_timer_1s(1);
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_CONNECT_IDLE;
}
else
{
NbiotSetRevMipldiscover();
s_onenet_connect_state = S_ONENET_MIPLDISCOVER;
set_timer_1s(5);
}
}
}
break;
case S_ONENET_CCLK://<2F><>ʼ<EFBFBD><CABC>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
if (!check_timer_1s())
{
NbiotUartSend((u8*) c_AT_CCLK, strlen(c_AT_CCLK), cst_AT_No_AT_CCLK);
s_onenet_connect_state = S_ONENET_CCLK_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>ATָ<54><EFBFBD>ص<EFBFBD><D8B5>ʱ<EEB3A4><CAB1>300ms(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>)
}
}
break;
case S_ONENET_CCLK_R://<2F>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
{
if (NbiotCheckAtAck() == UART_OK)//<2F><>ȷӦ<C8B7><D3A6>
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_Wait; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
else if ((!check_timer_1ms()) || (NbiotCheckAtAck() == UART_ERROR))//Ӧ<><D3A6><EFBFBD><EFBFBD>ʱ
{
if (++s_at_error_count >= NUM_AT_CCLK_ERROR)
{
s_at_error_count = 0;
s_onenet_connect_state = S_ONENET_Wait; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
else
{
s_onenet_connect_state = S_ONENET_CCLK;
set_timer_1s(1);
}
}
}
break;
case S_ONENET_Wait:
{
if ((!check_timer_1s()))
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = NBIOT_ONLINE;
g_s_nbiot_task_flag = TASK_SUCCESS; //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
s_onenet_connect_state = S_ONENET_CONNECT_IDLE;
}
}
break;
default:
{
s_onenet_connect_state = S_ONENET_CONNECT_IDLE; //״̬<D7B4><CCAC><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>ʼ״̬
}
break;
}
}
#if SEND_ACKID_ENABLE
u16 Send_AckID=0;
#endif
//Onnet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
#define S_ONENET_SEND_START 0
#define S_ONENET_SEND_DATA 1
#define S_ONENET_SEND_DATA_R 2
u8 s_onenet_send_state = S_ONENET_SEND_START;
void StartOnenetSendData(void)
{
s_onenet_send_state = S_ONENET_SEND_START;
}
void OneNetSendDataMachine(void)
{
char observe_num[10];
static const char temp_AT_MIPLDISCOVERRSP1[] = "AT+MIPLNOTIFY=0,";
static const char temp_AT_MIPLDISCOVERRSP2[] = ",3200,0,5750,1,";
//static char c_AT_MIPLNOTIFY[50+SEND_DATA_LENGTH];//<2F>ڴ治<DAB4>ʹ<E3A3AC>ù<EFBFBD><C3B9>÷<EFBFBD><C3B7>ͻ<EFBFBD><CDBB><EFBFBD> c_AT_NMGS
switch (s_onenet_send_state)
{
case S_ONENET_SEND_START:
{
s_onenet_send_state = S_ONENET_SEND_DATA; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͣ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ᱨERROR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ1S<31><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ERROR
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
break;
case S_ONENET_SEND_DATA://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (!check_timer_1ms())
{
if(TASK_IDLE == UartIfIdle(NB_UART_COM))
{
//u16 len = 31; //<2F><><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD><CDB3>ȵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 len, i, len_Gprs_Send_Data;
char len_buffer[6] = {0};
c_AT_NMGS[0] = 0; //ǿ<>ƹ<EFBFBD><C6B9><EFBFBD>
strcat(c_AT_NMGS, temp_AT_MIPLDISCOVERRSP1);
memset(observe_num, 0, sizeof(observe_num));
NbiotGetObserve_num(observe_num);
//NbiotGetDiscover_num(observe_num);
strcat(c_AT_NMGS, observe_num);
strcat(c_AT_NMGS, temp_AT_MIPLDISCOVERRSP2);
len_Gprs_Send_Data = 2 * Nbiot_Send_Data.len;
sprintf(len_buffer, "%u", len_Gprs_Send_Data);
strcat(c_AT_NMGS, len_buffer);
strcat(c_AT_NMGS, ",\"");
len = strlen(c_AT_NMGS);
for (i = 0; i < Nbiot_Send_Data.len; i++)//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if ((*(Nbiot_Send_Data.buf + i) >> 4) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x37;//<2F>ַ<EFBFBD>ת<EFBFBD><D7AA>
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) >> 4) + 0x30;//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
}
if ((*(Nbiot_Send_Data.buf + i) & 0x0F) >= 0x0A)
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x37;
}
else
{
c_AT_NMGS[len++] = (*(Nbiot_Send_Data.buf + i) & 0x0F) + 0x30;
}
}
c_AT_NMGS[len++] = 0;//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
strcat(c_AT_NMGS, "\",0,0");
#if SEND_ACKID_ENABLE
char strtemp[8];
if(++Send_AckID == 0) Send_AckID = 1; //Send_AckID==0<><30>ʱ<EFBFBD><CAB1>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><E1B1A8>ERROR
sprintf(strtemp, ",%u", Send_AckID);
strcat(c_AT_MIPLNOTIFY, strtemp);
strcat(c_AT_MIPLNOTIFY, "\r");
NbiotClearMsg();
NbiotUartSend((u8*) c_AT_MIPLNOTIFY, strlen(c_AT_MIPLNOTIFY), cst_AT_No_AT_MIPLNOTIFY_ACKID);
#else
strcat(c_AT_NMGS, "\r");
NbiotClearMsg();
NbiotUartSend((u8*) c_AT_NMGS, strlen(c_AT_NMGS), cst_AT_No_AT_MIPLNOTIFY);
#endif
s_onenet_send_state = S_ONENET_SEND_DATA_R;
set_timer_1ms(5 * AT_COMMAND_RECEIVE_WAIT_TIME); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ϳ<EFBFBD>5<EFBFBD><35>ʱ<EFBFBD><CAB1><EFBFBD>ȴ<EFBFBD>
}
}
} break;
case S_ONENET_SEND_DATA_R:
{
if (NbiotCheckAtAck() == UART_OK) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
{
g_s_nbiot_task_flag = TASK_SUCCESS;
*Nbiot_Send_Data.state = NBIOT_SUCCESS;
s_onenet_send_state = S_ONENET_SEND_START;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
{
*Nbiot_Send_Data.state = cst_AT_No_AT_MIPLNOTIFY;
g_s_nbiot_task_flag = TASK_FAIL;
s_onenet_send_state = S_ONENET_SEND_START;
}
} break;
default: break;
}
}
/***************************************************************************
* @fun_name static void NbiotPowerOffMachine()
* @brief <EFBFBD>ػ<EFBFBD>״̬<EFBFBD><EFBFBD>
***************************************************************************/
void NbiotPowerOffMachine(void) //<2F><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ϵ<EFBFBD><CFB5>ػ<EFBFBD>
{
//<2F>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
static u8 s_at_error_count = 0;
static const char* c_AT_MIPLCLOSE = "AT+MIPLCLOSE=0\r"; //<2F><>¼ע<C2BC><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static const char* c_AT_MIPLDELOBJ = "AT+MIPLDELOBJ=0,3200\r"; //ģ<><C4A3><EFBFBD><EFBFBD><E0B6A9><EFBFBD><EFBFBD>Դ<EFBFBD>б<EFBFBD><D0B1>ͷ<EFBFBD>
static const char* c_AT_MIPLDEL = "AT+MIPLDELETE=0\r"; //ģ<><C4A3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ʵ<EFBFBD><CAB5>ɾ<EFBFBD><C9BE>
//static const char* c_AT_NETCLOSE = "AT+CTM2MDEREG\r";
//static const char* c_AT_TCPCLOSE = "AT+ECSOCL=1\r";
//static const char* c_AT_CFUN0 = "AT+CFUN=0\r"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ģʽ
//static const char* c_AT_NCSEARFCN = "AT+QCSEARFCN=0\r"; //<2F><><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD>Ƶ<EFBFBD><C6B5>
//static const char* c_AT_CFUN1 = "AT+CFUN=1\r"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
//static const char* c_AT_QPOWD = "AT+QPOWD=1\r";
switch (s_power_off_state)
{
case S_POWER_OFF_START:
{
s_at_error_count = 0;
Nbiot_Para.net_state = NB_OFF_LINE;
Nbiot_Para.coap_state = CONNECT_OFF_LINE;
Nbiot_Para.udp1_state = CONNECT_OFF_LINE;
Nbiot_Para.udp2_state = CONNECT_OFF_LINE;
// Nbiot_Para.tcp1_state = CONNECT_OFF_LINE;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
s_power_off_state = S_AT_NETCLOSE;
}
break;
case S_AT_MIPLCLOSE://<2F><>¼ע<C2BC><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //ע<><D7A2>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϊ5s,<2C><><EFBFBD><EFBFBD>2<EFBFBD><32>
{
if(!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_MIPLCLOSE, strlen(c_AT_MIPLCLOSE), cst_AT_No_AT_MIPLCLOSE);
s_power_off_state = S_AT_MIPLCLOSE_R;
set_timer_1ms(5*AT_COMMAND_RECEIVE_WAIT_TIME);
}
} break;
case S_AT_MIPLCLOSE_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
s_power_off_state = S_AT_MIPLDELOBJ;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_MIPLCLOSE_ERROR)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_MIPLCLOSE;
s_power_off_state = S_AT_MIPLDELOBJ;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_power_off_state = S_AT_MIPLCLOSE;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
} break;
case S_AT_MIPLDELOBJ://ģ<><C4A3><EFBFBD><EFBFBD><E0B6A9><EFBFBD><EFBFBD>Դ<EFBFBD>б<EFBFBD><D0B1>ͷ<EFBFBD>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_MIPLDELOBJ, strlen(c_AT_MIPLDELOBJ), cst_AT_No_AT_MIPLDELOBJ);
s_power_off_state = S_AT_MIPLDELOBJ_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
} break;
case S_AT_MIPLDELOBJ_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
s_power_off_state = S_AT_MIPLDEL;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_MIPLDEL_ERROR)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_MIPLDELOBJ;
s_power_off_state = S_AT_MIPLDEL;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
else
{
s_power_off_state = S_AT_MIPLDELOBJ;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
} break;
case S_AT_MIPLDEL://ģ<><C4A3><EFBFBD><EFBFBD><E0B6A9><EFBFBD><EFBFBD>Դ<EFBFBD>б<EFBFBD><D0B1>ͷ<EFBFBD>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_MIPLDEL, strlen(c_AT_MIPLDEL), cst_AT_No_AT_MIPLDEL);
s_power_off_state = S_AT_MIPLDEL_R;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
} break;
case S_AT_MIPLDEL_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
s_power_off_state = S_AT_NETCLOSE;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_MIPLNOTIFY_ERROR)
{
s_at_error_count = 0;
*Nbiot_Send_Data.state = cst_AT_No_AT_MIPLDEL;
s_power_off_state = S_AT_NETCLOSE;
}
else
{
s_power_off_state = S_AT_MIPLDEL;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
} break;
case S_AT_NETCLOSE:
{
if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)
{
s_power_off_state = S_POWER_OFF;
}
else
{
int len=0; // "AT+ECSOCL=1\r";
memset(stringbuffer_temp,0,sizeof(stringbuffer_temp));
//"AT+ECSOCO=1,"183.230.174.137",6065"
//IP <20>Ĵ洢<C4B4><E6B4A2>Ȼʹ<C8BB><CAB9>ˮ<EFBFBD><CBAE>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桰.<2E><><EFBFBD>ţ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
stringbuffer_temp[len++]='A';
stringbuffer_temp[len++]='T';
stringbuffer_temp[len++]='+';
stringbuffer_temp[len++]='E';
stringbuffer_temp[len++]='C';
stringbuffer_temp[len++]='S';
stringbuffer_temp[len++]='O';
stringbuffer_temp[len++]='C';
stringbuffer_temp[len++]='L';
stringbuffer_temp[len++]='=';
stringbuffer_temp[len++]=NbiotGetE7025TcpSocket();
stringbuffer_temp[len++]='\r';
NbiotUartSend((u8*) stringbuffer_temp,len, cst_AT_No_AT);
set_timer_1s(3);
s_power_off_state = S_AT_NETCLOSE_R;
}
}
break;
case S_AT_NETCLOSE_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1s(1);
s_power_off_state = S_POWER_OFF;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1s()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
s_at_error_count++;
if (s_at_error_count >= 2) //<2F><><EFBFBD>β<EFBFBD><CEB2>ɹ<EFBFBD>ֱ<EFBFBD>ӹػ<D3B9>
{
s_at_error_count = 0;
s_power_off_state = S_POWER_OFF; //<2F>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>
}
else
{
s_power_off_state = S_AT_NETCLOSE;
}
}
}
break;
/*
case S_AT_CFUN0://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CFUN0, strlen((const char*) c_AT_CFUN0), cst_AT_No_AT_CFUN);
s_power_off_state = S_AT_CFUN0_R;
set_timer_1ms(2 * AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_AT_CFUN0_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1ms( AT_COMMAND_SEND_INTERVAL_TIME);
s_power_off_state = S_AT_NCSEARFCN;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_CFUN_ERROR)
{
s_at_error_count = 0;
s_power_off_state = S_AT_NCSEARFCN;
}
else
{
s_power_off_state = S_AT_CFUN0;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
}
break;
case S_AT_NCSEARFCN://<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_NCSEARFCN, strlen((const char*) c_AT_NCSEARFCN), cst_AT_No_AT_NCSEARFCN);
s_power_off_state = S_AT_NCSEARFCN_R;
set_timer_1ms(2 * AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_AT_NCSEARFCN_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1ms( AT_COMMAND_SEND_INTERVAL_TIME*6);//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʱ3<CAB1><33>
s_power_off_state = S_AT_CFUN1;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_NCSEARFCN_ERROR)
{
s_at_error_count = 0;
s_power_off_state = S_AT_CFUN1;
}
else
{
s_power_off_state = S_AT_NCSEARFCN;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
}
break;
case S_AT_CFUN1://<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_CFUN1, strlen((const char*) c_AT_CFUN1), cst_AT_No_AT_CFUN);
s_power_off_state = S_AT_CFUN1_R;
set_timer_1ms(2 * AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
break;
case S_AT_CFUN1_R:
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
s_at_error_count = 0;
set_timer_1s(1);
s_power_off_state = S_POWER_OFF;
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
if (++s_at_error_count >= NUM_AT_CFUN_ERROR)
{
s_at_error_count = 0;
set_timer_1s(1);
s_power_off_state = S_POWER_OFF;
}
else
{
s_power_off_state = S_AT_CFUN1;
set_timer_1ms(AT_COMMAND_RECEIVE_WAIT_TIME);
}
}
}
break;
*/
case S_POWER_OFF:
{
if (!check_timer_1s())
{
NB_Power_Disable(); //<2F>жϵ<D0B6>Դ
set_timer_1s(1);
s_power_off_state = S_POWER_OFF_WAIT;
Nbiot_Para.net_state = NB_OFF_LINE;
Nbiot_Para.udp1_state = CONNECT_OFF_LINE;
Nbiot_Para.udp2_state = CONNECT_OFF_LINE;
// Nbiot_Para.tcp1_state = CONNECT_OFF_LINE;
}
}
break;
case S_POWER_OFF_WAIT:
{
if (!check_timer_1s())
{
NbiotPreSleep();
g_s_nbiot_task_flag = TASK_SUCCESS;
s_power_off_state = S_START;
}
}
break;
default:
{
s_power_off_state = S_START;
}
break;
}
}
void NbiotReadECLSNRMachine(void)
{
static u8 s_error_count; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static u8 s_ecl_state = S_START;
static const u8 c_AT_NUESTATS[] = "AT+QENG=0\r";
switch (s_ecl_state)
{
case S_START:
{
set_timer_1ms(1000);
s_error_count = 0;
s_ecl_state = S_AT_ECL;
}
break;
case S_AT_ECL:
{
if (!check_timer_1ms())
{
NbiotUartSend((u8*) c_AT_NUESTATS, strlen((const char*) c_AT_NUESTATS), cst_AT_No_AT_NUESTATS);
set_timer_1ms(500);
s_ecl_state = S_AT_ECL_R;
}
}
break;
case S_AT_ECL_R:
{
if (!check_timer_1ms())
{
if (NbiotCheckAtAck() == UART_OK)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ӧ<EFBFBD><D3A6>
*Nbiot_Send_Data.state = ECL_SNR_SUCCESS;
g_s_nbiot_task_flag = TASK_SUCCESS;
s_ecl_state = S_START;
}
else
{
//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
s_error_count++;
if (s_error_count >= 1)
{
s_error_count = 0;
*Nbiot_Send_Data.state = ECL_SNR_ERROR;
g_s_nbiot_task_flag = TASK_FAIL;
s_ecl_state = S_START;
}
else
{
s_ecl_state = S_AT_ECL;
}
}
}
}
break;
default:
{
s_ecl_state = S_START;
}
break;
}
}
/*****************************ONENETӦ<54><D3A6><EFBFBD>·<EFBFBD>ָ<EFBFBD><D6B8>*********************/
static u8 s_onenet_ack_rev_state = S_ONENET_ACKREV_START;
static void StartOnenetAckRev(void)
{
s_onenet_ack_rev_state = S_ONENET_ACKREV_START;
}
/*******************************************************
NbiotRevAckMachine
<EFBFBD>Խ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
*******************************************************/
void NbiotRevAckMachine(void)
{
static u8 s_error_count; //ATָ<54><D6B8><EFBFBD>ۼƷ<DBBC><C6B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
static char c_AT_MIPLWRITE_EXECUTE[30];// = "AT+MIPLWRITERSP=0,12345,2\r";
//static char c_AT_MIPLEXECUTE[30];// = "AT+MIPLEXECUTERSP=0,12345,2\r";
switch (s_onenet_ack_rev_state)
{
case S_ONENET_ACKREV_IDLE:
{
} break;
case S_ONENET_ACKREV_START:
{
set_timer_1ms(1000);
s_onenet_ack_rev_state = S_ONENET_REPLY_REV_ACKID;
s_error_count = 0;
} break;
case S_ONENET_REPLY_REV_ACKID://Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
{
u8 len;
char ack_num[10];
if (!check_timer_1ms())
{
memset(ack_num,0,sizeof(ack_num));
memset(c_AT_MIPLWRITE_EXECUTE,0,sizeof(c_AT_MIPLWRITE_EXECUTE));
if(ORDER_EXECUTE == NbiotGetOnenetTypeDownOrder())
{
strcpy(c_AT_MIPLWRITE_EXECUTE,"AT+MIPLEXECUTERSP=0,");
}
else
{
strcpy(c_AT_MIPLWRITE_EXECUTE,"AT+MIPLWRITERSP=0,");
}
NbiotGetWriteAck_num(ack_num);
strcat(c_AT_MIPLWRITE_EXECUTE,ack_num);
strcat(c_AT_MIPLWRITE_EXECUTE,",2\r");
len = strlen(c_AT_MIPLWRITE_EXECUTE);
NbiotUartSend((u8*)c_AT_MIPLWRITE_EXECUTE, len, cst_AT_No_AT_MIPLWRITE);
set_timer_1ms(5*AT_COMMAND_RECEIVE_WAIT_TIME);
s_onenet_ack_rev_state = S_ONENET_REPLY_REV_ACKID_R;
}
} break;
case S_ONENET_REPLY_REV_ACKID_R://Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>--<2D>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ
{
if (NbiotCheckAtAck() == UART_OK)
{
g_s_nbiot_task_flag = TASK_SUCCESS;
s_onenet_ack_rev_state = S_ONENET_ACKREV_IDLE;
SetUartCommRevFlag(); //Ӧ<><D3A6>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
}
else if (NbiotCheckAtAck() == UART_ERROR || (!check_timer_1ms()))//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ʱʱ<CAB1>
{
if (++s_error_count >= NUM_AT_MIPLWRITE_ERROR)
{
*Nbiot_Send_Data.state = cst_AT_No_AT_MIPLWRITE;
g_s_nbiot_task_flag = TASK_FAIL;
s_onenet_ack_rev_state = S_ONENET_ACKREV_IDLE;
}
else
{
s_onenet_ack_rev_state = S_ONENET_REPLY_REV_ACKID;
set_timer_1ms(AT_COMMAND_SEND_INTERVAL_TIME);
}
}
} break;
default: break;
}
}
/***************************************************************************
* @fun_name <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
* @brief <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD>ҪΪ<EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
***************************************************************************/
void set_timer_1s(u16 time)
{
Set100msTimer(TIMER_100MS_NBIOT, time * 10);
}
u16 check_timer_1s(void)
{
return Check100msTimer(TIMER_100MS_NBIOT);
}
void set_timer_1ms(u16 time)
{
Set5msTimer(TIMER_5MS_NBIOT, time / 5);
}
u16 check_timer_1ms(void)
{
return Check5msTimer(TIMER_5MS_NBIOT);
}
/***************************************************************************
* @fun_name void StartPowerOffTask()
* @brief <EFBFBD>ػ<EFBFBD><EFBFBD>ӿ<EFBFBD>
***************************************************************************/
void StartPowerOffTask(void)
{
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_POWER_OFF;
s_power_off_state = S_POWER_OFF_START;
}
//NBǿ<42>ƹػ<C6B9>
void NbForcePowerOff(void)
{
NB_Power_Disable();
Nbiot_Para.net_state = NB_OFF_LINE;
Nbiot_Para.udp1_state = CONNECT_OFF_LINE;
Nbiot_Para.udp2_state = CONNECT_OFF_LINE;
// Nbiot_Para.tcp1_state = CONNECT_OFF_LINE;
g_s_nbiot_task_flag = TASK_INIT;
g_s_nbiot_main_state = NBIOT_S_IDLE;
}
void set_clear_ncsearfcn (void)
{
flag_clear_ncsearfcn =1;
}
void sys_get_three_code (void)
{
// NbiotGetIMEI(Sys_data_object.NB_module_IMEI_0016);
// NbiotGetIMSI(Sys_data_object.NB_module_IMSI);
// NbiotGetICCID(Sys_data_object.SIMCard_ICCID_200A);
}
u32 sys_get_net_state (void)
{
return 0;
}
#ifdef __cplusplus
}
#endif
#endif