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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? stty.c.bak

?? 一個(gè)串口的代碼提供給大家參考。一個(gè)串口的代碼提供給大家參考。
?? BAK
字號(hào):
//stty.c

#include <stdio.h>
#include <sys/ioctl.h>
#include 'stty.h'

///////////////////////////////////////////////////////////////////////////////
// 初始化串口設(shè)備并進(jìn)行原有設(shè)置的保存
TTY_INFO *readyTTY(int id)
{
    TTY_INFO *ptty;

    ptty = (TTY_INFO *)malloc(sizeof(TTY_INFO));
    if(ptty == NULL)
        return NULL;
    memset(ptty,0,sizeof(TTY_INFO));
    pthread_mutex_init(&ptty->mt,NULL);
    sprintf(ptty->name,'/dev/ttyS%d',id);
    //
    // 打開并且設(shè)置串口
    ptty->fd = open(ptty->name, O_RDWR | O_NOCTTY |O_NDELAY);
    if (ptty->fd <0)
    {
        free(ptty);
        return NULL;
    }
    //
    // 取得并且保存原來(lái)的設(shè)置
    tcgetattr(ptty->fd,&ptty->otm);
    return ptty;
}

///////////////////////////////////////////////////////////////////////////////
// 清理串口設(shè)備資源
int cleanTTY(TTY_INFO *ptty)
{
    //
    // 關(guān)閉打開的串口設(shè)備
    if(ptty->fd>0)
    {
        tcsetattr(ptty->fd,TCSANOW,&ptty->otm);
        close(ptty->fd);
        ptty->fd = -1;
        free(ptty);
        ptty = NULL;
    }

    return 0;
}


