Skip to content

Commit

Permalink
fixup! Migrate device provisioning service
Browse files Browse the repository at this point in the history
  • Loading branch information
Danielius1922 committed Sep 4, 2024
1 parent f7dac75 commit 8f5ea68
Show file tree
Hide file tree
Showing 22 changed files with 2,399 additions and 74 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/cmake-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ jobs:
- args: "-DOC_IPV4_ENABLED=ON -DOC_TCP_ENABLED=ON -DOC_PKI_ENABLED=OFF"
# cloud on (ipv4+tcp on), dynamic allocation off, push notifications off
- args: "-DOC_CLOUD_ENABLED=ON -DOC_DYNAMIC_ALLOCATION_ENABLED=OFF -DOC_PUSH_ENABLED=OFF"
# cloud on (ipv4+tcp on), collections create on, oscore off, device provisioning on
- args: "-DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_OSCORE_ENABLED=OFF -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON"
# cloud on (ipv4+tcp on), collections create on
- args: "-DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON"
# cloud on (ipv4+tcp on), collections create on, custom message buffer size, custom message buffer pool size, custom app data buffer size, custom app data buffer pool size
- args: "-DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_INOUT_BUFFER_SIZE=2048 -DOC_INOUT_BUFFER_POOL=4 -DOC_APP_DATA_BUFFER_SIZE=2048 -DOC_APP_DATA_BUFFER_POOL=4"
# debug on
- args: "-DOC_DEBUG_ENABLED=ON"
# debug on, cloud on (ipv4+tcp on)
# debug on, cloud on (ipv4+tcp on), plgd time off
- args: "-DOC_CLOUD_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=OFF -DOC_DEBUG_ENABLED=ON"
# secure off, tcp on
- args: "-DOC_SECURITY_ENABLED=OFF -DOC_TCP_ENABLED=ON"
Expand Down Expand Up @@ -138,7 +138,7 @@ jobs:
# install_faketime: true
uses: ./.github/workflows/unit-test-with-cfg.yml
with:
build_args: -DOC_LOG_MAXIMUM_LOG_LEVEL=INFO -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_DISCOVERY_RESOURCE_OBSERVABLE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=ON -DOC_ETAG_ENABLED=ON ${{ matrix.args }}
build_args: -DOC_LOG_MAXIMUM_LOG_LEVEL=INFO -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_DISCOVERY_RESOURCE_OBSERVABLE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=ON -DOC_ETAG_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_TEST_PROPERTIES_ENABLED=ON ${{ matrix.args }}
build_type: ${{ (github.event_name == 'workflow_dispatch' && inputs.build_type) || 'Debug' }}
clang: ${{ ((github.event_name == 'workflow_dispatch' && inputs.clang) || matrix.clang) || false }}
coverage: false
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/sonar-cloud-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ concurrency:
cancel-in-progress: ${{ github.ref_name != 'master' }}

on:
# push:
# branches:
# - master
# pull_request:
# types: [opened, synchronize, reopened]
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
Expand All @@ -25,8 +25,8 @@ jobs:
fail-fast: false
matrix:
include:
# cloud (ipv4+tcp) on, collection create on, push on, rfotm on
- build_args: "-DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON"
# cloud (ipv4+tcp) on, collection create on, push on, rfotm on, device provisioning on
- build_args: "-DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_TEST_PROPERTIES_ENABLED=ON"
# security off, ipv4 on, collection create on, push on, max num concurrent requests=1
- build_args: "-DOC_SECURITY_ENABLED=OFF -DOC_IPV4_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_DEVICE_MAX_NUM_CONCURRENT_REQUESTS=1"
# ipv6 dns on, oscore off, rep realloc on, json encoder on, introspection IDD off
Expand Down Expand Up @@ -110,7 +110,7 @@ jobs:
mkdir build && cd build
# sonar-scanner currently cannot handle multi configuration configuration (ie. compilation of the same file with different defines),
# so we enable as many features as possible so we get max. amount of code analysis
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_DISCOVERY_RESOURCE_OBSERVABLE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=ON -DOC_ETAG_ENABLED=ON -DOC_JSON_ENCODER_ENABLED=ON -DBUILD_TESTING=ON ..
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_VERBOSE_MAKEFILE=ON -DOC_CLOUD_ENABLED=ON -DOC_COLLECTIONS_IF_CREATE_ENABLED=ON -DOC_MNT_ENABLED=ON -DOC_WKCORE_ENABLED=ON -DOC_SOFTWARE_UPDATE_ENABLED=ON -DOC_DISCOVERY_RESOURCE_OBSERVABLE_ENABLED=ON -DOC_PUSH_ENABLED=ON -DOC_RESOURCE_ACCESS_IN_RFOTM_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=ON -DOC_ETAG_ENABLED=ON -DOC_JSON_ENCODER_ENABLED=ON -DPLGD_DEV_TIME_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON -DBUILD_TESTING=ON ..
cd ..
# for files defined in multiple cmake targets, sonar-scanner seems to take the configuration from the first compilation of the file,
# so we force client-server target to be compiled first so we get analysis of code with both OC_CLIENT and OC_SERVER enabled
Expand Down Expand Up @@ -138,4 +138,4 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
sonar-scanner --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
sonar-scanner --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json"
3 changes: 1 addition & 2 deletions .github/workflows/static-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ jobs:
fail-fast: false
matrix:
include:
- build_args:
- build_args: -DOC_OSCORE_ENABLED=OFF -DPLGD_DEV_TIME_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON
- build_args: -DPLGD_DEV_TIME_ENABLED=ON -DPLGD_DEV_DEVICE_PROVISIONING_ENABLED=ON
- build_args: -DOC_DYNAMIC_ALLOCATION_ENABLED=OFF -DOC_PUSH_ENABLED=OFF -DOC_JSON_ENCODER_ENABLED=OFF -DOC_DEBUG_ENABLED=ON

runs-on: ubuntu-22.04
Expand Down
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ set(OC_DEVICE_MAX_NUM_CONCURRENT_REQUESTS "" CACHE STRING "Maximum number of mes
# plgd.dev features
set(PLGD_DEV_TIME_ENABLED OFF CACHE BOOL "Enable plgd time feature.")
set(PLGD_DEV_DEVICE_PROVISIONING_ENABLED OFF CACHE BOOL "Enable plgd's device provisioning feature.")
set(PLGD_DEV_DEVICE_PROVISIONING_TEST_PROPERTIES_ENABLED OFF CACHE BOOL "Enable plgd's device provisioning feature's test properties.")

set(OC_ASAN_ENABLED OFF CACHE BOOL "Enable address sanitizer build.")
set(OC_LSAN_ENABLED OFF CACHE BOOL "Enable leak sanitizer build.")
Expand Down Expand Up @@ -427,6 +428,13 @@ if(PLGD_DEV_DEVICE_PROVISIONING_ENABLED)
list(APPEND PUBLIC_COMPILE_DEFINITIONS "PLGD_DEV_DEVICE_PROVISIONING")
endif()

if(PLGD_DEV_DEVICE_PROVISIONING_TEST_PROPERTIES_ENABLED)
list(APPEND PRIVATE_COMPILE_DEFINITIONS "PLGD_DPS_RESOURCE_TEST_PROPERTIES")
if(BUILD_TESTING)
list(APPEND TEST_COMPILE_DEFINITIONS "PLGD_DPS_RESOURCE_TEST_PROPERTIES")
endif()
endif()

if(BUILD_TESTING)
list(APPEND PRIVATE_COMPILE_DEFINITIONS "OC_TEST")
if(BUILD_MBEDTLS)
Expand Down
3 changes: 1 addition & 2 deletions api/plgd/device-provisioning-client/plgd_dps.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,7 @@ dps_ep_session_event_handler(const oc_endpoint_t *endpoint,
DPS_DBG("dps_ep_session_event_handler cloud_state: %d", (int)state);
if (state == OC_SESSION_DISCONNECTED &&
oc_cloud_manager_is_started(cloud_ctx)) {
// TODO
// dps_cloud_observe_status(ctx);
dps_cloud_observe_status(ctx);
}
return;
}
Expand Down
3 changes: 2 additions & 1 deletion api/plgd/device-provisioning-client/plgd_dps_context.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "plgd_dps_resource_internal.h"
#include "plgd_dps_store_internal.h"

#include "api/cloud/oc_cloud_schedule_internal.h"
#include "oc_endpoint.h"
#include "oc_session_events.h"
#include "util/oc_list.h"
Expand Down Expand Up @@ -61,7 +62,7 @@ dps_context_list_add(plgd_dps_context_t *ctx)
}

