📄 sub_c.c
字号:
OperateSPIEnd();
//2,TCP服务器地址的处理
gGeneral_Buffer[GPRS_IP_ADDRESS1_2]=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
if( (gGeneral_Buffer[GPRS_IP_ADDRESS1_2]>6)&&(gGeneral_Buffer[GPRS_IP_ADDRESS1_2]<16) )
{
gGeneral_Flag|=TCP_IP_VALID_1;
gStatus2_Flag|=IP_VAILD_F_1;
Check_Data=0;
for(i=1;i<=gGeneral_Buffer[GPRS_IP_ADDRESS1_2];i++)
{
gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i]=ReadNextFromBuffer2();
Check_Data += gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i];
}
gGeneral_Buffer[GPRS_IP_ADDRESS1_CHECK_2]=Check_Data;
}
else
{
gGeneral_Flag&=~TCP_IP_VALID_1;
gStatus2_Flag&=~IP_VAILD_F_1;
}
OperateSPIEnd();
Send_COM1_Byte('I');Send_COM1_Byte('P');Send_COM1_Byte(':');
if(gGeneral_Flag&TCP_IP_VALID_1)
{
Send_COM1_Byte('O');Send_COM1_Byte('k');
}
else
{
Send_COM1_Byte('E');Send_COM1_Byte('r');Send_COM1_Byte('r');Send_COM1_Byte('o');Send_COM1_Byte('r');
}
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
//3,TCP服务器的登陆端口的处理
OperateSPIEnd();
Check_Data=0;
gGeneral_Buffer[GPRS_SOCKET1_2]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
Check_Data = gGeneral_Buffer[GPRS_SOCKET1_2];
for(i=1;i<5;i++)
{
gGeneral_Buffer[GPRS_SOCKET1_2+i]=ReadNextFromBuffer2();
Check_Data += gGeneral_Buffer[GPRS_SOCKET1_2+i];
}
gGeneral_Buffer[GPRS_SOCKET1_END_2]=Check_Data;
OperateSPIEnd();
//4,TCP登陆的APN的处理
OperateSPIEnd();
Check_Data=0;
gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
if( (gGeneral_Buffer[GPRS_APN_ADDRESS2_2]>5)&&(gGeneral_Buffer[GPRS_APN_ADDRESS2_2]<25 ) )
{
for(i=1;i<=gGeneral_Buffer[GPRS_APN_ADDRESS2_2];i++)
{
gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i]=ReadNextFromBuffer2();
Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i];
}
gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
}
//----如果写入的APN不正确,则采取默认的APN格式
else
{
Check_Data=0;
gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=sizeof(APN_DEFAULT);
for(i=0;i<sizeof(APN_DEFAULT);i++)
{
gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1]=APN_DEFAULT[i];
Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1];
}
gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
}
//5,将上面的处理的相关数据存储在buffer1的相关区域中
SRAM_Init();
SRAM_Write(TARGET_NUMBER1_2+0,gGeneral_Buffer[TARGET_NUMBER1_2]);
for(i=TARGET_NUMBER1_2+1;i<PHONE_AT_2;i++)
{
SRAM_Write(i,gGeneral_Buffer[i]);
}
}
/********************************************************\
* 函数名:Load_Flash_Par_Buffer1()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Load_Buffer1_Echo(unsigned char nCommand,unsigned char nACK)
{
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,nCommand);
SRAM_Write(ECHO_SMS_2+2,nACK);
SRAM_Write(ECHO_SMS_2+3,0);
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Send_Type1_GSM_Data_One
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
unsigned int Check_Allow_Phone(unsigned char nPhone_Length)
{
unsigned int i=0,j=0,k=0;
unsigned char Check_Temp=0;
//1,读电话号码本的第一个扇区到buffer2中(比较第一个扇区的第一个帧5个电话号码)
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
//2,比较gHandle_Buffer[]中的号码是否与前5个电话号码是否匹配中
// gGeneral_Buffer[0]---gGeneral_Buffer[nPhone_Length]中存储的是需要检验的电话号码
for(k=0;k<5;k++)
{
j=0;
OperateSPIEnd();
Check_Temp=ReadByteFromBuffer2( (ONE_1_FRAME_2+8)+21*k );
if( gGeneral_Buffer[0] != Check_Temp )
{
j=1;
}
for(i=1;i<nPhone_Length;i++)
{
if( gGeneral_Buffer[i] != ReadNextFromBuffer2() )
{
j=1;break;
}
}
OperateSPIEnd();
//如果返回0,则说明当前号码与比较号码相匹配
if(j==0)
{
return(0);
}
}
//如果返回1,则说明5个号码与比较号码没一个匹配
return(1);
}
/********************************************************\
* 函数名:Send_Handle_Signal()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Send_Handle_Signal(unsigned char nSignal)
{
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,0x09);
SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_STATUS);
SRAM_Write(SHANDLE_DATA_VAILD+4,nSignal);
SRAM_Write(SHANDLE_DATA_VAILD+5,gVolume);
if(gInternal_Flag&VEHICLE_DEFENCE_F_1) SRAM_Write(SHANDLE_DATA_VAILD+6,1);
else SRAM_Write(SHANDLE_DATA_VAILD+6,0);
//是否GPS处于有效还是无效状态
if(gGeneral_Flag&GPS_VALID_F_1) SRAM_Write(SHANDLE_DATA_VAILD+7,2);
else SRAM_Write(SHANDLE_DATA_VAILD+7,1);
SRAM_Write(SHANDLE_DATA_VAILD+8,1);
SRAM_Write(SHANDLE_DATA_VAILD+9,0x0d);
}
/********************************************************\
* 函数名:ReloadData_FlashToSram
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
/*
void LoadData_FlashToSram(unsigned int Flash_Srctor,unsigned int Flash_Adds,unsigned int Sram_Adds,unsigned int nLength)
{
unsigned int i;
unsigned char Temp;
OperateSPIEnd();ReadOnePageToBuffer2(Flash_Srctor);OperateSPIEnd();
Temp=ReadByteFromBuffer2(Flash_Adds);
SRAM_Init();
SRAM_Write( Sram_Adds,Temp);
for(i=1;i<nLength;i++)
{
Temp=ReadNextFromBuffer2();
SRAM_Write( (Sram_Adds+i),Temp);
}
OperateSPIEnd();
}
*/
/********************************************************\
* 函数名:Load_SMS_CenterNum()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Load_SMS_CenterNum(unsigned int nLength)
{
unsigned int i=0;
unsigned char Check_Data=0;
SRAM_Init();
//在buffer1的相应区域写入短消息中心号码的长度(不包括长度本身的这个字节)
Check_Data=0;
SRAM_Write(CENTER_NUM_2+0,(nLength-8));
for(i=8;i<nLength;i++)
{
//依次写入短消息中心号码
Check_Data += gGeneral_Buffer[i];
SRAM_Write(CENTER_NUM_2+i-8+1,gGeneral_Buffer[i]);
}
//即使短消息中心号码前带有+号,则一样写入到buffer1中
//写入buffer1相应的中心号码校验字的位置
SRAM_Write(CENTER_NUM_CHECK_2,Check_Data);
}
/********************************************************\
* 函数名:Check_TargetNum_Vaild()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
unsigned int Check_Vaild(unsigned int Address_S,unsigned int Address_E)
{
unsigned int i=0;
unsigned char nLength;
unsigned char Result=0;
unsigned char Check_Data=0;
//检查目标号码的有效性
SRAM_Init();
Check_Data=0;
nLength = SRAM_Read(Address_S);
for(i=0;i<nLength;i++)
{
Check_Data += SRAM_Read(Address_S+1+i);
}
Result=SRAM_Read(Address_E);
if(Check_Data==Result) return(0);
else return(1);
}
/********************************************************\
* 函数名:Check_Port()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
unsigned int Check_Port(void)
{
unsigned int i=0;
unsigned char Check_Data=0;
unsigned char Result=0;
SRAM_Init();
Check_Data = SRAM_Read(GPRS_SOCKET1_2);
for(i=1;i<5;i++)
{
Check_Data += SRAM_Read(GPRS_SOCKET1_2+i);
}
Result=SRAM_Read(GPRS_SOCKET1_END_2);
if(Check_Data==Result) return(0);
else return(1);
}
/********************************************************\
* 函数名:Judge_SMS_Way()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:
运行此子程序,则是需要有数据发送时候TCP和GSM数据的选择
\********************************************************/
void Judge_SMS_Way(void)
{
//1,如果TCP的开关量或者IP地址无效的情况下,以短消息的形式传送数据
if( ((gGeneral_Flag&TCP_IP_VALID_1)==0)
||(gON_OFF_Temp0&TCP_LAND_ON_OFF_1) )
{
gInternal_Flag|=ALLOW_DATA_F_1;
}
//2,如果TCP的开关量开启,并且IP地址有效
else
{
//2.1如果处于GSM的工作状态下
if(gM22_Status==GSM_WORK)
{
//2.1.1如果处于禁止登陆TCP的状态
if(gGeneral_Flag&LAND_TCP_ERROR_F_1)
{
gInternal_Flag|=ALLOW_DATA_F_1;
}
//2.1.2如果处于允许登陆TCP的状态,则设置标志进行TCP登陆
else
{
gOther_Flag|=NEED_LADN_TCP_F_1;
gInternal_Flag&=~ALLOW_DATA_F_1;
}
}
}
}
/********************************************************\
* 函数名:Load_Info_One()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
void Load_Info_One(void)
{
unsigned int i=0,j=0,k=0;
Check_Flash(FLASH_INFO1_ONE_2);
for(i=0;i<=sizeof(gGeneral_Buffer);i++) gGeneral_Buffer[i]=0;
Load_Flash_Par_Buffer1();
//================================================
//调试读出Flash中的参数是否正确
OperateSPIEnd();
ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
OperateSPIEnd();
//1,显示车型,车类,车组,车号
Send_COM1_String( (unsigned char *)VTYPE,sizeof(VTYPE) );
j=ReadByteFromBuffer2(VEH_TYPE_2);
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)VKIND,sizeof(VKIND) );
j=ReadNextFromBuffer2();
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)VGROUP,sizeof(VGROUP) );
j=ReadNextFromBuffer2();
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)VID,sizeof(VID) );
Send_COM1_Byte(ASCII(gVID/0x1000));
Send_COM1_Byte(ASCII((gVID%0x1000)/0x100));
Send_COM1_Byte(ASCII(((gVID%0x1000)%0x100)/0x10));
Send_COM1_Byte(ASCII(gVID%0x10));
OperateSPIEnd();
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
//2,显示目标号码1
Send_COM1_String( (unsigned char *)NUM1,sizeof(NUM1) );
j=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
if(j>16) j=0;
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte('[');
for(i=0;i<j;i++)
{
k=ReadNextFromBuffer2();
Send_COM1_Byte(k);
}
Send_COM1_Byte(']');
OperateSPIEnd();
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
//3,显示TCP服务器的IP地址
Send_COM1_String( (unsigned char *)IP_ADDRESS,sizeof(IP_ADDRESS) );
j=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
if(j>16) j=0;
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte('[');
for(i=0;i<j;i++)
{
k=ReadNextFromBuffer2();
Send_COM1_Byte(k);
}
OperateSPIEnd();
Send_COM1_Byte(']');
Send_COM1_Byte(':');
//4,显示TCP服务器的PORT号
Send_COM1_String( (unsigned char *)PORT,sizeof(PORT) );
j=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
Send_COM1_Byte('[');
Send_COM1_Byte(j);
for(i=0;i<4;i++)
{
k=ReadNextFromBuffer2();
Send_COM1_Byte(k);
}
Send_COM1_Byte(']');
//6,显示APN
OperateSPIEnd();
Send_COM1_String( (unsigned char *)TCP_APN,sizeof(TCP_APN) );
j=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
if(j>20) j=0;
Send_COM1_Byte(ASCII(j/0x10));
Send_COM1_Byte(ASCII(j%0x10));
Send_COM1_Byte('[');
for(i=0;i<j;i++)
{
k=ReadNextFromBuffer2();
Send_COM1_Byte(k);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -