📄 smsrecv.c
字号:
if(Get_Word_Bit(&alarm_flag,_OVERSPEED_ALM))Set_Word_Bit(vstate,14);
if(IsGpsWireClose()&&Get_Word_Bit(&alarm_flag,_GPSEER_ALM))Set_Word_Bit(vstate,15);
if(Get_Word_Bit(&alarm_flag,_POWER_ALM))Set_Word_Bit(vstate+1,0);
if(Get_Word_Bit(&alarm_flag,_ACC_ALM))Set_Word_Bit(vstate+1,1);
if(Get_Word_Bit(&alarm_flag,_VOLTAGE_ALM))Set_Word_Bit(vstate+1,2);
if(IsGpsLongInvalid()&&Get_Word_Bit(&alarm_flag,_GPSEER_ALM))Set_Word_Bit(vstate+1,3);
if(port[_TIMEKEEPER].status)Set_Word_Bit(vstate+1,4);
if(Get_Word_Bit(&alarm_flag,_REMOTEERR_ALM))Set_Word_Bit(vstate+1,5);
if(Get_Word_Bit(&alarm_flag,_REMOTE_ALM))Set_Word_Bit(vstate+1,6);
if(Get_Word_Bit(&alarm_flag,_BAK_ALM))Set_Word_Bit(vstate+1,7);
if(shut_down_status)Set_Word_Bit(vstate+1,8);
if(Get_Word_Bit(&alarm_flag,_ENGINE_ALM))Set_Word_Bit(vstate+1,9);
if(Get_Word_Bit(&alarm_flag,_BROKE_ALM))Set_Word_Bit(vstate+1,10);
//if(Get_Word_Bit(&alarm_flag,_POWER_ALM))Set_Word_Bit(vstate+1,11);reserve//
if(Get_Word_Bit(&alarm_flag,_DRAG_ALM))Set_Word_Bit(vstate+1,12);
//reserve13//
//the driver id14,15//
Write_Word_Stream(vstate[0]);
Write_Word_Stream(vstate[1]);
Write_Word_Stream(0);//odometer;//
Write_Word_Stream(0);
}
void Assemble_Sms_Tail(uchar attrib)
{
uchar simid; //added by leon 050923
simid = save.basevalue.mode.bit.simid; //added by leon 050923
if((AutoDial.state==_BUSY)&&(AutoDial.attrib==0x00)) return; // 0805 for listening
Write_Absword_Stream(2,Get_Stream_Len()+4);
write_crc_stream();
Write_Byte_Stream(0x0d);
Write_Byte_Stream(0x0a);
if(attrib==_SMS_SPECIAL)
{
SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],_SMS_COMMON,_INDEX_SPECIAL);
}
else if(Get_Word_Bit(&alarm_flag,_ROP_ALM))
{
SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],attrib,_INDEX_SOS);
}
else
{
SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],attrib,_INDEX_NORMAL);
}
}
void Assemble_Gprs_Tail(void)
{
Write_Absword_Stream(2,Get_Stream_Len()+4);
write_crc_stream();
Write_Byte_Stream(0x0d);
Write_Byte_Stream(0x0a);
Send_Gprsdata(Get_Stream_Headptr(),Get_Stream_Len());
}
void Send_Gpsdata(uint type, uchar attrib,uchar need_sos)
{
Assemble_Sms_Head(type);
Write_Gps_Data(type,need_sos);
if(gsmstatus.gprsdata == TRUE) //added by leon 050913
Assemble_Gprs_Tail();
else
Assemble_Sms_Tail(attrib);
}
void Send_Acc_On_proc(void)
{
Send_Gpsdata(0x0140,_SMS_SUCCESS,0);
}
void Send_Acc_On(void)
{
Stop_Timer(Send_Acc_On_Timer);
if(gsmstatus.power == _GPRS_POWER_ON)
{
if(gsmstatus.mode&0xe0)
{
#ifdef DEBUG_AT
Uart1hex(gsmstatus.mode);
Uart1Send("send a acc on");
#endif
Reset_Gprs();
Start_Timer(Send_Acc_On_Timer,30,SECOND);
}
else
{
if(gsmstatus.gprsdata == FALSE)
{
if(!gsc.Gprs_Simcard_bits.isconnecting)
{
isgprsnoservice = 1;
Gprs_Service_Proc();
}
}
else
{
if(gsmstatus.isupdate == TRUE) //added by leon 051021
return;
need_start_connect = 1;
SwitchToAtCmd();
isgprsnoservice = 1;
}
//Send_Gpsdata(0x0140,_SMS_SUCCESS,0);
}
}
else
{
Start_Timer(Send_Acc_On_Timer,50,SECOND); //modified by leon 051021 from 39s to 50s
}
}
void Send_Acc_Off(void)
{
Stop_Timer(Send_Acc_On_Timer);
if(alarm_flag&0xfe53 || gsmstatus.isupdate == TRUE || monitor_times !=0 || gsc.Gprs_Simcard_bits.isconnecting) //added by leon 051021
{
gsc.Gprs_Simcard_bits.isneedsendaccoff =1 ;
return;
}
//Stop_Timer(Fix_Send_Timer); //masked by leon
//added by leon 051021
if(gsmstatus.gprsdata == TRUE)
Send_Gpsdata(0x0240,_SMS_SUCCESS,0);
need_start_connect = 1;//add lxo 112302 for reconnect after accoff
SwitchToAtCmd();
// isgprsnoservice = 0;//add lxo 112303 for reconnect after accoff
}
void Send_Sos_Help(void)
{
Send_Gpsdata(0x0148,_SMS_SUCCESS,1);
}
void Send_Alarm_Data(void)
{
#ifdef DEBUG_AT
Uart1Send("SEND ALARM!! the alarm_flag is :");
Uart1Word(alarm_flag);
#endif
/*//Removed by lxo 021501
if(gsc.Gprs_Simcard_bits.isconnecting) //added by leon 051110
{
need_sendalarm_again = 1;
if(Hour24Remainder==0)//lxo 1208024 for 24 hours reset.
Hour24Remainder=(DWORD)(Get_Lefttime(Hour24_Send_Timer)/MINUTE);//lxo 1208025 for 24 hours reset.
Start_Timer(Hour24_Send_Timer,3,SECOND);
return;
}
*/
/*//Removed by lxo 123001
if(gsmstatus.gprsdata == FALSE)
{
if(port[_ACC].status == 0)
{
gsc.Gprs_Simcard_bits.isneedsendaccoff = 1;
if(!gsc.Gprs_Simcard_bits.isconnecting)
{
isgprsnoservice = 1;
Gprs_Service_Proc();
}
}
}
*/
if(gsmstatus.isupdate == FALSE)
Send_Gpsdata(0x0148,_SMS_COMMON,0);
if(gsmstatus.gprsdata == TRUE)
{
if(alarm_flag&0x01) //存在劫警
{
if(need_pull_led==1)
{
if(Hour24Remainder==0)//lxo 1208021 for 24 hours reset.
Hour24Remainder=(DWORD)(Get_Lefttime(Hour24_Send_Timer)/MINUTE);//lxo 1208022 for 24 hours reset.
/*
#ifdef DEBUG_AT//lxo 1208023 for 24 hours reset.
Uart1Send("Hour24Remainder/MINUTE1 is :");
Uart1Word(Hour24Remainder);
#endif
*/
Start_Timer(Hour24_Send_Timer,2,SECOND);
}
}
}
}
void Send_Message_Data(uchar *ptr ,uint len)
{
Assemble_Sms_Head(0x015A);
Write_Ptr_Stream(ptr,len);
if(gsmstatus.gprsdata == TRUE) //added by leon 050913
{
Assemble_Gprs_Tail();
Send_H06Msg(0x01);
}
else
{
is_message_data =1;
Assemble_Sms_Tail(_SMS_COMMON);
}
}
void Send_Sms_Ack(uint type,uchar ack)
{
Assemble_Sms_Head(type);
Write_Byte_Stream(ack);
if(type==0x0445)
{
Assemble_Sms_Tail(_SMS_SPECIAL);
}
else
{
Assemble_Sms_Tail(_SMS_COMMON);
}
}
void Send_Gprs_Ack(uint type,uchar ack)
{
Assemble_Sms_Head(type);
if(ack!=0xff)Write_Byte_Stream(ack);
Assemble_Gprs_Tail();
}
void Send_Gprs_Ack_Update(uchar ack)
{
Assemble_Sms_Head(0x2242);
Write_Code_Stream(soft.sn,0,_Strlen(soft.sn,16),16);
Write_Byte_Stream(ack);
Assemble_Gprs_Tail();
}
void Send_Gprs_Packet_Update(uchar ack)
{
Assemble_Sms_Head(0x2342);
Write_Byte_Stream(ack);
Write_Word_Stream(soft.curpack);
Assemble_Gprs_Tail();
}
void SendMonitorProc(void)//modified by lxo 122803
{
#ifdef DEBUG_AT
Uart1Send("IN SendMonitorProc:");
Uart1Word(monitor_times);
#endif
/*
if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
{
if(monitor_times !=0)
Start_Timer(Con_Timer,monitor_interval,SECOND);
return;
}
*/
/*//Removed by lxo 123002
if(gsmstatus.gprsdata == FALSE)
{
if(monitor_times>20)
{
if(port[_ACC].status == 0)
{
gsc.Gprs_Simcard_bits.isneedsendaccoff = 1;
}
if(!gsc.Gprs_Simcard_bits.isconnecting)
{
isgprsnoservice = 1;
Gprs_Service_Proc();
}
}
}
*/
if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
{
if(gsmstatus.gprsdata == TRUE)
{
Send_Gpsdata(0x0142,_SMS_COMMON,0);
}
//Added by lxo 06081112 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
else
InformationSave(0x0142,_SMS_COMMON,0);
#endif
}
//if(gsmstatus.gprsdata == TRUE)
// Send_Gpsdata(0x0142,_SMS_COMMON,0);
if(monitor_times!=0)
{
if(monitor_times < 255) //added by leon 051021
monitor_times --;
}
if(monitor_times!=0)
{
/*//Removed by lxo 0227021
if ((gsmstatus.gprsdata == TRUE)||(monitor_interval>7)){
Start_Timer(Con_Timer,monitor_interval,SECOND);
}
else
{
Start_Timer(Con_Timer,0x08,SECOND);
}
*/
Start_Timer(Con_Timer,monitor_interval,SECOND);//Added by lxo 0227022
}
}
void SendFixProc(void)
{
#ifdef DEBUG_AT
Uart1Send("IN SendFixProc:");
Uart1Word(save.basevalue.fixtime);
#endif
if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
{
if(save.basevalue.fixtime !=0)
Start_Timer(Fix_Send_Timer,save.basevalue.fixtime,SECOND);
return;
}
// if(gsmstatus.gprsdata == TRUE)//Removed by lxo 0303011
if((gsmstatus.gprsdata == TRUE)&&(save.basevalue.need_service==0))
Send_Gpsdata(0x0642,_SMS_COMMON,0);
if(save.basevalue.fixtime!=0)
{
Start_Timer(Fix_Send_Timer,save.basevalue.fixtime,SECOND);
}
}
void Future_Track_Proc(void) //Modified by lxo 122801
{
/*
if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
{
if(future.times !=0)
Start_Timer(Future_Timer,future.interval,SECOND);
return;
}
if(gsmstatus.gprsdata == TRUE)
Send_Gpsdata(0x0542,_SMS_COMMON,0);
*/
#ifdef DEBUG_AT
Uart1Send("IN Future_Track_Proc");
#endif
if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
{
if(gsmstatus.gprsdata == TRUE)
{
Send_Gpsdata(0x0542,_SMS_COMMON,0);
}
//Added by lxo 06081114 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
else
InformationSave(0x0542,_SMS_COMMON,0);
#endif
}
if(future.times!=0){future.times--;}
if(future.times!=0)
{
// if(future.interval<10)future.interval=10; //lxo 122201 for future check interval
// Start_Timer(Future_Timer,future.interval,SECOND);//lxo 122202 for future check interval
/*//Removed by lxo 0227031
if ((gsmstatus.gprsdata == TRUE)||(future.interval>7))//lxo 122203 for future check interval
{
Start_Timer(Future_Timer,future.interval,SECOND);
}
else
{
Start_Timer(Future_Timer,0x08,SECOND);
}
*/
Start_Timer(Future_Timer,future.interval,SECOND);//Added by lxo 0227032
}
else
{
Stop_Timer(Future_Timer);
}
}
void Start_Future_Track(void)
{
Future_Track_Proc();
}
void Hours_Send_Back(void)
{
static uchar status = 0;
if(need_sendalarm_again == 1) //another event--just use this timer 051110
{
need_sendalarm_again = 0;
Start_Timer(Hour24_Send_Timer,Hour24Remainder,MINUTE);//lxo 12080321 for 24 hours reset.
Hour24Remainder=0;//lxo 1208033 for 24 hours reset.
Send_Alarm_Proc();
if(need_pull_led == 1)//lxo 1208034 for 24 hours reset.
{
need_pull_led = 0;
Put_Led_High();
}
return;
}
if(need_pull_led == 1) //another event--just use this timer
{
need_pull_led = 0;
Put_Led_High();
Start_Timer(Hour24_Send_Timer,Hour24Remainder,MINUTE);//lxo 1208031 for 24 hours reset.
Hour24Remainder=0;//lxo 1208032 for 24 hours reset.
return;
}
if(gsmstatus.wake == _GPRS_WAKE)
{
if(gsmstatus.gprsdata == TRUE) //added by leon
Send_Gpsdata(0x0842,_SMS_SUCCESS,0);
Start_Timer(Hour24_Send_Timer,1440,MINUTE); //1440
// Start_Timer(Sleep_Gprs_Timer,10,SECOND);
// if( gsmstatus.talkmode != _TALK_ON && port[_ACC].status == 0)//lxo 113008 for 0x4208 error
// Sleep_Gprs_Proc();//lxo 113009 for 0x4208 error
ParaSet.Hours24Reset=1;//add lxo 120103 for reset mode after 24 hours passed.
Start_Timer(Gprs_Service_Timer,30,SECOND);
}
else
{
if(status==0)
{
status =1;
Wake_Up_Gprs();
Sleep_Gprs();
Start_Timer(Hour24_Send_Timer,2,MINUTE); //modified by leon from 1 to 2 minutes.
}
else if(status ==1)
{
status = 0;
if(gsmstatus.gprsdata == TRUE) //added by leon
Send_Gpsdata(0x0842,_SMS_SUCCESS,0);
Start_Timer(Hour24_Send_Timer,1440,MINUTE);
}
}
}
void send_ack_gprs_proc(void)
{
send_ack_gprs_count ++;
if(send_ack_gprs_count<4)
{
Start_Timer(send_ack_gprs_timer,15,SECOND);
Send_Gprs_Packet_Update(1);
}
else
{
Send_Gprs_Ack_Update(4);
InitSoftWare();
gsmstatus.needupdate = FALSE;
gsmstatus.isupdate = FALSE;
if(save.basevalue.gprs_mode==0) //added by leon 050921
SwitchToAtCmd();
else
{
_MemFillCpy(cur_sim.IpAddr,gprsmode_sim.IpAddr,'\0',16,_StrlenForKey(gprsmode_sim.IpAddr,'\0',16));
_MemFillCpy(cur_sim.SocketPort,gprsmode_sim.SocketPort,'\0',6,_StrlenForKey(gprsmode_sim.SocketPort,'\0',6));
SwitchToAtCmd();
SwitchToGprs();
}
}
}
void Custom_supervise_proc(void)//add by lxo;lable 122612//Modified by lxo 122802
{
#ifdef DEBUG_AT
Uart1Send("In Custom_supervise_proc");
#endif
/*
if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
{
Start_Timer(Custom_supervise_timer,0x0a,SECOND);
return;
}
if(gsmstatus.gprsdata == TRUE)
Send_Gpsdata(0x0742,_SMS_COMMON,0);
*/
if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
{
if(gsmstatus.gprsdata == TRUE)
{
Send_Gpsdata(0x0742,_SMS_COMMON,0);
}
//Added by lxo 06081113 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
else
InformationSave(0x0742,_SMS_COMMON,0);
#endif
}
Start_Timer(Custom_supervise_timer,0x0a,SECOND);
}
void Init_Smsrecv(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -