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

📄 btbase.cpp

📁 1、手持设备的机器人--服务器端; 2、通过蓝牙通讯;
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright (c) 2004-2005 Mobile Robotics
 * http://mobilerobotics.sf.net
 *
 * File: BtBase.cpp
 * Author: Johan Johanson
 * Date: January 16, 2005
 * Updated: February 26, 2005
 *
 * Description: See BtBase.h
 *
*/

#include "BtBase.h"
#include "BtCustomEvent.h"

const Int16 BtBase::InvalidSocket = 0xFFFF;
UInt16 BtBase::btRef = sysInvalidRefNum;
BtBase *BtBase::callbackRef = NULL;

BtBase::BtBase() : radioInitialized(false)
{

}

BtBase::~BtBase()
{

}

Boolean BtBase::initSystem()
{
	Err error = 0;
	UInt32 btVersion = 0;

	shutdownSystem();

	// look for BT compability and supported OS version
	if (FtrGet(btLibFeatureCreator, btLibFeatureVersion, &btVersion) != errNone)
		return false;

	// find the library, if not found, load it
	if (SysLibFind(btLibName, &btRef))
		if (SysLibLoad(sysFileTLibrary, sysFileCBtLib, &btRef) != errNone)
			return false;

	// open the library
	if ((error = BtLibOpen(btRef, false)) != btLibErrNoError)
	{
		btRef = sysInvalidRefNum;
		return false;
	}
	
	// register Bluetooth event callback method
	if ((error = BtLibRegisterManagementNotification(btRef, managementCallback, 0)) != btLibErrNoError)
		return false;
		
	// application must wait for radio to initialize
	// before performing bluetooth dependent tasks
	
	return true;
}

void BtBase::shutdownSystem()
{
	if (btRef != sysInvalidRefNum)
	{
		BtLibUnregisterManagementNotification(btRef, managementCallback);
		BtLibClose(btRef);
		btRef = sysInvalidRefNum;
	}
}

Boolean BtBase::init()
{
	Err error = 0;

	if (!radioInitialized || btRef == sysInvalidRefNum)
	{
		debugPrint("Bluetooth not initialized");
		return false;
	}

	// retrieve info about the local BT device
	if ((error = BtLibGetGeneralPreference(btRef, btLibPref_LocalClassOfDevice, (void *)&localDevice.classOfDevice, 
										   sizeof(localDevice.classOfDevice)))
		!= btLibErrNoError)
	{
		debugPrint(btErrToStr(error));
		return false;
	}

	if ((error = BtLibGetGeneralPreference(btRef, btLibPref_LocalDeviceAddress, (void *)&localDevice.address, 
										   sizeof(localDevice.address)))
		!= btLibErrNoError)
	{
		debugPrint(btErrToStr(error));
		return false;
	}

	return true;
}

void BtBase::shutdown()
{
	if (btRef != sysInvalidRefNum)
		disconnect();
}

void BtBase::setCallbackRef(BtBase *ref)
{
	callbackRef = ref;
}

Boolean BtBase::getRadioInitialized()
{
	return radioInitialized;
}

BtDevice *BtBase::getLocalDevice()
{
	return (btRef == sysInvalidRefNum) ? NULL : &localDevice;
}

void BtBase::btAddrToStr(BtLibDeviceAddressType *address, Char *buffer)
{
	if (btRef == sysInvalidRefNum || address == NULL || buffer != NULL)
		return;

	Err error = 0;
	buffer = (Char *)MemPtrNew(18);

	MemSet(buffer, sizeof(buffer), 0);

	if ((error = BtLibAddrBtdToA(btRef, address, buffer, 18)) != btLibErrNoError)
	{
		MemPtrFree(buffer);
		return;
	}
}

