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

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

?? uart.c

?? 基于嵌入式web服務器的web應用層代碼
?? C
字號:
/*********************************************************************
    Filename:       uart.c
    Revised:        $Date: 2007-12-13 10:01:47 -0800 $
    Revision:       $Revision: 10194 $
    
    Description:    
            
    Notes:  

*********************************************************************/

/*********************************************************************
 * INCLUDES
 */
#include <termios.h> 
#include <stdio.h> 
#include <stdlib.h>
#include <unistd.h> 
#include <fcntl.h> 
#include <pthread.h> 
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
/*
#include <semaphore.h>
#include <pthread.h>
*/
#include "uart.h"
#include "analyseframe.h"

/*********************************************************************
 * LOCAL VARIABLES
 */
volatile int STOP=FALSE; 
volatile int tty_fd;

semun_t port_sem;
int sem_id;

unsigned char rx_buf[RX_BUF_SIZE];
unsigned int rx_buf_pointer = 0;
unsigned int rx_buf_overflow = 0;

/*********************************************************************
 * CONSTANTS
 */



/*********************************************************************
 * FUNCTIONS
 */ 
//釋放信號量
int sem_up(int semid) 		
{
	struct sembuf sops={0, +1, IPC_NOWAIT};
	return (semop(semid, &sops, 1));
}

//獲取信號量
int sem_down(int semid)
{
	struct sembuf sops={0, -1, IPC_NOWAIT};
	return (semop(semid, &sops, 1));
}


 
int set_port(int fd, int nSpeed, int nBits, char nParity, int nStop)
{
	struct termios newtio, oldtio;
	/* 保存測試現有串口參數設置,在這里如果串口號等出錯,會有相關的出錯信息 */
	if (tcgetattr(fd, &oldtio) != 0)
	{
		perror("SetupSerial 1");
		//printf("<p>SetupSerial 1\n");
		return -1;
	}		
	bzero(&newtio, sizeof(newtio));
	/* 步驟一,設置字符大小 */
	newtio.c_cflag |= CLOCAL | CREAD;
	newtio.c_cflag &= ~CSIZE;
	newtio.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/
	newtio.c_oflag  &= ~OPOST;   /*Output*/
	switch (nBits)
	{
		case 7:
			newtio.c_cflag |= CS7;
			break;
		case 8:
			newtio.c_cflag |= CS8;
			break;
		default:
			fprintf(stderr,"Unsupported data size\n"); 
			break;		
	}	
	/* 設置奇偶校驗位 */
	switch (nParity)
	{
		case 'O':				// 奇數
		case 'o':
			newtio.c_cflag |= PARENB;
			newtio.c_cflag |= PARODD;
			newtio.c_iflag |= (INPCK | ISTRIP);
			break;
		case 'E':				// 偶數
		case 'e':
			newtio.c_cflag |= PARENB;
			newtio.c_cflag &= ~PARODD;
			newtio.c_iflag |= (INPCK | ISTRIP);	
			break;
		case 'N':				// 無奇偶校驗位
		case 'n':
			newtio.c_cflag &= ~PARENB;
			break;	
	}	
	/* 設置波特率 */
	switch (nSpeed)
	{
		case 2400:
			cfsetispeed(&newtio, B2400);
			cfsetospeed(&newtio, B2400);
			break;
		case 4800:
			cfsetispeed(&newtio, B4800);
			cfsetospeed(&newtio, B4800);
			break;
		case 9600:
			cfsetispeed(&newtio, B9600);
			cfsetospeed(&newtio, B9600);
			break;
		case 19200:
			cfsetispeed(&newtio, B19200);
			cfsetospeed(&newtio, B19200);
			break;
		case 38400:
			cfsetispeed(&newtio, B38400);
			cfsetospeed(&newtio, B38400);
			break;
		case 115200:
			cfsetispeed(&newtio, B115200);
			cfsetospeed(&newtio, B115200);
			break;
		case 460800:
			cfsetispeed(&newtio, B460800);
			cfsetospeed(&newtio, B460800);
			break;
		default:
			cfsetispeed(&newtio, B9600);
			cfsetospeed(&newtio, B9600);
			break;				
	}
	/* 設置停止位 */
	if (nStop == 1)
	{
		newtio.c_cflag &= ~CSTOPB;
	}	
	else if (nStop == 2)
	{
		newtio.c_cflag |= CSTOPB;
	}	
	/* 設置等待時間和最小接收字符 */
	newtio.c_cc[VTIME] = 3;			//300ms
	newtio.c_cc[VMIN] = 0;
	/* 處理未接收字符 */
	tcflush(fd, TCIOFLUSH);
	/* 激活新配置 */
	if ((tcsetattr(fd, TCSANOW, &newtio)) != 0)
	{
		perror("com set error");
		printf("<p>com set error!\n");
		return -1;
	}	
	//printf("set done!\n");
	return 0;
}	 


