ircomm.c

来自「linux操作系统下的红外驱动的测试程序」· C语言 代码 · 共 160 行

C
160
字号
/********************************************************************* *                 * Filename:      ircomm.c * Version:        * Description:    * Status:        Experimental. * Author:        Dag Brattli <dagb@cs.uit.no> * Created at:    Sun Jun  6 13:40:30 1999 * Modified at:   Fri Jun 11 10:47:08 1999 * Modified by:   Dag Brattli <dagb@cs.uit.no> *  *     Copyright (c) 1999 Dag Brattli, All Rights Reserved. *      *     This program is free software; you can redistribute it and/or  *     modify it under the terms of the GNU General Public License as  *     published by the Free Software Foundation; either version 2 of  *     the License, or (at your option) any later version. *  *     This program is distributed in the hope that it will be useful, *     but WITHOUT ANY WARRANTY; without even the implied warranty of *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *     GNU General Public License for more details. * *     You should have received a copy of the GNU General Public License *     along with this program; if not, write to the Free Software *     Foundation, Inc., 59 Temple Place, Suite 330, Boston, *     MA 02111-1307 USA * ********************************************************************/#include "irdadump.h"#include "ircomm.h"#if 0static char *ircomm_service_type[] ={	"N/A",	"THREE_WIRE_RAW",	"THREE_WIRE",	"N/A",	"NINE_WIRE",	"N/A",	"N/A",	"N/A",	"CENTRONICS"};static char *ircomm_port_type[] ={	"SERIAL",	"PARALLEL"};#endifstatic inline guint bytes_to_uint(unsigned char *buf){	guint	ret;	ret = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];	return(ret);}void parse_ircomm_params(guint8 clen, GNetBuf *buf, GString *str){	guint pi, pl;	guint pv_byte;	guint n = 0;	while (n < clen) {		pi = buf->data[n] & 0x7f; /* Remove critical bit */		pl = buf->data[n+1];		switch (pi) {		case SERVICE_TYPE:			pv_byte = buf->data[n+2];			g_string_sprintfa(str, "Service Type=");			if (pv_byte & IRCOMM_CENTRONICS)				g_string_sprintfa(str, "CENTRONICS ");			if (pv_byte & IRCOMM_9_WIRE)				g_string_sprintfa(str, "NINE_WIRE ");			if (pv_byte & IRCOMM_3_WIRE)				g_string_sprintfa(str, "THREE_WIRE ");			if (pv_byte & IRCOMM_3_WIRE_RAW)				g_string_sprintfa(str, "THREE_WIRE_RAW ");			if (!(pv_byte & IRCOMM_VALID_SERVICES))				g_string_sprintfa(str, "N/A ");			break;		case PORT_TYPE:			pv_byte = buf->data[n+2];			g_string_sprintfa(str, "Port Type=");			if (pv_byte & IRCOMM_SERIAL)				g_string_sprintfa(str, "SERIAL ");			if (pv_byte & IRCOMM_PARALLEL)				g_string_sprintfa(str, "PARALLEL ");			if (!(pv_byte & IRCOMM_VALID_PORT_TYPES))				g_string_sprintfa(str, "N/A ");			break;		case DATA_RATE:			pv_byte = bytes_to_uint(&(buf->data[n+2]));			g_string_sprintfa(str, "Data Rate=%d ", pv_byte);			break;		case DATA_FORMAT:			g_string_sprintfa(str, "Data Format=%02x ",					  buf->data[n+2]);			break;		case FLOW_CONTROL:			g_string_sprintfa(str, "Flow Control=%02x ",					  buf->data[n+2]);			break;		case XON_XOFF_CHAR:			g_string_sprintfa(str, "XON/XOFF=%02x,%02x ",					  buf->data[n+2], buf->data[n+3]);			break;		case DTELINE_STATE:			g_string_sprintfa(str, "DTEline State=%02x ",					  buf->data[n+2]);			break;		default:			break;		}		n += pl+2;	}	g_netbuf_pull(buf, clen);}void parse_ircomm_connect(GNetBuf *buf, GString *str){	parse_ircomm_ttp(buf, str);}void parse_ircomm_lmp(GNetBuf *buf, GString *str){	/* Kill "unused" warning */	buf = buf;	g_string_append(str, "IrCOMM (IrLPT) ");	return;}void parse_ircomm_ttp(GNetBuf *buf, GString *str){	int	len;	guint8 clen;	/* Check for empty frames - Jean II */	len = g_netbuf_get_len(buf);	if(len == 0)		return;	clen = buf->data[0];	g_netbuf_pull(buf, 1);	if (clen) {		g_string_append(str, "\n\tIrCOMM ");		parse_ircomm_params(clen, buf, str);	} else		g_string_append(str, "IrCOMM ");}

⌨️ 快捷键说明

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