Beispiel #1
0
/*
 * 返回新的设备,返回每条信息中格式为:  (暂时放一放)
 * 车主手机-设备id-车牌号 (暂不含设备手机号码)
 */
void sendNewDeviceInfor(int &serivalnum){

	stringstream ss; //流水号固定格式(int 要转化为string)
	ss<<setfill('0')<<setw(10)<<serivalnum;
	string serival = ss.str();

	vector<string> devices =db.getNewDevice();
	for(int i=0;i<devices.size();i++){
		cout<<devices[i]<<endl;
		vector<string> infors = getSubString(devices[i],",");
		//形成新设备上传指令
		string regi = REGI1+serival+","+infors[0]+";"+infors[1]+";"+";"+infors[2]+";"+";";
		cout<<regi<<endl;
		//上传
		if(send(sock_fd, regi.c_str(), MAXDATASIZE, 0) == -1) {
			perror((infors[1]+"新设备数据上传出错!").c_str());
			continue;
		}
		//开始检查有没有上传成功
		bool isuploadSuc = checkRecv(sock_fd,buf,REGI_BACK1+serivalnum+REGI_BACK2);
		//若上传成功了,保存到数据库,没有成功的就不管了,下次继续上传
		if(isuploadSuc){
			db.saveNewDevice(infors[1]);
			serivalnum++;
		}
	}
}
Beispiel #2
0
int main(){
	init();

	setup();

	while(1){
		csock.run();

#ifdef ACCEL
		if(millis() - timer > 10){
			readAccel();
			timer = millis();
		}
#endif

#ifdef DEMO
		if(millis() - demotimer > 50){
			if(digitalRead(switchpin) == LOW){
				Serial.println(F("switch low"));
				demosend();
			}
			demotimer = millis();
		}
#endif

		if(canSend){
			flush();
		}

		checkRecv();
	}
	return 0;
}
Beispiel #3
0
void init(){
	if( (host=gethostbyname(SERVER_IP) ) == NULL) {
		herror("gethostbyname出错!");
	}
	//建立socket
	if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		perror("socket创建出错!");
	}
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_port=htons(SERVPORT);
	serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
	bzero(&(serv_addr.sin_zero),8);
	if(connect(sock_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) {
		perror("connect出错!");
	}
	setnonblocking(sock_fd);//设置为非阻塞模式(放在connect后面)
	cout<<"connect success..."<<endl;

	//初始化流水号,位置数据的id
	db.initMin_num(minNor_id,minAla_id,serivalnum);

	//发出登录请求,并查看响应
	stringstream ss; //流水号固定格式
	ss<<setfill('0')<<setw(10)<<serivalnum;
	string serival = ss.str();
	string login_smg = LOGIN_SMG1+serival+LONIN_SMG2;
	char send_ls[MAXDATASIZE];
	strcpy(send_ls,login_smg.c_str());
	if(send(sock_fd,send_ls, MAXDATASIZE, 0) == -1) {
		close(sock_fd);
	}
	//如果登录失败不会跳出该函数,一直在函数中循环
	bool isLogin = checkRecv(sock_fd,buf,LOGIN_SMG_BACK1+serival+LOGIN_SMG_BACK2);
	if(!isLogin)
		cout<<"login fail...."<<endl;
	else{
		cout<<"login success...."<<endl;
		memset(buf, '\0', sizeof(buf));

		sleep(1);

		act_Nor_id =0;
		act_Ala_id = 0;
	}
	serivalnum++;

}
int main(int argc, char **argv)
{
  unsigned int *data_samples;
  int i;
  int size;
  pd_device_t dev;
  void *memr, *mems;
  float throughput;
  struct timeval tv1,tv2;
  int mintime, curtime;

 printf("====================================\n");
 printf("=       DMA Throughput Test        =\n");
 printf("====================================\n\n");

 
 if(argc != 2){
    printf("Usage: %s [buffer size]\n",argv[0]);
    return -1;
 }
 
 size = atoi(argv[1]);
 if(size > 524288){
    printf("Wohaa, easy there. Maximum buffer size is 262144\n");
    return -1;
 }
 if(size % 4 != 0){
    printf("Buffer size must be divisible by 4 bytes\n");
    return -1;
 }
 
 printf("Buffer size: %d\n\n",size);
 
 if(pd_open(0,&dev) != 0){
    printf("Failed to open file \n");
    return -1;
  }

  printf("Device file opened successfuly\n");

  // Allocate send and receive buffers
  
  posix_memalign( (void**)&memr, 16, size);
  posix_memalign( (void**)&mems, 16, size);
  
  //for(i=0;i<size/4;i++)
  //  ((unsigned int*)mems)[i] = i;
    
  //for(i=0;i<size/4;i++)
  //  ((unsigned int*)memr)[i] = 9;

 //--------------------------

  
 
 if(initDMA(&dev) < 0)
   printf("Init DMA failed\n");
 
 /*
 gettimeofday(&tv1,NULL);  
 
 if(setupSend(&dev, (void*)mems, size) < 0)
   printf("Setup Send failed\n");
 
 gettimeofday(&tv2,NULL);  

 printf(">> Time taken to setup send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 
  //--------------------------
 
 gettimeofday(&tv1,NULL);  

 
 if(setupRecv(&dev, memr, size) < 0)
   printf("Setup Recv failed\n");

 gettimeofday(&tv2,NULL);  

 printf(">> Time taken to setup receive transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 
 
 //--------------------------
 
 gettimeofday(&tv1,NULL);  
 
 if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");

 if(checkSend() < 0)
   printf("Check DMA send failed\n");

  gettimeofday(&tv2,NULL);  
 
 printf(">> Time taken to complete and check send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
 printf(">> Throughput: %f MB/s\n",(float)size/((float)(tv2.tv_usec - tv1.tv_usec)));
 
  //--------------------------
 
  gettimeofday(&tv1,NULL);  
 
 if(startRecv() < 0)
   printf("DMA Recv failed\n");

 if(checkRecv() < 0)
   printf("Check DMA recv failed\n");

  gettimeofday(&tv2,NULL);  
 
 printf(">> Time taken to complete and check recv transfer:%d\n", tv2.tv_usec - tv1.tv_usec);
  printf(">> Throughput: %f MB/s\n",(float)size/((float)(tv2.tv_usec - tv1.tv_usec)));

 
 */
 
 
   //--------------------------

 // Send and receive in simultaneous
 mintime = 9999;
for(i=0;i<NRUNS;i++){
  gettimeofday(&tv1,NULL);  

 if(setupSend(&dev, (void*)mems, size,1) < 0)
   printf("Setup Send failed\n");
 
 if(setupRecv(&dev, (void*)memr, size) < 0)
   printf("Setup Recv failed\n");

  gettimeofday(&tv2,NULL);  

  printf("Time taken to setup receive AND send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);

  //--------------------------

  gettimeofday(&tv1,NULL);  
  
    if(startRecv(&dev, 0) < 0)
   printf("DMA Recv failed\n");
 
   if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");
   

     if(checkRecv() < 0)
   printf("Check DMA recv failed\n");
 
   if(checkSend() < 0)
   printf("Check DMA send failed\n");
  

  
  
  gettimeofday(&tv2,NULL);  
  
   curtime = tv2.tv_usec - tv1.tv_usec;
   printf("Time taken to complete and check send AND receive transfer:%d\n", curtime);
   printf("Throughput: %f MB/s\n",(float)2*size/((float)(curtime)));

  
 freeSend(&dev);

 freeRecv(&dev);
 
 if(curtime < mintime)
   mintime = curtime;
}

 stopDMA(&dev);
 
 //for(i=0;i<size/4;i++)
 // printf("%d ",((unsigned int*)memr)[i]);
 
 free(memr); free(mems);

printf("Maximum throughput for %d points: %f MB/s\n",size,(float)2*size/((float)(mintime)));

 
  
  return 0;
}
Beispiel #5
0
int CDiscoveryApp::udpServer( void )
{
	/* Variable and structure definitions. */
	
	int sd, rc;
	struct sockaddr_in serveraddr, clientaddr;
	int clientaddrlen = sizeof(clientaddr);
	int serveraddrlen = sizeof(serveraddr);    
	
	int buflen = sizeof(DiscoveryResponse_Msg);
	
	
	unsigned char buffer[1000]={0};
	unsigned char *bufptr = buffer;
	
	if((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
	{
		LOG ("UDP server - socket() error %s", strerror(errno));
		return -1;
	}

	memset(&serveraddr, 0x00, serveraddrlen);
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(SERVPORT);
	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
	
	if((rc = bind(sd, (struct sockaddr *)&serveraddr, serveraddrlen)) < 0)
	{
		LOG ("UDP server - bind() error %s", strerror(errno));
		close(sd);
		return -1;
	}
	
	LOG("Using IP %s and port %d, bind to device [%s]", inet_ntoa(serveraddr.sin_addr), SERVPORT, m_szEthInterf);
	
	int optval=1;
	int optlen=sizeof(optval);
	
	if ( setsockopt(sd , SOL_SOCKET, SO_BROADCAST, (char *)&optval,optlen) == SOCKET_ERROR )
	{
		LOG( "AllowBroadcast() %s", strerror(errno));
		close(sd);
		return -1;
	}
	
	LOG("UDP server - Listening...");
	while( !IsStop() )	
	{
		memset(bufptr, 0, buflen);
		
		while( !checkRecv( sd, 1000000 ) ) // wait 1 second - long enough to keep the processor loat at a low level
		{	//stay in loop waiting a message. This is necessary in order to check for IsStop
			if( IsStop() )
			{
				LOG("udpServer: STOP requested, terminate");
				close(sd);
				return 1;
			}
		}
		
		if((rc = recvfrom(sd, bufptr, buflen, 0, (struct sockaddr *)&clientaddr, (socklen_t *) &clientaddrlen))<0)
		{
			LOG("UDP Server - recvfrom() error %s", strerror(errno));
			continue;
		}
		
		LOG("Incomming message from %s:%d", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port) );
		
		if( !processData(bufptr, clientaddr) )
		{
			continue;
		}
		
		clientaddr.sin_family = AF_INET;
		clientaddr.sin_port = htons(SERVPORT);
		clientaddr.sin_addr.s_addr=INADDR_BROADCAST;

		usleep((rand()%10)*1000);
		LOG("Sendback DISCOVERY_REPLY");

		if((rc = sendto(sd, (const void*)&m_stDiscoveryResponse, sizeof(DiscoveryResponse_Msg), 0, (struct sockaddr *)&clientaddr, clientaddrlen))<0)
		{
			LOG("ERROR sendto() %s", strerror(errno));
			continue;
		}
	} 
	close(sd);
	return 1;
}
int main(int argc, char **argv)
{
  unsigned int *data_samples;
  int i,val,j;
  int size, new_size;
  pd_device_t dev;
  void *memr, *mems, *mem_new;
  float throughput;
  struct timeval tv1,tv2;
  int mintime, curtime, vsize;

 printf("====================================\n");
 printf("=       Pattern Tests	            =\n");
 printf("====================================\n\n");

 if(pd_open(0,&dev) != 0){
    printf("Failed to open file \n");
    return -1;
  }

  printf("Device file opened successfuly\n");

  // Allocate send and receive buffers
 
  size = 4*1024*1024; // 32x32 matrix with 4 byte entries
 
  posix_memalign( (void**)&memr, 16, size);
  posix_memalign( (void**)&mems, 16, size);

 //for(i=0;i < size/4; i++){
 // ((int*)mems)[i] = i;
 // printf("%d ",((int*)mems)[i]);
 //}

  /*
vsize = 1;
for(i=1; i < 16; i++)
{
 mintime = 99999;
 for(j=0; j < 500; j++)
 {
   gettimeofday(&tv1,NULL);  
   compressData(mems, &mem_new, &new_size, 0, 4, 120, vsize);
   gettimeofday(&tv2,NULL);  

   curtime = tv2.tv_usec - tv1.tv_usec;

   if (curtime < mintime)
	mintime = curtime;

   free(mem_new);
 }
 printf("Total Size: %d, Time elapsed: %d\n", new_size, mintime);
 vsize *= 2;
}



 return;
*/
  // Each 5x5 subblock will hold the same value
  val = 0;
  for(i=0; i < size/4; i++){
    if (i % 16 == 0 && i!=0)
 	val ++;

    val = val % 2;

    ((int *)mems)[i] = val;
  }

  // Test matrix
  for(i=0; i < size/4; i++){
    if (i%32 == 0 && i!=0)
     printf("\n");
  
    printf("%d ", ((int*)mems)[i]);
    
  } 


//--------------------------
 
 if(initDMA(&dev) < 0)
   printf("Init DMA failed\n");
 
 // Send and receive in simultaneous
  
gettimeofday(&tv1,NULL);  

#ifdef SEND
if(setupSend(&dev, (void*)mems, size,1) < 0)
  printf("Setup Send failed\n");

	if(applyBlocking_send(16, 32, 4) < 0)
	 printf("Apply Blocking send failed\n");
#endif
 if(setupRecv(&dev, (void*)memr, size) < 0)
   printf("Setup Recv failed\n");


//int applyLinear_recv(int offset, int hsize, int stride, int total_size);
//	if(applyBlocking_recv(16, 32, 4) < 0)
	if(applyLinear_recv(0,128,128,4096) < 0)  
 	 printf("Apply Blocking recv failed\n");


  gettimeofday(&tv2,NULL);  

  printf("Time taken to setup receive AND send transfer:%d\n", tv2.tv_usec - tv1.tv_usec);

  //--------------------------

  gettimeofday(&tv1,NULL);  
#ifdef SEND
 //if(startSend(&dev, 0) < 0)
 //  printf("DMA Send failed\n");
#endif
 // printf("Press any key to continue ;)\n");
 // getchar();

  if(startRecv(&dev, 0) < 0)
   printf("DMA Recv failed\n");
 
  if(startSend(&dev, 0) < 0)
   printf("DMA Send failed\n");
   

   if(checkRecv() < 0)
    printf("Check DMA recv failed\n");
#ifdef SEND
   if(checkSend() < 0)
    printf("Check DMA send failed\n");
#endif

  
  
  gettimeofday(&tv2,NULL);  
  
   curtime = tv2.tv_usec - tv1.tv_usec;
   printf("Time taken to complete and check send AND receive transfer:%d\n", curtime);
   printf("Throughput: %f MB/s\n",(float)2*size/((float)(curtime)));


  // Test matrix
  for(i=0; i < size/4; i++){
    if (i%32 == 0 && i!=0)
     printf("\n");
  
    printf("%d ", ((int*)memr)[i]);
  } 
  
 freeSend(&dev);

 freeRecv(&dev);
 
 stopDMA(&dev);
 
 //for(i=0;i<size/4;i++)
 // printf("%d ",((unsigned int*)memr)[i]);
 
 free(memr); free(mems);

  return 0;
}
Beispiel #7
0
int main() //命令行开启,输入参数
{
	//初始化,建立socket,登录
    init();

	//========================一旦进入while循环就不跳出了,除非手动关闭,  登录成功后发1000条跳一次心跳=======================
    while(1){
    	if(act_Nor_id==0&&act_Ala_id==0){  //一轮以后才进去一次(act_Nor_id循环1000次会重新置零)
    		stringstream ss; //流水号固定格式
			ss<<setfill('0')<<setw(10)<<serivalnum;
			string serival = ss.str();
    		char send_sh[MAXDATASIZE];
    		string heart_smg = HEARTBEAT_SMG1+serival+HEARTBEAT_SMG2;
    		strcpy(send_sh,heart_smg.c_str());

    		cout<<"send heartbeat...."<<endl;
			if(send(sock_fd, send_sh, MAXDATASIZE, 0) == -1) {//发送心跳
				perror("send heartbeat 出错!");
			}
			heart_beat = checkRecv(sock_fd,buf,HEARTBEAT_SMG_BACK1+serival+HEARTBEAT_SMG_BACK2);
			if(!heart_beat){
				cout<<"heartbeat back fail...."<<endl; //如果没有心跳返回,就不发了
				continue;
			}
			cout<<"heartbeat back success...."<<endl;
    		serivalnum++;
    		sleep(1);
    	}
    	memset(buf, '\0', sizeof(buf));


		// ****************检查点名和密码同步,结果无阻塞返回*****************************
		recvbytes=recv(sock_fd, buf, MAXDATASIZE, 0);
		if (recvbytes == -1 ) {
			if(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN){//几种特殊情况,不断开socket

			}else{
				//socket 需要释放
				cout<<"关闭socket,重启初始化"<<endl;
				close(sock_fd);
				init();
				continue;
			}
		}else if(recvbytes == 0){
			//socket 需要释放
			cout<<"关闭socket,重启初始化"<<endl;
			close(sock_fd);
			init();
			continue;
		}else{                             //其他信息
			buf[recvbytes] = '\0';
			printf("Received: %s",buf);
			string str(buf);
			if(str!=""&&str.length()!=0)
				cout<<"收到服务端发送的数据   "<<str<<endl;
			//点名
			if(str.find(RECV_CALL_SMG)){//LBSD,CALL, htgl,0000000011,13911447899,END
				string calldata = getCallData(str);
				if(calldata!="nodata"){
					if(send(sock_fd, calldata.c_str(), MAXDATASIZE, 0) == -1) {//发送点名回应(服务器能不能成功接收暂时不管)
						perror("发送点名信息出错!");
					}
				}
			}
			//密码同步
			else if(str.find(PASS_SMG)){
				string passdata = getPassData(str);
				if("nodata"!=passdata){
					if(send(sock_fd, passdata.c_str(), MAXDATASIZE, 0) == -1) {//发送密码回应(服务器能不能成功接收暂时不管)
						perror("发送点名信息出错!");
					}
				}

			}
		}

		//--------------发送位置信息---------------------
		string data = getNormalData(minNor_id,act_Nor_id,serivalnum);
		if(data!="nodata"){
			cout<<"normal: "<<data<<endl;
			//向服务器发送常规数据
			if(send(sock_fd, data.c_str(), MAXDATASIZE, 0) == -1) {
				perror("发送正常位置信息 出错!");
			}
		}else{
			cout<<"目前数据库中没有新的非报警数据可以上传"<<endl;
		}

		//--------------发送报警信息-----------------------
		string alaData = getAlaData(minAla_id,act_Ala_id,serivalnum);
		cout<<alaData<<endl;
		if(alaData!="nodata"){
			cout<<"alarm: "<<alaData<<endl;
			//向服务器发送报警数据
			if(send(sock_fd, alaData.c_str(), MAXDATASIZE, 0) == -1) {
				perror("发送报警信息出错!");
			}
		}else{
			cout<<"目前数据库中没有新的报警数据可以上传"<<endl;
		}

		//查看有没有新的设备,如果有,全部获取到,并且循环在这里发完(成功的做个标记,下次不发了,失败的不做标记下一次继续发)-----------
//		sendNewDeviceInfor(serivalnum);


		//------------------写入数据库---------------------
		db.writeMin_num(minNor_id,minAla_id,serivalnum);

    }

}