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

📄 proc_cmd.c

📁 基于ARM-LINXU的视频监控系统的编程.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <termios.h>
#include <errno.h>

#include "args_cmd.h"
#include "thread.h"


#include "types.h"
#include "define.h"
#include "ctrl.h"

#define CHECK_DEV	if (!(*is_me)) {\
						printf("I have not set anything\n");\
						if (g_is_dev_busy) {\
							printf("device is busy now \n");\
							return RPL_DEV_BUSY;\
						}else{	\
							*is_me =1;\
							g_is_dev_busy =1;\
						}\
					}
int sound_state=0;
extern int g_is_running;
extern int g_is_dev_busy;

extern struct  sockaddr_in tcp_client_addr[25];

int do_sth(){
	return RPL_NOT_IMPLEMENT;
}

//extern THREAD_RETURN THREAD_API play_snd(void* arg);
int get_com_setting( char * buf, unsigned int *nlen )
{
 if ( *nlen == 0)
 {
 }

 strcpy(buf,"9600,8,N,1");
 return 0;
}

static inline int eight_bit_add(char *ch, int startx, int endx)
{
 int count = 0;
 int i;
 for ( i = startx ; i <= endx; ++ i )
  {	count += ch[i];
  }
 return count % 256;
}

int control_device( int camera_no, uint16_t action, int com_handle,const char * add_data, size_t length )
{
 char ch[7] = {0xff,camera_no + 1,0,0,0,0,0};
 switch(action)
 {
  case 0://stop
    ch[2] = 0;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    break;
  case 1://up
    ch[2] = 0;
    ch[3] = 0x08;
    ch[4] = 0;
    ch[5] = 0x2f;
    printf("action:up\n");
   break;
  case 2://down
    printf("case 2!\n");
    ch[2] = 0;
    ch[3] = 0x10;
    ch[4] = 0;
    ch[5] = 0x2f;
    printf("action:down\n");
   break;
  case 3://left
    ch[2] = 0;
    ch[3] = 0x04;
    ch[4] = 0x2f;
    ch[5] = 0;
    printf("action:left\n");
   break;
  case 4://right
    ch[2] = 0;
    ch[3] = 0x02;
    ch[4] = 0x2f;
    ch[5] = 0;
    printf("action:right\n");
   break;
  case 5://aperture+
    ch[2] = 0x02;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    printf("action:iris +\n");
   break;
  case 6://aperture-
    ch[2] = 0x04;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    printf("action:iris -\n");
   break;
  case 7://zoom +
    ch[2] = 0;
    ch[3] = 0x20;
    ch[4] = 0;
    ch[5] = 0;
    printf("action:zoom+\n");
   break;
  case 8://zoom-
    ch[2] = 0;
    ch[3] = 0x40;
    ch[4] = 0;
    ch[5] = 0;
    printf("action:zoom-\n");
   break;
  case 9://focus+
    ch[2] = 0x01;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    printf("action:focus+\n");
   break;
  case 10://focus-
    ch[2] = 0;
    ch[3] = 0x80;
    ch[4] = 0;
    ch[5] = 0;
    printf("aciont:focus-\n");
   break;
  case 11:
    ch[2] = 0x00;
    ch[3] = 0x07;
    ch[4] = 0x00;
    ch[5] = 0x63;
   break;
  case 12:
    ch[2] = 0x00;
    ch[3] = 0x07;
    ch[4] = 0x00;
    ch[5] = 0x60;
   break;
  case 13:
    ch[2] = 0;
    ch[3] = 0x09;
    ch[4] = 0;
    ch[5] = 0x01;
   break;
  case 14:
    ch[2] = 0;
    ch[3] = 0x0b;
    ch[4] = 0;
    ch[5] = 0x01;
   break;
  case 15:
    ch[2] = 0;
    ch[3] = 0x09;
    ch[4] = 0;
    ch[5] = 0x04;
   break;
  case 16:
    ch[2] = 0;
    ch[3] = 0x0b;
    ch[4] = 0;
    ch[5] = 0x04;
   break;
  case 17:
    ch[2] = 0;
    ch[3] = 0x09;
    ch[4] = 0;
    ch[5] = 0x02;
   break;
  case 18:
    ch[2] = 0;
    ch[3] = 0x0b;
    ch[4] = 0;
    ch[5] = 0x02;
   break;
  case 19:
    ch[2] = 0;
    ch[3] = 0x09;
    ch[4] = 0;
    ch[5] = 0x03;
   break;
  case 20:
    ch[2] = 0;
    ch[3] = 0x0b;
    ch[4] = 0;
    ch[5] = 0x03;
   break;
  
  case 8200:
  {
	printf("8200!\n");
    if ( length == 2 || length == 4 )
    {
      int i = 0;
AGAIN:      
    	printf("%c,%d,",add_data[i],add_data[i+1]);
	    switch (add_data[i])
    	{
		    case 'U':
	  printf("case U!\n");
          ch[3] += 0x08;
          ch[5] = add_data[i+1] * 0x3F / 255;
          break;
    		case 'D':
          ch[3] += 0x10;
          ch[5] = add_data[i+1] * 0x3F / 255;
          break;
		case 'L':
          ch[3] += 0x04;
          ch[4] = add_data[i+1] * 0x3F / 255;
          break;
    		case 'R':
          ch[3] += 0x02;
          ch[4] = add_data[i+1] * 0x3F / 255;
          break;
    		default:
  		  	return -1;
    	}
     
    	if ( length == 4 )
      {
        i += 2;
        length = 120; // is not 4
        goto AGAIN;
      }  
      printf("\n");
    }
    else 
	    return -1;
       
    break;
  }
  case 8202:
  {
    ch[2] = 0;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    break;
  }
  case 8206:
  {
    if ( add_data[0] <= 32 )
    {
      ch[2] = 0x00;
      ch[3] = 0x03;
      ch[4] = 0x00;
      ch[5] = add_data[0];
    }
    else
    {
      ch[2] = 0x02;
      ch[3] = 0xFF;
      ch[4] = add_data[0] - 33;
      ch[5] = 0x01;
    }
    break;
  }
  case 8208:
 {
 	return -1;
 }
  break;
  case 8210:
  {
    if ( add_data[0] <= 32 )
    {
      ch[2] = 0x00;
      ch[3] = 0x07;
      ch[4] = 0x00;
      ch[5] = add_data[0];
    }
    else
    {
      ch[2] = 0x02;
      ch[3] = 0xFF;
      ch[4] = add_data[0] - 33;
      ch[5] = 0x00;
    }
    break;
  }
  case 8212:
   return -1;
  case 8300:
  {
    if ( add_data[0] )
      ch[2] = 0x02;
    else
      ch[2] = 0x04;

    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
    break;
  }
  case 8302:
  {
    ch[2] = 0;
    ch[4] = 0;
    ch[5] = 0;
    if ( add_data[0] )
      ch[3] = 0x20;
    else
      ch[3] = 0x40;
    break;
  }
  case 8304:
  {
    if ( add_data[0] )
      ch[2] = 0x01;
    else
      ch[3] = 0x80;
    break;
  }
  case 8306:
  case 8308:
  case 8310:
  {
    ch[2] = 0;
    ch[3] = 0;
    ch[4] = 0;
    ch[5] = 0;
	printf("8310!\n");
    break;
  }
  case 8204:
  {
    if ( add_data[0] )
    {
      ch[2] = 0x10;
      ch[3] = 0x00;
      ch[4] = 0x00;
      ch[5] = 0x00;
      ch[6] = eight_bit_add(ch,1,5);
      write(com_handle, ch, 7);
           
    }
    ch[2] = 0x00;
    ch[3] = 0x07;
    ch[4] = 0x00;
    if ( add_data[0] )
      ch[5] = 0x63;
    else
      ch[5] = 0x60;
    break;
  }
  
  default: // not supported!
   return -1;
 }

 ch[6] = eight_bit_add(ch,1,5);
 write(com_handle, ch, 7);
 usleep(500000); 

 return 0;
}

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
	
	struct termios newtio,oldtio;
	if  ( tcgetattr( fd,&oldtio)  !=  0) { 
		perror("SetupSerial 1");     
		return -1;  
	}
	

	bzero( &newtio, sizeof( newtio ) );
	
	newtio.c_cflag &= ~CSIZE; 
	// set the nBits 
  	switch( nBits )
  	{
  	case 7:
  	    	newtio.c_cflag |= CS7;
		break;
  	case 8:
      		newtio.c_cflag |= CS8;
	  	break;
  	}
  
//Set the Check mode and StopBit
	switch( nEvent )
	{
	case 'O': //odd
		newtio.c_cflag |= PARENB;
		newtio.c_cflag |= PARODD;
		newtio.c_iflag |= (INPCK | ISTRIP);

		break;
	case 'E': //even
		newtio.c_iflag |= (INPCK | ISTRIP);
		newtio.c_cflag |= PARENB;
		newtio.c_cflag &= ~PARODD;

		break;
  	case 'N':  //NULL
  		newtio.c_cflag &= ~PARENB;
  		break;
  	}
  	newtio.c_cflag  |=  CLOCAL | CREAD;

  	switch( nSpeed )
  	{
    	case 2400:
    		cfsetispeed(&newtio, B2400);
	    	cfsetospeed(&newtio, B2400);
      		break;
    	case 4800:
      		cfsetispeed(&newtio, B4800);
      		cfsetospeed(&newtio, B4800);
      		break;
    	case 9600:
    		cfsetispeed(&newtio, B9600);
	    	cfsetospeed(&newtio, B9600);
      		break;
    	case 115200:
    		cfsetispeed(&newtio, B115200);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -