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

📄 新建 文本文档 (2).txt

📁 GSM@C51.rar
💻 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 + -