/* * 返回新的设备,返回每条信息中格式为: (暂时放一放) * 车主手机-设备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++; } } }
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; }
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; }
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; }
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); } }