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

📄 bluesoleilclient.cpp

📁 蓝牙驱动代码,实现了蓝牙查找,蓝牙传输的一个程序段,用VC++打开可运行
💻 CPP
📖 第 1 页 / 共 4 页
字号:

	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 + -