#pragma once
#include <stdint.h>
#include <string>
#include "HciAdapter.h"
#include "Utils.h"
namespace ggk {
struct Mgmt
{
static const int kMaxNameLength = 248;
static const int kMaxShortNameLength = 10;
enum EHciControllerSettings
{
EHciPowered = (1<<0),
EHciConnectable = (1<<1),
EHciFastConnectable = (1<<2),
EHciDiscoverable = (1<<3),
EHciBondable = (1<<4),
EHciLinkLevelSecurity = (1<<5),
EHciSecureSimplePairing = (1<<6),
EHciBasicRate_EnhancedDataRate = (1<<7),
EHciHighSpeed = (1<<8),
EHciLowEnergy = (1<<9),
EHciAdvertising = (1<<10),
EHciSecureConnections = (1<<11),
EHciDebugKeys = (1<<12),
EHciPrivacy = (1<<13),
EHciControllerConfiguration = (1<<14),
EHciStaticAddress = (1<<15)
};
struct ControllerInformation
{
uint8_t address[6];
uint8_t bluetoothVersion;
uint16_t manufacturer;
uint32_t supportedSettings;
uint32_t currentSettings;
uint8_t classOfDevice[3];
char name[249];
char shortName[11];
void toHost()
{
manufacturer = Utils::endianToHost(manufacturer);
supportedSettings = Utils::endianToHost(supportedSettings);
currentSettings = Utils::endianToHost(currentSettings);
}
} __attribute__((packed));
Mgmt(uint16_t controllerIndex = kDefaultControllerIndex);
int getVersion();
ControllerInformation *getControllerInformation();
bool setName(std::string name, std::string shortName);
bool setState(const char *pSettingName, 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 controllerSettingsString(uint32_t bits);
static std::string truncateName(const std::string &name);
static std::string truncateShortName(const std::string &name);
private:
HciAdapter hciAdapter;
ControllerInformation controllerInfo;
uint16_t controllerIndex;
static const uint16_t kDefaultControllerIndex = 0;
static const uint16_t kNonController = 0xffff;
};
};