📄 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 + -