Char *BtBase::btErrToStr(Err btErr)
{
	Char *msg;

	switch (btErr)
	{
		case btLibErrNoError:
			msg = (Char *)"Bt Error: NoError";
			break;

		case btLibErrError:
			msg = (Char *)"Bt Error: Error";
			break;

		case btLibErrNotOpen:
			msg = (Char *)"Bt Error: NotOpen";
			break;

		case btLibErrBluetoothOff:
			msg = (Char *)"Bt Error: BluetoothOff";
			break;

		case btLibErrNoPrefs:
			msg = (Char *)"Bt Error: NoPrefs";
			break;

		case btLibErrAlreadyOpen:
			msg = (Char *)"Bt Error: AlreadyOpen";
			break;

		case btLibErrOutOfMemory:
			msg = (Char *)"Bt Error: OutOfMemory";
			break;

		case btLibErrFailed:
			msg = (Char *)"Bt Error: Failed";
			break;

		case btLibErrInProgress:
			msg = (Char *)"Bt Error: InProgress";
			break;

		case btLibErrParamError:
			msg = (Char *)"Bt Error: ParamError";
			break;

		case btLibErrTooMany:
			msg = (Char *)"Bt Error: TooMany";
			break;

		case btLibErrPending:
			msg = (Char *)"Bt Error: Pending";
			break;

		case btLibErrNotInProgress:
			msg = (Char *)"Bt Error: NotInProgress";
			break;

		case btLibErrRadioInitFailed:
			msg = (Char *)"Bt Error: RadioInitFailed";
			break;

		case btLibErrRadioFatal:
			msg = (Char *)"Bt Error: RadioFatal";
			break;

		case btLibErrRadioInitialized:
			msg = (Char *)"Bt Error: RadioInitialized";
			break;

		case btLibErrRadioSleepWake:
			msg = (Char *)"Bt Error: RadioSleepWake";
			break;

		case btLibErrNoConnection:
			msg = (Char *)"Bt Error: NoConnection";
			break;

		case btLibErrAlreadyRegistered:
			msg = (Char *)"Bt Error: AlreadyRegistered";
			break;

		case btLibErrNoAclLink:
			msg = (Char *)"Bt Error: NoAclLink";
			break;

		case btLibErrSdpRemoteRecord:
			msg = (Char *)"Bt Error: SdpRemoteRecord";
			break;

		case btLibErrSdpAdvertised:
			msg = (Char *)"Bt Error: SdpAdvertised";
			break;

		case btLibErrSdpFormat:
			msg = (Char *)"Bt Error: SdpFormat";
			break;

		case btLibErrSdpNotAdvertised:
			msg = (Char *)"Bt Error: SdpNotAdvertised";
			break;

		case btLibErrSdpQueryVersion:
			msg = (Char *)"Bt Error: SdpQueryVersion";
			break;

		case btLibErrSdpQueryHandle:
			msg = (Char *)"Bt Error: SdpQueryHandle";
			break;

		case btLibErrSdpQuerySyntax:
			msg = (Char *)"Bt Error: SdpQuerySyntax";
			break;

		case btLibErrSdpQueryPduSize:
			msg = (Char *)"Bt Error: SdpQueryPduSize";
			break;

		case btLibErrSdpQueryContinuation:
			msg = (Char *)"Bt Error: SdpQueryContinuation";
			break;

		case btLibErrSdpQueryResources:
			msg = (Char *)"Bt Error: SdpQueryResources";
			break;

		case btLibErrSdpQueryDisconnect:
			msg = (Char *)"Bt Error: SdpQueryDisconnect";
			break;

		case btLibErrSdpInvalidResponse:
			msg = (Char *)"Bt Error: SdpInvalidResponse";
			break;

		case btLibErrSdpAttributeNotSet:
			msg = (Char *)"Bt Error: SdpAttributeNotSet";
			break;

		case btLibErrSdpMapped:
			msg = (Char *)"Bt Error: SdpMapped";
			break;

		case btLibErrSocket:
			msg = (Char *)"Bt Error: Socket";
			break;

		case btLibErrSocketProtocol:
			msg = (Char *)"Bt Error: SocketProtocol";
			break;

		case btLibErrSocketRole:
			msg = (Char *)"Bt Error: SocketRole";
			break;

		case btLibErrSocketPsmUnavailable:
			msg = (Char *)"Bt Error: SocketPsmUnavailable";
			break;

		case btLibErrSocketChannelUnavailable:
			msg = (Char *)"Bt Error: SocketChannelUnavailable";
			break;

		case btLibErrSocketUserDisconnect:
			msg = (Char *)"Bt Error: SocketUserDisconnect";
			break;

		case btLibErrCanceled:
			msg = (Char *)"Bt Error: Canceled";
			break;

		case btLibErrBusy:
			msg = (Char *)"Bt Error: Busy";
			break;

		case btLibMeStatusUnknownHciCommand:
			msg = (Char *)"Bt Error: MeStatusUnknownHciCommand";
			break;

		case btLibMeStatusNoConnection:
			msg = (Char *)"Bt Error: MeStatusNoConnection";
			break;

		case btLibMeStatusHardwareFailure:
			msg = (Char *)"Bt Error: MeStatusHardwareFailure";
			break;

		case btLibMeStatusPageTimeout:
			msg = (Char *)"Bt Error: MeStatusPageTimeout";
			break;

		case btLibMeStatusAuthenticateFailure:
			msg = (Char *)"Bt Error: MeStatusAuthenticateFailure";
			break;

		case btLibMeStatusMissingKey:
			msg = (Char *)"Bt Error: MeStatusMissingKey";
			break;

		case btLibMeStatusMemoryFull:
			msg = (Char *)"Bt Error: MeStatusMemoryFull";
			break;

		case btLibMeStatusConnnectionTimeout:
			msg = (Char *)"Bt Error: MeStatusConnnectionTimeout";
			break;

		case btLibMeStatusMaxConnections:
			msg = (Char *)"Bt Error: MeStatusMaxConnections";
			break;

		case btLibMeStatusMaxScoConnections:
			msg = (Char *)"Bt Error: MeStatusMaxScoConnections";
			break;

		case btLibMeStatusMaxAclConnections:
			msg = (Char *)"Bt Error: MeStatusMaxAclConnections";
			break;

		case btLibMeStatusCommandDisallowed:
			msg = (Char *)"Bt Error: MeStatusCommandDisallowed";
			break;

		case btLibMeStatusLimitedResources:
			msg = (Char *)"Bt Error: MeStatusLimitedResources";
			break;

		case btLibMeStatusSecurityError:
			msg = (Char *)"Bt Error: MeStatusSecurityError";
			break;

		case btLibMeStatusPersonalDevice:
			msg = (Char *)"Bt Error: MeStatusPersonalDevice";
			break;

		case btLibMeStatusHostTimeout:
			msg = (Char *)"Bt Error: MeStatusHostTimeout";
			break;

		case btLibMeStatusUnsupportedFeature:
			msg = (Char *)"Bt Error: MeStatusUnsupportedFeature";
			break;

		case btLibMeStatusInvalidHciParam:
			msg = (Char *)"Bt Error: MeStatusInvalidHciParam";
			break;

		case btLibMeStatusUserTerminated:
			msg = (Char *)"Bt Error: MeStatusUserTerminated";
			break;

		case btLibMeStatusLowResources:
			msg = (Char *)"Bt Error: MeStatusLowResources";
			break;

		case btLibMeStatusPowerOff:
			msg = (Char *)"Bt Error: MeStatusPowerOff";
			break;

		case btLibMeStatusLocalTerminated:
			msg = (Char *)"Bt Error: MeStatusLocalTerminated";
			break;

		case btLibMeStatusRepeatedAttempts:
			msg = (Char *)"Bt Error: MeStatusRepeatedAttempts";
			break;

		case btLibMeStatusPairingNotAllowed:
			msg = (Char *)"Bt Error: MeStatusPairingNotAllowed";
			break;

		case btLibMeStatusUnknownLmpPDU:
			msg = (Char *)"Bt Error: MeStatusUnknownLmpPDU";
			break;

		case btLibMeStatusUnsupportedRemote:
			msg = (Char *)"Bt Error: MeStatusUnsupportedRemote";
			break;

		case btLibMeStatusScoOffsetRejected:
			msg = (Char *)"Bt Error: MeStatusScoOffsetRejected";
			break;

		case btLibMeStatusScoIntervalRejected:
			msg = (Char *)"Bt Error: MeStatusScoIntervalRejected";
			break;

		case btLibMeStatusScoAirModeRejected:
			msg = (Char *)"Bt Error: MeStatusScoAirModeRejected";
			break;

		case btLibMeStatusInvalidLmpParam:
			msg = (Char *)"Bt Error: MeStatusInvalidLmpParam";
			break;

		case btLibMeStatusUnspecifiedError:
			msg = (Char *)"Bt Error: MeStatusUnspecifiedError";
			break;

		case btLibMeStatusUnsupportedLmpParam:
			msg = (Char *)"Bt Error: MeStatusUnsupportedLmpParam";
			break;

		case btLibMeStatusRoleChangeNotAllowed:
			msg = (Char *)"Bt Error: MeStatusRoleChangeNotAllowed";
			break;

		case btLibMeStatusLmpResponseTimeout:
			msg = (Char *)"Bt Error: MeStatusLmpResponseTimeout";
			break;

		case btLibMeStatusLmpTransdCollision:
			msg = (Char *)"Bt Error: MeStatusLmpTransdCollision";
			break;

		case btLibMeStatusLmpPduNotAllowed:
			msg = (Char *)"Bt Error: MeStatusLmpPduNotAllowed";
			break;

⌨️ 快捷键说明

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