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

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

?? text2.cpp

?? vc 485串口通訊測(cè)試程序 vc-commtest
?? CPP
字號(hào):
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include "MyCom.h"
#include <termios.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/file.h>	/* flock(int fd,int operation)函數(shù)	*/
using namespace std;
const char *MyCom::Serial_Ctl_No[MAX_COMS] =
                                                       {
                                                       	        "/dev/wfet1000com0",
                                                       	        "/dev/wfet1000com1",
                                                       	        "/dev/wfet1000com2",
                                                       	        "/dev/nothing4",
                                                       	        "/dev/nothing5",
                                                       	        "/dev/nothing6"
                                                       	};
MyCom::MyCom() {
	if(!CreateSem( COM2 ))
	{
	}
}
MyCom::MyCom(enum COM_NO com)
{	
	if(!CreateSem( com ))
	{
	}
}
MyCom::MyCom(BYTE com)
{
	enum COM_NO com_no;
	AttachComNo( com , com_no);
	if(!CreateSem( com_no ))
	{
	}
}

bool MyCom::CreateSem(enum COM_NO com)
{
	union semun sem_union;
	sem_id = semget( (key_t)(SEM_KEY_COM + com), 1, 0666 | IPC_CREAT );
	cur_serial_num = com;
	serial_ctrl_no = 0;

	if( !AttachSem( 0 ) )
	     return false;
	if(com_buf[0] == 1 || com_buf[0] == 2 || com_buf[0] == 3)
	{//串行口的讀寫控制1:自動(dòng);2、3、非自動(dòng);2:讀、3:寫。表示串行口的信號(hào)量已初始化
	        m_port_status = com_buf[0];
		return true;
	}
	com_buf[0]    = 1;
	m_port_status = 1; //系統(tǒng)默認(rèn)為自動(dòng)收發(fā)
	
	sem_union.val=1;
	if(semctl(sem_id, 0, SETVAL, sem_union )==-1) {
		return false;
	}
	return true;	
}


bool MyCom::OpenCtrl()
{
//	if( m_port_status == com_buf[0] ) return true;//系統(tǒng)的收發(fā)控制狀態(tài)一致、不用再控制
	if( serial_ctrl_no <= 0)
	{
		serial_ctrl_no = open(Serial_Ctl_No[ cur_serial_num ], O_WRONLY | O_NOCTTY);
	}

	return (serial_ctrl_no > 0)? true : false;
}

bool MyCom::CloseCtrl()
{
  if (serial_ctrl_no > 0) 
  {
  	close(serial_ctrl_no);
  	serial_ctrl_no = 0;
  }
  return true;
}
bool MyCom::SetPortState(enum PORT_STATE m_status)//TRUE 表示發(fā)送, FALSE 為接收
{
	if( m_port_status == com_buf[0] ) return true;//系統(tǒng)的收發(fā)控制狀態(tài)一致、不用再控制
	OpenCtrl();
	unsigned char str[2];
	switch(m_status)
	{
	case STATUS_READ:
		str[0] = 0x00;
		str[1] = 0x00;
		break;
	case STATUS_WRITE:
		str[0] = 0x01;
		str[1] = 0x00;
		break;	
	case STATUS_AUTO:
	default:
		str[0] = 0x00;
		str[1] = 0x01;
		break;
	}
	
	if(serial_ctrl_no <= 0) return false;
	if (write(serial_ctrl_no,str,2) <0 )
	{
		CloseCtrl();
		return false;
	}
	CloseCtrl();
	com_buf[0]    = (BYTE)m_status;
	m_port_status = com_buf[0];
	return true;
}
bool MyCom::AttachSem(int flag)
{
	com_id=shmget( (key_t)MEM_KEY_COM + cur_serial_num, sizeof(BYTE), 0666 | IPC_CREAT ); 
	if ( com_id ==-1 ) {
		return false;
	}
	
	com_addr = shmat(com_id, NULL, flag );
	
	if (com_addr == (void *)-1 ) {
		return false;
	}	
	com_buf = (BYTE *) com_addr;
	return true;
}

void MyCom::Init_Serial(METERCOMPARA com_para)
{
	switch( (int)com_para.baudrate ) {//
		case 1:
			cur_baudrate = B300;
			break;
		case 2:
			cur_baudrate = B600;
			break;
		case 4:
			cur_baudrate = B1200;
			break;
		case 8:
			cur_baudrate = B2400;
			break;
		case 16:
			cur_baudrate = B4800;
			break;
		case 32:
			cur_baudrate = B9600;
			break;
		default:
			cur_baudrate = B9600;
			break;
	}
	switch( (int)com_para.bytesize ) {//COM_BYTESIZE5 = 5,COM_BYTESIZE6 = 6,COM_BYTESIZE7 = 7,COM_BYTESIZE8 = 8
		case 5:
			cur_bytesize = COM_BYTESIZE5 ;
			break;
		case 6:
			cur_bytesize = COM_BYTESIZE6 ;
			break;
		case 7:
			cur_bytesize = COM_BYTESIZE7 ;
			break;
		case 8:
			cur_bytesize = COM_BYTESIZE8 ;
			break;
		default:
			cur_bytesize = COM_BYTESIZE8 ;
		break;
	}
	switch( (int)com_para.parity ) {// PARITY_ODD=0, PARITY_EVEN=1, PARITY_NONE=2
		case 0:
			cur_parity = PARITY_NONE;
			break;
		case 1:
			cur_parity = PARITY_EVEN;
			break;
		case 2:
			cur_parity = PARITY_ODD;
			break;
		default:
			cur_parity = PARITY_EVEN;
		break;
	}
	
	switch( (int)com_para.stopbits ) {
		case 0:
		       cur_stopbits = COM_STOPBITS1;
		       break;
		case 1:
		       cur_stopbits = COM_STOPBITS15;
		       break;
		case 2:
		       cur_stopbits = COM_STOPBITS2;
		default:
		       cur_stopbits = COM_STOPBITS1;
		break;
	}
	
	cur_sync_mode = COM_BLOCK ;
	//SerialCom::serial_sync_mode(COM_BLOCK);
}

bool MyCom::sem_serial_open() {
	if(! sem_P()) {
		return false;
	}
	
	if(!serial_open()) {
//		 sem_V(); 
		 sem_serial_close();
		 return false;
	}
//	OpenCtrl();
	return true;
}

void MyCom::sem_serial_close() {
//	CloseCtrl();
	serial_close() ;
	sem_V();
}

bool MyCom::wait_for_response(int sec_time)
{
    	static fd_set readfs;
     	static struct timeval timeout;

    	timeout.tv_usec = 0;
    	timeout.tv_sec  = sec_time;  /* 設(shè)定超時(shí)時(shí)間為sec_time秒	*/
    			
//	SetPortState( STATUS_READ );  //設(shè)置為讀狀態(tài)

	FD_ZERO(&readfs);
    	FD_SET(serial_fd, &readfs);  		
	
	/* 等待數(shù)據(jù)返回并判斷是否超時(shí) */
    	if (select(serial_fd+1, &readfs, NULL, NULL, &timeout) <= 0) {
		return false;
        }	
	/* 讀句柄集合里是否是fd句柄來(lái)數(shù)據(jù) */
	if (FD_ISSET(serial_fd, &readfs) <= 0) {
		tcflush(serial_fd, TCIOFLUSH);
		return false;
	}
	
	return true;
}
bool MyCom::change_port(enum COM_NO com)	//改變對(duì)象使用端口
{
	SerialCom::change_port( com );
	if(!CreateSem( com ))
	{
		return false;
	}
	return true;
}

//信號(hào)量P操作
bool MyCom::sem_P() {
	struct sembuf sem_b;
	
	if( sem_id==-1 ) {
		return false;
	}
	
	sem_b.sem_num = 0;
	sem_b.sem_op = -1; /*p()*/
	sem_b.sem_flg = SEM_UNDO;
	
	if( semop(sem_id, &sem_b, 1) == -1 ) {
		return false;
	}
	return true;
	
}

//信號(hào)量V操作
bool MyCom::sem_V() {
	struct sembuf sem_b;
	
	if( sem_id==-1 ) {
		return false;
	}
	
	sem_b.sem_num = 0;
	sem_b.sem_op = 1; /*v()*/
	sem_b.sem_flg = SEM_UNDO;
	
	if( semop(sem_id, &sem_b, 1) == -1 ) {
		return false;
	}
	return true;
}

//銷毀信號(hào)量對(duì)象
void MyCom::DestroySem() {
//	shmctl( com_id, IPC_RMID, 0 );
//        CloseCtrl();
        if (com_addr == (void *) -1 ) {
		return;
	}
	shmdt(com_addr);
//	semctl( sem_id, 0, IPC_RMID);
}


int MyCom::serial_read(unsigned char * buf, int len)
{
	return SerialCom::serial_read( buf, len);
}
int  MyCom::serial_write(unsigned char * buf, int len)
{
	SetPortState( STATUS_WRITE );
	int Len = SerialCom::serial_write( buf, len);
	SetPortState( STATUS_READ );
	return Len;
}
bool MyCom::AttachComNo(BYTE com_no,enum COM_NO &com)
{
	switch(com_no)
	{
		case 0:
		      com = COM1;
		      break;
		case 1:
		      com = COM2;
		      break;
		case 2:
		      com = COM3;
		      break;
		case 3:
		      com = COM4;
		      break;
		case 4:
		      com = COM5;
		      break;
		case 5:
		      com = COM6;
		      break;
		case 6:
		      com = COM7;
		      break;
		case 7:
		      com =  COM8;
		      break;
	        default:
	              com = COM2;
	              return false;
	}
	return true;
}
bool MyCom::change_port(BYTE com)
{
	enum COM_NO com_no;
	if(!AttachComNo( com, com_no))//bool AttachComNo(BYTE com_no,enum COM_NO &com);
	      return false;	      
	return change_port( com_no );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线不卡| 亚洲四区在线观看| 美日韩一区二区| 欧美日韩成人一区| 洋洋av久久久久久久一区| 91免费看`日韩一区二区| 精品国产一区二区三区久久久蜜月 | 午夜国产不卡在线观看视频| 色悠久久久久综合欧美99| 中文字幕一区二区在线播放 | 欧美视频在线观看一区二区| 亚洲黄色性网站| 色婷婷av一区| 亚洲一区二区在线观看视频| 欧美亚洲一区二区在线| 亚洲一区二区在线观看视频| 在线免费视频一区二区| 一区二区三区日韩在线观看| 91福利视频在线| 亚洲午夜精品网| 6080国产精品一区二区| 青青草成人在线观看| 欧美电影免费观看高清完整版在线 | 国产麻豆精品theporn| 精品国产乱码久久久久久图片| 精品无码三级在线观看视频| 久久伊99综合婷婷久久伊| 国产成人综合视频| 国产精品伦理一区二区| 91丨porny丨首页| 亚洲一区免费在线观看| 91.麻豆视频| 麻豆成人在线观看| 国产色91在线| 99re热视频这里只精品| 夜夜嗨av一区二区三区中文字幕| 欧美色中文字幕| 免费看欧美美女黄的网站| 亚洲精品在线电影| 不卡一区在线观看| 伊人开心综合网| 欧美一级免费观看| 国产乱码精品一区二区三区av| 国产精品私人影院| 91官网在线免费观看| 日本成人中文字幕在线视频| 国产亚洲人成网站| 色综合久久久久| 日本不卡一区二区| 国产日产欧产精品推荐色| 91视频精品在这里| 日本aⅴ亚洲精品中文乱码| 亚洲精品一区二区三区精华液| 成人精品国产一区二区4080| 一区二区高清免费观看影视大全| 91精品国产全国免费观看 | 日韩一区欧美二区| 久久精品视频一区二区| 91国在线观看| 国产一区二区三区精品视频| 最新不卡av在线| 日韩一区和二区| 波多野结衣在线一区| 五月婷婷另类国产| 国产丝袜欧美中文另类| 欧美日免费三级在线| 精品一区二区免费| 一区二区三区成人在线视频| 日韩精品综合一本久道在线视频| 99久久久国产精品| 麻豆成人久久精品二区三区小说| 国产精品久久久久久久久久免费看 | 国产一区视频网站| 一区二区在线免费观看| 久久精品视频网| 欧美肥胖老妇做爰| 成人妖精视频yjsp地址| 日日摸夜夜添夜夜添国产精品| 亚洲国产精品成人综合色在线婷婷| 欧美日韩在线观看一区二区| 成人性生交大片| 日本不卡一区二区三区高清视频| 亚洲日本韩国一区| 日韩欧美亚洲国产精品字幕久久久| 一本色道久久综合狠狠躁的推荐| 国产一区二区在线免费观看| 亚洲韩国精品一区| 国产精品另类一区| 精品乱人伦小说| 欧美三区在线观看| caoporm超碰国产精品| 久久精品国产99国产精品| 亚洲一二三四区| 国产精品久久777777| 精品国产三级电影在线观看| 欧美日韩久久不卡| 色综合天天视频在线观看| 国产精品一二一区| 美女网站色91| 午夜免费久久看| 亚洲毛片av在线| 国产日韩欧美精品在线| 日韩一区二区高清| 欧美日韩精品一区二区三区四区| av亚洲精华国产精华精华| 国产一区视频导航| 麻豆一区二区三| 日日欢夜夜爽一区| 亚洲伊人色欲综合网| 综合色天天鬼久久鬼色| 国产精品色在线观看| 久久久久久久av麻豆果冻| 91精品国产综合久久国产大片| 在线日韩一区二区| 91丨九色丨蝌蚪丨老版| 成人免费毛片嘿嘿连载视频| 国产一区二区在线视频| 精品一区二区三区免费观看 | 成人性生交大片| 高清beeg欧美| 国产高清精品网站| 国产一区二区三区免费播放| 国产美女精品人人做人人爽| 精品一区二区精品| 国产一区二区三区四区在线观看 | 日本中文一区二区三区| 午夜av区久久| 日韩av一二三| 日本aⅴ免费视频一区二区三区| 三级影片在线观看欧美日韩一区二区| 亚洲国产三级在线| 午夜激情综合网| 天天爽夜夜爽夜夜爽精品视频| 亚洲va韩国va欧美va| 午夜视黄欧洲亚洲| 日本欧美久久久久免费播放网| 美腿丝袜亚洲三区| 国产一区二区三区免费观看| 国产精品亚洲第一区在线暖暖韩国| 国产一区福利在线| 成人午夜免费av| va亚洲va日韩不卡在线观看| 95精品视频在线| 日本高清不卡视频| 欧美日韩国产综合一区二区| 9191国产精品| 精品国产伦一区二区三区观看方式 | 韩日欧美一区二区三区| 国产一区二区三区久久久 | 在线观看av一区二区| 欧美三级韩国三级日本一级| 91精品麻豆日日躁夜夜躁| 欧美成人一区二区三区片免费| 久久众筹精品私拍模特| 国产欧美一区二区精品性| 国产精品久久久久久久久搜平片| 亚洲乱码日产精品bd| 午夜精品久久一牛影视| 麻豆精品一区二区三区| 国产毛片一区二区| 91在线观看一区二区| 欧美日韩一区二区在线视频| 日韩一区二区在线观看| 国产欧美一区二区精品性色| 亚洲卡通动漫在线| 日本中文字幕一区| 国产成人精品一区二| 欧美制服丝袜第一页| 欧美精品久久久久久久多人混战| 91精品国产色综合久久久蜜香臀| 26uuu国产在线精品一区二区| 日本一区二区成人在线| 亚洲一区免费观看| 亚洲va天堂va国产va久| 国产一区二区毛片| 在线观看不卡视频| 精品国产乱码久久久久久老虎| 国产精品嫩草久久久久| 亚洲国产cao| 国产综合久久久久久鬼色| 91在线云播放| 日韩一区二区三区视频| 国产精品久久午夜夜伦鲁鲁| 亚洲成人av一区二区| 国产乱码字幕精品高清av | 色婷婷综合中文久久一本| 欧美一区二区三区影视| 中文字幕不卡在线| 偷拍日韩校园综合在线| 国产高清精品久久久久| 欧美日韩成人综合在线一区二区| 国产日韩视频一区二区三区| 午夜精品123| 成人av在线播放网址| 91精品国产91热久久久做人人| 亚洲国产精品成人久久综合一区| 五月婷婷综合在线| av在线不卡免费看| 欧美电影免费观看高清完整版在 | 日本成人中文字幕|