?? busdispatch.c
字號:
#include "dispatch.h"
const char *PPP_InitOnFile="/etc/ppp/ppp-init";///etc/ppp/ppp-on";
const char *PPP_OffFile="/etc/ppp/ppp-off";
const char *GPSFile = "/bus/dat/gpsdata.dat";
const char *APCFile = "/bus/dat/passenger.dat";
const char *CRFile = "/bus/dat/carstate.dat";
char *SocketServer;
int SocketPort;
int RegTimes ;
unsigned short CurCarState;
time_t Begin;
Package_Info commInter;
int Dispatch_MsgHandle(char *tmpbuf,struct sockaddr_in echoServAddr,int SockFD)
{
unsigned short MsgID,tmpInfo;
GPS_Info LocalCurGPS_Info;
Dispatch_Info LocalDispatch_Info;
char tmpGps[25],LongP[4],SpeedH[2],Dispatch[3];
char ServerIP[16],Port[6],GPSID[13],ServerPort[22];
int i,j;
MsgID=BytesToUshort(tmpbuf,0);
switch(MsgID)
{
case 1: //System Halt down
break;
case 7: //KeyB message(報警或內置業務信息)
for(i=0;i<4;i++)
{
printf("%02x ",tmpbuf[i]&0xff);
}
printf("/n");
memset(&commInter,0,sizeof(Package_Info));
memset(tmpGps,0,sizeof(tmpGps));
IPC_ProcState_Read(PROCID_GPS,CurGPS_Info,&LocalCurGPS_Info);
IPC_ProcState_Read(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
commInter.BeginEnd=HEAD_GPS_PACKAGE;
commInter.ByteLength=0x06;
memcpy(commInter.SerialNum,GPSID_Send,12);
commInter.AppType=0x16;
commInter.OperationNo=0x3F;
commInter.SerialNo=staticSendSeriNO;
commInter.DataType=0x02;
commInter.DataLength=0x19;
CInt32ToBytes(LocalCurGPS_Info.GPSData.longitude,LongP);
tmpGps[0]=LongP[3];
tmpGps[1]=LongP[2];
tmpGps[2]=LongP[1];
tmpGps[3]=LongP[0];
CInt32ToBytes(LocalCurGPS_Info.GPSData.latitude,LongP);
tmpGps[4]=LongP[3];
tmpGps[5]=LongP[2];
tmpGps[6]=LongP[1];
tmpGps[7]=LongP[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.speed,SpeedH);
tmpGps[8]=SpeedH[1];
tmpGps[9]=SpeedH[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.direction,SpeedH);
tmpGps[10]=SpeedH[1];
tmpGps[11]=SpeedH[0];
CInt32ToBytes(LocalCurGPS_Info.GPSData.datetime,LongP);
tmpGps[12]=LongP[3];
tmpGps[13]=LongP[2];
tmpGps[14]=LongP[1];
tmpGps[15]=LongP[0];
//報警標志
if (tmpbuf[2]==1)
{
//CInt16ToBytes((1 << (tmpbuf[3]-1)+LocalDispatch_Info.CarState),SpeedH);
CInt16ToBytes(tmpbuf[3],SpeedH);
tmpGps[16]=SpeedH[1];
tmpGps[17]=SpeedH[0];
CurCarState=tmpbuf[3];
LocalDispatch_Info.CarState=((1 << (tmpbuf[3]-1)) | LocalDispatch_Info.CarState);
time(&(LocalDispatch_Info.Proc_Info.ctime));
IPC_ProcState_Write(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
}
else
{
tmpGps[16]=0x00;
tmpGps[17]=0x00;
}
//信息標志
if (LocalCurGPS_Info.GPSData.valid=='A')
{
tmpInfo=0x00;
}
else
{
tmpInfo=0x01;
}
if ((LocalDispatch_Info.CarState & 0xFFFF)>0)
{
tmpInfo=tmpInfo+0x04;
}
if (tmpbuf[2]==2)
{
tmpGps[18]=tmpbuf[3];
tmpGps[19]=tmpInfo;
}
else
{
tmpGps[18]=0x00;
tmpGps[19]=tmpInfo;
}
tmpGps[20]=LocalCurGPS_Info.GPSData.amount;
CInt16ToBytes(LocalCurGPS_Info.GPSData.hpop,SpeedH);
tmpGps[21]=SpeedH[1];
tmpGps[22]=SpeedH[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.hpe,SpeedH);
tmpGps[23]=SpeedH[1];
tmpGps[24]=SpeedH[0];
memcpy(commInter.DataContent,tmpGps,sizeof(tmpGps));
printf("Didpatch EvnBus data Dispatch_DataIP:%s\r\n",Dispatch_DataIP);
printf("Didpatch EvnBus data SocketServer!%s\r\n",SocketServer);
printf("Didpatch EvnBus data SocketPort!%d\r\n",SocketPort);
SocketSendInfo(SockFD,commInter,echoServAddr);
break;
case 8: //KeyB message(調度確認信息信息)
memset(&commInter,0,sizeof(Package_Info));
commInter.BeginEnd=HEAD_GPS_PACKAGE;
memcpy(commInter.SerialNum,GPSID_Send,12);
commInter.AppType=0x16;
commInter.OperationNo=0x3D;
commInter.SerialNo=staticSendSeriNO;
commInter.DataType=0x02;
commInter.DataLength=0x03;
Dispatch[0]=tmpbuf[3];
Dispatch[1]=tmpbuf[4];
Dispatch[2]=tmpbuf[2];
memcpy(commInter.DataContent,Dispatch,sizeof(Dispatch));
printf("Didpatch sure data Dispatch_DataIP:%s\r\n",Dispatch_DataIP);
printf("Didpatch sure data SocketServer!%s\r\n",SocketServer);
printf("Didpatch sure data SocketPort!%d\r\n",SocketPort);
SocketSendInfo(SockFD,commInter,echoServAddr);
break;
case 9:
//設置通信服務器的IP和Port
memset(ServerIP,0,16);
memset(Port,0,6);
memset(ServerPort,0,22);
i=0;
while((tmpbuf[2+i]!='#') && (tmpbuf[2+i]!=0x00))
{
ServerIP[i]=tmpbuf[2+i];
i++;
}
ServerIP[i]='\0';
i++;
j=0;
while(tmpbuf[2+i+j]!=0x00)
{
Port[j]=tmpbuf[2+i+j];
j++;
}
Port[j]='\0';
IniSave("SERVER","SERVERIP",ServerIP);
IniSave("SERVER","SERVERPORT",Port);
memset(SocketServer,0,16);
memcpy(SocketServer,ServerIP,16);
SocketPort=atoi(Port);
//修改共享內存
memset(ServerPort,0,sizeof(ServerPort));
strcat(ServerPort,ServerIP);
strcat(ServerPort,"#");
strcat(ServerPort,Port);
memcpy(LocalDispatch_Info.CenterAddr,ServerPort,22);
LocalDispatch_Info.Proc_Info.PID = getpid();
time(&(LocalDispatch_Info.Proc_Info.ctime));
//Share mem write
IPC_ProcState_Write(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
break;
case 0xf:
printf("receive msg of robbing!*****\n");
CurCarState = 255;
memset(&commInter,0,sizeof(Package_Info));
memset(tmpGps,0,sizeof(tmpGps));
IPC_ProcState_Read(PROCID_GPS,CurGPS_Info,&LocalCurGPS_Info);
IPC_ProcState_Read(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
commInter.BeginEnd=HEAD_GPS_PACKAGE;
commInter.ByteLength=0x06;
memcpy(commInter.SerialNum,GPSID_Send,12);
commInter.AppType=0x16;
commInter.OperationNo=0x3F;
commInter.SerialNo=staticSendSeriNO;
commInter.DataType=0x02;
commInter.DataLength=0x19;
CInt32ToBytes(LocalCurGPS_Info.GPSData.longitude,LongP);
tmpGps[0]=LongP[3];
tmpGps[1]=LongP[2];
tmpGps[2]=LongP[1];
tmpGps[3]=LongP[0];
CInt32ToBytes(LocalCurGPS_Info.GPSData.latitude,LongP);
tmpGps[4]=LongP[3];
tmpGps[5]=LongP[2];
tmpGps[6]=LongP[1];
tmpGps[7]=LongP[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.speed,SpeedH);
tmpGps[8]=SpeedH[1];
tmpGps[9]=SpeedH[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.direction,SpeedH);
tmpGps[10]=SpeedH[1];
tmpGps[11]=SpeedH[0];
CInt32ToBytes(LocalCurGPS_Info.GPSData.datetime,LongP);
tmpGps[12]=LongP[3];
tmpGps[13]=LongP[2];
tmpGps[14]=LongP[1];
tmpGps[15]=LongP[0];
//報警標志
{
tmpGps[16]=0;
tmpGps[17]=0xff;
LocalDispatch_Info.CarState=( 1 | LocalDispatch_Info.CarState);
time(&(LocalDispatch_Info.Proc_Info.ctime));
IPC_ProcState_Write(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
}
/*
else
{
tmpGps[16]=0x00;
tmpGps[17]=0x00;
}*/
//信息標志
if (LocalCurGPS_Info.GPSData.valid=='A')
{
tmpInfo=0x00;
}
else
{
tmpInfo=0x01;
}
if ((LocalDispatch_Info.CarState & 0xFFFF)>0)
{
tmpInfo=tmpInfo+0x04;
}
if (tmpbuf[2]==2)
{
tmpGps[18]=tmpbuf[3];
tmpGps[19]=tmpInfo;
}
else
{
tmpGps[18]=0x00;
tmpGps[19]=tmpInfo;
}
tmpGps[20]=LocalCurGPS_Info.GPSData.amount;
CInt16ToBytes(LocalCurGPS_Info.GPSData.hpop,SpeedH);
tmpGps[21]=SpeedH[1];
tmpGps[22]=SpeedH[0];
CInt16ToBytes(LocalCurGPS_Info.GPSData.hpe,SpeedH);
tmpGps[23]=SpeedH[1];
tmpGps[24]=SpeedH[0];
memcpy(commInter.DataContent,tmpGps,sizeof(tmpGps));
SocketSendInfo(SockFD,commInter,echoServAddr);
break;
default:
break;
}
return 0;
}
void main()
{
int sockFD,pppCount,selectRet,tmpInfo,WaitTime_S,DataCount;
Dispatch_Info LocalDispatch_Info; //Point the share mem
struct sockaddr_in echoServAddr; /* Echo server address */
char tmpbuf[128],*ServerPort;
Package_Info commInter;
char tmpGps[25],LongP[4],SpeedH[2],Dispatch[3];
char tmpAPC[36],tmpCR[20];
time_t now;
MB_DEB("Start GPRS program!");
Signal_Init();
ServerPort=malloc(22);
Dispatch_DataIP=malloc(16);
GPSID_Send=malloc(13);
SocketServer=malloc(16);
memset(Dispatch_DataIP,0,16);
memset(GPSID_Send,0,13);
memset(SocketServer,0,16);
Waitresp = 0;
RegTimes = 0;
/* Get config value from config file */
SocketServer = IniLoad("SERVER","SERVERIP","192.168.0.138");
SocketPort = atoi(IniLoad("SERVER","SERVERPORT","8000"));
WaitTime_M= atoi(IniLoad("SERVER","TIMER_M","8"));
WaitTime_S= atoi(IniLoad("SERVER","TIMER_S","8"));
MB_DEB("Didpatch EvnBus data TIMER_M:%d",WaitTime_M);
MB_DEB("Didpatch EvnBus data SocketServer!%s",SocketServer);
MB_DEB("Didpatch EvnBus data SocketPort!%d",SocketPort);
//proc state init
CurDispatch_Info = (Dispatch_Info *)IPC_ProcState_Init(PROCID_DISPATCH,0);
CurGPS_Info = (GPS_Info *)IPC_ProcState_Init(PROCID_GPS,SHM_RDONLY);
CurKeyB_Info = (KeyB_Info *)IPC_ProcState_Init(PROCID_KEYB,SHM_RDONLY);
//修改共享內存
memset(ServerPort,0,22);
LocalDispatch_Info.CarState=0;
LocalDispatch_Info.CommState=0;
strcat(ServerPort,SocketServer);
strcat(ServerPort,"#");
memset(tmpGps,0,sizeof(tmpGps));
DataCount=NumtoStrL(SocketPort,tmpGps);
strcat(ServerPort,tmpGps);
memcpy(LocalDispatch_Info.CenterAddr,ServerPort,22);
LocalDispatch_Info.Proc_Info.PID = getpid();
time(&(LocalDispatch_Info.Proc_Info.ctime));
//Share mem write
IPC_ProcState_Write(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
//IPC_ProcState_Read(PROCID_DISPATCH,CurDispatch_Info,&LocalDispatch_Info);
//put DISPATCH data and com status to sharemem
//printf("DISPATCH read success!\r\n");
//printf("DISPATCH Data CarState:%d\r\n",LocalDispatch_Info.CarState);
//printf("DISPATCH Data Proc_Info.CommState:%d\r\n",LocalDispatch_Info.CommState);
//printf("DISPATCH Data Proc_Info.PID:%d\r\n",LocalDispatch_Info.Proc_Info.PID);
//printf("DISPATCH Data Proc_Info.ctime:%s\r\n",ctime(&(LocalDispatch_Info.Proc_Info.ctime)));
//消息機制初始化
MSGQ_Init();
MSGQ_Clear(PROCID_DISPATCH);
ReceiveMsgQ=0;
CurCarState=0;
Begin=time(NULL); //初始化上次發送數據的時間
GPSFileInit();
APCFileInit();
CRFileInit();
MB_DEB("unsend GPS %d; send GPS %d!",Offset_UnSendGPS,Offset_SendGPS);
MB_DEB("unsend APC %d; send APC %d!",Offset_UnSendAPC,Offset_SendAPC);
MB_DEB("unsend CR %d; send CR %d!",Offset_UnSendCR,Offset_SendCR);
// DISPATCH_Exec(PPP_OffFile);
memset(CurDispatch_SendInfo,0,sizeof(CurDispatch_SendInfo));
// exit(0);
while(strcmp(GPSID_Send,"")==0)
{
if (GPRS_Reset()==0)
{
GPRS_GetTermID(GPSID_Send);
}
GPSID_Send[12]='\0';
MB_DEB("GPSID_Send:%s",GPSID_Send);
if (PPP_Status())
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -