Skip to content

Add BLEPermission Support to BLEStringCharacteristic #390

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions extras/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,17 @@ set(TEST_TARGET_ADVERTISING_DATA_SRCS
src/test_advertising_data/FakeBLELocalDevice.cpp
)

set(TEST_TARGET_CHARACTERISTIC_SRCS
# Test files
${COMMON_TEST_SRCS}
src/test_characteristic/test_permissions.cpp
# DUT files
${DUT_SRCS}
# Fake classes files
src/util/HCIFakeTransport.cpp
src/test_advertising_data/FakeBLELocalDevice.cpp
)

##########################################################################

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "--coverage")
Expand All @@ -106,6 +117,7 @@ set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "--coverage")
add_executable(TEST_TARGET_UUID ${TEST_TARGET_UUID_SRCS})
add_executable(TEST_TARGET_DISC_DEVICE ${TEST_TARGET_DISC_DEVICE_SRCS})
add_executable(TEST_TARGET_ADVERTISING_DATA ${TEST_TARGET_ADVERTISING_DATA_SRCS})
add_executable(TEST_TARGET_CHARACTERISTIC_DATA ${TEST_TARGET_CHARACTERISTIC_SRCS})

##########################################################################

Expand All @@ -118,11 +130,13 @@ include_directories(../../src/utility)

target_include_directories(TEST_TARGET_DISC_DEVICE PUBLIC include/test_discovered_device)
target_include_directories(TEST_TARGET_ADVERTISING_DATA PUBLIC include/test_advertising_data)
target_include_directories(TEST_TARGET_CHARACTERISTIC_DATA PUBLIC include/test_advertising_data)

##########################################################################

target_compile_definitions(TEST_TARGET_DISC_DEVICE PUBLIC FAKE_GAP)
target_compile_definitions(TEST_TARGET_ADVERTISING_DATA PUBLIC FAKE_BLELOCALDEVICE)
target_compile_definitions(TEST_TARGET_CHARACTERISTIC_DATA PUBLIC FAKE_BLELOCALDEVICE)

##########################################################################

Expand All @@ -137,6 +151,13 @@ add_custom_command(TARGET TEST_TARGET_ADVERTISING_DATA POST_BUILD
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/TEST_TARGET_ADVERTISING_DATA
)

add_custom_command(TARGET TEST_TARGET_CHARACTERISTIC_DATA POST_BUILD
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/TEST_TARGET_CHARACTERISTIC_DATA
)

##########################################################################

target_link_libraries( TEST_TARGET_UUID Catch2WithMain )
target_link_libraries( TEST_TARGET_DISC_DEVICE Catch2WithMain )
target_link_libraries( TEST_TARGET_ADVERTISING_DATA Catch2WithMain )
target_link_libraries( TEST_TARGET_CHARACTERISTIC_DATA Catch2WithMain )
126 changes: 126 additions & 0 deletions extras/test/src/test_characteristic/test_permissions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
/*
This file is part of the ArduinoBLE library.
Copyright (c) 2018 Arduino SA. All rights reserved.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include <catch2/catch_test_macros.hpp>

#define private public
#define protected public

#include "FakeBLELocalDevice.h"
#include "BLEAdvertisingData.h"
#include "BLETypedCharacteristics.h"
#include "BLELocalCharacteristic.h"
#include "BLEStringCharacteristic.h"
#include "BLEProperty.h"
#include <memory>

int property[] = {
BLEBroadcast,
BLERead,
BLEWriteWithoutResponse,
BLEWrite,
BLENotify,
BLEIndicate,
BLEAuthSignedWrite,
BLEExtProp,
BLERead | BLEWrite | BLENotify
};

int permission[] = {
BLEEncryption,
BLEAuthentication,
BLEAuthorization,
BLEEncryption | BLEAuthentication
};

const char uuid[][31] = {
"1 Bool",
"2 Char",
"3 UnsignedChar",
"4 Byte",
"5 Short",
"6 UnsignedShort",
"7 Word",
"8 Int",
"9 UnsignedInt",
"A Long",
"B UnsignedLong",
"C Float",
"D Double",
"E String"
};

std::unique_ptr<BLECharacteristic> createCharacteristic(const char* uuid, unsigned int properties)
{
switch(uuid[0])
{
case '1':
return std::unique_ptr<BLECharacteristic>(new BLEBoolCharacteristic(uuid, properties));
case '2':
return std::unique_ptr<BLECharacteristic>(new BLECharCharacteristic(uuid, properties));
case '3':
return std::unique_ptr<BLECharacteristic>(new BLEUnsignedCharCharacteristic(uuid, properties));
case '4':
return std::unique_ptr<BLECharacteristic>(new BLEByteCharacteristic(uuid, properties));
case '5':
return std::unique_ptr<BLECharacteristic>(new BLEShortCharacteristic(uuid, properties));
case '6':
return std::unique_ptr<BLECharacteristic>(new BLEUnsignedShortCharacteristic(uuid, properties));
case '7':
return std::unique_ptr<BLECharacteristic>(new BLEWordCharacteristic(uuid, properties));
case '8':
return std::unique_ptr<BLECharacteristic>(new BLEIntCharacteristic(uuid, properties));
case '9':
return std::unique_ptr<BLECharacteristic>(new BLEUnsignedIntCharacteristic(uuid, properties));
case 'A':
return std::unique_ptr<BLECharacteristic>(new BLELongCharacteristic(uuid, properties));
case 'B':
return std::unique_ptr<BLECharacteristic>(new BLEUnsignedLongCharacteristic(uuid, properties));
case 'C':
return std::unique_ptr<BLECharacteristic>(new BLEFloatCharacteristic(uuid, properties));
case 'D':
return std::unique_ptr<BLECharacteristic>(new BLEDoubleCharacteristic(uuid, properties));
case 'E':
return std::unique_ptr<BLECharacteristic>(new BLEStringCharacteristic(uuid, properties, 2));
default:
break;
}
return nullptr;
}

TEST_CASE("Test characteristic properties and permissions", "[ArduinoBLE::BLECharacteristic]")
{
WHEN("Create a characteristic")
{
for(int i = 0; i < sizeof(property)/sizeof(int); i++)
{
for(int j = 0; j < sizeof(permission)/sizeof(int); j++)
{
for(int k = 0; k < 14; k++)
{
std::unique_ptr<BLECharacteristic> ptr = createCharacteristic(uuid[k], property[i] | permission[j]);
REQUIRE(ptr != nullptr);
REQUIRE(ptr->properties() == (property[i]));
BLELocalCharacteristic * local = ptr->local();
REQUIRE(local->permissions() == (permission[j] >> 8));
}
}
}
}
}
2 changes: 1 addition & 1 deletion src/BLEStringCharacteristic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

#include "BLEStringCharacteristic.h"

BLEStringCharacteristic::BLEStringCharacteristic(const char* uuid, unsigned char properties, int valueSize) :
BLEStringCharacteristic::BLEStringCharacteristic(const char* uuid, unsigned int properties, int valueSize) :
BLECharacteristic(uuid, properties, valueSize)
{
}
Expand Down
2 changes: 1 addition & 1 deletion src/BLEStringCharacteristic.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
class BLEStringCharacteristic : public BLECharacteristic
{
public:
BLEStringCharacteristic(const char* uuid, unsigned char properties, int valueSize);
BLEStringCharacteristic(const char* uuid, unsigned int properties, int valueSize);

int writeValue(const String& value);
int setValue(const String& value) { return writeValue(value); }
Expand Down
Loading