亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bdaddr.c

?? 基于LINUX內核驅動的開發
?? C
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2004-2008  Marcel Holtmann <marcel@holtmann.org> * * *  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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <getopt.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include "oui.h"static int transient = 0;static int generic_reset_device(int dd){	bdaddr_t bdaddr;	int err;	err = hci_send_cmd(dd, 0x03, 0x0003, 0, NULL);	if (err < 0)		return err;	return hci_read_bd_addr(dd, &bdaddr, 10000);}#define OCF_ERICSSON_WRITE_BD_ADDR	0x000dtypedef struct {	bdaddr_t	bdaddr;} __attribute__ ((packed)) ericsson_write_bd_addr_cp;#define ERICSSON_WRITE_BD_ADDR_CP_SIZE 6static int ericsson_write_bd_addr(int dd, bdaddr_t *bdaddr){	struct hci_request rq;	ericsson_write_bd_addr_cp cp;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = OCF_ERICSSON_WRITE_BD_ADDR;	rq.cparam = &cp;	rq.clen   = ERICSSON_WRITE_BD_ADDR_CP_SIZE;	rq.rparam = NULL;	rq.rlen   = 0;	if (hci_send_req(dd, &rq, 1000) < 0)		return -1;	return 0;}#define OCF_ERICSSON_STORE_IN_FLASH	0x0022typedef struct {	uint8_t		user_id;	uint8_t		flash_length;	uint8_t		flash_data[253];} __attribute__ ((packed)) ericsson_store_in_flash_cp;#define ERICSSON_STORE_IN_FLASH_CP_SIZE 255static int ericsson_store_in_flash(int dd, uint8_t user_id, uint8_t flash_length, uint8_t *flash_data){	struct hci_request rq;	ericsson_store_in_flash_cp cp;	memset(&cp, 0, sizeof(cp));	cp.user_id = user_id;	cp.flash_length = flash_length;	if (flash_length > 0)		memcpy(cp.flash_data, flash_data, flash_length);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = OCF_ERICSSON_STORE_IN_FLASH;	rq.cparam = &cp;	rq.clen   = ERICSSON_STORE_IN_FLASH_CP_SIZE;	rq.rparam = NULL;	rq.rlen   = 0;	if (hci_send_req(dd, &rq, 1000) < 0)		return -1;	return 0;}static int csr_write_bd_addr(int dd, bdaddr_t *bdaddr){	unsigned char cmd[] = { 0x02, 0x00, 0x0c, 0x00, 0x11, 0x47, 0x03, 0x70,				0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	if (transient)		cmd[14] = 0x08;	cmd[16] = bdaddr->b[2];	cmd[17] = 0x00;	cmd[18] = bdaddr->b[0];	cmd[19] = bdaddr->b[1];	cmd[20] = bdaddr->b[3];	cmd[21] = 0x00;	cmd[22] = bdaddr->b[4];	cmd[23] = bdaddr->b[5];	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	return 0;}static int csr_reset_device(int dd){	unsigned char cmd[] = { 0x02, 0x00, 0x09, 0x00,				0x00, 0x00, 0x01, 0x40, 0x00, 0x00,				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	if (transient)		cmd[6] = 0x02;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	return 0;}#define OCF_TI_WRITE_BD_ADDR		0x0006typedef struct {	bdaddr_t	bdaddr;} __attribute__ ((packed)) ti_write_bd_addr_cp;#define TI_WRITE_BD_ADDR_CP_SIZE 6static int ti_write_bd_addr(int dd, bdaddr_t *bdaddr){	struct hci_request rq;	ti_write_bd_addr_cp cp;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = OCF_TI_WRITE_BD_ADDR;	rq.cparam = &cp;	rq.clen   = TI_WRITE_BD_ADDR_CP_SIZE;	rq.rparam = NULL;	rq.rlen   = 0;	if (hci_send_req(dd, &rq, 1000) < 0)		return -1;	return 0;}#define OCF_BCM_WRITE_BD_ADDR		0x0001typedef struct {	bdaddr_t	bdaddr;} __attribute__ ((packed)) bcm_write_bd_addr_cp;#define BCM_WRITE_BD_ADDR_CP_SIZE 6static int bcm_write_bd_addr(int dd, bdaddr_t *bdaddr){	struct hci_request rq;	bcm_write_bd_addr_cp cp;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = OCF_BCM_WRITE_BD_ADDR;	rq.cparam = &cp;	rq.clen   = BCM_WRITE_BD_ADDR_CP_SIZE;	rq.rparam = NULL;	rq.rlen   = 0;	if (hci_send_req(dd, &rq, 1000) < 0)		return -1;	return 0;}#define OCF_ZEEVO_WRITE_BD_ADDR		0x0001typedef struct {	bdaddr_t	bdaddr;} __attribute__ ((packed)) zeevo_write_bd_addr_cp;#define ZEEVO_WRITE_BD_ADDR_CP_SIZE 6static int zeevo_write_bd_addr(int dd, bdaddr_t *bdaddr){	struct hci_request rq;	zeevo_write_bd_addr_cp cp;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = OCF_ZEEVO_WRITE_BD_ADDR;	rq.cparam = &cp;	rq.clen   = ZEEVO_WRITE_BD_ADDR_CP_SIZE;	rq.rparam = NULL;	rq.rlen   = 0;	if (hci_send_req(dd, &rq, 1000) < 0)		return -1;	return 0;}static int st_write_bd_addr(int dd, bdaddr_t *bdaddr){	return ericsson_store_in_flash(dd, 0xfe, 6, (uint8_t *) bdaddr);}static struct {	uint16_t compid;	int (*write_bd_addr)(int dd, bdaddr_t *bdaddr);	int (*reset_device)(int dd);} vendor[] = {	{ 0,		ericsson_write_bd_addr,	NULL			},	{ 10,		csr_write_bd_addr,	csr_reset_device	},	{ 13,		ti_write_bd_addr,	NULL			},	{ 15,		bcm_write_bd_addr,	generic_reset_device	},	{ 18,		zeevo_write_bd_addr,	NULL			},	{ 48,		st_write_bd_addr,	generic_reset_device	},	{ 57,		ericsson_write_bd_addr,	generic_reset_device	},	{ 65535,	NULL,			NULL			},};static void usage(void){	printf("bdaddr - Utility for changing the Bluetooth device address\n\n");	printf("Usage:\n"		"\tbdaddr [-i <dev>] [-r] [-t] [new bdaddr]\n");}static struct option main_options[] = {	{ "device",	1, 0, 'i' },	{ "reset",	0, 0, 'r' },	{ "transient",	0, 0, 't' },	{ "help",	0, 0, 'h' },	{ 0, 0, 0, 0 }};int main(int argc, char *argv[]){	struct hci_dev_info di;	struct hci_version ver;	bdaddr_t bdaddr;	char addr[18], oui[9], *comp;	int i, dd, opt, dev = 0, reset = 0;	bacpy(&bdaddr, BDADDR_ANY);	while ((opt=getopt_long(argc, argv, "+i:rth", main_options, NULL)) != -1) {		switch (opt) {		case 'i':			dev = hci_devid(optarg);			if (dev < 0) {				perror("Invalid device");				exit(1);			}			break;		case 'r':			reset = 1;			break;		case 't':			transient = 1;			break;		case 'h':		default:			usage();			exit(0);		}	}	argc -= optind;	argv += optind;	optind = 0;	dd = hci_open_dev(dev);	if (dd < 0) {		fprintf(stderr, "Can't open device hci%d: %s (%d)\n",						dev, strerror(errno), errno);		exit(1);	}	if (hci_devinfo(dev, &di) < 0) {		fprintf(stderr, "Can't get device info for hci%d: %s (%d)\n",						dev, strerror(errno), errno);		hci_close_dev(dd);		exit(1);	}	if (hci_read_local_version(dd, &ver, 1000) < 0) {		fprintf(stderr, "Can't read version info for hci%d: %s (%d)\n",						dev, strerror(errno), errno);		hci_close_dev(dd);		exit(1);	}	if (!bacmp(&di.bdaddr, BDADDR_ANY)) {		if (hci_read_bd_addr(dd, &bdaddr, 1000) < 0) {			fprintf(stderr, "Can't read address for hci%d: %s (%d)\n",						dev, strerror(errno), errno);			hci_close_dev(dd);			exit(1);		}	} else		bacpy(&bdaddr, &di.bdaddr);	printf("Manufacturer:   %s (%d)\n",			bt_compidtostr(ver.manufacturer), ver.manufacturer);	ba2oui(&bdaddr, oui);	comp = ouitocomp(oui);	ba2str(&bdaddr, addr);	printf("Device address: %s", addr);	if (comp) {		printf(" (%s)\n", comp);		free(comp);	} else		printf("\n");	if (argc < 1) {		hci_close_dev(dd);		exit(0);	}	str2ba(argv[0], &bdaddr);	if (!bacmp(&bdaddr, BDADDR_ANY)) {		hci_close_dev(dd);		exit(0);	}	for (i = 0; vendor[i].compid != 65535; i++)		if (ver.manufacturer == vendor[i].compid) {			ba2oui(&bdaddr, oui);			comp = ouitocomp(oui);			ba2str(&bdaddr, addr);			printf("New BD address: %s", addr);			if (comp) {				printf(" (%s)\n\n", comp);				free(comp);			} else				printf("\n\n");			if (vendor[i].write_bd_addr(dd, &bdaddr) < 0) {				fprintf(stderr, "Can't write new address\n");				hci_close_dev(dd);				exit(1);			}			printf("Address changed - ");			if (reset && vendor[i].reset_device) {				if (vendor[i].reset_device(dd) < 0) {					printf("Reset device manually\n");				} else {					ioctl(dd, HCIDEVRESET, dev);					printf("Device reset successully\n");				}			} else {				printf("Reset device now\n");			}			//ioctl(dd, HCIDEVRESET, dev);			//ioctl(dd, HCIDEVDOWN, dev);			//ioctl(dd, HCIDEVUP, dev);			hci_close_dev(dd);			exit(0);		}	hci_close_dev(dd);	printf("\n");	fprintf(stderr, "Unsupported manufacturer\n");	exit(1);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜电影久久影院| 盗摄精品av一区二区三区| 欧美日韩mp4| 一区二区三区资源| 暴力调教一区二区三区| 欧美经典三级视频一区二区三区| 久久99精品久久久| 日韩免费电影一区| 久久精品久久精品| 欧美成人综合网站| 激情欧美日韩一区二区| 欧美精品一区二区三区蜜桃| 美女精品一区二区| 精品久久一区二区| 美女视频黄久久| 亚洲精品一线二线三线无人区| 精品影院一区二区久久久| 欧美va亚洲va| 国产剧情一区在线| 国产精品丝袜在线| 91麻豆产精品久久久久久| 一区二区三区在线免费| 在线观看91精品国产入口| 亚洲午夜精品久久久久久久久| 欧美日韩免费高清一区色橹橹| 亚洲成人综合视频| 911精品国产一区二区在线| 青青国产91久久久久久| 337p日本欧洲亚洲大胆精品| 国产老肥熟一区二区三区| 中文字幕av在线一区二区三区| www.成人在线| 一区二区三区四区乱视频| 欧美日韩成人综合在线一区二区| 图片区日韩欧美亚洲| 欧美大片在线观看一区| 国产成人综合视频| 亚洲免费观看高清完整版在线观看| 在线视频国内一区二区| 免费不卡在线视频| 国产日韩欧美精品一区| 在线观看免费成人| 久久国产精品99久久久久久老狼| 国产视频一区二区在线观看| 99re这里只有精品首页| 五月天婷婷综合| 久久综合久久综合亚洲| 99久久精品国产一区二区三区| 午夜久久久久久久久| 欧美精品一区二区三区视频| 91丝袜美腿高跟国产极品老师 | 成人美女在线观看| 亚洲一区国产视频| 久久久影视传媒| 一本色道综合亚洲| 久久精品国产久精国产爱| 国产精品网站导航| 欧美麻豆精品久久久久久| 国产精品一二三区在线| 一区二区激情小说| 精品福利在线导航| 色视频成人在线观看免| 久久精品av麻豆的观看方式| 中文字幕在线一区免费| 3atv一区二区三区| 成人动漫一区二区三区| 日韩不卡手机在线v区| 欧美极品aⅴ影院| 7777精品伊人久久久大香线蕉最新版 | 久久精品国产精品青草| 亚洲视频你懂的| 日韩精品一区二区三区蜜臀| 色播五月激情综合网| 国产一区不卡视频| 午夜精品一区二区三区三上悠亚| 国产欧美一区二区精品秋霞影院| 欧美精品一二三四| 91在线国内视频| 激情图区综合网| 亚洲不卡一区二区三区| 亚洲国产成人一区二区三区| 91精品国产一区二区三区| 99re8在线精品视频免费播放| 免费精品视频在线| 亚洲激情欧美激情| 国产日产欧产精品推荐色 | 精品国产电影一区二区| 在线视频国内自拍亚洲视频| 高清不卡在线观看| 久久精品国产网站| 午夜精品久久久久影视| 亚洲视频免费在线| 久久免费美女视频| 日韩免费视频一区| 欧美日本在线观看| 91啦中文在线观看| 成人黄色在线视频| 国产美女精品人人做人人爽| 蜜臀va亚洲va欧美va天堂| 亚洲成人动漫一区| 一区二区三区精品视频在线| 国产嫩草影院久久久久| 2022国产精品视频| 欧美一级精品大片| 欧美精品第一页| 欧美日韩三级在线| 欧洲精品在线观看| 91免费看视频| www.色精品| 成人黄色小视频在线观看| 国产精品66部| 韩国女主播一区| 精品亚洲porn| 美日韩黄色大片| 日韩不卡一区二区三区| 亚洲国产日日夜夜| 有码一区二区三区| 亚洲六月丁香色婷婷综合久久| 国产日本欧美一区二区| 久久久国产一区二区三区四区小说 | 午夜精品久久久久久久99樱桃| 亚洲免费资源在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 久久天堂av综合合色蜜桃网| 欧美一区二区视频免费观看| 欧美人与禽zozo性伦| 欧美日韩一区二区在线观看| 欧美色图免费看| 欧美日韩夫妻久久| 91精品久久久久久蜜臀| 欧美老女人第四色| 91精品婷婷国产综合久久性色 | 欧美视频一区在线观看| 欧美亚洲动漫精品| 欧美性一级生活| 欧美日韩大陆一区二区| 制服丝袜亚洲网站| 日韩免费在线观看| 久久先锋影音av鲁色资源网| 久久综合给合久久狠狠狠97色69| 久久综合九色综合97婷婷| 国产亚洲综合色| 中国av一区二区三区| 国产精品福利av| 亚洲精品你懂的| 午夜久久久影院| 久久爱www久久做| 夫妻av一区二区| 91原创在线视频| 欧美伦理电影网| 欧美精品一区二区三区视频| 亚洲国产高清在线| 怡红院av一区二区三区| 香蕉久久夜色精品国产使用方法| 日韩精品亚洲一区| 激情图片小说一区| 成+人+亚洲+综合天堂| 在线观看一区二区视频| 91精品久久久久久久久99蜜臂| 2021久久国产精品不只是精品| 欧美激情一区不卡| 樱花草国产18久久久久| 日韩国产高清影视| 国产精品亚洲专一区二区三区| av在线免费不卡| 欧美日韩情趣电影| 久久精品网站免费观看| 亚洲视频每日更新| 轻轻草成人在线| 成人app在线观看| 精品1区2区3区| 国产亚洲精品资源在线26u| 亚洲精品伦理在线| 另类调教123区| 91欧美激情一区二区三区成人| 91精品久久久久久久久99蜜臂| 国产午夜一区二区三区| 亚洲精品亚洲人成人网在线播放| 日韩不卡手机在线v区| 成人午夜av在线| 欧美群妇大交群的观看方式| 久久久久亚洲综合| 亚洲五码中文字幕| 国产精品主播直播| 欧美视频一二三区| 久久精品男人的天堂| 亚洲综合丁香婷婷六月香| 国产一区二区在线影院| 色婷婷综合激情| 26uuu亚洲综合色| 亚洲线精品一区二区三区| 国产综合色视频| 欧美日韩中文字幕一区二区| 2020国产精品久久精品美国| 亚洲欧美经典视频| 国产综合久久久久影院| 欧美色图在线观看| 国产精品天干天干在线综合| 免费在线观看不卡| 色久优优欧美色久优优|