📄 do_handle.c
字号:
unsigned char Length=0;
unsigned char Command=0;
unsigned char Data=0;
Length=DataLength;
Command=nCommand;
Data=DataTemp;
Send_COM3_Byte(0x24);Send_COM3_Byte(Length);
Send_COM3_Byte(Command);
if(Length==4)
{
}
else if(Length==5)
{
Send_COM3_Byte(Data);
}
Send_COM3_Byte(0x0d);
RX3_Ready();
}
/********************************************************\
* 函数名:Send_COM3_SubProgram
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Send_COM3_Load(unsigned char DataLength,unsigned char nCommand,unsigned char DataTemp)
{
unsigned char Length=0;
unsigned char Command=0;
unsigned char Data=0;
Length=DataLength;
Command=nCommand;
Data=DataTemp;
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,Length);
SRAM_Write(SHANDLE_DATA_VAILD+3,Command);
if(Length==4)
{
SRAM_Write(SHANDLE_DATA_VAILD+4,0x0d);
}
else if(Length==5)
{
SRAM_Write(SHANDLE_DATA_VAILD+4,Data);
SRAM_Write(SHANDLE_DATA_VAILD+5,0x0d);
}
}
/********************************************************\
* 函数名:Handle_Set_Par
作用域:本地文件调用
* 功能:测试外部设备的功能
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_Par(unsigned char nLength)
{
unsigned int i=0;
for(i=0;i<sizeof(gGeneral_Buffer);i++) gGeneral_Buffer[i]=0;
for(i=0;i<nLength-3;i++)
{
gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
}
Do_Par();
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_PAR_ECHO,COMMAND_OK);
gTimer=0;
while(gTimer<50){}
}
/********************************************************\
* 函数名:Handle_Set_TcpIp
作用域:本地文件调用
* 功能:测试外部设备的功能
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_TcpIp(void)
{
unsigned int i,j,k;
unsigned char APN_Length=0;
unsigned char Check_Data=0;
//在gHandle_Buffer[i]中表示IP地址的第一个数
i=3;
while(1)
{
if(gHandle_Buffer[i]==0x00) break;
i++;
if(i>16+3) return;
}
//一,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//1-1,存储IP的数据值到相应的BUFFER1中,存储IP地址的长度,不包括长度本身
Check_Data=0;
SRAM_Init();
SRAM_Write(GPRS_IP_ADDRESS1_2+0,i-3);
for(j=3;j<i;j++)
{
Check_Data += gHandle_Buffer[j];
SRAM_Write(GPRS_IP_ADDRESS1_2+j-2,gHandle_Buffer[j]);
}
SRAM_Write(GPRS_IP_ADDRESS1_CHECK_2,Check_Data);
//1-2,将IP地址的SOCKET数据存储在buffer1相应的缓冲区中,因为上面gHandle_Buffer[i]=0x00
i++;
gIP_Port_Num = gHandle_Buffer[i];
gIP_Port_Num<<=8;
gIP_Port_Num += gHandle_Buffer[i+1];
gIP_Port_Num<<=8;
gIP_Port_Num += gHandle_Buffer[i+2];
gIP_Port_Num<<=8;
gIP_Port_Num += gHandle_Buffer[i+3];
SRAM_Init();
Check_Data=ASCII(gIP_Port_Num/10000);
SRAM_Write(GPRS_SOCKET1_2+0,ASCII(gIP_Port_Num/10000));
Check_Data += ASCII((gIP_Port_Num%10000)/1000);
SRAM_Write(GPRS_SOCKET1_2+1,ASCII((gIP_Port_Num%10000)/1000));
Check_Data += ASCII((gIP_Port_Num%1000)/100);
SRAM_Write(GPRS_SOCKET1_2+2,ASCII((gIP_Port_Num%1000)/100));
Check_Data += ASCII((gIP_Port_Num%100)/10);
SRAM_Write(GPRS_SOCKET1_2+3,ASCII((gIP_Port_Num%100)/10));
Check_Data += ASCII(gIP_Port_Num%10);
SRAM_Write(GPRS_SOCKET1_2+4,ASCII(gIP_Port_Num%10));
SRAM_Write(GPRS_SOCKET1_2+5,Check_Data);
OperateSPIEnd();
//1-3,TCP开关量的判断处理
gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
gStatus2_Flag |= TCP_ON_OFF_F_1;
//1-4,APN方面的判断处理
k=i+5;
while(1)
{
if(gHandle_Buffer[k]==0x00) break;
k++;
if(k>gHandle_Buffer[1]) return;
}
APN_Length=k-i-5;
if( (APN_Length>=4)&&(APN_Length<=25) )
{
SRAM_Init();
SRAM_Write(GPRS_APN_ADDRESS2_2+0,APN_Length);
Check_Data=0;
for(j=i+5;j<k;j++)
{
SRAM_Write(GPRS_APN_ADDRESS2_2+(j-i-5)+1,APN_Length);
Check_Data += gHandle_Buffer[j];
}
SRAM_Write(GPRS_APN_END_2,Check_Data);
}
else
{
SRAM_Write(GPRS_APN_ADDRESS2_2,sizeof(APN_DEFAULT));
//5,存储APN的数据值到相应的BUFFER1中
Check_Data=0;
for(i=0;i<sizeof(APN_DEFAULT);i++)
{
SRAM_Write(GPRS_APN_ADDRESS2_2+i+1,APN_DEFAULT[i]);
Check_Data += APN_DEFAULT[i];
}
SRAM_Write(GPRS_APN_END_2,Check_Data);
}
//将TCP的开关量的信息存储在相应的FLASH中
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
WriteOneByteToBuffer2(ON_OFF_V1_2,gON_OFF_Temp0);OperateSPIEnd();
RFlash_Sector(FLASH_INFO2_ONE_2);
Re430_Flash(1);
RX2_Ready();RX3_Ready();RX4_Ready();
//二,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//注意,这里在程序刚上电的最开始已经检查过了FLASH的第1,第2扇区的数据
//在这里则不需要在继续检查
//读第一个扇区的数据到buffer2中
gTimer=0;
while(gTimer<500){}
Clear_Exter_WatchDog();
//2-1,将IP地址数据已经写入相应的buffer2中
i=3;
while(1)
{
if(gHandle_Buffer[i]==0x00) break;
i++;
if(i>16+3) return;
}
//这个时候的i指向0x00
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
WriteOneByteToBuffer2(GPRS_IP_ADDRESS1_F_2,i-3);
for(j=3;j<i;j++)
{
WriteNextByteToBuffer2(gHandle_Buffer[j]);
}
OperateSPIEnd();
gGeneral_Flag|=TCP_IP_VALID_1;
gStatus2_Flag|=IP_VAILD_F_1;
//2-2,将SOCKET的数据写入相应的buffer2中
OperateSPIEnd();
WriteOneByteToBuffer2(GPRS_SOCKET1_F_2,ASCII(gIP_Port_Num/10000));
WriteNextByteToBuffer2(ASCII((gIP_Port_Num%10000)/1000));
WriteNextByteToBuffer2(ASCII((gIP_Port_Num%1000)/100));
WriteNextByteToBuffer2(ASCII((gIP_Port_Num%100)/10));
WriteNextByteToBuffer2(ASCII(gIP_Port_Num%10));
OperateSPIEnd();
//2-3,将APN的数据写入到相应的buffer2中
//i指向APN的第一个字节
k=i+6;
while(1)
{
if(gHandle_Buffer[k]==0x00) break;
k++;
if(k>gHandle_Buffer[1]) return;
}
APN_Length=k-i-6;
WriteOneByteToBuffer2(GPRS_APN_DATA_F_2,APN_Length);
for(j=i+6;j<k;j++)
{
WriteNextByteToBuffer2(gHandle_Buffer[j]);
}
OperateSPIEnd();
gTimer=0;
while(gTimer<50){}
Clear_Exter_WatchDog();
RFlash_Sector(FLASH_INFO1_ONE_2);
Re430_Flash(0);
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_TCPIP_ECHO,COMMAND_OK);
gCheck_Par_Timer=CHECK_SYS_PAR_TIME+1;
Init_Buffer2();
RX2_Ready();
RX3_Ready();
RX4_Ready();
}
/********************************************************\
* 函数名:Handle_Set_Time
作用域:本地文件调用
* 功能:测试外部设备的功能
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_Time(void)
{
unsigned int i=0,j=0;
gCycle_TCP = gHandle_Buffer[3];
gCycle_TCP <<= 8;
gCycle_TCP += gHandle_Buffer[4];
gCycle_GSM = gHandle_Buffer[5];
gCycle_GSM <<= 8;
gCycle_GSM += gHandle_Buffer[6];
if( (gCycle_TCP>0)&&(gCycle_TCP<5) ) gCycle_TCP=5;
if( (gCycle_GSM>0)&&(gCycle_GSM<5) ) gCycle_GSM=5;
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
WriteOneByteToBuffer2(TCP_TIMER_2,gHandle_Buffer[3]);
WriteNextByteToBuffer2(gHandle_Buffer[4]);
WriteNextByteToBuffer2(gHandle_Buffer[5]);
WriteNextByteToBuffer2(gHandle_Buffer[6]);
OperateSPIEnd();
RFlash_Sector(FLASH_INFO2_ONE_2);
Re430_Flash(1);
//1,IP地址有效果,并且2,TCP的开关量是否开启
if( (gGeneral_Flag&TCP_IP_VALID_1)&&((gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0) )
{
if( (gCycle_TCP>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;
}
else if( (gCycle_TCP==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
{
gCycle_Send_Status=NOP_DATA;
}
}
//1,IP地址无效,或者TCP的开关量关闭
else
{
if( (gCycle_GSM>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;
}
else if( (gCycle_GSM==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
{
gCycle_Send_Status=NOP_DATA;
}
}
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_TIME_ECHO,COMMAND_OK);
gTimer=0;
while(gTimer<50){}
}
/********************************************************\
* 函数名:Handle_Ask_Par
作用域:本地文件调用
* 功能:测试外部设备的功能
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Ask_Par(void)
{
unsigned int i=0;
Ask_Par();
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,gGeneral_Buffer[0]+1+3);
SRAM_Write(SHANDLE_DATA_VAILD+3,HANDLE_ASK_PAR_ECHO);
for(i=1;i<=gGeneral_Buffer[0];i++)
{
SRAM_Write(SHANDLE_DATA_VAILD+3+i,gGeneral_Buffer[i]);
}
SRAM_Write(SHANDLE_DATA_VAILD+4+gGeneral_Buffer[0],0x0d);
}
/********************************************************\
* 函数名:Handle_Set_SMS
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_SMS(void)
{
if(gDisp_Buffer_Point+gHandle_Buffer[1]-4+2+6<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=gHandle_Buffer[1]-4+2+6;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=gHandle_Buffer[1]-4+2+4;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_WORD_DOWN;
gDisp_Buffer_Point++;
//从0xFF开始存储数据(转移整个中心的数据包)
Copy_String(gHandle_Buffer+3,gDisp_Buffer+gDisp_Buffer_Point,gHandle_Buffer[1]-4);
gDisp_Buffer_Point=gDisp_Buffer_Point+gHandle_Buffer[1]-4;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
}
}
/********************************************************\
* 函数名:Handle_Set_Phone
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_Phone(unsigned char nLength)
{
unsigned int i=0;
for(i=0;i<sizeof(gGeneral_Buffer);i++) gGeneral_Buffer[i]=0;
for(i=0;i<nLength-3;i++)
{
gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
}
Do_Phone_Note();
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_PHONE_NOTE_ECHO,COMMAND_OK);
}
/********************************************************\
* 函数名:Handle_Set_Dis
作用域:本地文件调用
* 功能:
* 参数:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Set_Dis(void)
{
gCycle_Distance = gHandle_Buffer[3];
gCycle_Distance <<= 8;
gCycle_Distance += gHandle_Buffer[4];
if(gHandle_Buffer[5]==1)
{
gON_OFF_Temp1 &=~ DISTANCE_TCP_ON_1;
gStatus3_Flag |= DISTANCE_ON_F_1;
}
else if(gGeneral_Buffer[5]==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;
//根据状态的改变,则需要重新更新扇区0中的数据,并重新计算校验核,写入扇区
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
WriteOneByteToBuffer2(ON_OFF_V2_2,gON_OFF_Temp1);
OperateSPIEnd();
WriteOneByteToBuffer2(TCP_TIMER_2,0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(0);
WriteNextByteToBuffer2(gHandle_Buffer[3]);
WriteNextByteToBuffer2(gHandle_Buffer[4]);
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;
//返回设置成功
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_SET_DISTANCE_ECHO,COMMAND_OK);
}
/********************************************************\
* 函数名:Handle_Test_Sram
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Handle_Test_Sram(void)
{
unsigned int i=0,j=0,k=0;
unsigned char Data_Temp=0;
unsigned char Data_Read=0;
//关闭中断1;停止中断对外部SRAM的操作
IE2&=~URXIE1; //USART1接收中断禁止
j=0;
for(k=0;k<=0x100;k++)
{
for(i=0;i<=0xFF;i++)
{
gGeneral_Buffer[i]=(char)(i+k);
}
Clear_Exter_WatchDog();
SRAM_Init();
for(i=0;i<=0xFF;i++)
{
SRAM_Write( (int)(k*0xFF+i),gGeneral_Buffer[i]);
}
SRAM_Init();
for(i=0;i<=0xFF;i++)
{
Data_Temp=SRAM_Read((int)(k*0xFF+i));
if(Data_Temp!=gGeneral_Buffer[i])
{
j=1;break;
}
}
if(j==1) break;
}
if(j==1)
{
Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_ERROR);
}
else
{
Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_OK);
}
IE2|=URXIE1; //USART1接收中断允许
RX2_Ready();
RX3_Ready();
RX4_Ready();
gTimer=0;
while(gTimer<50){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -