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

📄 monitorbsol.cpp

📁 蓝牙驱动代码,实现了蓝牙查找,蓝牙传输的一个程序段,用VC++打开可运行
💻 CPP
字号:
/************************************************************************************
// Sample code for calling IVT BlueSoleil APIs

  Copyright (c) 2004 -2005 , IVT Corporation. All rights reserved.

*******************************************************************************************/

#include "main.h"
#include <stdio.h>
#include "MonitorBsol.h"
#include "menu.h"
#include "SdkFunc.h"

#define DETECT_BY_EVENT 1
#define DETECT_BY_API 2
HANDLE g_hDetectThread = NULL;
HANDLE g_hBlueSoleilStarted = NULL;
HANDLE g_hBlueSoleilStopping = NULL;


/*
Detect running status of BlueSoleil using BT_IsBlueSoleilStarted and BT_IsBluetoothReady
*/
DWORD WINAPI DetectBlueSoleil(LPVOID param)
{
	BOOL bInitialized = FALSE;	
	while(1){		
		if(BT_IsBlueSoleilStarted(0)){
			if(!bInitialized){
//				BT_IsBluetoothReady(15);
				bInitialized = BT_InitializeLibrary();
				if(bInitialized){
					printf("BlueSoleil starts, Lib initialized\n");
					SDK_Init();
				}
				else{
					SDK_Done();
					printf("BlueSoleil starts, Fail to initialize Lib\n");
				}
			}
		}else{
			if(bInitialized){
			    SDK_Done();
				bInitialized = FALSE;
				printf("BlueSoleil stops, Lib uninitialized\n");
			}
		}
		
		if(WaitForSingleObject(g_hForceExit,1000) == WAIT_OBJECT_0) break;
		
	}
	
	return 0;
}


/***************************************************************************
Detect running status of BlueSoleil using events
****************************************************************************/

DWORD WINAPI DetectBlueSoleilByEvents(LPVOID param)
{
	//Must created with bManualReset=TRUE
	g_hBlueSoleilStarted = CreateEvent(NULL, TRUE, FALSE, ("Global\\BluesoleilBluetoothStarted"));
	if(!g_hBlueSoleilStarted) return 0;
	g_hBlueSoleilStopping = CreateEvent(NULL, TRUE, FALSE, ("Global\\BluesoleilStopping"));
    if(!g_hBlueSoleilStopping){
		CloseHandle(g_hBlueSoleilStarted);
		return 0;
	}
	HANDLE hWaitHandles[2];
	DWORD dwRet;

	while(1){
		
		//Wait for BlueSoleil stopping
		hWaitHandles[0] = g_hForceExit;
		hWaitHandles[1] = g_hBlueSoleilStopping;
		dwRet = WaitForMultipleObjects(2,hWaitHandles,FALSE,INFINITE);
		if(dwRet == WAIT_OBJECT_0)
			break;
		else if(dwRet == WAIT_OBJECT_0 + 1){
			SDK_Done();
			printf("BlueSolei exits detected.\n\n");
			
		}else
			break;

		//Wait for BlueSoileil started
		hWaitHandles[0] = g_hForceExit;
		hWaitHandles[1] = g_hBlueSoleilStarted;
		dwRet = WaitForMultipleObjects(2,hWaitHandles,FALSE,INFINITE);
		if(dwRet == WAIT_OBJECT_0)
			break;
		else if(dwRet == WAIT_OBJECT_0 + 1){
			SDK_Init();
			printf("BlueSolei starts detected.\n\n");
		}else
			break;
		
	}
	
	CloseHandle(g_hBlueSoleilStarted);
	CloseHandle(g_hBlueSoleilStopping);
	
	return 0;
}

void StartMornitorBsol()
{
	BOOL bMonitorType;
	DWORD dwID;
	
	bMonitorType = 	GetPrivateProfileInt("MONITOR_BSOL", "Monitor Type", DETECT_BY_API , g_szIniPath);
	if(bMonitorType == DETECT_BY_API)
		g_hDetectThread = CreateThread(NULL,0,DetectBlueSoleil,NULL,0,&dwID);
	else
		g_hDetectThread = CreateThread(NULL,0,DetectBlueSoleilByEvents,NULL,0,&dwID);
}

void EndMornitorBsol()
{
	if(g_hDetectThread == NULL){
		printf("Detect BlueSoleil not started.\n");
		return;
	}
	
	if(WaitForSingleObject(g_hDetectThread, 2000) != WAIT_OBJECT_0){
		printf("Wait detect BlueSoleil thread time out.\n");
		TerminateThread(g_hDetectThread, -1);
	}else
		printf("Detect BlueSoleil thread exit.\n");

	g_hDetectThread = NULL;

}

⌨️ 快捷键说明

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