Merge pull request #568 from openweave/feature/fix_linking_issue

Fix linking issue for WeaveSecuritySupport target in Android app
diff --git a/build/nrf5/nrf5-app.mk b/build/nrf5/nrf5-app.mk
index 5e95d11..2304703 100644
--- a/build/nrf5/nrf5-app.mk
+++ b/build/nrf5/nrf5-app.mk
@@ -274,14 +274,14 @@
 flash-softdevice flash_softdevice :
 	@if test -z "$(SOFTDEVICE_IMAGE)"; then echo "SoftDevice image not found in $(SOFTDEVICE_IMAGE_DIR)"; false; fi
 	@echo "FLASH $(SOFTDEVICE_IMAGE)"
-	$(NO_ECHO)$(NRFJPROG) -f nrf52 --program $(SOFTDEVICE_IMAGE) --sectorerase
+	$(NO_ECHO)$(NRFJPROG) $(NRFJPROG_FLAGS) --program $(SOFTDEVICE_IMAGE) --sectorerase
 	@echo "RESET DEVICE"
-	$(NO_ECHO)$(NRFJPROG) -f nrf52 --reset
+	$(NO_ECHO)$(NRFJPROG) $(NRFJPROG_FLAGS) --reset
 
 # Erase device
 erase :
 	@echo "ERASE DEVICE"
-	$(NO_ECHO)$(NRFJPROG) -f nrf52 --eraseall
+	$(NO_ECHO)$(NRFJPROG) $(NRFJPROG_FLAGS) --eraseall
 
 # Clean build output
 clean ::
diff --git a/doc/specs/weave-tlv-schema.pdf b/doc/specs/weave-tlv-schema.pdf
new file mode 100755
index 0000000..df4bac0
--- /dev/null
+++ b/doc/specs/weave-tlv-schema.pdf
Binary files differ
diff --git a/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp b/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
index e99f946..db6ad76 100644
--- a/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
+++ b/src/device-manager/python/WeaveDeviceManager-ScriptBinding.cpp
@@ -1075,12 +1075,18 @@
 
 uint8_t nl_Weave_DeviceManager_GetLogFilter()
 {
+#if _WEAVE_USE_LOGGING
     return nl::Weave::Logging::GetLogFilter();
+#else
+    return nl::Weave::Logging::kLogCategory_None;
+#endif
 }
 
 void nl_Weave_DeviceManager_SetLogFilter(uint8_t category)
 {
+#if _WEAVE_USE_LOGGING
     nl::Weave::Logging::SetLogFilter(category);
+#endif
 }
 
 WEAVE_ERROR nl_Weave_Stack_Init()
@@ -1228,7 +1234,7 @@
     return nl::StatusReportStr(profileId, statusCode);
 }
 
-#if WEAVE_LOG_ENABLE_DYNAMIC_LOGING_FUNCTION
+#if _WEAVE_USE_LOGGING && WEAVE_LOG_ENABLE_DYNAMIC_LOGING_FUNCTION
 
 // A pointer to the python logging function.
 static LogMessageFunct sLogMessageFunct = NULL;