void
dps_context_list_remove(plgd_dps_context_t *ctx)
dps_context_list_remove(const plgd_dps_context_t *ctx)
{
oc_list_remove(g_dps_context_list, ctx);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ void dps_context_free(plgd_dps_context_t *ctx) OC_NONNULL();
void dps_context_list_add(plgd_dps_context_t *ctx) OC_NONNULL();

/// @brief Remove from global lists of contexts
void dps_context_list_remove(plgd_dps_context_t *ctx) OC_NONNULL();
void dps_context_list_remove(const plgd_dps_context_t *ctx) OC_NONNULL();

/// @brief Check if the global lists of contexts is empty
bool dps_context_list_is_empty(void);
Expand Down
6 changes: 3 additions & 3 deletions api/plgd/device-provisioning-client/plgd_dps_resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ dps_resource_encode_iotivity_retry_timeouts(CborEncoder *encoder,
oc_string_view_t retryKey = OC_STRING_VIEW(PLGD_DPS_TEST_IOTIVITY_RETRY);
g_err |= oc_rep_encode_text_string(encoder, retryKey.data, retryKey.length);
oc_rep_begin_array(encoder, retry);
for (size_t i = 0; i < DPS_ARRAY_SIZE(rtd->iotivity.retry_timeout); ++i) {
for (size_t i = 0; i < OC_ARRAY_SIZE(rtd->iotivity.retry_timeout); ++i) {
if (rtd->iotivity.retry_timeout[i] == 0) {
break;
}
Expand Down Expand Up @@ -278,7 +278,7 @@ dps_resource_encode_response(const plgd_dps_context_t *ctx,
#ifdef PLGD_DPS_RESOURCE_TEST_PROPERTIES
data.test.cloud_status_observer = ctx->cloud_observer.cfg;
oc_cloud_get_retry_timeouts(&data.test.iotivity.retry_timeout[0],
DPS_ARRAY_SIZE(data.test.iotivity.retry_timeout));
OC_ARRAY_SIZE(data.test.iotivity.retry_timeout));
#endif /* PLGD_DPS_RESOURCE_TEST_PROPERTIES */

dps_resource_encode(interface, ctx->conf, &data);
Expand Down Expand Up @@ -311,7 +311,7 @@ dps_update_iotivity(const oc_rep_t *iot)
if (oc_rep_get_int_array(iot, PLGD_DPS_TEST_IOTIVITY_RETRY, &retry,
&retry_size)) {
uint16_t retry_timeout[DPS_CLOUD_RETRY_TIMEOUTS_SIZE] = { 0 };
for (size_t i = 0; i < retry_size && i < DPS_ARRAY_SIZE(retry_timeout);
for (size_t i = 0; i < retry_size && i < OC_ARRAY_SIZE(retry_timeout);
++i) {
retry_timeout[i] = (uint16_t)retry[i];
}
Expand Down
3 changes: 1 addition & 2 deletions api/plgd/device-provisioning-client/plgd_dps_retry.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ plgd_dps_set_retry_configuration(plgd_dps_context_t *ctx, const uint8_t cfg[],
size_t cfg_size)
{
assert(ctx != NULL);
if (cfg == NULL || cfg_size == 0 ||
cfg_size > PLGD_DPS_MAX_RETRY_VALUES_SIZE) {
if (cfg_size == 0 || cfg_size > PLGD_DPS_MAX_RETRY_VALUES_SIZE) {
return false;
}

Expand Down
74 changes: 35 additions & 39 deletions api/plgd/device-provisioning-client/plgd_dps_store.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,14 @@
#endif

#define DPS_STORE_NAME "dps"
#define DPS_STORE_ENDPOINT ep
#define DPS_STORE_ENDPOINT_NAME epname
#define DPS_STORE_ENDPOINTS eps
#define DPS_STORE_ENDPOINTS_URI uri
#define DPS_STORE_ENDPOINTS_NAME name
#define DPS_STORE_OWNER owner
#define DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET hasBeenProvisionedSinceReset

#define DPS_STR(s) #s
#define DPS_XSTR(s) DPS_STR(s)
#define DPS_XSTRING_VIEW(s) OC_STRING_VIEW(DPS_XSTR(s))
#define DPS_STORE_ENDPOINT "ep"
#define DPS_STORE_ENDPOINT_NAME "epname"
#define DPS_STORE_ENDPOINTS "eps"
#define DPS_STORE_ENDPOINTS_URI "uri"
#define DPS_STORE_ENDPOINTS_NAME "name"
#define DPS_STORE_OWNER "owner"
#define DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET \
"hasBeenProvisionedSinceReset"

// NOLINTNEXTLINE(modernize-*)
#define DPS_TAG_MAX (32)
Expand Down Expand Up @@ -108,8 +105,8 @@ dps_store_set_endpoints(plgd_dps_store_t *store,

for (const oc_rep_t *ep = endpoints; ep != NULL; ep = ep->next) {
const oc_rep_t *rep = oc_rep_get_by_type_and_key(
ep->value.object, OC_REP_STRING, DPS_XSTR(DPS_STORE_ENDPOINTS_URI),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_ENDPOINTS_URI)));
ep->value.object, OC_REP_STRING, DPS_STORE_ENDPOINTS_URI,
OC_CHAR_ARRAY_LEN(DPS_STORE_ENDPOINTS_URI));
if (rep == NULL) {
DPS_ERR("[DPS_STORE] invalid endpoint element: uri missing");
continue;
Expand All @@ -118,8 +115,8 @@ dps_store_set_endpoints(plgd_dps_store_t *store,

oc_string_view_t name = OC_STRING_VIEW_NULL;
rep = oc_rep_get_by_type_and_key(
ep->value.object, OC_REP_STRING, DPS_XSTR(DPS_STORE_ENDPOINTS_NAME),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_ENDPOINTS_NAME)));
ep->value.object, OC_REP_STRING, DPS_STORE_ENDPOINTS_NAME,
OC_CHAR_ARRAY_LEN(DPS_STORE_ENDPOINTS_NAME));
if (rep != NULL) {
name = oc_string_view2(&rep->value.string);
}
Expand Down Expand Up @@ -158,32 +155,29 @@ dps_store_decode(const oc_rep_t *rep, plgd_dps_store_t *store)

for (const oc_rep_t *store_rep = rep; store_rep != NULL;
store_rep = store_rep->next) {
if (dps_is_property(store_rep, OC_REP_OBJECT_ARRAY,
DPS_XSTR(DPS_STORE_ENDPOINTS),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_ENDPOINTS)))) {
if (dps_is_property(store_rep, OC_REP_OBJECT_ARRAY, DPS_STORE_ENDPOINTS,
OC_CHAR_ARRAY_LEN(DPS_STORE_ENDPOINTS))) {
dsd.endpoints = store_rep->value.object_array;
continue;
}
if (dps_is_property(store_rep, OC_REP_STRING, DPS_XSTR(DPS_STORE_ENDPOINT),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_ENDPOINT)))) {
if (dps_is_property(store_rep, OC_REP_STRING, DPS_STORE_ENDPOINT,
OC_CHAR_ARRAY_LEN(DPS_STORE_ENDPOINT))) {
dsd.endpoint = &store_rep->value.string;
continue;
}
if (dps_is_property(store_rep, OC_REP_STRING,
DPS_XSTR(DPS_STORE_ENDPOINT_NAME),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_ENDPOINT_NAME)))) {
if (dps_is_property(store_rep, OC_REP_STRING, DPS_STORE_ENDPOINT_NAME,
OC_CHAR_ARRAY_LEN(DPS_STORE_ENDPOINT_NAME))) {
dsd.endpoint_name = &store_rep->value.string;
continue;
}
if (dps_is_property(store_rep, OC_REP_STRING, DPS_XSTR(DPS_STORE_OWNER),
OC_CHAR_ARRAY_LEN(DPS_XSTR(DPS_STORE_OWNER)))) {
if (dps_is_property(store_rep, OC_REP_STRING, DPS_STORE_OWNER,
OC_CHAR_ARRAY_LEN(DPS_STORE_OWNER))) {
dsd.owner = &store_rep->value.string;
continue;
}
if (dps_is_property(store_rep, OC_REP_BOOL,
DPS_XSTR(DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET),
OC_CHAR_ARRAY_LEN(DPS_XSTR(
DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET)))) {
if (dps_is_property(
store_rep, OC_REP_BOOL, DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET,
OC_CHAR_ARRAY_LEN(DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET))) {
dsd.has_been_provisioned_since_reset = &store_rep->value.boolean;
continue;
}
Expand Down Expand Up @@ -239,11 +233,12 @@ dps_store_get_storage(size_t device, uint8_t *buffer, size_t buffer_size)

static void
dps_store_rep_set_text_string(CborEncoder *object_map, const char *key,
const char *value)
size_t key_len, const char *value,
size_t value_len)
{
g_err |= oc_rep_encode_text_string(object_map, key, strlen(key));
g_err |= oc_rep_encode_text_string(object_map, key, key_len);
if (value != NULL) {
g_err |= oc_rep_encode_text_string(object_map, value, strlen(value));
g_err |= oc_rep_encode_text_string(object_map, value, value_len);
} else {
g_err |= oc_rep_encode_text_string(object_map, "", 0);
}
Expand All @@ -264,18 +259,19 @@ dps_store_encode_with_map(CborEncoder *object_map,
const oc_endpoint_address_t *selected =
oc_endpoint_addresses_selected(&store->endpoints);
if (selected != NULL) {
oc_endpoint_address_encode(object_map, DPS_XSTRING_VIEW(DPS_STORE_ENDPOINT),
oc_endpoint_address_encode(object_map, OC_STRING_VIEW(DPS_STORE_ENDPOINT),
OC_STRING_VIEW_NULL,
DPS_XSTRING_VIEW(DPS_STORE_ENDPOINT_NAME),
OC_STRING_VIEW(DPS_STORE_ENDPOINT_NAME),
oc_endpoint_address_view(selected));
}
g_err |= oc_endpoint_addresses_encode(
object_map, &store->endpoints, DPS_XSTRING_VIEW(DPS_STORE_ENDPOINTS), true);
dps_store_rep_set_text_string(object_map, DPS_XSTR(DPS_STORE_OWNER),
oc_string(store->owner));
object_map, &store->endpoints, OC_STRING_VIEW(DPS_STORE_ENDPOINTS), true);
dps_store_rep_set_text_string(
object_map, DPS_STORE_OWNER, OC_CHAR_ARRAY_LEN(DPS_STORE_OWNER),
oc_string(store->owner), oc_string_len(store->owner));
dps_store_rep_set_bool(
object_map, DPS_XSTR(DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET),
sizeof(DPS_XSTR(DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET)) - 1,
object_map, DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET,
OC_CHAR_ARRAY_LEN(DPS_STORE_HAS_BEEN_PROVISIONED_SINCE_RESET),
store->has_been_provisioned_since_reset);
}

Expand Down
Loading

0 comments on commit 8f5ea68

Please sign in to comment.