📄 btbase.cpp
字号:
/*
* 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 + -