📄 process.c
字号:
#include "Process.h"
#include "flash.h"
#include "const.h"
int nATlen = 0;
int nBuf1 = 0;
int nBuf2 = 0;
int nBuf3 = 0;
void Init_Process(void)
{
//////////////////////////////////////////
// 为了提高算法的搜索效率,这里采利用 AT
// 命令的长度和3个关键字符来识别AT命令
int *pAtLen;
int *pAtBuf1;
int *pAtBuf2;
int *pAtBuf3;
pAtLen = (int*)AT_LEN;
FLASH_clr(pAtLen);
pAtBuf2 = (int*)AT_BUFA2;
FLASH_clr(pAtBuf2);
pAtLen = (int*)AT_LEN;
pAtBuf1 = (int*)AT_BUFA1;
pAtBuf2 = (int*)AT_BUFA2;
pAtBuf3 = (int*)AT_BUFA3;
// 0 AT命令的长度,检查通信链路正常命令
FLASH_ww(pAtLen,3);
FLASH_ww(pAtBuf1,'A');
FLASH_ww(pAtBuf2,'T');
FLASH_ww(pAtBuf3,13);
// 1 读出设置的号码AT+PHONENUM=?(enter)
pAtLen += 1;
pAtBuf1 += 1;
pAtBuf2 += 1;
pAtBuf3 += 1;
FLASH_ww(pAtLen,14);
FLASH_ww(pAtBuf1,'P');
FLASH_ww(pAtBuf2,'H');
FLASH_ww(pAtBuf3,'O');
// 2 AT+PHONENUM=Xxxxxxxxx(Enter)
pAtLen += 1;
pAtBuf1 += 1;
pAtBuf2 += 1;
pAtBuf3 += 1;
FLASH_ww(pAtLen,22);
FLASH_ww(pAtBuf1,'P');
FLASH_ww(pAtBuf2,'H');
FLASH_ww(pAtBuf3,'O');
return;
}
int ProcessUART0(char *pBuf,int nLen)
{
int nTemp = -1;
int i;
// 处理拨号后的响应
for(i = 0;i < nLen;i++)
{
if(pBuf[i] == 0x37 && pBuf[i + 1] == 0x39)
{
nTemp = 1;
break;
}
}
// 处理初始化后的响应和发送+++以及ATH0的响应
if(pBuf[0] == 0x30 && pBuf[1] == 13)
nTemp = 4;
// 处理拨号后的响应
if(pBuf[0] == 0x31 && pBuf[1] == 0x32 && pBuf[2] == 13)
nTemp = 1;
// 处理是否已经在拨
if(pBuf[0] == 0x33 && pBuf[1] == 13)
nTemp = 3;
// 处理拨号后的响应
if(pBuf[0] == 0x33 && pBuf[1] == 0x30 && pBuf[2] == 13)
nTemp = 1;
// 处理拨号后的响应
if(pBuf[0] == 0x35 && pBuf[1] == 0x30 && pBuf[2] == 0x20
&& pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39
&& pBuf[6] == 13)
nTemp = 1;
if(pBuf[0] == 0x35 && pBuf[1] == 0x31 && pBuf[2] == 0x20
&& pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39
&& pBuf[6] == 13)
nTemp = 1;
if(pBuf[0] == 0x32 && pBuf[1] == 0x30 && pBuf[2] == 0x20
&& pBuf[3] == 0x20 && pBuf[4] == 0x37 && pBuf[5] == 0x39
&& pBuf[6] == 13)
nTemp = 1;
// 没有接电话线的情况
if(pBuf[0] == 0x36 && pBuf[1] == 13)
nTemp = 5;
// 对方挂断的情况
if(pBuf[0] == 0x37 && pBuf[1] == 13)
nTemp = 6;
// 2表示发送+++,3表示收到+++响应
if(pBuf[0] == 13)
nTemp = 7;
return nTemp;
}
/////////////////////////////////////
// 正确返回各个命令对应的值,
// 错误返回 -1
int ProcessUART1(char *pBuf,int nLen)
{
int *pAtLen;
int *pAtBuf1;
int *pAtBuf2;
int *pAtBuf3;
int nTemp = -1;
int i;
if(nLen <= 2) return -1;
if(nLen == 3)
{
if((pBuf[0] == 'A') && (pBuf[1] == 'T') && (pBuf[2] == 13))
return 0;
}
pAtLen = (int*)AT_LEN;
pAtBuf1 = (int*)AT_BUFA1;
pAtBuf2 = (int*)AT_BUFA2;
pAtBuf3 = (int*)AT_BUFA3;
for(i = 0;i < 3;i++)
{
nATlen = *(pAtLen + i);
if(nLen == nATlen)
{
nBuf1 = *(pAtBuf1 + i);
nBuf2 = *(pAtBuf2 + i);
nBuf3 = *(pAtBuf3 + i);
if((pBuf[3] == nBuf1) && (pBuf[4] == nBuf2) && (pBuf[5] == nBuf3))
{
nTemp = i;
}
}
}
return nTemp;
}
// 将结果由参数返回
char ReadPhoneNum(char strPhone[8])
{
int *pFlash;
int nTemp;
int i;
char chrRes;
pFlash = (int*)PHONE_ADDR;
// 第一个数用来确定号码的位数
chrRes = (char)(*pFlash - 0x30);
// 第一个电话号码
pFlash += 1;
nTemp = *pFlash;
strPhone[0] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[1] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[2] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[3] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[4] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[5] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[6] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
strPhone[7] = (char)(nTemp & 0x00ff);
for(i = 0;i < 8;i++)
{
if(strPhone[i] == 0xff)
{
chrRes = 2;
break;
}
}
return chrRes;
}
// 正确返回 0,错误返回 1
char SetPhone(char UART1_RX_Temp[])
{
int *pFlash;
pFlash = (int*)PHONE_ADDR;
FLASH_clr(pFlash);
// 第一个电话号码
// 写数据到FLASH里面
if(UART1_RX_Temp[12] >= 0x30 && UART1_RX_Temp[12] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[12]);// 1 或者 0
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[13] >= 0x30 && UART1_RX_Temp[13] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[13]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[14] >= 0x30 && UART1_RX_Temp[14] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[14]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[15] >= 0x30 && UART1_RX_Temp[15] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[15]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[16] >= 0x30 && UART1_RX_Temp[16] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[16]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[17] >= 0x30 && UART1_RX_Temp[17] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[17]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[18] >= 0x30 && UART1_RX_Temp[18] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[18]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[19] >= 0x30 && UART1_RX_Temp[19] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[19]);
else
{
FLASH_clr(pFlash);
return 1;
}
pFlash += 1;
if(UART1_RX_Temp[20] >= 0x30 && UART1_RX_Temp[20] <= 0x39)
FLASH_ww(pFlash,UART1_RX_Temp[20]);
else
{
FLASH_clr(pFlash);
return 1;
}
return 0;
}
void QueryPhone(char UART1_TX_BUF[],int *nLen)
{
int *pFlash;
int nTemp;
pFlash = (int*)PHONE_ADDR;
UART1_TX_BUF[0] = '+';
UART1_TX_BUF[1] = 'P';
UART1_TX_BUF[2] = 'H';
UART1_TX_BUF[3] = 'O';
UART1_TX_BUF[4] = 'N';
UART1_TX_BUF[5] = 'E';
UART1_TX_BUF[6] = 'N';
UART1_TX_BUF[7] = 'U';
UART1_TX_BUF[8] = 'M';
UART1_TX_BUF[9] = '=';
// 第一个电话号码
// 从FLASH里面读出数据
nTemp = *pFlash;
UART1_TX_BUF[10] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[11] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[12] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[13] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[14] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[15] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[16] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[17] = (char)(nTemp & 0x00ff);
pFlash += 1;
nTemp = *pFlash;
UART1_TX_BUF[18] = (char)(nTemp & 0x00ff);
UART1_TX_BUF[19] = 13;
*nLen = 20;
}
void SetOK(char UART1_TX_BUF[],int *nLen)
{
UART1_TX_BUF[0] = 'O';
UART1_TX_BUF[1] = 'K';
UART1_TX_BUF[2] = 13;
*nLen = 3;
}
void SetError(char UART1_TX_BUF[],int *nLen)
{
UART1_TX_BUF[0] = 'E';
UART1_TX_BUF[1] = 'R';
UART1_TX_BUF[2] = 'R';
UART1_TX_BUF[3] = 'O';
UART1_TX_BUF[4] = 'R';
UART1_TX_BUF[5] = 13;
*nLen = 6;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -