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

📄 btsearch.cpp

📁 在PDA上应用的EVC环境中蓝牙设备处理应用程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
	pwsaResults->dwSize = sizeof(WSAQUERYSET);
	pwsaResults->dwNameSpace = NS_BTH;
	pwsaResults->lpBlob = NULL;
	int iRet=WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults);
//	int btaddr=BthReadLocalAddr(pba);
	if (ERROR_SUCCESS == iRet)
	{
		ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);
		pba = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
		bHaveName = pwsaResults->lpszServiceInstanceName && *(pwsaResults->lpszServiceInstanceName);
//		wprintf (L"%s%s%04x%08x%s\n", bHaveName ? pwsaResults->lpszServiceInstanceName : L"", 
//		bHaveName ? L"(" : L"", GET_NAP(b), GET_SAP(b), bHaveName ? L")" : L"");
		unsigned short * N = pwsaResults->lpszServiceInstanceName;
		while(* N!=NULL)
		{
			BthName += * N;
			N++;
		}
//		addr = b;
	}
/*
	CoInitializeEx (0, COINIT_MULTITHREADED);
	int iResult = 0;
	BTHNS_RESTRICTIONBLOB RBlob;
	memset (&RBlob, 0, sizeof(RBlob));
	RBlob.type = SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST;
	RBlob.numRange = 1;
	RBlob.pRange[0].minAttribute = SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST;
	RBlob.pRange[0].maxAttribute = SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST;
	RBlob.uuids[0].uuidType = SDP_ST_UUID16;
	RBlob.uuids[0].u.uuid16 = SerialPortServiceClassID_UUID16;
	BLOB blob;
	blob.cbSize = sizeof(RBlob);
	blob.pBlobData = (BYTE *)&RBlob;

	memset (&sa, 0, sizeof(sa));
	sa.btAddr = pba;
//	*(BT_ADDR *)(&sa.btAddr) = pb;

	sa.addressFamily = AF_BT;
	CSADDR_INFO csai;
	memset (&csai, 0, sizeof(csai));
	csai.RemoteAddr.lpSockaddr = (sockaddr *)&sa;
	csai.RemoteAddr.iSockaddrLength = sizeof(sa);
	memset (&wsaq, 0, sizeof(wsaq));
	wsaq.dwSize      = sizeof(wsaq);
	wsaq.dwNameSpace = NS_BTH;
	wsaq.lpBlob      = &blob;
	wsaq.lpcsaBuffer = &csai;

	iRet = WSALookupServiceBegin (&wsaq, 0, &hLookup);
	if (ERROR_SUCCESS == iRet) 
	{
		CHAR buf[5000];
		LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
		DWORD dwSize  = sizeof(buf);
		memset(pwsaResults,0,sizeof(WSAQUERYSET));
		pwsaResults->dwSize      = sizeof(WSAQUERYSET);
		pwsaResults->dwNameSpace = NS_BTH;
		pwsaResults->lpBlob      = NULL;
		iRet = WSALookupServiceNext (hLookup, 0, &dwSize, pwsaResults);
		if (iRet == ERROR_SUCCESS) // Success - got the stream
		{
		//Parse the SDP result set by using the FindRFCOMMChannel function.
//			if (ERROR_SUCCESS == FindRFCOMMChannel (pwsaResults->lpBlob->pBlobData, pwsaResults->lpBlob->cbSize, &cChannel))
				iResult = 0;
		}
		WSALookupServiceEnd(hLookup);
	}
	CoUninitialize ();



*/


	WSALookupServiceEnd(hLookup);

		//Configure the PORTEMUPortParams structure to specify 
	    //attributes for the virtual COM port
	PORTEMUPortParams pp;
	memset (&pp, 0, sizeof(pp));
//	pp.flocal = TRUE;
	pp.flocal = FALSE;
	pp.channel = RFCOMM_CHANNAL_MULTIPLE;

	pp.device = pba;

	pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB;
//	pp.uiportflags = 0;

	//Register the device by calling the RegisterDevice function
//	HANDLE h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);
	
	//Create a null-terminated string to store the name of the COM port

	WCHAR szComPort[30];
	wsprintf (szComPort, L"COM%d:", index);

	//Open the COM port by calling the CreateFile function

	HANDLE hCommPort = CreateFile (szComPort, GENERIC_READ | GENERIC_WRITE,
                               0, NULL, OPEN_EXISTING, 0, NULL);
	
	int ierr2 = WSAGetLastError();


	if (!DeviceIoControl (hCommPort, IOCTL_BLUETOOTH_GET_RFCOMM_CHANNEL, NULL, 0, &port, sizeof(port), &dwSizeOut, NULL)) 
	{
		// Perform error handling
	}

/*	SOCKET client_socket = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);

	memset (&sa, 0, sizeof(sa));
	sa.addressFamily = AF_BTH;
	sa.btAddr = pba; //b is a BT_ADDR variable
	sa.port = 0xfe;
	if (connect (client_socket, (SOCKADDR *)&sa, sizeof(sa))) 
	{
		//Perform error handling.
		closesocket (client_socket);
		//return 0;
	}
*/
	ierr2 = WSAGetLastError();
	
//	while(1)
	while(ch==NULL) 
	{				
		rc=ReadFile(hCommPort,&ch,1,&cBytes,NULL);
	//	SendMessage(GetDlgItem(hDlg, IDC_DEVLIST), 
	//			LB_ADDSTRING, 
	//			0, 
	//			(LPARAM) ch);		
		ch='R';
		rc=WriteFile(hCommPort,&ch,1,&cBytes,NULL);
	}
	CloseHandle (hCommPort);

