📄 btsearch.cpp
字号:
}
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 + -