亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? server.c

?? linux驅動程序設計
?? C
字號:
/* server.c ed server
 * Copy Right 2003 Li Suke , Software School of Peking University.
 * This program's task is to read data from /dev/ed_tx
 * and write data into /dev/ed_rec. /dev/ed_tx is for the
 * network driver to store the tx data; /dev/ed_rec is for
 * the network driver to get the data. 
 * Attention: we use SLIP protocol's END ESC to pack the packet.
 */


#include <stdio.h>  
#include <sys/types.h>
#include <string.h>  
#include <unistd.h>  
#include <fcntl.h>   
#include <errno.h>   
#include <termios.h> 
#include <sys/wait.h>
#include <sys/ioctl.h>
#include "ed_ioctl.h"
#define BUFFER_SIZE 2048

/* These defination is from SLIP protocol. */
#define END             0300
#define ESC             0333
#define ESC_END         0334            
#define ESC_ESC         0335 
 
/* open the ttyS0 serial port */
int open_port(void)
{
      int fd; 
      fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );
      if (fd == -1)
      {
	perror("open_port: Unable to open /dev/ttyS0 - ");
	return -1;
      }
      else
	fcntl(fd, F_SETFL, 0);

      return (fd);
 }

/* set up the options for serial port */
int setup_com(int fd){
    struct termios options; 
    tcgetattr(fd, &options);
    /*
     * Set the baud rates to 19200...
     */
    cfsetispeed(&options, B38400);
    cfsetospeed(&options, B38400);

    /*
     * Enable the receiver and set local mode...
     */

    options.c_cflag |= (CLOCAL | CREAD);

    /*
     * Set global options.
     */
    options.c_cflag |= PARENB;
    options.c_cflag &= ~PARODD;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    
    /* set the input options */

    options.c_iflag &=~(IXON | IXOFF | IXANY);
    options.c_iflag &=~(INLCR | IGNCR | ICRNL);
    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

    /* set the output options */
    options.c_oflag &= ~OPOST;   

    /* set the timeout options */
    options.c_cc[VMIN]  = 0;
    options.c_cc[VTIME] = 10;

    tcsetattr(fd, TCSANOW, &options);
    return 1;



}
int open_dev(char *file_name){
   int fd;
   fd = open(file_name ,O_RDWR);
   if(fd < 0)
   {
     perror("Open ed_rec device error:");
     return -1;
   }
   return fd;
}

void close_dev(int fd){
   close(fd);
}
    
/*
 * pack the frame and prepare for sending the packets.
 */
int frame_pack(unsigned char *src, unsigned char *des, int len)
{
    unsigned char *ptr = des;
    unsigned char c;
                                                                                                                             
    *ptr++ = END;                                                                                               
    while (len-- > 0) {
        switch(c = *src++) {
            case END:
                *ptr++ = ESC;
                *ptr++ = ESC_END;
            break;
            case ESC:
                *ptr++ = ESC;
                *ptr++ = ESC_ESC;
            break;
            default:
                *ptr++ = c;
                break;
           }
       }
       *ptr++ = END;
       return (ptr - des );
}

/*
 * unpack the frame.
 */
