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

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

?? stty.c

?? 一個串口的代碼提供給大家參考。一個串口的代碼提供給大家參考。
?? C
字號:
//stty.c

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

///////////////////////////////////////////////////////////////////////////////
// 初始化串口設備并進行原有設置的保存
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);
    //
    // 打開并且設置串口
    ptty->fd = open(ptty->name, O_RDWR | O_NOCTTY |O_NDELAY);
    if (ptty->fd <0)
    {
        free(ptty);
        return NULL;
    }
    //
    // 取得并且保存原來的設置
    tcgetattr(ptty->fd,&ptty->otm);
    return ptty;
}

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

    return 0;
}


///////////////////////////////////////////////////////////////////////////////
// 設置串口通信速率
// ptty 參數類型(TTY_INFO *),已經初始化的串口設備信息結構指針
// speed 參數類型(int),用來設置串口的波特率
// return 返回值類型(int),函數執行成功返回零值,否則返回大于零的值
///////////////////////////////////////////////////////////////////////////////
int setTTYSpeed(TTY_INFO *ptty, int speed)
{
    int i;
    //
    // 進行新的串口設置,數據位為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;
}
///////////////////////////////////////////////////////////////////////////////
// 設置串口數據位,停止位和效驗位
// ptty 參數類型(TTY_INFO *),已經初始化的串口設備信息結構指針
// databits 參數類型(int), 數據位,取值為7或者8
// stopbits 參數類型(int),停止位,取值為1或者2
// parity 參數類型(int),效驗類型 取值為N,E,O,,S
// return 返回值類型(int),函數執行成功返回零值,否則返回大于零的值
///////////////////////////////////////////////////////////////////////////////
int setTTYParity(TTY_INFO *ptty,int databits,int parity,int stopbits)
{
    //
    // 取得串口設置
    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;
    //
    // 設置串口的各種參數
    ptty->ntm.c_cflag &= ~CSIZE;
    switch (databits)
    {  //設置數據位數
    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)
    { // 設置奇偶校驗位數
    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); /* 設置為奇效驗*/
        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; /* 轉換為偶效驗*/
        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;
    }
    //
    // 設置停止位
    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)//發(寫)
{
    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
///////////////////////////////////////////////////////////////////////////////
// 接口測試
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;
    }
    //
    
    
    //寫觸摸屏的停止位‘0’
    //暫停250ms
    //sleep(250);
    //寫觸摸屏的狀態查詢位‘*‘
    //查看收到的數據是否為“0xc0”
    //定坐標
    //寫觸摸屏的采樣位‘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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精品一区二区三区免费| 精品国产一区二区三区四区四 | 91精品婷婷国产综合久久竹菊| 亚洲精品国产一区二区精华液| 丁香婷婷深情五月亚洲| 国产亚洲污的网站| 波多野结衣视频一区| 日韩美女视频一区| 欧美精品一二三| 国产在线国偷精品免费看| 美腿丝袜亚洲色图| 中文幕一区二区三区久久蜜桃| 91麻豆产精品久久久久久 | 久久久久久久久久久久久久久99| 国产成人综合亚洲91猫咪| 亚洲欧洲在线观看av| 欧美一区二区三区公司| 不卡大黄网站免费看| 麻豆一区二区三| 国产精品亚洲一区二区三区妖精 | 亚洲国产一区在线观看| 精品国产网站在线观看| 久久九九99视频| 亚洲欧美一区二区三区极速播放 | 国产精品福利一区| 精品久久久久久综合日本欧美| 色综合天天综合色综合av| 午夜国产精品影院在线观看| 麻豆一区二区99久久久久| 国产在线日韩欧美| 日本成人在线看| 亚洲国产欧美在线人成| 捆绑变态av一区二区三区| 亚洲成人黄色影院| 亚洲精品视频一区| 欧美aa在线视频| 日韩福利电影在线| 国产精品一区二区久久精品爱涩 | av一区二区三区黑人| 欧美日韩国产一区二区三区地区| 91在线国内视频| 91视频xxxx| 欧美电影免费观看高清完整版在线| 欧美日韩免费观看一区三区| 色悠悠亚洲一区二区| 在线一区二区三区四区五区| 91蜜桃婷婷狠狠久久综合9色| 欧美蜜桃一区二区三区| 中文字幕亚洲区| 久久国产成人午夜av影院| 欧美日韩在线三级| 亚洲色图在线看| 成人午夜私人影院| 91蜜桃网址入口| 久久精品人人做人人综合| 日韩国产精品久久久久久亚洲| av激情综合网| 国产日韩欧美一区二区三区乱码| 欧美韩日一区二区三区四区| 中文字幕人成不卡一区| 黄色小说综合网站| 欧美成人a∨高清免费观看| 亚洲小说春色综合另类电影| 色诱亚洲精品久久久久久| 国产精品成人网| av影院午夜一区| 亚洲欧洲精品天堂一级| av亚洲精华国产精华精| 中文字幕高清不卡| 成人sese在线| 亚洲视频一区二区免费在线观看 | 三级在线观看一区二区| 麻豆免费精品视频| 日韩精品一区二区三区在线播放 | 色诱亚洲精品久久久久久| 亚洲色图另类专区| 一本一道久久a久久精品 | 久久婷婷综合激情| 亚洲男人的天堂在线观看| 不卡免费追剧大全电视剧网站| 久久精品亚洲乱码伦伦中文| 国产精品自拍三区| 中文字幕乱码日本亚洲一区二区| 成人性色生活片| 亚洲免费色视频| 欧美色偷偷大香| 日韩av在线发布| 久久亚洲综合色| av在线这里只有精品| 亚洲精品成人在线| 欧美日韩精品免费观看视频| 日韩中文字幕91| 精品99久久久久久| 成人av在线看| 婷婷综合另类小说色区| 日韩欧美在线影院| 一区二区日韩av| aaa欧美日韩| 性做久久久久久免费观看| 欧美一区日韩一区| 成人动漫精品一区二区| 亚洲二区在线观看| www激情久久| 欧美三区在线视频| 国产综合一区二区| 亚洲最大成人综合| 国产亚洲一二三区| 欧美另类高清zo欧美| 国产成人av电影免费在线观看| 一区二区三区欧美激情| 日韩欧美一级片| 91官网在线免费观看| 激情av综合网| 天堂av在线一区| 国产精品麻豆视频| 日韩欧美一区二区在线视频| 波多野结衣91| 国产乱国产乱300精品| 亚洲成人av一区二区| 亚洲国产精品高清| 日韩欧美的一区二区| 在线观看欧美精品| 亚洲成人免费视| 亚洲欧美怡红院| 久久久精品天堂| 日韩免费视频一区| 欧美疯狂做受xxxx富婆| 99riav久久精品riav| 国产高清一区日本| 久久精品国产第一区二区三区| 亚洲在线成人精品| 91麻豆精品国产自产在线观看一区| 国产91在线看| 狠狠v欧美v日韩v亚洲ⅴ| 丝袜美腿一区二区三区| 亚洲精品v日韩精品| 国产精品萝li| 久久精品夜色噜噜亚洲a∨| 日韩精品在线一区| 欧美一区国产二区| 欧美精品欧美精品系列| 日本韩国欧美在线| 在线这里只有精品| 欧美三级电影精品| 欧美性受xxxx黑人xyx性爽| 精品系列免费在线观看| 国产精品久久一卡二卡| 久久精品人人做人人综合| 久久精品一区蜜桃臀影院| 久久一区二区三区四区| 亚洲一二三四在线观看| 中文字幕日韩av资源站| 国产精品国产三级国产aⅴ原创| 久久久久久久久久美女| 欧美激情一区二区三区不卡 | 亚洲丝袜美腿综合| 亚洲欧美日韩久久| 亚洲国产精品一区二区久久恐怖片 | 国产·精品毛片| 国产一区欧美日韩| 国产精品亚洲成人| 99国产精品久| 欧美日韩不卡一区| 欧美成人一区二区| 国产亚洲一区字幕| 日韩伦理av电影| 午夜精品久久一牛影视| 免费高清视频精品| 大陆成人av片| 在线欧美小视频| 日韩午夜激情av| 中文字幕精品在线不卡| 一区二区三区av电影| 美腿丝袜亚洲色图| 成人久久久精品乱码一区二区三区| 国产不卡一区视频| 欧美亚洲动漫另类| 亚洲精品一区二区精华| 亚洲天天做日日做天天谢日日欢| 亚洲午夜私人影院| 韩国成人福利片在线播放| av综合在线播放| 欧美高清激情brazzers| 国产精品私人影院| 日韩国产精品91| 成人激情av网| 91精品国产丝袜白色高跟鞋| 国产农村妇女毛片精品久久麻豆| 亚洲人成在线播放网站岛国| 美腿丝袜在线亚洲一区| 色呦呦日韩精品| 精品久久免费看| 亚洲成人在线免费| 99久久99久久久精品齐齐| 欧美猛男超大videosgay| 欧美国产欧美综合| 青青草原综合久久大伊人精品优势| 不卡大黄网站免费看| 精品国产一区久久| 日韩福利视频导航|