diff --git a/src/lib/profiles/device-description/DeviceDescriptionProfileSchema.txt b/src/lib/profiles/device-description/DeviceDescriptionProfileSchema.txt
new file mode 100644
index 0000000..c2d0428
--- /dev/null
+++ b/src/lib/profiles/device-description/DeviceDescriptionProfileSchema.txt
@@ -0,0 +1,130 @@
+/*
+ *
+ *    Copyright (c) 2020 Google LLC.
+ *    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
+ *      Schema definition for the Weave Device Description profile.
+ */
+
+namespace weave.profiles {
+
+/** Weave Device Description Profile
+ */
+device-description => PROFILE [id common:0x000E]
+{
+    // ---- Message Types ----
+
+    identify-request    => MESSAGE [id 1]
+    identify-response   => MESSAGE [id 2] CONTAINING device-descriptor
+
+
+    // ---- Data Types ----
+
+    /** Structure containing information describing a Weave device. 
+     */
+    device-descriptor [*:1] => STRUCTURE [extensible, tag-order] 
+    {
+        includes product-fields,
+        includes feature-fields,
+
+        
+        manufacturing-date [3,opt]        : encoded-date,       /**< Calendar date of manufacture in encoded form. */
+
+        serial-number [4]                 : STRING [len 1..32], /**< Device serial number. */
+
+        primary-15-4-mac-address [5,opt]  : BYTE STRING [len 8],/**< MAC address for device's primary 802.15.4 interface. */
+
+        primary-wifi-mac-address [6,opt]  : BYTE STRING [len 6],/**< MAC address for device's primary WiFi interface. */
+
+        wifi-essid [7,opt]                : STRING [len 1..32], /**< ESSID for device's WiFi rendezvous network.
+                                                                 *  @note: This field is mutually exclusive with the
+                                                                 *  wifi-essid-suffix field. */
+
+        pairing-code [8,opt]              : STRING [len 1..16], /**< The pairing code for the device.
+                                                                 *  @note @b IMPORTANT: For security reasons, the PairingCode
+                                                                 *  field should *never* be sent over the network. It is
+                                                                 *  present in a device-descriptor structure so that is can
+                                                                 *  encoded in a data label (e.g. QR-code) that is physically
+                                                                 *  associated with the device.
+                                                                 */
+        
+        software-version [9,opt]          : STRING [len 1..32], /**< Version of software on the device. */
+        
+        
+        device-id [10,opt]                : UNSIGNED INTEGER [range 64bits],
+                                                                /**< Weave device ID. */
+        
+        fabric-id [11,opt]                : UNSIGNED INTEGER [range 64bits], 
+                                                                /**< ID of Weave fabric to which the device belongs. */
+
+        
+        pairing-compat-major-ver [12,opt] : UNSIGNED INTEGER [range 1..0xFFFF],
+                                                                /**< Pairing software compatibility major version. */
+        
+        pairing-compat-minor-ver [13,opt] : UNSIGNED INTEGER [range 1..0xFFFF],
+                                                                /**< Pairing software compatibility minor version. */
+
+        wifi-essid-suffix [14,opt]        : STRING [len 1..32], /**< ESSID suffix for device's WiFi rendezvous network.
+                                                                 *  @note: This field is mutually exclusive with the
+                                                                 *  wifi-essid field.
+                                                                 */
+    }
+    
+    /** Common fields containing product information for a device.
+     */
+    product-fields => FIELD GROUP
+    {
+        vendor-id [0]                     : UNSIGNED INTEGER [range 1..0xFFFE],
+                                                                /**< Code identifying the product vendor. */
+
+        product-id [1]                    : UNSIGNED INTEGER [range 1..0xFFFE],
+                                                                /**< Code identifying the product. */
+
+        product-revision [2,opt]          : UNSIGNED INTEGER [range 1..0xFFFF],
+                                                                /**< Code identifying the product revision. */
+    }
+
+    /** Fields describing features supported by the device.
+     */
+    feature-fields => FIELD GROUP
+    {
+        
+        home-alarm-link-capable [100,opt] : BOOLEAN,            /**< Indicates a Nest Protect that supports connection to a home alarm panel. */
+
+        line-powered [101,opt]            : BOOLEAN             /**< Indicates a device that requires line power. */
+    }
+
+    /** A calendar date, encoded as an integer.
+     *
+     * Date values are encoded according to the following formula:
+     *
+     *    encoded-date = (year - 2000) +
+     *                   ((month - 1) * 100) +
+     *                   (day * 12 * 100)
+     *
+     * Date values are limited to the years 2001 through 2099.
+     *
+     * Month values must be between 1 and 12.
+     *
+     * If provided, day values must be between 1 and 31.  Alternatively, a day value
+     * of 0 can be used to encode a date without a day-of-month (e.g. 2020/05). 
+     */
+    encoded-date => UNSIGNED INTEGER [range 16bits]
+}
+
+} // namespace weave.profiles
diff --git a/src/lib/profiles/security/SecurityProfileSchema.txt b/src/lib/profiles/security/SecurityProfileSchema.txt
new file mode 100644
index 0000000..de3b86d
--- /dev/null
+++ b/src/lib/profiles/security/SecurityProfileSchema.txt
@@ -0,0 +1,377 @@
+/*
+ *
+ *    Copyright (c) 2020 Google LLC.
+ *    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
+ *      Definition of the Weave Security profile.
+ */
+
+namespace weave.profiles {
+
+/** Weave Security Profile
+ */
+security => PROFILE [id common:0x0004]
+{
+    // ---- Message Types ----
+
+    pase-initiator-step1                => MESSAGE [id 1]
+    pase-responder-step1                => MESSAGE [id 2]
+    pase-responder-step2                => MESSAGE [id 3]
+    pase-initiator-step2                => MESSAGE [id 4]
+    pase-responder-key-confirm          => MESSAGE [id 5]
+    pase-responder-reconfigure          => MESSAGE [id 6]
+
+    case-begin-session-request          => MESSAGE [id 10]
+    case-begin-session-response         => MESSAGE [id 11]
+    case-initiator-key-confirm          => MESSAGE [id 12]
+    case-reconfigure                    => MESSAGE [id 13]
+
+    take-identify-token                 => MESSAGE [id 20]
+    take-identify-token-response        => MESSAGE [id 21]
+    take-token-reconfigure              => MESSAGE [id 22]
+    take-authenticate-token             => MESSAGE [id 23]
+    take-authenticate-token-response    => MESSAGE [id 24]
+    take-re-authenticate-token          => MESSAGE [id 25]
+    take-re-authenticate-token-response => MESSAGE [id 26]
+
+    key-export-request                  => MESSAGE [id 30]
+    key-export-response                 => MESSAGE [id 31]
+    key-export-reconfigure              => MESSAGE [id 32]
+
+    get-certificate-request             => MESSAGE [id 40]
+    get-certificate-response            => MESSAGE [id 41]
+
+    end-session                         => MESSAGE [id 100]
+    key-error                           => MESSAGE [id 101]
+    msg-counter-sync-response           => MESSAGE [id 102]
+
+    // ---- Status Codes ----
+    
+    session-aborted                     => STATUS CODE [id 1] 
+    pase-supports-only-config1          => STATUS CODE [id 2] 
+    unsupported-encryption-type         => STATUS CODE [id 3] 
+    invalid-key-id                      => STATUS CODE [id 4] 
+    duplicate-key-id                    => STATUS CODE [id 5] 
+    key-confirmation-failed             => STATUS CODE [id 6] 
+    internal-error                      => STATUS CODE [id 7] 
+    authentication-failed               => STATUS CODE [id 8] 
+    unsupported-case-configuration      => STATUS CODE [id 9] 
+    unsupported-certificate             => STATUS CODE [id 10]
+    no-common-pase-configurations       => STATUS CODE [id 11]
+    key-not-found                       => STATUS CODE [id 12]
+    wrong-encryption-type               => STATUS CODE [id 13]
+    unknown-key-type                    => STATUS CODE [id 14]
+    invalid-use-of-session-key          => STATUS CODE [id 15]
+    internal-key-error                  => STATUS CODE [id 16]
+    no-common-key-export-configuration  => STATUS CODE [id 17]
+    unauthorized-key-export-request     => STATUS CODE [id 18]
+    no-new-operational-cert-required    => STATUS CODE [id 19]
+    operational-node-id-in-use          => STATUS CODE [id 20]
+    invalid-operational-node-id         => STATUS CODE [id 21]
+    invalid-operational-certificate     => STATUS CODE [id 22]
+    
+    // ---- Data Types ----
+    
+    /** Weave Certificate
+     *  Represents a compressed form of an X.509 certificate.
+     */
+    weave-certificate [*:1] => STRUCTURE [any-order]
+    {
+        // BASE CERTIFICATE FIELDS
+        // These fields are always encoded in the order shown.
+        
+        serial-num [1]                  : BYTE STRING,          /**< Certificate serial number, in BER integer encoding. */
+        sig-algo [2]                    : signature-algorithm,  /**< Enumerated value identifying the certificate signature algorithm. */
+        issuer [3]                      : dn,                   /**< Distinguished name of the certificate issuer. */
+        not-before [4]                  : UNSIGNED INTEGER,     /**< Certificate validity period start, in compressed certificate date format. */
+        not-after [5]                   : UNSIGNED INTEGER,     /**< Certificate validity period end, in compressed certificate date format. */
+        subject [6]                     : dn,                   /**< Distinguished name of the certificate subject. */
+        pub-key-algo [7]                : public-key-algorithm, /**< Algorithm with which the public key may be used. */
+        ec-curve-id [8,opt]             : ec-curve-id,          /**< Elliptic curve of the public key. Only present for EC certificates. */
+        rsa-pub-key [9,opt]             : rsa-public-key,       /**< RSA public key. Only present for RSA certificates. */
+        ec-pub-key [10,opt]             : ec-public-key,        /**< Elliptic curve public key. Only present for EC certificates. */
+        
+        // CERTIFICATE EXTENSION FIELDs (tags 128-255)
+        // These fields are encoded in the same order as they appeared in the
+        // original X.509 certificate.
+        
+        auth-key-id [128,opt]           : authority-key-id,     /**< Information about the public key used to sign the certificate. */
+        subject-key-id [129,opt]        : subject-key-id,       /**< Information about the certificate's public key. */
+        key-usage [130,opt]             : key-usage,            /**< Allowed usages of certificate public key. */
+        basic-constraints [131,opt]     : basic-constraints,    /**< CA constraints for certificate. */
+        extended-key-usage [132,opt]    : extended-key-usage,   /**< Extended usages of certificate public key. */
+
+        // SIGNATURE FIELDS
+        // These fields are always encoded at the end of the certificate structure.
+
+        rsa-sig [11,opt]                : BYTE STRING,          /**< RSA signature for the certificate. Only present for RSA certificates. */
+        ecdsa-sig [12,opt]              : ecdsa-signature,      /**< ECDSA signature for the certificate. Only present for EC certificates. */
+    }
+    
+    ec-private-key [*:2] => STRUCTURE [tag-order]
+    {
+        curve-id [1]                    : ec-curve-id,
+        private-key [2]                 : BYTE STRING,
+        public-key [3,opt]              : ec-public-key
+    }
+
+    weave-cert-list [*:3] => ARRAY OF weave-certificate
+    
+    weave-signature [*:5] => STRUCTURE [tag-order]
+    {
+        ecdsa-sig [1,opt]               : ecdsa-signature,
+        rsa-sig [2,opt]                 : BYTE STRING,
+        signing-cert-ref [3,opt]        : weave-cert-reference,
+        related-certs [4,opt]           : weave-cert-list,
+        sig-algo [5,opt]                : signature-algorithm,
+    }
+
+    weave-cert-reference [*:6] => STRUCTURE [tag-order]
+    {
+        subject [1,opt]                 : dn,
+        pub-key-id [2,opt]              : BYTE STRING,
+    }
+
+    case-certificate-info [*:7] => STRUCTURE [tag-order]
+    {
+        entity-cert [1,opt]             : weave-certificate,
+        entity-cert-ref [2,opt]         : weave-cert-reference,
+        related-certs [3,opt]           : LIST OF weave-certificate,
+        trust-anchors [4,opt]           : LIST [len 1..] OF weave-cert-reference,
+    }
+    
+    case-signature [*:8] => ecdsa-signature
+    
+    access-token [*:9] => STRUCTURE [tag-order]
+    {
+        cert [1]                        : weave-certificate,
+        priv-key [2]                    : ec-private-key,
+        related-certs [3,opt]           : ARRAY OF weave-certificate,
+    }
+    
+    group-key-signature [*:10] => STRUCTURE [tag-order]
+    {
+        sig-algo [1]                    : signature-algorithm,
+        key-id [2]                      : UNSIGNED INTEGER [range 32bits],
+        sig [3]                         : BYTE STRING,
+    }
+    
+    rsa-public-key => STRUCTURE [tag-order]
+    {
+        modulus [1]                     : BYTE STRING,
+        pub-exponent [2]                : UNSIGNED INTEGER,
+    }
+    
+    ec-public-key => BYTE STRING
+    
+    ecdsa-signature => STRUCTURE [tag-order]
+    {
+        r [1]                           : BYTE STRING,
+        s [2]                           : BYTE STRING,
+    }
+
+    common-extension-fields => FIELD GROUP
+    {
+        critical [1,opt]                : BOOLEAN
+    }
+    
+    authority-key-id => STRUCTURE [tag-order]
+    {
+        includes common-extension-fields,
+        
+        key-id [2,opt]                  : BYTE STRING,
+        issuer [3,opt]                  : dn,
+        serial-num [4,opt]              : BYTE STRING,
+    }
+    
+    subject-key-id => STRUCTURE [tag-order]
+    {
+        includes common-extension-fields,
+        
+        key-id [2]                      : BYTE STRING,
+    }
+    
+    key-usage => STRUCTURE [tag-order]
+    {
+        includes common-extension-fields,
+        
+        key-usage [2]                   : UNSIGNED INTEGER,
+    }
+    
+    basic-constraints => STRUCTURE [tag-order]
+    {
+        includes common-extension-fields,
+
+        is-ca [2,opt]                   : BOOLEAN,
+        path-len-constraint [3,opt]     : UNSIGNED INTEGER [range 8bits],        
+    }
+    
+    extended-key-usage => STRUCTURE [tag-order]
+    {
+        includes common-extension-fields,
+
+        key-purpose-ids [2]             : ARRAY [len 1..] OF key-purpose-id,
+    }
+    
+    dn => LIST [len 1..] OF rdn
+    
+    rdn => CHOICE OF
+    {
+        single-attr                     : dn-attribute,
+        multi-attr [anon]               : LIST [len 2..] OF dn-attribute 
+    }
+    
+    dn-attribute => CHOICE OF
+    {
+        // Base DN attributes
+        // Of these, all are encoded as UTF8String except domain-component,
+        // which is encoded as IA5String.
+        common-name [1]                 : STRING,
+        surname [2]                     : STRING,
+        serial-num [3]                  : STRING,
+        country-name [4]                : STRING,
+        locality-name [5]               : STRING,
+        state-or-province-name [6]      : STRING,
+        org-name [7]                    : STRING,
+        org-unit-name [8]               : STRING,
+        title [9]                       : STRING,
+        name [10]                       : STRING,
+        given-name [11]                 : STRING,
+        initials [12]                   : STRING,
+        gen-qualifier [13]              : STRING,
+        dn-qualifier [14]               : STRING,
+        pseudonym [15]                  : STRING,
+        domain-component [16]           : STRING,
+        weave-device-id [17]            : STRING [len 16],
+        weave-service-endpoint-id [18]  : STRING [len 16],
+        weave-ca-id [19]                : STRING [len 16],
+        weave-software-publisher-id [20]: STRING [len 16],
+        
+        // Aliases for certain DN attributes when encoded as PrintableString
+        // NOTE: The tags for these must be the base tags + 0x80.  
+        common-name-ps [129]            : STRING,
+        surname-ps [130]                : STRING,
+        serial-num-ps [131]             : STRING,
+        country-name-ps [132]           : STRING,
+        locality-name-ps [133]          : STRING,
+        state-or-province-name-ps [134] : STRING,
+        org-name-ps [135]               : STRING,
+        org-unit-name-ps [136]          : STRING,
+        title-ps [137]                  : STRING,
+        name-ps [138]                   : STRING,
+        given-name-ps [139]             : STRING,
+        initials-ps [140]               : STRING,
+        gen-qualifier-ps [141]          : STRING,
+        dn-qualifier-ps [142]           : STRING,
+        pseudonym-ps [143]              : STRING,
+    }
+
+    signature-algorithm => UNSIGNED INTEGER [range 8bits]
+    {
+        md2-with-rsa            = 1,
+        md5-with-rsa            = 2,
+        sha1-with-rsa           = 3,
+        ecdsa-with-sha1         = 4,
+        ecdsa-with-sha256       = 5,
+        mhac-with-sha256        = 6,
+        sha256-with-rsa         = 7,
+    }
+    
+    public-key-algorithm => UNSIGNED INTEGER [range 8bits]
+    {
+        rsa                     = 1,
+        ec-pub-key              = 2,
+        ecdh                    = 3,
+        ecmqv                   = 4,
+    }
+    
+    ec-curve-id => UNSIGNED INTEGER [range 8bits]
+    {
+        c2pnb163v1              = 1, 
+        c2pnb163v2              = 2, 
+        c2pnb163v3              = 3, 
+        c2pnb176w1              = 4, 
+        c2tnb191v1              = 5, 
+        c2tnb191v2              = 6, 
+        c2tnb191v3              = 7, 
+        c2onb191v4              = 8, 
+        c2onb191v5              = 9, 
+        c2pnb208w1              = 10,
+        c2tnb239v1              = 11,
+        c2tnb239v2              = 12,
+        c2tnb239v3              = 13,
+        c2onb239v4              = 14,
+        c2onb239v5              = 15,
+        c2pnb272w1              = 16,
+        c2pnb304w1              = 17,
+        c2tnb359v1              = 18,
+        c2pnb368w1              = 19,
+        c2tnb431r1              = 20,
+        prime192v1              = 21,
+        prime192v2              = 22,
+        prime192v3              = 23,
+        prime239v1              = 24,
+        prime239v2              = 25,
+        prime239v3              = 26,
+        prime256v1              = 27,
+        secp112r1               = 28,
+        secp112r2               = 29,
+        secp128r1               = 30,
+        secp128r2               = 31,
+        secp160k1               = 32,
+        secp160r1               = 33,
+        secp160r2               = 34,
+        secp192k1               = 35,
+        secp224k1               = 36,
+        secp224r1               = 37,
+        secp256k1               = 38,
+        secp384r1               = 39,
+        secp521r1               = 40,
+        sect113r1               = 41,
+        sect113r2               = 42,
+        sect131r1               = 43,
+        sect131r2               = 44,
+        sect163k1               = 45,
+        sect163r1               = 46,
+        sect163r2               = 47,
+        sect193r1               = 48,
+        sect193r2               = 49,
+        sect233k1               = 50,
+        sect233r1               = 51,
+        sect239k1               = 52,
+        sect283k1               = 53,
+        sect283r1               = 54,
+        sect409k1               = 55,
+        sect409r1               = 56,
+        sect571k1               = 57,
+        sect571r1               = 58,
+    }
+
+    key-purpose-id => UNSIGNED INTEGER [range 8bits]
+    {
+        server-auth             = 1,
+        client-auth             = 2,
+        code-signing            = 3,
+        email-protection        = 4,
+        time-stamping           = 5,
+        ocsp-signing            = 6,
+    }
+}
+
+
+} // namespace weave.profiles
diff --git a/src/lib/support/logging/WeaveLogging.cpp b/src/lib/support/logging/WeaveLogging.cpp
index da5b75e..5325371 100644
--- a/src/lib/support/logging/WeaveLogging.cpp
+++ b/src/lib/support/logging/WeaveLogging.cpp
@@ -87,6 +87,7 @@
     "DLP"   // DropcamLegacyPairing
     "EVL"   // Event Logging
     "SPT"   // Support
+    "APP"   // Application
     ;
 
 #define ModuleNamesCount ((sizeof(ModuleNames) - 1) / nlWeaveLoggingModuleNameLen)
@@ -212,7 +213,7 @@
 
         int priority = (category == kLogCategory_Error) ? ANDROID_LOG_ERROR : ANDROID_LOG_DEBUG;
 
-        __android_log_vprint(priority, moduleName, msg, v);
+        __android_log_vprint(priority, moduleName, msg, ap);
     }
 }
 
diff --git a/src/lib/support/logging/WeaveLogging.h b/src/lib/support/logging/WeaveLogging.h
index 0066065..593a4a2 100644
--- a/src/lib/support/logging/WeaveLogging.h
+++ b/src/lib/support/logging/WeaveLogging.h
@@ -109,6 +109,7 @@
     kLogModule_DropcamLegacyPairing,
     kLogModule_EventLogging,
     kLogModule_Support,
+    kLogModule_Application,
 
     kLogModule_Max
 };