int port_open(void)
{
	int value;
  if (sem_down(sem_id) == -1)
  { 
    printf("can not get semaphore!\n"); 
    exit(1);
  }
#ifdef DEBUG_MODE
	printf("<p>get semaphore success!\n");
  value = semctl(sem_id, 0, GETVAL, 0);
  printf("value of semaphore is: %d\n", value);
#endif

	if ((tty_fd = open(COM, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0)			//非阻塞模式,忽略VMIN 和VTIME 的設置
	{
		perror("Can't Open Serial Port");
		printf("<p>Can't Open Serial Port!\n");
		port_close();
		return -1;
	}	

	if (set_port(tty_fd, BAUDRATE, 8, 'N', 1) < 0)
	{
		perror("set_opt error");	
		printf("<p>set_opt error!\n");
		port_close();
		return -1;
	}

	return (tty_fd);		
}

void port_close(void)
{
	int value;
	close(tty_fd);
  if (sem_up(sem_id) == -1)
  { 
    printf("can not release semaphore!\n");
  }
#ifdef DEBUG_MODE
	printf("<p>release semaphore success!\n");
	value = semctl(sem_id, 0, GETVAL, 0);
	printf("value of semaphore is: %d\n", value);
#endif
}



void port_write(unsigned char *buffer, unsigned int length)
{
	if (write(tty_fd, buffer, length) < 0)
		perror("write error:");
}

unsigned int port_read(void)
{
	int nread = 0;
	unsigned char start_timer_flag = 0;
	unsigned char read_timer_count = 0;
	
	rx_buf_pointer = 0;
	
	while (1)
	{
		if((nread = read(tty_fd, &rx_buf[rx_buf_pointer], RX_BUF_SIZE)) > 0)
		{
			start_timer_flag = 1;					//接收到有效數據后開始計數
			read_timer_count = 0;
			rx_buf_pointer += nread;			//接收指針累加
#ifdef DEBUG_MODE
			printf("read length is: %d\n", nread);
			printf("rx_buf_pointer is: %d\n", rx_buf_pointer);
			printf("read data is: %s\n", rx_buf);
#endif
		}

		usleep(100000);									
#ifdef DEBUG_MODE
		if (nread <= 0)
			printf("no data!\n");
			//printf("read length is: %d\n", nread);
#endif
			
		read_timer_count++;							//進行計數
		if (start_timer_flag)
		{
			if (read_timer_count >= 3)		//超時退出								
				break;
		}												
		else
		{
			if (read_timer_count >= 50)		//超時退出
				break;													
		}
	}
	return (rx_buf_pointer);
}





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合99re88久久爱| 狠狠色丁香久久婷婷综| 91免费版pro下载短视频| 国产欧美一区二区精品仙草咪| 天天综合色天天综合| 国产精品香蕉一区二区三区| 精品国产青草久久久久福利| 九九九久久久精品| 欧美精品一区二区三区视频| 国产一区二区按摩在线观看| 精品久久人人做人人爰| 久88久久88久久久| 国产午夜精品在线观看| 色婷婷综合久久久中文字幕| 欧美日韩成人综合天天影院 | 中文字幕色av一区二区三区| 成人在线一区二区三区| 国产精品热久久久久夜色精品三区 | 蜜桃视频在线观看一区| 欧美老人xxxx18| 美国精品在线观看| wwwwww.欧美系列| 国产999精品久久久久久| 国产精品久久久久久久久搜平片| 国产精品一区二区无线| 国产精品美女久久福利网站 | 国产在线一区观看| 国产精品午夜在线观看| 91蝌蚪porny九色| 中文字幕一区二区三区在线播放| 99久久精品国产网站| 亚洲夂夂婷婷色拍ww47| 欧美精品粉嫩高潮一区二区| 麻豆一区二区三| 久久精品欧美一区二区三区不卡| 暴力调教一区二区三区| 亚洲在线视频免费观看| 精品噜噜噜噜久久久久久久久试看| 盗摄精品av一区二区三区| 欧美日韩电影在线播放| 激情综合亚洲精品| 亚洲精品免费在线播放| 国产日韩欧美精品在线| 91精品国产一区二区三区蜜臀| 成人av资源站| wwww国产精品欧美| 国产精品一区专区| 日韩午夜在线观看视频| 日韩不卡一区二区三区| 国产宾馆实践打屁股91| 欧美日韩一二三区| 蜜臀久久99精品久久久画质超高清 | 91精品国产欧美一区二区成人| 欧美一级理论片| 国产精品久久久久永久免费观看| 欧美一区欧美二区| 豆国产96在线|亚洲| 亚洲精品一区二区三区精华液| 波多野结衣91| 久久久国产综合精品女国产盗摄| 国产精品自拍毛片| 欧美aⅴ一区二区三区视频| 2021久久国产精品不只是精品| 91国内精品野花午夜精品| 青青草国产精品97视觉盛宴| 亚洲欧美综合在线精品| 欧美精品在欧美一区二区少妇| 成人av网站在线观看| av一本久道久久综合久久鬼色| 亚洲成人资源网| 亚洲欧美日韩中文字幕一区二区三区| 欧美另类z0zxhd电影| 日本高清不卡一区| 成人免费视频国产在线观看| 久久国内精品自在自线400部| 亚洲综合成人在线视频| 久久久久久97三级| 欧美成人精品高清在线播放| 欧美精品国产精品| 精品中文字幕一区二区小辣椒| 一区二区三区在线看| 一区2区3区在线看| 亚洲国产美女搞黄色| 亚洲午夜久久久久久久久电影院 | 天堂va蜜桃一区二区三区| 欧美一级夜夜爽| 欧洲另类一二三四区| 日本韩国欧美三级| 91精品国产一区二区三区蜜臀 | 精品制服美女丁香| 国产伦理精品不卡| 99久久精品免费观看| 欧美天堂一区二区三区| 国产aⅴ综合色| 国产精品网站在线播放| 欧美婷婷六月丁香综合色| 91麻豆国产香蕉久久精品| 国产精品456| 91福利在线免费观看| 欧美乱妇20p| 国产亚洲一区二区在线观看| 亚洲一级不卡视频| 91影视在线播放| 中文av字幕一区| 成人激情校园春色| 91精品国产综合久久婷婷香蕉| 亚洲国产精品成人久久综合一区 | 欧美日韩精品三区| 亚洲免费视频中文字幕| 99riav久久精品riav| 中文字幕av免费专区久久| 美美哒免费高清在线观看视频一区二区| 成人午夜又粗又硬又大| 26uuuu精品一区二区| 激情图片小说一区| 日韩欧美资源站| 一区二区三区.www| 在线这里只有精品| 亚洲精品成人天堂一二三| 91影院在线免费观看| 亚洲天堂精品在线观看| 国产jizzjizz一区二区| 国产精品国产三级国产aⅴ入口| 成人一道本在线| 日韩成人一区二区三区在线观看| 91免费观看视频| |精品福利一区二区三区| 国产精品白丝jk黑袜喷水| 欧美日韩精品一二三区| 亚洲一区二区三区精品在线| 99久久精品情趣| 亚洲另类一区二区| 91久久线看在观草草青青| 亚洲欧美在线视频| 精品视频免费在线| 日韩精品电影在线观看| 欧美精品一区二区久久久| 紧缚奴在线一区二区三区| 欧美国产激情一区二区三区蜜月| 国产高清不卡二三区| 亚洲视频你懂的| 欧美videos大乳护士334| 成人精品视频.| 亚洲成人自拍网| 国内偷窥港台综合视频在线播放| 欧美日韩高清不卡| 色婷婷综合久色| 91啪在线观看| 91蝌蚪porny成人天涯| 国产成人免费在线| 一区免费观看视频| 韩国三级中文字幕hd久久精品| 国产亚洲一区二区三区四区| 欧美日韩二区三区| 日本道精品一区二区三区| 丰满亚洲少妇av| 麻豆精品久久精品色综合| 亚洲欧美电影一区二区| 26uuu欧美| 欧美一区二区三区四区久久| 97se亚洲国产综合自在线不卡| 精品一区二区三区的国产在线播放| 亚洲欧洲制服丝袜| 国产日本欧洲亚洲| 国产亚洲精品aa| 国产欧美日韩综合| 欧美三级三级三级爽爽爽| 日韩精品中文字幕一区二区三区| 日韩免费性生活视频播放| 国产精品乱子久久久久| 亚洲成a人v欧美综合天堂下载| 毛片av一区二区三区| 91啪九色porn原创视频在线观看| 337p亚洲精品色噜噜噜| 国产亚洲1区2区3区| 亚洲18影院在线观看| 成人福利视频在线| 日韩欧美中文字幕精品| 亚洲欧美一区二区三区孕妇| 麻豆极品一区二区三区| 欧美性猛交xxxxxx富婆| 国产精品免费视频网站| 亚洲欧美色图小说| 国产在线不卡一区| 色噜噜狠狠一区二区三区果冻| 欧美日韩国产美| 亚洲男人的天堂av| 极品美女销魂一区二区三区免费| 国产高清精品在线| 91精品国产综合久久香蕉麻豆| 国产视频不卡一区| 奇米亚洲午夜久久精品| 色94色欧美sute亚洲13| 欧美成人精品福利| 日韩精品亚洲专区| 99国产精品久久久久久久久久久 | 欧美视频一区在线| 国产精品乱码人人做人人爱| 午夜精品久久久久久| 欧美性生交片4|