⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btclient.cxx

📁 Windows CE操作系统中适用的蓝牙驱动程序
💻 CXX
📖 第 1 页 / 共 4 页
字号:
				continue;
			}

			unsigned char key[16];
			memset (key, 0, sizeof(key));
			int iError = BthGetLinkKey (&ba, key);
			wprintf (L"BthGetLinkKey returns 0x%08x %d\n", iError, iError);
			if (iError == ERROR_SUCCESS) {
				for (int i = 0 ; i < 16 ; ++i)
					wprintf (L"%02x ", key[i]);
				wprintf (L"\n");
			}
			continue;
		} else if (wcsnicmp (szBuffer, L"auth ", 5) == 0) {
			WCHAR *p = szBuffer + 5;
			BT_ADDR ba;
			if (! GetBA(&p, &ba)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}
			int iError = BthAuthenticate (&ba);
			wprintf (L"BthAuthenticate returns 0x%08x %d\n", iError, iError);
			continue;
		} else if (wcsnicmp (szBuffer, L"encrypt ", 8) == 0) {
			WCHAR *p = szBuffer + 8;
			BT_ADDR ba;
			if (! GetBA(&p, &ba)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}
			while ((*p != '\0') && iswspace (*p))
				++p;

			int fOn;
			if (wcsicmp (p, L"on") == 0)
				fOn = 1;
			else if (wcsicmp (p, L"off") == 0)
				fOn = 0;
			else {
				wprintf (L"Syntax: on/off\n");
				continue;
			}

			int iError = BthSetEncryption (&ba, fOn);
			wprintf (L"BthSetEncryption returns 0x%08x %d\n", iError, iError);
			continue;
		} else if (wcsnicmp (szBuffer, L"revpin ", 7) == 0) {
			WCHAR *p = szBuffer + 7;
			BT_ADDR ba;
			if (! GetBA(&p, &ba)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}
			int iError = BthRevokePIN (&ba);
			wprintf (L"BthRevokePIN returns 0x%08x %d\n", iError, iError);
			continue;
		} else if (wcsnicmp (szBuffer, L"revlink ", 8) == 0) {
			WCHAR *p = szBuffer + 8;
			BT_ADDR ba;
			if (! GetBA(&p, &ba)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}
			int iError = BthRevokeLinkKey (&ba);
			wprintf (L"BthRevokeLinkKey returns 0x%08x %d\n", iError, iError);
			continue;
		} else if (wcsnicmp (szBuffer, L"readbd", 6) == 0) {
			BT_ADDR b;
			int iError = BthReadLocalAddr (&b);
			wprintf (L"BthReadLocalAddr returns 0x%08x %d, address = %04x%08x\n", iError, iError, GET_NAP(b), GET_SAP(b));
			continue;
		} else if (wcsnicmp (szBuffer, L"readhw", 6) == 0) {
			int istat = -1;
			int iError = BthGetHardwareStatus (&istat);
			wprintf (L"BthGetHardwareStatus returns 0x%08x %d\n", iError, iError);
			if (iError == ERROR_SUCCESS) {
				switch (istat) {
				case HCI_HARDWARE_UNKNOWN:
					wprintf (L"HCI_HARDWARE_UNKNOWN\n");
					break;
				case HCI_HARDWARE_NOT_PRESENT:
					wprintf (L"HCI_HARDWARE_NOT_PRESENT\n");
					break;
				case HCI_HARDWARE_INITIALIZING:
					wprintf (L"HCI_HARDWARE_INITIALIZING\n");
					break;
				case HCI_HARDWARE_RUNNING:
					wprintf (L"HCI_HARDWARE_RUNNING\n");
					break;
				case HCI_HARDWARE_SHUTDOWN:
					wprintf (L"HCI_HARDWARE_SHUTDOWN\n");
					break;
				case HCI_HARDWARE_ERROR:
					wprintf (L"HCI_HARDWARE_ERROR\n");
					break;
				default:
					wprintf (L"UNDEFINED RETURN VALUE!\n");
					break;
				}
			}
			continue;
		} else if (wcsnicmp (szBuffer, L"name ", 5) == 0) {
			WCHAR *p = szBuffer + 5;
			BT_ADDR b;
			if (! GetBA(&p, &b)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}

			unsigned int cReq = 0;
			int iError = BthRemoteNameQuery (&b, 512, &cReq, szBuffer);
			wprintf (L"BthRemoteNameQuery returns 0x%08x %d\n", iError, iError);
			if (iError == ERROR_SUCCESS)
				wprintf (L"Name: %s\n", szBuffer);
			continue;
		} else if (wcsnicmp (szBuffer, L"inquiry ", 8) == 0) {
			WCHAR *p = szBuffer + 8;
			unsigned int LAP;
			if (! GetUI(&p, &LAP)) {
				wprintf (L"Syntax: LAP\n");
				continue;
			}

			if (LAP == 0x0)
				LAP = 0x9e8b33;	// GIAC_LAP

			unsigned char length;
			if (! GetUC(&p, &length)) {
				wprintf (L"Syntax: length\n");
				continue;
			}

			unsigned char numresp;
			if (! GetUC(&p, &numresp)) {
				wprintf (L"Syntax: numresp\n");
				continue;
			}

			BthInquiryResult ir[256];
			unsigned int cGot = 0;
			int iError = BthPerformInquiry (LAP, length, numresp, 256, &cGot, ir);
			wprintf (L"BthPerformInquiry returns 0x%08x %d\n", iError, iError);
			if (iError == ERROR_SUCCESS) {
				for (int i = 0 ; i < (int)cGot ; ++i)
					wprintf (L"%04x%08x cod = 0x%08x clock = 0x%04x page = %d period = %d repetition = %d\n", GET_NAP(ir[i].ba), GET_SAP(ir[i].ba), ir[i].cod, ir[i].clock_offset, ir[i].page_scan_mode, ir[i].page_scan_period_mode, ir[i].page_scan_repetition_mode);
			}
			continue;
		} else if (wcsnicmp (szBuffer, L"connect ", 8) == 0) {
			WCHAR *p = szBuffer + 8;

			BT_ADDR b;
			if (! GetBA(&p, &b)) {
				wprintf (L"Syntax: bt_addr\n");
				continue;
			}

			unsigned short psm;
			if (! GetUS(&p, &psm)) {
				wprintf (L"Syntax: psm\n");
				continue;
			}

			unsigned short mtu;
			if (! GetUS(&p, &mtu)) {
				wprintf (L"Syntax: mtu\n");
				continue;
			}

			wprintf (L"Attempting to connect to BT_ADDR %04x%08x psm = 0x%04x\n", GET_NAP(b), GET_SAP(b), psm);

			unsigned short cid, outmtu;
			int iErr = L2CAPConnect (&b, psm, mtu, &cid, &outmtu);

			wprintf (L"L2CAPConnect returns 0x%08x (%d)\n", iErr, iErr);

			if (iErr == ERROR_SUCCESS)
				CloseHandle (CreateThread (NULL, 0, ReadThread, (void *)cid, 0, NULL));

			continue;
		} else if (wcsnicmp (szBuffer, L"unaccept ", 9) == 0) {
			WCHAR *p = szBuffer + 9;

			unsigned short psm;
			if (! GetUS (&p, &psm)) {
				wprintf (L"Syntax: psm\n");
				continue;
			}

			int iErr = L2CAPClosePSM (psm);

			wprintf (L"L2CAPClosePSM returns 0x%08x (%d)\n", iErr, iErr);
			continue;
		} else if (wcsnicmp (szBuffer, L"accept ", 7) == 0) {
			WCHAR *p = szBuffer + 7;
			unsigned short psm;
			if (! GetUS (&p, &psm)) {
				wprintf (L"Syntax: psm\n");
				continue;
			}

			unsigned short mtu;
			if (! GetUS (&p, &mtu)) {
				wprintf (L"Syntax: mtu\n");
				continue;
			}

			int iErr = L2CAPListen (psm, mtu);

			wprintf (L"L2CAPAccept returns 0x%08x (%d)\n", iErr, iErr);

			if (iErr == ERROR_SUCCESS)
				CloseHandle (CreateThread (NULL, 0, ListenThread, (LPVOID)psm, 0, NULL));

			continue;
		} else if (wcsnicmp (szBuffer, L"uptest", 6) == 0) {
			WCHAR *p = szBuffer + 6;

			int c = 0;
			if (*p == '1')
				c = 10;
			else if (*p == '2')
				c = 350;
			else if (*p == '3')
				c = 672;

			if (! c) {
				wprintf (L"Syntax: number\n");
				continue;
			}

			p += 1;
			if (*p != ' ') {
				wprintf (L"Syntax!\n");
				continue;
			}
			p += 1;

			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			unsigned char testdata[672];
			for (int i = 0 ; i < 672 ; ++i)
				testdata[i] = i & 0xff;

			int iErr = L2CAPWrite (cid, c, testdata);
			wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
			continue;
		} else if (wcsnicmp (szBuffer, L"write ", 6) == 0) {
			WCHAR *p = szBuffer + 6;

			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			int iErr = L2CAPWrite (cid, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p);
			wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
			continue;
		} else if (wcsnicmp (szBuffer, L"ping ", 5) == 0) {
			WCHAR *p = szBuffer + 5;

			BT_ADDR bt;
			if (! GetBA(&p, &bt)) {
				wprintf (L"Syntax: BT_ADDR\n");
				continue;
			}

			unsigned char bigbuffer[1024];
			unsigned int size = sizeof(bigbuffer);

			int iErr = L2CAPPing (&bt, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p, &size, bigbuffer);
			wprintf (L"L2CAPPing returns 0x%08x (%d)\n", iErr, iErr);
			if ((iErr == ERROR_SUCCESS) && size)
				DumpBuff (L"Ping data>", bigbuffer, size);

			continue;
		} else if (wcsnicmp (szBuffer, L"writeansi ", 10) == 0) {
			WCHAR *p = szBuffer + 10;

			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			char buffer[128];
			int ichars;
			if (ichars = WideCharToMultiByte (CP_ACP, 0, p, -1, buffer, sizeof(buffer), NULL, NULL)) {
				int iErr = L2CAPWrite (cid, ichars, (unsigned char *)buffer);
				wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
			}

			continue;
		} else if (wcsnicmp (szBuffer, L"send ", 5) == 0) {
			WCHAR *p = szBuffer + 5;

			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			unsigned short mtu;
			if ((! GetUS(&p, &mtu)) || (mtu > 0xffff - 16)) {
				wprintf (L"Syntax: mtu\n");
				continue;
			}

			while (*p && iswspace (*p))
				++p;

			FILE *fp;
			if ((! *p) || (! (fp = _wfopen (p, L"rb")))) {
				wprintf (L"Syntax: file name\n");
				continue;
			}

			wprintf (L"Sending file %s\n", p);

			unsigned char *buffer = (unsigned char *)malloc (0xffff);
			int count = 0;
			int c = (wcslen (p) + 1) * sizeof(WCHAR);
			memcpy (buffer + 16, p, c);
			*(int *)buffer = 'NAME';

			int iErr;

			do {
				*(int *)(buffer + 4)  = c > 0 ? MakeFCS (c, buffer + 16) : 0;
				*(int *)(buffer + 8)  = c;
				*(int *)(buffer + 12) = count++;

				iErr = L2CAPWrite (cid, c + 16, buffer);
				if (c == 0)
					break;

				wprintf (L".");

				c = fread (buffer + 16, 1, mtu, fp);

				if (c > 0)
					*(int *)buffer = 'DATA';
				else {
					*(int *)buffer = 'DONE';
					c = 0;
				}
			} while (iErr == ERROR_SUCCESS);
			free (buffer);
			wprintf (L"\nL2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
			continue;
		} else if (wcsnicmp (szBuffer, L"rep ", 4) == 0) {
			WCHAR *p = szBuffer + 4;

			unsigned int n;
			if (! GetDI(&p, &n)) {
				wprintf (L"Syntax: n\n");
				continue;
			}

			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			for (int i = 0 ; i < (int)n ; ++i) {
				int iErr = L2CAPWrite (cid, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p);
				wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
			}
			continue;
		} else if (wcsnicmp (szBuffer, L"disconnect ", 11) == 0) {
			WCHAR *p = szBuffer + 11;
			unsigned short cid;
			if (! GetUS(&p, &cid)) {
				wprintf (L"Syntax: cid\n");
				continue;
			}

			int iErr = L2CAPCloseCID (cid);
			wprintf (L"L2CAPCloseCID returns 0x%08x (%d)\n", iErr, iErr);
			continue;
		} else if (wcsnicmp (szBuffer, L"rfcomm ", 7) == 0) {
			ProcessRFCOMMCommand (szBuffer + 7);
			continue;
		} else if (wcsnicmp (szBuffer, L"open ", 5) == 0) {
			WCHAR *p = szBuffer + 5;
		} else if (wcsnicmp(szBuffer, L"nsInquiry", 8) == 0) {
			WCHAR *p = szBuffer + 10;
			TestSdpInquiry(p);
			continue;
		} else if (wcsnicmp(szBuffer, L"sdpAddRecord ",13) == 0) {
			WCHAR *p = szBuffer + 13;
			TestSdpAddRecord(p);
			continue;
		} else if (wcsnicmp(szBuffer, L"sdpDelRecord ",13) == 0) {
			WCHAR *p = szBuffer + 13;
			TestSdpDelRecord(p);
			continue;
		} else if (wcsnicmp(szBuffer, L"sdpServiceSearch ",17) == 0) {
			WCHAR *p = szBuffer + 17;
			TestSdpServiceSearch(p);
			continue;
		} else if (wcsnicmp(szBuffer, L"sdpAttribSearch ",16) == 0) {
			WCHAR *p = szBuffer + 16;
			TestSdpAttribSearch(p);
			continue;
		} else if (wcsnicmp(szBuffer, L"sdpServAttribSearch ",20) == 0) {
			WCHAR *p = szBuffer + 20;
			TestSdpServAttribSearch(p);
			continue;
		}
		wprintf (L"Unknown command\n");
		continue;
	}

	return 0;
}

#if defined (SDK_BUILD)
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR lpCmdLine, int nShowCmd) {
	WCHAR *argv[2];
	argv[0] = L"btloader";
	argv[1] = NULL;

	return wmain (1, argv);
}

extern "C" int _stricmp (const char *s1, const char *s2) {
	while (*s1 && (toupper(*s1) == toupper(*s2))) {
		++s1; ++s2;
	}

	return *s1 - *s2;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -