www.pudn.com > LanyaTest.rar > MonitorBsol.cpp, change:2004-09-16,size:3565b


/************************************************************************************ 
// 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; 
 
}