///////////////////////////////////////////////////////////////////////////////
// 設(shè)置串口通信速率
// ptty 參數(shù)類型(TTY_INFO *),已經(jīng)初始化的串口設(shè)備信息結(jié)構(gòu)指針
// speed 參數(shù)類型(int),用來(lái)設(shè)置串口的波特率
// return 返回值類型(int),函數(shù)執(zhí)行成功返回零值,否則返回大于零的值
///////////////////////////////////////////////////////////////////////////////
int setTTYSpeed(TTY_INFO *ptty, int speed)
{
    int i;
    //
    // 進(jìn)行新的串口設(shè)置,數(shù)據(jù)位為8位
    bzero(&ptty->ntm, sizeof(ptty->ntm));
    tcgetattr(ptty->fd,&ptty->ntm);
    ptty->ntm.c_cflag = /*CS8 |*/ CLOCAL | CREAD;

    switch(speed)
    {
    case 300:
        ptty->ntm.c_cflag |= B300;
        break;
    case 1200:
        ptty->ntm.c_cflag |= B1200;
        break;
    case 2400:
        ptty->ntm.c_cflag |= B2400;
        break;
    case 4800:
        ptty->ntm.c_cflag |= B4800;
        break;
    case 9600:
        ptty->ntm.c_cflag |= B9600;
        break;
    case 19200:
        ptty->ntm.c_cflag |= B19200;
        break;
    case 38400:
        ptty->ntm.c_cflag |= B38400;
        break;
    case 115200:
        ptty->ntm.c_cflag |= B115200;
        break;
    }
    ptty->ntm.c_iflag = IGNPAR;
    ptty->ntm.c_oflag = 0;
    //
    //
    tcflush(ptty->fd, TCIFLUSH);
    tcsetattr(ptty->fd,TCSANOW,&ptty->ntm);
    //
    //
    return 0;
}
///////////////////////////////////////////////////////////////////////////////
// 設(shè)置串口數(shù)據(jù)位,停止位和效驗(yàn)位
// ptty 參數(shù)類型(TTY_INFO *),已經(jīng)初始化的串口設(shè)備信息結(jié)構(gòu)指針
// databits 參數(shù)類型(int), 數(shù)據(jù)位,取值為7或者8
// stopbits 參數(shù)類型(int),停止位,取值為1或者2
// parity 參數(shù)類型(int),效驗(yàn)類型 取值為N,E,O,,S
// return 返回值類型(int),函數(shù)執(zhí)行成功返回零值,否則返回大于零的值
///////////////////////////////////////////////////////////////////////////////
int setTTYParity(TTY_INFO *ptty,int databits,int parity,int stopbits)
{
    //
    // 取得串口設(shè)置
    if( tcgetattr(ptty->fd,&ptty->ntm) != 0)
    {
        printf('SetupSerial [%s]\n',ptty->name);
        return 1;
    }

    bzero(&ptty->ntm, sizeof(ptty->ntm));
    ptty->ntm.c_cflag = CS8 | CLOCAL | CREAD;
    ptty->ntm.c_iflag = IGNPAR;
    ptty->ntm.c_oflag = 0;
    //
    // 設(shè)置串口的各種參數(shù)
    ptty->ntm.c_cflag &= ~CSIZE;
    switch (databits)
    {  //設(shè)置數(shù)據(jù)位數(shù)
    case 7:
        ptty->ntm.c_cflag |= CS7;
        break;
    case 8:
        ptty->ntm.c_cflag |= CS8;
        break;
    default:
        printf('Unsupported data size\n');
        return 5;
    }
    //
    //
    switch (parity)
    { // 設(shè)置奇偶校驗(yàn)位數(shù)
    case 'n':
    case 'N': 
        ptty->ntm.c_cflag &= ~PARENB; /* Clear parity enable */
        ptty->ntm.c_iflag &= ~INPCK; /* Enable parity checking */
        break;
    case 'o': 
    case 'O': 
        ptty->ntm.c_cflag |= (PARODD|PARENB); /* 設(shè)置為奇效驗(yàn)*/
        ptty->ntm.c_iflag |= INPCK; /* Disnable parity checking */
        break;
    case 'e': 
    case 'E': 
        ptty->ntm.c_cflag |= PARENB; /* Enable parity */
        ptty->ntm.c_cflag &= ~PARODD; /* 轉(zhuǎn)換為偶效驗(yàn)*/
        ptty->ntm.c_iflag |= INPCK; /* Disnable parity checking */
        break;
    case 'S':
    case 's': /*as no parity*/ 
        ptty->ntm.c_cflag &= ~PARENB;
        ptty->ntm.c_cflag &= ~CSTOPB;
        break;
    default: 
        printf('Unsupported parity\n');
        return 2;
    }
    //
    // 設(shè)置停止位
    switch (stopbits)
    {
    case 1: 
        ptty->ntm.c_cflag &= ~CSTOPB;
        break;
    case 2: 
        ptty->ntm.c_cflag |= CSTOPB;
        break;
    default: 
        printf('Unsupported stop bits\n');
        return 3;
    }
    //
    //
    ptty->ntm.c_lflag = 0;
    ptty->ntm.c_cc[VTIME] = 0;  // inter-character timer unused
    ptty->ntm.c_cc[VMIN] = 1;  // blocking read until 1 chars received
    tcflush(ptty->fd, TCIFLUSH);
    if (tcsetattr(ptty->fd,TCSANOW,&ptty->ntm) != 0)
    {
        printf('SetupSerial \n');
        return 4;
    }

    return 0; 
}

int recvnTTY(TTY_INFO *ptty,char *pbuf,int size)//收(讀)
{
    int ret,left,bytes;

    left = size;

    while(left>0)
    {
        ret = 0;
        bytes = 0;

        pthread_mutex_lock(&ptty->mt);
        ioctl(ptty->fd, FIONREAD, &bytes);
        if(bytes>0)
        {
            ret = read(ptty->fd,pbuf,left);
        }
        pthread_mutex_unlock(&ptty->mt);
        if(ret >0)
        {
            left -= ret;
            pbuf += ret;
        }
        usleep(100);
    }

    return size - left;
}

