本文整理汇总了C++中BLECharacteristic类的典型用法代码示例。如果您正苦于以下问题:C++ BLECharacteristic类的具体用法?C++ BLECharacteristic怎么用?C++ BLECharacteristic使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BLECharacteristic类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ESP_LOGD
/**
* @brief Start the service.
* Here we wish to start the service which means that we will respond to partner requests about it.
* Starting a service also means that we can create the corresponding characteristics.
* @return Start the service.
*/
void BLEService::start() {
// We ask the BLE runtime to start the service and then create each of the characteristics.
// We start the service through its local handle which was returned in the ESP_GATTS_CREATE_EVT event
// obtained as a result of calling esp_ble_gatts_create_service().
//
ESP_LOGD(LOG_TAG, ">> start(): Starting service (esp_ble_gatts_start_service): %s", toString().c_str());
if (m_handle == NULL_HANDLE) {
ESP_LOGE(LOG_TAG, "<< !!! We attempted to start a service but don't know its handle!");
return;
}
BLECharacteristic *pCharacteristic = m_characteristicMap.getFirst();
while(pCharacteristic != nullptr) {
m_lastCreatedCharacteristic = pCharacteristic;
pCharacteristic->executeCreate(this);
pCharacteristic = m_characteristicMap.getNext();
}
// Start each of the characteristics ... these are found in the m_characteristicMap.
m_semaphoreStartEvt.take("start");
esp_err_t errRc = ::esp_ble_gatts_start_service(m_handle);
if (errRc != ESP_OK) {
ESP_LOGE(LOG_TAG, "<< esp_ble_gatts_start_service: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
return;
}
m_semaphoreStartEvt.wait("start");
ESP_LOGD(LOG_TAG, "<< start()");
} // start
示例2: if
void
BLEPeripheral::handleGapEvent(ble_client_gap_event_t event, struct ble_gap_event *event_data)
{
if (BLE_CLIENT_GAP_EVENT_CONNECTED == event) {
_state = BLE_PERIPH_STATE_CONNECTED;
_central.setAddress(event_data->connected.peer_bda);
if (_event_handlers[BLEConnected]) {
_event_handlers[BLEConnected](_central);
}
} else if (BLE_CLIENT_GAP_EVENT_DISCONNECTED == event) {
for (int i = 0; i < _num_attributes; i++) {
BLEAttribute* attribute = _attributes[i];
if (attribute->type() == BLETypeCharacteristic) {
BLECharacteristic* characteristic = (BLECharacteristic*)attribute;
characteristic->setCccdValue(_central, 0x0000); // reset CCCD
}
}
if (_event_handlers[BLEDisconnected])
_event_handlers[BLEDisconnected](_central);
_state = BLE_PERIPH_STATE_READY;
_central.clearAddress();
_startAdvertising();
} else if (BLE_CLIENT_GAP_EVENT_CONN_TIMEOUT == event) {
_state = BLE_PERIPH_STATE_READY;
_startAdvertising();
}
}
示例3: bleConfigChangeHandler
void bleConfigChangeHandler(BLECentral& central, BLECharacteristic& characteristic) {
// config characteristic event handler
DEBUG_PRINTLN("config change event");
handle( (uint8_t*) characteristic.value(), characteristic.valueLength());
DEBUG_PRINT("Pin: ");
DEBUG_PRINTLN(pin);
}
示例4: sendData
void BLEHID::sendData(BLECharacteristic& characteristic, unsigned char data[], unsigned char length) {
// wait until we can notify
while(!characteristic.canNotify()) {
BLEHIDPeripheral::instance()->poll();
}
characteristic.setValue(data, length);
}
示例5: BLEUuid
void BLEPeripheral::begin() {
unsigned char advertisementData[20];
unsigned char scanData[20];
unsigned char advertisementDataLength = 0;
unsigned char scanDataLength = 0;
if (this->_advertisedServiceUuid){
BLEUuid advertisedServiceUuid = BLEUuid(this->_advertisedServiceUuid);
unsigned char advertisedServiceUuidLength = advertisedServiceUuid.length();
advertisementDataLength = 2 + advertisedServiceUuidLength;
advertisementData[0] = (advertisedServiceUuidLength > 2) ? 0x06 : 0x02;
advertisementData[1] = advertisedServiceUuidLength;
memcpy(&advertisementData[2], advertisedServiceUuid.data(), advertisedServiceUuidLength);
} else if (this->_manufacturerData && this->_manufacturerDataLength > 0) {
if (this->_manufacturerDataLength > sizeof(advertisementData)) {
this->_manufacturerDataLength = sizeof(advertisementData);
}
advertisementDataLength = 2 + this->_manufacturerDataLength;
advertisementData[0] = 0xff;
advertisementData[1] = this->_manufacturerDataLength;
memcpy(&advertisementData[2], this->_manufacturerData, this->_manufacturerDataLength);
}
if (this->_localName){
unsigned char originalLocalNameLength = strlen(this->_localName);
unsigned char localNameLength = originalLocalNameLength;
if (localNameLength > sizeof(scanData)) {
localNameLength = sizeof(scanData);
}
scanDataLength = 2 + localNameLength;
scanData[0] = (originalLocalNameLength > sizeof(scanData)) ? 0x08 : 0x09;
scanData[1] = localNameLength;
memcpy(&scanData[2], this->_localName, localNameLength);
}
for (int i = 0; i < this->_numAttributes; i++) {
BLEAttribute* attribute = this->_attributes[i];
if (attribute->type() == BLETypeCharacteristic) {
BLECharacteristic* characteristic = (BLECharacteristic*)attribute;
characteristic->setValueChangeListener(*this);
}
}
this->_nRF8001.begin(advertisementData, advertisementDataLength, scanData, scanDataLength, this->_attributes, this->_numAttributes);
this->_nRF8001.requestAddress();
}
示例6: _init
bool BLEPeripheral::begin()
{
BleStatus status;
status = _init();
if (status != BLE_STATUS_SUCCESS) {
return false;
}
/* Populate advertising data
*/
_advDataInit();
status = ble_client_gap_wr_adv_data(_adv_data, _adv_data_len);
if (BLE_STATUS_SUCCESS != status) {
return false;
}
uint16_t lastServiceHandle = 0;
for (int i = 0; i < _num_attributes; i++) {
BLEAttribute* attribute = _attributes[i];
BLEAttributeType type = attribute->type();
bool addResult = false;
if (BLETypeService == type) {
BLEService* service = (BLEService*)attribute;
addResult = service->add();
lastServiceHandle = service->handle();
} else if (BLETypeCharacteristic == type) {
BLECharacteristic* characteristic = (BLECharacteristic*)attribute;
addResult = characteristic->add(lastServiceHandle);
} else if (BLETypeDescriptor == type) {
BLEDescriptor *descriptor = (BLEDescriptor*)attribute;
if (strcmp(descriptor->uuid(), "2901") == 0 ||
strcmp(descriptor->uuid(), "2902") == 0 ||
strcmp(descriptor->uuid(), "2903") == 0 ||
strcmp(descriptor->uuid(), "2904") == 0) {
continue; // skip
}
addResult = descriptor->add(lastServiceHandle);
}
if (!addResult) {
return false;
}
}
return (_startAdvertising() == BLE_STATUS_SUCCESS);
}
示例7: run
static void run() {
BLEDevice::init("MYDEVICE");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(BLEUUID(SERVICE_UUID_BIN, 16, true));
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
BLEUUID(CHARACTERISTIC_UUID),
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbackHandler());
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
示例8: memset
bool nRF51822::updateCharacteristicValue(BLECharacteristic& characteristic) {
bool success = true;
for (int i = 0; i < this->_numLocalCharacteristics; i++) {
struct localCharacteristicInfo* localCharacteristicInfo = &this->_localCharacteristicInfo[i];
if (localCharacteristicInfo->characteristic == &characteristic) {
if (&characteristic == this->_broadcastCharacteristic) {
this->broadcastCharacteristic(characteristic);
}
uint16_t valueLength = characteristic.valueLength();
sd_ble_gatts_value_set(localCharacteristicInfo->handles.value_handle, 0, &valueLength, characteristic.value());
ble_gatts_hvx_params_t hvxParams;
memset(&hvxParams, 0, sizeof(hvxParams));
hvxParams.handle = localCharacteristicInfo->handles.value_handle;
hvxParams.offset = 0;
hvxParams.p_data = NULL;
hvxParams.p_len = &valueLength;
if (localCharacteristicInfo->notifySubscribed) {
if (this->_txBufferCount > 0) {
this->_txBufferCount--;
hvxParams.type = BLE_GATT_HVX_NOTIFICATION;
sd_ble_gatts_hvx(this->_connectionHandle, &hvxParams);
} else {
success = false;
}
}
if (localCharacteristicInfo->indicateSubscribed) {
if (this->_txBufferCount > 0) {
this->_txBufferCount--;
hvxParams.type = BLE_GATT_HVX_INDICATION;
sd_ble_gatts_hvx(this->_connectionHandle, &hvxParams);
} else {
success = false;
}
}
}
}
return success;
}
示例9: memcpy
bool nRF51822::broadcastCharacteristic(BLECharacteristic& characteristic) {
bool success = false;
for (int i = 0; i < this->_numLocalCharacteristics; i++) {
struct localCharacteristicInfo* localCharacteristicInfo = &this->_localCharacteristicInfo[i];
if (localCharacteristicInfo->characteristic == &characteristic) {
if (characteristic.properties() & BLEBroadcast && localCharacteristicInfo->service) {
unsigned char advData[31];
unsigned char advDataLen = this->_advDataLen;
// copy the existing advertisement data
memcpy(advData, this->_advData, advDataLen);
advDataLen += (4 + characteristic.valueLength());
if (advDataLen <= 31) {
BLEUuid uuid = BLEUuid(localCharacteristicInfo->service->uuid());
advData[this->_advDataLen + 0] = 3 + characteristic.valueLength();
advData[this->_advDataLen + 1] = 0x16;
memcpy(&advData[this->_advDataLen + 2], uuid.data(), 2);
memcpy(&advData[this->_advDataLen + 4], characteristic.value(), characteristic.valueLength());
sd_ble_gap_adv_data_set(advData, advDataLen, NULL, 0); // update advertisement data
success = true;
this->_broadcastCharacteristic = &characteristic;
}
}
break;
}
}
return success;
}
示例10: BLEAttribute
BLECharacteristicImp::BLECharacteristicImp(BLECharacteristic& characteristic,
const BLEDevice& bledevice):
BLEAttribute(characteristic.uuid(), BLETypeCharacteristic),
_value_length(0),
_value_buffer(NULL),
_value_updated(false),
_value_handle(0),
_cccd_handle(0),
_attr_chrc_value(NULL),
_attr_cccd(NULL),
_subscribed(false),
_reading(false),
_ble_device()
{
unsigned char properties = characteristic._properties;
_value_size = characteristic._value_size;
_value = (unsigned char*)malloc(_value_size);
if (_value == NULL)
{
errno = ENOMEM;
}
if (_value_size > BLE_MAX_ATTR_DATA_LEN)
{
_value_buffer = (unsigned char*)malloc(_value_size);
}
memset(&_ccc_cfg, 0, sizeof(_ccc_cfg));
memset(&_ccc_value, 0, sizeof(_ccc_value));
memset(&_gatt_chrc, 0, sizeof(_gatt_chrc));
memset(&_sub_params, 0, sizeof(_sub_params));
memset(&_discover_params, 0, sizeof(_discover_params));
_ccc_value.cfg = &_ccc_cfg;
_ccc_value.cfg_len = 1;
if (BLERead & properties)
{
_gatt_chrc.properties |= BT_GATT_CHRC_READ;
}
if (BLEWrite & properties)
{
_gatt_chrc.properties |= BT_GATT_CHRC_WRITE;
}
if (BLEWriteWithoutResponse & properties)
{
_gatt_chrc.properties |= BT_GATT_CHRC_WRITE_WITHOUT_RESP;
}
if (BLENotify & properties)
{
_gatt_chrc.properties |= BT_GATT_CHRC_NOTIFY;
_sub_params.value |= BT_GATT_CCC_NOTIFY;
}
if (BLEIndicate & properties)
{
_gatt_chrc.properties |= BT_GATT_CHRC_INDICATE;
_sub_params.value |= BT_GATT_CCC_INDICATE;
}
_gatt_chrc.uuid = (bt_uuid_t*)this->bt_uuid();//&_characteristic_uuid;//this->uuid();
memcpy(_event_handlers, characteristic._event_handlers, sizeof(_event_handlers));
memcpy(_oldevent_handlers, characteristic._oldevent_handlers, sizeof(_oldevent_handlers));
_sub_params.notify = profile_notify_process;
if (NULL != characteristic._value)
{
memcpy(_value, characteristic._value, _value_size);
}
// Update BLE device object
_ble_device.setAddress(*bledevice.bt_le_address());
characteristic.setBLECharacteristicImp(this);
memset(&_descriptors_header, 0, sizeof(_descriptors_header));
}
示例11: sd_softdevice_enable
//.........这里部分代码省略.........
BLEUuid uuid = BLEUuid(localAttribute->uuid());
const unsigned char* uuidData = uuid.data();
unsigned char value[255];
ble_uuid_t nordicUUID;
if (uuid.length() == 2) {
nordicUUID.uuid = (uuidData[1] << 8) | uuidData[0];
nordicUUID.type = BLE_UUID_TYPE_BLE;
} else {
unsigned char uuidDataTemp[16];
memcpy(&uuidDataTemp, uuidData, sizeof(uuidDataTemp));
nordicUUID.uuid = (uuidData[13] << 8) | uuidData[12];
uuidDataTemp[13] = 0;
uuidDataTemp[12] = 0;
sd_ble_uuid_vs_add((ble_uuid128_t*)&uuidDataTemp, &nordicUUID.type);
}
if (localAttribute->type() == BLETypeService) {
BLEService *service = (BLEService *)localAttribute;
if (strcmp(service->uuid(), "1800") == 0 || strcmp(service->uuid(), "1801") == 0) {
continue; // skip
}
sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &nordicUUID, &handle);
lastService = service;
} else if (localAttribute->type() == BLETypeCharacteristic) {
BLECharacteristic *characteristic = (BLECharacteristic *)localAttribute;
if (strcmp(characteristic->uuid(), "2a00") == 0) {
ble_gap_conn_sec_mode_t secMode;
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&secMode); // no security is needed
sd_ble_gap_device_name_set(&secMode, characteristic->value(), characteristic->valueLength());
} else if (strcmp(characteristic->uuid(), "2a01") == 0) {
const uint16_t *appearance = (const uint16_t*)characteristic->value();
sd_ble_gap_appearance_set(*appearance);
} else if (strcmp(characteristic->uuid(), "2a05") == 0) {
// do nothing
} else {
uint8_t properties = characteristic->properties() & 0xfe;
uint16_t valueLength = characteristic->valueLength();
this->_localCharacteristicInfo[localCharacteristicIndex].characteristic = characteristic;
this->_localCharacteristicInfo[localCharacteristicIndex].notifySubscribed = false;
this->_localCharacteristicInfo[localCharacteristicIndex].indicateSubscribed = false;
this->_localCharacteristicInfo[localCharacteristicIndex].service = lastService;
ble_gatts_char_md_t characteristicMetaData;
ble_gatts_attr_md_t clientCharacteristicConfigurationMetaData;
ble_gatts_attr_t characteristicValueAttribute;
ble_gatts_attr_md_t characteristicValueAttributeMetaData;
memset(&characteristicMetaData, 0, sizeof(characteristicMetaData));
memcpy(&characteristicMetaData.char_props, &properties, 1);
characteristicMetaData.p_char_user_desc = NULL;
characteristicMetaData.p_char_pf = NULL;
示例12: BLEDeviceCharacteristicValueChanged
void BLEPeripheral::BLEDeviceCharacteristicValueChanged(BLEDevice& device, BLECharacteristic& characteristic, const unsigned char* value, unsigned char valueLength) {
characteristic.setValue(this->_central, value, valueLength);
}
示例13: BLEDeviceCharacteristicSubscribedChanged
void BLEPeripheral::BLEDeviceCharacteristicSubscribedChanged(BLEDevice& device, BLECharacteristic& characteristic, bool subscribed) {
characteristic.setSubscribed(this->_central, subscribed);
}
示例14: _received
void BLESerial::_received(BLECentral& /*central*/, BLECharacteristic& rxCharacteristic) {
BLESerial::_instance->_received(rxCharacteristic.value(), rxCharacteristic.valueLength());
}
示例15: BLEUuid
void BLEPeripheral::begin() {
unsigned char advertisementDataType = 0;
unsigned char scanDataType = 0;
unsigned char advertisementDataLength = 0;
unsigned char scanDataLength = 0;
unsigned char advertisementData[BLE_ADVERTISEMENT_DATA_MAX_VALUE_LENGTH];
unsigned char scanData[BLE_SCAN_DATA_MAX_VALUE_LENGTH];
if (this->_serviceSolicitationUuid){
BLEUuid serviceSolicitationUuid = BLEUuid(this->_serviceSolicitationUuid);
advertisementDataLength = serviceSolicitationUuid.length();
advertisementDataType = (advertisementDataLength > 2) ? 0x15 : 0x14;
memcpy(advertisementData, serviceSolicitationUuid.data(), advertisementDataLength);
} else if (this->_advertisedServiceUuid){
BLEUuid advertisedServiceUuid = BLEUuid(this->_advertisedServiceUuid);
advertisementDataLength = advertisedServiceUuid.length();
advertisementDataType = (advertisementDataLength > 2) ? 0x06 : 0x02;
memcpy(advertisementData, advertisedServiceUuid.data(), advertisementDataLength);
} else if (this->_manufacturerData && this->_manufacturerDataLength > 0) {
advertisementDataLength = this->_manufacturerDataLength;
if (advertisementDataLength > sizeof(advertisementData)) {
advertisementDataLength = sizeof(advertisementData);
}
advertisementDataType = 0xff;
memcpy(advertisementData, this->_manufacturerData, advertisementDataLength);
}
if (this->_localName){
unsigned char localNameLength = strlen(this->_localName);
scanDataLength = localNameLength;
if (scanDataLength > sizeof(scanData)) {
scanDataLength = sizeof(scanData);
}
scanDataType = (localNameLength > scanDataLength) ? 0x08 : 0x09;
memcpy(scanData, this->_localName, scanDataLength);
}
if (this->_localAttributes == NULL) {
this->initLocalAttributes();
}
for (int i = 0; i < this->_numLocalAttributes; i++) {
BLELocalAttribute* localAttribute = this->_localAttributes[i];
if (localAttribute->type() == BLETypeCharacteristic) {
BLECharacteristic* characteristic = (BLECharacteristic*)localAttribute;
characteristic->setValueChangeListener(*this);
}
}
for (int i = 0; i < this->_numRemoteAttributes; i++) {
BLERemoteAttribute* remoteAttribute = this->_remoteAttributes[i];
if (remoteAttribute->type() == BLETypeCharacteristic) {
BLERemoteCharacteristic* remoteCharacteristic = (BLERemoteCharacteristic*)remoteAttribute;
remoteCharacteristic->setValueChangeListener(*this);
}
}
if (this->_numRemoteAttributes) {
this->addRemoteAttribute(this->_remoteGenericAttributeService);
this->addRemoteAttribute(this->_remoteServicesChangedCharacteristic);
}
this->_device->begin(advertisementDataType, advertisementDataLength, advertisementData,
scanDataType, scanDataLength, scanData,
this->_localAttributes, this->_numLocalAttributes,
this->_remoteAttributes, this->_numRemoteAttributes);
this->_device->requestAddress();
}