irscanfx.c
来自「linux操作系统下的红外驱动的测试程序」· C语言 代码 · 共 167 行
C
167 行
/********************************************************************* * * Filename: irscanfx.c * Version: * Description: * Status: Experimental. * Authors: Dag Brattli <dagb@cs.uit.no> * Jean Tourrilhes <jt@hpl.hp.com> * Created at: 7/12/99 * Modified at: * Modified by: * * 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 * ********************************************************************//* * Read stdin and push it on an Ir socket * Use file descriptor */#include <sys/socket.h>#include <sys/types.h>#include <sys/time.h>#include <sys/ioctl.h>#include <sys/stat.h>#include <sys/wait.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include <linux/types.h>#include <linux/irda.h>#ifndef AF_IRDA#define AF_IRDA 23#endif /* AF_IRDA *//* Memory allocation for discovery */#define DISC_MAX_DEVICES 10#define DISC_BUF_LEN sizeof(struct irda_device_list) + \ sizeof(struct irda_device_info) * DISC_MAX_DEVICESunsigned char buf[4096];/* * Function echo_discover_devices (fd) * * Try to discover some remote device(s) that we can connect to * */int irscanf_discover_devices(int fd){ struct irda_device_list *list; unsigned char buf[DISC_BUF_LEN]; int len; int i; /* Set the list to point to the correct place */ list = (struct irda_device_list *) buf; len = DISC_BUF_LEN; if((getsockopt(fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &len)) || (list->len <= 0)) { perror("getsockopt"); printf("Didn't find any devices!\n"); return(-1); } /* List all devices */ printf("Discovered %d devices :\n", list->len); for (i=0;i<list->len;i++) { printf(" [%d] name: %s, daddr: 0x%08x\n", i + 1, list->dev[i].info, list->dev[i].daddr); } /* Clever heuristic... */ printf("Lets try this one\n"); return list->dev[0].daddr;}/* * Function main (argc, ) * * * */int main(int argc, char *argv[]){ struct sockaddr_irda peer; int daddr = 0; int fd; int hints; /* Create socket */ fd = socket(AF_IRDA, SOCK_STREAM, 0); if (fd < 0) { perror("socket"); exit(-1); } /* Set the filter used for performing discovery */ hints = HINT_COMPUTER | HINT_PDA; if (setsockopt(fd, SOL_IRLMP, IRLMP_HINT_MASK_SET, &hints, sizeof(hints))) { perror("setsockopt-hints"); exit(-1); }#if 0 /* Find a peer */ daddr = irscanf_discover_devices(fd); if (daddr == -1) return -1;#endif peer.sir_family = AF_IRDA; strncpy(peer.sir_name, "MyServer", 25); peer.sir_addr = daddr; if (connect(fd, (struct sockaddr*) &peer, sizeof(struct sockaddr_irda))) { perror("connect"); return -1; } printf("Connected!\n"); printf("Type your text with '.' on the last line...\n"); do { if((fgets(buf, sizeof(buf), stdin) == NULL) || (buf[0] == '.')) { buf[0] = 0x3; buf[1] = '\0'; } write(fd, buf, strlen(buf)); } while(buf[0] != 0x3); printf("Closing connection...\n"); close (fd); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?