int sendnTTY(TTY_INFO *ptty,char *pbuf,int size)//發(fā)(寫)
{
    int ret,nleft;
    char *ptmp;

    ret = 0;
    nleft = size;
    ptmp = pbuf;

    while(nleft>0)
    {
        pthread_mutex_lock(&ptty->mt);
        ret = write(ptty->fd,ptmp,nleft);
        pthread_mutex_unlock(&ptty->mt);

        if(ret >0)
        {
            nleft -= ret;
            ptmp += ret;
        }
        //usleep(100);
    }

    return size - nleft;
}
int lockTTY(TTY_INFO *ptty)
{
    if(ptty->fd < 0)
    {
        return 1;
    }

    return flock(ptty->fd,LOCK_EX);
}
int unlockTTY(TTY_INFO *ptty)
{
    if(ptty->fd < 0)
    {
        return 1;
    }

    return flock(ptty->fd,LOCK_UN);
}


#ifdef LEAF_TTY_TEST
///////////////////////////////////////////////////////////////////////////////
// 接口測(cè)試
int main(int argc,char **argv)
{
    TTY_INFO *ptty;
    int nbyte,idx;
    unsigned char cc[16];
    
    ptty = readyTTY(0);//com1?
    if(ptty == NULL)
    {
        printf('readyTTY(0) error\n');
        return 1;
    }
    //
    //
    lockTTY(ptty);
    if(setTTYSpeed(ptty,19200)>0)
    {
        printf('setTTYSpeed() error\n');
        return -1;
    }
    if(setTTYParity(ptty,8,'N',1)>0)
    {
        printf('setTTYParity() error\n');
        return -1;
    }
    //
    idx = 0;
    while(1)
    {
        cc[0] = 0xFA;
        sendnTTY(ptty,&cc[0],1);
        nbyte = recvnTTY(ptty,cc,1);
        printf('%d:%02X\n',idx++,cc[0]);
    }

    cleanTTY(ptty);

}
#endif


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国久久99热| 日本美女一区二区三区视频| 欧美日产在线观看| 国产精品一区二区不卡| 亚洲曰韩产成在线| 中文字幕av资源一区| 欧美日韩国产小视频在线观看| 丁香婷婷综合激情五月色| 丝袜亚洲另类欧美综合| 亚洲区小说区图片区qvod| 久久综合色播五月| 51精品视频一区二区三区| 一本色道久久综合狠狠躁的推荐| 国产乱理伦片在线观看夜一区| 午夜激情综合网| 一区二区三区四区中文字幕| 国产精品欧美极品| 久久亚洲春色中文字幕久久久| 欧美日韩国产小视频在线观看| 91视频在线观看免费| 国产**成人网毛片九色 | 高清不卡一二三区| 久久精品国产成人一区二区三区 | 日韩欧美美女一区二区三区| 在线精品视频一区二区| 91美女在线观看| 成人黄色小视频| 成人自拍视频在线观看| 国产露脸91国语对白| 国产在线精品一区二区三区不卡 | 国产福利91精品一区| 蜜桃av一区二区在线观看| 午夜精品在线看| 亚洲主播在线观看| 亚洲成av人片在线观看无码| 亚洲高清视频在线| 亚洲色图清纯唯美| 樱桃视频在线观看一区| 亚洲欧美视频一区| 亚洲免费观看高清| 玉足女爽爽91| 亚洲小少妇裸体bbw| 亚洲成人精品影院| 日本美女一区二区| 免费在线观看成人| 加勒比av一区二区| 国产精品一区久久久久| 国产成人精品免费| 91视频观看免费| 在线视频综合导航| 欧美人与z0zoxxxx视频| 欧美一区二区三区在线视频| 日韩一区二区精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 麻豆精品视频在线观看视频| 精品无码三级在线观看视频 | 欧美日韩成人在线一区| 欧美日韩aaaaaa| 日韩免费观看高清完整版在线观看| 亚洲精品一区二区三区影院| 日本一区二区三区四区在线视频| 国产精品美女一区二区在线观看| 亚洲免费在线视频| 日韩激情在线观看| 国产老肥熟一区二区三区| 99re热这里只有精品视频| 欧美曰成人黄网| 日韩美女一区二区三区| 中文字幕乱码日本亚洲一区二区 | 久久久精品tv| 亚洲精品欧美激情| 男女男精品视频网| 国v精品久久久网| 欧美日韩一级大片网址| 26uuuu精品一区二区| 自拍av一区二区三区| 午夜精品国产更新| 国产成人精品一区二区三区四区 | 日本高清不卡一区| 日韩欧美电影一二三| 国产精品久久久久久久久久久免费看 | 精品国产凹凸成av人网站| 国产精品成人午夜| 日本亚洲电影天堂| 99久久国产综合精品麻豆| 欧美三级欧美一级| 亚洲国产精品成人久久综合一区| 一区二区三区 在线观看视频| 麻豆精品蜜桃视频网站| 99re视频精品| 久久久精品综合| 亚洲高清在线精品| av亚洲精华国产精华| 日韩小视频在线观看专区| 中文字幕一区二区在线观看 | 日本亚洲天堂网| 色综合久久中文综合久久牛| 欧美xxxxxxxxx| 午夜精品福利久久久| 99热精品一区二区| 26uuu国产在线精品一区二区| 亚洲一二三区视频在线观看| 丰满少妇在线播放bd日韩电影| 欧美日本视频在线| 亚洲精品视频一区| 粉嫩av一区二区三区在线播放 | 91精品国产综合久久久久久久久久| 中文字幕精品一区二区精品绿巨人| 天天色天天爱天天射综合| 91小视频在线观看| 久久网站最新地址| 日韩成人免费电影| 欧美在线视频全部完| 中文字幕一区二区三区不卡在线| 激情图片小说一区| 日韩一区二区影院| 日精品一区二区| 欧美视频在线不卡| 一区二区三区蜜桃| 93久久精品日日躁夜夜躁欧美| 久久精品男人的天堂| 另类小说一区二区三区| 91精品国产色综合久久ai换脸| 亚洲成人午夜影院| 欧美视频中文字幕| 亚欧色一区w666天堂| 91成人在线精品| 一区二区三区精品在线| 91天堂素人约啪| 亚洲日本va午夜在线电影| 成人av免费在线| 国产精品免费免费| 99re视频这里只有精品| 日韩毛片精品高清免费| 99国产精品久久久久| 中文字幕一区二区日韩精品绯色| 成人免费av网站| 国产精品久久久久久久久免费相片| 成人成人成人在线视频| 综合欧美一区二区三区| 91女神在线视频| 夜夜嗨av一区二区三区中文字幕| 日本高清免费不卡视频| 亚洲成人动漫一区| 日韩免费观看高清完整版| 韩国精品在线观看| 欧美国产激情二区三区| 成人97人人超碰人人99| 亚洲男人的天堂av| 欧美另类z0zxhd电影| 青青草国产精品97视觉盛宴| 日韩女优av电影| 成人福利电影精品一区二区在线观看| 国产精品对白交换视频| 欧美午夜精品电影| 精品午夜久久福利影院| 国产精品萝li| 欧美日韩中文字幕一区二区| 日本大胆欧美人术艺术动态| 久久亚洲春色中文字幕久久久| 波多野结衣一区二区三区| 亚洲乱码精品一二三四区日韩在线| 欧美日韩性生活| 久久国产精品72免费观看| 欧美国产欧美综合| 欧美亚洲一区三区| 蜜臀91精品一区二区三区| 国产色爱av资源综合区| 日本精品一级二级| 美女被吸乳得到大胸91| 国产精品网站在线| 欧美色综合网站| 国产乱淫av一区二区三区 | 国产精品免费视频网站| 欧美日韩色综合| 懂色av一区二区三区蜜臀| 亚洲午夜激情av| wwwwww.欧美系列| 色婷婷综合久久久久中文一区二区 | 亚洲精品国产a久久久久久| 91精品国产综合久久精品性色| 粗大黑人巨茎大战欧美成人| 午夜精品久久久久久久久久| 久久久精品免费观看| 欧美另类高清zo欧美| 波多野结衣中文一区| 蜜桃视频在线一区| 亚洲一区中文在线| 国产性色一区二区| 制服丝袜亚洲播放| 91香蕉视频污在线| 国产剧情av麻豆香蕉精品| 亚洲成人免费影院| 日韩一区欧美一区| 精品对白一区国产伦| 7777精品伊人久久久大香线蕉 | 国产精品成人网| 精品99久久久久久| 欧美日韩国产美| 99精品视频在线免费观看|