int frame_unpack(unsigned char *src, unsigned char *des)
{
    unsigned char *ptr = des;
    unsigned char c;
    int count = 0;
    int esc_flag = 0;
    if(*src++ != END)
        return 0;
    while( ((c=*src++) != END) && (count < BUFFER_SIZE))
    {
        switch(c){
            case ESC_END:
                if(esc_flag == 1){
                   *ptr++ = END;
                   esc_flag = 0;
                } 
                else
                   *ptr++ = c;
                break;
            case ESC_ESC:
                if(esc_flag ==1){
                    *ptr++ = ESC;
                    esc_flag = 0;
                }
                break;
            case END:
                esc_flag = 0; 
                break;
            case ESC:
                esc_flag = 1;
 								break;	
            default:
                *ptr++ = c;  
                esc_flag = 0;              
                break;
        } 
    }
    if(count >= BUFFER_SIZE){
        printf("some error happen in frame unpack().\n");
        return BUFFER_SIZE;
    }
    return (ptr - des);

}
int main(int argc ,char *argv[]){
    int fd;
    int fd_rec;
    int fd_tx;
    
    unsigned char buffer_rec[BUFFER_SIZE];
    unsigned char buffer_tx[BUFFER_SIZE];
    unsigned char buffer_tx_pack[BUFFER_SIZE];

    unsigned char buffer[BUFFER_SIZE];
    unsigned char *buffer_ptr;
    unsigned char *rec_ptr;
    unsigned char *tx_ptr;
    int flag;
    int  nbytes;       
    pid_t pid;    
    int tx_length;
    int rec_length;
    int i;
    rec_ptr = buffer_rec;
    tx_ptr = buffer_tx;
    buffer_ptr = buffer;
    int rec_count;
    int tx_count;
    
 
    fd_rec = open_dev("/dev/ed_rec");
    fd_tx = open_dev("/dev/ed_tx");
    
    if(fd_rec <0 || fd_tx <0)
    {
         close(fd);
         return 0;    
    }   
    fd = open_port();
    if(fd < 0)
        return 0;
        
    setup_com(fd);
    pid = fork();
    
    if(pid < 0){
        printf("Can not creat the process\n");
        close(fd);
        close(fd_rec);
        close(fd_tx);
        return 0;
    }
    if(pid ==0){
    	/* read process */
        for (;;)
        {
	    /* read data from /dev/ttyS0, and write the data into buffer_rec,wait for the 
	       kernel to get the data.
	    */
            flag = 0;
            rec_count = 0;
            buffer_ptr = buffer;
          
	    while ((nbytes = read(fd, rec_ptr, BUFFER_SIZE-1)) > 0){
                rec_length = 0;
	    	for(i=0;i< nbytes;i++){
                    rec_count += 1;
                    rec_length = rec_length +1;
                    if((buffer_rec[i])== END){
                       flag = flag +1;
                    if(flag ==2)
                       break;
                    }
                }
               
          
                if(rec_count < BUFFER_SIZE){
                    memcpy(buffer_ptr,rec_ptr,rec_length);
                   
                    buffer_ptr += rec_length;    
                    rec_length = 0;               
                }
                /* we recieve two ENDs */ 
                if(flag == 2){
                    flag = 0;                    
                    buffer_ptr = buffer;
                    memset(buffer_rec,0,sizeof(buffer_rec));
                    rec_ptr = buffer_rec;
                    rec_count =frame_unpack(buffer_ptr,rec_ptr);
 	            	   
                    #ifdef _DEBUG
                    printf("\n Service recieve :\n");
                    for(i=0;i<rec_count;i++)
                        printf(" %02x",rec_ptr[i]&0xff);
                    printf("\n");
                    #endif
                    write(fd_rec,rec_ptr,rec_count);
                 
                }
                        
                 	
                 
	    }
         
	}
     }else if(pid >0){
        int length;
        /* write process */
        for (;;)
        {
	    /* read data from /dev/ttyS0, and write the data into buffer_rec,wait for the 
	       kernel to get the data.
	    */
	    tx_ptr = buffer_tx;
            ioctl(fd_tx,IOCTL_SET_BUSY,1);
            
	    if((nbytes = read(fd_tx, tx_ptr, BUFFER_SIZE-1)) > 0)
	    {   
                
                tx_count = frame_pack(tx_ptr,buffer_tx_pack,nbytes);   
                #ifdef _DEBUG
                printf("\nSend bytes:%d\n",nbytes);                
                printf("\nServer send\n");
                for(i=0;i<tx_count;i++)
                    printf(" %02x",buffer_tx_pack[i]);
                printf("\n");
                #endif
                tx_length = 0;
                tx_ptr = buffer_tx_pack;
                while(tx_length < tx_count){
	           length = write(fd,tx_ptr,tx_count-tx_length);
                   tx_length = tx_length + length;
                   tx_ptr += tx_length;
                }                   
            }

            ioctl(fd_tx,IOCTL_SET_BUSY,0);

	}    	
     
     }
       

     close(fd);
     close(fd_rec);
     close(fd_tx);
     return (-1);
    	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码国产乱码精品精的特点 | 成人一区在线观看| 久久精品一区二区三区不卡 | 欧美精品vⅰdeose4hd| 麻豆91小视频| 国产精品理伦片| 欧美日韩卡一卡二| 国产精品一级在线| 亚洲成在人线免费| 国产欧美日韩不卡| 欧美精品 日韩| 成人动漫一区二区| 蜜桃免费网站一区二区三区| 亚洲桃色在线一区| 欧美一区二区三区四区高清| 不卡的电视剧免费网站有什么| 亚洲电影中文字幕在线观看| 欧美三级视频在线| 国产很黄免费观看久久| 国产精品久久久久久久久快鸭| 国产91对白在线观看九色| 亚洲成人av电影在线| 国产精品免费视频观看| 欧美mv和日韩mv的网站| 欧美丝袜丝交足nylons图片| 成人综合在线网站| 麻豆91精品视频| 亚洲综合自拍偷拍| 国产精品乱子久久久久| 精品少妇一区二区三区| av影院午夜一区| 狠狠色狠狠色合久久伊人| 午夜在线成人av| 欧美国产精品劲爆| 26uuu色噜噜精品一区二区| 欧美日韩国产在线观看| 99久久精品免费看| 国模娜娜一区二区三区| 毛片av一区二区三区| 一区二区三区色| 亚洲精品视频一区二区| 最近日韩中文字幕| 精品播放一区二区| 日韩欧美在线123| 91精品国产91热久久久做人人| 在线观看亚洲精品视频| 91在线免费播放| 成人av片在线观看| 国产91在线|亚洲| 国产iv一区二区三区| 无吗不卡中文字幕| 亚洲成人动漫精品| 午夜久久电影网| 爽好多水快深点欧美视频| 亚洲一级二级三级在线免费观看| 视频一区二区国产| 国产精品一区二区x88av| 成人网在线免费视频| 色天天综合久久久久综合片| 欧美性生活久久| 日韩欧美一级二级| 国产精品亲子伦对白| 亚洲精品老司机| 五月天亚洲精品| 国产精品一区二区黑丝| 99热这里都是精品| 51精品秘密在线观看| 久久精品视频在线看| 国产精品国产精品国产专区不片| 一卡二卡三卡日韩欧美| 久久97超碰国产精品超碰| av中文字幕不卡| 欧美高清www午色夜在线视频| 精品免费日韩av| 亚洲图片你懂的| 麻豆精品精品国产自在97香蕉| 成人高清在线视频| 欧美性色综合网| 337p粉嫩大胆色噜噜噜噜亚洲| 中文字幕视频一区| 日本不卡中文字幕| av在线免费不卡| 日韩你懂的在线观看| 综合分类小说区另类春色亚洲小说欧美| 日韩精品一区二区在线| 亚洲欧洲另类国产综合| 日韩电影一区二区三区四区| 成人a免费在线看| 日韩欧美一二三区| 亚洲制服丝袜在线| 国产成人综合亚洲网站| 精品视频色一区| 国产精品麻豆一区二区| 日本不卡123| 欧美艳星brazzers| 一区免费观看视频| 久久99国产精品久久99| 欧美性猛交xxxx黑人交| 国产农村妇女精品| 久久国产福利国产秒拍| 在线精品视频一区二区三四| 国产欧美日韩视频在线观看| 日本美女视频一区二区| 欧美视频日韩视频| 国产精品久久夜| 国产在线播放一区| 欧美日韩国产综合一区二区三区| 国产精品婷婷午夜在线观看| 免费久久精品视频| 欧美日韩在线播| 亚洲免费观看视频| 成人一级视频在线观看| 精品免费一区二区三区| 日韩av电影免费观看高清完整版| 99国产欧美另类久久久精品| 中文一区一区三区高中清不卡| 毛片av中文字幕一区二区| 制服.丝袜.亚洲.另类.中文| 一区二区三区在线视频观看| av男人天堂一区| 中文字幕精品综合| 高清久久久久久| 国产欧美中文在线| 国产一区二区三区蝌蚪| 精品国产一区a| 久久91精品国产91久久小草| 欧美一区二区三区四区五区| 五月婷婷欧美视频| 在线播放欧美女士性生活| 亚洲超碰精品一区二区| 欧美日韩视频不卡| 偷拍与自拍一区| 制服丝袜成人动漫| 天天综合色天天| 欧美一区二区三区的| 蜜臀av一区二区| 欧美一区二区三区四区五区 | 美女视频免费一区| 欧美一卡二卡三卡四卡| 日韩高清不卡一区二区三区| 欧美一区在线视频| 久久激情五月婷婷| 久久影院视频免费| 国产精品夜夜嗨| 一区在线播放视频| 在线精品视频一区二区三四| 亚洲国产精品天堂| 6080国产精品一区二区| 久久精品国产第一区二区三区| 久久免费电影网| 91麻豆国产香蕉久久精品| 亚洲一区二区在线免费观看视频| 欧美日韩综合不卡| 日韩黄色一级片| 久久人人爽人人爽| 丁香天五香天堂综合| 亚洲人123区| 欧美精品vⅰdeose4hd| 国内精品伊人久久久久av一坑| 国产欧美精品一区二区色综合朱莉| 94-欧美-setu| 亚洲成人久久影院| 久久久不卡网国产精品一区| 91同城在线观看| 日韩精品乱码av一区二区| 精品美女在线观看| 91麻豆成人久久精品二区三区| 日韩影院免费视频| 国产肉丝袜一区二区| 色噜噜狠狠色综合欧洲selulu| 日本不卡一二三| 国产精品成人网| 91.成人天堂一区| 成人丝袜18视频在线观看| 一区二区三区av电影 | 日韩精品一区二区三区在线观看| 国产成人欧美日韩在线电影| 一区二区三区资源| 精品精品国产高清a毛片牛牛| 91色视频在线| 国产一区二区调教| 亚洲一区二区在线播放相泽| 久久久精品黄色| 欧美日韩国产不卡| 波波电影院一区二区三区| 天天色天天操综合| 亚洲欧洲精品一区二区三区| 欧美一级片在线看| 91小宝寻花一区二区三区| 蜜乳av一区二区| 亚洲图片自拍偷拍| 中文在线一区二区| 精品成人一区二区三区四区| 精品视频一区二区不卡| 成人午夜av电影| 国产一区二区三区免费| 婷婷综合另类小说色区| 亚洲免费电影在线| 国产欧美日韩在线观看| 精品入口麻豆88视频|