4084 lines
89 KiB
C
4084 lines
89 KiB
C
|
/************************************************************************************
|
|||
|
* @Copyright (c) :(C)2017, Qindao ieslab Co., Ltd
|
|||
|
* @FileName :pic24_nb_uart_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 <time.h>
|
|||
|
#include "UWater_Rtcc_driver.h"
|
|||
|
#include "UWater_DebugPrint.h"
|
|||
|
|
|||
|
/********************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>************************************/
|
|||
|
UART_COMM Uart_Comm;
|
|||
|
u8 g_s_rev_state; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|||
|
u8 g_s_rev_state_coap; //coap<61><70><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|||
|
u8 udp_check_rev_data_flag = FALSE;
|
|||
|
|
|||
|
//<2F>ź<EFBFBD>ǿ<EFBFBD>Ⱥ<EFBFBD>ICCID<49><44><EFBFBD><EFBFBD>
|
|||
|
u8 g_csq_value = 0x32;
|
|||
|
u8 g_band_val = 0;
|
|||
|
u8 g_ecl_snr_value[11] = {0};
|
|||
|
u8 g_date_time_num = 0;
|
|||
|
//u8 g_snr_value[4] = {0};
|
|||
|
//u8 IMEI_num[8] = {0};
|
|||
|
//u8 IMSI_num[8] = {0};
|
|||
|
//u8 ICCID_num[10] = {0};
|
|||
|
u8 s_g_buf[10] = {0};
|
|||
|
u8 s_g_temp1 = 0;
|
|||
|
|
|||
|
u8 s_g_apn_value[APN_SIZE] = {0};
|
|||
|
u32 s_g_cell_id_value = 0;
|
|||
|
struct tm tm_GMT_nb_uart_driver= {0,0,0,0,0,0,0,0,0}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
u32 time_temp_nb_uart_driver;
|
|||
|
u8 g_tmp_byte[11] = {0};
|
|||
|
u16 s_g_earfcn_value = 0;//<2F>ij<EFBFBD>u16<31><36><EFBFBD><EFBFBD>Ϊ<EFBFBD>ӿڷ<D3BF><DAB7>ص<EFBFBD><D8B5><EFBFBD>U16ָ<36><D6B8>
|
|||
|
u32 s_g_earfcn_offset_value = 0;
|
|||
|
u16 s_g_pci_value = 0;
|
|||
|
char s_g_cell_id[CELL_ID_SIZE];
|
|||
|
s16 s_g_rsrp_value = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
|
|||
|
s16 s_g_rsrq_value = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
|
|||
|
s16 s_g_rssi_value = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>Ϊ<EFBFBD><CEAA>ֵ
|
|||
|
s16 s_g_snr_value = 0;
|
|||
|
u16 s_g_band_value = 0;
|
|||
|
char s_g_tac[10];
|
|||
|
s16 s_g_ecl_value = 0;
|
|||
|
s16 s_g_tx_pwr = 0;
|
|||
|
|
|||
|
u32 nb_uart_time_num;
|
|||
|
u32 nb_uart_time_old_num;
|
|||
|
volatile u8 data = 0;
|
|||
|
u8 e7025_udp_current_socket;
|
|||
|
u8 e7025_tcp_current_socket;
|
|||
|
/*****************************<2A>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>***********************************/
|
|||
|
static void AT_OK_AND_ERROR_MACHINE(u8 data);
|
|||
|
static void AT_CGATT_HOW_MACHINE(u8 data);
|
|||
|
static void AT_CEREG_MACHINE(u8 data);
|
|||
|
static void AT_NCDP_CK_MACHINE(u8 data);
|
|||
|
static void AT_NCDP_MACHINE(u8 data);
|
|||
|
static void AT_CIMI_MACHINE(u8 data);
|
|||
|
static void AT_NBIOT_REV_MACHINE(u8 data);
|
|||
|
|
|||
|
//static void AT_CGSN_MACHINE(u8 data);
|
|||
|
static void AT_NUWSTATS_MACHINE(u8 data);
|
|||
|
static void AT_CSQ_MACHINE(u8 data);
|
|||
|
static void AT_IMEI_MACHINE(u8 data);
|
|||
|
//static void AT_CHECK_ERROR_NUM_MACHINE(u8 data);
|
|||
|
static void AT_GET_CCLK_MACHINE(u8 data);
|
|||
|
static void AT_ICCID_MACHINE(u8 data);
|
|||
|
static void AT_QIOPEN_MACHINE(u8 data);
|
|||
|
static void AT_UDP_REV_MACHINE(u8 data);
|
|||
|
static void AT_UDP_READ_MACHINE(u8 data);
|
|||
|
static void AT_MIPLOPEN_MACHINE(u8 data);
|
|||
|
static void AT_WAIT_MIPLDISCOVER(u8 data);
|
|||
|
static void AT_WAIT_MIPLOBSERVE(u8 data);
|
|||
|
static void AT_MIPLCLOSE_MACHINE(u8 data);
|
|||
|
void AT_CM_NBIOT_REV_MACHINE(u8 data);
|
|||
|
static void AT_CTM2MREG_MACHINE(u8 data);
|
|||
|
static void AT_ECSTATUS_MACHINE(u8 data);
|
|||
|
static void AT_NBIOT_REV_MACHINE_E7025(u8 data);
|
|||
|
static void AT_TCP_READ_MACHINE(u8 data);
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name static void UART_Receive_IT(NBIOT_UART_HandleTypeDef *huart)
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
***************************************************************************/
|
|||
|
void NBUartReceiveIT(void)
|
|||
|
{
|
|||
|
data = LPUart_ReceiveData(M0P_LPUART1);
|
|||
|
|
|||
|
if(TASK_IDLE == NbiotIfIdle())
|
|||
|
{
|
|||
|
if(udp_check_rev_data_flag)
|
|||
|
{
|
|||
|
Uart_Comm.send_style = cst_AT_No_AT_UDP_REV;
|
|||
|
}
|
|||
|
}
|
|||
|
AT_NBIOT_REV_MACHINE(data);//coap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>ѯ
|
|||
|
//AT_CM_NBIOT_REV_MACHINE(data);//+MIPLWRITE:
|
|||
|
//AT_ECCESQ_MACHINE(data); //E7025<32><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>CSQ<53>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
AT_NBIOT_REV_MACHINE_E7025(data);
|
|||
|
AT_TCP_READ_MACHINE(data);
|
|||
|
switch (Uart_Comm.send_style)
|
|||
|
{
|
|||
|
case cst_AT_No_AT:
|
|||
|
case cst_AT_No_AT_CMEE:
|
|||
|
case cst_AT_No_AT_CFUN:
|
|||
|
case cst_AT_No_AT_NBAND:
|
|||
|
case cst_AT_No_AT_CGATT:
|
|||
|
case cst_AT_No_AT_CGDCONT:
|
|||
|
case cst_AT_No_AT_NSOCR:
|
|||
|
case cst_AT_No_AT_NSOST:
|
|||
|
case cst_AT_No_AT_NSOCL:
|
|||
|
case cst_AT_No_AT_NETCLOSE:
|
|||
|
case cst_AT_No_AT_COPS:
|
|||
|
case cst_AT_No_AT_NSMI:
|
|||
|
case cst_AT_No_AT_NNMI:
|
|||
|
case cst_AT_No_AT_NMGS:
|
|||
|
case cst_AT_No_AT_CPSMS:
|
|||
|
case cst_AT_No_AT_NCSEARFCN:
|
|||
|
case cst_AT_No_AT_NPTWEDRXS:
|
|||
|
case cst_AT_No_AT_CFUN0:
|
|||
|
case cst_AT_No_AT_CFUN1:
|
|||
|
case cst_AT_No_AT_QPOWD:
|
|||
|
case cst_AT_No_AT_MIPLCONFIG:
|
|||
|
case cst_AT_No_AT_MIPLCONFIG_CK:
|
|||
|
case cst_AT_No_AT_MIPLCREATE:
|
|||
|
case cst_AT_No_AT_MIPLADDOBJ:
|
|||
|
case cst_AT_No_AT_MIPLDISCOVERRSP:
|
|||
|
case cst_AT_No_AT_MIPLNOTIFY:
|
|||
|
case cst_AT_No_AT_MIPLWRITE:
|
|||
|
case cst_AT_No_AT_MIPLDELOBJ:
|
|||
|
case cst_AT_No_AT_MIPLDEL:
|
|||
|
case cst_AT_No_AT_CTM2MSET:
|
|||
|
case cst_AT_No_AT_ECCESQS:
|
|||
|
{
|
|||
|
AT_OK_AND_ERROR_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_NCDP_CK:
|
|||
|
{
|
|||
|
AT_NCDP_CK_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_NCDP: //<2F><><EFBFBD><EFBFBD>20170706
|
|||
|
{
|
|||
|
AT_NCDP_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_CIMI:
|
|||
|
{
|
|||
|
AT_CIMI_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_CGATT_how:
|
|||
|
{
|
|||
|
AT_CGATT_HOW_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_CEREG:
|
|||
|
{
|
|||
|
AT_CEREG_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_CSQ:
|
|||
|
{
|
|||
|
AT_CSQ_MACHINE(data); //CSQ
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_NUESTATS:
|
|||
|
{
|
|||
|
AT_NUWSTATS_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_IMEI:
|
|||
|
{
|
|||
|
AT_IMEI_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_CCLK:
|
|||
|
{
|
|||
|
AT_GET_CCLK_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_ICCID:
|
|||
|
{
|
|||
|
AT_ICCID_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_QIOPEN:
|
|||
|
{
|
|||
|
AT_QIOPEN_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_UDP_REV:
|
|||
|
{
|
|||
|
AT_UDP_REV_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_UPD_READ:
|
|||
|
{
|
|||
|
AT_UDP_READ_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_MIPLOPEN:
|
|||
|
{
|
|||
|
AT_MIPLOPEN_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_MIPLOBSERVE:
|
|||
|
{
|
|||
|
AT_WAIT_MIPLOBSERVE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_MIPLDISCOVER:
|
|||
|
{
|
|||
|
AT_WAIT_MIPLDISCOVER(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_MIPLCLOSE:
|
|||
|
{
|
|||
|
AT_MIPLCLOSE_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
case cst_AT_No_AT_CTM2MREG: //E7025<32>¼<EFBFBD>
|
|||
|
{
|
|||
|
AT_CTM2MREG_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case cst_AT_No_AT_ECSTATUS: //E7025<32>¼<EFBFBD>
|
|||
|
{
|
|||
|
AT_ECSTATUS_MACHINE(data);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
s_g_buf[0] = data;
|
|||
|
PrintNbData(s_g_buf,1);//<2F><>ӡԴ<D3A1><D4B4>
|
|||
|
// AT_CHECK_ERROR_NUM_MACHINE(data);
|
|||
|
}
|
|||
|
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name void NbiotUartSend(u8 *buf, u16 len, u8 style)
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] buf<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<EFBFBD>ַ len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
style<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>NBIOT<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|||
|
***************************************************************************/
|
|||
|
void NbiotUartSend(u8 *buf, u16 len, u8 style)
|
|||
|
{
|
|||
|
static u8 send_msg_bc25;
|
|||
|
if (len > 0)
|
|||
|
{
|
|||
|
UartSend(NB_UART_COM, len,buf, &send_msg_bc25);
|
|||
|
// PrintNbData(buf,len);
|
|||
|
//״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
|
|||
|
g_s_rev_state = S0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_ING;
|
|||
|
Uart_Comm.send_style = style;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name s8 NbiotCheckAtAck()
|
|||
|
* @brief <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
* @param[in] None
|
|||
|
* @param[out] None
|
|||
|
* @retval UART_ING:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART_OK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ֡ UART_ERROR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
|
|||
|
* @other None
|
|||
|
***************************************************************************/
|
|||
|
s8 NbiotCheckAtAck()
|
|||
|
{
|
|||
|
return Uart_Comm.rev_ack_flag;
|
|||
|
}
|
|||
|
|
|||
|
void NbiotClearAtAck (void)
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = 0;
|
|||
|
}
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name void NbiotRcv(u16 *len , u8 **data)
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡNBIOT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[out] data: <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ŵ<EFBFBD>ַ len:<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD>ŵ<EFBFBD>ַ
|
|||
|
***************************************************************************/
|
|||
|
void NbiotRcvTransOne(u16 *len, u8 **data)
|
|||
|
{
|
|||
|
u16 i;
|
|||
|
u8 temp_data;
|
|||
|
for (i = 0; i < Uart_Comm.rev_len / 2; i++)
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_buf[i * 2] > 0x5A)//<2F><><EFBFBD>ڡ<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪСд<D0A1><D0B4>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD>ASCII<49><49>ֵΪ97<39><37><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>87
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf[i * 2] - 0x57) << 4;
|
|||
|
}
|
|||
|
else if (Uart_Comm.rev_buf[i * 2] > 0x39)
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf[i * 2] - 0x37) << 4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf[i * 2] - 0x30) << 4;
|
|||
|
}
|
|||
|
|
|||
|
if (Uart_Comm.rev_buf[i * 2 + 1] > 0x5A)
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf[i * 2 + 1] - 0x57);
|
|||
|
}
|
|||
|
else if (Uart_Comm.rev_buf[i * 2 + 1] > 0x39)
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf[i * 2 + 1]) - 0x37;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf[i * 2 + 1]) - 0x30;
|
|||
|
}
|
|||
|
Uart_Comm.rev_buf_handled[i] = temp_data;
|
|||
|
}
|
|||
|
*data = Uart_Comm.rev_buf_handled;
|
|||
|
*len = Uart_Comm.rev_len / 2;
|
|||
|
}
|
|||
|
void NbiotRcvTransTwo(u16 *len, u8 **data)
|
|||
|
{
|
|||
|
u16 i;
|
|||
|
u8 temp_data;
|
|||
|
for (i = 0; i < (Uart_Comm.rev_len / 4); i++)
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_buf_handled[i * 2] > 0x5A)//<2F><><EFBFBD>ڡ<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪСд<D0A1><D0B4>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD>ASCII<49><49>ֵΪ97<39><37><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>87
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf_handled[i * 2] - 0x57) << 4;
|
|||
|
}
|
|||
|
else if (Uart_Comm.rev_buf_handled[i * 2] > 0x39)
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf_handled[i * 2] - 0x37) << 4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_data = (Uart_Comm.rev_buf_handled[i * 2] - 0x30) << 4;
|
|||
|
}
|
|||
|
|
|||
|
if (Uart_Comm.rev_buf_handled[i * 2 + 1] > 0x5A)
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf_handled[i * 2 + 1] - 0x57);
|
|||
|
}
|
|||
|
else if (Uart_Comm.rev_buf_handled[i * 2 + 1] > 0x39)
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf_handled[i * 2 + 1]) - 0x37;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_data |= (Uart_Comm.rev_buf_handled[i * 2 + 1]) - 0x30;
|
|||
|
}
|
|||
|
Uart_Comm.rev_buf_handled[i] = temp_data;
|
|||
|
}
|
|||
|
*data = Uart_Comm.rev_buf_handled;
|
|||
|
*len = Uart_Comm.rev_len / 4;
|
|||
|
}
|
|||
|
void NbiotRcv(u16 *len, u8 **data)
|
|||
|
{
|
|||
|
if((GetRcvDataType() == NB_RCV_UDP1_DATA)||(GetRcvDataType() == NB_RCV_UDP2_DATA)||(GetRcvDataType() == NB_RCV_TCP_DATA))
|
|||
|
{
|
|||
|
NbiotRcvTransOne(len, data);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(Nbiot_Para.Telecom == SIM_CARD_MOBILE)//<2F>ƶ<EFBFBD><C6B6><EFBFBD>
|
|||
|
{
|
|||
|
NbiotRcvTransOne(len, data);
|
|||
|
NbiotRcvTransTwo(len, data);
|
|||
|
}
|
|||
|
else//<2F><><EFBFBD>ſ<EFBFBD>
|
|||
|
{
|
|||
|
NbiotRcvTransOne(len, data);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name u8 NbiotRcvFinish()
|
|||
|
* @brief NBIOT<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
***************************************************************************/
|
|||
|
u8 NbiotRcvFinish()
|
|||
|
{
|
|||
|
return Uart_Comm.nbiot_rev_flag;
|
|||
|
}
|
|||
|
/***************************************************************************
|
|||
|
* @fun_name void NbiotClearMsg()
|
|||
|
* @brief <EFBFBD><EFBFBD>NBIOT<EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־λ
|
|||
|
* @param[out] data: <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ŵ<EFBFBD>ַ len:<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD>ŵ<EFBFBD>ַ
|
|||
|
***************************************************************************/
|
|||
|
void NbiotClearMsg()
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_flag = 0;
|
|||
|
Uart_Comm.send_style = cst_AT_No_AT_NBIOT_REV;
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>OKָ<4B><D6B8>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ǰ<><C7B0>Ϊ0x4F('O'), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(K(OK)<29><><EFBFBD><EFBFBD>R(ERROR)),<2C>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(0x0D,0x0A))
|
|||
|
static void AT_OK_AND_ERROR_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 s_state_flag;
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'O')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'K')
|
|||
|
{
|
|||
|
s_state_flag = 1;
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else if (data == 'R')
|
|||
|
{
|
|||
|
s_state_flag = 0;
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == '\r')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == '\n')
|
|||
|
{
|
|||
|
if (s_state_flag)
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
}
|
|||
|
if (cst_AT_No_AT_NSOST == Uart_Comm.send_style)
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ѯCGATT
|
|||
|
static void AT_CGATT_HOW_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'G')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'A')
|
|||
|
{
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'T')
|
|||
|
{
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == 'T')
|
|||
|
{
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state = S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == ' ')
|
|||
|
{
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == '1')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S_IDLE; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ѯCEREG
|
|||
|
static void AT_CEREG_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'R')
|
|||
|
{
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == 'G')
|
|||
|
{
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state = S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == ' ')
|
|||
|
{
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
//0,1,2 or 3 and command successful:
|
|||
|
if (data >= '0' && data <= '3')
|
|||
|
{
|
|||
|
g_s_rev_state = S9;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == ',')
|
|||
|
{
|
|||
|
g_s_rev_state = S10;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if (data == '1' || data == '5')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S_IDLE; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_NCDP_CK_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if(data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if(data == ' ')
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if(data == 'R')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if(data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if(data == 'G')
|
|||
|
{
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if(data == 'I')
|
|||
|
{
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if(data == 'S')
|
|||
|
{
|
|||
|
g_s_rev_state = S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if(data == 'T')
|
|||
|
{
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if(data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state = S9;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if(data == 'R')
|
|||
|
{
|
|||
|
//// Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S10;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if(data == 'E')
|
|||
|
{
|
|||
|
//// Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S11;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S11:
|
|||
|
{
|
|||
|
if(data == 'D')
|
|||
|
{
|
|||
|
g_s_rev_state = S12;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S12:
|
|||
|
{
|
|||
|
if(data == 'K')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_NCDP_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if(data=='T')
|
|||
|
{
|
|||
|
g_s_rev_state=S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if(data=='I')
|
|||
|
{
|
|||
|
g_s_rev_state=S2;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if(data=='N')
|
|||
|
{
|
|||
|
g_s_rev_state=S3;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if(data=='D')
|
|||
|
{
|
|||
|
g_s_rev_state=S4;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if(data==':')
|
|||
|
{
|
|||
|
g_s_rev_state=S5;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if(data==' ')
|
|||
|
{
|
|||
|
g_s_rev_state=S6;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if(data=='3')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ص<EFBFBD>SOCKET
|
|||
|
/**
|
|||
|
AT+ECSOCR=DGRAM,17,1234,1,AF_INET
|
|||
|
2
|
|||
|
*/
|
|||
|
static void AT_QIOPEN_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '\n')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == '\r')
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
if(getNB_NetConnectType()!=NBIOT_CONNECT_COAP)
|
|||
|
{
|
|||
|
e7025_udp_current_socket = data;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
e7025_tcp_current_socket = data;
|
|||
|
}
|
|||
|
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
else if (data == 'E')//error
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
g_s_rev_state = S0;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//+ECSONMI: 2,32
|
|||
|
static void AT_UDP_REV_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
g_s_rev_state = ('+' == data? S1 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
g_s_rev_state = ('E' == data? S2 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
g_s_rev_state = ('C' == data? S3 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
g_s_rev_state = ('S' == data? S4 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
g_s_rev_state = ('O' == data? S5 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
g_s_rev_state = ('N' == data? S6 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S6:
|
|||
|
{
|
|||
|
g_s_rev_state = ('M' == data? S7 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S7:
|
|||
|
{
|
|||
|
g_s_rev_state = ('I' == data? S8 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if(data==':')
|
|||
|
{
|
|||
|
Uart_Comm.udp_rev_data_hint = TRUE;//UDP<44>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
}
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//+ECSONMI: 1,"183.230.174.137",6065,2,"3330"
|
|||
|
/*
|
|||
|
AT+ECSORF=2,512
|
|||
|
2,"60.208.16.58",7833,32,"FEFE6810010014102133787701104AC6C27D3DD96C9DB0631BBEAEFF0C232716",0
|
|||
|
*/
|
|||
|
static void AT_UDP_READ_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
g_s_rev_state = (',' == data? S1 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
g_s_rev_state = (',' == data? S2 : S1);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
g_s_rev_state = (',' == data? S3 : S2);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
g_s_rev_state = (',' == data? S4 : S3);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state = ('"' == data? S5 : S4);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if ((data != '"')&&(data != 0x0D))// ',' <20><><EFBFBD><EFBFBD> <20>س<EFBFBD>
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_len < UP_BUF_SIZE*2)
|
|||
|
{
|
|||
|
if((data >= 0x30 && data <= 0x39) || (data >= 0x41 && data <= 0x46) || (data >= 0x61 && data <= 0x66))
|
|||
|
{ //ֻѡ<D6BB><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-9 <20>ַ<EFBFBD> A-F <20><><EFBFBD><EFBFBD> a-f
|
|||
|
Uart_Comm.rev_buf[Uart_Comm.rev_len++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len=0;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
Uart_Comm.nbiot_rev_flag = TRUE; //<2F><><EFBFBD><EFBFBD>дӦ<D0B4><D3A6>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Uart_Comm.nb_data_type = NB_RCV_UDP1_DATA;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//+ECSONMI: 1,27,"FEFE682003000007000000220C470200010152041502082021C116"
|
|||
|
u8 g_s_tcp_rev_state=S0;
|
|||
|
static void AT_TCP_READ_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_tcp_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('+' == data? S1 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('E' == data? S2 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('C' == data? S3 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('S' == data? S4 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('O' == data? S5 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('N' == data? S6 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S6:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('M' == data? S7 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S7:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = ('I' == data? S8 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S8:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = (',' == data? S9 : S8);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S9:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = (',' == data? S10 : S9);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S10:
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_tcp_rev_state = ('"' == data? S11 : S0);
|
|||
|
}
|
|||
|
break;
|
|||
|
case S11:
|
|||
|
{
|
|||
|
if ((data != '"')&&(data != 0x0D))// ',' <20><><EFBFBD><EFBFBD> <20>س<EFBFBD>
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_len < UP_BUF_SIZE*2)
|
|||
|
{
|
|||
|
if((data >= 0x30 && data <= 0x39) || (data >= 0x41 && data <= 0x46) || (data >= 0x61 && data <= 0x66))
|
|||
|
{ //ֻѡ<D6BB><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-9 <20>ַ<EFBFBD> A-F <20><><EFBFBD><EFBFBD> a-f
|
|||
|
Uart_Comm.rev_buf[Uart_Comm.rev_len++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len=0;
|
|||
|
g_s_tcp_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
Uart_Comm.nbiot_rev_flag = TRUE; //<2F><><EFBFBD><EFBFBD>дӦ<D0B4><D3A6>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Uart_Comm.nb_data_type = NB_RCV_TCP_DATA;
|
|||
|
g_s_tcp_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_tcp_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
/*
|
|||
|
MCC MNC operator
|
|||
|
460 00 <EFBFBD>й<EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
460 01 <EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>ͨ
|
|||
|
460 02 <EFBFBD>й<EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
460 03 <EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
460 05 <EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
460 06 <EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>ͨ
|
|||
|
460 07 <EFBFBD>й<EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
460 20 <EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>ͨ
|
|||
|
*/
|
|||
|
//<2F><>ѯIMSI <20><>ȷ<EFBFBD><C8B7>ʽΪ CIMI<4D><49>+OK <20>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> Ȼ<><C8BB><EFBFBD>ж<EFBFBD>OK<4F><4B><EFBFBD><EFBFBD>ERROR
|
|||
|
static void AT_CIMI_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 rev_count = 0; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data=='I')
|
|||
|
{
|
|||
|
g_s_rev_state=S1;
|
|||
|
rev_count=0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data != 'R')
|
|||
|
{
|
|||
|
if (data != 'K')
|
|||
|
{
|
|||
|
if ((data >= '0') && (data <= '9'))
|
|||
|
{
|
|||
|
Nbiot_Para.imsi[rev_count++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
Nbiot_Para.imsi[15] = 0;
|
|||
|
g_s_rev_state=S0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
g_s_rev_state=S0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
rev_count = 0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_NBIOT_REV_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state_coap)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'N')
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'N')
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'M')
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'I')
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5://
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_serial_number_cnt =0;
|
|||
|
g_s_rev_state_coap = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data != ',')
|
|||
|
{
|
|||
|
if (data >= 0x30 && data <= 0x39)
|
|||
|
{
|
|||
|
if(Uart_Comm.nbiot_rev_serial_number_cnt<9)
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_serial_number[Uart_Comm.nbiot_rev_serial_number_cnt++] = data;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_serial_number_cnt = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state_coap = S7; //<2F><>2<EFBFBD><32>','
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if ((data != ',')&&(data != 0x0D))// ',' <20><><EFBFBD><EFBFBD> <20>س<EFBFBD>
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_len < UP_BUF_SIZE * 2)
|
|||
|
{
|
|||
|
Uart_Comm.flow_count++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD>ۼ<EFBFBD>
|
|||
|
if ((data >= 0x30 && data <= 0x39) || (data >= 0x41 && data <= 0x46) || (data >= 0x61 && data <= 0x66))
|
|||
|
{ //ֻѡ<D6BB><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-9 <20>ַ<EFBFBD> A-F <20><><EFBFBD><EFBFBD> a-f
|
|||
|
Uart_Comm.rev_buf[Uart_Comm.rev_len++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.nb_data_type = NB_RCV_COAP_DATA;
|
|||
|
Uart_Comm.nbiot_rev_flag = TRUE;
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state_coap = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//E7025<32><35><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ָ<EFBFBD><D6B8> +CTM2MRECV: 681001000000003378D60110E750185F9DEB2D1C32F8D4188C1D3C44C916
|
|||
|
static void AT_NBIOT_REV_MACHINE_E7025(u8 data)
|
|||
|
{
|
|||
|
static u8 g_s_rev_state_coap_E7025;
|
|||
|
switch (g_s_rev_state_coap_E7025)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'R')
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'V')
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5://
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_serial_number_cnt =0;
|
|||
|
g_s_rev_state_coap_E7025 = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == ' ')
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state_coap_E7025 = S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if ((data != ',')&&(data != 0x0D))// ',' <20><><EFBFBD><EFBFBD> <20>س<EFBFBD>
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_len < UP_BUF_SIZE * 2)
|
|||
|
{
|
|||
|
Uart_Comm.flow_count++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD>ۼ<EFBFBD>
|
|||
|
if ((data >= '0' && data <= '9') || (data >= 'A' && data <= 'F') || (data >= 'a' && data <= 'f'))
|
|||
|
{ //ֻѡ<D6BB><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-9 <20>ַ<EFBFBD> A-F <20><><EFBFBD><EFBFBD> a-f
|
|||
|
Uart_Comm.rev_buf[Uart_Comm.rev_len++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len = 0;
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.nb_data_type = NB_RCV_COAP_DATA;
|
|||
|
Uart_Comm.nbiot_rev_flag = TRUE;
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state_coap_E7025 = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_CSQ_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'S')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'Q')
|
|||
|
{
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == ' ')
|
|||
|
{
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
g_csq_value = data - 0x30; //<2F>洢<EFBFBD><E6B4A2>ΪHex<65><78><EFBFBD><EFBFBD>
|
|||
|
g_s_rev_state = S7;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == ',') //<2F>ź<EFBFBD>ֵΪһλ<D2BB><CEBB> 0x2C ->","
|
|||
|
{
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
else //<2F>ź<EFBFBD>ֵΪ<D6B5><CEAA>λ<EFBFBD><CEBB>
|
|||
|
{
|
|||
|
g_csq_value = (g_csq_value * 10) + (data - 0x30);
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == 'O')
|
|||
|
{
|
|||
|
g_s_rev_state = S9;
|
|||
|
if (g_csq_value > 31)
|
|||
|
{
|
|||
|
g_csq_value = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == 'K')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S0; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_NUWSTATS_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if(data == ',') //
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
s_g_earfcn_value = 0;
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1://earfcn
|
|||
|
{
|
|||
|
if(data == ',') //earfcn
|
|||
|
{
|
|||
|
int tmp1=0;
|
|||
|
s_g_earfcn_value = 0;
|
|||
|
for(tmp1 = 0 ; tmp1 < s_g_temp1 ; tmp1++)
|
|||
|
{
|
|||
|
s_g_earfcn_value *= 10;
|
|||
|
s_g_earfcn_value += g_tmp_byte[tmp1];
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if(data == ',') //earfcn_offset
|
|||
|
{
|
|||
|
int tmp1=0;
|
|||
|
s_g_earfcn_offset_value = 0;
|
|||
|
for(tmp1 = 0 ; tmp1 < s_g_temp1 ; tmp1++)
|
|||
|
{
|
|||
|
s_g_earfcn_offset_value *= 10;
|
|||
|
s_g_earfcn_offset_value += g_tmp_byte[tmp1];
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3://PCI
|
|||
|
{
|
|||
|
if(data == ',')//pci
|
|||
|
{
|
|||
|
int tmp = 0;
|
|||
|
s_g_pci_value = 0;
|
|||
|
for(tmp = 0 ; tmp < s_g_temp1 ; tmp++)
|
|||
|
{
|
|||
|
s_g_pci_value *= 10;
|
|||
|
s_g_pci_value += g_tmp_byte[tmp];
|
|||
|
}
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 5)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if(data == '"')
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5://CELLID
|
|||
|
{
|
|||
|
if(data == '"')//
|
|||
|
{
|
|||
|
int tmp=0;
|
|||
|
memset(s_g_cell_id,0,CELL_ID_SIZE);
|
|||
|
for(tmp=0 ; tmp < s_g_temp1 ; tmp++)
|
|||
|
{
|
|||
|
s_g_cell_id[tmp] = g_tmp_byte[tmp];
|
|||
|
}
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data;//cellid <20><><EFBFBD>ַ<EFBFBD>
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if(data == ',')
|
|||
|
{
|
|||
|
s_g_temp1=0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S7;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if(data == '.')//rsrp
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1];
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 + g_tmp_byte[4];
|
|||
|
}
|
|||
|
s_g_rsrp_value=s_g_rsrp_value*10;
|
|||
|
if(1 == g_tmp_byte[0])//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
s_g_rsrp_value = -s_g_rsrp_value;
|
|||
|
}
|
|||
|
g_s_rev_state = S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[1 + s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if(data == ',')
|
|||
|
{
|
|||
|
s_g_temp1=0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S9;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if(data == ',')//rsrq
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrq_value = g_tmp_byte[1];
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrq_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrq_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrq_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 + g_tmp_byte[4];
|
|||
|
}
|
|||
|
s_g_rsrq_value=s_g_rsrq_value*10;
|
|||
|
if(1 == g_tmp_byte[0])//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
s_g_rsrq_value = -s_g_rsrq_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S10;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[1 + s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if(data == ',')//rssi
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rssi_value = g_tmp_byte[1];
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rssi_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rssi_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rssi_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 + g_tmp_byte[4];
|
|||
|
}
|
|||
|
s_g_rssi_value=s_g_rssi_value*10;
|
|||
|
if(1 == g_tmp_byte[0])//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
s_g_rssi_value = -s_g_rssi_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S11;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[1 + s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S11://SNR
|
|||
|
{
|
|||
|
if(data == ',')//
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 +g_tmp_byte[4];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
if(1 == g_tmp_byte[0])
|
|||
|
{
|
|||
|
s_g_snr_value = -s_g_snr_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S12;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1 + 1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S12:
|
|||
|
{
|
|||
|
if(data == ',')//band
|
|||
|
{
|
|||
|
int tmp = 0;
|
|||
|
s_g_band_value = 0;
|
|||
|
for(tmp = 0 ; tmp < s_g_temp1 ; tmp++)
|
|||
|
{
|
|||
|
s_g_band_value *= 10;
|
|||
|
s_g_band_value += g_tmp_byte[tmp];
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S13;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S13:
|
|||
|
{
|
|||
|
if(data == '"')
|
|||
|
{
|
|||
|
s_g_temp1=0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S14;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S14:
|
|||
|
{
|
|||
|
if(data == '"')//tac
|
|||
|
{
|
|||
|
int tmp=0;
|
|||
|
for(tmp=0 ; tmp < s_g_temp1 ; tmp++)
|
|||
|
{
|
|||
|
s_g_tac[tmp] = g_tmp_byte[tmp];
|
|||
|
}
|
|||
|
s_g_temp1=0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S15;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data;//cellid <20><><EFBFBD>ַ<EFBFBD>
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S15:
|
|||
|
{
|
|||
|
if(data == ',')//
|
|||
|
{
|
|||
|
s_g_temp1=0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S16;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S16:
|
|||
|
{
|
|||
|
if(data == ',')//ecl
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_ecl_value = g_tmp_byte[1];
|
|||
|
s_g_ecl_value = s_g_ecl_value*10;
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_ecl_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
s_g_ecl_value = s_g_ecl_value*10;
|
|||
|
}
|
|||
|
if(1 == g_tmp_byte[0])
|
|||
|
{
|
|||
|
s_g_ecl_value = -s_g_ecl_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S17;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1 + 1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S17://tx_pwr
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else if( (data >= 0x30) && (data <= 0x39))
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1 + 1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_tx_pwr = g_tmp_byte[1];
|
|||
|
s_g_tx_pwr = s_g_tx_pwr*10;
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_tx_pwr = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
s_g_tx_pwr = s_g_tx_pwr*10;
|
|||
|
}
|
|||
|
if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_tx_pwr = g_tmp_byte[1] * 100 + g_tmp_byte[2] *10 + g_tmp_byte[3];
|
|||
|
s_g_tx_pwr = s_g_tx_pwr*10;
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_tx_pwr = g_tmp_byte[1] * 1000 + g_tmp_byte[2] *100 + g_tmp_byte[3] * 10 + g_tmp_byte[4];
|
|||
|
s_g_tx_pwr = s_g_tx_pwr*10;
|
|||
|
}
|
|||
|
if(1 == g_tmp_byte[0])
|
|||
|
{
|
|||
|
s_g_tx_pwr = -s_g_tx_pwr;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetECL(s16 *ecl_data)
|
|||
|
{
|
|||
|
*ecl_data = s_g_ecl_value;
|
|||
|
}
|
|||
|
|
|||
|
//ѯ<><D1AF>IMEI <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>AT+CGSN=1 <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>+CGSN:865820031203206 OK
|
|||
|
|
|||
|
static void AT_IMEI_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 rev_count = 0; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'G')
|
|||
|
{
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'S')
|
|||
|
{
|
|||
|
g_s_rev_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'N')
|
|||
|
{
|
|||
|
g_s_rev_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state = S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data != 'K')
|
|||
|
{
|
|||
|
if ((data >= '0') && (data <= '9'))
|
|||
|
{
|
|||
|
Nbiot_Para.imei[rev_count++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
g_s_rev_state = S0;
|
|||
|
Nbiot_Para.imei[15] = 0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetIMEI(char *imei)
|
|||
|
{
|
|||
|
u8 i = 0;
|
|||
|
for (i = 0; i < 15; i++)
|
|||
|
{
|
|||
|
*(imei + i) = Nbiot_Para.imei[i];
|
|||
|
}
|
|||
|
}
|
|||
|
void NbiotGetIMSI(char *imsi)
|
|||
|
{
|
|||
|
u8 i = 0;
|
|||
|
for (i = 0; i < 15; i++)
|
|||
|
{
|
|||
|
*(imsi + i) = Nbiot_Para.imsi[i];
|
|||
|
}
|
|||
|
}
|
|||
|
void NbiotGetICCID(char *iccid)
|
|||
|
{
|
|||
|
u8 i = 0;
|
|||
|
for (i = 0; i < 20; i++)
|
|||
|
{
|
|||
|
*(iccid + i) = Nbiot_Para.iccid[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void AT_GET_CCLK_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 get_cclk_state = S0;
|
|||
|
static u16 temp_data;
|
|||
|
switch (get_cclk_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
get_cclk_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
get_cclk_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
get_cclk_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'C')
|
|||
|
{
|
|||
|
get_cclk_state = S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
get_cclk_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'L')
|
|||
|
{
|
|||
|
get_cclk_state = S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
get_cclk_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'K')
|
|||
|
{
|
|||
|
get_cclk_state = S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
get_cclk_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == '"')
|
|||
|
{
|
|||
|
get_cclk_state = S6;
|
|||
|
temp_data = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6://<2F><>ȡ<EFBFBD><C8A1>
|
|||
|
{
|
|||
|
if (data != '/')
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_data %= 100;//ֻȡ<D6BB><C8A1>λ<EFBFBD><CEBB>ʮλ
|
|||
|
tm_GMT_nb_uart_driver.tm_year = (2000 - 1900) + temp_data; //<2F><>1900<30><30><EFBFBD><EFBFBD>
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S7;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7://<2F><>ȡ<EFBFBD><C8A1>
|
|||
|
{
|
|||
|
if (data != '/')
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tm_GMT_nb_uart_driver.tm_mon = temp_data - 1; //<2F>·<EFBFBD>Χ<EFBFBD><CEA7>0-11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S8;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8://<2F><>ȡ<EFBFBD><C8A1>
|
|||
|
{
|
|||
|
if (data != ',')
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tm_GMT_nb_uart_driver.tm_mday = temp_data;
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S9;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9://<2F><>ȡʱ
|
|||
|
{
|
|||
|
if (data != ':')
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tm_GMT_nb_uart_driver.tm_hour = temp_data;
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S10;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10://<2F><>ȡ<EFBFBD><C8A1>
|
|||
|
{
|
|||
|
if (data != ':')
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tm_GMT_nb_uart_driver.tm_min = temp_data;
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S11;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S11://<2F><>ȡ<EFBFBD><C8A1>
|
|||
|
{
|
|||
|
if((data != '"')&&(data != '+'))
|
|||
|
{
|
|||
|
if (data >= '0' && data <= '9')
|
|||
|
{
|
|||
|
temp_data = temp_data * 10;
|
|||
|
temp_data += (data - 0x30);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tm_GMT_nb_uart_driver.tm_sec = temp_data;
|
|||
|
static DateTime rtcc_tmp; //RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ BCD
|
|||
|
tm_GMT_nb_uart_driver.tm_year -= (2000 - 1900);
|
|||
|
tm_GMT_nb_uart_driver.tm_mon += 1; //<2F>·<EFBFBD>Χ(0-11) +1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(1-12)
|
|||
|
rtcc_tmp.s.second = ((tm_GMT_nb_uart_driver.tm_sec / 10) << 4) | (tm_GMT_nb_uart_driver.tm_sec % 10);
|
|||
|
rtcc_tmp.s.minute = ((tm_GMT_nb_uart_driver.tm_min / 10) << 4) | (tm_GMT_nb_uart_driver.tm_min % 10);
|
|||
|
rtcc_tmp.s.hour = ((tm_GMT_nb_uart_driver.tm_hour / 10) << 4) | (tm_GMT_nb_uart_driver.tm_hour % 10);
|
|||
|
rtcc_tmp.s.day = ((tm_GMT_nb_uart_driver.tm_mday / 10) << 4) | (tm_GMT_nb_uart_driver.tm_mday % 10);
|
|||
|
rtcc_tmp.s.month = ((tm_GMT_nb_uart_driver.tm_mon / 10) << 4) | (tm_GMT_nb_uart_driver.tm_mon % 10);
|
|||
|
rtcc_tmp.s.year = ((tm_GMT_nb_uart_driver.tm_year / 10) << 4) | (tm_GMT_nb_uart_driver.tm_year % 10);
|
|||
|
RtccSetDateTime(&rtcc_tmp);
|
|||
|
if(data == '+')
|
|||
|
{
|
|||
|
RtccAdjustDateTime(1,3600*8);//ʱ,UTCʱ<43><CAB1><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>8Сʱ
|
|||
|
}
|
|||
|
temp_data = 0;
|
|||
|
get_cclk_state = S0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
get_cclk_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ѯ<EFBFBD><D1AF>ǰSIM<49><4D><EFBFBD><EFBFBD>ICCID<49><44>,+NCCID:4412345678901234567\r\n
|
|||
|
static void AT_ICCID_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 rev_count = 0;
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'I')//"I"
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'D')//"D"
|
|||
|
{
|
|||
|
g_s_rev_state = S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == ':')//":"
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
g_s_rev_state = S3;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data != 'R')
|
|||
|
{
|
|||
|
if (data != 'K')
|
|||
|
{
|
|||
|
if ((data >= '0' && data <= '9') || (data >= 'A' && data <= 'F')) //<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
Nbiot_Para.iccid[rev_count++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
Nbiot_Para.iccid[20] = 0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
rev_count = 0;
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
[18:24:16.919]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>AT+MIPLOPEN=0,600,60
|
|||
|
OK
|
|||
|
[18:24:17.383]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
+MIPLEVENT: 0,4
|
|||
|
[18:24:18.118]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
+MIPLEVENT: 0,6
|
|||
|
+MIPLOBSERVE: 0,119438,1,3200,0,-1
|
|||
|
[18:24:18.662]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
+MIPLOBSERVE: 0,184975,1,3200,1,-1
|
|||
|
[18:24:19.287]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
+MIPLDISCOVER: 0,53904,3200
|
|||
|
*/
|
|||
|
static void AT_MIPLOPEN_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'E') g_s_rev_state = S1;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'V') g_s_rev_state = S2;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'E') g_s_rev_state = S3;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'N') g_s_rev_state = S4;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'T') g_s_rev_state = S5;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == ':') g_s_rev_state = S6;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == '0') g_s_rev_state = S7;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == ',') g_s_rev_state = S8;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8://ֻ<><D6BB><EFBFBD><EFBFBD>0,6
|
|||
|
{
|
|||
|
if (data == '6')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S_IDLE; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0; //Bootstrap <20><><EFBFBD>̴<EFBFBD><CCB4><EFBFBD><EFBFBD>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
static void AT_WAIT_MIPLOBSERVE(u8 data) //+MIPLOBSERVE: 0,84076,1,3200,0,-1
|
|||
|
{
|
|||
|
static u8 wait_miplobserver_state = S0;
|
|||
|
static u8 point_num;
|
|||
|
|
|||
|
switch (wait_miplobserver_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'O') wait_miplobserver_state = S1;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'B') wait_miplobserver_state = S2;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'S') wait_miplobserver_state = S3;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'E') wait_miplobserver_state = S4;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'R') wait_miplobserver_state = S5;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == 'V') wait_miplobserver_state = S6;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == 'E') wait_miplobserver_state = S8;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == ':') wait_miplobserver_state = S9;
|
|||
|
else wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == ',')
|
|||
|
{
|
|||
|
point_num = 0;
|
|||
|
memset(Uart_Comm.nbiot_observe_num, 0, sizeof(Uart_Comm.nbiot_observe_num));
|
|||
|
wait_miplobserver_state = S10;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if (data != ',')
|
|||
|
{
|
|||
|
if(point_num < sizeof(Uart_Comm.nbiot_observe_num))
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_observe_num[point_num++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else //<2F><><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>","
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
wait_miplobserver_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
static void AT_WAIT_MIPLDISCOVER(u8 data) //+MIPLDISCOVER: 0,18541,3200
|
|||
|
{
|
|||
|
static u8 wait_mipldiscover_state = S0;
|
|||
|
static u8 point_num;
|
|||
|
switch (wait_mipldiscover_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'D') wait_mipldiscover_state = S1;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'I') wait_mipldiscover_state = S2;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'S') wait_mipldiscover_state = S3;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'C') wait_mipldiscover_state = S4;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'O') wait_mipldiscover_state = S5;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == 'V') wait_mipldiscover_state = S6;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == 'E') wait_mipldiscover_state = S7;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == 'R') wait_mipldiscover_state = S8;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == ':') wait_mipldiscover_state = S9;
|
|||
|
else wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == ',')
|
|||
|
{
|
|||
|
point_num = 0;
|
|||
|
memset(Uart_Comm.nbiot_discover_num,0,sizeof(Uart_Comm.nbiot_discover_num));
|
|||
|
wait_mipldiscover_state = S10;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if (data != ',')
|
|||
|
{
|
|||
|
if(point_num < sizeof(Uart_Comm.nbiot_discover_num))
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_discover_num[point_num++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else //<2F><><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>","
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
wait_mipldiscover_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void AT_CM_NBIOT_REV_MACHINE(u8 data)
|
|||
|
{
|
|||
|
static u8 g_s_rev_state_onenet = S0;
|
|||
|
switch (g_s_rev_state_onenet)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == '+')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'M')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S2;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'I')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S3;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'P')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S4;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'L')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S5;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5://<2F><><EFBFBD><EFBFBD> +MIPLWRITE<54>·<EFBFBD><C2B7><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
{
|
|||
|
if (data == 'W') //<2F><><EFBFBD><EFBFBD> +MIPLWRITE<54>·<EFBFBD><C2B7><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
{
|
|||
|
Uart_Comm.Onenet_type_down_order = ORDER_WRITE;
|
|||
|
g_s_rev_state_onenet = S6;
|
|||
|
}
|
|||
|
else if (data == 'E') //<2F><><EFBFBD><EFBFBD> +MIPLEXCUTE<54>·<EFBFBD><C2B7><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
{
|
|||
|
Uart_Comm.Onenet_type_down_order = ORDER_EXECUTE;
|
|||
|
g_s_rev_state_onenet = S6_1;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
/*------------------------++MIPLWRITE<54><45><EFBFBD>̷<EFBFBD>֧---------------------------*/
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == 'R') g_s_rev_state_onenet = S7;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == 'I') g_s_rev_state_onenet = S8;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
/*------------------------+MIPLEXCUTE<54><45><EFBFBD>̷<EFBFBD>֧---------------------------*/
|
|||
|
case S6_1:
|
|||
|
{
|
|||
|
if (data == 'X') g_s_rev_state_onenet = S7_1;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
case S7_1:
|
|||
|
{
|
|||
|
if (data == 'E') g_s_rev_state_onenet = S8_1;
|
|||
|
else g_s_rev_state=S0;
|
|||
|
} break;
|
|||
|
case S8_1:
|
|||
|
{
|
|||
|
if (data == 'C') g_s_rev_state_onenet = S9_1;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
case S9_1:
|
|||
|
{
|
|||
|
if (data == 'U') g_s_rev_state_onenet = S8;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
/*-------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˴<DAB4><CBB4><EFBFBD>ʦ---------------------------------------*/
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == 'T') g_s_rev_state_onenet = S9;
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == 'E')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S10;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if (data == ':')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S11;
|
|||
|
}
|
|||
|
else g_s_rev_state_onenet=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S11:
|
|||
|
{
|
|||
|
if (data == '0')
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S12;
|
|||
|
}
|
|||
|
//else g_s_rev_state=S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case S12:
|
|||
|
{
|
|||
|
if (data == ',') //<2F><>1<EFBFBD><31>','
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S13;
|
|||
|
Uart_Comm.nbiot_rev_serial_number_cnt=0;
|
|||
|
memset(Uart_Comm.nbiot_rev_serial_number,0,sizeof(Uart_Comm.nbiot_rev_serial_number));
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S13:
|
|||
|
{
|
|||
|
if (data != ',')
|
|||
|
{
|
|||
|
if(data >= 0x30 && data <= 0x39)
|
|||
|
{
|
|||
|
if(Uart_Comm.nbiot_rev_serial_number_cnt<9)
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_serial_number[Uart_Comm.nbiot_rev_serial_number_cnt++]=data;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S14; //<2F><>2<EFBFBD><32>','
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S14:
|
|||
|
{
|
|||
|
if (data == ',') //<2F><>3<EFBFBD><33>','
|
|||
|
{
|
|||
|
if(Uart_Comm.Onenet_type_down_order == ORDER_WRITE)
|
|||
|
g_s_rev_state_onenet = S15;
|
|||
|
else if(Uart_Comm.Onenet_type_down_order == ORDER_EXECUTE ) //+MIPLEXCUTE <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
g_s_rev_state_onenet = S16;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case S15:
|
|||
|
{
|
|||
|
if (data == ',')//<2F><>4<EFBFBD><34>','
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S16;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S16:
|
|||
|
{
|
|||
|
if (data == ',') //<2F><>5<EFBFBD><35>','
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S17;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S17:
|
|||
|
{
|
|||
|
if (data == ',')//<2F><>6<EFBFBD><36>','
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S18;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S18:
|
|||
|
{
|
|||
|
if (data == ',')//<2F><>7<EFBFBD><37>','
|
|||
|
{
|
|||
|
g_s_rev_state_onenet = S19;
|
|||
|
Uart_Comm.rev_len=0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S19://+MIPLWRITE <20><>','<27><><EFBFBD><EFBFBD> +MIPLEXCUTE<54>Իس<D4BB><D8B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if ((data != ',')&&(data != 0x0D))// ',' <20><><EFBFBD><EFBFBD> <20>س<EFBFBD>
|
|||
|
{
|
|||
|
if (Uart_Comm.rev_len < UP_BUF_SIZE*2)
|
|||
|
{
|
|||
|
Uart_Comm.flow_count++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD>ۼ<EFBFBD>
|
|||
|
if((data >= 0x30 && data <= 0x39) || (data >= 0x41 && data <= 0x46) || (data >= 0x61 && data <= 0x66))
|
|||
|
{ //ֻѡ<D6BB><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-9 <20>ַ<EFBFBD> A-F <20><><EFBFBD><EFBFBD> a-f
|
|||
|
Uart_Comm.rev_buf[Uart_Comm.rev_len++] = data;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_len=0;
|
|||
|
g_s_rev_state_onenet = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.nb_data_type = NB_RCV_COAP_DATA;
|
|||
|
Uart_Comm.nbiot_rev_ack = TRUE;//<2F><><EFBFBD><EFBFBD>дӦ<D0B4><D3A6>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_s_rev_state_onenet = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
[18:49:49.857]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>AT+MIPLCLOSE=0
|
|||
|
OK
|
|||
|
|
|||
|
+MIPLEVENT: 0,15
|
|||
|
*/
|
|||
|
static void AT_MIPLCLOSE_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if (data == 'E') g_s_rev_state = S1;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if (data == 'V') g_s_rev_state = S2;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if (data == 'E') g_s_rev_state = S3;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if (data == 'N') g_s_rev_state = S4;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if (data == 'T') g_s_rev_state = S5;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if (data == ':') g_s_rev_state = S6;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if (data == '0') g_s_rev_state = S7;
|
|||
|
} break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if (data == ',') g_s_rev_state = S8;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if (data == '1') g_s_rev_state = S9;
|
|||
|
else g_s_rev_state = S0;
|
|||
|
} break;
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if (data == '5')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S_IDLE; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state = S0; //<2F><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD>,<2C>ÿ<EFBFBD>״̬
|
|||
|
}
|
|||
|
} break;
|
|||
|
default:break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
static void AT_CTM2MREG_MACHINE(u8 data) //E7025<32><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if(data=='O')
|
|||
|
{
|
|||
|
g_s_rev_state=S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if(data=='+')
|
|||
|
{
|
|||
|
g_s_rev_state=S2;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if(data==':')
|
|||
|
{
|
|||
|
g_s_rev_state=S3;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if(data=='r')
|
|||
|
{
|
|||
|
g_s_rev_state=S4;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if(data=='e')
|
|||
|
{
|
|||
|
g_s_rev_state=S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if(data=='g')
|
|||
|
{
|
|||
|
g_s_rev_state=S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if(data==',')
|
|||
|
{
|
|||
|
g_s_rev_state=S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if(data=='0')
|
|||
|
{
|
|||
|
// Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state=S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if(data==':')
|
|||
|
{
|
|||
|
g_s_rev_state=S9;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S9:
|
|||
|
{
|
|||
|
if(data=='s')
|
|||
|
{
|
|||
|
g_s_rev_state=S10;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if(data=='r')
|
|||
|
{
|
|||
|
g_s_rev_state=S11;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S11:
|
|||
|
{
|
|||
|
if(data=='v')
|
|||
|
{
|
|||
|
g_s_rev_state=S12;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S12:
|
|||
|
{
|
|||
|
if(data==',')
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
[17:45:23.145]<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>AT+ECSTATUS
|
|||
|
+ECSTATUS: PHY, DlEarfcn:2506, UlEarfcn:20506, PCI:184, Band:5, RSRP:-79, RSRQ:-2, SNR:18, AnchorFreqOfst:11, NonAnchorFreqOfst:0, CeLevel:0, DlBler:0/100, UlBler:1290/100, DataInactTimerS:60, RetxBSRTimerP:16, TAvalue:10, TxPower 3, NBMode:"Stand alone"
|
|||
|
+ECSTATUS: L2, SrbNum:2, DrbNum:0
|
|||
|
+ECSTATUS: RRC, State:"CONNECTED", TAC:14319, CellId:56612944
|
|||
|
*/
|
|||
|
static void AT_ECSTATUS_MACHINE(u8 data)
|
|||
|
{
|
|||
|
switch (g_s_rev_state)
|
|||
|
{
|
|||
|
case S0:
|
|||
|
{
|
|||
|
if(data=='D')
|
|||
|
{
|
|||
|
g_s_rev_state=S1;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S1:
|
|||
|
{
|
|||
|
if(data=='l')
|
|||
|
{
|
|||
|
g_s_rev_state=S2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S2:
|
|||
|
{
|
|||
|
if(data=='E')
|
|||
|
{
|
|||
|
g_s_rev_state=S3;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S3:
|
|||
|
{
|
|||
|
if(data=='a')
|
|||
|
{
|
|||
|
g_s_rev_state=S4;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S4:
|
|||
|
{
|
|||
|
if(data=='r')
|
|||
|
{
|
|||
|
g_s_rev_state=S5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S5:
|
|||
|
{
|
|||
|
if(data=='f')
|
|||
|
{
|
|||
|
g_s_rev_state=S6;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S6:
|
|||
|
{
|
|||
|
if(data=='c')
|
|||
|
{
|
|||
|
g_s_rev_state=S7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S7:
|
|||
|
{
|
|||
|
if(data=='n')
|
|||
|
{
|
|||
|
g_s_rev_state=S8;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state=S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S8:
|
|||
|
{
|
|||
|
if(data == ':') //
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
s_g_earfcn_value = 0;
|
|||
|
g_s_rev_state = S9;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S9://earfcn
|
|||
|
{
|
|||
|
if(data == ',') //earfcn
|
|||
|
{
|
|||
|
int tmp1=0;
|
|||
|
s_g_earfcn_value = 0;
|
|||
|
for(tmp1 = 0 ; tmp1 < s_g_temp1 ; tmp1++)
|
|||
|
{
|
|||
|
s_g_earfcn_value *= 10;
|
|||
|
s_g_earfcn_value += g_tmp_byte[tmp1];
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S10;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S_IDLE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case S10:
|
|||
|
{
|
|||
|
if(data == ':') //UlEarfcn
|
|||
|
{
|
|||
|
g_s_rev_state = S11;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S11:
|
|||
|
{
|
|||
|
if(data == ':') //PCI
|
|||
|
{
|
|||
|
g_s_rev_state = S12;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S12:
|
|||
|
{
|
|||
|
if(data == ':') //Band
|
|||
|
{
|
|||
|
g_s_rev_state = S13;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S13:
|
|||
|
{
|
|||
|
if(data == ':') //RSRP
|
|||
|
{
|
|||
|
g_s_rev_state = S14;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S14:
|
|||
|
{
|
|||
|
if(data == ',')//rsrp
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1];
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_rsrp_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 + g_tmp_byte[4];
|
|||
|
}
|
|||
|
s_g_rsrp_value=s_g_rsrp_value*10;
|
|||
|
if(1 == g_tmp_byte[0])//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
s_g_rsrp_value = -s_g_rsrp_value;
|
|||
|
}
|
|||
|
g_s_rev_state = S15;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[1 + s_g_temp1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S15:
|
|||
|
{
|
|||
|
if(data == ':') //RSRQ
|
|||
|
{
|
|||
|
g_s_rev_state = S16;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S16:
|
|||
|
{
|
|||
|
if(data == ':') //SNR
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
s_g_snr_value =0;
|
|||
|
g_s_rev_state = S17;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S17://snr
|
|||
|
{
|
|||
|
if(data == ',')//
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(3 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 100 + g_tmp_byte[2] * 10 + g_tmp_byte[3];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
else if(4 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_snr_value = g_tmp_byte[1] * 1000 + g_tmp_byte[2] * 100 + g_tmp_byte[3]*10 +g_tmp_byte[4];
|
|||
|
s_g_snr_value = s_g_snr_value*10;
|
|||
|
}
|
|||
|
if(1 == g_tmp_byte[0])
|
|||
|
{
|
|||
|
s_g_snr_value = -s_g_snr_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S18;
|
|||
|
}
|
|||
|
else if(data == ',')
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S18;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1 + 1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S18:
|
|||
|
{
|
|||
|
if(data == ':') //AnchorFreqOfst
|
|||
|
{
|
|||
|
g_s_rev_state = S19;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S19:
|
|||
|
{
|
|||
|
if(data == ':') //NonAnchorFreqOfst
|
|||
|
{
|
|||
|
g_s_rev_state = S20;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S20:
|
|||
|
{
|
|||
|
if(data == ':') //CeLevel
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S21;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S21:
|
|||
|
{
|
|||
|
if(data == ',')//CeLevel
|
|||
|
{
|
|||
|
if(1 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_ecl_value = g_tmp_byte[1];
|
|||
|
s_g_ecl_value = s_g_ecl_value*10;
|
|||
|
}
|
|||
|
else if(2 == s_g_temp1)
|
|||
|
{
|
|||
|
s_g_ecl_value = g_tmp_byte[1] * 10 + g_tmp_byte[2];
|
|||
|
s_g_ecl_value = s_g_ecl_value*10;
|
|||
|
}
|
|||
|
if(1 == g_tmp_byte[0])
|
|||
|
{
|
|||
|
s_g_ecl_value = -s_g_ecl_value;
|
|||
|
}
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_tmp_byte[0] = 0;
|
|||
|
g_s_rev_state = S22;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(data == '-')
|
|||
|
{
|
|||
|
g_tmp_byte[0] = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 4)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1 + 1] = data - 0x30;
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S22://CellId
|
|||
|
{
|
|||
|
if(data == 'I') //
|
|||
|
{
|
|||
|
g_s_rev_state = S23;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S22;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S23:
|
|||
|
{
|
|||
|
if(data == 'd') //
|
|||
|
{
|
|||
|
g_s_rev_state = S24;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S22;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S24:
|
|||
|
{
|
|||
|
if(data == ':') //
|
|||
|
{
|
|||
|
s_g_temp1 = 0;
|
|||
|
g_s_rev_state = S25;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
g_s_rev_state = S22;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case S25://CELLID
|
|||
|
{
|
|||
|
if(data == '\r')//
|
|||
|
{
|
|||
|
int tmp=0;
|
|||
|
memset(s_g_cell_id,0,CELL_ID_SIZE);
|
|||
|
for(tmp=0 ; tmp < s_g_temp1 ; tmp++)
|
|||
|
{
|
|||
|
s_g_cell_id[tmp] = g_tmp_byte[tmp];
|
|||
|
}
|
|||
|
Uart_Comm.rev_ack_flag = UART_OK;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(s_g_temp1 < 10)
|
|||
|
{
|
|||
|
g_tmp_byte[s_g_temp1] = data;//cellid <20><><EFBFBD>ַ<EFBFBD>
|
|||
|
s_g_temp1++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Uart_Comm.rev_ack_flag = UART_ERROR;
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
g_s_rev_state = S0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetDiscover_num(char *discover_num)
|
|||
|
{
|
|||
|
for(u8 i = 0; i < sizeof(Uart_Comm.nbiot_discover_num); i++)
|
|||
|
{
|
|||
|
*(discover_num+i) = Uart_Comm.nbiot_discover_num[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetObserve_num (char *observe_num)
|
|||
|
{
|
|||
|
for(u8 i = 0; i < sizeof(Uart_Comm.nbiot_observe_num); i++)
|
|||
|
{
|
|||
|
*(observe_num + i) = Uart_Comm.nbiot_observe_num[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetWriteAck_num (char *ack_num)
|
|||
|
{
|
|||
|
for(u8 i = 0; i < sizeof(Uart_Comm.nbiot_rev_serial_number); i++)
|
|||
|
{
|
|||
|
*(ack_num+i) = Uart_Comm.nbiot_rev_serial_number[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
u8 NbiotGetRevAck (void)
|
|||
|
{
|
|||
|
return Uart_Comm.nbiot_rev_ack;
|
|||
|
}
|
|||
|
//
|
|||
|
//
|
|||
|
u8 NbiotGetOnenetTypeDownOrder (void)
|
|||
|
{
|
|||
|
return Uart_Comm.Onenet_type_down_order;
|
|||
|
}
|
|||
|
//
|
|||
|
void ClearNbiotGetRevAck (void)
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_ack = FALSE;
|
|||
|
}
|
|||
|
void NbiotGetRSRP(s16 *rsrp_data)
|
|||
|
{
|
|||
|
*rsrp_data = s_g_rsrp_value;
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetSNR(s16 *snr_data)
|
|||
|
{
|
|||
|
*snr_data = s_g_snr_value;
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetCell_ID(u8 *cell_id_data)
|
|||
|
{
|
|||
|
u8 i=0;
|
|||
|
u32 temp_cellid=0;
|
|||
|
u8 temp_cellidbuf[CELL_ID_SIZE];
|
|||
|
u8 temp_cellidbuf1[CELL_ID_SIZE];
|
|||
|
for(i=0;i<CELL_ID_SIZE;i++)
|
|||
|
{
|
|||
|
if((s_g_cell_id[i]>=0x30)&&(s_g_cell_id[i]<=0x39))
|
|||
|
{
|
|||
|
temp_cellid += (s_g_cell_id[i]-0x30);
|
|||
|
temp_cellid *=10;
|
|||
|
}
|
|||
|
temp_cellidbuf[i]=0;
|
|||
|
temp_cellidbuf1[i]=0;
|
|||
|
}
|
|||
|
temp_cellid /= 10;//ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>0
|
|||
|
for(i=0;i<CELL_ID_SIZE;i++)
|
|||
|
{
|
|||
|
if((temp_cellid&0x0F)<=9)
|
|||
|
{
|
|||
|
temp_cellidbuf[i] = '0'+(temp_cellid&0x0F);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp_cellidbuf[i] = 'a'+(temp_cellid&0x0F)-10;
|
|||
|
}
|
|||
|
temp_cellid >>=4;
|
|||
|
}
|
|||
|
for(i=0;i<CELL_ID_SIZE;i++)
|
|||
|
{
|
|||
|
temp_cellidbuf1[9-i] = temp_cellidbuf[i];
|
|||
|
}
|
|||
|
for(i = 0; i < CELL_ID_SIZE; i++)
|
|||
|
{
|
|||
|
*(cell_id_data+i) = temp_cellidbuf1[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetPCI(u16 *pci_data)
|
|||
|
{
|
|||
|
*pci_data = s_g_pci_value;
|
|||
|
}
|
|||
|
void SetUartCommRevFlag (void)
|
|||
|
{
|
|||
|
Uart_Comm.nbiot_rev_flag = TRUE;
|
|||
|
}
|
|||
|
|
|||
|
void NbiotGetEARFCN(u16 *earfcn_data)
|
|||
|
{
|
|||
|
*earfcn_data = s_g_earfcn_value;
|
|||
|
}
|
|||
|
|
|||
|
//udp<64><70>ʼ<EFBFBD><CABC>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
|||
|
void UdpStartCheckData(void)
|
|||
|
{
|
|||
|
udp_check_rev_data_flag = TRUE;
|
|||
|
}
|
|||
|
//udp<64><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
|||
|
void UdpEndCheckData(void)
|
|||
|
{
|
|||
|
udp_check_rev_data_flag = FALSE;
|
|||
|
}
|
|||
|
//udp<64>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u8 UdpIfNeedReadData (void)
|
|||
|
{
|
|||
|
return Uart_Comm.udp_rev_data_hint;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>udp<64><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>־
|
|||
|
void ClearUdpReadDataFlag (void)
|
|||
|
{
|
|||
|
Uart_Comm.udp_rev_data_hint = FALSE;
|
|||
|
}
|
|||
|
//<2F><>ȡ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u8 GetRcvDataType(void)
|
|||
|
{
|
|||
|
return Uart_Comm.nb_data_type;
|
|||
|
}
|
|||
|
void NbiotGetCSQ(u8 *csq_data)
|
|||
|
{
|
|||
|
*csq_data = g_csq_value;
|
|||
|
}
|
|||
|
void NbiotSetRevMipldiscover(void)
|
|||
|
{
|
|||
|
memset(Uart_Comm.nbiot_discover_num,0,sizeof(Uart_Comm.nbiot_discover_num));
|
|||
|
Uart_Comm.send_style = cst_AT_No_AT_MIPLDISCOVER; //ֱ<><D6B1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>һ<EFBFBD><D2BB>״̬<D7B4><CCAC> AT_WAIT_MIPLDISCOVER
|
|||
|
}
|
|||
|
void NbiotSetRevMiplobserve(void)
|
|||
|
{
|
|||
|
memset(Uart_Comm.nbiot_observe_num,0,sizeof(Uart_Comm.nbiot_observe_num));
|
|||
|
Uart_Comm.send_style = cst_AT_No_AT_MIPLOBSERVE; //ֱ<><D6B1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>һ<EFBFBD><D2BB>״̬<D7B4><CCAC> AT_WAIT_MIPLDISCOVER
|
|||
|
}
|
|||
|
u8 NbiotGetE7025UdpSocket(void)
|
|||
|
{
|
|||
|
return e7025_udp_current_socket;
|
|||
|
}
|
|||
|
u8 NbiotGetE7025TcpSocket(void)
|
|||
|
{
|
|||
|
return e7025_tcp_current_socket;
|
|||
|
}
|
|||
|
u8 NbiotGetNBAND(void)
|
|||
|
{
|
|||
|
return s_g_band_value;
|
|||
|
}
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif
|