//	DeregisterDevice (h);

//	closesocket(client_socket);
//	CloseHandle ((LPVOID)client_socket);

	WSACleanup ();

//	return TRUE;


}
/*****************************************



  
******************************************/
void BthVCom(HWND hDlg)
{
	int channel=0;
	int rc;
	DWORD cBytes;
	BYTE ch;
	
	DWORD port = 0;
	DWORD dwSizeOut = 0;

	DWORD index=4;

		//Configure the PORTEMUPortParams structure to specify 
	    //attributes for the virtual COM port
	PORTEMUPortParams pp;
	memset (&pp, 0, sizeof(pp));

	pp.flocal = TRUE;
//	pp.flocal = FALSE;

//	pp.channel = RFCOMM_CHANNAL_MULTIPLE;
	pp.channel = 1;
	pp.device = 0x00802500430D;

	pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB;

	//Register the device by calling the RegisterDevice function
	HANDLE h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);
	
	//Create a null-terminated string to store the name of the COM port

	WCHAR szComPort[30];
	wsprintf (szComPort, L"COM%d:", index);

	//Open the COM port by calling the CreateFile function

	HANDLE hCommPort = CreateFile (szComPort, GENERIC_READ | GENERIC_WRITE,
                               0, NULL, OPEN_EXISTING, 0, NULL);
	
	int ierr2 = WSAGetLastError();

//	if (!DeviceIoControl (hCommPort, IOCTL_BLUETOOTH_GET_RFCOMM_CHANNEL, NULL, 0, &port, sizeof(port), &dwSizeOut, NULL)) 
//	{
		// Perform error handling
//	}

//	while(1) 
//	{
		rc=ReadFile(hCommPort,&ch,1,&cBytes,NULL);
		if(ch!=NULL)
		{
			ierr2=0;
		}
		SendMessage(GetDlgItem(hDlg, IDC_DEVLIST), 
				LB_ADDSTRING, 
				0, 
				(LPARAM) (ch));
//	}
	ch=TEXT('c');
	rc=WriteFile(hCommPort,&ch,1,&cBytes,NULL);

	CloseHandle (hCommPort);

//	DeregisterDevice (h);
}
/******************************************************

*******************************************************/
void BthConn(HWND hDlg)
{
	INT				iResult = 0;
	INT				channel = 0;
	int				A_MODE  = 0; 
//	LPWSAQUERYSET	pwsaResults;
	DWORD			dwSize = 0;
	SOCKADDR_BTH	wsaq;
//	SOCKADDR_BTH	wsaq2;
	SOCKADDR_BTH	sab;
///	HCURSOR			hCurs;
	HANDLE			hLookup = 0;
	
	DWORD			pdwMode=0;
	unsigned __int64  addr = 0;
//	SOCKET			server_socket;
	SOCKET			client_socket;
	
	WSADATA  wsaData;  
    int  iRet=WSAStartup(MAKEWORD(2,2),&wsaData);  
    if(iRet!=NO_ERROR)  
    {
            printf("Error  at  WSAStartup()\n");  
    }

	// empty the list box
	SendMessage(GetDlgItem(hDlg, IDC_DEVLIST),
		LB_RESETCONTENT,
		0,
		0);
	
	SendMessage(GetDlgItem(hDlg, IDC_DEVLIST),
		LB_ADDSTRING,
		0,
		(LPARAM) _T(" Setting......!!")); 
	
//	server_socket = socket(AF_BTH,SOCK_STREAM,BTHPROTO_RFCOMM);
	client_socket = socket(AF_BTH,SOCK_STREAM,BTHPROTO_RFCOMM);
	int ierr = WSAGetLastError();

	memset (&wsaq, 0, sizeof(wsaq));
	wsaq.addressFamily = AF_BTH;
	wsaq.port = channel&0xff;
	wsaq.btAddr=0x222222222222;
	
	if(connect(client_socket,(SOCKADDR *)&wsaq,sizeof(wsaq)))
	{
		//...Perform error handling
		closesocket(client_socket);
//		return 0;
	}

	int ierr2 = WSAGetLastError();
/*
	if(bind(server_socket,(SOCKADDR *)&wsaq,sizeof(wsaq)))
	{
		//...Perform error handling
		closesocket(server_socket);
//		return 0;
	}

	if(listen(server_socket, 5))
	{
		//...Perform error handling
		closesocket(server_socket);
	//	return 0;
	}

//	A_MODE = BthGetMode(&pdwMode);
	
//	A_MODE = BthSetMode(BTH_CONNECTABLE);

	int ierr2 = WSAGetLastError();

//	A_MODE = BthGetMode(&pdwMode);

	int len = sizeof(wsaq);

	if (0 == getsockname (server_socket, (SOCKADDR *)&wsaq, &len)) 
	{
		wprintf (L"Local Bluetooth device is %04x%08x, server channel = %d\n",
		GET_NAP(sab.btAddr), GET_SAP(sab.btAddr), sab.port);
		addr=sab.btAddr;
	}

	int size = sizeof(wsaq);	

	int ierr1 = WSAGetLastError();

	SOCKADDR_BTH sa2;

	size = sizeof(sa2);
	
 	SOCKET s2 = accept (server_socket,(SOCKADDR *)&sa2, &size);

	int ierr3 = WSAGetLastError();

	SOCKET s1 = connect(server_socket,(SOCKADDR *)&wsaq, size);

	closesocket(server_socket);*/
	closesocket(client_socket);
	CloseHandle((LPVOID)client_socket);

	WSACleanup ();
	// restore cursor
//	SetCursor(hCurs);  
}

⌨️ 快捷键说明

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