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

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

?? hcrp.c

?? 基于LINUX內核驅動的開發
?? C
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2003-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 <unistd.h>#include <string.h>#include <signal.h>#include <sys/socket.h>#include <bluetooth/bluetooth.h>#include <bluetooth/l2cap.h>#include <netinet/in.h>#define HCRP_PDU_CREDIT_GRANT		0x0001#define HCRP_PDU_CREDIT_REQUEST		0x0002#define HCRP_PDU_GET_LPT_STATUS		0x0005#define HCRP_STATUS_FEATURE_UNSUPPORTED	0x0000#define HCRP_STATUS_SUCCESS		0x0001#define HCRP_STATUS_CREDIT_SYNC_ERROR	0x0002#define HCRP_STATUS_GENERIC_FAILURE	0xffffstruct hcrp_pdu_hdr {	uint16_t pid;	uint16_t tid;	uint16_t plen;} __attribute__ ((packed));#define HCRP_PDU_HDR_SIZE 6struct hcrp_credit_grant_cp {	uint32_t credit;} __attribute__ ((packed));#define HCRP_CREDIT_GRANT_CP_SIZE 4struct hcrp_credit_grant_rp {	uint16_t status;} __attribute__ ((packed));#define HCRP_CREDIT_GRANT_RP_SIZE 2struct hcrp_credit_request_rp {	uint16_t status;	uint32_t credit;} __attribute__ ((packed));#define HCRP_CREDIT_REQUEST_RP_SIZE 6struct hcrp_get_lpt_status_rp {	uint16_t status;	uint8_t  lpt_status;} __attribute__ ((packed));#define HCRP_GET_LPT_STATUS_RP_SIZE 3static int hcrp_credit_grant(int sk, uint16_t tid, uint32_t credit){	struct hcrp_pdu_hdr hdr;	struct hcrp_credit_grant_cp cp;	struct hcrp_credit_grant_rp rp;	unsigned char buf[128];	int len;	hdr.pid = htons(HCRP_PDU_CREDIT_GRANT);	hdr.tid = htons(tid);	hdr.plen = htons(HCRP_CREDIT_GRANT_CP_SIZE);	cp.credit = credit;	memcpy(buf, &hdr, HCRP_PDU_HDR_SIZE);	memcpy(buf + HCRP_PDU_HDR_SIZE, &cp, HCRP_CREDIT_GRANT_CP_SIZE);	len = write(sk, buf, HCRP_PDU_HDR_SIZE + HCRP_CREDIT_GRANT_CP_SIZE);	len = read(sk, buf, sizeof(buf));	memcpy(&hdr, buf, HCRP_PDU_HDR_SIZE);	memcpy(&rp, buf + HCRP_PDU_HDR_SIZE, HCRP_CREDIT_GRANT_RP_SIZE);	if (ntohs(rp.status) != HCRP_STATUS_SUCCESS) {		errno = EIO;		return -1;	}	return 0;}static int hcrp_credit_request(int sk, uint16_t tid, uint32_t *credit){	struct hcrp_pdu_hdr hdr;	struct hcrp_credit_request_rp rp;	unsigned char buf[128];	int len;	hdr.pid = htons(HCRP_PDU_CREDIT_REQUEST);	hdr.tid = htons(tid);	hdr.plen = htons(0);	memcpy(buf, &hdr, HCRP_PDU_HDR_SIZE);	len = write(sk, buf, HCRP_PDU_HDR_SIZE);	len = read(sk, buf, sizeof(buf));	memcpy(&hdr, buf, HCRP_PDU_HDR_SIZE);	memcpy(&rp, buf + HCRP_PDU_HDR_SIZE, HCRP_CREDIT_REQUEST_RP_SIZE);	if (ntohs(rp.status) != HCRP_STATUS_SUCCESS) {		errno = EIO;		return -1;	}	if (credit)		*credit = ntohl(rp.credit);	return 0;}static int hcrp_get_lpt_status(int sk, uint16_t tid, uint8_t *lpt_status){	struct hcrp_pdu_hdr hdr;	struct hcrp_get_lpt_status_rp rp;	unsigned char buf[128];	int len;	hdr.pid = htons(HCRP_PDU_GET_LPT_STATUS);	hdr.tid = htons(tid);	hdr.plen = htons(0);	memcpy(buf, &hdr, HCRP_PDU_HDR_SIZE);	len = write(sk, buf, HCRP_PDU_HDR_SIZE);	len = read(sk, buf, sizeof(buf));	memcpy(&hdr, buf, HCRP_PDU_HDR_SIZE);	memcpy(&rp, buf + HCRP_PDU_HDR_SIZE, HCRP_GET_LPT_STATUS_RP_SIZE);	if (ntohs(rp.status) != HCRP_STATUS_SUCCESS) {		errno = EIO;		return -1;	}	if (lpt_status)		*lpt_status = rp.lpt_status;	return 0;}static inline int hcrp_get_next_tid(int tid){	if (tid > 0xf000)		return 0;	else		return tid + 1;}int hcrp_print(bdaddr_t *src, bdaddr_t *dst, unsigned short ctrl_psm, unsigned short data_psm, int fd, int copies){	struct sockaddr_l2 addr;	struct l2cap_options opts;	socklen_t size;	unsigned char buf[2048];	int i, ctrl_sk, data_sk, mtu, count, len, timeout = 0;	uint8_t status;	uint16_t tid = 0;	uint32_t tmp, credit = 0;	if ((ctrl_sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) < 0) {		perror("ERROR: Can't create socket");		return 1;	}	memset(&addr, 0, sizeof(addr));	addr.l2_family = AF_BLUETOOTH;	bacpy(&addr.l2_bdaddr, src);	if (bind(ctrl_sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {		perror("ERROR: Can't bind socket");		close(ctrl_sk);		return 1;	}	memset(&addr, 0, sizeof(addr));	addr.l2_family = AF_BLUETOOTH;	bacpy(&addr.l2_bdaddr, dst);	addr.l2_psm = htobs(ctrl_psm);	if (connect(ctrl_sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {		perror("ERROR: Can't connect to device");		close(ctrl_sk);		return 1;	}	if ((data_sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) < 0) {		perror("ERROR: Can't create socket");		close(ctrl_sk);		return 1;	}	memset(&addr, 0, sizeof(addr));	addr.l2_family = AF_BLUETOOTH;	bacpy(&addr.l2_bdaddr, src);	if (bind(data_sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {		perror("ERROR: Can't bind socket");		close(data_sk);		close(ctrl_sk);		return 1;	}	memset(&addr, 0, sizeof(addr));	addr.l2_family = AF_BLUETOOTH;	bacpy(&addr.l2_bdaddr, dst);	addr.l2_psm = htobs(data_psm);	if (connect(data_sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {		perror("ERROR: Can't connect to device");		close(data_sk);		close(ctrl_sk);		return 1;	}	memset(&opts, 0, sizeof(opts));	size = sizeof(opts);	if (getsockopt(data_sk, SOL_L2CAP, L2CAP_OPTIONS, &opts, &size) < 0) {		perror("ERROR: Can't get socket options");		close(data_sk);		close(ctrl_sk);		return 1;	}	mtu = opts.omtu;	/* Ignore SIGTERM signals if printing from stdin */	if (fd == 0) {#ifdef HAVE_SIGSET		sigset(SIGTERM, SIG_IGN);#elif defined(HAVE_SIGACTION)		memset(&action, 0, sizeof(action));		sigemptyset(&action.sa_mask);		action.sa_handler = SIG_IGN;		sigaction(SIGTERM, &action, NULL);#else		signal(SIGTERM, SIG_IGN);#endif /* HAVE_SIGSET */	}	tid = hcrp_get_next_tid(tid);	if (hcrp_credit_grant(ctrl_sk, tid, 0) < 0) {		fprintf(stderr, "ERROR: Can't grant initial credits\n");		close(data_sk);		close(ctrl_sk);		return 1;	}	for (i = 0; i < copies; i++) {		if (fd != 0) {			fprintf(stderr, "PAGE: 1 1\n");			lseek(fd, 0, SEEK_SET);		}		while (1) {			if (credit < mtu) {				tid = hcrp_get_next_tid(tid);				if (!hcrp_credit_request(ctrl_sk, tid, &tmp)) {					credit += tmp;					timeout = 0;				}			}			if (!credit) {				if (timeout++ > 300) {					tid = hcrp_get_next_tid(tid);					if (!hcrp_get_lpt_status(ctrl_sk, tid, &status))						fprintf(stderr, "ERROR: LPT status 0x%02x\n", status);					break;				}				sleep(1);				continue;			}			count = read(fd, buf, (credit > mtu) ? mtu : credit);			if (count <= 0)				break;			len = write(data_sk, buf, count);			if (len != count)				fprintf(stderr, "ERROR: Can't send complete data\n");			credit -= len;		}	}	close(data_sk);	close(ctrl_sk);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码精品一二三四区日韩在线| 精品国产亚洲在线| 色诱视频网站一区| 91成人网在线| 日韩欧美国产系列| 在线免费观看日本欧美| 欧美日韩在线三区| 欧美日韩国产精选| 91成人网在线| 欧美电视剧在线看免费| 日本一区二区三区视频视频| 国产精品盗摄一区二区三区| 亚洲免费在线观看视频| 午夜视频一区二区| 国产一区二区精品久久91| 91在线国产观看| 日韩欧美激情一区| 午夜影视日本亚洲欧洲精品| 成人性生交大片免费| 日韩视频免费直播| 亚洲一区二区3| 成人黄色av电影| 26uuu国产电影一区二区| 亚洲国产成人tv| 丁香桃色午夜亚洲一区二区三区| 欧美日韩中文国产| 亚洲免费av观看| 不卡av电影在线播放| 久久久久亚洲蜜桃| 极品美女销魂一区二区三区| 欧美日韩精品免费观看视频| 国产精品电影一区二区| 国产二区国产一区在线观看| 欧美视频精品在线观看| |精品福利一区二区三区| 东方欧美亚洲色图在线| 日本一区二区免费在线| 国产一区二区不卡老阿姨| 欧美一二三区在线观看| 亚洲国产精品综合小说图片区| 菠萝蜜视频在线观看一区| 国产精品久久久久久久午夜片| 国产在线不卡一卡二卡三卡四卡| 欧美成人伊人久久综合网| 波多野结衣中文字幕一区 | 欧美日韩黄色影视| 亚洲国产精品一区二区久久 | 精品免费日韩av| 国产一区91精品张津瑜| 国产精品网友自拍| 不卡av在线免费观看| 亚洲另类一区二区| 欧美日韩国产首页| 久久99精品久久久久久动态图| 欧美xxx久久| 99热99精品| 免费一级欧美片在线观看| 2017欧美狠狠色| 色成人在线视频| 狠狠色丁香久久婷婷综合_中| 中文字幕欧美国产| 欧美色大人视频| 青青草97国产精品免费观看| 中文字幕国产一区| 在线观看成人免费视频| 国产真实精品久久二三区| 国产精品三级久久久久三级| 国产91精品免费| 亚洲一区在线免费观看| 日韩一区二区免费高清| 国产成人亚洲综合a∨婷婷图片| 亚洲综合色自拍一区| 91精品办公室少妇高潮对白| 成人免费在线播放视频| 在线观看www91| 狠狠网亚洲精品| 亚洲一区二区三区三| 国产精品日产欧美久久久久| 欧美在线高清视频| 9i在线看片成人免费| 日韩精品乱码av一区二区| 国产精品乱子久久久久| 欧美一区二区视频在线观看2020| 99精品偷自拍| 免费成人在线观看视频| 亚洲午夜精品在线| 亚洲欧洲av色图| 国产日本一区二区| 日韩一区二区三区在线视频| 欧美视频你懂的| 91在线云播放| 成人h动漫精品一区二| 狠狠色狠狠色综合| 老司机精品视频导航| 琪琪久久久久日韩精品| 樱花影视一区二区| 国产精品毛片a∨一区二区三区| 日韩精品中午字幕| 91精品视频网| 欧美一区二区三区视频| 色综合色狠狠天天综合色| 成人av手机在线观看| 国产v综合v亚洲欧| 国产精品夜夜爽| 激情五月婷婷综合| 高清不卡一二三区| av福利精品导航| av成人老司机| 色婷婷精品久久二区二区蜜臀av| 99re这里只有精品首页| 欧美日韩美女一区二区| 久久久久久久免费视频了| 日韩欧美国产高清| 国产日韩欧美a| 亚洲欧美乱综合| 五月天一区二区| 一区二区国产视频| 美女视频黄免费的久久| 国内精品写真在线观看| 成年人国产精品| 欧美日韩免费一区二区三区 | 成人爱爱电影网址| 日本久久电影网| 日韩精品一区二区三区在线观看| 久久久久国产精品麻豆ai换脸 | 亚洲品质自拍视频| 蜜桃av噜噜一区| 色悠悠亚洲一区二区| 666欧美在线视频| 国产精品欧美精品| 亚洲欧美日韩在线| 日韩av中文在线观看| 26uuu国产电影一区二区| 一区二区三区精品| 加勒比av一区二区| 成人国产精品视频| 欧美亚一区二区| 久久亚洲免费视频| 亚洲午夜私人影院| 99久久精品久久久久久清纯| 日韩女同互慰一区二区| 亚洲一区欧美一区| 欧美一区二区高清| 亚洲欧美二区三区| www.成人网.com| 久久久精品免费网站| 日韩高清电影一区| 欧美性淫爽ww久久久久无| 国产三级欧美三级日产三级99| 国模套图日韩精品一区二区| 欧美午夜视频网站| 一区二区三区成人在线视频| 国产伦精品一区二区三区免费 | 午夜视黄欧洲亚洲| 成熟亚洲日本毛茸茸凸凹| 久久精品视频网| 激情五月播播久久久精品| 欧美xxxxx裸体时装秀| 免费三级欧美电影| 欧美电视剧在线观看完整版| 奇米色一区二区| 日韩一本二本av| 韩国成人精品a∨在线观看| 欧美精选一区二区| 日韩专区欧美专区| 欧美一级欧美三级| 国产成人精品午夜视频免费| 国产精品成人在线观看| 99久久精品国产麻豆演员表| 亚洲人成伊人成综合网小说| 日本韩国欧美三级| 肉肉av福利一精品导航| 精品国产凹凸成av人网站| 久久国产麻豆精品| 欧美一级高清大全免费观看| 国产精品综合网| 亚洲日本一区二区| 欧美色老头old∨ideo| 另类小说色综合网站| 亚洲欧洲日产国码二区| 91丨国产丨九色丨pron| 婷婷成人激情在线网| 久久久精品2019中文字幕之3| 不卡视频在线观看| 亚洲妇女屁股眼交7| 欧美一区二区三区视频在线| 国产一本一道久久香蕉| 亚洲欧美激情视频在线观看一区二区三区| 91国在线观看| 高清久久久久久| 香蕉av福利精品导航| 欧美激情一区二区在线| 欧美日韩国产片| 91在线精品一区二区三区| 奇米一区二区三区av| 美腿丝袜亚洲色图| 亚洲精品自拍动漫在线| 欧美国产综合一区二区| 久久综合色之久久综合| 91精品国产一区二区三区蜜臀|