blob: 9b1067351e18b42d24f19bd4e8e911a553ea160d [file] [log] [blame]
/*
*
* Copyright (c) 2015-2017 Nest Labs, Inc.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file
* This file defines default compile-time configuration constants
* for the Nest Weave Data Management (WDM) profile.
*
*/
#ifndef _WEAVE_DATA_MANAGEMENT_CONFIG_H
#define _WEAVE_DATA_MANAGEMENT_CONFIG_H
/**
* @def WEAVE_CONFIG_WDM_ALLOW_CLIENT_LEGACY_MESSAGE_TYPES
*
* @brief
* Allow or disallow subscription on WDM clients.
*
* Between WDM 1.2 and WDM 2.0 there was a global revision of the
* message types in order to support changes in message format. For
* some time in the future, certain application - e.g., Amber - will
* require limited support for the old message types as well.
*/
#ifndef WEAVE_CONFIG_WDM_ALLOW_CLIENT_LEGACY_MESSAGE_TYPES
#define WEAVE_CONFIG_WDM_ALLOW_CLIENT_LEGACY_MESSAGE_TYPES 1
#endif
/**
* @def WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_LEGACY_MESSAGE_TYPES
*
* @brief
* Allow or disallow subscription on WDM publishers.
*
* Between WDM 1.2 and WDM 2.0 there was a global revision of the
* message types in order to support changes in message format. For
* some time in the future, certain application - e.g., Amber - will
* require limited support for the old message types as well.
*/
#ifndef WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_LEGACY_MESSAGE_TYPES
#define WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_LEGACY_MESSAGE_TYPES 1
#endif
/**
* @def WEAVE_CONFIG_WDM_ALLOW_CLIENT_SUBSCRIPTION
*
* @brief
* Allow or disallow subscription on WDM clients.
*
* For clients with constrained resources, there may be no reason to
* set up a subscription table. Subscription is enabled by default but
* may be disabled in the project config file.
*/
#ifndef WEAVE_CONFIG_WDM_ALLOW_CLIENT_SUBSCRIPTION
#define WEAVE_CONFIG_WDM_ALLOW_CLIENT_SUBSCRIPTION 1
#endif
/**
* @def WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_SUBSCRIPTION
*
* @brief
* Allow or disallow subscription on WDM publishers.
*
* For publishers with constrained resources, there may be no reason
* to set up a subscription table. Subscription is enabled by default
* but may be disabled in the project config file.
*/
#ifndef WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_SUBSCRIPTION
#define WEAVE_CONFIG_WDM_ALLOW_PUBLISHER_SUBSCRIPTION 1
#endif
/*
* the protocol engine maintains a group of pools to keep track of
* state in protocol exchanges. here are the sizes.
*/
/**
* @def WEAVE_CONFIG_WDM_VIEW_POOL_SIZE
*
* @brief
* The default size of the view transaction pool in DMClient.
*/
#ifndef WEAVE_CONFIG_WDM_VIEW_POOL_SIZE
#define WEAVE_CONFIG_WDM_VIEW_POOL_SIZE 2
#endif
/**
* @def WEAVE_CONFIG_WDM_SUBSCRIBE_POOL_SIZE
*
* @brief
* The default size of the subscribe transaction pool in DMClient.
*/
#ifndef WEAVE_CONFIG_WDM_SUBSCRIBE_POOL_SIZE
#define WEAVE_CONFIG_WDM_SUBSCRIBE_POOL_SIZE 2
#endif
/**
* @def WEAVE_CONFIG_WDM_CANCEL_SUBSCRIPTION_POOL_SIZE
*
* @brief
* The default size of the cancel subscription transaction pool in
* DMClient.
*/
#ifndef WEAVE_CONFIG_WDM_CANCEL_SUBSCRIPTION_POOL_SIZE
#define WEAVE_CONFIG_WDM_CANCEL_SUBSCRIPTION_POOL_SIZE 2
#endif
/**
* @def WEAVE_CONFIG_WDM_UPDATE_POOL_SIZE
*
* @brief
* The default size of the update transaction pool in DMClient.
*/
#ifndef WEAVE_CONFIG_WDM_UPDATE_POOL_SIZE
#define WEAVE_CONFIG_WDM_UPDATE_POOL_SIZE 2
#endif
/**
* @def WEAVE_CONFIG_WDM_NOTIFY_POOL_SIZE
*
* @brief
* The default size of the cancel subscription pool in DMPublisher.
*/
#ifndef WEAVE_CONFIG_WDM_NOTIFY_POOL_SIZE
#define WEAVE_CONFIG_WDM_NOTIFY_POOL_SIZE 2
#endif
/*
* and here is the related size of the transaction table and binding
* table managed by ProtocolEngine objects.
*/
/**
* @def WEAVE_CONFIG_WDM_TRANSACTION_TABLE_SIZE
*
* @brief
* The default size of the transaction table in ProtocolEngine.
*/
#ifndef WEAVE_CONFIG_WDM_TRANSACTION_TABLE_SIZE
#define WEAVE_CONFIG_WDM_TRANSACTION_TABLE_SIZE 2
#endif
/**
* @def WEAVE_CONFIG_WDM_BINDING_TABLE_SIZE
*
* @brief
* The default size of the binding table in ProtocolEngine.
*/
#ifndef WEAVE_CONFIG_WDM_BINDING_TABLE_SIZE
#define WEAVE_CONFIG_WDM_BINDING_TABLE_SIZE 1
#endif
/*
* similarly, the client notifier and publisher subscription manager
* keep subscription tables (with slightly different formats). here
* are the sizes.
*/
/**
* @def WEAVE_CONFIG_WDM_NOTIFIER_TABLE_SIZE
*
* @brief
* The default size of the notification table in the singleton
* ClientNotifier.
*/
#ifndef WEAVE_CONFIG_WDM_NOTIFIER_TABLE_SIZE
#define WEAVE_CONFIG_WDM_NOTIFIER_TABLE_SIZE 8
#endif
/**
* @def WEAVE_CONFIG_WDM_SUBSCRIPTION_MGR_TABLE_SIZE
*
* @brief
* The default size of the subscription table used by DMPublisher.
*/
#ifndef WEAVE_CONFIG_WDM_SUBSCRIPTION_MGR_TABLE_SIZE
#define WEAVE_CONFIG_WDM_SUBSCRIPTION_MGR_TABLE_SIZE 8
#endif
/****************************************************************/
/* WDM Next (under development) */
/****************************************************************/
/**
* @def WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
*
* @brief
* Enable (1) or disable (0) pre-flight schema validation
* for protocol messages used in Weave Data Management Next profile.
*
*/
#ifndef WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
#define WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK 1
#endif // WEAVE_CONFIG_DATA_MANAGEMENT_ENABLE_SCHEMA_CHECK
/**
* @def WDM_MAX_NUM_SUBSCRIPTION_CLIENTS
*
* @brief
* Enable (1) or disable (0) number of active client side
* subscriptions supported by Weave Data Management Next
* profile.
*
*/
#ifndef WDM_MAX_NUM_SUBSCRIPTION_CLIENTS
#define WDM_MAX_NUM_SUBSCRIPTION_CLIENTS 2
#endif // WDM_MAX_NUM_SUBSCRIPTION_CLIENTS
/**
* @def WDM_MAX_NUM_SUBSCRIPTION_HANDLERS
*
* @brief
* Enable (1) or disable (0) number of active publisher side
* subscriptions supported by Weave Data Management Next
* profile.
*
*/
#ifndef WDM_MAX_NUM_SUBSCRIPTION_HANDLERS
#define WDM_MAX_NUM_SUBSCRIPTION_HANDLERS 2
#endif // WDM_MAX_NUM_SUBSCRIPTION_HANDLERS
/**
* @def WDM_ENABLE_SUBSCRIPTION_CANCEL
*
* @brief
* Enable (1) or disable (0) sending/handling cancel request
* in Weave Data Management Next profile.
*
*/
#ifndef WDM_ENABLE_SUBSCRIPTION_CANCEL
#define WDM_ENABLE_SUBSCRIPTION_CANCEL 1
#endif // WDM_ENABLE_SUBSCRIPTION_CANCEL
/**
* @def WDM_PUBLISHER_ENABLE_VIEW
*
* @brief
* Enable (1) or disable (0) handling view request
* in Weave Data Management Next profile.
*
*/
#if WDM_PUBLISHER_ENABLE_VIEW
#error "WDM_PUBLISHER_ENABLE_VIEW is set to 1 but the feature is not yet implemented"
#endif
#ifndef WDM_PUBLISHER_ENABLE_VIEW
#define WDM_PUBLISHER_ENABLE_VIEW 0
#endif // WDM_PUBLISHER_ENABLE_VIEW
/**
* @def WDM_PUBLISHER_MAX_NUM_PATH_GROUPS
*
* @brief
* Sum number of paths, group by trait instance for each subscription,
* in all active subscriptions, on a publisher in Weave Data Management Next profile.
*
*/
#ifndef WDM_PUBLISHER_MAX_NUM_PATH_GROUPS
#define WDM_PUBLISHER_MAX_NUM_PATH_GROUPS 8
#endif // WDM_PUBLISHER_MAX_NUM_PATH_GROUPS
/**
* @def WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES
*
* @brief
* Sum number of non-root paths in all active subscriptions
* on a publisher in Weave Data Management Next profile.
*
*/
#ifndef WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES
#define WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES 1
#endif // WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES
/**
* @def WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES_PER_GROUP
*
* @brief
* Max number of non-root paths to the same trait instance per subscription
* on a publisher in Weave Data Management Next profile.
*
*/
#ifndef WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES_PER_GROUP
#define WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES_PER_GROUP 1
#endif // WDM_PUBLISHER_MAX_NUM_PROPERTY_PATH_HANDLES_PER_GROUP
/**
* @def WEAVE_CONFIG_WDM_PUBLISHER_GRAPH_SOLVER
*
* @brief
* Selects the right solver for the notification engine to use.
* Options:
*
* BasicSolver:
* Enables the basic solver for the notification engine. Use this only
* as a means to test/debug issues with the notification engine, or if you are really
* constrained in flash/ram on your device. The resultant notifications will be very large
* and un-optimal.
*
* IntermediateSolver:
* The nominal solver for most applications. Generates reasonably compact notifies in most
* cases.
*/
#ifndef WEAVE_CONFIG_WDM_PUBLISHER_GRAPH_SOLVER
#define WEAVE_CONFIG_WDM_PUBLISHER_GRAPH_SOLVER IntermediateGraphSolver
#endif
/**
* @def WDM_PUBLISHER_MAX_ITEMS_IN_TRAIT_DIRTY_STORE
*
* @brief
* Determines the maximum number of dirty items that can be stored in the granular trait data
* dirty/delete stores. This is a function of the peak # of handles across all trait instances that can be made dirty
* within any given evaluation cycle.
*/
#ifndef WDM_PUBLISHER_MAX_ITEMS_IN_TRAIT_DIRTY_STORE
#define WDM_PUBLISHER_MAX_ITEMS_IN_TRAIT_DIRTY_STORE 10
#endif
/**
* @def WDM_PUBLISHER_INTERMEDIATE_SOLVER_MAX_MERGE_HANDLE_SET
*
* @brief
* Determines the maximum number of mergeable handles to a parent handle for a notify that can be computed.
* Given most of our traits are flat, this really becomes a function of the peak # of dirty handles within a trait instance
* that can be made dirty within any given evaluation cycle.
*
*/
#ifndef WDM_PUBLISHER_INTERMEDIATE_SOLVER_MAX_MERGE_HANDLE_SET
#define WDM_PUBLISHER_INTERMEDIATE_SOLVER_MAX_MERGE_HANDLE_SET 4
#endif
/**
* @def WDM_PUBLISHER_MAX_NOTIFIES_IN_FLIGHT
*
* @brief
* Controls the maximum number of notifies across all subscriptions that can be in flight at any given time. This might be useful
* to rate-limit the usage of resources on devices where the subscriber pool is large and generating notifies to all of them at the same
* time can overwhelm resources on the device or induce congestion in the network.
*
*/
#ifndef WDM_PUBLISHER_MAX_NOTIFIES_IN_FLIGHT
#define WDM_PUBLISHER_MAX_NOTIFIES_IN_FLIGHT 4
#endif
/**
* The auto-generated schema tables key off this define to enable/disable certain fields in the tables. Enable this for now, but remove this define
* once it has been similarly removed from the auto-generated code since all products are expected to need dictionary support, so the savings in flash/ram
* by keeping dictionary support out is not needed.
*/
#ifndef TDM_DICTIONARY_SUPPORT
#define TDM_DICTIONARY_SUPPORT 1
#endif
/**
* This controls whether publisher support for dictionaries is compiled in to TDM. If this is not enabled, you will not be able to support publishing dictionaries
* on devices. This is enabled by default, so its important that platforms don't desire this disable it to get significant flash savings.
*/
#ifndef TDM_ENABLE_PUBLISHER_DICTIONARY_SUPPORT
#define TDM_ENABLE_PUBLISHER_DICTIONARY_SUPPORT 1
#endif
/**
* @def WDM_PUBLISHER_ENABLE_CUSTOM_COMMANDS
*
* @brief
* Enable (1) or disable (0) custom command handler support
* in Weave Data Management Next profile. This feature is
* optional and could be disabled, for example, to save code space.
*
*/
#ifndef WDM_PUBLISHER_ENABLE_CUSTOM_COMMANDS
#define WDM_PUBLISHER_ENABLE_CUSTOM_COMMANDS 1
#endif
#if WDM_PUBLISHER_ENABLE_CUSTOM_COMMANDS
#ifndef WDM_MAX_NUM_COMMAND_OBJECTS
#define WDM_MAX_NUM_COMMAND_OBJECTS (WDM_MAX_NUM_SUBSCRIPTION_HANDLERS)
#endif // WDM_MAX_NUM_COMMAND_OBJECTS
#endif // WDM_PUBLISHER_ENABLE_CUSTOM_COMMANDS
/**
* @def WDM_ENABLE_SUBSCRIPTION_PUBLISHER
*
* @brief
* Enable (1) or disable (0) publisher support
* in Weave Data Management Next profile.
*
*/
#if WDM_MAX_NUM_SUBSCRIPTION_HANDLERS > 0
#define WDM_ENABLE_SUBSCRIPTION_PUBLISHER 1
#else
#define WDM_ENABLE_SUBSCRIPTION_PUBLISHER 0
#endif // WDM_MAX_NUM_SUBSCRIPTION_HANDLERS > 0
/**
* @def WDM_ENABLE_SUBSCRIPTION_CLIENT
*
* @brief
* Enable (1) or disable (0) subscription client role support
* in Weave Data Management Next profile.
*
*/
#if WDM_MAX_NUM_SUBSCRIPTION_CLIENTS > 0
#define WDM_ENABLE_SUBSCRIPTION_CLIENT 1
#else
#define WDM_ENABLE_SUBSCRIPTION_CLIENT 0
#endif // WDM_MAX_NUM_SUBSCRIPTION_CLIENTS > 0
/**
* @def WDM_MAX_NOTIFICATION_SIZE
*
* @brief
* Specify the maximum size (in bytes) of a WDM notification
* payload. Note that the WDM notification payload is also limited
* by the size of `nl::Weave::System::PacketBuffer`
*/
#ifndef WDM_MAX_NOTIFICATION_SIZE
#define WDM_MAX_NOTIFICATION_SIZE 2048
#endif /* WDM_MAX_NOTIFICATION_SIZE */
/**
* @def TDM_DISABLE_STRICT_SCHEMA_COMPLIANCE
*
* @brief
* Disables strict compliance to trait schemas to allow
* rapid development when schemas are prone to a high
* rate of change
*
*/
#ifndef TDM_DISABLE_STRICT_SCHEMA_COMPLIANCE
#define TDM_DISABLE_STRICT_SCHEMA_COMPLIANCE 1
#endif
/**
* @def WDM_ENABLE_PROTOCOL_CHECKS
*
* @brief
* Enables aggressive checking of inbound data
* to ensure its compliant against the latest WDM protocol specification
*
*/
#ifndef WDM_ENABLE_PROTOCOL_CHECKS
#define WDM_ENABLE_PROTOCOL_CHECKS 1
#endif
/**
* @def WDM_ENFORCE_EXPIRY_TIME
*
* @brief
* Enables cecking the expiry time of WDM commands
* before the command is handed over to the application.
*/
#ifndef WDM_ENFORCE_EXPIRY_TIME
#define WDM_ENFORCE_EXPIRY_TIME 0
#endif
/**
* @def WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS
*
* @brief
* If auto resubscribe is enabled & default resubscription policy is used,
* specify the max wait time.
* This value was chosen so that the average wait time is 3600000
* ((100 - WDM_RESUBSCRIBE_MIN_WAIT_TIME_INTERVAL_PERCENT_PER_STEP) % of WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS) / 2 +
* (WDM_RESUBSCRIBE_MIN_WAIT_TIME_INTERVAL_PERCENT_PER_STEP % of WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS) = average wait is 3600000
*/
#ifndef WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS
#define WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS 5538000
#endif
/**
* @def WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX
*
* @brief
* If auto resubscribe is enabled & default resubscription policy is used,
* specify the max fibonacci step index.
* This index must satisfy below conditions:
* 1 . Fibonacci(WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX + 1) * WDM_RESUBSCRIBE_WAIT_TIME_MULTIPLIER_MS > WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS
* 2 . Fibonacci(WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX) * WDM_RESUBSCRIBE_WAIT_TIME_MULTIPLIER_MS < WDM_RESUBSCRIBE_MAX_RETRY_WAIT_INTERVAL_MS
*
*/
#ifndef WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX
#define WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX 14
#endif
/**
* @def WDM_RESUBSCRIBE_MIN_WAIT_TIME_INTERVAL_PERCENT_PER_STEP
*
* @brief
* If auto resubscribe is enabled & default resubscription policy is used,
* specify the minimum wait
* time as a percentage of the max wait interval for that step.
*
*/
#ifndef WDM_RESUBSCRIBE_MIN_WAIT_TIME_INTERVAL_PERCENT_PER_STEP
#define WDM_RESUBSCRIBE_MIN_WAIT_TIME_INTERVAL_PERCENT_PER_STEP 30
#endif
/**
* @def WDM_RESUBSCRIBE_WAIT_TIME_MULTIPLIER_MS
*
* @brief
* If auto resubscribe is enabled & default resubscription policy is used,
* specify the multiplier that multiplies the result of a fibonacci computation
* based on a specific index to provide a max wait time for
* a step.
*
*/
#ifndef WDM_RESUBSCRIBE_WAIT_TIME_MULTIPLIER_MS
#define WDM_RESUBSCRIBE_WAIT_TIME_MULTIPLIER_MS 10000
#endif
#endif // _WEAVE_DATA_MANAGEMENT_CONFIG_H