⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 busdispatch.c

📁 基于嵌入式linux下
💻 C
📖 第 1 页 / 共 3 页
字号:
	#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 + -