diff options
| author | Max Krasnyansky <maxk@qualcomm.com> | 2002-06-18 16:48:50 +0000 | 
|---|---|---|
| committer | Max Krasnyansky <maxk@qualcomm.com> | 2002-06-18 16:48:50 +0000 | 
| commit | 8ee2371d4b948a541a71fce00e1cfde01ed364d8 (patch) | |
| tree | 30623711bd859d7468757659a08c2cf74a8e43c2 /tools/hcitool.c | |
| parent | 940d830204a87da484eec5e84f18281476c9a505 (diff) | |
Use library functions hci_for_each_dev and hci_get_route.
Use new hci_inquiry function syntax.
Diffstat (limited to 'tools/hcitool.c')
| -rw-r--r-- | tools/hcitool.c | 125 | 
1 files changed, 33 insertions, 92 deletions
| diff --git a/tools/hcitool.c b/tools/hcitool.c index 8ce64ed6..c2ad6186 100644 --- a/tools/hcitool.c +++ b/tools/hcitool.c @@ -51,62 +51,13 @@ extern char *optarg;  #define for_each_opt(opt, long, short) while ((opt=getopt_long(argc, argv, short ? short:"+", long, NULL)) != -1) -static int ctl; -  static void usage(void); -static int for_each_dev(int flag, int(*func)(int d, long arg), long arg) -{ -	struct hci_dev_list_req *dl; -	struct hci_dev_req *dr; -	int i; - -	dl = malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t)); -	if (!dl) { -		perror("Can't allocate memory"); -		return -1; -	} -	dl->dev_num = HCI_MAX_DEV; -	dr = dl->dev_req; - -	if (ioctl(ctl, HCIGETDEVLIST, (void*)dl)) { -		perror("Can't get device list"); -		return -1; -	} -	 -	if (!dl->dev_num) -		return -1; - -	for (i=0; i < dl->dev_num; i++, dr++) { -		if (hci_test_bit(flag, &dr->dev_opt)) { -			if (!func || func(dr->dev_id, arg)) -				return dr->dev_id; -		} -	} -	return -1; -} - -static int other_bdaddr(int dev_id, long arg) -{ -	struct hci_dev_info di = {dev_id: dev_id}; -	if (ioctl(ctl, HCIGETDEVINFO, (void*) &di)) -		return 0; -	return bacmp((bdaddr_t *)arg, &di.bdaddr); -} - -static int get_route(bdaddr_t *bdaddr) -{ -	if (bdaddr) -		return for_each_dev(HCI_UP, other_bdaddr, (long) bdaddr); -	else -		return for_each_dev(HCI_UP, NULL, 0); -} - -static int dev_info(int dev_id, long arg) +static int dev_info(int s, int dev_id, long arg)  {  	struct hci_dev_info di = {dev_id: dev_id};  	bdaddr_t bdaddr; -	if (ioctl(ctl, HCIGETDEVINFO, (void*) &di)) +	if (ioctl(s, HCIGETDEVINFO, (void*) &di))  		return 0;  	baswap(&bdaddr, &di.bdaddr); @@ -114,14 +65,17 @@ static int dev_info(int dev_id, long arg)  	return 0;  } -static int rev_info(int dev_id, long arg) +static int rev_info(int s, int dev_id, long arg)  {  	struct hci_version ver; +	int id = arg;  	int dd;  	struct hci_request rq;  	unsigned char buf[102]; +	if (id != -1 && dev_id != id) +		return 0;  	dd = hci_open_dev(dev_id);  	if (dd < 0) { @@ -162,12 +116,16 @@ static int rev_info(int dev_id, long arg)  	return 0;  } -static int conn_list(int dev_id, long arg) +static int conn_list(int s, int dev_id, long arg)  {  	struct hci_conn_list_req *cl;  	struct hci_conn_info *ci; +	int id = arg;  	int i; +	if (id != -1 && dev_id != id) +		return 0; +  	if (!(cl = malloc(10 * sizeof(*ci) + sizeof(*cl)))) {  		perror("Can't allocate memory");  		exit(1); @@ -176,7 +134,7 @@ static int conn_list(int dev_id, long arg)  	cl->conn_num = 10;  	ci = cl->conn_info; -	if (ioctl(ctl, HCIGETCONNLIST, (void*)cl)) { +	if (ioctl(s, HCIGETCONNLIST, (void*)cl)) {  		perror("Can't get connection list");  		exit(1);  	} @@ -193,7 +151,7 @@ static int conn_list(int dev_id, long arg)  	return 0;  } -static int find_conn(int dev_id, long arg) +static int find_conn(int s, int dev_id, long arg)  {  	struct hci_conn_list_req *cl;  	struct hci_conn_info *ci; @@ -207,7 +165,7 @@ static int find_conn(int dev_id, long arg)  	cl->conn_num = 10;  	ci = cl->conn_info; -	if (ioctl(ctl, HCIGETCONNLIST, (void*)cl)) { +	if (ioctl(s, HCIGETCONNLIST, (void*)cl)) {  		perror("Can't get connection list");  		exit(1);  	} @@ -258,7 +216,7 @@ static void cmd_dev(int dev_id, int argc, char **argv)  	}  	printf("Devices:\n"); -	for_each_dev(HCI_UP, dev_info, 0); +	hci_for_each_dev(HCI_UP, dev_info, 0);  }  /* Inquiry */ @@ -280,7 +238,7 @@ static char *inq_help =  static void cmd_inq(int dev_id, int argc, char **argv)  {  	int num_rsp, length, flags; -	inquiry_info *info; +	inquiry_info *info = NULL;  	bdaddr_t bdaddr;  	int i, opt; @@ -308,13 +266,9 @@ static void cmd_inq(int dev_id, int argc, char **argv)  		}  	} -	if (dev_id < 0) -		dev_id = get_route(NULL); -		  	printf("Inquiring ...\n"); -	info = hci_inquiry(dev_id, length, &num_rsp, NULL, flags); - -	if (!info) { +	num_rsp = hci_inquiry(dev_id, length, num_rsp, NULL, &info, flags); +	if (num_rsp < 0) {  		perror("Inquiry failed.");  		exit(1);  	} @@ -346,7 +300,7 @@ static char *scan_help =  static void cmd_scan(int dev_id, int argc, char **argv)  { -	inquiry_info *info; +	inquiry_info *info = NULL;  	int num_rsp, length, flags;  	bdaddr_t bdaddr;  	char name[248]; @@ -376,13 +330,9 @@ static void cmd_scan(int dev_id, int argc, char **argv)  		}  	} -	if (dev_id < 0) -		dev_id = get_route(NULL); -  	printf("Scanning ...\n"); -	info = hci_inquiry(dev_id, length, &num_rsp, NULL, flags); - -	if (!info) { +	num_rsp = hci_inquiry(dev_id, length, num_rsp, NULL, &info, flags); +	if (num_rsp < 0) {  		perror("Inquiry failed.");  		exit(1);  	} @@ -434,7 +384,7 @@ static void cmd_name(int dev_id, int argc, char **argv)  	baswap(&bdaddr, strtoba(argv[0]));  	if (dev_id < 0) { -		dev_id = get_route(&bdaddr); +		dev_id = hci_get_route(&bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Device is not available.\n");  			exit(1); @@ -492,7 +442,7 @@ static void cmd_info(int dev_id, int argc, char **argv)  	baswap(&bdaddr, strtoba(argv[0]));  	if (dev_id < 0) { -		dev_id = get_route(&bdaddr); +		dev_id = hci_get_route(&bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Device is not available.\n");  			exit(1); @@ -573,7 +523,7 @@ static void cmd_cmd(int dev_id, int argc, char **argv)  	}  	if (dev_id < 0) -		dev_id = get_route(NULL); +		dev_id = hci_get_route(NULL);  	errno = 0;  	ogf = strtol(argv[0], NULL, 16); @@ -648,11 +598,7 @@ static void cmd_rev(int dev_id, int argc, char **argv)  			return;  		}  	} - -        if (dev_id < 0) -                for_each_dev(HCI_UP, rev_info, 0); -        else -                rev_info(dev_id, 0); +	hci_for_each_dev(HCI_UP, rev_info, dev_id);  }  /* Display active connections */ @@ -679,10 +625,7 @@ static void cmd_con(int dev_id, int argc, char **argv)  	}  	printf("Connections:\n"); -	if (dev_id < 0) -		for_each_dev(HCI_UP, conn_list, 0); -	else -		conn_list(dev_id, 0); +	hci_for_each_dev(HCI_UP, conn_list, dev_id);  }  /* Create connection */ @@ -737,7 +680,7 @@ static void cmd_cc(int dev_id, int argc, char **argv)  	str2ba(argv[0], &bdaddr);  	if (dev_id < 0) { -		dev_id = get_route(&bdaddr); +		dev_id = hci_get_route(&bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Device is not available.\n");  			exit(1); @@ -789,7 +732,7 @@ static void cmd_dc(int dev_id, int argc, char **argv)  	str2ba(argv[0], &bdaddr);  	if (dev_id < 0) { -		dev_id = for_each_dev(HCI_UP, find_conn, (long) &bdaddr); +		dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) &bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Not connected.\n");  			exit(1); @@ -856,7 +799,7 @@ static void cmd_rssi(int dev_id, int argc, char **argv)  	str2ba(argv[0], &bdaddr);  	if (dev_id < 0) { -		dev_id = for_each_dev(HCI_UP, find_conn, (long) &bdaddr); +		dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) &bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Not connected.\n");  			exit(1); @@ -941,7 +884,7 @@ static void cmd_cpt(int dev_id, int argc, char **argv)  	hci_strtoptype(argv[1], &ptype);  	if (dev_id < 0) { -		dev_id = for_each_dev(HCI_UP, find_conn, (long) &bdaddr); +		dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) &bdaddr);  		if (dev_id < 0) {  			fprintf(stderr, "Not connected.\n");  			exit(1); @@ -1032,6 +975,7 @@ static struct option main_options[] = {  int main(int argc, char **argv)  {  	int opt, i, dev_id = -1; +	bdaddr_t ba;  	while ((opt=getopt_long(argc, argv, "+i:h", main_options, NULL)) != -1) {  		switch(opt) { @@ -1055,9 +999,8 @@ int main(int argc, char **argv)  		exit(0);  	} -	/* Open HCI socket */ -	if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) { -		perror("Can't open HCI socket."); +	if (dev_id != -1 && hci_devba(dev_id, &ba) < 0) { +		perror("Device is not available");  		exit(1);  	} @@ -1067,7 +1010,5 @@ int main(int argc, char **argv)  		command[i].func(dev_id, argc, argv);  		break;  	} - -	close(ctl);  	return 0;  } | 
