📄 sub_c.c
字号:
Send_COM1_Byte(']');
OperateSPIEnd();
Send_COM1_Byte(0x0d);
Send_COM1_Byte(0x0a);
//================================================
//将buffer1中其余的数据填为0
gTimer=0;
while(gTimer<10){}
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,0);
for(i=PHONE_AT_2+1;i<END_SRAM_2;i++)
{
SRAM_Write(i,0);
}
}
/********************************************************\
* 函数名:Load_Info_Two()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
void Load_Info_Two(void)
{
unsigned int i=0,j=0,k=0;
unsigned char Buffer2_Temp;
Check_Flash(FLASH_INFO2_ONE_2);
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
//处理开关量(出厂时候的默认值为屏蔽,相应的位置置1,则表示此开关量处于关闭状态)
gON_OFF_Temp0=ReadByteFromBuffer2(ON_OFF_V1_2);
gON_OFF_Temp1=ReadNextFromBuffer2();
gON_OFF_Temp2=ReadNextFromBuffer2();
//报警信息的处理(判断属于那一类型的报警,报警类型有1--126,gFlag的低7位作为报警类型,最高位在系统中作为GPS数据有效和无效的标志)
gAlarm_Type=ReadNextFromBuffer2();
if( gAlarm_Type ==(char)(~ReadNextFromBuffer2()))
{
gCycle_Send_Status=ALARM_DATA;
gCycle_Alarm=ALARM_CIRCLE_TIME;
}
else
{
gAlarm_Type=0;
gCycle_Alarm=0;
gCycle_Send_Status=NOP_DATA;
}
gAlarm_Type=0;
gCycle_Alarm=0;
gCycle_Send_Status=NOP_DATA;
//1,判断监控信息的处理
ReadNextFromBuffer2();
OperateSPIEnd();
/*
if( (gON_OFF_Temp0&PHONE_OUT_ON)==0 ) gStatus2_Flag|=HANDLE_PHONE_OUT_LIMIT;
else gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
if( (gON_OFF_Temp0&PHONE_IN_ON)==0 ) gStatus2_Flag|=HANDLE_PHONE_IN_LIMIT;
else gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
if( (gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0 ) gStatus2_Flag|=TCP_ON_OFF_F_1;
else gStatus2_Flag&=~TCP_ON_OFF_F_1;
*/
//默认电话全开
gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
gStatus2_Flag&=~TCP_ON_OFF_F_1;
gON_OFF_Temp0|=PHONE_OUT_ON;
gON_OFF_Temp0|=PHONE_IN_ON;
gON_OFF_Temp0|=TCP_LAND_ON_OFF_1;
if((gON_OFF_Temp1&DISTANCE_TCP_ON_1)==0) gStatus3_Flag |= DISTANCE_ON_F_1;
else gStatus3_Flag &=~ DISTANCE_ON_F_1;
//2,判断是否设防标志
OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(DEFENCE_F_2);
if(Buffer2_Temp==DEFENCE_YES)
{
gInternal_Flag|=VEHICLE_DEFENCE_F_1;
gStatus1_Flag|=DEFENCE_STATUS_F_1;
}
else
{
gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
gStatus1_Flag&=~DEFENCE_STATUS_F_1;
}
//TCP工作方式下的行车诡计的时间间隔
gCycle_TCP = ReadNextFromBuffer2();
gCycle_TCP<<=8;
gCycle_TCP += ReadNextFromBuffer2();
//GSM工作方式下的行车轨迹的时间间隔
gCycle_GSM = ReadNextFromBuffer2();
gCycle_GSM<<=8;
gCycle_GSM += ReadNextFromBuffer2();
//间隔距离传输的距离值
gCycle_Distance = ReadNextFromBuffer2();
gCycle_Distance<<=8;
gCycle_Distance += ReadNextFromBuffer2();
if( gCycle_GSM>3600 ) gCycle_GSM=1800;
if( gCycle_TCP>3600 ) gCycle_TCP=1800;
if( (gCycle_TCP>0)&&(gCycle_TCP<5) ) gCycle_TCP=5;
if( (gCycle_GSM>0)&&(gCycle_GSM<5) ) gCycle_GSM=5;
//处理传输方式类型
if(gCycle_TCP>5)
{
gCycle_Distance=0;
}
else if(gCycle_Distance==0xFFFF)
{
gCycle_Distance=0;
}
//历史轨迹存储的时间间隔
ReadNextFromBuffer2();
//行车最大速度
gMAX_Speed=ReadNextFromBuffer2();
//如果有线路报警时刻的最小限制距离
gMax_Limit_Distance = ReadNextFromBuffer2();
gMax_Limit_Distance<<=8;
gMax_Limit_Distance += ReadNextFromBuffer2();
if( (gMax_Limit_Distance>20)&&(gMax_Limit_Distance<0x0FFF) )
{
gCommon_Flag|=ALLOW_LINE_DIS_F_1;
}
else
{
gCommon_Flag&=~ALLOW_LINE_DIS_F_1;
}
//显示出读出的数据
// #ifdef Debug_GSM_COM1
Send_COM1_String( (unsigned char *)ON_OFF0,sizeof(ON_OFF0) );
Send_COM1_Byte(ASCII(gON_OFF_Temp0/0x10));
Send_COM1_Byte(ASCII(gON_OFF_Temp0%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)ON_OFF1,sizeof(ON_OFF1) );
Send_COM1_Byte(ASCII(gON_OFF_Temp1/0x10));
Send_COM1_Byte(ASCII(gON_OFF_Temp1%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)ON_OFF2,sizeof(ON_OFF2) );
Send_COM1_Byte(ASCII(gON_OFF_Temp2/0x10));
Send_COM1_Byte(ASCII(gON_OFF_Temp2%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)FLAG,sizeof(FLAG) );
Send_COM1_Byte(ASCII(gAlarm_Type/0x10));
Send_COM1_Byte(ASCII(gAlarm_Type%0x10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)TCP_TIME,sizeof(TCP_TIME) );
Send_COM1_Byte(ASCII(gCycle_TCP/1000));
Send_COM1_Byte(ASCII((gCycle_TCP%1000)/100));
Send_COM1_Byte(ASCII(((gCycle_TCP%1000)%100)/10));
Send_COM1_Byte(ASCII(gCycle_TCP%10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)GSM_TIME,sizeof(GSM_TIME) );
Send_COM1_Byte(ASCII(gCycle_GSM/1000));
Send_COM1_Byte(ASCII((gCycle_GSM%1000)/100));
Send_COM1_Byte(ASCII(((gCycle_GSM%1000)%100)/10));
Send_COM1_Byte(ASCII(gCycle_GSM%10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)DIS,sizeof(DIS) );
Send_COM1_Byte(ASCII(gCycle_Distance/1000));
Send_COM1_Byte(ASCII((gCycle_Distance%1000)/100));
Send_COM1_Byte(ASCII(((gCycle_Distance%1000)%100)/10));
Send_COM1_Byte(ASCII(gCycle_Distance%10));
Send_COM1_Byte(':');
Send_COM1_Byte(0x0d);
Send_COM1_Byte(0x0a);
Send_COM1_String( (unsigned char *)MAXSPEED,sizeof(MAXSPEED) );
Send_COM1_Byte(ASCII(gMAX_Speed/100));
Send_COM1_Byte(ASCII((gMAX_Speed%100)/10));
Send_COM1_Byte(ASCII(gMAX_Speed%10));
Send_COM1_Byte(':');
Send_COM1_String( (unsigned char *)LIMIT_DIS,sizeof(LIMIT_DIS) );
Send_COM1_Byte('=');
Send_COM1_Byte(ASCII(gMax_Limit_Distance/0x1000));
Send_COM1_Byte(ASCII((gMax_Limit_Distance%0x1000)/0x100));
Send_COM1_Byte(ASCII(((gMax_Limit_Distance%0x1000)%0x100)/0x10));
Send_COM1_Byte(ASCII(gMax_Limit_Distance%0x10));
Send_COM1_Byte(0x0d);
Send_COM1_Byte(0x0a);
// #endif
}
/********************************************************\
* 函数名:Load_Info_Three()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Load_Info_Three(void)
{
unsigned int i=0;
unsigned char Area_In=0;
unsigned char Area_Out=0;
unsigned char Buffer2_Temp=0;
Check_Flash(FLASH_AREA_ONE_2);
OperateSPIEnd();
Send_COM1_String( (unsigned char *)AREA_PAR,sizeof(AREA_PAR) );
Send_COM1_Byte('[');
Buffer2_Temp=ReadByteFromBuffer2(FAREA1_LON_1_2);
SRAM_Init();
SRAM_Write( SAREA_DATA_FS,0x55);
SRAM_Write(SAREA1_LON_1_2,Buffer2_Temp);
Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
for(i=1;i<17*4;i++)
{
Buffer2_Temp=ReadNextFromBuffer2();
SRAM_Write( (SAREA1_LON_1_2+i),Buffer2_Temp);
Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
}
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
OperateSPIEnd();
SRAM_Write( SAREA_DATA_FE,0xAA);
gArea_Par=0;
SRAM_Init();
Buffer2_Temp=SRAM_Read(SAREA1_PAR_2);
//0x55表示是禁出标志,0xAA则表示禁入标志
if( Buffer2_Temp==0x55) {gArea_Par|=AREA1_ON;Area_Out++;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA1_ON;gArea_Par|=AREA1_DIR;Area_In++;}
Buffer2_Temp=SRAM_Read(SAREA2_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA2_ON;Area_Out++;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA2_ON;gArea_Par|=AREA2_DIR;Area_In++;}
Buffer2_Temp=SRAM_Read(SAREA3_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA3_ON;Area_Out++;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA3_ON;gArea_Par|=AREA3_DIR;Area_In++;}
Buffer2_Temp=SRAM_Read(SAREA4_PAR_2);
if( Buffer2_Temp==0x55) {gArea_Par|=AREA4_ON;Area_Out++;}
else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA4_ON;gArea_Par|=AREA4_DIR;Area_In++;}
SRAM_Init();
SRAM_Write(SAREA_IN_NUM,Area_In);
SRAM_Write(SAREA_OUT_NUM,Area_Out);
if(gArea_Par!=0) gStatus2_Flag|=AREA_VAILD_F_1;
else gStatus2_Flag&=~AREA_VAILD_F_1;
}
/********************************************************\
* 函数名:Load_Info_Four()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Load_Info_Four(void)
{
unsigned int i=0;
unsigned char Buffer2_Temp=0;
unsigned char Buffer3_Temp=0;
//检查第一个扇区的数据点
Check_Flash(FLASH_LINEDATA1_ONE_2);
OperateSPIEnd();
//先判断此扇区数据点的个数
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
Buffer3_Temp=ReadNextFromBuffer2();
Buffer3_Temp=~Buffer3_Temp;
OperateSPIEnd();
if( ( Buffer2_Temp==Buffer3_Temp)
&&( Buffer2_Temp>0 )
&&( Buffer2_Temp<31 ) )
{
gLine_Num=Buffer2_Temp;
gCommon_Flag|=ALLOW_LINE_DATA_F_1;
}
else
{
gCommon_Flag&=~ALLOW_LINE_DATA_F_1;
Send_COM1_String((unsigned char *)LOAD_ERROR,sizeof(LOAD_ERROR));
return;
}
//如果扇区点在1-30之间,则认为有效,如果第一个扇区存满30个点,则判断第二个扇区的数据的内容
if(gLine_Num==30)
{
Check_Flash(FLASH_LINEDATA2_ONE_2);
OperateSPIEnd();
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
Buffer3_Temp=ReadNextFromBuffer2();
Buffer3_Temp=~Buffer3_Temp;
OperateSPIEnd();
if( (Buffer2_Temp==Buffer3_Temp)
&&( Buffer2_Temp>0 )
&&(Buffer2_Temp<=30) )
{
gLine_Num=gLine_Num+Buffer2_Temp;
}
}
//如果最后的点数满足小于30,则只转移第一个扇区的数据到SRAM
if(gLine_Num<=30)
{
SRAM_Init();
SRAM_Write( SLINE_NUM_1,gLine_Num );
SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
for(i=1;i<8*gLine_Num;i++)
{
Buffer2_Temp=ReadNextFromBuffer2();
SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
}
OperateSPIEnd();
}
else if( (gLine_Num>30)&&(gLine_Num<=60) )
{
SRAM_Init();
SRAM_Write( SLINE_NUM_1,gLine_Num );
SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
for(i=1;i<240;i++)
{
Buffer2_Temp=ReadNextFromBuffer2();
SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
}
OperateSPIEnd();
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
SRAM_Init();
SRAM_Write( (SLINE_DATA_1+240),Buffer2_Temp);
for(i=241;i<8*gLine_Num;i++)
{
Buffer2_Temp=ReadNextFromBuffer2();
SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
}
OperateSPIEnd();
}
Send_COM1_String( (unsigned char *)LINE_PAR,sizeof(LINE_PAR) );
Send_COM1_Byte(ASCII(gLine_Num/10));
Send_COM1_Byte(ASCII(gLine_Num%10));
SRAM_Init();
Send_COM1_Byte('[');
for(i=0;i<8*gLine_Num;i++)
{
Buffer2_Temp=SRAM_Read(SLINE_DATA_1+i);
Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
Clear_Exter_WatchDog();
}
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
}
/********************************************************\
* 函数名:Check_Flash()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
可以用来检查目标号码,短消息中心号码,IP地址的有效性
如果数据无效果,则需要将MSP430内部的信息存储区A的数据覆盖
\********************************************************/
void Check_Flash(unsigned int Add_Sector)
{
unsigned int i=0,j=0,k=0;
unsigned int iAddress=0;
unsigned char Sec_Vaild=0;
unsigned int nTCP=0;
unsigned char Secter_One=0,Secter_Two=0;
Secter_One=0;
Secter_Two=0;
//Secter_One=0,说明第一个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
//Secter_Two=0,说明第二个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector);OperateSPIEnd();
j=ReadByteFromBuffer2(0);
gGeneral_Buffer[0]=j;
for(i=1;i<254;i++)
{
gGeneral_Buffer[i]=ReadNextFromBuffer2();
j+=gGeneral_Buffer[i];
}
gGeneral_Buffer[254]=ReadNextFromBuffer2();
gGeneral_Buffer[255]=ReadNextFromBuffer2();
OperateSPIEnd();
if( ((j/256)==gGeneral_Buffer[254]) && ((j%256)==gGeneral_Buffer[255]) )
{
if(Add_Sector==FLASH_INFO1_ONE_2)
{
if( (gGeneral_Buffer[TARGET_NUMBER1_F_2]>16)
||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>16)
||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<7) )
{
Secter_One=1;
}
else if(gGeneral_Buffer[TARGET_NUMBER1_F_2]<=16)
{
k=0;
for(i=0;i<gGeneral_Buffer[TARGET_NUMBER1_F_2];i++)
{
if( (gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]>'9')
||(gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]<'0') )
{
k=1;break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -