📄 新建 文本文档 (2).txt
字号:
int setserial(SYSPARA *sp,int fd)
{
struct termios Opt;
tcgetattr(fd, &Opt);
tcflush(fd, TCIOFLUSH);
switch((*sp).baud2) /*set baud rate*/
{
case 1:
cfsetispeed(&Opt, B4800);
cfsetospeed(&Opt, B4800);
break;
case 2:
cfsetispeed(&Opt, B9600);
cfsetospeed(&Opt, B9600);
break;
case 3:
cfsetispeed(&Opt, B19200);
cfsetospeed(&Opt, B19200);
break;
case 4:
cfsetispeed(&Opt, B38400);
cfsetospeed(&Opt, B38400);
break;
case 5:
cfsetispeed(&Opt, B57600);
cfsetospeed(&Opt, B57600);
break;
case 6:
cfsetispeed(&Opt, B115200);
cfsetospeed(&Opt, B115200);
break;
default:
return SERIAL_PARA_ERROR;
}
Opt.c_cflag |=(CLOCAL |CREAD);
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS8;
Opt.c_cflag &= ~PARENB;
Opt.c_iflag |= INPCK;
Opt.c_cflag &= ~CSTOPB;
Opt.c_lflag&=~(ECHO |ECHOE |ISIG |ICANON);
Opt.c_cc[VMIN]=0;
Opt.c_cc[VTIME]=10;
tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&Opt) != 0)
{
return SET_SERIAL_ERROR;
}
else
{
tcflush(fd,TCIOFLUSH);
return 0;
}
}
主程序一部分
temp=pack(upm,upmlen,pm,command);
if(serialsend(fd,pm,temp)==temp)
printf("number %d command was sent for getting a picture filename.\n",command);
sleep(2);
serialreceive(fd,&inbuff);
pmlen=getpm(&inbuff,pm);
command=unpack(pm,pmlen,upm);
upmlen=upm[0]*256+upm[1];
for(i=0;i <upmlen;i++)
upm[i]=upm[i+2];
子函数
int serialsend(int fd,unsigned char pm[],int len)
{
int nbytes=0;
if(((nbytes=write(fd,pm,len)) <len) | |(len>2048))
{
return SEND_ERROR;
}
printf("total %d bytes were sent\n",nbytes);
return nbytes;
}
int serialreceive(int fd,BUFF *inbuff)
{
int i,j;
int nbytes=0;
unsigned char temp[6];
for(i=0;i <10;i++)
{
if((nbytes=read(fd,temp,5))>0)
{
printf("%d bytes was received\n",nbytes);
pushbuff(inbuff,temp,nbytes);
}
else
{
break;
}
}
return 0;
}
int getpm(BUFF *inbuff,unsigned char pm[])
{
int i,j;
int mbegpo=(*inbuff).startpo,mendpo=(*inbuff).startpo;
int mlen=0;
if((*inbuff).len>11)
{
for(i=0;i <(*inbuff).len;i++)
{
if(buffvalue(inbuff,mbegpo+i)==0xAA&&buffvalue(inbuff,mbegpo+i+1)==0xAA&&buffvalue(inbuff,mbegpo+i+2)==0xAA&&buffvalue(inbuff,mbegpo+i+3)==0xAA)
{
mbegpo+=i;
if(mbegpo>=BUFFLEN) mbegpo-=BUFFLEN;
(*inbuff).startpo=mbegpo;
(*inbuff).len-=i;
break;
}
}
for(i=0;i <(*inbuff).len;i++)
{
if(buffvalue(inbuff,mbegpo+i)==0xAB)
{
mendpo=mbegpo+i;
if(mendpo>=BUFFLEN) mendpo-=BUFFLEN;
break;
}
}
mlen=(mendpo-mbegpo+1)>0?(mendpo-mbegpo+1):(BUFFLEN+(mendpo-mbegpo+1));
if(mlen>4)
{
for(i=0;i <mlen;i++)
{
pm[i]=buffvalue(inbuff,mbegpo+i);
printf("%d ",pm[i]);
}
printf("\n");
(*inbuff).startpo=mendpo+1;
(*inbuff).len-=mlen;
return mlen;
}
}
return 0;
}
void pushbuff(BUFF *inbuff,unsigned char sedata[],int len)
{
int i,index=(*inbuff).startpo+(*inbuff).len;
for(i=0;i <len;i++)
{
if(index>=BUFFLEN)
index=BUFFLEN-index;
(*inbuff).code[index]=sedata[i];
index++;
}
(*inbuff).len+=len;
}
int buffvalue(BUFF *inbuff,int index)
{
if(index>=BUFFLEN)
return (*inbuff).code[index-BUFFLEN];
return (*inbuff).code[index];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -