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

📄 irfunc.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
字号:
/* irfunc.c v0.4.1 (c) 1998-99 Tom Wheeley <tomw@tsys.demon.co.uk> *//* this code is placed under the LGPL, see www.gnu.org for info    *//* * irfunc.c, infrared functions (Irman specific) */#include "ir.h"/* generic function for ir_get_code() and ir_poll_code() */static unsigned char *ir_read_code(unsigned long timeout);/* converts a single hex character to an integer */static int ir_hex_to_int(unsigned char hex);/* flag to enable use of higher level functions */static int ir_enabled = 0;/* output hex digits */static char ir_hexdigit[16] ={	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};/* this function is used by both ir_get_code() and ir_poll_code(), * the difference being in the timeout for the first piece of data. * we also have a short timeout whatever for the remaining five bytes, * in case computer and Irman get out of sync we can just raise an error * and get back to normal life. * * note esp. that these functions return a pointer to statically defined * data.  In the forseeable usage of LIBIRMAN this seems the easiest way. */static unsigned char *ir_read_code(unsigned long timeout){	static unsigned char codebuf[IR_MAX_CODE_LEN]; 	int i, datum;	datum = ir_read_char(timeout);	if (datum < 0)		return NULL;	codebuf[0] = (unsigned char) datum;	for (i = 1; i < ircfg.codelen; i++)	{		datum = ir_read_char(IR_POLL_TIMEOUT);		if (datum < 0)		{			return NULL;		}		else		{			codebuf[i] = (unsigned char) datum;		}	}	return codebuf;}unsigned char *ir_get_code(void){	/* well dodgy choice of error here...! */	if (!ir_enabled)	{		errno = ENXIO;		return NULL;	}	return ir_read_code(IR_BLOCKING);}unsigned char *ir_poll_code(void){	if (!ir_enabled)	{		errno = ENXIO;		return NULL;	}	return ir_read_code(0);}/* checks to see if a piece of text is a valid ir code (1 = yes) */int ir_valid_code(char *text){	char *c;	if (strlen(text) != ircfg.codelen * 2)		return 0;	for (c = text; *c; c++)		if (!isxdigit(*c))			return 0;	return 1;}char *ir_code_to_text(unsigned char *code){	static char text[2 * IR_MAX_CODE_LEN + 1];	int i;	char *j;	j = text;	for (i = 0; i < ircfg.codelen; i++)	{		*j++ = ir_hexdigit[(code[i] >> 4) & 0x0f];		*j++ = ir_hexdigit[code[i] & 0x0f];	}	*j = '\0';	return text;}static int ir_hex_to_int(unsigned char hex){	if (hex >= '0' && hex <= '9')		return hex - '0';	hex = tolower(hex);	if (hex >= 'a' && hex <= 'f')		return hex - 'a' + 10;	/* error! */	return 0;}unsigned char *ir_text_to_code(char *text){	static char code[IR_MAX_CODE_LEN];	int i;	char *j;	j = text;	for (i = 0; i < ircfg.codelen; i++)	{		if (!j[0] || !j[1])		{			break;		}		code[i] = (ir_hex_to_int(*j++) << 4) & 0xf0;		code[i] += (ir_hex_to_int(*j++)) & 0x0f;	}	/* if string isn't long enough, pad with zeros. This is (marginally)	 * better than the leaving in the remains of the last conversion	 */	for (; i < ircfg.codelen; i++)		code[i] = '\0';	return code;}/* this function should never be called, but maybe someone wants to manually * open the ir channel, then use the higher level functions.  If you use this * then you deserve any problems you get!  It is only here because I don't * believe in unneccesary restrictions. */void ir_set_enabled(int val){	ir_enabled = val;}/* end of irfunc.c */

⌨️ 快捷键说明

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