findchip.c

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

C
142
字号
/********************************************************************* *                 * Filename:      findchip.c * Version:       0.5 * Description:   Hardware probe for infrared controllers * Status:        Experimental. * Author:        Jonathan Hudson <jrhudson@bigfoot.com> * Created at:    Thu Jan  1 09:45:49 2000 * Modified at:   Wed Jan 19 10:36:57 2000 * Modified by:   Dag Brattli <dagb@cs.uit.no> *  *     Copyright (c) 2000 Jonathan Hudson <jrhudson@bigfoot.com>, *     Copyright (c) 2000 Dag Brattli <dagb@cs.uit.no>,  *     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 <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/io.h> #include <string.h>#include "findchip.h"#define AUTHORS "Jonathan Hudson and Dag Brattli"extern int probe_smc(void);extern int probe_nsc(void);extern int probe_winbond(void);static int verbose = 0;int debug = 0;typedef struct {        char *chip;        int (*probe_func) (void);} chipset_t;static chipset_t allchips[] ={        { "SMC", probe_smc },        { "NSC", probe_nsc },        { "WINBOND", probe_winbond },        { NULL, NULL }};void list_chips(void){        chipset_t *probe;        for (probe = allchips; probe->chip; probe++) {                printf("%s\n", probe->chip);        }}void print_info(struct chip_info *info){	if (verbose) {		printf("Found %s %s Controller at 0x%x, DevID=0x%02x, Rev. %d\n",		       info->manufacturer, info->name, info->cfg_base, 		       info->chip_id, info->revision);		printf("    SIR Base 0x%x, FIR Base 0x%x\n", 		       info->sir_base, info->fir_base);		printf("    IRQ = %d, DMA = %d\n", info->irq, info->dma);		printf("    Enabled: %s, Suspended: %s\n",		       info->enabled ? "yes" : "no", 		       info->suspended ? "yes" : "no");		printf("    UART compatible: %s\n",		       info->uart_comp ? "yes" : "no");		printf("    Half duplex delay = %d us\n", info->delay);	} else {		printf("%s,%s,%d.%d,0x%x,0x%x,0x%x,%d,%d,%d,%d,%d\n",		       info->manufacturer, info->name,		       info->chip_id, info->revision, info->cfg_base,		       info->sir_base, info->fir_base, info->irq, info->dma,		       info->enabled, info->suspended, info->uart_comp);	}}int main(int argc, char **argv){        chipset_t *probe;	int c;	while ((c = getopt(argc, argv, "vdlh")) != -1) {		switch (c) {		case 'v':			verbose = 1;			break;		case 'd':			debug = 1;			break;		case 'h':						fputs("Usage: findchip [-d] [-v] [-l] [chip1 ...  chipN]\n",			      stderr);			fputs("\n", stderr);			fputs("-d     Enable debug output\n", stderr);			fputs("-v     Be verbose\n", stderr);			fputs("-l     List supported chipsets\n", stderr);			fputs("-h     Print help (this message)\n", stderr);			exit(0);		case 'l':                        list_chips();                        exit(0);                        break;		}	}	if (ioperm(0x0, 0x3ff, 1)) {		perror("Set i/o permission");		exit(0);	}	/* Probe the chips! */	do {                for (probe = allchips; probe->chip; probe++) {                        if (argv[optind] == NULL ||                          (0 == strcasecmp(argv[optind], probe->chip))) {                                probe->probe_func();                        }                }        } while (++optind < argc);	return 0;}

⌨️ 快捷键说明

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