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

📄 proc_cmd.c

📁 嵌入式Linux C语言应用程序设计
💻 C
📖 第 1 页 / 共 2 页
字号:
	       	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",&region,&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(&region,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 + -