#pragma once
#include <stdint.h>
#include <string>
#include "HciAdapter.h"
#include "Utils.h"
namespace ggk {
struct Mgmt
{
static const int kMaxAdvertisingNameLength = 248;
static const int kMaxAdvertisingShortNameLength = 10;
enum EventTypes
{
EInvalidEvent = 0x0000,
ECommandCompleteEvent = 0x0001,
ECommandStatusEvent = 0x0002,
EControllerErrorEvent = 0x0003,
EIndexAddedEvent = 0x0004,
EIndexRemovedEvent = 0x0005,
ENewSettingsEvent = 0x0006,
EClassOfDeviceChangedEvent = 0x0007,
ELocalNameChangedEvent = 0x0008,
ENewLinkKeyEvent = 0x0009,
ENewLongTermKeyEvent = 0x000A,
EDeviceConnectedEvent = 0x000B,
EDeviceDisconnectedEvent = 0x000C,
EConnectFailedEvent = 0x000D,
EPINCodeRequestEvent = 0x000E,
EUserConfirmationRequestEvent = 0x000F,
EUserPasskeyRequestEvent = 0x0010,
EAuthenticationFailedEvent = 0x0011,
EDeviceFoundEvent = 0x0012,
EDiscoveringEvent = 0x0013,
EDeviceBlockedEvent = 0x0014,
EDeviceUnblockedEvent = 0x0015,
EDeviceUnpairedEvent = 0x0016,
EPasskeyNotifyEvent = 0x0017,
ENewIdentityResolvingKeyEvent = 0x0018,
ENewSignatureResolvingKeyEvent = 0x0019,
EDeviceAddedEvent = 0x001a,
EDeviceRemovedEvent = 0x001b,
ENewConnectionParameterEvent = 0x001c,
EUnconfiguredIndexAddedEvent = 0x001d,
EUnconfiguredIndexRemovedEvent = 0x001e,
ENewConfigurationOptionsEvent = 0x001f,
EExtendedIndexAddedEvent = 0x0020,
EExtendedIndexRemovedEvent = 0x0021,
ELocalOutOfBandExtendedDataUpdatedEvent = 0x0022,
EAdvertisingAddedEvent = 0x0023,
EAdvertisingRemovedEvent = 0x0024,
EExtendedControllerInformationChangedEvent = 0x0025
};
enum CommandCodes
{
EInvalidCommand = 0x0000,
EReadVersionInformationCommand = 0x0001,
EReadSupportedCommandsCommand = 0x0002,
EReadControllerIndexListCommand = 0x0003,
EReadControllerInformationCommand = 0x0004,
ESetPoweredCommand = 0x0005,
ESetDiscoverableCommand = 0x0006,
ESetConnectableCommand = 0x0007,
ESetFastConnectableCommand = 0x0008,
ESetBondableCommand = 0x0009,
ESetLinkSecurityCommand = 0x000A,
ESetSecureSimplePairingCommand = 0x000B,
ESetHighSpeedCommand = 0x000C,
ESetLowEnergyCommand = 0x000D,
ESetDeviceClass = 0x000E,
ESetLocalNameCommand = 0x000F,
EAddUUIDCommand = 0x0010,
ERemoveUUIDCommand = 0x0011,
ELoadLinkKeysCommand = 0x0012,
ELoadLongTermKeysCommand = 0x0013,
EDisconnectCommand = 0x0014,
EGetConnectionsCommand = 0x0015,
EPINCodeReplyCommand = 0x0016,
EPINCodeNegativeReplyCommand = 0x0017,
ESetIOCapabilityCommand = 0x0018,
EPairDeviceCommand = 0x0019,
ECancelPairDeviceCommand = 0x001A,
EUnpairDeviceCommand = 0x001B,
EUserConfirmationReplyCommand = 0x001C,
EUserConfirmationNegativeReplyCommand = 0x001D,
EUserPasskeyReplyCommand = 0x001E,
EUserPasskeyNegativeReplyCommand = 0x001F,
EReadLocalOutOfBandDataCommand = 0x0020,
EAddRemoteOutOfBandDataCommand = 0x0021,
ERemoveRemoteOutOfBandDataCommand = 0x0022,
EStartDiscoveryCommand = 0x0023,
EStopDiscoveryCommand = 0x0024,
EConfirmNameCommand = 0x0025,
EBlockDeviceCommand = 0x0026,
EUnblockDeviceCommand = 0x0027,
ESetDeviceIDCommand = 0x0028,
ESetAdvertisingCommand = 0x0029,
ESetBREDRCommand = 0x002A,
ESetStaticAddressCommand = 0x002B,
ESetScanParametersCommand = 0x002C,
ESetSecureConnectionsCommand = 0x002D,
ESetDebugKeysCommand = 0x002E,
ESetPrivacyCommand = 0x002F,
ELoadIdentityResolvingKeysCommand = 0x0030,
EGetConnectionInformationCommand = 0x0031,
EGetClockInformationCommand = 0x0032,
EAddDeviceCommand = 0x0033,
ERemoveDeviceCommand = 0x0034,
ELoadConnectionParametersCommand = 0x0035,
EReadUnconfiguredControllerIndexListCommand = 0x0036,
EReadControllerConfigurationInformationCommand = 0x0037,
ESetExternalConfigurationCommand = 0x0038,
ESetPublicAddressCommand = 0x0039,
EStartServiceDiscoveryCommand = 0x003a,
EReadLocalOutOfBandExtendedDataCommand = 0x003b,
EReadExtendedControllerIndexListCommand = 0x003c,
EReadAdvertisingFeaturesCommand = 0x003d,
EAddAdvertisingCommand = 0x003e,
ERemoveAdvertisingCommand = 0x003f,
EGetAdvertisingSizeInformationCommand = 0x0040,
EStartLimitedDiscoveryCommand = 0x0041,
EReadExtendedControllerInformationCommand = 0x0042,
ESetAppearanceCommand = 0x0043
};
Mgmt(uint16_t controllerIndex = kDefaultControllerIndex);
bool setName(std::string name, std::string shortName);
bool setState(uint16_t commandCode, uint16_t controllerId, uint8_t newState);
bool setPowered(bool newState);
bool setBredr(bool newState);
bool setSecureConnections(uint8_t newState);
bool setBondable(bool newState);
bool setConnectable(bool newState);
bool setLE(bool newState);
bool setAdvertising(uint8_t newState);
static std::string truncateName(const std::string &name);
static std::string truncateShortName(const std::string &name);
private:
uint16_t controllerIndex;
static const uint16_t kDefaultControllerIndex = 0;
};
};