📄 bluesoleilclient.cpp
字号:
DWORD dwResult = BT_EnumConnections(&dwSize,connInfo);
PrintError("BT_EnumConnections",dwResult);
for(DWORD i = 0; i < (dwSize/sizeof(GENERAL_CONNECT_INFO)); i++){
printf("Connection #%d\n handle=%d\n bIsOut=%d\n class id=%x\n bd=%02X:%02X:%02X:%02X:%02X:%02X\n\n",
i,connInfo[i].dwHandle,connInfo[i].bIsOutgoing,connInfo[i].wServiceClasss,
connInfo[i].remoteBdAddr[5],
connInfo[i].remoteBdAddr[4],
connInfo[i].remoteBdAddr[3],
connInfo[i].remoteBdAddr[2],
connInfo[i].remoteBdAddr[1],
connInfo[i].remoteBdAddr[0]);
}
}
HANDLE g_hRecvdIPAddress = NULL;
UCHAR g_auLastIP[4];
void SDK_PanInd(DWORD dwHandle, DWORD dwEventIndex, UCHAR* pData)
{
printf("SDK_PanInd:\n");
printf("\tdwHandle=%d\n");
switch(dwEventIndex){
case PAN_EV_IP_CHANGE:
printf("\tIP changed:%d.%d.%d.%d\n",pData[0],pData[1],pData[2],pData[3]);
WriteLog("IP changed:%d.%d.%d.%d",pData[0],pData[1],pData[2],pData[3]);
if(g_hRecvdIPAddress){
memcpy(g_auLastIP,pData,4);
if(*((DWORD*)pData) == 0){
ResetEvent(g_hRecvdIPAddress);
}else{
SetEvent(g_hRecvdIPAddress);
}
}
break;
default:
printf("\tUnkown event=%d\n", dwEventIndex);
}
}
DWORD SDK_AuthorizeInd(/*in*/BYTE* lpBdAddr,/*in*/WORD wServiceClass,/*in*/CHAR* lpServiceName, /*out*/BOOL* bAuthorized)
{
char temp[MAX_PATH]={0};
printf("A authorization Request From %02X:%02X:%02X:%02X:%02X:%02X\n",
lpBdAddr[5],
lpBdAddr[4],
lpBdAddr[3],
lpBdAddr[2],
lpBdAddr[1],
lpBdAddr[0]);
printf("\tservice class id=%x\n",wServiceClass);
printf("\tservice name=%s\n",lpServiceName);
int bBroweService = GetPrivateProfileInt("PIN_CODE_IND", "bBroweService", 0, g_ini_path);
if(bBroweService)
{
BLUETOOTH_DEVICE_INFO devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address,lpBdAddr,6);
GENERAL_SERVICE_INFO pClsidList[MAX_SERVICE_COUNT]={0};
DWORD ClsidListLen = MAX_SERVICE_COUNT*sizeof(GENERAL_SERVICE_INFO);
BOOL bBrowseAllService = TRUE;
//Clear the g_device_service_info
memset((void*)g_device_service_info, 0, MAX_SERVICE_COUNT*sizeof(GENERAL_SERVICE_INFO));
DWORD dwReusult;
dwReusult = BT_BrowseServices(&devInfo, bBrowseAllService, &ClsidListLen, pClsidList);
PrintError("BT_BrowseServices",dwReusult);
if(dwReusult ==BTSTATUS_SUCCESS) {
printf("Device Address: %02X:%02X:%02X:%02X:%02X:%02X \n",
g_targetBdAddr[5],
g_targetBdAddr[4],
g_targetBdAddr[3],
g_targetBdAddr[2],
g_targetBdAddr[1],
g_targetBdAddr[0]);
printf("Service Class ID Service Handle Service Name\n");
for(DWORD i=0; i<ClsidListLen/sizeof(GENERAL_SERVICE_INFO);i++){
printf(" %d %d %s\n", pClsidList[i].wServiceClassUuid16, pClsidList[i].dwServiceHandle,pClsidList[i].szServiceName);
g_device_service_info[i].wServiceClassUuid16 = pClsidList[i].wServiceClassUuid16;
g_device_service_info[i].dwServiceHandle = pClsidList[i].dwServiceHandle;
g_device_service_info[i].dwSize = pClsidList[i].dwSize;
}
}
}
BOOL bProcessed = FALSE;
if(memcmp(lpBdAddr, g_targetBdAddr, 6) == 0 ){
*bAuthorized =GetPrivateProfileInt("AUTHORIZE_IND", "bAuthorized", 0, g_ini_path);
bProcessed = GetPrivateProfileInt("AUTHORIZE_IND", "bProcessed", 0, g_ini_path);;
}
return bProcessed;
}
void MyRobustDUNTest()
{
int i;
int nRepeats = GetPrivateProfileInt("MyTestFunc", "Repeats", 0, g_ini_path);
int bStopFlag;
int nSleep = GetPrivateProfileInt("MyTestFunc", "Inertval", 5000, g_ini_path);
int nDisCocc = GetPrivateProfileInt("MyTestFunc", "Inertval Dis Conn", 4000, g_ini_path);
DWORD dwResult;
DWORD dwConnectionHandle;
BLUETOOTH_DEVICE_INFO devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address, g_targetBdAddr, 6);
GENERAL_SERVICE_INFO svcInfo = {0};
svcInfo.dwSize = sizeof(GENERAL_SERVICE_INFO);
svcInfo.wServiceClassUuid16 = CLS_DIALUP_NET;
DUN_CLIENT_PARAM dunParam={0};
dunParam.dwSize = sizeof(DUN_CLIENT_PARAM);
dunParam.bAutoDial = TRUE;
strcpy(dunParam.szUserName, "263");
strcpy(dunParam.password, "263");
strcpy(dunParam.dialNumber, "095963");
//strcpy(dunParam.dialNumber, "*99***1#");
for(i=0;;i++){
Sleep(nDisCocc);
g_dwLastError = 0;
printf(" %d Connect attempt started\n", i);
WriteLog(" %d Connect attempt started", i);
dwResult = BT_ConnectService(&devInfo, &svcInfo, NULL, &dwConnectionHandle);
if(dwResult == BTSTATUS_SUCCESS){
printf("Connect succeeded\n");
WriteLog("Connect succeeded");
BOOL bIsOutGoing;
SPP_CONNECT_INFO sppConnInfo ={0};
DWORD dwLen = sizeof(SPP_CONNECT_INFO);
BYTE bdAddr[6]={0};
WORD wClass;
if(BT_GetConnectInfo(dwConnectionHandle,&bIsOutGoing,&wClass,bdAddr,&dwLen,(BYTE*)&sppConnInfo) == BTSTATUS_SUCCESS){
printf("Com Port = %d\n",sppConnInfo.ucComPort);
printf("Remote Address: %02X:%02X:%02X:%02X:%02X:%02X\n",
bdAddr[5],
bdAddr[4],
bdAddr[3],
bdAddr[2],
bdAddr[1],
bdAddr[0]);
}
Sleep(nSleep);
g_dwLastError = 0;
printf("Disconnect attempt started\n");
WriteLog("Disconnect attempt started");
dwResult = BT_DisconnectService(dwConnectionHandle);
if(dwResult == BTSTATUS_SUCCESS){
printf("Disconnect succeeded\n");
WriteLog("Disconnect succeeded\n");
}else{
PrintError("BT_DisconnectService",dwResult);
WriteLog("Disconnect failed! return:%d, last error:0x%x\n",dwResult,g_dwLastError);
}
}
else{
PrintError("BT_ConnectService",dwResult);
WriteLog("Connect failed! return:%d, last error:0x%x\n",dwResult,g_dwLastError);
}
bStopFlag = GetPrivateProfileInt("MyTestFunc", "StopFlag", 1, g_ini_path);
if(bStopFlag)
break;
}
}
void MyRobustPanTest()
{
CConnectCheck pingChecker;
int i;
int nRepeats = GetPrivateProfileInt("MyTestFunc", "Repeats", 0, g_ini_path);
int bStopFlag;
int nSleep = GetPrivateProfileInt("MyTestFunc", "Inertval", 5000, g_ini_path);
int nDisCocc = GetPrivateProfileInt("MyTestFunc", "Inertval Dis Conn", 4000, g_ini_path);
DWORD dwResult;
DWORD dwConnectionHandle;
DWORD dwTick;
BLUETOOTH_DEVICE_INFO devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address, g_targetBdAddr, 6);
GENERAL_SERVICE_INFO svcInfo = {0};
svcInfo.dwSize = sizeof(GENERAL_SERVICE_INFO);
for(i=0;;i++){
Sleep(nDisCocc);
// SDK_BtUnpair();
// SDK_BtPair();
g_dwLastError = 0;
printf(" %d Connect attempt started\n", i);
WriteLog(" %d Connect attempt started", i);
svcInfo.wServiceClassUuid16 = CLS_PAN_GN;
dwTick = GetTickCount();
dwResult = BT_ConnectService(&devInfo, &svcInfo, NULL, &dwConnectionHandle);
//if(dwResult != BTSTATUS_SUCCESS){
// svcInfo.wServiceClassUuid16 = CLS_PAN_NAP;
// dwResult = BT_ConnectService(&devInfo, &svcInfo, NULL, &dwConnectionHandle);
//}
if(dwResult == BTSTATUS_SUCCESS){
WriteLog("Connect succeeded. time taken=%d(milliseconds).",GetTickCount() - dwTick);
WriteLog("LastIP: %d.%d.%d.%d\n",g_auLastIP[0],g_auLastIP[1],g_auLastIP[2],g_auLastIP[3]);
int nDoPing;
char szTargetIP[64];
nDoPing = GetPrivateProfileInt("MyTestFunc", "Do Ping", 1, g_ini_path);
if(nDoPing == 1){
if(GetPrivateProfileString("MyTestFunc","Do Ping Target","",szTargetIP,63,g_ini_path)>0)
pingChecker.Ping(NULL,szTargetIP,0);
}
Sleep(nSleep);
g_dwLastError = 0;
printf("Disconnect attempt started\n");
WriteLog("Disconnect attempt started");
dwResult = BT_DisconnectService(dwConnectionHandle);
if(dwResult == BTSTATUS_SUCCESS){
printf("Disconnect succeeded\n");
WriteLog("Disconnect succeeded\n");
}else{
PrintError("BT_DisconnectService",dwResult);
WriteLog("Disconnect failed! return:%d, last error:0x%x\n",dwResult,g_dwLastError);
}
}
else{
PrintError("BT_ConnectService",dwResult);
WriteLog("Connect failed! return:%d, last error:0x%x\n",dwResult,g_dwLastError);
}
bStopFlag = GetPrivateProfileInt("MyTestFunc", "StopFlag", 1, g_ini_path);
if(bStopFlag)
break;
}
}
VOID
PANIPAllocationTest()
{
CConnectCheck pingChecker;
int nRepeats = GetPrivateProfileInt("MyTestFunc", "Repeats", 20, g_ini_path);
DWORD dwConnHandle;
BLUETOOTH_DEVICE_INFO devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address, g_targetBdAddr, 6);
GENERAL_SERVICE_INFO svcInfo = {0};
svcInfo.dwSize = sizeof(GENERAL_SERVICE_INFO);
svcInfo.wServiceClassUuid16 = CLS_PAN_GN;
g_hRecvdIPAddress = CreateEvent(NULL, TRUE, FALSE, "BT_IP_RECVD");
if(!g_hRecvdIPAddress){
printf("Failed to create event for notifying IP recvd");
return;
}
// register for IP recvd notification
DWORD dwErr = BT_RegisterCallback(EVENT_PAN_NOTIFICATION, SDK_PanInd);
if(dwErr != BTSTATUS_SUCCESS)
{
printf("Failed to register for IP allocated event...returning...");
CloseHandle(g_hRecvdIPAddress);
return;
}
DWORD dwTotalTime = 0;
int nTotal = 0;
DWORD dwLastTick;
for(int i = 0; i < nRepeats; i++)
{
WriteLog("------------------------------------",i);
WriteLog("#%d BT_ConnectService attempt started...",i);
ResetEvent(g_hRecvdIPAddress);
dwLastTick = GetTickCount();
dwErr = BT_ConnectService(
&devInfo,
&svcInfo,
NULL,
&dwConnHandle);
if(dwErr != BTSTATUS_SUCCESS){
WriteLog("#%d BT_ConnectService attempt failed.",i);
}
else
{
WriteLog("#%d BT_ConnectService attempt succeeded.",i);
DWORD dwObj = WaitForSingleObject(g_hRecvdIPAddress, INFINITE);
if(dwObj != WAIT_OBJECT_0)
{
WriteLog("Failed to recv a valid ip address or did not recv a change in IP address notification.");
}
else
{
// Recvd IP address increase the total time and disconnect PAN connection
DWORD dwTimeTaken = GetTickCount() - dwLastTick;
dwTotalTime += dwTimeTaken;
nTotal ++;
WriteLog("PAN IP received. time taken=%d milliseconds",dwTimeTaken);
WriteLog("LastIP: %d.%d.%d.%d\n",g_auLastIP[0],g_auLastIP[1],g_auLastIP[2],g_auLastIP[3]);
//Ping
int nDoPing;
char szTargetIP[64];
nDoPing = GetPrivateProfileInt("MyTestFunc", "Do Ping", 1, g_ini_path);
if(nDoPing == 1){
if(GetPrivateProfileString("MyTestFunc","Do Ping Target","",szTargetIP,63,g_ini_path)>0){
if(pingChecker.Ping(NULL,szTargetIP,0))
WriteLog("Ping %s succeeded.",szTargetIP);
else
WriteLog("Ping %s failed.",szTargetIP);
}
}
// disconnect PAN
WriteLog("#%d BT_DisconnectService attempt started.",i);
ResetEvent(g_hRecvdIPAddress);
DWORD dwErr = BT_DisconnectService(dwConnHandle);
if(dwErr != BTSTATUS_SUCCESS)
{
WriteLog("#%d BT_DisconnectService attempt failed.",i);
WriteLog(" Failed to disconnect from PAN Service...step through put a break point here");
}
else
{
WriteLog("#%d BT_DisconnectService attempt succeeded.",i);
dwConnHandle = 0;
}
}
}
}
CloseHandle(g_hRecvdIPAddress);
g_hRecvdIPAddress = NULL;
WriteLog("IP Allocation Test finished. Average time taken for receiving a valid IP address in %d attempts(success = %d) = %d milliseconds", nRepeats, nTotal, dwTotalTime/nTotal);
}
DWORD BT_CheckLicense(/* [in] */ DWORD dwFeature);
void MyRssiTest()
{
// int i;
// int bStopFlag;
// int nSleep = GetPrivateProfileInt("MyTestFunc", "Inertval", 5000, g_ini_path);
//
// for(i=0;;i++){
//
// Sleep(nSleep);
//
// SDK_BtGetRemoteInfo();
//
// bStopFlag = GetPrivateProfileInt("MyTestFunc", "StopFlag", 1, g_ini_path);
// if(bStopFlag)
// break;
//
// }
DWORD dwResult, dwFeature;
// dwFeature =3;
// dwResult = BT_CheckLicense(dwFeature);
dwResult = BT_DisconnectService(dwIncomingPan);
PrintError("BT_DisconnectService",dwResult);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -