📄 check_gsm.c
字号:
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Set_Phone_Limit(void)
{
unsigned char nACK=0;
nACK=gGeneral_Buffer[5];
//1,接收判断
//判断电话呼入限制的功能
if(gGeneral_Buffer[10]==0)
{
//电话呼入禁止
gON_OFF_Temp0&=~PHONE_IN_ON;
gStatus2_Flag|=HANDLE_PHONE_IN_LIMIT;
}
else if(gGeneral_Buffer[10]==0xFF)
{
//电话呼出允许
gON_OFF_Temp0|=PHONE_IN_ON;
gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
}
//判断电话呼出限制的功能
if(gGeneral_Buffer[11]==0)
{
//电话呼出禁止
gON_OFF_Temp0&=~PHONE_OUT_ON;
gStatus2_Flag|=HANDLE_PHONE_OUT_LIMIT;
}
else if(gGeneral_Buffer[11]==0xFF)
{
//电话呼出允许
gON_OFF_Temp0|=PHONE_OUT_ON;
gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
}
//2,处理后的状态存储
//根据状态的改变,则需要重新更新扇区5中的数据,并重新计算校验核,写入扇区
// OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
Deal_Sector(FLASH_INFO2_ONE_2);
WriteOneByteToBuffer2(ON_OFF_V1_2,gON_OFF_Temp0);
OperateSPIEnd();
RFlash_Sector(FLASH_INFO2_ONE_2);
Re430_Flash(1);
//3,处理完后的响应
//下面是处理需要发送接收到终端进入/退出联网状态的响应
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,SET_PHONE_LIMIT_ECHO_UP);
SRAM_Write(ECHO_SMS_2+2,nACK);
SRAM_Write(ECHO_SMS_2+3,2);
SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[10]);
SRAM_Write(ECHO_SMS_2+5,gGeneral_Buffer[11]);
gGeneral_Flag&=~LAND_TCP_ERROR_F_1;
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Set_Center_Num();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Set_Center_Num(void)
{
unsigned int i=0,j=0,k=0;
unsigned char cNum1,cNum2,cNum3;
//先读出Flash相应的第5个扇区的数据到buffer2中
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
//1,处理接收中心服务号码
//========================================
i=1+9;
while(1)
{
if(gGeneral_Buffer[i]==0x00) break;
i++;
if(i>1+9+15) return;
//这里的15表示目标号码1不会超过15个数
}
cNum1=i-(1+9);
//如果中心服务号码的长度没有超过15,则目标号码有效
if( (i<=1+9+15)&&(cNum1>0) )
{
//计算出此中心服务的号码长度并写入buffer2中相应的位置
OperateSPIEnd();
WriteOneByteToBuffer2(CENTER_NUM_F_2,cNum1);
for(j=1+9;j<i;j++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[j]);
}
OperateSPIEnd();
}
OperateSPIEnd();
//2,处理接收报警电话号码
//========================================
j=i+1;
while(1)
{
if(gGeneral_Buffer[j]==0x00) break;
j++;
if(j>1+i+15) return;
}
cNum2=j-i;
if( (j<=1+i+15)&&(cNum2>0) )
{
//计算出此报警号码的号码长度并写入buffer2
OperateSPIEnd();
WriteOneByteToBuffer2(ARALM_NUM_2,cNum2);
for(k=i+1;k<j;k++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[k]);
}
OperateSPIEnd();
}
OperateSPIEnd();
//3,处理接收监听电话号码
//========================================
k=j+1;
while(1)
{
if(gGeneral_Buffer[k]==0x00) break;
k++;if(k>1+j+15) return;
}
cNum3=k-j;
if( (k<=j+1+15)&&(cNum3>0) )
{
}
//4,预留电话号码
//========================================
//5,将更新的设置重新写入相应的Flash
OperateSPIEnd();
RFlash_Sector(FLASH_INFO2_ONE_2);
Re430_Flash(1);
//6,接收处理完毕,则发送设置响应
//========================================
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,CENTER_NUMECHO_UP);
SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(ECHO_SMS_2+3,21);
Write_PartData_Sram(ECHO_SMS_2+3);
SRAM_Write(ECHO_SMS_2+3+18,0);
SRAM_Write(ECHO_SMS_2+3+19,gStatus3_Flag);
SRAM_Write(ECHO_SMS_2+3+20,gStatus2_Flag);
SRAM_Write(ECHO_SMS_2+3+21,gStatus1_Flag);
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Set_Area_Limit();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
此程序的处理是将响应的区域参数存储在外部SRAM中,和buffer2中。并计算gArea_Par的值
\********************************************************/
void Set_Area_Limit(void)
{
unsigned int i=0;
unsigned char Buffer2_Temp=0;
gArea_Par=0;
//1,存储外部的FLASH中。
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_AREA_ONE_2);OperateSPIEnd();
WriteOneByteToBuffer2(FAREA1_LON_1_2,gGeneral_Buffer[1+9]);
for(i=1;i<68;i++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[1+9+i]);
}
OperateSPIEnd();
RFlash_Sector(FLASH_AREA_ONE_2);
//3,存储外部的SRAM中的相应位置
SRAM_Init();
SRAM_Write( SAREA_DATA_FS,0x55); //存储区域的有效标志
for(i=0;i<68;i++)
{
SRAM_Write( (SAREA1_LON_1_2+i),gGeneral_Buffer[1+9+i]);
}
SRAM_Write( SAREA_DATA_FE,0xAA);
//4,显示当前区域的参数
gArea_Par=0;
SRAM_Init();
Buffer2_Temp=SRAM_Read(SAREA1_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA1_ON;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA1_ON;gArea_Par|=AREA1_DIR;}
Buffer2_Temp=SRAM_Read(SAREA2_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA2_ON;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA2_ON;gArea_Par|=AREA2_DIR;}
Buffer2_Temp=SRAM_Read(SAREA3_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA3_ON;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA3_ON;gArea_Par|=AREA3_DIR;}
Buffer2_Temp=SRAM_Read(SAREA4_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA4_ON;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA4_ON;gArea_Par|=AREA4_DIR;}
//4,接收到区域参数的响应
Load_Buffer1_Echo(ALLOW_AREA_ECHO_UP,gGeneral_Buffer[5]);
if(gArea_Par!=0) gStatus2_Flag|=AREA_VAILD_F_1;
else gStatus2_Flag&=~AREA_VAILD_F_1;
}
/********************************************************\
* 函数名:Send_RecordData();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
补充说明:将外部数据从新组包,发送给记录仪,然后等待回音
\********************************************************/
void Send_RecordData(void)
{
unsigned int i=0;
gSMS_ACK[RECORD_EQUIPMENT_ACK]=gGeneral_Buffer[5];
for(i=11;i<=gGeneral_Buffer[0]-3;i++)
{
Send_COM1_Byte(gGeneral_Buffer[i]);
}
/*
#ifdef Debug_GSM_COM1
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
for(i=11;i<=gGeneral_Buffer[0]-3;i++)
{
Send_COM1_Byte(ASCII(gGeneral_Buffer[i]/0x10));
Send_COM1_Byte(ASCII(gGeneral_Buffer[i]%0x10));
}
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
*/
}
/********************************************************\
* 函数名:Set_Distance_Par();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Set_Distance_Par(void)
{
gCycle_Distance = gGeneral_Buffer[1+9];
gCycle_Distance <<= 8;
gCycle_Distance += gGeneral_Buffer[1+10];
if(gGeneral_Buffer[1+11]==1)
{
gON_OFF_Temp1 &=~ DISTANCE_TCP_ON_1;
gStatus3_Flag |= DISTANCE_ON_F_1;
}
else if(gGeneral_Buffer[1+11]==0)
{
gON_OFF_Temp1 |= DISTANCE_TCP_ON_1;
gStatus3_Flag &=~ DISTANCE_ON_F_1;
}
gCycle_TCP=0;
gCycle_GSM=0;
gCycle_Send_Status = NOP_DATA;
Load_Buffer1_Echo(SET_DISTANCE_DATA_UP,gGeneral_Buffer[5]);
//根据状态的改变,则需要重新更新扇区0中的数据,并重新计算校验核,写入扇区
//OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
Deal_Sector(FLASH_INFO2_ONE_2);
WriteOneByteToBuffer2(ON_OFF_V2_2,gON_OFF_Temp1);
OperateSPIEnd();
WriteOneByteToBuffer2(TCP_TIMER_2,0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(gGeneral_Buffer[1+9]);
WriteNextByteToBuffer2(gGeneral_Buffer[1+10]);
OperateSPIEnd();
RFlash_Sector(FLASH_INFO2_ONE_2);
Re430_Flash(1);
gPublic_Flag &=~ SET_DISTANCE_OK_F_1;
gSet_Distance_Info_Count=WAIT_DISPINFO_TIME-2;
}
/********************************************************\
* 函数名:Set_Phone_Num();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
电话号码本的存储,固定2个扇区,每个扇区存储10个电话本
一个电话本固定23个字节的长度,8(姓名)+13(电话号码)
扇区的0xFF处,存储当前页的号码个数,如果值为0,则需要另外存储一个扇区页
\********************************************************/
void Set_Phone_Num(void)
{
Do_Phone_Note();
//存储作为第2类信息发送的响应数据的存储
//服务器端口设置成功后的响应
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,ASK_PHONE_NUMECHO_UP);
SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(ECHO_SMS_2+3,2);
SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[1+9]);
SRAM_Write(ECHO_SMS_2+5,gGeneral_Buffer[1+10]);
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Watch_Way();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Watch_Way(void)
{
unsigned int i=0;
gWatch_Circle = gGeneral_Buffer[1+9];
gWatch_Circle <<= 8;
gWatch_Circle += gGeneral_Buffer[1+10];
gWatch_Time = gGeneral_Buffer[1+11];
gWatch_Time <<= 8;
gWatch_Time += gGeneral_Buffer[1+12];
gWatch_Count = gGeneral_Buffer[1+13];
gWatch_Count <<= 8;
gWatch_Count += gGeneral_Buffer[1+14];
if(gWatch_Circle==0)
{
if(gCycle_Send_Status==WATCH_DATA) gCycle_Send_Status=NOP_DATA;
gWatch_Count=0;gWatch_Time=0;
gWatch_Type=WATCH_TYPE_NULL;
Load_Buffer1_Echo(ASK_FREEWATCH_UP,gGeneral_Buffer[5]);
}
else
{
if( (gCycle_Send_Status==TRACK_DATA_TIME)
||(gCycle_Send_Status==TRACK_DATA_DISTANCE)
||(gCycle_Send_Status==NOP_DATA) )
{
gCycle_Send_Status=WATCH_DATA;
gPublic_Flag&=~ACCOFF_OK_F_1;
gPublic_Flag&=~ACC_OFF_UP_F_1;
gPublic_Flag&=~ACCOFF_TRACK_F_1;
ACC_OFF_Timer=0;
if(gWatch_Time!=0)
{
gWatch_Count=0;
gWatch_Type=WATCH_TYPE_TIME;
}
else
{
if(gWatch_Count!=0) gWatch_Type=WATCH_TYPE_COUNT;
else
{
Load_Buffer1_Echo(ASK_FREEWATCH_UP,gGeneral_Buffer[5]);
}
}
}
}
}
/********************************************************\
* 函数名:Line_Data_Deal();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Line_Data_Deal(void)
{
unsigned int i=0,j=0;
unsigned char nTemp=0;
unsigned char Line_Num=0;
nTemp=gGeneral_Buffer[1+10]; //帧数(范围值1,2)
Line_Num=gGeneral_Buffer[1+11]; //当前线路点的个数(1--30)
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,LINE_DATA_ECHO_UP);
SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(ECHO_SMS_2+3,2);
SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[1+9]);
SRAM_Write(ECHO_SMS_2+5,gGeneral_Bu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -