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

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

?? fctest.cxx

?? 這些文件包括藍牙虛擬串口與打印機程序實例
?? CXX
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/**
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.


Abstract:
	Windows CE Bluetooth application sample

**/
#include <windows.h>
#include <winsock.h>
#include <ws2bth.h>
#include <bt_api.h>

#include <winioctl.h>
#include <console.h>

#define BUF_MAX 256

int GetDI (WCHAR **pp, unsigned int *pi) {
	while (**pp == ' ')
		++*pp;

	int iDig = 0;
	*pi = 0;
	while (iswdigit (**pp)) {
		int c = **pp;

		c = c - '0';

		if ((c < 0) || (c > 9))
			return FALSE;

		*pi = *pi * 10 + c;

		++*pp;

		++iDig;
	}

	if ((iDig <= 0) || (iDig > 10))
		return FALSE;

	return TRUE;
}

int GetBA (WCHAR **pp, BT_ADDR *pba) {
	while (**pp == ' ')
		++*pp;

	for (int i = 0 ; i < 4 ; ++i, ++*pp) {
		if (! iswxdigit (**pp))
			return FALSE;

		int c = **pp;
		if (c >= 'a')
			c = c - 'a' + 0xa;
		else if (c >= 'A')
			c = c - 'A' + 0xa;
		else c = c - '0';

		if ((c < 0) || (c > 16))
			return FALSE;

		*pba = *pba * 16 + c;
	}

	for (i = 0 ; i < 8 ; ++i, ++*pp) {
		if (! iswxdigit (**pp))
			return FALSE;

		int c = **pp;
		if (c >= 'a')
			c = c - 'a' + 0xa;
		else if (c >= 'A')
			c = c - 'A' + 0xa;
		else c = c - '0';

		if ((c < 0) || (c > 16))
			return FALSE;

		*pba = *pba * 16 + c;
	}

	if ((**pp != ' ') && (**pp != '\0'))
		return FALSE;

	return TRUE;
}

int GetUx (WCHAR **pp, void *pRes, int nDigs) {
	while (**pp == ' ')
		++*pp;
	if (**pp != '0')
		return FALSE;
	++*pp;
	if (**pp != 'x')
		return FALSE;

	++*pp;

	int iDig = 0;
	int iRes = 0;
	while (iswxdigit (**pp)) {
		int c = **pp;
		if (c >= 'a')
			c = c - 'a' + 0xa;
		else if (c >= 'A')
			c = c - 'A' + 0xa;
		else c = c - '0';

		if ((c < 0) || (c > 16))
			return FALSE;

		iRes = iRes * 16 + c;

		++*pp;

		++iDig;
	}

	if (iDig > nDigs)
		return FALSE;

	switch (nDigs) {
	case 2:
		*(unsigned char *)pRes = (unsigned char)iRes;
		break;
	case 4:
		*(unsigned short *)pRes = (unsigned short)iRes;
		break;
	case 8:
		*(unsigned int *)pRes = (unsigned int)iRes;
		break;
	}

	return TRUE;
}

#define BPR		8

void DumpBuff (WCHAR *szLineHeader, unsigned char *lpBuffer, unsigned int cBuffer) {
	WCHAR szLine[5 + 7 + 2 + 4 * BPR];

	for (int i = 0 ; i < (int)cBuffer ; i += BPR) {
		int bpr = cBuffer - i;
		if (bpr > BPR)
			bpr = BPR;

		wsprintf (szLine, L"%04x ", i);
		WCHAR *p = szLine + wcslen (szLine);

		for (int j = 0 ; j < bpr ; ++j) {
			WCHAR c = (lpBuffer[i + j] >> 4) & 0xf;
			if (c > 9) c += L'a' - 10; else c += L'0';
			*p++ = c;
			c = lpBuffer[i + j] & 0xf;
			if (c > 9) c += L'a' - 10; else c += L'0';
			*p++ = c;
			*p++ = L' ';
		}

		for ( ; j < BPR ; ++j) {
			*p++ = L' ';
			*p++ = L' ';
			*p++ = L' ';
		}

		*p++ = L' ';
		*p++ = L' ';
		*p++ = L' ';
		*p++ = L'|';
		*p++ = L' ';
		*p++ = L' ';
		*p++ = L' ';

		for (j = 0 ; j < bpr ; ++j) {
			WCHAR c = lpBuffer[i + j];
			if ((c < L' ') || (c >= 127))
				c = L'.';

			*p++ = c;
		}

		for ( ; j < BPR ; ++j) {
			*p++ = L' ';
		}

		*p++ = L'\n';
		*p++ = L'\0';

		wprintf (L"%s %s", szLineHeader ? szLineHeader : L"", szLine);
	}
}


static int gContinue = TRUE;

static int ControlCHandler(void) {
	gContinue = FALSE;

	return FALSE;
}

// server port COMx:
// client bd_addr port [COMx:]
int wmain (int argc, WCHAR **argv) {
	BT_ADDR	b;
	unsigned int channel = 0;
	WCHAR *arg2 = argv[2];
	WCHAR *arg3 = argv[3];
	WCHAR *arg4 = argv[4];

	USE_CONIOCTL_CALLS

	WSADATA wsd;
	if (WSAStartup (MAKEWORD(1,0), &wsd)) {
		wprintf (L"Initialization of socket subsystem failed! Error = %d\n", WSAGetLastError ());
		return 0;
	}

	if ((argc >= 4) && (argc <= 5) && (wcsicmp (argv[1], L"client") == 0) && GetBA(&arg2, &b) && GetDI(&arg3, &channel)) {
		if (argc == 5) {	// serial port?
			int index = 0;
			if (! GetDI(&arg4, (unsigned int *)&index)) {
				wprintf (L"Could not get index out of %s\n", arg4);
				return 1;
			}

			PORTEMUPortParams pp;
			memset (&pp, 0, sizeof(pp));

			pp.channel = channel & 0xff;
			pp.device = b;

			HANDLE h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);

			if (h == NULL) {
				wprintf (L"Failed RegisterDevice on COM%d:, Error = %d\n", index, GetLastError ());
				return 0;
			}

			wprintf (L"device handle = 0x%08x; connecting...\n", h);

			WCHAR szComPort[30];
			wsprintf (szComPort, L"COM%d:", index);
			HANDLE hCommPort = CreateFile (szComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
			if (hCommPort == INVALID_HANDLE_VALUE) {
				DeregisterDevice (h);//DeregisterDevice:卸載驅動程序。
				wprintf (L"Failed to open %s (connection failed?). Error = %d\n", szComPort, GetLastError ());
				return 0;
			}

			wprintf (L"Device connected; press ctrl-S to pause sending, or ctrl-C to stop.\n");

			CeSetControlCHandler(_fileno(stdout), ControlCHandler);

			int i = 0;
			while (gContinue) {
				WCHAR buffer[128];
				DWORD dwWrit = 0;
				wsprintf (buffer, L"Line %d, press ctrl-c to stop\n", ++i);
				if (! WriteFile (hCommPort, buffer, (wcslen(buffer) + 1) * sizeof(WCHAR), &dwWrit, NULL))
					break;

				if ((i % 32) == 0)
					wprintf (L"%d", i);
				wprintf (L".");
				if ((i % 32) == 31)
					wprintf (L"%d\n", i);
			}

			CeSetControlCHandler(_fileno(stdout), NULL);

			CloseHandle (hCommPort);
			DeregisterDevice (h);

			wprintf (L"Successfully completed\n");
			return 0;
		}

		SOCKET s = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);
		if (s == INVALID_SOCKET) {
			wprintf (L"socket failed, error %d\n", WSAGetLastError ());
			return 0;
		}

		SOCKADDR_BTH sa;
		memset (&sa, 0, sizeof(sa));

		sa.addressFamily = AF_BT;

		sa.btAddr = b;
		sa.port = channel & 0xff;

		wprintf (L"Connecting to %04x%08x 0x%02x\n", GET_NAP(b), GET_SAP(b), channel & 0xff);

		if (connect (s, (SOCKADDR *)&sa, sizeof(sa))) {
			closesocket (s);
			wprintf (L"Connect failed, error = %d\n", WSAGetLastError ());
			return 0;
		}


		wprintf (L"Device connected; press ctrl-S to pause sending, or ctrl-C to stop.\n");

		CeSetControlCHandler(_fileno(stdout), ControlCHandler);

		int i = 0;
		while (gContinue) {
			WCHAR buffer[128];
			DWORD dwWrit = 0;
			wsprintf (buffer, L"Line %d, press ctrl-c to stop\n", ++i);
			int cBytes = (wcslen(buffer) + 1) * sizeof(WCHAR);
			if (send (s, (char *)buffer, cBytes, 0) != cBytes)
				break;

			if ((i % 32) == 0)
				wprintf (L"%d", i);

			wprintf (L".");

			if ((i % 32) == 31)
				wprintf (L"%d\n", i);
		}

		CeSetControlCHandler(_fileno(stdout), NULL);

		closesocket (s);
		return 0;
	} else if ((argc >=3) && (argc <= 4) && (wcsicmp (argv[1], L"server") == 0) && GetDI (&arg2, &channel)) {
		if (argc == 4) {
			int index = 0;
			if (! GetDI(&arg3, (unsigned int *)&index)) {
				wprintf (L"Could not get index out of %s\n", arg3);
				return 1;
			}

			PORTEMUPortParams pp;
			memset (&pp, 0, sizeof(pp));

			pp.channel = channel & 0xff;
			pp.flocal  = TRUE;

			HANDLE h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);

			if (h == NULL) {
				wprintf (L"Failed RegisterDevice on COM%d:, Error = %d\n", index, GetLastError ());
				return 0;
			}

			wprintf (L"device handle = 0x%08x; opening...\n", h);

			WCHAR szComPort[30];
			wsprintf (szComPort, L"COM%d:", index);
			HANDLE hCommPort = CreateFile (szComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
			if (hCommPort == INVALID_HANDLE_VALUE) {
				DeregisterDevice (h);
				wprintf (L"Failed to open %s (connection failed?). Error = %d\n", szComPort, GetLastError ());
				return 0;
			}

			wprintf (L"waiting for call. Ctrl-C to interrupt\n");
			SetCommMask (hCommPort, EV_RLSD | EV_RXCHAR);

			CeSetControlCHandler(_fileno(stdout), ControlCHandler);

			DWORD dwEvt;
			while (gContinue) {
				if (! WaitCommEvent (hCommPort, &dwEvt, NULL)) {
					wprintf (L"Failure on port read, Error = %d\n", GetLastError ());
					gContinue = FALSE;
					break;
				}

				if (! (dwEvt & EV_RLSD))
					continue;

				DWORD dwModemFlags = 0;
				if (GetCommModemStatus (hCommPort, & dwModemFlags) && (dwModemFlags & MS_RLSD_ON))
					break;
			}

			if (gContinue)
				wprintf (L"Device connected; press ctrl-S to pause sending, or ctrl-C to stop.\n");

			while (gContinue) {
				WCHAR buffer[128];
				DWORD dwRead = 0;
				if (! ReadFile (hCommPort, buffer, sizeof(buffer), &dwRead, NULL))
					break;

				DumpBuff (L"server>", (unsigned char *)buffer, (unsigned int)dwRead);

				DWORD dwModemFlags = 0;
				if ((! GetCommModemStatus (hCommPort, & dwModemFlags)) || ((dwModemFlags & MS_RLSD_ON) == 0))
					break;
			}

			CeSetControlCHandler(_fileno(stdout), NULL);

			CloseHandle (hCommPort);
			DeregisterDevice (h);

			wprintf (L"Successfully completed\n");
			return 0;
		}

		SOCKET s = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);

		if (s == INVALID_SOCKET) {
			wprintf (L"socket failed, error %d\n", WSAGetLastError ());
			return 0;
		}

		SOCKADDR_BTH sa;
		memset (&sa, 0, sizeof(sa));

		sa.addressFamily = AF_BT;
		sa.port = channel & 0xff;

		wprintf (L"binding to 0x%02x\n", channel & 0xff);

		if (bind (s, (SOCKADDR *)&sa, sizeof(sa))) {
			wprintf (L"Bind failed, error = %d\n", WSAGetLastError ());
			return 0;
		}

		if (listen (s, 5)) {
			wprintf (L"Listen failed, error = %d\n", WSAGetLastError ());
			return 0;
		}

		SOCKADDR_BTH sa2;
		int size = sizeof(sa2);

		wprintf (L"Accepting...\n");

		SOCKET s2 = accept (s, (SOCKADDR *)&sa2, &size);
		closesocket (s);

		if (s2 == INVALID_SOCKET) {
			wprintf (L"Accept failed, error = %d\n", WSAGetLastError ());
			return 0;
		}

		CeSetControlCHandler(_fileno(stdout), ControlCHandler);

		while (gContinue) {
			WCHAR buffer[128];
			int iRead = 0;
			if ((iRead = recv (s2, (char *)buffer, sizeof(buffer), 0)) <= 0)
				break;

			DumpBuff (L"server>", (unsigned char *)buffer, (unsigned int)iRead);

		}

		CeSetControlCHandler(_fileno(stdout), NULL);
		closesocket (s2);
	} else {
		wprintf (L"Usage: %s {server | client <target bt_addr>} channel {index}\n", argv[0]);
		return 1;
	}

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产天堂| 国产亚洲欧美一级| 视频一区二区三区入口| 欧美激情在线一区二区| 精品日韩在线观看| 国产精品一级在线| 国产精品进线69影院| 国产精品视频一区二区三区不卡| 26uuu国产电影一区二区| 国产精品久久毛片av大全日韩| 亚洲色大成网站www久久九九| 欧美精品一区二区久久婷婷| 精品国一区二区三区| 中文字幕的久久| 欧美日韩卡一卡二| 国产成人午夜片在线观看高清观看 | 五月婷婷综合激情| 日韩美女视频在线| 欧美日韩精品福利| 色综合中文字幕国产 | 久久99精品国产.久久久久久| 喷水一区二区三区| 亚洲男人的天堂网| 亚洲国产激情av| 国产欧美一区二区在线观看| 亚洲人成精品久久久久久| 91精品欧美一区二区三区综合在 | 精品少妇一区二区三区视频免付费 | 日本欧美一区二区三区| 性做久久久久久久久| 国产福利一区二区三区在线视频| 国产成人av一区二区三区在线 | 欧美天堂一区二区三区| 国产精品久久夜| 国产欧美日韩麻豆91| 国产精品污www在线观看| 午夜av电影一区| 日日嗨av一区二区三区四区| 国产乱妇无码大片在线观看| 欧美久久免费观看| 日韩视频123| 国产日韩综合av| 亚洲欧美日韩国产综合在线| 成人午夜电影久久影院| 337p日本欧洲亚洲大胆精品| 亚洲国产精品一区二区www| 色哟哟亚洲精品| 在线观看免费一区| 欧美α欧美αv大片| 久久精品国产亚洲一区二区三区| 欧美夫妻性生活| 国产亚洲成av人在线观看导航| 亚洲国产精品天堂| 久久99精品国产91久久来源| 欧美精品一区二区不卡| 国产一区二区三区不卡在线观看| 色噜噜久久综合| 7777精品伊人久久久大香线蕉最新版| 欧美精品在线视频| 中文字幕av一区二区三区免费看| 一区二区三区高清| 老司机一区二区| 成人短视频下载 | 在线精品视频小说1| 久久久久久久久久久久久女国产乱| 亚洲视频在线一区二区| 免费一级欧美片在线观看| 欧美日韩午夜影院| 国产人成一区二区三区影院| 国产一区二区三区在线观看精品| 精品国产成人系列| 午夜精品福利一区二区三区蜜桃| 精品成人一区二区三区四区| 亚洲h在线观看| 色婷婷综合久久久中文字幕| 亚洲一区二区三区四区五区中文| 欧美在线免费观看亚洲| 国产精品久久久久久久蜜臀| 色综合夜色一区| 国产精品黄色在线观看| 亚洲综合在线视频| 日本成人在线看| 欧美一区二区在线观看| 三级欧美在线一区| 精品理论电影在线| 懂色av中文一区二区三区| 综合在线观看色| 日本亚洲天堂网| 欧美精品一区男女天堂| 欧美日本在线视频| 久久精品国产一区二区三区免费看| 国内精品伊人久久久久av一坑| 日韩国产高清影视| 欧美极品xxx| 欧美精品乱码久久久久久按摩| 在线欧美日韩国产| 国产乱码精品一品二品| 国产91丝袜在线观看| 色欧美乱欧美15图片| 在线免费观看日本欧美| 欧美日韩一区二区三区在线看 | 亚洲第一狼人社区| 国产欧美一区二区精品仙草咪| 国产精品久久久久久久久免费樱桃| 亚洲欧美日韩国产另类专区| 午夜精品久久久久久久99水蜜桃| 韩国女主播成人在线| 国产在线播放一区| 性做久久久久久久免费看| 偷窥少妇高潮呻吟av久久免费| 国产精品久久久久一区二区三区共| 久久久久久久综合日本| 亚洲视频一区在线观看| 亚洲成人福利片| 粉嫩13p一区二区三区| 国产精品1024| 一区二区三区四区乱视频| 国产精品美女久久久久久久久久久 | 韩国精品久久久| 五月综合激情婷婷六月色窝| 五月天激情综合网| 久久免费午夜影院| 日韩欧美不卡一区| 欧美性极品少妇| www.综合网.com| 国产91精品一区二区| 欧美日韩一区小说| 另类小说一区二区三区| 色综合一区二区三区| 精品欧美一区二区在线观看 | 三级欧美在线一区| 一区二区激情小说| 亚洲视频图片小说| 亚洲欧美日韩人成在线播放| 视频在线观看一区| 五月天一区二区三区| 高清国产一区二区| 国产精品一区二区三区99| 日韩va欧美va亚洲va久久| **欧美大码日韩| 亚洲欧美日本韩国| 午夜精品久久久久久不卡8050| 国产乱国产乱300精品| 欧美日韩大陆一区二区| 国产亚洲污的网站| 国产精品国产自产拍高清av| 欧美tk—视频vk| 欧美三区在线观看| 91在线视频免费观看| 国v精品久久久网| 色8久久精品久久久久久蜜| 国产精品一级二级三级| 久久久久久99久久久精品网站| 亚洲日韩欧美一区二区在线| 91美女视频网站| 日韩亚洲欧美在线观看| 亚洲黄网站在线观看| 在线观看视频一区二区| 免费视频一区二区| 亚洲精品美国一| 免费不卡在线观看| 欧美中文字幕一区二区三区 | 精品日韩在线观看| 亚洲成人av中文| 久久99这里只有精品| 91精品国产91热久久久做人人| 五月天激情综合网| 日韩国产一区二| 欧美一区二区三区在线看 | 亚洲激情自拍偷拍| 亚洲一区在线视频| 日韩有码一区二区三区| 精品免费国产二区三区| 九九精品视频在线看| 国产精品99久久久久久久vr| 中文字幕亚洲一区二区av在线| 国产成人免费视| 国产亚洲一本大道中文在线| 91麻豆精品国产综合久久久久久| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲国产sm捆绑调教视频| 欧美精品国产精品| 久久成人18免费观看| 奇米一区二区三区| 欧美性受极品xxxx喷水| 色成年激情久久综合| 午夜激情久久久| 日韩精品在线网站| 久久66热偷产精品| 国产日韩av一区二区| 久久精品欧美一区二区三区不卡| 欧美美女bb生活片| 另类小说图片综合网| 欧美视频一区二区三区| 色88888久久久久久影院按摩| 色老汉一区二区三区| 成人高清在线视频| 天天操天天干天天综合网| 麻豆国产精品777777在线| 亚洲男人电影天堂|