📄 proc_cmd.c
字号:
cfsetospeed(&newtio, B115200); break; case 460800: cfsetispeed(&newtio, B460800); cfsetospeed(&newtio, B460800); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; } if( nStop == 1 ) newtio.c_cflag &= ~CSTOPB; else if ( nStop == 2 ) newtio.c_cflag |= CSTOPB; newtio.c_cc[VTIME] = 0;//150;//2; //is 200 ms newtio.c_cc[VMIN] = 0;//1; tcflush(fd,TCIFLUSH); if((tcsetattr(fd,TCSANOW,&newtio))!=0) { perror("com set error"); return -1; } return 0;}int open_port(int*fd,const char * com_Properity, int comport){ long vdisable; if (comport==1) { *fd = open( "/dev/ttyS0", O_RDWR); if (-1 == *fd){ perror("Can't Open Serial Port"); return(-1); } } else if(comport==2) { *fd = open( "/dev/ttyS1", O_RDWR); if (-1 == *fd){ perror("Can't Open Serial Port"); return(-1); } } else if (comport==3) { *fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY); if (-1 == *fd){ perror("Can't Open Serial Port"); return(-1); } else{ if(fcntl(*fd, F_SETFL, 0)<0) printf("fcntl failed!\n"); } if(isatty(STDIN_FILENO)==0) printf("standard input is not a terminal device\n"); if((vdisable = fpathconf(STDIN_FILENO,_PC_VDISABLE))<0) printf("fpathconf error!\n"); } if( com_Properity ) { char buf[40]; int nSpeed,nBits,nStop; char nEvent; int i=0; char *p_data = (char *)com_Properity; while( *p_data ) { if( *p_data == ',' ) { buf[i] = '\0'; p_data++; break; } buf[i++] = *p_data++; } nSpeed = atoi( buf ); i = 0; while( *p_data ) { if( *p_data == ',' ) { buf[i] = '\0'; p_data++; break; } buf[i++] = *p_data++; } nBits = atoi( buf ); i = 0; while( *p_data ) { if( *p_data == ',' ) { buf[i] = '\0'; p_data++; break; } buf[i++] = *p_data++; } nEvent = buf[0]; i = 0; while( *p_data ) buf[i++] = *p_data++; buf[i] = '\0'; nStop = atoi( buf ); return set_opt( *fd,nSpeed, nBits, nEvent, nStop ); } else return set_opt( *fd,2400, 8, 'E', 1 );}void control_yuntai(uint16_t action) { int fd; char *set="2400,8,N,1"; if(open_port(&fd,set,3)<0){ perror("set options error"); return; } control_device(0,action,fd,"u2",0); close(fd); if(open_port(&fd,set,3)<0){ perror("set options error"); return; } control_device(0,0,fd,"",0); close(fd); return; }////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////unsigned char check_user(char * buf){ if (buf==NULL) { return RPL_UNKOWN_ERR; } char user_conf[MAX_CONNECTED][128],passwd_conf[MAX_CONNECTED][128]; int user_conf_num = 0; FILE *file_user = NULL; file_user = fopen("/etc/tcp_user.conf","r"); if (file_user == NULL) { printf("tcp user configuration file doesn't exist!!"); return 0; } //load user passwd while (!feof(file_user) && user_conf_num < MAX_CONNECTED) { if (!feof(file_user)) fscanf(file_user,"%s",user_conf[user_conf_num]); else break; if (!feof(file_user)) fscanf(file_user,"%s",passwd_conf[user_conf_num]); else break; user_conf_num++; } fclose(file_user); //compare user and its password char user_name[128],user_passwd[128]; char *delim=":\012"; char *p = NULL; p=strtok(buf,delim); if (p==NULL) { return RPL_AUTH_FAILED; } strcpy(user_name,p); p = strtok(NULL,delim); if (p==NULL) { return RPL_AUTH_FAILED; } strcpy(user_passwd,p); int i; for (i=0;i<user_conf_num;i++) { if (!strcmp(user_name,user_conf[i]) && !strcmp(user_passwd,passwd_conf[i])) { printf("user : %s auth passed\n",user_name); return RPL_AUTH_PASSED ; } } return RPL_AUTH_FAILED;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////unsigned char proc_cmd(const void * buf,const int fd,int * is_me){ int msqid; struct ArgsMsgContent_t msgp; msqid = msgget(ARGS_MSG_KEY,IPC_CREAT|0600); ctl_hdr *hdr; int data_len=0; char *data; unsigned char ret; hdr=(ctl_hdr*)buf; data=(char*)buf+5; data_len=(int)hdr->len; switch(hdr->ki) { case KI_START:{ printf("get command: KI start\n"); if (g_is_running) { return RPL_RUNNING; }else { unsigned short port; memcpy(&port,data,2); msgp.nType = TCP_CMD; sprintf(msgp.nContent,"%d%s%d",2,"127.0.0.1",port); msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT); g_is_running =1; ret=RPL_OK; } } break; case KI_RATE_SET:{ printf("get command: KI rate set\n"); CHECK_DEV; uint16_t rate; memcpy(&rate,data,sizeof(uint16_t)); msgp.nType=SET_BIT_RATE; sprintf(msgp.nContent,"%d",rate); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_FRAME_SET:{ printf("get command: KI frame set\n"); CHECK_DEV; uint16_t frame_rate,frame_skip; memcpy(&frame_rate,data,2); memcpy(&frame_skip,data+2,2); msgp.nType = SET_FRAME_RATE; sprintf(msgp.nContent,"%d %d",(int)frame_rate,(int)frame_skip); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_RESOLUTION_SET:{ printf("get command: KI resolution set\n"); CHECK_DEV; uint16_t width,high; memcpy(&width,data,2); memcpy(&high,data+2,2); msgp.nType = SET_RESOLUTION; sprintf(msgp.nContent,"%d %d",(int)width,(int)high); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_BCSH_SET:{ printf("get command: KI bash set\n"); CHECK_DEV; uint8_t bright,contrast,saturation,sharp,hue; sscanf(data,"%c%c%c%c%c",&bright,&contrast,&saturation,&sharp,&hue); msgp.nType = SET_BCSH; sprintf(msgp.nContent,"%d %d %d %d %d",(int)bright,(int)contrast,(int)saturation, (int)sharp,(int)hue); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_MOTION_DETECTOR_SET:{ printf("get command: KI motion detector set\n"); CHECK_DEV; int region,left,right,top,bottom,thresh; sscanf(data,"%d%d%d%d%d %d",®ion,&left,&right,&top,&bottom,&thresh); msgp.nType =SET_MOTION_DETECTOR; sprintf(msgp.nContent,"%d %d %d %d %d %d",region,left,right, top,bottom,thresh); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_MOTION_DETECTOR_STOP:{ printf("get command: KI motion detector stop\n"); CHECK_DEV; int region; memcpy(®ion,data,4); msgp.nType = STOP_MOTION_DETECTOR; sprintf(msgp.nContent,"%d",region); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_GOP_STRUCTURE_SET:{ printf("get command: KI structure set\n"); CHECK_DEV; int N,M; sscanf(data,"%d%d",&N,&M); msgp.nType = SET_GOP_STRUCTURE; sprintf(msgp.nContent,"%d %d",N,M); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } break; case KI_SAVE_POLICY_SET:{ printf("get command: KI save policy set\n"); CHECK_DEV; ret=do_sth(); } break; case KI_YUNTAI:{ printf("get command: control yuntai\n"); CHECK_DEV; uint16_t direction; memcpy(&direction,data,2); control_yuntai(direction); ret=do_sth(); } printf("done\n"); break; case KI_VIDEO_CTRL:{ CHECK_DEV; uint8_t video_ctrl; memcpy(&video_ctrl,data,1); ret=do_sth(); } printf("done\n"); break; case KI_SNAPSHOT:{ time_t now; now = time((time_t*)NULL); struct tm *l_time; l_time = localtime(&now); char pic_name[127]; bzero(pic_name,127); strftime(pic_name,sizeof pic_name,"%g_%m_%d_%H_%M_%S",l_time); strcat(pic_name,".jpg"); msgp.nType = GET_PIC; sprintf(msgp.nContent,"%s",pic_name); if (msgsnd(msqid,&msgp,ARGS_MSG_SIZE,IPC_NOWAIT)!=0) { ret = RPL_UNKOWN_ERR; } else ret=RPL_OK; } printf("\n"); break; case KI_QUIT:{ if (*is_me==1&&g_is_dev_busy==1) { g_is_dev_busy=0; is_me=0; } ret =KI_QUIT; } printf("\n"); break; default: ret = RPL_SYNTAX_ERR; printf("\n"); break; }//end switch return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -