⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 term_s.c

📁 一个Linux下测试串口的源代码
💻 C
字号:
/*****************************************************************************//* term_s.c								     *//* This is the linux Communication Test Program for Advantech PCL card * * This file is part of pclterm * copyright (c)2000 ,ADVANTECH Co,Ltd * * pclterm is free software;you can redistribute it and/or modify it * under the terms of version 2 of GNU General Public License as * published by the Free Software Foundation.*//*****************************************************************************/#include	<signal.h>#include	"term.h"#define Total_Item	8#define Col_Space	15/*****************************************************************************//* GLOBAL VARIABLES							     *//*****************************************************************************/int	term_s_setup(void);void	get_ttysetup(char *);/*****************************************************************************//* STATIC FUNCTIONS							     *//*****************************************************************************/static	int	init_menu(void);static	void	prepare_menu(void);static	void	get_menu_data();static	int	change_setup();/*****************************************************************************//* STATIC VARIABLES							     *//*****************************************************************************/static	int		itemflag[Total_Item] = {	F_Writable | F_Return,	F_Select | F_Return,	F_Select | F_Return,	F_Select | F_Return,	F_Select | F_Return,	F_Select | F_Return,	F_Select | F_Return,	F_Select | F_Return};static	char		*itemdes[Total_Item] = {	" Device Name            ",	" Baud Rate              ",	" Parity                 ",	" Data Bits (5 - 8)      ",	" Stop Bits (1 - 2)      ",	" Flow Control           ",	" Local Echo             ",	" Send Enter as (CR/LF)  "};static char	InstrMsg[]="Enter:Select  Esc:Exit";static	struct	GEdit2	menu2 = {	Edit2Type0, -1, 4, Total_Item,	"Port Setup", 0, 0,	{InstrMsg},	0};static	struct	dterm_info	old_term;/*****************************************************************************//*	MAIN FUNCTIONS							     *//*****************************************************************************/int	term_s_setup(){	int	old_space_ndx, key;	old_term = DTerm;	old_space_ndx = init_menu();	mw_edit2init(&menu2);	prepare_menu();	do {	    key = mw_edit2();	    if ( key == K_ENTER ) {		get_menu_data();		prepare_menu();	    }	} while ( key != K_ESC );	get_menu_data();	release_space(old_space_ndx);	mw_edit2end();	key = change_setup();	if ( key && SioFd > 0 ) {	    tcflush(SioFd, 2);	    	    close(SioFd);	    SioFd = -1;	}	return(0);}void	get_ttysetup(char *str){	char	temp[81];	int	i, fd;        i = HIGH_SPEED_ITEM;	if ( DTerm.rate >= i )	    DTerm.rate = i-1;	strcpy(temp, BaudRateMenuItem[DTerm.rate].str);	i = strlen(temp);	temp[i++] = ',';	switch ( DTerm.parity ) {	case 0 : temp[i++] = 'N'; break;	case 1 : temp[i++] = 'O'; break;	case 2 : temp[i++] = 'E'; break;	}	temp[i++] = ',';	switch ( DTerm.databit ) {	case 0 : temp[i++] = '5'; break;	case 1 : temp[i++] = '6'; break;	case 2 : temp[i++] = '7'; break;	case 3 : temp[i++] = '8'; break;	}	temp[i++] = ',';	switch ( DTerm.stopbit ) {	case 0 : temp[i++] = '1'; break;	case 1 : temp[i++] = '2'; break;	}	temp[i++] = 0;	sprintf(str, "Device=%s, Set=%s", DTerm.dname, temp);}static int init_menu(void){	int	i, k, old_space_ndx;	old_space_ndx = get_space_ndx();	i = sizeof(struct GItem2) * Total_Item;	menu2.item = (struct GItem2 *)get_space(i);	for ( i=0; i<Total_Item; i++ ) {	    menu2.item[i].flag = itemflag[i];	    menu2.item[i].des = itemdes[i];	    menu2.item[i].act_item = 0;	    menu2.item[i].total = 1;	    menu2.item[i].item_no[0] = 0;	    menu2.item[i].len[0] = Col_Space;	    menu2.item[i].str[0] = get_space(Col_Space + 1);	    for ( k = 0; k < Col_Space; k++ )		menu2.item[i].str[0][k] = ' ';	    menu2.item[i].str[0][k] = 0;	}	menu2.item[1].menup[0].selectp = &BaudRateMenu;	menu2.item[2].menup[0].selectp = &ParityMenu;	menu2.item[3].menup[0].selectp = &DataBitMenu;	menu2.item[4].menup[0].selectp = &StopBitMenu;	menu2.item[5].menup[0].selectp = &FlowMenu;	menu2.item[6].menup[0].selectp = &YesNoMenu;	menu2.item[7].menup[0].selectp = &EnterMenu;	menu2.act_item = 0;	return(old_space_ndx);}static void prepare_menu(){	int	fd;	sprintf(menu2.item[0].str[0], "%-15s", DTerm.dname);	menu2.item[1].item_no[0] = DTerm.rate;	menu2.item[2].item_no[0] = DTerm.parity;	menu2.item[3].item_no[0] = DTerm.databit;	menu2.item[4].item_no[0] = DTerm.stopbit;	menu2.item[5].item_no[0] = DTerm.xflow;	menu2.item[6].item_no[0] = DTerm.lecho;	menu2.item[7].item_no[0] = DTerm.senter;        BaudRateMenu.total = BaudRateMenu.Ndisp = HIGH_SPEED_ITEM;	edit2_flush_data(&menu2);}static void get_menu_data(){	int	i, ch;	for ( i=0; i<Col_Space; i++ ) {	    ch = menu2.item[0].str[0][i];	    if ( ch == ' ' )		break;	    DTerm.dname[i] = ch;	}	DTerm.dname[i] = 0;	DTerm.rate = menu2.item[1].item_no[0];	DTerm.parity = menu2.item[2].item_no[0];	DTerm.databit = menu2.item[3].item_no[0];	DTerm.stopbit = menu2.item[4].item_no[0];	DTerm.xflow = menu2.item[5].item_no[0];	DTerm.lecho = menu2.item[6].item_no[0];	DTerm.senter = menu2.item[7].item_no[0];}static int change_setup(){	if ( strcmp(DTerm.dname, old_term.dname) != 0 )	    return(1);	if ( DTerm.rate != old_term.rate )	    return(1);	if ( DTerm.parity != old_term.parity )	    return(1);	if ( DTerm.databit != old_term.databit )	    return(1);	if ( DTerm.stopbit != old_term.stopbit )	    return(1);	if ( DTerm.xflow != old_term.xflow )	    return(1);	if ( DTerm.lecho != old_term.lecho )	    return(1);	if ( DTerm.senter != old_term.senter )	    return(1);	return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -