diff --git a/.github/workflows/chef.yaml b/.github/workflows/chef.yaml index 5d0a6130b686ae..b403dffe758a52 100644 --- a/.github/workflows/chef.yaml +++ b/.github/workflows/chef.yaml @@ -98,7 +98,7 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: ghcr.io/project-chip/chip-build-telink:57 + image: ghcr.io/project-chip/chip-build-telink:65 options: --user root steps: diff --git a/.github/workflows/cirque.yaml b/.github/workflows/cirque.yaml index b3e2f9d1086ee8..6fe17c3558c767 100644 --- a/.github/workflows/cirque.yaml +++ b/.github/workflows/cirque.yaml @@ -42,7 +42,7 @@ jobs: # need to run with privilege, which isn't supported by job.XXX.contaner # https://github.com/actions/container-action/issues/2 # container: - # image: ghcr.io/project-chip/chip-build-cirque:54 + # image: ghcr.io/project-chip/chip-build-cirque: # volumes: # - "/tmp:/tmp" # - "/dev/pts:/dev/pts" diff --git a/.github/workflows/doxygen.yaml b/.github/workflows/doxygen.yaml index abe0568fb9e011..daaa70f158774a 100644 --- a/.github/workflows/doxygen.yaml +++ b/.github/workflows/doxygen.yaml @@ -81,7 +81,7 @@ jobs: runs-on: ubuntu-latest container: - image: ghcr.io/project-chip/chip-build-doxygen:54 + image: ghcr.io/project-chip/chip-build-doxygen:65 if: github.actor != 'restyled-io[bot]' diff --git a/.github/workflows/examples-linux-arm.yaml b/.github/workflows/examples-linux-arm.yaml index e22bb903635875..976ed23f564386 100644 --- a/.github/workflows/examples-linux-arm.yaml +++ b/.github/workflows/examples-linux-arm.yaml @@ -36,7 +36,7 @@ jobs: if: github.actor != 'restyled-io[bot]' container: - image: ghcr.io/project-chip/chip-build-crosscompile:54 + image: ghcr.io/project-chip/chip-build-crosscompile:65 volumes: - "/tmp/bloat_reports:/tmp/bloat_reports" diff --git a/.github/workflows/java-tests.yaml b/.github/workflows/java-tests.yaml index ff734d2d4fe338..07001f59fb94da 100644 --- a/.github/workflows/java-tests.yaml +++ b/.github/workflows/java-tests.yaml @@ -42,7 +42,7 @@ jobs: runs-on: ubuntu-latest container: - image: ghcr.io/project-chip/chip-build-java:54 + image: ghcr.io/project-chip/chip-build-java:65 options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=0 net.ipv6.conf.all.forwarding=0" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 19cf8e8bd910b0..060556001e98c7 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -296,6 +296,7 @@ jobs: ':(exclude)src/app/util/attribute-table.cpp' \ ':(exclude)src/app/util/attribute-table.h' \ ':(exclude)src/app/util/ember-compatibility-functions.cpp' \ + ':(exclude)src/app/util/mock/CodegenEmberMocks.cpp' \ ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' \ ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' \ && exit 1 || exit 0 diff --git a/.gitmodules b/.gitmodules index d23157baea4481..1f4129f9f2df9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -97,11 +97,6 @@ path = third_party/infineon/psoc6/psoc6_sdk/libs/abstraction-rtos url = https://github.com/Infineon/abstraction-rtos platforms = infineon -[submodule "p6/bluetooth-freertos"] - path = third_party/infineon/psoc6/psoc6_sdk/libs/bluetooth-freertos - url = https://github.com/Infineon/bluetooth-freertos - branch = v2.X - platforms = infineon [submodule "p6/btstack"] path = third_party/infineon/psoc6/psoc6_sdk/libs/btstack url = https://github.com/Infineon/btstack @@ -134,10 +129,6 @@ path = third_party/infineon/psoc6/psoc6_sdk/libs/mtb-pdl-cat1 url = https://github.com/Infineon/mtb-pdl-cat1 platforms = infineon -[submodule "p6/psoc6cm0p"] - path = third_party/infineon/psoc6/psoc6_sdk/libs/psoc6cm0p - url = https://github.com/Infineon/psoc6cm0p - platforms = infineon [submodule "p6/whd-bsp-integration"] path = third_party/infineon/psoc6/psoc6_sdk/libs/whd-bsp-integration url = https://github.com/Infineon/whd-bsp-integration @@ -185,10 +176,6 @@ [submodule "third_party/jsoncpp/repo"] path = third_party/jsoncpp/repo url = https://github.com/open-source-parsers/jsoncpp.git -[submodule "third_party/p6/p6_sdk/libs/anycloud-ota"] - path = third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota - url = https://github.com/Infineon/anycloud-ota - platforms = infineon [submodule "third_party/mbed-mcu-boot/repo"] path = third_party/mbed-mcu-boot/repo url = https://github.com/ATmobica/mcuboot.git @@ -312,10 +299,6 @@ url = https://github.com/STMicroelectronics/STM32CubeWB.git branch = v1.18.0 platforms = stm32 -[submodule "p6/lwip-network-interface-integration"] - path = third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration - url = https://github.com/Infineon/lwip-network-interface-integration.git - platforms = infineon [submodule "third_party/infineon/trustm/optiga-trust-m"] path = third_party/infineon/trustm/optiga-trust-m url = https://github.com/Infineon/optiga-trust-m.git @@ -326,3 +309,27 @@ url = https://github.com/NXP/nxp_matter_support.git branch = master platforms = nxp +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/btstack-integration"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/btstack-integration + url = https://github.com/Infineon/btstack-integration.git + platforms = infineon +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/cat1cm0p"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/cat1cm0p + url = https://github.com/Infineon/cat1cm0p.git + platforms = infineon +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/cmsis"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/cmsis + url = https://github.com/Infineon/cmsis.git + platforms = infineon +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/ota-bootloader-abstraction"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/ota-bootloader-abstraction + url = https://github.com/Infineon/ota-bootloader-abstraction.git + platforms = infineon +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/ota-update"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/ota-update + url = https://github.com/Infineon/ota-update.git + platforms = infineon +[submodule "third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration"] + path = third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration + url = https://github.com/Infineon/lwip-network-interface-integration.git + platforms = infineon diff --git a/config/telink/app/bootloader_usb.conf b/config/telink/app/bootloader_usb.conf index b6b0098bfc31b1..67ec09a790913d 100644 --- a/config/telink/app/bootloader_usb.conf +++ b/config/telink/app/bootloader_usb.conf @@ -16,5 +16,5 @@ # USB DFU configuration CONFIG_USB_DFU_WILL_DETACH=n -CONFIG_BOOT_USB_DFU_GPIO=y -CONFIG_MCUBOOT_INDICATION_LED=y +CONFIG_BOOT_USB_DFU_GPIO=n +CONFIG_MCUBOOT_INDICATION_LED=n diff --git a/docs/guides/infineon_psoc6_software_update.md b/docs/guides/infineon_psoc6_software_update.md index 4367142b79e4d8..e7e4f535be4d6a 100644 --- a/docs/guides/infineon_psoc6_software_update.md +++ b/docs/guides/infineon_psoc6_software_update.md @@ -25,7 +25,7 @@ Infineon PSoC6 example applications by passing the ``` $ scripts/build/build_examples.py --enable-flashbundle --target infineon-psoc6-lock-ota build - $ third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh out/infineon-psoc6-lock-ota chip-psoc6-lock-example + $ third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh psoc6-lock chip-psoc6-lock-example ``` - Build the PSoC6 OTA Update application from the chip root dir and create OTA @@ -33,15 +33,22 @@ Infineon PSoC6 example applications by passing the ``` $ scripts/build/build_examples.py --enable-flashbundle --no-log-timestamps --target infineon-psoc6-lock-ota-updateimage build - $ third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh out/infineon-psoc6-lock-ota-updateimage chip-psoc6-lock-example + $ third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh psoc6-lock chip-psoc6-lock-example ``` -* Additionally a pre-compiled bootloader must be flashed to the board using +* Additionally a pre-compiled bootloader must be flashed to the board before + flashing the application using [Cypress Programmer](https://softwaretools.infineon.com/tools/com.ifx.tb.tool.cypressprogrammer). This image can be found at: $ ./third_party/infineon/psoc6/psoc6_sdk/ota/matter-psoc6-mcuboot-bootloader.hex +* Flash the application after putting the CY8CKIT-062S2-43012 board on + KitProg3 CMSIS-DAP Mode by pressing the `MODE SELECT` button. + + $ cd ~/connectedhomeip + $ python3 out/infineon-psoc6-lock-ota/chip-psoc6-lock-example.flash.py + * In a terminal start the Provider app passing to it the path to the Matter OTA file created in the previous step:(output of ota_update_build step) diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter index 3ed93a0190c273..8c87eb8a6a6c20 100644 --- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter +++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter @@ -288,7 +288,7 @@ deprecated cluster OnOffSwitchConfiguration = 7 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -5441,7 +5441,7 @@ cluster ThermostatUserInterfaceConfiguration = 516 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -7847,7 +7847,7 @@ endpoint 1 { ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -8476,6 +8476,8 @@ endpoint 1 { server cluster EnergyEvseMode { callback attribute supportedModes; callback attribute currentMode; + ram attribute startUpMode; + ram attribute onMode; callback attribute generatedCommandList; callback attribute acceptedCommandList; callback attribute eventList; @@ -8490,6 +8492,8 @@ endpoint 1 { server cluster DeviceEnergyManagementMode { callback attribute supportedModes; callback attribute currentMode; + ram attribute startUpMode; + ram attribute onMode; callback attribute generatedCommandList; callback attribute acceptedCommandList; callback attribute eventList; @@ -8698,7 +8702,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; persist attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap index 4dd86543613c40..6491378c9e83d7 100644 --- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap +++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.zap @@ -17,13 +17,6 @@ } ], "package": [ - { - "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "category": "matter", - "version": "chip-v1" - }, { "pathRelativity": "relativeToZap", "path": "../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json", @@ -31,6 +24,13 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data with some extensions" + }, + { + "pathRelativity": "relativeToZap", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" } ], "endpointTypes": [ @@ -7303,7 +7303,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -14615,6 +14615,38 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "StartUpMode", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnMode", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -14772,6 +14804,38 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "StartUpMode", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnMode", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -17807,7 +17871,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/all-clusters-app/infineon/psoc6/BUILD.gn b/examples/all-clusters-app/infineon/psoc6/BUILD.gn index dfd7bfcd29dcae..2c0b0a6fee7dfa 100644 --- a/examples/all-clusters-app/infineon/psoc6/BUILD.gn +++ b/examples/all-clusters-app/infineon/psoc6/BUILD.gn @@ -45,32 +45,38 @@ config("psoc6_ota_config") { ldflags = [ "-T" + rebase_path(linker_script, root_build_dir) ] - ldflags += [ "-Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,MCUBOOT_BOOTLOADER_SIZE=0x18000,--defsym,CY_BOOT_PRIMARY_1_SIZE=0x1C0000" ] + ldflags += [ "-Wl,--undefined=uxTopUsedPriority -Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,FLASH_AREA_IMG_1_PRIMARY_START=0x028000,--defsym,FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000" ] defines = [ "P6_OTA", - "OTA_SUPPORT ", - "OTA_USE_EXTERNAL_FLASH", - "CY_BOOT_USE_EXTERNAL_FLASH", - "MCUBOOT_HEADER_SIZE=0x400", - "MCUBOOT_MAX_IMG_SECTORS=3584", - "CY_BOOT_SCRATCH_SIZE=0x00004000", - "MCUBOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_PRIMARY_1_START=0x00018000", - "CY_BOOT_PRIMARY_1_SIZE=0x1C0000", - "CY_BOOT_SECONDARY_1_START=0x00000000", - "CY_BOOT_SECONDARY_1_SIZE=0x001C0000", - "CY_FLASH_ERASE_VALUE=0xFF", + "COMPONENT_MCUBOOT", + "CY_BOOTLOADER=MCUBOOT", + "OTA_SUPPORT=1", + "COMPONENT_OTA_PSOC_062", + "PSOC_062_2M", + "OTA_USE_EXTERNAL_FLASH=1", + "ENABLE_OTA_LOGS", + "ENABLE_OTA_BOOTLOADER_ABSTRACTION_LOGS", "MCUBOOT_IMAGE_NUMBER=1", - "MCUBOOT_SLOT_SIZE=0x1C0000", - "MCUBOOT_SCRATCH_SIZE=0x4000", - "MCUBOOT_SECTOR_SIZE = 512", + "MCUBOOT_MAX_IMG_SECTORS=3584", + "FLASH_AREA_BOOTLOADER_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_BOOTLOADER_SIZE=0x028000", + "FLASH_AREA_BOOTLOADER_START=0x000000", + "FLASH_AREA_IMAGE_SCRATCH_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMAGE_SCRATCH_SIZE=0x080000", + "FLASH_AREA_IMAGE_SCRATCH_START=0x440000", + "FLASH_AREA_IMAGE_SWAP_STATUS_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMAGE_SWAP_STATUS_SIZE=0x006c00", + "FLASH_AREA_IMAGE_SWAP_STATUS_START=0x1e8000", + "FLASH_AREA_IMG_1_PRIMARY_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_PRIMARY_START=0x028000", + "FLASH_AREA_IMG_1_SECONDARY_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMG_1_SECONDARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_SECONDARY_START=0x000200", "APP_VERSION_MAJOR=1", "APP_VERSION_MINOR=0", "APP_VERSION_BUILD=0", - "MCUBOOT_OVERWRITE_ONLY", - "CY_ENABLE_XIP_PROGRAM", ] if (build_update_image) { @@ -87,7 +93,7 @@ psoc6_sdk_sources("all_clusters_app_sdk_sources") { defines = [ "BOARD_ID=${psoc6_board}", - "P6_LOG_ENABLED=1", + "PSOC6_LOG_ENABLED=1", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setup_pin_code}", ] diff --git a/examples/all-clusters-app/infineon/psoc6/include/AppConfig.h b/examples/all-clusters-app/infineon/psoc6/include/AppConfig.h index 35e45a8aef4223..cad1a523bfa188 100644 --- a/examples/all-clusters-app/infineon/psoc6/include/AppConfig.h +++ b/examples/all-clusters-app/infineon/psoc6/include/AppConfig.h @@ -48,14 +48,14 @@ #define THREAD_ACTIVE_POLLING_INTERVAL_MS 100 #define THREAD_INACTIVE_POLLING_INTERVAL_MS 1000 -// P6 Logging +// PSOC6 Logging #ifdef __cplusplus extern "C" { #endif void appError(int err); -void P6Log(const char * aFormat, ...); -#define P6_LOG(...) P6Log(__VA_ARGS__) +void PSOC6Log(const char * aFormat, ...); +#define PSOC6_LOG(...) PSOC6Log(__VA_ARGS__) #ifdef __cplusplus } diff --git a/examples/all-clusters-app/infineon/psoc6/include/AppTask.h b/examples/all-clusters-app/infineon/psoc6/include/AppTask.h index aa031fe3ba4b52..a80d8db688fc2d 100644 --- a/examples/all-clusters-app/infineon/psoc6/include/AppTask.h +++ b/examples/all-clusters-app/infineon/psoc6/include/AppTask.h @@ -29,6 +29,10 @@ #include #include +extern "C" { +#include "flash_map_backend.h" +} + // Application-defined error codes in the CHIP_ERROR space. #define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) #define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) diff --git a/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h b/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h index f7bb585960ec3c..1b6f96ee03405f 100644 --- a/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h +++ b/examples/all-clusters-app/infineon/psoc6/include/CHIPProjectConfig.h @@ -42,10 +42,10 @@ #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8003 /* The ProductName attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "P6-CYW43012 All Clusters" +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "PSOC6-CYW43012 All Clusters" /* The HardwareVersionString attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "P6-43012" +#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "PSOC6-43012" /* The HardwareVersion attribute of the Basic cluster. */ #define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION 43012 diff --git a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp index 0d0ba0f5b25663..143e25e87e0114 100644 --- a/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp +++ b/examples/all-clusters-app/infineon/psoc6/src/AppTask.cpp @@ -148,7 +148,7 @@ CHIP_ERROR AppTask::StartAppTask() sAppEventQueue = xQueueCreateStatic(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent), sAppEventQueueBuffer, &sAppEventQueueStruct); if (sAppEventQueue == NULL) { - P6_LOG("Failed to allocate app event queue"); + PSOC6_LOG("Failed to allocate app event queue"); appError(APP_ERROR_EVENT_QUEUE_FAILED); } // Start App task. @@ -160,10 +160,10 @@ CHIP_ERROR AppTask::Init() { CHIP_ERROR err = CHIP_NO_ERROR; #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR - int rc = boot_set_confirmed(); + int rc = flash_area_boot_set_confirmed(); if (rc != 0) { - P6_LOG("boot_set_confirmed failed"); + PSOC6_LOG("flash_area_boot_set_confirmed failed"); appError(CHIP_ERROR_UNINITIALIZED); } #endif @@ -196,11 +196,11 @@ CHIP_ERROR AppTask::Init() ); if (sFunctionTimer == NULL) { - P6_LOG("funct timer create failed"); + PSOC6_LOG("funct timer create failed"); appError(APP_ERROR_CREATE_TIMER_FAILED); } NetWorkCommissioningInstInit(); - P6_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); // Initialize LEDs sStatusLED.Init(SYSTEM_STATE_LED); @@ -221,11 +221,11 @@ void AppTask::AppTaskMain(void * pvParameter) CHIP_ERROR err = sAppTask.Init(); if (err != CHIP_NO_ERROR) { - P6_LOG("AppTask.Init() failed"); + PSOC6_LOG("AppTask.Init() failed"); appError(err); } - P6_LOG("App Task started"); + PSOC6_LOG("App Task started"); while (true) { @@ -301,7 +301,8 @@ void AppTask::FunctionHandler(AppEvent * event) { if (!sAppTask.mFunctionTimerActive && sAppTask.mFunction == Function::kNoneSelected) { - P6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); + PSOC6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", + FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); // Start timer for FACTORY_RESET_CANCEL_WINDOW_TIMEOUT to allow user to // cancel, if required. sAppTask.StartTimer(FACTORY_RESET_CANCEL_WINDOW_TIMEOUT); @@ -325,7 +326,7 @@ void AppTask::FunctionHandler(AppEvent * event) // canceled. sAppTask.mFunction = Function::kNoneSelected; - P6_LOG("Factory Reset has been Canceled"); + PSOC6_LOG("Factory Reset has been Canceled"); } } } @@ -334,7 +335,7 @@ void AppTask::CancelTimer() { if (xTimerStop(sFunctionTimer, 0) == pdFAIL) { - P6_LOG("app timer stop() failed"); + PSOC6_LOG("app timer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } @@ -345,7 +346,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) { if (xTimerIsTimerActive(sFunctionTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -354,7 +355,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sFunctionTimer, aTimeoutInMs / portTICK_PERIOD_MS, 100) != pdPASS) { - P6_LOG("app timer start() failed"); + PSOC6_LOG("app timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } @@ -385,11 +386,11 @@ void AppTask::PostEvent(const AppEvent * event) } if (!status) - P6_LOG("Failed to post event to app task event queue"); + PSOC6_LOG("Failed to post event to app task event queue"); } else { - P6_LOG("Event Queue is NULL should never happen"); + PSOC6_LOG("Event Queue is NULL should never happen"); } } @@ -401,7 +402,7 @@ void AppTask::DispatchEvent(AppEvent * event) } else { - P6_LOG("Event received with no handler. Dropping event."); + PSOC6_LOG("Event received with no handler. Dropping event."); } } @@ -414,7 +415,7 @@ void AppTask::OnOffUpdateClusterState(intptr_t context) if (status != Protocols::InteractionModel::Status::Success) { - P6_LOG("ERR: updating on/off %x", to_underlying(status)); + PSOC6_LOG("ERR: updating on/off %x", to_underlying(status)); } } @@ -435,7 +436,7 @@ void AppTask::InitOTARequestor() gRequestorUser.Init(&gRequestorCore, &gImageProcessor); - P6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); } #endif diff --git a/examples/all-clusters-app/infineon/psoc6/src/ButtonHandler.cpp b/examples/all-clusters-app/infineon/psoc6/src/ButtonHandler.cpp index 7d65fc4134625e..3fbd1c13796fd1 100644 --- a/examples/all-clusters-app/infineon/psoc6/src/ButtonHandler.cpp +++ b/examples/all-clusters-app/infineon/psoc6/src/ButtonHandler.cpp @@ -102,7 +102,7 @@ void ButtonHandler::TimerCallback(TimerHandle_t xTimer) buttonevent = cyhal_gpio_read(APP_FUNCTION_BUTTON); break; default: - P6_LOG("Unhandled TimerID: %d", timerId); + PSOC6_LOG("Unhandled TimerID: %d", timerId); break; } diff --git a/examples/all-clusters-app/infineon/psoc6/src/ClusterManager.cpp b/examples/all-clusters-app/infineon/psoc6/src/ClusterManager.cpp index 6659131ea8b9ab..caf1ac85dabc9e 100644 --- a/examples/all-clusters-app/infineon/psoc6/src/ClusterManager.cpp +++ b/examples/all-clusters-app/infineon/psoc6/src/ClusterManager.cpp @@ -50,9 +50,9 @@ ClusterManager ClusterManager::sCluster; void ClusterManager::OnOnOffPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value) { VerifyOrExit(attributeId == OnOff::Attributes::OnOff::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); // At this point we can assume that value points to a bool value. mEndpointOnOffState[endpointId - 1] = *value; @@ -70,9 +70,9 @@ void ClusterManager::OnLevelControlAttributeChangeCallback(EndpointId endpointId uint8_t brightness = onOffState ? *value : 0; VerifyOrExit(attributeId == LevelControl::Attributes::CurrentLevel::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); endpointId == ENDPOINT_FIRST_IDX ? sClusterLED.SetBrightness(brightness) : sLightLED.SetBrightness(brightness); @@ -84,9 +84,9 @@ void ClusterManager::OnColorControlAttributeChangeCallback(EndpointId endpointId { VerifyOrExit(attributeId == ColorControl::Attributes::CurrentHue::Id || attributeId == ColorControl::Attributes::CurrentSaturation::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); if (endpointId == 1) { uint8_t hue, saturation; @@ -136,8 +136,8 @@ void IdentifyTimerHandler(Layer * systemLayer, void * appState) void ClusterManager::OnIdentifyPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value) { VerifyOrExit(attributeId == Identify::Attributes::IdentifyTime::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); - VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX, P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX, PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); /* IdentifyTime Attribute Spec mentions "flashing a light with a period of 0.5 seconds" */ sStatusLED.Blink(kIdentifyTimerDelayMS * 2); diff --git a/examples/all-clusters-app/infineon/psoc6/src/ZclCallbacks.cpp b/examples/all-clusters-app/infineon/psoc6/src/ZclCallbacks.cpp index 9a439771026736..2e805ac61367ee 100644 --- a/examples/all-clusters-app/infineon/psoc6/src/ZclCallbacks.cpp +++ b/examples/all-clusters-app/infineon/psoc6/src/ZclCallbacks.cpp @@ -39,9 +39,9 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & EndpointId endpoint = attributePath.mEndpointId; ClusterId clusterId = attributePath.mClusterId; AttributeId attributeId = attributePath.mAttributeId; - P6_LOG("MatterPostAttributeChangeCallback - Cluster ID: " ChipLogFormatMEI - ", EndPoint ID: '0x%02x', Attribute ID: " ChipLogFormatMEI, - ChipLogValueMEI(clusterId), endpoint, ChipLogValueMEI(attributeId)); + PSOC6_LOG("MatterPostAttributeChangeCallback - Cluster ID: " ChipLogFormatMEI + ", EndPoint ID: '0x%02x', Attribute ID: " ChipLogFormatMEI, + ChipLogValueMEI(clusterId), endpoint, ChipLogValueMEI(attributeId)); switch (clusterId) { @@ -61,7 +61,7 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & ClusterMgr().OnColorControlAttributeChangeCallback(endpoint, attributeId, value); break; default: - P6_LOG("Unhandled cluster ID: " ChipLogFormatMEI, ChipLogValueMEI(clusterId)); + PSOC6_LOG("Unhandled cluster ID: " ChipLogFormatMEI, ChipLogValueMEI(clusterId)); break; } } diff --git a/examples/all-clusters-app/infineon/psoc6/src/main.cpp b/examples/all-clusters-app/infineon/psoc6/src/main.cpp index 2dc8d6353cc62c..2344f380f802fc 100644 --- a/examples/all-clusters-app/infineon/psoc6/src/main.cpp +++ b/examples/all-clusters-app/infineon/psoc6/src/main.cpp @@ -57,7 +57,7 @@ static void main_task(void * pvParameters); //================================================================================= void appError(int err) { - P6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + PSOC6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); portDISABLE_INTERRUPTS(); while (true) ; @@ -90,35 +90,35 @@ static void main_task(void * pvParameters) CHIP_ERROR ret = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); + PSOC6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); appError(ret); } ret = PlatformMgr().InitChipStack(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().InitChipStack() failed"); + PSOC6_LOG("PlatformMgr().InitChipStack() failed"); appError(ret); } - ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("P6_CLUSTERS"); + ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("PSOC6_CLUSTERS"); if (ret != CHIP_NO_ERROR) { - P6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); + PSOC6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); appError(ret); } - P6_LOG("Starting Platform Manager Event Loop"); + PSOC6_LOG("Starting Platform Manager Event Loop"); ret = PlatformMgr().StartEventLoopTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().StartEventLoopTask() failed"); + PSOC6_LOG("PlatformMgr().StartEventLoopTask() failed"); appError(ret); } ret = GetAppTask().StartAppTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("GetAppTask().Init() failed"); + PSOC6_LOG("GetAppTask().Init() failed"); appError(ret); } @@ -131,7 +131,7 @@ static void main_task(void * pvParameters) // ================================================================================ int main(void) { - init_p6Platform(); + init_psoc6Platform(); #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR // Clear watchdog timer (started by bootloader) so that it doesn't trigger a reset cyhal_wdt_t wdt_obj; @@ -142,9 +142,9 @@ int main(void) MemMonitoring::startHeapMonitoring(); #endif - P6_LOG("==================================================\r\n"); - P6_LOG("chip-p6-all-clusters-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("==================================================\r\n"); + PSOC6_LOG("==================================================\r\n"); + PSOC6_LOG("chip-psoc6-all-clusters-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("==================================================\r\n"); /* Start the FreeRTOS scheduler */ vTaskStartScheduler(); @@ -154,5 +154,5 @@ int main(void) PlatformMgr().Shutdown(); // Should never get here. - P6_LOG("vTaskStartScheduler() failed"); + PSOC6_LOG("vTaskStartScheduler() failed"); } diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter index f7b4645e04f3a8..57ea60bfd6caf6 100644 --- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter +++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -3986,7 +3986,7 @@ cluster ThermostatUserInterfaceConfiguration = 516 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -6340,7 +6340,7 @@ endpoint 1 { ram attribute onLevel default = 0xFF; persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -6550,7 +6550,7 @@ endpoint 1 { ram attribute enhancedColorMode default = 0x01; ram attribute colorCapabilities default = 0x1F; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; } server cluster BallastConfiguration { diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap index a5e9bdd3164ee2..8afff9a3507a3c 100644 --- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap +++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.zap @@ -5047,7 +5047,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -7303,7 +7303,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/BUILD.gn b/examples/all-clusters-minimal-app/infineon/psoc6/BUILD.gn index c70c282db2ac17..c1bbd2b34aa130 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/BUILD.gn +++ b/examples/all-clusters-minimal-app/infineon/psoc6/BUILD.gn @@ -46,32 +46,38 @@ config("psoc6_ota_config") { ldflags = [ "-T" + rebase_path(linker_script, root_build_dir) ] - ldflags += [ "-Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,MCUBOOT_BOOTLOADER_SIZE=0x18000,--defsym,CY_BOOT_PRIMARY_1_SIZE=0x1C0000" ] + ldflags += [ "-Wl,--undefined=uxTopUsedPriority -Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,FLASH_AREA_IMG_1_PRIMARY_START=0x028000,--defsym,FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000" ] defines = [ "P6_OTA", - "OTA_SUPPORT ", - "OTA_USE_EXTERNAL_FLASH", - "CY_BOOT_USE_EXTERNAL_FLASH", - "MCUBOOT_HEADER_SIZE=0x400", - "MCUBOOT_MAX_IMG_SECTORS=3584", - "CY_BOOT_SCRATCH_SIZE=0x00004000", - "MCUBOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_PRIMARY_1_START=0x00018000", - "CY_BOOT_PRIMARY_1_SIZE=0x1C0000", - "CY_BOOT_SECONDARY_1_START=0x00000000", - "CY_BOOT_SECONDARY_1_SIZE=0x001C0000", - "CY_FLASH_ERASE_VALUE=0xFF", + "COMPONENT_MCUBOOT", + "CY_BOOTLOADER=MCUBOOT", + "OTA_SUPPORT=1", + "COMPONENT_OTA_PSOC_062", + "PSOC_062_2M", + "OTA_USE_EXTERNAL_FLASH=1", + "ENABLE_OTA_LOGS", + "ENABLE_OTA_BOOTLOADER_ABSTRACTION_LOGS", "MCUBOOT_IMAGE_NUMBER=1", - "MCUBOOT_SLOT_SIZE=0x1C0000", - "MCUBOOT_SCRATCH_SIZE=0x4000", - "MCUBOOT_SECTOR_SIZE = 512", + "MCUBOOT_MAX_IMG_SECTORS=3584", + "FLASH_AREA_BOOTLOADER_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_BOOTLOADER_SIZE=0x028000", + "FLASH_AREA_BOOTLOADER_START=0x000000", + "FLASH_AREA_IMAGE_SCRATCH_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMAGE_SCRATCH_SIZE=0x080000", + "FLASH_AREA_IMAGE_SCRATCH_START=0x440000", + "FLASH_AREA_IMAGE_SWAP_STATUS_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMAGE_SWAP_STATUS_SIZE=0x006c00", + "FLASH_AREA_IMAGE_SWAP_STATUS_START=0x1e8000", + "FLASH_AREA_IMG_1_PRIMARY_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_PRIMARY_START=0x028000", + "FLASH_AREA_IMG_1_SECONDARY_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMG_1_SECONDARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_SECONDARY_START=0x000200", "APP_VERSION_MAJOR=1", "APP_VERSION_MINOR=0", "APP_VERSION_BUILD=0", - "MCUBOOT_OVERWRITE_ONLY", - "CY_ENABLE_XIP_PROGRAM", ] if (build_update_image) { @@ -88,7 +94,7 @@ psoc6_sdk_sources("all_clusters_app_sdk_sources") { defines = [ "BOARD_ID=${psoc6_board}", - "P6_LOG_ENABLED=1", + "PSOC6_LOG_ENABLED=1", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setup_pin_code}", ] diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/include/AppConfig.h b/examples/all-clusters-minimal-app/infineon/psoc6/include/AppConfig.h index 35e45a8aef4223..cad1a523bfa188 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/include/AppConfig.h +++ b/examples/all-clusters-minimal-app/infineon/psoc6/include/AppConfig.h @@ -48,14 +48,14 @@ #define THREAD_ACTIVE_POLLING_INTERVAL_MS 100 #define THREAD_INACTIVE_POLLING_INTERVAL_MS 1000 -// P6 Logging +// PSOC6 Logging #ifdef __cplusplus extern "C" { #endif void appError(int err); -void P6Log(const char * aFormat, ...); -#define P6_LOG(...) P6Log(__VA_ARGS__) +void PSOC6Log(const char * aFormat, ...); +#define PSOC6_LOG(...) PSOC6Log(__VA_ARGS__) #ifdef __cplusplus } diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/include/AppTask.h b/examples/all-clusters-minimal-app/infineon/psoc6/include/AppTask.h index b5102a153e25e1..82a9537df4b6cc 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/include/AppTask.h +++ b/examples/all-clusters-minimal-app/infineon/psoc6/include/AppTask.h @@ -29,6 +29,10 @@ #include #include +extern "C" { +#include "flash_map_backend.h" +} + // Application-defined error codes in the CHIP_ERROR space. #define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) #define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/include/CHIPProjectConfig.h b/examples/all-clusters-minimal-app/infineon/psoc6/include/CHIPProjectConfig.h index a371e16de2d7c0..e072cc6f2c4c0f 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/include/CHIPProjectConfig.h +++ b/examples/all-clusters-minimal-app/infineon/psoc6/include/CHIPProjectConfig.h @@ -42,10 +42,10 @@ #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8004 /* The ProductName attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "P6-CYW43012 Clusters Minimal" +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "PSOC6-CYW43012 Clusters Minimal" /* The HardwareVersionString attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "P6-43012" +#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "PSOC6-43012" /* The HardwareVersion attribute of the Basic cluster. */ #define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION 43012 diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp index ccc271dd7a2d06..169b2f88acb7ab 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp +++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/AppTask.cpp @@ -145,7 +145,7 @@ CHIP_ERROR AppTask::StartAppTask() sAppEventQueue = xQueueCreateStatic(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent), sAppEventQueueBuffer, &sAppEventQueueStruct); if (sAppEventQueue == NULL) { - P6_LOG("Failed to allocate app event queue"); + PSOC6_LOG("Failed to allocate app event queue"); appError(APP_ERROR_EVENT_QUEUE_FAILED); } // Start App task. @@ -157,10 +157,10 @@ CHIP_ERROR AppTask::Init() { CHIP_ERROR err = CHIP_NO_ERROR; #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR - int rc = boot_set_confirmed(); + int rc = flash_area_boot_set_confirmed(); if (rc != 0) { - P6_LOG("boot_set_confirmed failed"); + PSOC6_LOG("flash_area_boot_set_confirmed failed"); appError(CHIP_ERROR_UNINITIALIZED); } #endif @@ -193,11 +193,11 @@ CHIP_ERROR AppTask::Init() ); if (sFunctionTimer == NULL) { - P6_LOG("funct timer create failed"); + PSOC6_LOG("funct timer create failed"); appError(APP_ERROR_CREATE_TIMER_FAILED); } NetWorkCommissioningInstInit(); - P6_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); // Initialize LEDs sStatusLED.Init(SYSTEM_STATE_LED); @@ -218,11 +218,11 @@ void AppTask::AppTaskMain(void * pvParameter) CHIP_ERROR err = sAppTask.Init(); if (err != CHIP_NO_ERROR) { - P6_LOG("AppTask.Init() failed"); + PSOC6_LOG("AppTask.Init() failed"); appError(err); } - P6_LOG("App Task started"); + PSOC6_LOG("App Task started"); while (true) { @@ -298,7 +298,8 @@ void AppTask::FunctionHandler(AppEvent * event) { if (!sAppTask.mFunctionTimerActive && sAppTask.mFunction == Function::kNoneSelected) { - P6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); + PSOC6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", + FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); // Start timer for FACTORY_RESET_CANCEL_WINDOW_TIMEOUT to allow user to // cancel, if required. sAppTask.StartTimer(FACTORY_RESET_CANCEL_WINDOW_TIMEOUT); @@ -322,7 +323,7 @@ void AppTask::FunctionHandler(AppEvent * event) // canceled. sAppTask.mFunction = Function::kNoneSelected; - P6_LOG("Factory Reset has been Canceled"); + PSOC6_LOG("Factory Reset has been Canceled"); } } } @@ -331,7 +332,7 @@ void AppTask::CancelTimer() { if (xTimerStop(sFunctionTimer, 0) == pdFAIL) { - P6_LOG("app timer stop() failed"); + PSOC6_LOG("app timer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } @@ -342,7 +343,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) { if (xTimerIsTimerActive(sFunctionTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -351,7 +352,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sFunctionTimer, aTimeoutInMs / portTICK_PERIOD_MS, 100) != pdPASS) { - P6_LOG("app timer start() failed"); + PSOC6_LOG("app timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } @@ -382,11 +383,11 @@ void AppTask::PostEvent(const AppEvent * aEvent) } if (!status) - P6_LOG("Failed to post event to app task event queue"); + PSOC6_LOG("Failed to post event to app task event queue"); } else { - P6_LOG("Event Queue is NULL should never happen"); + PSOC6_LOG("Event Queue is NULL should never happen"); } } @@ -398,7 +399,7 @@ void AppTask::DispatchEvent(AppEvent * aEvent) } else { - P6_LOG("Event received with no handler. Dropping event."); + PSOC6_LOG("Event received with no handler. Dropping event."); } } @@ -411,7 +412,7 @@ void AppTask::OnOffUpdateClusterState(intptr_t context) if (status != Protocols::InteractionModel::Status::Success) { - P6_LOG("ERR: updating on/off %x", to_underlying(status)); + PSOC6_LOG("ERR: updating on/off %x", to_underlying(status)); } } @@ -432,7 +433,7 @@ void AppTask::InitOTARequestor() gRequestorUser.Init(&gRequestorCore, &gImageProcessor); - P6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); } #endif diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/ButtonHandler.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/ButtonHandler.cpp index 7d65fc4134625e..3fbd1c13796fd1 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/src/ButtonHandler.cpp +++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/ButtonHandler.cpp @@ -102,7 +102,7 @@ void ButtonHandler::TimerCallback(TimerHandle_t xTimer) buttonevent = cyhal_gpio_read(APP_FUNCTION_BUTTON); break; default: - P6_LOG("Unhandled TimerID: %d", timerId); + PSOC6_LOG("Unhandled TimerID: %d", timerId); break; } diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/ClusterManager.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/ClusterManager.cpp index 38d009a53f8fc7..32428177bbd247 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/src/ClusterManager.cpp +++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/ClusterManager.cpp @@ -50,9 +50,9 @@ ClusterManager ClusterManager::sCluster; void ClusterManager::OnOnOffPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value) { VerifyOrExit(attributeId == OnOff::Attributes::OnOff::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); // At this point we can assume that value points to a bool value. mEndpointOnOffState[endpointId - 1] = *value; @@ -70,9 +70,9 @@ void ClusterManager::OnLevelControlAttributeChangeCallback(EndpointId endpointId uint8_t brightness = onOffState ? *value : 0; VerifyOrExit(attributeId == LevelControl::Attributes::CurrentLevel::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); endpointId == ENDPOINT_FIRST_IDX ? sClusterLED.SetBrightness(brightness) : sLightLED.SetBrightness(brightness); @@ -85,9 +85,9 @@ void ClusterManager::OnColorControlAttributeChangeCallback(EndpointId endpointId using namespace ColorControl::Attributes; VerifyOrExit(attributeId == CurrentHue::Id || attributeId == CurrentSaturation::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX || endpointId == ENDPOINT_SECOND_IDX, - P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); if (endpointId == 1) { uint8_t hue, saturation; @@ -137,8 +137,8 @@ void IdentifyTimerHandler(Layer * systemLayer, void * appState) void ClusterManager::OnIdentifyPostAttributeChangeCallback(EndpointId endpointId, AttributeId attributeId, uint8_t * value) { VerifyOrExit(attributeId == Identify::Attributes::IdentifyTime::Id, - P6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); - VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX, P6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); + PSOC6_LOG("Unhandled Attribute ID: '" ChipLogFormatMEI "'", ChipLogValueMEI(attributeId))); + VerifyOrExit(endpointId == ENDPOINT_FIRST_IDX, PSOC6_LOG("Unexpected EndPoint ID: `0x%02x'", endpointId)); /* IdentifyTime Attribute Spec mentions "flashing a light with a period of 0.5 seconds" */ sStatusLED.Blink(kIdentifyTimerDelayMS * 2); diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/ZclCallbacks.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/ZclCallbacks.cpp index 9a439771026736..2e805ac61367ee 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/src/ZclCallbacks.cpp +++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/ZclCallbacks.cpp @@ -39,9 +39,9 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & EndpointId endpoint = attributePath.mEndpointId; ClusterId clusterId = attributePath.mClusterId; AttributeId attributeId = attributePath.mAttributeId; - P6_LOG("MatterPostAttributeChangeCallback - Cluster ID: " ChipLogFormatMEI - ", EndPoint ID: '0x%02x', Attribute ID: " ChipLogFormatMEI, - ChipLogValueMEI(clusterId), endpoint, ChipLogValueMEI(attributeId)); + PSOC6_LOG("MatterPostAttributeChangeCallback - Cluster ID: " ChipLogFormatMEI + ", EndPoint ID: '0x%02x', Attribute ID: " ChipLogFormatMEI, + ChipLogValueMEI(clusterId), endpoint, ChipLogValueMEI(attributeId)); switch (clusterId) { @@ -61,7 +61,7 @@ void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & ClusterMgr().OnColorControlAttributeChangeCallback(endpoint, attributeId, value); break; default: - P6_LOG("Unhandled cluster ID: " ChipLogFormatMEI, ChipLogValueMEI(clusterId)); + PSOC6_LOG("Unhandled cluster ID: " ChipLogFormatMEI, ChipLogValueMEI(clusterId)); break; } } diff --git a/examples/all-clusters-minimal-app/infineon/psoc6/src/main.cpp b/examples/all-clusters-minimal-app/infineon/psoc6/src/main.cpp index 5ac891ae1816f2..72a10004f39a3a 100644 --- a/examples/all-clusters-minimal-app/infineon/psoc6/src/main.cpp +++ b/examples/all-clusters-minimal-app/infineon/psoc6/src/main.cpp @@ -57,7 +57,7 @@ static void main_task(void * pvParameters); //================================================================================= void appError(int err) { - P6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + PSOC6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); portDISABLE_INTERRUPTS(); while (true) ; @@ -90,35 +90,35 @@ static void main_task(void * pvParameters) CHIP_ERROR ret = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); + PSOC6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); appError(ret); } ret = PlatformMgr().InitChipStack(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().InitChipStack() failed"); + PSOC6_LOG("PlatformMgr().InitChipStack() failed"); appError(ret); } - ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("P6_CLUSTERS"); + ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("PSOC6_CLUSTERS"); if (ret != CHIP_NO_ERROR) { - P6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); + PSOC6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); appError(ret); } - P6_LOG("Starting Platform Manager Event Loop"); + PSOC6_LOG("Starting Platform Manager Event Loop"); ret = PlatformMgr().StartEventLoopTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().StartEventLoopTask() failed"); + PSOC6_LOG("PlatformMgr().StartEventLoopTask() failed"); appError(ret); } ret = GetAppTask().StartAppTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("GetAppTask().Init() failed"); + PSOC6_LOG("GetAppTask().Init() failed"); appError(ret); } @@ -131,7 +131,7 @@ static void main_task(void * pvParameters) // ================================================================================ int main(void) { - init_p6Platform(); + init_psoc6Platform(); #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR // Clear watchdog timer (started by bootloader) so that it doesn't trigger a reset cyhal_wdt_t wdt_obj; @@ -142,9 +142,9 @@ int main(void) MemMonitoring::startHeapMonitoring(); #endif - P6_LOG("==================================================\r\n"); - P6_LOG("chip-p6-all-clusters-minimal-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("==================================================\r\n"); + PSOC6_LOG("==================================================\r\n"); + PSOC6_LOG("chip-psoc6-all-clusters-minimal-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("==================================================\r\n"); /* Start the FreeRTOS scheduler */ vTaskStartScheduler(); @@ -154,5 +154,5 @@ int main(void) PlatformMgr().Shutdown(); // Should never get here. - P6_LOG("vTaskStartScheduler() failed"); + PSOC6_LOG("vTaskStartScheduler() failed"); } diff --git a/examples/bridge-app/bridge-common/bridge-app.matter b/examples/bridge-app/bridge-common/bridge-app.matter index 3600cfdcc740cb..8f91a116cb0bb1 100644 --- a/examples/bridge-app/bridge-common/bridge-app.matter +++ b/examples/bridge-app/bridge-common/bridge-app.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -2330,7 +2330,7 @@ endpoint 2 { ram attribute defaultMoveRate; persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/bridge-app/bridge-common/bridge-app.zap b/examples/bridge-app/bridge-common/bridge-app.zap index 9e79b7848a4dda..1b6b16be94d51a 100644 --- a/examples/bridge-app/bridge-common/bridge-app.zap +++ b/examples/bridge-app/bridge-common/bridge-app.zap @@ -5387,7 +5387,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter index b5922f3082632b..83413127c088db 100644 --- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter +++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -2041,7 +2041,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x03; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap index 1fe8c97a3cda61..444408ac97d1ac 100644 --- a/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap +++ b/examples/chef/devices/noip_rootnode_dimmablelight_bCwGYSDpoe.zap @@ -4564,7 +4564,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter index 319b6b25104be0..9621d615447e40 100644 --- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter +++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -2407,7 +2407,7 @@ endpoint 2 { callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap index 3935c80b5b62d8..6a4517c2962607 100644 --- a/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap +++ b/examples/chef/devices/rootnode_basicvideoplayer_0ff86e943b.zap @@ -4666,7 +4666,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter index 66aa1eabaab2c8..c5059bc7a07bad 100644 --- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter +++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1404,7 +1404,7 @@ cluster GroupKeyManagement = 63 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -1988,7 +1988,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2047,7 +2047,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x0010; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap index f3a2c9649d7356..d9ba9c9926b329 100644 --- a/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap +++ b/examples/chef/devices/rootnode_colortemperaturelight_hbUnzYVeyn.zap @@ -3047,7 +3047,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3925,7 +3925,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter index dcc7f2724d5b03..da3fb96aae5575 100644 --- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter +++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1852,7 +1852,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x03; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap index 29e4889ffbe438..3feb19881c6a29 100644 --- a/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap +++ b/examples/chef/devices/rootnode_dimmablelight_bCwGYSDpoe.zap @@ -3301,7 +3301,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter index 013752d2fdbf8a..2cc78bab075179 100644 --- a/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter +++ b/examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter index 4f81dc1f1a4580..48c250ea3fd4b5 100644 --- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter +++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1505,7 +1505,7 @@ cluster FixedLabel = 64 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2109,7 +2109,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x03; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2159,7 +2159,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x1f; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap index b72d455419f8a7..f0fc3c6c264c20 100644 --- a/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap +++ b/examples/chef/devices/rootnode_extendedcolorlight_8lcaaYJVAa.zap @@ -3269,7 +3269,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4029,7 +4029,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter index 8bf334f5d7c66d..badf76462c9d24 100644 --- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter +++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -2237,7 +2237,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap index cc2e7ef77d2186..88f0e7a0408646 100644 --- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap +++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.zap @@ -19,18 +19,18 @@ "package": [ { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/zcl/zcl.json", - "type": "zcl-properties", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", "category": "matter", - "version": 1, - "description": "Matter SDK ZCL data" + "version": "chip-v1" }, { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", + "path": "../../../src/app/zap-templates/zcl/zcl.json", + "type": "zcl-properties", "category": "matter", - "version": "chip-v1" + "version": 1, + "description": "Matter SDK ZCL data" } ], "endpointTypes": [ @@ -3173,7 +3173,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter index 68956182340faf..b5a953cb331994 100644 --- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter +++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1789,7 +1789,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap index c9ecb1d30b494c..e8625f2f612caf 100644 --- a/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap +++ b/examples/chef/devices/rootnode_onofflight_bbs1b7IaOV.zap @@ -3269,7 +3269,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.matter b/examples/chef/devices/rootnode_onofflight_samplemei.matter index 242a210ecf0f4c..201ad01c70d944 100644 --- a/examples/chef/devices/rootnode_onofflight_samplemei.matter +++ b/examples/chef/devices/rootnode_onofflight_samplemei.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1821,7 +1821,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_onofflight_samplemei.zap b/examples/chef/devices/rootnode_onofflight_samplemei.zap index c7e4698ff78641..6670453d47603e 100644 --- a/examples/chef/devices/rootnode_onofflight_samplemei.zap +++ b/examples/chef/devices/rootnode_onofflight_samplemei.zap @@ -3269,7 +3269,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap index a784ab5723b85f..f831de4d5d9a7c 100644 --- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap +++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.zap @@ -24,13 +24,6 @@ "category": "matter", "version": 1, "description": "Matter SDK ZCL data" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "category": "matter", - "version": "chip-v1" } ], "endpointTypes": [ diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter index b1e4870d7ccffb..8cbcd9852df88f 100644 --- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter +++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1686,7 +1686,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap index 03f05dae9248db..b766b72f319f87 100644 --- a/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap +++ b/examples/chef/devices/rootnode_speaker_RpzeXdimqA.zap @@ -2985,7 +2985,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/chef/sample_app_util/test_files/sample_zap_file.zap b/examples/chef/sample_app_util/test_files/sample_zap_file.zap index 5dfd0fb28a9427..420eaa37ef5615 100644 --- a/examples/chef/sample_app_util/test_files/sample_zap_file.zap +++ b/examples/chef/sample_app_util/test_files/sample_zap_file.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 102, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -4925,7 +4926,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp b/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp index 3d4c296e7864fb..bc80e568b2bd7f 100644 --- a/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp +++ b/examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp @@ -34,10 +34,14 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand() if (mCommissioningWindowOption == Controller::CommissioningWindowOpener::CommissioningWindowOption::kTokenWithRandomPIN) { SetupPayload ignored; - return mWindowOpener->OpenCommissioningWindow(mNodeId, System::Clock::Seconds16(mCommissioningWindowTimeout), mIteration, - mDiscriminator, NullOptional, NullOptional, - &mOnOpenCommissioningWindowCallback, ignored, - /* readVIDPIDAttributes */ true); + return mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(mNodeId) + .SetTimeout(mCommissioningWindowTimeout) + .SetIteration(mIteration) + .SetDiscriminator(mDiscriminator) + .SetReadVIDPIDAttributes(true) + .SetCallback(&mOnOpenCommissioningWindowCallback), + ignored); } ChipLogError(chipTool, "Unknown commissioning window option: %d", to_underlying(mCommissioningWindowOption)); diff --git a/examples/common/pigweed/BUILD.gn b/examples/common/pigweed/BUILD.gn index e523bea380c03f..6252f86e637890 100644 --- a/examples/common/pigweed/BUILD.gn +++ b/examples/common/pigweed/BUILD.gn @@ -82,6 +82,7 @@ pw_proto_library("button_service") { pw_proto_library("fabric_admin_service") { sources = [ "protos/fabric_admin_service.proto" ] + inputs = [ "protos/fabric_admin_service.options" ] deps = [ "$dir_pw_protobuf:common_protos" ] strip_prefix = "protos" prefix = "fabric_admin_service" diff --git a/examples/common/pigweed/protos/fabric_admin_service.options b/examples/common/pigweed/protos/fabric_admin_service.options new file mode 100644 index 00000000000000..9a65ae8a2b61d1 --- /dev/null +++ b/examples/common/pigweed/protos/fabric_admin_service.options @@ -0,0 +1,2 @@ +chip.rpc.DeviceCommissioningWindowInfo.verifier max_size:97 // kSpake2p_VerifierSerialized_Length +chip.rpc.DeviceCommissioningWindowInfo.salt max_size:32 // kSpake2p_Max_PBKDF_Salt_Length diff --git a/examples/common/pigweed/protos/fabric_admin_service.proto b/examples/common/pigweed/protos/fabric_admin_service.proto index e52fd2951ac0d7..7f6ec4f4995b12 100644 --- a/examples/common/pigweed/protos/fabric_admin_service.proto +++ b/examples/common/pigweed/protos/fabric_admin_service.proto @@ -5,8 +5,13 @@ import 'pw_protobuf_protos/common.proto'; package chip.rpc; // Define the message for a synchronized end device with necessary fields -message DeviceInfo { +message DeviceCommissioningWindowInfo { uint64 node_id = 1; + uint32 commissioning_timeout = 2; + uint32 discriminator = 3; + uint32 iterations = 4; + bytes salt = 5; + bytes verifier = 6; } // Define the response message to convey the status of the operation @@ -15,6 +20,5 @@ message OperationStatus { } service FabricAdmin { - rpc OpenCommissioningWindow(DeviceInfo) returns (OperationStatus){} + rpc OpenCommissioningWindow(DeviceCommissioningWindowInfo) returns (OperationStatus){} } - diff --git a/examples/common/pigweed/rpc_services/FabricAdmin.h b/examples/common/pigweed/rpc_services/FabricAdmin.h index 5254b9e9054a0c..14de9d50f60673 100644 --- a/examples/common/pigweed/rpc_services/FabricAdmin.h +++ b/examples/common/pigweed/rpc_services/FabricAdmin.h @@ -34,7 +34,8 @@ class FabricAdmin : public pw_rpc::nanopb::FabricAdmin::Service public: virtual ~FabricAdmin() = default; - virtual pw::Status OpenCommissioningWindow(const chip_rpc_DeviceInfo & request, chip_rpc_OperationStatus & response) + virtual pw::Status OpenCommissioningWindow(const chip_rpc_DeviceCommissioningWindowInfo & request, + chip_rpc_OperationStatus & response) { return pw::Status::Unimplemented(); } diff --git a/examples/energy-management-app/energy-management-common/energy-management-app.matter b/examples/energy-management-app/energy-management-common/energy-management-app.matter index f34ffd80cdf87b..623c247391a6a1 100644 --- a/examples/energy-management-app/energy-management-common/energy-management-app.matter +++ b/examples/energy-management-app/energy-management-common/energy-management-app.matter @@ -2331,6 +2331,8 @@ endpoint 1 { server cluster EnergyEvseMode { callback attribute supportedModes; callback attribute currentMode; + ram attribute startUpMode; + ram attribute onMode; callback attribute generatedCommandList; callback attribute acceptedCommandList; callback attribute eventList; @@ -2345,6 +2347,8 @@ endpoint 1 { server cluster DeviceEnergyManagementMode { callback attribute supportedModes; callback attribute currentMode; + ram attribute startUpMode; + ram attribute onMode; callback attribute generatedCommandList; callback attribute acceptedCommandList; callback attribute eventList; diff --git a/examples/energy-management-app/energy-management-common/energy-management-app.zap b/examples/energy-management-app/energy-management-common/energy-management-app.zap index dc4b11c14c6742..566588ab8e4d0d 100644 --- a/examples/energy-management-app/energy-management-common/energy-management-app.zap +++ b/examples/energy-management-app/energy-management-common/energy-management-app.zap @@ -4679,6 +4679,38 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "StartUpMode", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnMode", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -4836,6 +4868,38 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "StartUpMode", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "OnMode", + "code": 3, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, diff --git a/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.cpp b/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.cpp index 93d1f6f51002f8..480cfbca35a20b 100644 --- a/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.cpp +++ b/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.cpp @@ -33,11 +33,31 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand() if (mCommissioningWindowOption == Controller::CommissioningWindowOpener::CommissioningWindowOption::kTokenWithRandomPIN) { - SetupPayload ignored; - return mWindowOpener->OpenCommissioningWindow(mNodeId, System::Clock::Seconds16(mCommissioningWindowTimeout), mIteration, - mDiscriminator, NullOptional, NullOptional, - &mOnOpenCommissioningWindowCallback, ignored, - /* readVIDPIDAttributes */ true); + if (mVerifier.HasValue()) + { + VerifyOrReturnError(mSalt.HasValue(), CHIP_ERROR_INVALID_ARGUMENT); + return mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams() + .SetNodeId(mNodeId) + .SetTimeout(mCommissioningWindowTimeout) + .SetIteration(mIteration) + .SetDiscriminator(mDiscriminator) + .SetVerifier(mVerifier.Value()) + .SetSalt(mSalt.Value()) + .SetCallback(&mOnOpenCommissioningWindowVerifierCallback)); + } + else + { + SetupPayload ignored; + return mWindowOpener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(mNodeId) + .SetTimeout(mCommissioningWindowTimeout) + .SetIteration(mIteration) + .SetDiscriminator(mDiscriminator) + .SetSalt(mSalt) + .SetReadVIDPIDAttributes(true) + .SetCallback(&mOnOpenCommissioningWindowCallback), + ignored); + } } ChipLogError(NotSpecified, "Unknown commissioning window option: %d", to_underlying(mCommissioningWindowOption)); @@ -58,6 +78,11 @@ void OpenCommissioningWindowCommand::OnOpenCommissioningWindowResponse(void * co OnOpenBasicCommissioningWindowResponse(context, remoteId, err); } +void OpenCommissioningWindowCommand::OnOpenCommissioningWindowVerifierResponse(void * context, NodeId remoteId, CHIP_ERROR err) +{ + OnOpenBasicCommissioningWindowResponse(context, remoteId, err); +} + void OpenCommissioningWindowCommand::OnOpenBasicCommissioningWindowResponse(void * context, NodeId remoteId, CHIP_ERROR err) { LogErrorOnFailure(err); diff --git a/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.h b/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.h index 86e1b68c3d5f3f..09788507210aaf 100644 --- a/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.h +++ b/examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.h @@ -35,6 +35,7 @@ class OpenCommissioningWindowCommand : public CHIPCommand OpenCommissioningWindowCommand(CredentialIssuerCommands * credIssuerCommands) : CHIPCommand("open-commissioning-window", credIssuerCommands), mOnOpenCommissioningWindowCallback(OnOpenCommissioningWindowResponse, this), + mOnOpenCommissioningWindowVerifierCallback(OnOpenCommissioningWindowVerifierResponse, this), mOnOpenBasicCommissioningWindowCallback(OnOpenBasicCommissioningWindowResponse, this) { AddArgument("node-id", 0, UINT64_MAX, &mNodeId, "Node to send command to."); @@ -47,6 +48,12 @@ class OpenCommissioningWindowCommand : public CHIPCommand &mIteration, "Number of PBKDF iterations to use to derive the verifier. Ignored if 'option' is 0."); AddArgument("discriminator", 0, 4096, &mDiscriminator, "Discriminator to use for advertising. Ignored if 'option' is 0."); AddArgument("timeout", 0, UINT16_MAX, &mTimeout, "Time, in seconds, before this command is considered to have timed out."); + AddArgument("salt", &mSalt, + "Salt payload encoded in hexadecimal. Random salt will be generated if absent. " + "This needs to be present if verifier is provided, corresponding to salt used for generating verifier"); + AddArgument("verifier", &mVerifier, + "PAKE Passcode verifier encoded in hexadecimal format. Will be generated from random setup pin and other " + "params if absent"); } void RegisterDelegate(CommissioningWindowDelegate * delegate) { mDelegate = delegate; } @@ -69,12 +76,16 @@ class OpenCommissioningWindowCommand : public CHIPCommand uint16_t mDiscriminator; chip::Optional mTimeout; + chip::Optional mSalt; + chip::Optional mVerifier; chip::Platform::UniquePtr mWindowOpener; static void OnOpenCommissioningWindowResponse(void * context, NodeId deviceId, CHIP_ERROR status, chip::SetupPayload payload); + static void OnOpenCommissioningWindowVerifierResponse(void * context, NodeId deviceId, CHIP_ERROR status); static void OnOpenBasicCommissioningWindowResponse(void * context, NodeId deviceId, CHIP_ERROR status); chip::Callback::Callback mOnOpenCommissioningWindowCallback; + chip::Callback::Callback mOnOpenCommissioningWindowVerifierCallback; chip::Callback::Callback mOnOpenBasicCommissioningWindowCallback; }; diff --git a/examples/fabric-admin/rpc/RpcServer.cpp b/examples/fabric-admin/rpc/RpcServer.cpp index 51ecb1ff6c13c5..d4979e5a27c427 100644 --- a/examples/fabric-admin/rpc/RpcServer.cpp +++ b/examples/fabric-admin/rpc/RpcServer.cpp @@ -37,14 +37,27 @@ namespace { class FabricAdmin final : public rpc::FabricAdmin { public: - pw::Status OpenCommissioningWindow(const chip_rpc_DeviceInfo & request, chip_rpc_OperationStatus & response) override + pw::Status OpenCommissioningWindow(const chip_rpc_DeviceCommissioningWindowInfo & request, + chip_rpc_OperationStatus & response) override { - NodeId nodeId = request.node_id; + NodeId nodeId = request.node_id; + uint32_t commissioningTimeout = request.commissioning_timeout; + uint32_t iterations = request.iterations; + uint32_t discriminator = request.discriminator; + + char saltHex[Crypto::kSpake2p_Max_PBKDF_Salt_Length * 2 + 1]; + Encoding::BytesToHex(request.salt.bytes, request.salt.size, saltHex, sizeof(saltHex), Encoding::HexFlags::kNullTerminate); + + char verifierHex[Crypto::kSpake2p_VerifierSerialized_Length * 2 + 1]; + Encoding::BytesToHex(request.verifier.bytes, request.verifier.size, verifierHex, sizeof(verifierHex), + Encoding::HexFlags::kNullTerminate); + ChipLogProgress(NotSpecified, "Received OpenCommissioningWindow request: 0x%lx", nodeId); - char command[64]; - snprintf(command, sizeof(command), "pairing open-commissioning-window %ld %d %d %d %d %d", nodeId, kRootEndpointId, - kEnhancedCommissioningMethod, kWindowTimeout, kIteration, kDiscriminator); + char command[512]; + snprintf(command, sizeof(command), "pairing open-commissioning-window %ld %d %d %d %d %d --salt hex:%s --verifier hex:%s", + nodeId, kRootEndpointId, kEnhancedCommissioningMethod, commissioningTimeout, iterations, discriminator, saltHex, + verifierHex); PushCommand(command); diff --git a/examples/fabric-bridge-app/linux/RpcClient.cpp b/examples/fabric-bridge-app/linux/RpcClient.cpp index 02916b87aaa06a..d2aef5d1d82e5e 100644 --- a/examples/fabric-bridge-app/linux/RpcClient.cpp +++ b/examples/fabric-bridge-app/linux/RpcClient.cpp @@ -95,12 +95,9 @@ CHIP_ERROR InitRpcClient(uint16_t rpcServerPort) return rpc::client::StartPacketProcessing(); } -CHIP_ERROR OpenCommissioningWindow(NodeId nodeId) +CHIP_ERROR OpenCommissioningWindow(chip_rpc_DeviceCommissioningWindowInfo device) { - ChipLogProgress(NotSpecified, "OpenCommissioningWindow with Node Id 0x:" ChipLogFormatX64, ChipLogValueX64(nodeId)); - - chip_rpc_DeviceInfo device; - device.node_id = nodeId; + ChipLogProgress(NotSpecified, "OpenCommissioningWindow with Node Id 0x" ChipLogFormatX64, ChipLogValueX64(device.node_id)); // The RPC call is kept alive until it completes. When a response is received, it will be logged by the handler // function and the call will complete. @@ -114,3 +111,35 @@ CHIP_ERROR OpenCommissioningWindow(NodeId nodeId) return WaitForResponse(call); } + +CHIP_ERROR +OpenCommissioningWindow(chip::Controller::CommissioningWindowPasscodeParams params) +{ + chip_rpc_DeviceCommissioningWindowInfo device; + device.node_id = params.GetNodeId(); + device.commissioning_timeout = params.GetTimeout().count(); + device.discriminator = params.GetDiscriminator(); + device.iterations = params.GetIteration(); + + return OpenCommissioningWindow(device); +} + +CHIP_ERROR +OpenCommissioningWindow(chip::Controller::CommissioningWindowVerifierParams params) +{ + chip_rpc_DeviceCommissioningWindowInfo device; + device.node_id = params.GetNodeId(); + device.commissioning_timeout = params.GetTimeout().count(); + device.discriminator = params.GetDiscriminator(); + device.iterations = params.GetIteration(); + + VerifyOrReturnError(params.GetSalt().size() <= sizeof(device.salt.bytes), CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(device.salt.bytes, params.GetSalt().data(), params.GetSalt().size()); + device.salt.size = static_cast(params.GetSalt().size()); + + VerifyOrReturnError(params.GetVerifier().size() <= sizeof(device.verifier.bytes), CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(device.verifier.bytes, params.GetVerifier().data(), params.GetVerifier().size()); + device.verifier.size = static_cast(params.GetVerifier().size()); + + return OpenCommissioningWindow(device); +} diff --git a/examples/fabric-bridge-app/linux/include/RpcClient.h b/examples/fabric-bridge-app/linux/include/RpcClient.h index 34fa5c19de9349..e7e2cc5b48505c 100644 --- a/examples/fabric-bridge-app/linux/include/RpcClient.h +++ b/examples/fabric-bridge-app/linux/include/RpcClient.h @@ -18,6 +18,7 @@ #pragma once +#include #include constexpr uint16_t kFabricAdminServerPort = 33001; @@ -33,12 +34,25 @@ constexpr uint16_t kFabricAdminServerPort = 33001; CHIP_ERROR InitRpcClient(uint16_t rpcServerPort); /** - * Opens a commissioning window for a specified node. + * Opens a commissioning window for a specified node using setup PIN (passcode). * - * @param nodeId The identifier of the node for which the commissioning window should be opened. + * @param params Params for opening the commissioning window using passcode. * @return CHIP_ERROR An error code indicating the success or failure of the operation. * - CHIP_NO_ERROR: The RPC command was successfully processed. * - CHIP_ERROR_BUSY: Another commissioning window is currently in progress. * - CHIP_ERROR_INTERNAL: An internal error occurred. */ -CHIP_ERROR OpenCommissioningWindow(chip::NodeId nodeId); +CHIP_ERROR +OpenCommissioningWindow(chip::Controller::CommissioningWindowPasscodeParams params); + +/** + * Opens a commissioning window for a specified node using pre-computed PAKE passcode verifier. + * + * @param params Params for opening the commissioning window using verifier. + * @return CHIP_ERROR An error code indicating the success or failure of the operation. + * - CHIP_NO_ERROR: The RPC command was successfully sent. + * - CHIP_ERROR_BUSY: Another commissioning window is currently in progress. + * - CHIP_ERROR_INTERNAL: An internal error occurred. + */ +CHIP_ERROR +OpenCommissioningWindow(chip::Controller::CommissioningWindowVerifierParams params); diff --git a/examples/fabric-bridge-app/linux/main.cpp b/examples/fabric-bridge-app/linux/main.cpp index 0aa22b8445ee56..7e0a70bc82b18b 100644 --- a/examples/fabric-bridge-app/linux/main.cpp +++ b/examples/fabric-bridge-app/linux/main.cpp @@ -69,7 +69,11 @@ void BridgePollingThread() #if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE else if (ch == 'o') { - CHIP_ERROR err = OpenCommissioningWindow(0x1234); + CHIP_ERROR err = OpenCommissioningWindow(chip::Controller::CommissioningWindowPasscodeParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetDiscriminator(3840) + .SetIteration(1000)); if (err != CHIP_NO_ERROR) { ChipLogError(NotSpecified, "Failed to call OpenCommissioningWindow RPC: %" CHIP_ERROR_FORMAT, err.Format()); @@ -115,7 +119,7 @@ void AdministratorCommissioningCommandHandler::InvokeCommand(HandlerContext & ha using Protocols::InteractionModel::Status; EndpointId endpointId = handlerContext.mRequestPath.mEndpointId; - ChipLogProgress(NotSpecified, "Received command to open commissioning window on Endpoind: %d", endpointId); + ChipLogProgress(NotSpecified, "Received command to open commissioning window on Endpoint: %d", endpointId); if (handlerContext.mRequestPath.mCommandId != Commands::OpenCommissioningWindow::Id || endpointId == kRootEndpointId) { @@ -124,23 +128,37 @@ void AdministratorCommissioningCommandHandler::InvokeCommand(HandlerContext & ha } handlerContext.SetCommandHandled(); - Status status = Status::Success; + + Commands::OpenCommissioningWindow::DecodableType commandData; + if (DataModel::Decode(handlerContext.mPayload, commandData) != CHIP_NO_ERROR) + { + handlerContext.mCommandHandler.AddStatus(handlerContext.mRequestPath, Status::InvalidCommand); + return; + } + + Status status = Status::Failure; #if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE Device * device = DeviceMgr().GetDevice(endpointId); // TODO: issues:#33784, need to make OpenCommissioningWindow synchronous - if (device != nullptr && OpenCommissioningWindow(device->GetNodeId()) == CHIP_NO_ERROR) + if (device != nullptr && + OpenCommissioningWindow(chip::Controller::CommissioningWindowVerifierParams() + .SetNodeId(device->GetNodeId()) + .SetTimeout(commandData.commissioningTimeout) + .SetDiscriminator(commandData.discriminator) + .SetIteration(commandData.iterations) + .SetSalt(commandData.salt) + .SetVerifier(commandData.PAKEPasscodeVerifier)) == CHIP_NO_ERROR) { ChipLogProgress(NotSpecified, "Commissioning window is now open"); + status = Status::Success; } else { - status = Status::Failure; ChipLogProgress(NotSpecified, "Commissioning window is failed to open"); } #else - status = Status::Failure; ChipLogProgress(NotSpecified, "Commissioning window failed to open: PW_RPC_FABRIC_BRIDGE_SERVICE not defined"); #endif // defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE diff --git a/examples/laundry-washer-app/nxp/common/main/operational-state-delegate-impl.cpp b/examples/laundry-washer-app/nxp/common/main/operational-state-delegate-impl.cpp index 4a6608842c174d..961fc868ed12b5 100644 --- a/examples/laundry-washer-app/nxp/common/main/operational-state-delegate-impl.cpp +++ b/examples/laundry-washer-app/nxp/common/main/operational-state-delegate-impl.cpp @@ -21,7 +21,6 @@ using namespace chip; using namespace chip::app; using namespace chip::app::Clusters; using namespace chip::app::Clusters::OperationalState; -using namespace chip::app::Clusters::RvcOperationalState; CHIP_ERROR GenericOperationalStateDelegateImpl::GetOperationalStateAtIndex(size_t index, GenericOperationalState & operationalState) { diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.matter b/examples/light-switch-app/light-switch-common/light-switch-app.matter index a0d6dfe2d3a781..99e5a0605bacae 100644 --- a/examples/light-switch-app/light-switch-common/light-switch-app.matter +++ b/examples/light-switch-app/light-switch-common/light-switch-app.matter @@ -2189,7 +2189,7 @@ provisional cluster ScenesManagement = 98 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; diff --git a/examples/light-switch-app/light-switch-common/light-switch-app.zap b/examples/light-switch-app/light-switch-common/light-switch-app.zap index c181f1ffae1120..68a3e015ec0294 100644 --- a/examples/light-switch-app/light-switch-common/light-switch-app.zap +++ b/examples/light-switch-app/light-switch-common/light-switch-app.zap @@ -19,18 +19,18 @@ "package": [ { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/zcl/zcl.json", - "type": "zcl-properties", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", "category": "matter", - "version": 1, - "description": "Matter SDK ZCL data" + "version": "chip-v1" }, { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", + "path": "../../../src/app/zap-templates/zcl/zcl.json", + "type": "zcl-properties", "category": "matter", - "version": "chip-v1" + "version": 1, + "description": "Matter SDK ZCL data" } ], "endpointTypes": [ @@ -5412,7 +5412,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/light-switch-app/qpg/zap/switch.matter b/examples/light-switch-app/qpg/zap/switch.matter index 677a40b0f5485a..cd0204ea46cec8 100644 --- a/examples/light-switch-app/qpg/zap/switch.matter +++ b/examples/light-switch-app/qpg/zap/switch.matter @@ -252,7 +252,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1986,7 +1986,7 @@ provisional cluster ScenesManagement = 98 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; diff --git a/examples/light-switch-app/qpg/zap/switch.zap b/examples/light-switch-app/qpg/zap/switch.zap index 362ef409bebaa6..acae7877c92a06 100644 --- a/examples/light-switch-app/qpg/zap/switch.zap +++ b/examples/light-switch-app/qpg/zap/switch.zap @@ -5140,7 +5140,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5617,7 +5617,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter index e9fbd295547920..f55a79c699b676 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1544,7 +1544,7 @@ cluster UserLabel = 65 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2161,7 +2161,7 @@ endpoint 1 { ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2223,7 +2223,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; ram attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap index 23465bb5f517aa..87d6c2f4c2f2a8 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-ethernet.zap @@ -3374,7 +3374,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -4300,7 +4300,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter index 312e1d244992eb..76615a2e64fd88 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1668,7 +1668,7 @@ cluster UserLabel = 65 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2347,7 +2347,7 @@ endpoint 1 { ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2409,7 +2409,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; ram attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap index a90a3218a93c5e..95e21f91d9870a 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-thread.zap @@ -4350,7 +4350,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5276,7 +5276,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter index bd6285c06f472e..47736182e30ed2 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1579,7 +1579,7 @@ cluster UserLabel = 65 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2210,7 +2210,7 @@ endpoint 1 { ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2272,7 +2272,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; ram attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap index dea7862fc7ce5c..35a6c1aa4c9d4a 100644 --- a/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap +++ b/examples/lighting-app/bouffalolab/data_model/lighting-app-wifi.zap @@ -3557,7 +3557,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -4483,7 +4483,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/infineon/psoc6/BUILD.gn b/examples/lighting-app/infineon/psoc6/BUILD.gn index 3bd75cc14d9e2c..8460cfef6dfec4 100644 --- a/examples/lighting-app/infineon/psoc6/BUILD.gn +++ b/examples/lighting-app/infineon/psoc6/BUILD.gn @@ -45,32 +45,38 @@ config("psoc6_ota_config") { ldflags = [ "-T" + rebase_path(linker_script, root_build_dir) ] - ldflags += [ "-Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,MCUBOOT_BOOTLOADER_SIZE=0x18000,--defsym,CY_BOOT_PRIMARY_1_SIZE=0x1C0000" ] + ldflags += [ "-Wl,--undefined=uxTopUsedPriority -Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,FLASH_AREA_IMG_1_PRIMARY_START=0x028000,--defsym,FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000" ] defines = [ "P6_OTA", - "OTA_SUPPORT ", - "OTA_USE_EXTERNAL_FLASH", - "CY_BOOT_USE_EXTERNAL_FLASH", - "MCUBOOT_HEADER_SIZE=0x400", - "MCUBOOT_MAX_IMG_SECTORS=3584", - "CY_BOOT_SCRATCH_SIZE=0x00004000", - "MCUBOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_PRIMARY_1_START=0x00018000", - "CY_BOOT_PRIMARY_1_SIZE=0x1C0000", - "CY_BOOT_SECONDARY_1_START=0x00000000", - "CY_BOOT_SECONDARY_1_SIZE=0x001C0000", - "CY_FLASH_ERASE_VALUE=0xFF", + "COMPONENT_MCUBOOT", + "CY_BOOTLOADER=MCUBOOT", + "OTA_SUPPORT=1", + "COMPONENT_OTA_PSOC_062", + "PSOC_062_2M", + "OTA_USE_EXTERNAL_FLASH=1", + "ENABLE_OTA_LOGS", + "ENABLE_OTA_BOOTLOADER_ABSTRACTION_LOGS", "MCUBOOT_IMAGE_NUMBER=1", - "MCUBOOT_SLOT_SIZE=0x1C0000", - "MCUBOOT_SCRATCH_SIZE=0x4000", - "MCUBOOT_SECTOR_SIZE = 512", + "MCUBOOT_MAX_IMG_SECTORS=3584", + "FLASH_AREA_BOOTLOADER_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_BOOTLOADER_SIZE=0x028000", + "FLASH_AREA_BOOTLOADER_START=0x000000", + "FLASH_AREA_IMAGE_SCRATCH_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMAGE_SCRATCH_SIZE=0x080000", + "FLASH_AREA_IMAGE_SCRATCH_START=0x440000", + "FLASH_AREA_IMAGE_SWAP_STATUS_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMAGE_SWAP_STATUS_SIZE=0x006c00", + "FLASH_AREA_IMAGE_SWAP_STATUS_START=0x1e8000", + "FLASH_AREA_IMG_1_PRIMARY_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_PRIMARY_START=0x028000", + "FLASH_AREA_IMG_1_SECONDARY_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMG_1_SECONDARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_SECONDARY_START=0x000200", "APP_VERSION_MAJOR=1", "APP_VERSION_MINOR=0", "APP_VERSION_BUILD=0", - "MCUBOOT_OVERWRITE_ONLY", - "CY_ENABLE_XIP_PROGRAM", ] if (build_update_image) { @@ -87,7 +93,7 @@ psoc6_sdk_sources("lighting_app_sdk_sources") { defines = [ "BOARD_ID=${psoc6_board}", - "P6_LOG_ENABLED=1", + "PSOC6_LOG_ENABLED=1", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setup_pin_code}", ] diff --git a/examples/lighting-app/infineon/psoc6/include/AppConfig.h b/examples/lighting-app/infineon/psoc6/include/AppConfig.h index 21b9e9467263fa..2fbc01038c0941 100644 --- a/examples/lighting-app/infineon/psoc6/include/AppConfig.h +++ b/examples/lighting-app/infineon/psoc6/include/AppConfig.h @@ -47,14 +47,14 @@ #define THREAD_ACTIVE_POLLING_INTERVAL_MS 100 #define THREAD_INACTIVE_POLLING_INTERVAL_MS 1000 -// P6 Logging +// PSOC6 Logging #ifdef __cplusplus extern "C" { #endif void appError(int err); -void P6Log(const char * aFormat, ...); -#define P6_LOG(...) P6Log(__VA_ARGS__) +void PSOC6Log(const char * aFormat, ...); +#define PSOC6_LOG(...) PSOC6Log(__VA_ARGS__) #ifdef __cplusplus } diff --git a/examples/lighting-app/infineon/psoc6/include/AppTask.h b/examples/lighting-app/infineon/psoc6/include/AppTask.h index 4f6f77663d18a4..2259880efb5726 100644 --- a/examples/lighting-app/infineon/psoc6/include/AppTask.h +++ b/examples/lighting-app/infineon/psoc6/include/AppTask.h @@ -30,6 +30,10 @@ #include #include +extern "C" { +#include "flash_map_backend.h" +} + // Application-defined error codes in the CHIP_ERROR space. #define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) #define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) diff --git a/examples/lighting-app/infineon/psoc6/include/CHIPProjectConfig.h b/examples/lighting-app/infineon/psoc6/include/CHIPProjectConfig.h index ab00f26adecb76..15143de90103ca 100644 --- a/examples/lighting-app/infineon/psoc6/include/CHIPProjectConfig.h +++ b/examples/lighting-app/infineon/psoc6/include/CHIPProjectConfig.h @@ -41,10 +41,10 @@ #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8005 /* The ProductName attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "P6-CYW43012 Light" +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "PSOC6-CYW43012 Light" /* The HardwareVersionString attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "P6-43012" +#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "PSOC6-43012" /* The HardwareVersion attribute of the Basic cluster. */ #define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION 43012 diff --git a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp index 49e6278ab032c9..43a501ad7edb5c 100644 --- a/examples/lighting-app/infineon/psoc6/src/AppTask.cpp +++ b/examples/lighting-app/infineon/psoc6/src/AppTask.cpp @@ -160,7 +160,7 @@ CHIP_ERROR AppTask::StartAppTask() sAppEventQueue = xQueueCreateStatic(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent), sAppEventQueueBuffer, &sAppEventQueueStruct); if (sAppEventQueue == NULL) { - P6_LOG("Failed to allocate app event queue"); + PSOC6_LOG("Failed to allocate app event queue"); appError(APP_ERROR_EVENT_QUEUE_FAILED); } @@ -173,10 +173,10 @@ CHIP_ERROR AppTask::Init() { CHIP_ERROR err = CHIP_NO_ERROR; #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR - int rc = boot_set_confirmed(); + int rc = flash_area_boot_set_confirmed(); if (rc != 0) { - P6_LOG("boot_set_confirmed failed"); + PSOC6_LOG("flash_area_boot_set_confirmed failed"); appError(CHIP_ERROR_UNINITIALIZED); } #endif @@ -209,15 +209,15 @@ CHIP_ERROR AppTask::Init() ); if (sFunctionTimer == NULL) { - P6_LOG("funct timer create failed"); + PSOC6_LOG("funct timer create failed"); appError(APP_ERROR_CREATE_TIMER_FAILED); } NetWorkCommissioningInstInit(); - P6_LOG("Current Firmware Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Firmware Version: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); err = LightMgr().Init(); if (err != CHIP_NO_ERROR) { - P6_LOG("LightMgr().Init() failed"); + PSOC6_LOG("LightMgr().Init() failed"); appError(err); } @@ -243,11 +243,11 @@ void AppTask::AppTaskMain(void * pvParameter) CHIP_ERROR err = sAppTask.Init(); if (err != CHIP_NO_ERROR) { - P6_LOG("AppTask.Init() failed"); + PSOC6_LOG("AppTask.Init() failed"); appError(err); } - P6_LOG("App Task started"); + PSOC6_LOG("App Task started"); while (true) { @@ -337,7 +337,7 @@ void AppTask::LightActionEventHandler(AppEvent * event) if (!LightMgr().InitiateAction(actor, action)) { - P6_LOG("Action is already in progress or active."); + PSOC6_LOG("Action is already in progress or active."); } } @@ -395,7 +395,8 @@ void AppTask::FunctionHandler(AppEvent * event) { if (!sAppTask.mFunctionTimerActive && sAppTask.mFunction == Function::kNoneSelected) { - P6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); + PSOC6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", + FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); // Start timer for FACTORY_RESET_CANCEL_WINDOW_TIMEOUT to allow user to // cancel, if required. sAppTask.StartTimer(FACTORY_RESET_CANCEL_WINDOW_TIMEOUT); @@ -421,7 +422,7 @@ void AppTask::FunctionHandler(AppEvent * event) // canceled. sAppTask.mFunction = Function::kNoneSelected; - P6_LOG("Factory Reset has been Canceled"); + PSOC6_LOG("Factory Reset has been Canceled"); } } } @@ -430,7 +431,7 @@ void AppTask::CancelTimer() { if (xTimerStop(sFunctionTimer, 0) == pdFAIL) { - P6_LOG("app timer stop() failed"); + PSOC6_LOG("app timer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } @@ -441,7 +442,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) { if (xTimerIsTimerActive(sFunctionTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -450,7 +451,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sFunctionTimer, aTimeoutInMs / portTICK_PERIOD_MS, 100) != pdPASS) { - P6_LOG("app timer start() failed"); + PSOC6_LOG("app timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } @@ -462,12 +463,12 @@ void AppTask::ActionInitiated(LightingManager::Action_t action, int32_t actor) // Action initiated, update the light led if (action == LightingManager::ON_ACTION) { - P6_LOG("Turning light ON"); + PSOC6_LOG("Turning light ON"); sLightLED.Set(true); } else if (action == LightingManager::OFF_ACTION) { - P6_LOG("Turning light OFF"); + PSOC6_LOG("Turning light OFF"); sLightLED.Set(false); } @@ -482,11 +483,11 @@ void AppTask::ActionCompleted(LightingManager::Action_t action) // action has been completed bon the light if (action == LightingManager::ON_ACTION) { - P6_LOG("Light ON"); + PSOC6_LOG("Light ON"); } else if (action == LightingManager::OFF_ACTION) { - P6_LOG("Light OFF"); + PSOC6_LOG("Light OFF"); } if (sAppTask.mSyncClusterToButtonAction) @@ -530,11 +531,11 @@ void AppTask::PostEvent(const AppEvent * event) } if (!status) - P6_LOG("Failed to post event to app task event queue"); + PSOC6_LOG("Failed to post event to app task event queue"); } else { - P6_LOG("Event Queue is NULL should never happen"); + PSOC6_LOG("Event Queue is NULL should never happen"); } } @@ -546,7 +547,7 @@ void AppTask::DispatchEvent(AppEvent * event) } else { - P6_LOG("Event received with no handler. Dropping event."); + PSOC6_LOG("Event received with no handler. Dropping event."); } } @@ -558,7 +559,7 @@ void AppTask::UpdateClusterState(intptr_t context) Protocols::InteractionModel::Status status = app::Clusters::OnOff::Attributes::OnOff::Set(1, newValue); if (status != Protocols::InteractionModel::Status::Success) { - P6_LOG("ERR: updating on/off %x", to_underlying(status)); + PSOC6_LOG("ERR: updating on/off %x", to_underlying(status)); } } #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR @@ -573,7 +574,7 @@ void AppTask::InitOTARequestor() gRequestorUser.Init(&gRequestorCore, &gImageProcessor); - P6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); } #endif diff --git a/examples/lighting-app/infineon/psoc6/src/LightingManager.cpp b/examples/lighting-app/infineon/psoc6/src/LightingManager.cpp index b2db66900c8db6..5f0ffabb61915d 100644 --- a/examples/lighting-app/infineon/psoc6/src/LightingManager.cpp +++ b/examples/lighting-app/infineon/psoc6/src/LightingManager.cpp @@ -39,7 +39,7 @@ CHIP_ERROR LightingManager::Init() if (sLightTimer == NULL) { - P6_LOG("sLockTimer timer create failed"); + PSOC6_LOG("sLockTimer timer create failed"); return APP_ERROR_CREATE_TIMER_FAILED; } @@ -125,7 +125,7 @@ void LightingManager::StartTimer(uint32_t aTimeoutMs) { if (xTimerIsTimerActive(sLightTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -134,7 +134,7 @@ void LightingManager::StartTimer(uint32_t aTimeoutMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sLightTimer, (aTimeoutMs / portTICK_PERIOD_MS), 100) != pdPASS) { - P6_LOG("sLockTimer timer start() failed"); + PSOC6_LOG("sLockTimer timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } } @@ -143,7 +143,7 @@ void LightingManager::CancelTimer(void) { if (xTimerStop(sLightTimer, 0) == pdFAIL) { - P6_LOG("sLightTimer stop() failed"); + PSOC6_LOG("sLightTimer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } } @@ -183,7 +183,7 @@ void LightingManager::AutoTurnOffTimerEventHandler(AppEvent * aEvent) light->mAutoTurnOffTimerArmed = false; - P6_LOG("Auto Turn Off has been triggered!"); + PSOC6_LOG("Auto Turn Off has been triggered!"); light->InitiateAction(actor, OFF_ACTION); } @@ -219,7 +219,7 @@ void LightingManager::ActuatorMovementTimerEventHandler(AppEvent * aEvent) light->mAutoTurnOffTimerArmed = true; - P6_LOG("Auto Turn off enabled. Will be triggered in %u seconds", light->mAutoTurnOffDuration); + PSOC6_LOG("Auto Turn off enabled. Will be triggered in %u seconds", light->mAutoTurnOffDuration); } } } diff --git a/examples/lighting-app/infineon/psoc6/src/main.cpp b/examples/lighting-app/infineon/psoc6/src/main.cpp index 66ec9addd01aab..5997aa53e60a84 100644 --- a/examples/lighting-app/infineon/psoc6/src/main.cpp +++ b/examples/lighting-app/infineon/psoc6/src/main.cpp @@ -56,7 +56,7 @@ static void main_task(void * pvParameters); //================================================================================= void appError(int err) { - P6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + PSOC6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); portDISABLE_INTERRUPTS(); while (true) ; @@ -89,35 +89,35 @@ static void main_task(void * pvParameters) CHIP_ERROR ret = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); + PSOC6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); appError(ret); } ret = PlatformMgr().InitChipStack(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().InitChipStack() failed"); + PSOC6_LOG("PlatformMgr().InitChipStack() failed"); appError(ret); } - ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("P6_LIGHT"); + ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("PSOC6_LIGHT"); if (ret != CHIP_NO_ERROR) { - P6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); + PSOC6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); appError(ret); } - P6_LOG("Starting Platform Manager Event Loop"); + PSOC6_LOG("Starting Platform Manager Event Loop"); ret = PlatformMgr().StartEventLoopTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().StartEventLoopTask() failed"); + PSOC6_LOG("PlatformMgr().StartEventLoopTask() failed"); appError(ret); } ret = GetAppTask().StartAppTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("GetAppTask().Init() failed"); + PSOC6_LOG("GetAppTask().Init() failed"); appError(ret); } @@ -130,7 +130,7 @@ static void main_task(void * pvParameters) // ================================================================================ int main(void) { - init_p6Platform(); + init_psoc6Platform(); #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR // Clear watchdog timer (started by bootloader) so that it doesn't trigger a reset cyhal_wdt_t wdt_obj; @@ -141,9 +141,9 @@ int main(void) MemMonitoring::startHeapMonitoring(); #endif - P6_LOG("==================================================\r\n"); - P6_LOG("chip-p6-lighting-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("==================================================\r\n"); + PSOC6_LOG("==================================================\r\n"); + PSOC6_LOG("chip-psoc6-lighting-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("==================================================\r\n"); /* Start the FreeRTOS scheduler */ vTaskStartScheduler(); @@ -153,5 +153,5 @@ int main(void) PlatformMgr().Shutdown(); // Should never get here. - P6_LOG("vTaskStartScheduler() failed"); + PSOC6_LOG("vTaskStartScheduler() failed"); } diff --git a/examples/lighting-app/lighting-common/lighting-app.matter b/examples/lighting-app/lighting-common/lighting-app.matter index f0bfd80d7ddaed..61fa92b32778cd 100644 --- a/examples/lighting-app/lighting-common/lighting-app.matter +++ b/examples/lighting-app/lighting-common/lighting-app.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1999,7 +1999,7 @@ provisional cluster ScenesManagement = 98 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2787,7 +2787,7 @@ endpoint 1 { ram attribute defaultMoveRate default = 50; persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2857,7 +2857,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; persist attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/lighting-common/lighting-app.zap b/examples/lighting-app/lighting-common/lighting-app.zap index 6489a395b38c7e..730b68027a4cb1 100644 --- a/examples/lighting-app/lighting-common/lighting-app.zap +++ b/examples/lighting-app/lighting-common/lighting-app.zap @@ -4922,7 +4922,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5813,7 +5813,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.matter b/examples/lighting-app/nxp/zap/lighting-on-off.matter index 504b4618b4c124..11b4298d8fad5e 100644 --- a/examples/lighting-app/nxp/zap/lighting-on-off.matter +++ b/examples/lighting-app/nxp/zap/lighting-on-off.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1835,7 +1835,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/lighting-app/nxp/zap/lighting-on-off.zap b/examples/lighting-app/nxp/zap/lighting-on-off.zap index 839971a84dec9e..941eb33fb2c5d2 100644 --- a/examples/lighting-app/nxp/zap/lighting-on-off.zap +++ b/examples/lighting-app/nxp/zap/lighting-on-off.zap @@ -3831,7 +3831,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/qpg/zap/light.matter b/examples/lighting-app/qpg/zap/light.matter index f0624ae0a83f48..b2160c8fae6ddb 100644 --- a/examples/lighting-app/qpg/zap/light.matter +++ b/examples/lighting-app/qpg/zap/light.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1607,7 +1607,7 @@ cluster UserLabel = 65 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2321,7 +2321,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2389,7 +2389,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/qpg/zap/light.zap b/examples/lighting-app/qpg/zap/light.zap index 62d6453e7abf03..6390c7f37267d8 100644 --- a/examples/lighting-app/qpg/zap/light.zap +++ b/examples/lighting-app/qpg/zap/light.zap @@ -17,6 +17,13 @@ } ], "package": [ + { + "pathRelativity": "relativeToZap", + "path": "../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" + }, { "pathRelativity": "relativeToZap", "path": "../../../../src/app/zap-templates/zcl/zcl.json", @@ -4980,7 +4987,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -6002,7 +6009,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter index 6754f806b1a6b2..3ed9a2273a3436 100644 --- a/examples/lighting-app/silabs/data_model/lighting-thread-app.matter +++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1703,7 +1703,7 @@ provisional cluster ScenesManagement = 98 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2362,7 +2362,7 @@ endpoint 1 { callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2440,7 +2440,7 @@ endpoint 1 { callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap index e759d83b2f2276..a3fd5e516aad09 100644 --- a/examples/lighting-app/silabs/data_model/lighting-thread-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-thread-app.zap @@ -4289,7 +4289,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5316,7 +5316,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter index 37415d0d79f5cc..e89bd41f1278b2 100644 --- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter +++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1994,7 +1994,7 @@ provisional cluster ScenesManagement = 98 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -2634,7 +2634,7 @@ endpoint 1 { callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 3; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -2729,7 +2729,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; persist attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0x1F; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap index 84dd93b4bc6533..6d438d10e14001 100644 --- a/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap +++ b/examples/lighting-app/silabs/data_model/lighting-wifi-app.zap @@ -3774,7 +3774,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5027,7 +5027,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/lock-app/infineon/psoc6/BUILD.gn b/examples/lock-app/infineon/psoc6/BUILD.gn index 37ee666f5190f5..3c9be12a5417e6 100644 --- a/examples/lock-app/infineon/psoc6/BUILD.gn +++ b/examples/lock-app/infineon/psoc6/BUILD.gn @@ -44,32 +44,38 @@ config("psoc6_ota_config") { ldflags = [ "-T" + rebase_path(linker_script, root_build_dir) ] - ldflags += [ "-Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,MCUBOOT_BOOTLOADER_SIZE=0x18000,--defsym,CY_BOOT_PRIMARY_1_SIZE=0x1C0000" ] + ldflags += [ "-Wl,--undefined=uxTopUsedPriority -Wl,--defsym,MCUBOOT_HEADER_SIZE=0x400,--defsym,FLASH_AREA_IMG_1_PRIMARY_START=0x028000,--defsym,FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000" ] defines = [ "P6_OTA", - "OTA_SUPPORT ", - "OTA_USE_EXTERNAL_FLASH", - "CY_BOOT_USE_EXTERNAL_FLASH", - "MCUBOOT_HEADER_SIZE=0x400", - "MCUBOOT_MAX_IMG_SECTORS=3584", - "CY_BOOT_SCRATCH_SIZE=0x00004000", - "MCUBOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_BOOTLOADER_SIZE=0x00018000", - "CY_BOOT_PRIMARY_1_START=0x00018000", - "CY_BOOT_PRIMARY_1_SIZE=0x1C0000", - "CY_BOOT_SECONDARY_1_START=0x00000000", - "CY_BOOT_SECONDARY_1_SIZE=0x001C0000", - "CY_FLASH_ERASE_VALUE=0xFF", + "COMPONENT_MCUBOOT", + "CY_BOOTLOADER=MCUBOOT", + "OTA_SUPPORT=1", + "COMPONENT_OTA_PSOC_062", + "PSOC_062_2M", + "OTA_USE_EXTERNAL_FLASH=1", + "ENABLE_OTA_LOGS", + "ENABLE_OTA_BOOTLOADER_ABSTRACTION_LOGS", "MCUBOOT_IMAGE_NUMBER=1", - "MCUBOOT_SLOT_SIZE=0x1C0000", - "MCUBOOT_SCRATCH_SIZE=0x4000", - "MCUBOOT_SECTOR_SIZE = 512", + "MCUBOOT_MAX_IMG_SECTORS=3584", + "FLASH_AREA_BOOTLOADER_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_BOOTLOADER_SIZE=0x028000", + "FLASH_AREA_BOOTLOADER_START=0x000000", + "FLASH_AREA_IMAGE_SCRATCH_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMAGE_SCRATCH_SIZE=0x080000", + "FLASH_AREA_IMAGE_SCRATCH_START=0x440000", + "FLASH_AREA_IMAGE_SWAP_STATUS_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMAGE_SWAP_STATUS_SIZE=0x006c00", + "FLASH_AREA_IMAGE_SWAP_STATUS_START=0x1e8000", + "FLASH_AREA_IMG_1_PRIMARY_DEV_ID='FLASH_DEVICE_INTERNAL_FLASH'", + "FLASH_AREA_IMG_1_PRIMARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_PRIMARY_START=0x028000", + "FLASH_AREA_IMG_1_SECONDARY_DEV_ID='FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX)'", + "FLASH_AREA_IMG_1_SECONDARY_SIZE=0x1c0000", + "FLASH_AREA_IMG_1_SECONDARY_START=0x000200", "APP_VERSION_MAJOR=1", "APP_VERSION_MINOR=0", "APP_VERSION_BUILD=0", - "MCUBOOT_OVERWRITE_ONLY", - "CY_ENABLE_XIP_PROGRAM", ] if (build_update_image) { @@ -85,7 +91,7 @@ psoc6_sdk_sources("lock_app_sdk_sources") { defines = [ "BOARD_ID=${psoc6_board}", - "P6_LOG_ENABLED=1", + "PSOC6_LOG_ENABLED=1", "CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE=${setup_pin_code}", ] diff --git a/examples/lock-app/infineon/psoc6/include/AppConfig.h b/examples/lock-app/infineon/psoc6/include/AppConfig.h index 41ff70e1f94b71..34355aa262dde9 100644 --- a/examples/lock-app/infineon/psoc6/include/AppConfig.h +++ b/examples/lock-app/infineon/psoc6/include/AppConfig.h @@ -52,14 +52,14 @@ #define THREAD_ACTIVE_POLLING_INTERVAL_MS 100 #define THREAD_INACTIVE_POLLING_INTERVAL_MS 1000 -// P6 Logging +// PSOC6 Logging #ifdef __cplusplus extern "C" { #endif void appError(int err); -void P6Log(const char * aFormat, ...); -#define P6_LOG(...) P6Log(__VA_ARGS__) +void PSOC6Log(const char * aFormat, ...); +#define PSOC6_LOG(...) PSOC6Log(__VA_ARGS__) #ifdef __cplusplus } diff --git a/examples/lock-app/infineon/psoc6/include/AppTask.h b/examples/lock-app/infineon/psoc6/include/AppTask.h index b120a9c9aec325..d72b1c32996269 100644 --- a/examples/lock-app/infineon/psoc6/include/AppTask.h +++ b/examples/lock-app/infineon/psoc6/include/AppTask.h @@ -30,6 +30,10 @@ #include #include +extern "C" { +#include "flash_map_backend.h" +} + // Application-defined error codes in the CHIP_ERROR space. #define APP_ERROR_EVENT_QUEUE_FAILED CHIP_APPLICATION_ERROR(0x01) #define APP_ERROR_CREATE_TASK_FAILED CHIP_APPLICATION_ERROR(0x02) diff --git a/examples/lock-app/infineon/psoc6/include/CHIPProjectConfig.h b/examples/lock-app/infineon/psoc6/include/CHIPProjectConfig.h index b069e13284c07d..e5c8c8ed7e790f 100644 --- a/examples/lock-app/infineon/psoc6/include/CHIPProjectConfig.h +++ b/examples/lock-app/infineon/psoc6/include/CHIPProjectConfig.h @@ -38,10 +38,10 @@ #define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x8006 /* The ProductName attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "P6-CYW43012 Lock" +#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "PSOC6-CYW43012 Lock" /* The HardwareVersionString attribute of the Basic cluster. */ -#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "P6-43012" +#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "PSOC6-43012" /* The HardwareVersion attribute of the Basic cluster. */ #define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION 43012 diff --git a/examples/lock-app/infineon/psoc6/src/AppTask.cpp b/examples/lock-app/infineon/psoc6/src/AppTask.cpp index 106da8eecbf69f..54178c21c98f65 100644 --- a/examples/lock-app/infineon/psoc6/src/AppTask.cpp +++ b/examples/lock-app/infineon/psoc6/src/AppTask.cpp @@ -179,7 +179,7 @@ CHIP_ERROR AppTask::StartAppTask() sAppEventQueue = xQueueCreate(APP_EVENT_QUEUE_SIZE, sizeof(AppEvent)); if (sAppEventQueue == NULL) { - P6_LOG("Failed to allocate app event queue"); + PSOC6_LOG("Failed to allocate app event queue"); appError(APP_ERROR_EVENT_QUEUE_FAILED); } @@ -193,7 +193,7 @@ void AppTask::lockMgr_Init() CHIP_ERROR err = CHIP_NO_ERROR; NetWorkCommissioningInstInit(); - P6_LOG("Current Software Version: %d", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("Current Software Version: %d", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); // Initial lock state chip::app::DataModel::Nullable state; chip::EndpointId endpointId{ 1 }; @@ -258,7 +258,7 @@ void AppTask::lockMgr_Init() .GetLockParam()); if (err != CHIP_NO_ERROR) { - P6_LOG("LockMgr().Init() failed"); + PSOC6_LOG("LockMgr().Init() failed"); appError(err); } @@ -287,10 +287,10 @@ void AppTask::lockMgr_Init() void AppTask::Init() { #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR - int rc = boot_set_confirmed(); + int rc = flash_area_boot_set_confirmed(); if (rc != 0) { - P6_LOG("boot_set_confirmed failed"); + PSOC6_LOG("flash_area_boot_set_confirmed failed"); appError(CHIP_ERROR_UNINITIALIZED); } #endif @@ -306,7 +306,7 @@ void AppTask::Init() ); if (sFunctionTimer == NULL) { - P6_LOG("funct timer create failed"); + PSOC6_LOG("funct timer create failed"); appError(APP_ERROR_CREATE_TIMER_FAILED); } @@ -333,7 +333,7 @@ void AppTask::AppTaskMain(void * pvParameter) AppEvent event; sAppTask.Init(); - P6_LOG("App Task started"); + PSOC6_LOG("App Task started"); while (true) { @@ -403,11 +403,11 @@ void AppTask::LockActionEventHandler(AppEvent * event) case AppEvent::kEventType_Button: { - P6_LOG("%s [Action: %d]", __FUNCTION__, event->ButtonEvent.Action); + PSOC6_LOG("%s [Action: %d]", __FUNCTION__, event->ButtonEvent.Action); if (event->ButtonEvent.Action == APP_BUTTON_LONG_PRESS) { - P6_LOG("Sending a lock jammed event"); + PSOC6_LOG("Sending a lock jammed event"); /* Generating Door Lock Jammed event */ DoorLockServer::Instance().SendLockAlarmEvent(1 /* Endpoint Id */, AlarmCodeEnum::kLockJammed); @@ -436,7 +436,7 @@ void AppTask::LockActionEventHandler(AppEvent * event) if (!LockMgr().InitiateAction(actor, action)) { - P6_LOG("Action is already in progress or active."); + PSOC6_LOG("Action is already in progress or active."); } } @@ -499,7 +499,8 @@ void AppTask::FunctionHandler(AppEvent * event) { if (!sAppTask.mFunctionTimerActive && sAppTask.mFunction == Function::kNoneSelected) { - P6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); + PSOC6_LOG("Factory Reset Triggered. Press button again within %us to cancel.", + FACTORY_RESET_CANCEL_WINDOW_TIMEOUT / 1000); // Start timer for FACTORY_RESET_CANCEL_WINDOW_TIMEOUT to allow user to // cancel, if required. sAppTask.StartTimer(FACTORY_RESET_CANCEL_WINDOW_TIMEOUT); @@ -525,7 +526,7 @@ void AppTask::FunctionHandler(AppEvent * event) // canceled. sAppTask.mFunction = Function::kNoneSelected; - P6_LOG("Factory Reset has been Canceled"); + PSOC6_LOG("Factory Reset has been Canceled"); } } } @@ -534,7 +535,7 @@ void AppTask::CancelTimer() { if (xTimerStop(sFunctionTimer, 0) == pdFAIL) { - P6_LOG("app timer stop() failed"); + PSOC6_LOG("app timer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } @@ -545,7 +546,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) { if (xTimerIsTimerActive(sFunctionTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -554,7 +555,7 @@ void AppTask::StartTimer(uint32_t aTimeoutInMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sFunctionTimer, aTimeoutInMs / portTICK_PERIOD_MS, 100) != pdPASS) { - P6_LOG("app timer start() failed"); + PSOC6_LOG("app timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } @@ -567,11 +568,11 @@ void AppTask::ActionInitiated(LockManager::Action_t aAction, int32_t aActor) // and start flashing the LEDs rapidly to indicate action initiation. if (aAction == LockManager::LOCK_ACTION) { - P6_LOG("Lock Action has been initiated"); + PSOC6_LOG("Lock Action has been initiated"); } else if (aAction == LockManager::UNLOCK_ACTION) { - P6_LOG("Unlock Action has been initiated"); + PSOC6_LOG("Unlock Action has been initiated"); } if (aActor == AppEvent::kEventType_Button) @@ -589,13 +590,13 @@ void AppTask::ActionCompleted(LockManager::Action_t aAction) // Turn off the lock LED if in an UNLOCKED state. if (aAction == LockManager::LOCK_ACTION) { - P6_LOG("Lock Action has been completed"); + PSOC6_LOG("Lock Action has been completed"); sLockLED.Set(true); } else if (aAction == LockManager::UNLOCK_ACTION) { - P6_LOG("Unlock Action has been completed"); + PSOC6_LOG("Unlock Action has been completed"); sLockLED.Set(false); } @@ -641,11 +642,11 @@ void AppTask::PostEvent(const AppEvent * event) } if (!status) - P6_LOG("Failed to post event to app task event queue"); + PSOC6_LOG("Failed to post event to app task event queue"); } else { - P6_LOG("Event Queue is NULL should never happen"); + PSOC6_LOG("Event Queue is NULL should never happen"); } } @@ -657,7 +658,7 @@ void AppTask::DispatchEvent(AppEvent * event) } else { - P6_LOG("Event received with no handler. Dropping event."); + PSOC6_LOG("Event received with no handler. Dropping event."); } } @@ -674,7 +675,7 @@ void AppTask::UpdateCluster(intptr_t context) : Protocols::InteractionModel::Status::Failure; if (status != Protocols::InteractionModel::Status::Success) { - P6_LOG("ERR: updating lock state %x", to_underlying(status)); + PSOC6_LOG("ERR: updating lock state %x", to_underlying(status)); } } @@ -705,7 +706,7 @@ void AppTask::InitOTARequestor() gRequestorUser.Init(&gRequestorCore, &gImageProcessor); - P6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); + PSOC6_LOG("Current Software Version: %u", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("Current Software Version String: %s", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING); } #endif diff --git a/examples/lock-app/infineon/psoc6/src/LockManager.cpp b/examples/lock-app/infineon/psoc6/src/LockManager.cpp index 4fed23346571dc..70af147902c8a6 100644 --- a/examples/lock-app/infineon/psoc6/src/LockManager.cpp +++ b/examples/lock-app/infineon/psoc6/src/LockManager.cpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include LockManager LockManager::sLock; @@ -90,7 +90,7 @@ CHIP_ERROR LockManager::Init(chip::app::DataModel::Nullable(&mLockUsers), - sizeof(EmberAfPluginDoorLockUserInfo) * ArraySize(mLockUsers), outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_LockUser, reinterpret_cast(&mLockUsers), + sizeof(EmberAfPluginDoorLockUserInfo) * ArraySize(mLockUsers), outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_Credential, reinterpret_cast(&mLockCredentials), - sizeof(EmberAfPluginDoorLockCredentialInfo) * kMaxCredentials * kNumCredentialTypes, outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_Credential, reinterpret_cast(&mLockCredentials), + sizeof(EmberAfPluginDoorLockCredentialInfo) * kMaxCredentials * kNumCredentialTypes, outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_LockUserName, reinterpret_cast(mUserNames), sizeof(mUserNames), - outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_LockUserName, reinterpret_cast(mUserNames), + sizeof(mUserNames), outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_CredentialData, reinterpret_cast(mCredentialData), - sizeof(mCredentialData), outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_CredentialData, reinterpret_cast(mCredentialData), + sizeof(mCredentialData), outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_UserCredentials, reinterpret_cast(mCredentials), - sizeof(CredentialStruct) * LockParams.numberOfUsers * kMaxCredentials, outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_UserCredentials, reinterpret_cast(mCredentials), + sizeof(CredentialStruct) * LockParams.numberOfUsers * kMaxCredentials, outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_WeekDaySchedules, reinterpret_cast(mWeekdaySchedule), - sizeof(EmberAfPluginDoorLockWeekDaySchedule) * LockParams.numberOfWeekdaySchedulesPerUser * - LockParams.numberOfUsers, - outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_WeekDaySchedules, reinterpret_cast(mWeekdaySchedule), + sizeof(EmberAfPluginDoorLockWeekDaySchedule) * LockParams.numberOfWeekdaySchedulesPerUser * + LockParams.numberOfUsers, + outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_YearDaySchedules, reinterpret_cast(mYeardaySchedule), - sizeof(EmberAfPluginDoorLockYearDaySchedule) * LockParams.numberOfYeardaySchedulesPerUser * - LockParams.numberOfUsers, - outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_YearDaySchedules, reinterpret_cast(mYeardaySchedule), + sizeof(EmberAfPluginDoorLockYearDaySchedule) * LockParams.numberOfYeardaySchedulesPerUser * + LockParams.numberOfUsers, + outLen); - P6Config::ReadConfigValueBin(P6Config::kConfigKey_HolidaySchedules, reinterpret_cast(&(mHolidaySchedule)), - sizeof(EmberAfPluginDoorLockHolidaySchedule) * LockParams.numberOfHolidaySchedules, outLen); + PSOC6Config::ReadConfigValueBin(PSOC6Config::kConfigKey_HolidaySchedules, reinterpret_cast(&(mHolidaySchedule)), + sizeof(EmberAfPluginDoorLockHolidaySchedule) * LockParams.numberOfHolidaySchedules, outLen); return true; } @@ -228,7 +228,7 @@ void LockManager::StartTimer(uint32_t aTimeoutMs) { if (xTimerIsTimerActive(sLockTimer)) { - P6_LOG("app timer already started!"); + PSOC6_LOG("app timer already started!"); CancelTimer(); } @@ -237,7 +237,7 @@ void LockManager::StartTimer(uint32_t aTimeoutMs) // cannot immediately be sent to the timer command queue. if (xTimerChangePeriod(sLockTimer, (aTimeoutMs / portTICK_PERIOD_MS), 100) != pdPASS) { - P6_LOG("sLockTimer timer start() failed"); + PSOC6_LOG("sLockTimer timer start() failed"); appError(APP_ERROR_START_TIMER_FAILED); } } @@ -246,7 +246,7 @@ void LockManager::CancelTimer(void) { if (xTimerStop(sLockTimer, 0) == pdFAIL) { - P6_LOG("sLockTimer stop() failed"); + PSOC6_LOG("sLockTimer stop() failed"); appError(APP_ERROR_STOP_TIMER_FAILED); } } @@ -393,14 +393,14 @@ bool LockManager::SetUser(chip::EndpointId endpointId, uint16_t userIndex, chip: userInStorage.credentials = chip::Span(mCredentials[userIndex], totalCredentials); // Save user information in NVM flash - P6Config::WriteConfigValueBin(P6Config::kConfigKey_LockUser, reinterpret_cast(&mLockUsers), - sizeof(EmberAfPluginDoorLockUserInfo) * LockParams.numberOfUsers); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_LockUser, reinterpret_cast(&mLockUsers), + sizeof(EmberAfPluginDoorLockUserInfo) * LockParams.numberOfUsers); - P6Config::WriteConfigValueBin(P6Config::kConfigKey_UserCredentials, reinterpret_cast(mCredentials), - sizeof(CredentialStruct) * LockParams.numberOfUsers * kMaxCredentials); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_UserCredentials, reinterpret_cast(mCredentials), + sizeof(CredentialStruct) * LockParams.numberOfUsers * kMaxCredentials); - P6Config::WriteConfigValueBin(P6Config::kConfigKey_LockUserName, reinterpret_cast(mUserNames), - sizeof(mUserNames)); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_LockUserName, reinterpret_cast(mUserNames), + sizeof(mUserNames)); ChipLogProgress(Zcl, "Successfully set the user [mEndpointId=%d,index=%d]", endpointId, userIndex); @@ -481,11 +481,11 @@ bool LockManager::SetCredential(chip::EndpointId endpointId, uint16_t credential chip::ByteSpan{ mCredentialData[to_underlying(credentialType)][credentialIndex], credentialData.size() }; // Save credential information in NVM flash - P6Config::WriteConfigValueBin(P6Config::kConfigKey_Credential, reinterpret_cast(&mLockCredentials), - sizeof(EmberAfPluginDoorLockCredentialInfo) * kMaxCredentials * kNumCredentialTypes); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_Credential, reinterpret_cast(&mLockCredentials), + sizeof(EmberAfPluginDoorLockCredentialInfo) * kMaxCredentials * kNumCredentialTypes); - P6Config::WriteConfigValueBin(P6Config::kConfigKey_CredentialData, reinterpret_cast(&mCredentialData), - sizeof(mCredentialData)); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_CredentialData, reinterpret_cast(&mCredentialData), + sizeof(mCredentialData)); ChipLogProgress(Zcl, "Successfully set the credential [credentialType=%u]", to_underlying(credentialType)); @@ -540,9 +540,9 @@ DlStatus LockManager::SetWeekdaySchedule(chip::EndpointId endpointId, uint8_t we scheduleInStorage.status = status; // Save schedule information in NVM flash - P6Config::WriteConfigValueBin(P6Config::kConfigKey_WeekDaySchedules, reinterpret_cast(mWeekdaySchedule), - sizeof(EmberAfPluginDoorLockWeekDaySchedule) * LockParams.numberOfWeekdaySchedulesPerUser * - LockParams.numberOfUsers); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_WeekDaySchedules, reinterpret_cast(mWeekdaySchedule), + sizeof(EmberAfPluginDoorLockWeekDaySchedule) * LockParams.numberOfWeekdaySchedulesPerUser * + LockParams.numberOfUsers); return DlStatus::kSuccess; } @@ -589,9 +589,9 @@ DlStatus LockManager::SetYeardaySchedule(chip::EndpointId endpointId, uint8_t ye scheduleInStorage.status = status; // Save schedule information in NVM flash - P6Config::WriteConfigValueBin(P6Config::kConfigKey_YearDaySchedules, reinterpret_cast(mYeardaySchedule), - sizeof(EmberAfPluginDoorLockYearDaySchedule) * LockParams.numberOfYeardaySchedulesPerUser * - LockParams.numberOfUsers); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_YearDaySchedules, reinterpret_cast(mYeardaySchedule), + sizeof(EmberAfPluginDoorLockYearDaySchedule) * LockParams.numberOfYeardaySchedulesPerUser * + LockParams.numberOfUsers); return DlStatus::kSuccess; } @@ -633,8 +633,9 @@ DlStatus LockManager::SetHolidaySchedule(chip::EndpointId endpointId, uint8_t ho scheduleInStorage.status = status; // Save schedule information in NVM flash - P6Config::WriteConfigValueBin(P6Config::kConfigKey_HolidaySchedules, reinterpret_cast(&(mHolidaySchedule)), - sizeof(EmberAfPluginDoorLockHolidaySchedule) * LockParams.numberOfHolidaySchedules); + PSOC6Config::WriteConfigValueBin(PSOC6Config::kConfigKey_HolidaySchedules, + reinterpret_cast(&(mHolidaySchedule)), + sizeof(EmberAfPluginDoorLockHolidaySchedule) * LockParams.numberOfHolidaySchedules); return DlStatus::kSuccess; } diff --git a/examples/lock-app/infineon/psoc6/src/main.cpp b/examples/lock-app/infineon/psoc6/src/main.cpp index b14487e4bfe425..701b6eb04368b2 100644 --- a/examples/lock-app/infineon/psoc6/src/main.cpp +++ b/examples/lock-app/infineon/psoc6/src/main.cpp @@ -53,7 +53,7 @@ static void main_task(void * pvParameters); //================================================================================= void appError(int err) { - P6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); + PSOC6_LOG("!!!!!!!!!!!! App Critical Error: %d !!!!!!!!!!!", err); portDISABLE_INTERRUPTS(); while (true) ; @@ -86,35 +86,35 @@ static void main_task(void * pvParameters) CHIP_ERROR ret = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); + PSOC6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); appError(ret); } ret = PlatformMgr().InitChipStack(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().InitChipStack() failed"); + PSOC6_LOG("PlatformMgr().InitChipStack() failed"); appError(ret); } - ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("P6_LOCK"); + ret = chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName("PSOC6_LOCK"); if (ret != CHIP_NO_ERROR) { - P6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); + PSOC6_LOG("ConnectivityMgr().SetBLEDeviceName() failed"); appError(ret); } - P6_LOG("Starting Platform Manager Event Loop"); + PSOC6_LOG("Starting Platform Manager Event Loop"); ret = PlatformMgr().StartEventLoopTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("PlatformMgr().StartEventLoopTask() failed"); + PSOC6_LOG("PlatformMgr().StartEventLoopTask() failed"); appError(ret); } ret = GetAppTask().StartAppTask(); if (ret != CHIP_NO_ERROR) { - P6_LOG("GetAppTask().Init() failed"); + PSOC6_LOG("GetAppTask().Init() failed"); appError(ret); } @@ -127,7 +127,7 @@ static void main_task(void * pvParameters) // ================================================================================ int main(void) { - init_p6Platform(); + init_psoc6Platform(); #if CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR // Clear watchdog timer (started by bootloader) so that it doesn't trigger a reset cyhal_wdt_t wdt_obj; @@ -135,9 +135,9 @@ int main(void) cyhal_wdt_free(&wdt_obj); #endif - P6_LOG("==================================================\r\n"); - P6_LOG("chip-p6-lock-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); - P6_LOG("==================================================\r\n"); + PSOC6_LOG("==================================================\r\n"); + PSOC6_LOG("chip-psoc6-lock-example starting Version %d\r\n", CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); + PSOC6_LOG("==================================================\r\n"); /* Start the FreeRTOS scheduler */ vTaskStartScheduler(); @@ -147,5 +147,5 @@ int main(void) PlatformMgr().Shutdown(); // Should never get here. - P6_LOG("vTaskStartScheduler() failed"); + PSOC6_LOG("vTaskStartScheduler() failed"); } diff --git a/examples/network-manager-app/linux/main.cpp b/examples/network-manager-app/linux/main.cpp index ee6763a6d3d47d..84c4a2ce88e9a5 100644 --- a/examples/network-manager-app/linux/main.cpp +++ b/examples/network-manager-app/linux/main.cpp @@ -16,32 +16,48 @@ */ #include +#include #include #include +#include #include +#include + using namespace chip; using namespace chip::app; using namespace chip::app::Clusters; -void ApplicationInit() {} -void ApplicationShutdown() {} - ByteSpan ByteSpanFromCharSpan(CharSpan span) { return ByteSpan(Uint8::from_const_char(span.data()), span.size()); } -int main(int argc, char * argv[]) +std::optional gThreadNetworkDirectoryServer; +void emberAfThreadNetworkDirectoryClusterInitCallback(EndpointId endpoint) +{ + VerifyOrDie(!gThreadNetworkDirectoryServer); + gThreadNetworkDirectoryServer.emplace(endpoint).Init(); +} + +std::optional gWiFiNetworkManagementServer; +void emberAfWiFiNetworkManagementClusterInitCallback(EndpointId endpoint) { - if (ChipLinuxAppInit(argc, argv) != 0) - { - return -1; - } + VerifyOrDie(!gWiFiNetworkManagementServer); + gWiFiNetworkManagementServer.emplace(endpoint).Init(); +} - WiFiNetworkManagementServer::Instance().SetNetworkCredentials(ByteSpanFromCharSpan("MatterAP"_span), - ByteSpanFromCharSpan("Setec Astronomy"_span)); +void ApplicationInit() +{ + gWiFiNetworkManagementServer->SetNetworkCredentials(ByteSpanFromCharSpan("MatterAP"_span), + ByteSpanFromCharSpan("Setec Astronomy"_span)); +} +void ApplicationShutdown() {} + +int main(int argc, char * argv[]) +{ + VerifyOrReturnValue(ChipLinuxAppInit(argc, argv) == 0, -1); ChipLinuxAppMainLoop(); return 0; } diff --git a/examples/network-manager-app/network-manager-common/network-manager-app.matter b/examples/network-manager-app/network-manager-common/network-manager-app.matter index bee7b9d2df4c61..22fee8337e549e 100644 --- a/examples/network-manager-app/network-manager-common/network-manager-app.matter +++ b/examples/network-manager-app/network-manager-common/network-manager-app.matter @@ -1195,6 +1195,51 @@ cluster WiFiNetworkManagement = 1105 { command access(invoke: administer) NetworkPassphraseRequest(): NetworkPassphraseResponse = 0; } +/** Manages the names and credentials of Thread networks visible to the user. */ +cluster ThreadNetworkDirectory = 1107 { + revision 1; + + struct ThreadNetworkStruct { + octet_string<8> extendedPanID = 0; + char_string<16> networkName = 1; + int16u channel = 2; + int64u activeTimestamp = 3; + } + + attribute access(read: manage, write: manage) nullable octet_string<8> preferredExtendedPanID = 0; + readonly attribute access(read: operate) ThreadNetworkStruct threadNetworks[] = 1; + readonly attribute int8u threadNetworkTableSize = 2; + readonly attribute command_id generatedCommandList[] = 65528; + readonly attribute command_id acceptedCommandList[] = 65529; + readonly attribute event_id eventList[] = 65530; + readonly attribute attrib_id attributeList[] = 65531; + readonly attribute bitmap32 featureMap = 65532; + readonly attribute int16u clusterRevision = 65533; + + request struct AddNetworkRequest { + octet_string<254> operationalDataset = 0; + } + + request struct RemoveNetworkRequest { + octet_string<8> extendedPanID = 0; + } + + request struct GetOperationalDatasetRequest { + octet_string<8> extendedPanID = 0; + } + + response struct OperationalDatasetResponse = 3 { + octet_string<254> operationalDataset = 0; + } + + /** Adds an entry to the ThreadNetworks list. */ + timed command access(invoke: manage) AddNetwork(AddNetworkRequest): DefaultSuccess = 0; + /** Removes an entry from the ThreadNetworks list. */ + timed command access(invoke: manage) RemoveNetwork(RemoveNetworkRequest): DefaultSuccess = 1; + /** Retrieves a Thread Operational Dataset from the ThreadNetworks list. */ + timed command GetOperationalDataset(GetOperationalDatasetRequest): OperationalDatasetResponse = 2; +} + endpoint 0 { device type ma_rootdevice = 22, version 1; @@ -1473,6 +1518,23 @@ endpoint 1 { handle command NetworkPassphraseRequest; handle command NetworkPassphraseResponse; } + + server cluster ThreadNetworkDirectory { + callback attribute preferredExtendedPanID; + callback attribute threadNetworks; + callback attribute threadNetworkTableSize; + callback attribute generatedCommandList; + callback attribute acceptedCommandList; + callback attribute eventList; + callback attribute attributeList; + ram attribute featureMap default = 0; + ram attribute clusterRevision default = 1; + + handle command AddNetwork; + handle command RemoveNetwork; + handle command GetOperationalDataset; + handle command OperationalDatasetResponse; + } } diff --git a/examples/network-manager-app/network-manager-common/network-manager-app.zap b/examples/network-manager-app/network-manager-common/network-manager-app.zap index 2e0180ebc27357..ec8316ce2ad3c0 100644 --- a/examples/network-manager-app/network-manager-common/network-manager-app.zap +++ b/examples/network-manager-app/network-manager-common/network-manager-app.zap @@ -3349,6 +3349,194 @@ "reportableChange": 0 } ] + }, + { + "name": "Thread Network Directory", + "code": 1107, + "mfgCode": null, + "define": "THREAD_NETWORK_DIRECTORY_CLUSTER", + "side": "server", + "enabled": 1, + "commands": [ + { + "name": "AddNetwork", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "RemoveNetwork", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "GetOperationalDataset", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 1, + "isEnabled": 1 + }, + { + "name": "OperationalDatasetResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 0, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "PreferredExtendedPanID", + "code": 0, + "mfgCode": null, + "side": "server", + "type": "octet_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ThreadNetworks", + "code": 1, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ThreadNetworkTableSize", + "code": 2, + "mfgCode": null, + "side": "server", + "type": "int8u", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "GeneratedCommandList", + "code": 65528, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AcceptedCommandList", + "code": 65529, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "AttributeList", + "code": 65531, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "server", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "server", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] } ] } diff --git a/examples/persistent-storage/infineon/psoc6/BUILD.gn b/examples/persistent-storage/infineon/psoc6/BUILD.gn index 6c1b536280e60b..16f9da400fb021 100644 --- a/examples/persistent-storage/infineon/psoc6/BUILD.gn +++ b/examples/persistent-storage/infineon/psoc6/BUILD.gn @@ -39,7 +39,7 @@ psoc6_sdk_sources("persistent_storage_app_sdk_sources") { defines = [ "BOARD_ID=${psoc6_board}", - "P6_LOG_ENABLED=1", + "PSOC6_LOG_ENABLED=1", ] sources = [ "${psoc6_project_dir}/include/CHIPProjectConfig.h" ] diff --git a/examples/persistent-storage/infineon/psoc6/include/AppConfig.h b/examples/persistent-storage/infineon/psoc6/include/AppConfig.h index 4c4efaefa09e8c..e86a19d98eda81 100644 --- a/examples/persistent-storage/infineon/psoc6/include/AppConfig.h +++ b/examples/persistent-storage/infineon/psoc6/include/AppConfig.h @@ -19,14 +19,14 @@ #pragma once -// P6 Logging +// PSOC6 Logging #ifdef __cplusplus extern "C" { #endif void appError(int err); -void P6Log(const char * aFormat, ...); -#define P6_LOG(...) P6Log(__VA_ARGS__) +void PSOC6Log(const char * aFormat, ...); +#define PSOC6_LOG(...) PSOC6Log(__VA_ARGS__) #ifdef __cplusplus } diff --git a/examples/persistent-storage/infineon/psoc6/main.cpp b/examples/persistent-storage/infineon/psoc6/main.cpp index f5acd2c5e74318..c1eec3efc2acc4 100644 --- a/examples/persistent-storage/infineon/psoc6/main.cpp +++ b/examples/persistent-storage/infineon/psoc6/main.cpp @@ -33,12 +33,12 @@ void TestTask(void * pvParameter) err = chip::DeviceLayer::PersistedStorage::KeyValueStoreMgrImpl().Init(); if (err != CHIP_NO_ERROR) { - P6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); + PSOC6_LOG("PersistedStorage::KeyValueStoreMgrImpl().Init() failed"); return; } while (true) { - P6_LOG("Running Tests:"); + PSOC6_LOG("Running Tests:"); chip::RunKvsTest(); vTaskDelay(60000); // Run every minute } @@ -55,17 +55,17 @@ extern "C" void vApplicationDaemonTaskStartupHook() int main(int argc, char * argv[]) { - init_p6Platform(); + init_psoc6Platform(); - P6_LOG("=============================================\n"); - P6_LOG("chip-p6-persistent-storage-example starting\n"); - P6_LOG("=============================================\n"); + PSOC6_LOG("=============================================\n"); + PSOC6_LOG("chip-psoc6-persistent-storage-example starting\n"); + PSOC6_LOG("=============================================\n"); - P6_LOG("Starting FreeRTOS scheduler"); + PSOC6_LOG("Starting FreeRTOS scheduler"); vTaskStartScheduler(); // Should never get here. - P6_LOG("vTaskStartScheduler() failed"); + PSOC6_LOG("vTaskStartScheduler() failed"); return -1; } diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter index aa2f299a5c6093..d23b640787d0cf 100644 --- a/examples/placeholder/linux/apps/app1/config.matter +++ b/examples/placeholder/linux/apps/app1/config.matter @@ -324,7 +324,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -449,7 +449,7 @@ cluster LevelControl = 8 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -5555,7 +5555,7 @@ cluster ThermostatUserInterfaceConfiguration = 516 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -5875,7 +5875,7 @@ cluster ColorControl = 768 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -9087,7 +9087,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -9238,7 +9238,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; ram attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/placeholder/linux/apps/app1/config.zap b/examples/placeholder/linux/apps/app1/config.zap index 0f7dff994bd646..090e4f74c60881 100644 --- a/examples/placeholder/linux/apps/app1/config.zap +++ b/examples/placeholder/linux/apps/app1/config.zap @@ -12207,7 +12207,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -12587,7 +12587,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -13838,7 +13838,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -14866,7 +14866,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter index 82c062fbef2dd3..85950bac76279e 100644 --- a/examples/placeholder/linux/apps/app2/config.matter +++ b/examples/placeholder/linux/apps/app2/config.matter @@ -324,7 +324,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -449,7 +449,7 @@ cluster LevelControl = 8 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -5512,7 +5512,7 @@ cluster ThermostatUserInterfaceConfiguration = 516 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -5832,7 +5832,7 @@ cluster ColorControl = 768 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -9047,7 +9047,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; @@ -9177,7 +9177,7 @@ endpoint 1 { ram attribute coupleColorTempToLevelMinMireds; ram attribute startUpColorTemperatureMireds; ram attribute featureMap default = 0; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveHue; diff --git a/examples/placeholder/linux/apps/app2/config.zap b/examples/placeholder/linux/apps/app2/config.zap index 786ccbbea4ee8d..bcd64d2189d645 100644 --- a/examples/placeholder/linux/apps/app2/config.zap +++ b/examples/placeholder/linux/apps/app2/config.zap @@ -12289,7 +12289,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -12637,7 +12637,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -13598,7 +13598,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -14626,7 +14626,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/examples/platform/infineon/psoc6/init_psoc6Platform.cpp b/examples/platform/infineon/psoc6/init_psoc6Platform.cpp index 85c8ae5ffa6092..1b236bf73c9ef0 100644 --- a/examples/platform/infineon/psoc6/init_psoc6Platform.cpp +++ b/examples/platform/infineon/psoc6/init_psoc6Platform.cpp @@ -47,7 +47,7 @@ #include #include -void init_p6Platform(void) +void init_psoc6Platform(void) { /* Initialize the board support package */ cybsp_init(); diff --git a/examples/platform/infineon/psoc6/init_psoc6Platform.h b/examples/platform/infineon/psoc6/init_psoc6Platform.h index 68ab7df04cc03e..8b4c075731bec0 100644 --- a/examples/platform/infineon/psoc6/init_psoc6Platform.h +++ b/examples/platform/infineon/psoc6/init_psoc6Platform.h @@ -18,4 +18,4 @@ /*******************************************************************************/ #pragma once -void init_p6Platform(void); +void init_psoc6Platform(void); diff --git a/examples/platform/silabs/BaseApplication.cpp b/examples/platform/silabs/BaseApplication.cpp index fd22a7ea3a48fc..44e6a4ff3b1827 100644 --- a/examples/platform/silabs/BaseApplication.cpp +++ b/examples/platform/silabs/BaseApplication.cpp @@ -51,6 +51,7 @@ #if CHIP_ENABLE_OPENTHREAD #include #include +#include #include #endif // CHIP_ENABLE_OPENTHREAD @@ -115,9 +116,10 @@ app::Clusters::NetworkCommissioning::Instance sWiFiNetworkCommissioningInstance(0 /* Endpoint Id */, &(NetworkCommissioning::SlWiFiDriver::GetInstance())); #endif /* SL_WIFI */ +bool sIsEnabled = false; +bool sIsAttached = false; + #if !(defined(CHIP_CONFIG_ENABLE_ICD_SERVER) && CHIP_CONFIG_ENABLE_ICD_SERVER) -bool sIsEnabled = false; -bool sIsAttached = false; bool sHaveBLEConnections = false; #endif // CHIP_CONFIG_ENABLE_ICD_SERVER @@ -156,14 +158,13 @@ Identify gIdentify = { }; #endif // MATTER_DM_PLUGIN_IDENTIFY_SERVER + } // namespace -bool BaseApplication::sIsProvisioned = false; -bool BaseApplication::sIsFactoryResetTriggered = false; -LEDWidget * BaseApplication::sAppActionLed = nullptr; -#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 +bool BaseApplication::sIsProvisioned = false; +bool BaseApplication::sIsFactoryResetTriggered = false; +LEDWidget * BaseApplication::sAppActionLed = nullptr; BaseApplicationDelegate BaseApplication::sAppDelegate = BaseApplicationDelegate(); -#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 #ifdef DIC_ENABLE namespace { @@ -181,17 +182,19 @@ void AppSpecificConnectivityEventCallback(const ChipDeviceEvent * event, intptr_ } // namespace #endif // DIC_ENABLE -#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 void BaseApplicationDelegate::OnCommissioningSessionStarted() { isComissioningStarted = true; } + void BaseApplicationDelegate::OnCommissioningSessionStopped() { isComissioningStarted = false; } + void BaseApplicationDelegate::OnCommissioningWindowClosed() { +#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 if (!BaseApplication::GetProvisionStatus() && !isComissioningStarted) { int32_t status = wfx_power_save(RSI_SLEEP_MODE_8, STANDBY_POWER_SAVE_WITH_RAM_RETENTION); @@ -200,8 +203,27 @@ void BaseApplicationDelegate::OnCommissioningWindowClosed() ChipLogError(DeviceLayer, "Failed to enable the TA Deep Sleep"); } } +#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917qq +} + +void BaseApplicationDelegate::OnFabricCommitted(const FabricTable & fabricTable, FabricIndex fabricIndex) +{ + // If we commissioned our first fabric, Update the commissioned status of the App + if (fabricTable.FabricCount() == 1) + { + BaseApplication::UpdateCommissioningStatus(true); + } +} + +void BaseApplicationDelegate::OnFabricRemoved(const FabricTable & fabricTable, FabricIndex fabricIndex) +{ + if (fabricTable.FabricCount() == 0) + { + BaseApplication::UpdateCommissioningStatus(false); + + BaseApplication::DoProvisioningReset(); + } } -#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 /********************************************************** * AppTask Definitions @@ -298,6 +320,8 @@ CHIP_ERROR BaseApplication::Init() #if CHIP_ENABLE_OPENTHREAD BaseApplication::sIsProvisioned = ConnectivityMgr().IsThreadProvisioned(); #endif + + err = chip::Server::GetInstance().GetFabricTable().AddFabricDelegate(&sAppDelegate); return err; } @@ -411,6 +435,23 @@ bool BaseApplication::ActivateStatusLedPatterns() return isPatternSet; } +void BaseApplication::UpdateCommissioningStatus(bool newState) +{ +#ifdef SL_WIFI + BaseApplication::sIsProvisioned = ConnectivityMgr().IsWiFiStationProvisioned(); + sIsEnabled = ConnectivityMgr().IsWiFiStationEnabled(); + sIsAttached = ConnectivityMgr().IsWiFiStationConnected(); +#endif /* SL_WIFI */ +#if CHIP_ENABLE_OPENTHREAD + // TODO: This is a temporary solution until we can read Thread provisioning status from RAM instead of NVM. + BaseApplication::sIsProvisioned = newState; + sIsEnabled = ConnectivityMgr().IsThreadEnabled(); + sIsAttached = ConnectivityMgr().IsThreadAttached(); +#endif /* CHIP_ENABLE_OPENTHREAD */ + + ActivateStatusLedPatterns(); +} + // TODO Move State Monitoring elsewhere void BaseApplication::LightEventHandler() { @@ -750,15 +791,40 @@ void BaseApplication::ScheduleFactoryReset() { Provision::Manager::GetInstance().SetProvisionRequired(true); } - PlatformMgr().HandleServerShuttingDown(); + PlatformMgr().HandleServerShuttingDown(); // HandleServerShuttingDown calls OnShutdown() which is only implemented for the + // basic information cluster it seems. And triggers and Event flush, which is not + // relevant when there are no fabrics left ConfigurationMgr().InitiateFactoryReset(); }); } +void BaseApplication::DoProvisioningReset() +{ + PlatformMgr().ScheduleWork([](intptr_t) { +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD + ConfigurationManagerImpl::GetDefaultInstance().ClearThreadStack(); + ThreadStackMgrImpl().FactoryResetThreadStack(); + ThreadStackMgr().InitThreadStack(); +#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD + +#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION + ChipLogProgress(DeviceLayer, "Clearing WiFi provision"); + chip::DeviceLayer::ConnectivityMgr().ClearWiFiStationProvision(); +#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION + + CHIP_ERROR err = Server::GetInstance().GetCommissioningWindowManager().OpenBasicCommissioningWindow(); + if (err != CHIP_NO_ERROR) + { + SILABS_LOG("Failed to open the Basic Commissioning Window"); + } + }); +} + void BaseApplication::OnPlatformEvent(const ChipDeviceEvent * event, intptr_t) { if (event->Type == DeviceEventType::kServiceProvisioningChange) { + // Note: This is only called on Attach, we need to add a method to detect Thread Network Detach BaseApplication::sIsProvisioned = event->ServiceProvisioningChange.IsServiceProvisioned; } } diff --git a/examples/platform/silabs/BaseApplication.h b/examples/platform/silabs/BaseApplication.h index 8a231aa6c51513..161f1cdc9eb2fd 100644 --- a/examples/platform/silabs/BaseApplication.h +++ b/examples/platform/silabs/BaseApplication.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -62,16 +63,19 @@ #define APP_ERROR_START_TIMER_FAILED CHIP_APPLICATION_ERROR(0x05) #define APP_ERROR_STOP_TIMER_FAILED CHIP_APPLICATION_ERROR(0x06) -#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 -class BaseApplicationDelegate : public AppDelegate +class BaseApplicationDelegate : public AppDelegate, public chip::FabricTable::Delegate { private: + // AppDelegate bool isComissioningStarted; void OnCommissioningSessionStarted() override; void OnCommissioningSessionStopped() override; void OnCommissioningWindowClosed() override; + + // FabricTable::Delegate + void OnFabricCommitted(const chip::FabricTable & fabricTable, chip::FabricIndex fabricIndex) override; + void OnFabricRemoved(const chip::FabricTable & fabricTable, chip::FabricIndex fabricIndex) override; }; -#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 /********************************************************** * BaseApplication Declaration @@ -86,9 +90,7 @@ class BaseApplication static bool sIsProvisioned; static bool sIsFactoryResetTriggered; static LEDWidget * sAppActionLed; -#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 static BaseApplicationDelegate sAppDelegate; -#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 /** * @brief Create AppTask task and Event Queue @@ -156,6 +158,18 @@ class BaseApplication static void OnTriggerIdentifyEffect(Identify * identify); #endif + /** + * @brief Updates the static boolean isCommissioned to the desired state + * + */ + static void UpdateCommissioningStatus(bool newState); + + /** + * @brief Called when the last Fabric is removed, clears all Fabric related data, including Thread and Wifi provision. + * @note This function preserves some NVM3 data that is not Fabric scoped, like Attribute Value or Boot Count. + */ + static void DoProvisioningReset(); + protected: CHIP_ERROR Init(); diff --git a/examples/platform/silabs/MatterConfig.cpp b/examples/platform/silabs/MatterConfig.cpp index 0f25e2e25a40ed..1aabd29bb75ab6 100644 --- a/examples/platform/silabs/MatterConfig.cpp +++ b/examples/platform/silabs/MatterConfig.cpp @@ -222,9 +222,12 @@ void SilabsMatterConfig::ConnectivityEventCallback(const ChipDeviceEvent * event CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName) { CHIP_ERROR err; - +#ifdef SL_WIFI + // Because OpenThread needs to use memory allocation during its Key operations, we initialize the memory management for thread + // and set the allocation functions inside sl_ot_create_instance, which is called by sl_system_init in the OpenThread stack + // initialization. mbedtls_platform_set_calloc_free(CHIPPlatformMemoryCalloc, CHIPPlatformMemoryFree); - +#endif SILABS_LOG("=================================================="); SILABS_LOG("%s starting", appName); SILABS_LOG("=================================================="); @@ -241,11 +244,11 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName) // Init Matter Stack //============================================== SILABS_LOG("Init CHIP Stack"); - // Init Chip memory management before the stack - ReturnErrorOnFailure(chip::Platform::MemoryInit()); -// WiFi needs to be initialized after Memory Init for some reason #ifdef SL_WIFI + // Init Chip memory management before the stack + // See comment above about OpenThread memory allocation as to why this is WIFI only here. + ReturnErrorOnFailure(chip::Platform::MemoryInit()); ReturnErrorOnFailure(InitWiFi()); #endif @@ -304,9 +307,7 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName) initParams.endpointNativeParams = static_cast(&nativeParams); #endif -#if CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 initParams.appDelegate = &BaseApplication::sAppDelegate; -#endif // CHIP_CONFIG_ENABLE_ICD_SERVER && SLI_SI917 // Init Matter Server and Start Event Loop err = chip::Server::GetInstance().Init(initParams); diff --git a/examples/platform/silabs/efr32/uart.cpp b/examples/platform/silabs/efr32/uart.cpp index 5feaaa66d86923..80d2dbba63b3a8 100644 --- a/examples/platform/silabs/efr32/uart.cpp +++ b/examples/platform/silabs/efr32/uart.cpp @@ -361,6 +361,12 @@ int16_t uartConsoleWrite(const char * Buf, uint16_t BufLength) return UART_CONSOLE_ERR; } + if (NULL == sUartTxQueue) + { + // This is to prevent the first prompt from OTCLI to be rejected and to break the OTCli output + uartConsoleInit(); + } + #ifdef PW_RPC_ENABLED // Pigweed Logger is already thread safe. UARTDRV_ForceTransmit(vcom_handle, (uint8_t *) Buf, BufLength); diff --git a/examples/platform/silabs/matter-platform.slcp b/examples/platform/silabs/matter-platform.slcp index c8075656e9f74d..bfde28d9f721f9 100644 --- a/examples/platform/silabs/matter-platform.slcp +++ b/examples/platform/silabs/matter-platform.slcp @@ -72,6 +72,9 @@ component: - {id: mbedtls_platform_dynamic_memory_allocation_config_init_runtime } - {id: mbedtls_base64} - {id: ot_psa_crypto} +- {id: ot_platform_abstraction} +- {id: ot_rtos_wrappers_real} +- {id: sl_ot_custom_cli} # Necessary componenets for ot coap cert lib # - {id: mbedtls_dtls} # Requried by COAP lib # - {id: mbedtls_tls_server} # Requried by COAP lib @@ -86,6 +89,10 @@ config_file: directory: btconf configuration: +- name: SL_OPENTHREAD_ENABLE_APP_TASK + value: 0 +- name: SL_OPENTHREAD_ENABLE_CLI_TASK + value: 0 - {name: SL_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED, value: '0'} - {name: SL_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED, value: '1'} - condition: [uartdrv_usart] diff --git a/examples/pump-app/pump-common/pump-app.matter b/examples/pump-app/pump-common/pump-app.matter index dc18d83cc89bc3..242d64e29ddd95 100644 --- a/examples/pump-app/pump-common/pump-app.matter +++ b/examples/pump-app/pump-common/pump-app.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1939,7 +1939,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/pump-app/pump-common/pump-app.zap b/examples/pump-app/pump-common/pump-app.zap index cb87c13835d08c..17e0732704d2af 100644 --- a/examples/pump-app/pump-common/pump-app.zap +++ b/examples/pump-app/pump-common/pump-app.zap @@ -3343,7 +3343,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/pump-app/silabs/data_model/pump-thread-app.matter b/examples/pump-app/silabs/data_model/pump-thread-app.matter index 864ba8cef14e27..907af129f460aa 100644 --- a/examples/pump-app/silabs/data_model/pump-thread-app.matter +++ b/examples/pump-app/silabs/data_model/pump-thread-app.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1939,7 +1939,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/pump-app/silabs/data_model/pump-thread-app.zap b/examples/pump-app/silabs/data_model/pump-thread-app.zap index 358703c49600cf..d977c40da06770 100644 --- a/examples/pump-app/silabs/data_model/pump-thread-app.zap +++ b/examples/pump-app/silabs/data_model/pump-thread-app.zap @@ -3343,7 +3343,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/pump-app/silabs/data_model/pump-wifi-app.matter b/examples/pump-app/silabs/data_model/pump-wifi-app.matter index 864ba8cef14e27..907af129f460aa 100644 --- a/examples/pump-app/silabs/data_model/pump-wifi-app.matter +++ b/examples/pump-app/silabs/data_model/pump-wifi-app.matter @@ -125,7 +125,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -1939,7 +1939,7 @@ endpoint 1 { callback attribute acceptedCommandList; callback attribute attributeList; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/pump-app/silabs/data_model/pump-wifi-app.zap b/examples/pump-app/silabs/data_model/pump-wifi-app.zap index 358703c49600cf..d977c40da06770 100644 --- a/examples/pump-app/silabs/data_model/pump-wifi-app.zap +++ b/examples/pump-app/silabs/data_model/pump-wifi-app.zap @@ -3343,7 +3343,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/tv-app/tv-common/tv-app.matter b/examples/tv-app/tv-common/tv-app.matter index 998cac0791b12c..69c714a56bf7da 100644 --- a/examples/tv-app/tv-common/tv-app.matter +++ b/examples/tv-app/tv-common/tv-app.matter @@ -75,7 +75,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -3750,7 +3750,7 @@ endpoint 2 { ram attribute defaultMoveRate; persist attribute startUpCurrentLevel default = 255; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 5; + ram attribute clusterRevision default = 6; handle command MoveToLevel; handle command Move; diff --git a/examples/tv-app/tv-common/tv-app.zap b/examples/tv-app/tv-common/tv-app.zap index 8e5028b4ed8d25..9acccceace7c4d 100644 --- a/examples/tv-app/tv-common/tv-app.zap +++ b/examples/tv-app/tv-common/tv-app.zap @@ -6915,7 +6915,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter index e58845e4f8823b..e7bbc1e6c2eee4 100644 --- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter +++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.matter @@ -202,7 +202,7 @@ cluster OnOff = 6 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; diff --git a/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap b/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap index c9cc4c8e9eb598..4f234c23f8eadb 100644 --- a/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap +++ b/examples/tv-casting-app/tv-casting-common/tv-casting-app.zap @@ -19,18 +19,18 @@ "package": [ { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/zcl/zcl.json", - "type": "zcl-properties", + "path": "../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", "category": "matter", - "version": 1, - "description": "Matter SDK ZCL data" + "version": "chip-v1" }, { "pathRelativity": "relativeToZap", - "path": "../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", + "path": "../../../src/app/zap-templates/zcl/zcl.json", + "type": "zcl-properties", "category": "matter", - "version": "chip-v1" + "version": 1, + "description": "Matter SDK ZCL data" } ], "endpointTypes": [ @@ -3127,7 +3127,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter index 5fe6dd615c6d46..21e19e2640fbcb 100644 --- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter +++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.matter @@ -2850,7 +2850,7 @@ cluster WindowCovering = 258 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -3721,7 +3721,7 @@ endpoint 1 { callback attribute eventList; callback attribute attributeList; ram attribute featureMap default = 1; - ram attribute clusterRevision default = 6; + ram attribute clusterRevision default = 7; handle command MoveToHue; handle command MoveToSaturation; diff --git a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap index 93728b6f5fed7e..5fdeb3f38b60a8 100644 --- a/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap +++ b/examples/virtual-device-app/virtual-device-common/virtual-device-app.zap @@ -6581,7 +6581,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 1, "maxInterval": 65534, diff --git a/integrations/cloudbuild/smoke-test.yaml b/integrations/cloudbuild/smoke-test.yaml index 77e5647aab9e53..4c02dc8718c590 100644 --- a/integrations/cloudbuild/smoke-test.yaml +++ b/integrations/cloudbuild/smoke-test.yaml @@ -75,7 +75,7 @@ steps: ./scripts/build/build_examples.py --enable-flashbundle --target efr32-brd4187c-light --target efr32-brd4187c-light-rpc - --target efr32-brd4187cbrd4187c-lock-openthread-mtd + --target efr32-brd4187c-lock-openthread-mtd --target efr32-brd4187c-lock-rpc-openthread-mtd --target efr32-brd4187c-unit-test build diff --git a/scripts/build/builders/host.py b/scripts/build/builders/host.py index 79d6b849a32aeb..50695772fff354 100644 --- a/scripts/build/builders/host.py +++ b/scripts/build/builders/host.py @@ -454,6 +454,10 @@ def __init__(self, root, runner, app: HostApp, board=HostBoard.NATIVE, if self.app == HostApp.SIMULATED_APP2: self.extra_gn_options.append('chip_tests_zap_config="app2"') + if self.app in {HostApp.JAVA_MATTER_CONTROLLER, HostApp.KOTLIN_MATTER_CONTROLLER}: + # TODO: controllers depending on a datamodel is odd. For now fix compile dependencies on ember. + self.extra_gn_options.append('chip_use_data_model_interface="disabled"') + if self.app == HostApp.TESTS and fuzzing_type != HostFuzzingType.NONE: self.build_command = 'fuzz_tests' diff --git a/scripts/examples/gn_psoc6_example.sh b/scripts/examples/gn_psoc6_example.sh index 04f47e6b2f0b5a..e3ae875b8e27a4 100755 --- a/scripts/examples/gn_psoc6_example.sh +++ b/scripts/examples/gn_psoc6_example.sh @@ -17,7 +17,7 @@ # set -e -# Build script for GN P6 examples GitHub workflow. +# Build script for GN PSOC6 examples GitHub workflow. source "$(dirname "$0")/../../scripts/activate.sh" # Install required software diff --git a/scripts/flashing/psoc6_firmware_utils.py b/scripts/flashing/psoc6_firmware_utils.py index aeef78030a1d74..3e3639b49d3f47 100755 --- a/scripts/flashing/psoc6_firmware_utils.py +++ b/scripts/flashing/psoc6_firmware_utils.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright (c) 2021 Project CHIP Authors +# Copyright (c) 2024 Project CHIP Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -42,38 +42,24 @@ --skip_reset, --skip-reset Do not reset device after flashing """ - +import os +import platform as plt +import subprocess import sys -from shutil import which import firmware_utils # Additional options that can be use to configure an `Flasher` # object (as dictionary keys) and/or passed as command line options. -P6_OPTIONS = { +PSOC6_OPTIONS = { # Configuration options define properties used in flashing operations. 'configuration': { - 'make': { - 'help': 'File name of the make executable', + 'openocd': { + 'help': 'File name of the hex image', 'default': None, 'argparse': { 'metavar': 'FILE', }, - 'command': [ - "make", - "-C", - {'option': 'sdk_path'}, - ['TARGET={device}'], - ['CY_OPENOCD_PROGRAM_IMG=../../../../{application}'], - {'option': 'mtb_target'} - ], - 'verify': ['{make}', '--version'], - 'error': - """\ - Unable to execute {make}. - - Please ensure that make is installed. - """, }, 'device': { 'help': 'Device family or platform to target', @@ -94,31 +80,100 @@ }, } +# Global variables +FW_LOADER = "fw-loader" +KIT_PROG_STR = "KitProg3 CMSIS-DAP" + +# General utility functions + + +def _get_board_serial_number(tools_path): + """Obtains the MCU serial number""" + board_ser_num = None + # if system is windows, add the .exe extension + exe = FW_LOADER + (".exe" if plt.system() == "Windows" else "") + fw_loader_exe = os.path.join(tools_path, FW_LOADER, "bin", exe) + try: + # runs fw-loader --device-list to get the connected device info + output = subprocess.run([fw_loader_exe, "--device-list"], check=True, capture_output=True).stdout.decode().split("\n") + except subprocess.SubprocessError: + # Do not error here, during matter build this code is interpreted by the python wrapper + # If a device is not connected in the build stage it will complain and generate an error + return None + for line in output: + # look for a line like: Info: Connected - KitProg3 CMSIS-DAP BULK-0F03131601051400 + if KIT_PROG_STR in line: + board_ser_num = line.split("-")[-1].strip() + break + if board_ser_num is None: + raise Exception("Could not detect CMSIS DAP device.") + return board_ser_num + + +def _find_tools_path(): + """Obtains the path to the latest ModusToolbox tools package""" + tools_version = "" + tools_path = os.environ.get("CY_TOOLS_PATHS", None) + # If `CY_TOOLS_PATHS` env variable is set, return that value + if tools_path is not None: + return tools_path + path_to_search = "/Applications/ModusToolbox/" if plt.system() == "Darwin" else os.path.join(os.path.expanduser("~"), "ModusToolbox") + if not os.path.exists(path_to_search): + raise Exception( + "Could not find ModusToolbox installation. Please install ModusToolbox and export CY_TOOLS_PATHS=") + dirs = os.listdir(path_to_search) + for directory in dirs: + # find the latest version of ModusToolbox that is installed + if directory.startswith("tools_"): + if directory > tools_version: + tools_version = directory + return os.path.join(path_to_search, tools_version) + class Flasher(firmware_utils.Flasher): """Manage PSoC6 flashing.""" def __init__(self, **options): super().__init__(platform='PSOC6', module=__name__, **options) - self.define_options(P6_OPTIONS) + self.define_options(PSOC6_OPTIONS) - def erase(self): + def verify(self, image): raise NotImplementedError() - def verify(self, image): + def reset(self): raise NotImplementedError() + def erase(self): + tools_path = _find_tools_path() + open_ocd_dir = os.path.join(tools_path, "openocd", "bin", "openocd") + return self.run_tool( + 'openocd', + [ + "-s", f"{open_ocd_dir}/scripts", + "-c", "source [find interface/kitprog3.cfg]", + "-c", "source [find target/psoc6_2m.cfg]", + "-c", "init; reset init", + "-c", "flash erase_sector 0 0 last; shutdown", + ], + name='Erase device') + def flash(self, image): """Flash image.""" + tools_path = _find_tools_path() + ser_num = _get_board_serial_number(tools_path) + open_ocd_dir = os.path.join(tools_path, "openocd", "bin", "openocd") return self.run_tool( - 'make', - [], - options={"mtb_target": "qprogram", "application": image}, + 'openocd', + [ + "-s", f"{open_ocd_dir}/scripts", + "-c", "source [find interface/kitprog3.cfg]", + "-c", "source [find target/psoc6_2m.cfg]", + "-c", f"adapter serial {ser_num}", + "-c", "init; reset init", + "-c", f"program {image} verify reset exit", + ], name='Flash') - def reset(self): - raise NotImplementedError() - def actions(self): """Perform actions on the device according to self.option.""" self.log(3, 'Options:', self.option) @@ -126,26 +181,27 @@ def actions(self): if self.option.erase: if self.erase().err: return self - - if self.option.application: + elif self.option.reset: + if self.reset().err: + return self + elif self.option.application: application = self.option.application if self.flash(application).err: return self if self.option.verify_application: if self.verify(application).err: return self - - if self.option.reset: - if self.reset().err: - return self - return self def locate_tool(self, tool): - if tool == "make": - return which("make") - else: - return tool + """Gets the path to infineon shipped openocd asset""" + tools_path = _find_tools_path() + if tools_path is None: + raise Exception( + "CY_TOOLS_PATHS environment variable is not set. Please set it to the location of your ModusToolbox tools directory.") + if tool != "openocd": + raise Exception(f"Tool '{tool}' is not supported for flashing PSoC6. Please use openocd.") + return os.path.join(tools_path, "openocd", "bin", "openocd") if __name__ == '__main__': diff --git a/scripts/rules.matterlint b/scripts/rules.matterlint index b4af613c584c29..f44681febd112d 100644 --- a/scripts/rules.matterlint +++ b/scripts/rules.matterlint @@ -94,6 +94,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/thermostat-user-interface-con load "../src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml"; load "../src/app/zap-templates/zcl/data-model/chip/thread-border-router-management-cluster.xml"; load "../src/app/zap-templates/zcl/data-model/chip/thread-network-diagnostics-cluster.xml"; +load "../src/app/zap-templates/zcl/data-model/chip/thread-network-directory-cluster.xml"; load "../src/app/zap-templates/zcl/data-model/chip/time-format-localization-cluster.xml"; load "../src/app/zap-templates/zcl/data-model/chip/time-synchronization-cluster.xml"; load "../src/app/zap-templates/zcl/data-model/chip/timer-cluster.xml"; diff --git a/scripts/tools/memory/platform/p6.cfg b/scripts/tools/memory/platform/psoc6.cfg similarity index 76% rename from scripts/tools/memory/platform/p6.cfg rename to scripts/tools/memory/platform/psoc6.cfg index 7b6184d378e4f6..ea67d5c7e2f622 100644 --- a/scripts/tools/memory/platform/p6.cfg +++ b/scripts/tools/memory/platform/psoc6.cfg @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Memory tools default configuation for Infineon P6. +# Memory tools default configuation for Infineon PSOC6. { 'section': { @@ -30,17 +30,13 @@ # 'end': [], # } # }, - 'region': { - # Regions are sets of sections that can be used for aggregate reports. - 'sections': { - 'FLASH': [ - '.text', - '.rodata', - ], - 'RAM': [ - '.bss', - '.data', - ], - } - }, +# 'region': { +# # Regions are sets of sections that can be used for aggregate reports. +# 'sections': { +# 'FLASH': [ +# ], +# 'RAM': [ +# ] +# } +# }, } diff --git a/scripts/tools/zap/tests/inputs/all-clusters-app.zap b/scripts/tools/zap/tests/inputs/all-clusters-app.zap index 825cf1cd6242c0..570e1711e53d6b 100644 --- a/scripts/tools/zap/tests/inputs/all-clusters-app.zap +++ b/scripts/tools/zap/tests/inputs/all-clusters-app.zap @@ -19,18 +19,18 @@ "package": [ { "pathRelativity": "relativeToZap", - "path": "../../../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json", - "type": "zcl-properties", + "path": "../../../../../src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", "category": "matter", - "version": 1, - "description": "Matter SDK ZCL data with some extensions" + "version": "chip-v1" }, { "pathRelativity": "relativeToZap", - "path": "../../../../../src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", + "path": "../../../../../src/app/zap-templates/zcl/zcl-with-test-extensions.json", + "type": "zcl-properties", "category": "matter", - "version": "chip-v1" + "version": 1, + "description": "Matter SDK ZCL data with some extensions" } ], "endpointTypes": [ @@ -7303,7 +7303,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -17807,7 +17807,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/scripts/tools/zap/tests/inputs/lighting-app.zap b/scripts/tools/zap/tests/inputs/lighting-app.zap index 53b5cb008a201b..9935fea81069d3 100644 --- a/scripts/tools/zap/tests/inputs/lighting-app.zap +++ b/scripts/tools/zap/tests/inputs/lighting-app.zap @@ -4922,7 +4922,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5813,7 +5813,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h index 69486db49cfb77..36156ad1e2a503 100644 --- a/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h +++ b/scripts/tools/zap/tests/outputs/all-clusters-app/app-templates/endpoint_config.h @@ -261,7 +261,7 @@ #define GENERATED_DEFAULTS_COUNT (30) // This is an array of EmberAfAttributeMinMaxValue structures. -#define GENERATED_MIN_MAX_DEFAULT_COUNT 49 +#define GENERATED_MIN_MAX_DEFAULT_COUNT 50 #define GENERATED_MIN_MAX_DEFAULTS \ { \ \ @@ -275,7 +275,8 @@ { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x2 }, /* switch actions */ \ \ /* Endpoint: 1, Cluster: Level Control (server) */ \ - { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x3 }, /* Options */ \ + { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x3 }, /* Options */ \ + { (uint16_t) 0x32, (uint16_t) 0x1, (uint16_t) 0xFF }, /* DefaultMoveRate */ \ \ /* Endpoint: 1, Cluster: Binary Input (Basic) (server) */ \ { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x1 }, /* out of service */ \ @@ -828,16 +829,16 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* OnTransitionTime */ \ { ZAP_EMPTY_DEFAULT(), 0x00000013, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* OffTransitionTime */ \ - { ZAP_SIMPLE_DEFAULT(50), 0x00000014, 1, ZAP_TYPE(INT8U), \ - ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* DefaultMoveRate */ \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(4), 0x00000014, 1, ZAP_TYPE(INT8U), \ + ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* DefaultMoveRate */ \ { ZAP_SIMPLE_DEFAULT(255), 0x00004000, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpCurrentLevel */ \ { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Binary Input (Basic) (server) */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(4), 0x00000051, 1, ZAP_TYPE(BOOLEAN), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(5), 0x00000051, 1, ZAP_TYPE(BOOLEAN), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* out of service */ \ { ZAP_EMPTY_DEFAULT(), 0x00000055, 1, ZAP_TYPE(BOOLEAN), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* present value */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x0000006F, 1, ZAP_TYPE(BITMAP8), 0 }, /* status flags */ \ @@ -965,7 +966,7 @@ \ /* Endpoint: 1, Cluster: Laundry Washer Controls (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SpinSpeeds */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(5), 0x00000001, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(6), 0x00000001, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* SpinSpeedCurrent */ \ { ZAP_EMPTY_DEFAULT(), 0x00000002, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* NumberOfRinses */ \ { ZAP_EMPTY_DEFAULT(), 0x00000003, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportedRinses */ \ @@ -1026,7 +1027,7 @@ { ZAP_SIMPLE_DEFAULT(0), 0x00000008, 1, ZAP_TYPE(ENUM8), 0 }, /* InterconnectSmokeAlarm */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000009, 1, ZAP_TYPE(ENUM8), 0 }, /* InterconnectCOAlarm */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000000A, 1, ZAP_TYPE(ENUM8), 0 }, /* ContaminationState */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(6), 0x0000000B, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(7), 0x0000000B, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* SmokeSensitivityLevel */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000000C, 4, ZAP_TYPE(EPOCH_S), 0 }, /* ExpiryDate */ \ { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ @@ -1138,7 +1139,7 @@ { ZAP_SIMPLE_DEFAULT(0xFF), 0x00000005, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* TargetState */ \ { ZAP_SIMPLE_DEFAULT(0xFF), 0x00000006, 1, ZAP_TYPE(PERCENT), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* CurrentLevel */ \ { ZAP_SIMPLE_DEFAULT(0xFF), 0x00000007, 1, ZAP_TYPE(PERCENT), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* TargetLevel */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(7), 0x00000008, 1, ZAP_TYPE(PERCENT), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(8), 0x00000008, 1, ZAP_TYPE(PERCENT), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* DefaultOpenLevel */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000009, 2, ZAP_TYPE(BITMAP16), 0 }, /* ValveFault */ \ { ZAP_SIMPLE_DEFAULT(1), 0x0000000A, 1, ZAP_TYPE(INT8U), 0 }, /* LevelStep */ \ @@ -1238,7 +1239,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* NextChargeRequiredEnergy */ \ { ZAP_EMPTY_DEFAULT(), 0x00000026, 1, ZAP_TYPE(PERCENT), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* NextChargeTargetSoC */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(8), 0x00000027, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(9), 0x00000027, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* ApproximateEVEfficiency */ \ { ZAP_EMPTY_DEFAULT(), 0x00000040, 4, ZAP_TYPE(INT32U), \ @@ -1315,7 +1316,7 @@ ZAP_ATTRIBUTE_MASK(TOKENIZE) }, /* InstalledOpenLimitTilt */ \ { ZAP_SIMPLE_DEFAULT(0xFFFF), 0x00000013, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(TOKENIZE) }, /* InstalledClosedLimitTilt */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(9), 0x00000017, 1, ZAP_TYPE(BITMAP8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(10), 0x00000017, 1, ZAP_TYPE(BITMAP8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* Mode */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x0000001A, 2, ZAP_TYPE(BITMAP16), 0 }, /* SafetyStatus */ \ { ZAP_SIMPLE_DEFAULT(0x17), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ @@ -1353,9 +1354,9 @@ { ZAP_EMPTY_DEFAULT(), 0x00000016, 3, ZAP_TYPE(INT24U), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* Power */ \ { ZAP_SIMPLE_DEFAULT(0x00000000), 0x00000017, 4, ZAP_TYPE(INT32U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LifetimeEnergyConsumed */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(10), 0x00000020, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(11), 0x00000020, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* OperationMode */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(11), 0x00000021, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(12), 0x00000021, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ControlMode */ \ { ZAP_SIMPLE_DEFAULT(0x1F), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ @@ -1366,23 +1367,23 @@ { ZAP_SIMPLE_DEFAULT(0x0BB8), 0x00000004, 2, ZAP_TYPE(TEMPERATURE), 0 }, /* AbsMaxHeatSetpointLimit */ \ { ZAP_SIMPLE_DEFAULT(0x0640), 0x00000005, 2, ZAP_TYPE(TEMPERATURE), 0 }, /* AbsMinCoolSetpointLimit */ \ { ZAP_SIMPLE_DEFAULT(0x0C80), 0x00000006, 2, ZAP_TYPE(TEMPERATURE), 0 }, /* AbsMaxCoolSetpointLimit */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(12), 0x00000011, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(13), 0x00000011, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* OccupiedCoolingSetpoint */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(13), 0x00000012, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(14), 0x00000012, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* OccupiedHeatingSetpoint */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(14), 0x00000015, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(15), 0x00000015, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MinHeatSetpointLimit */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(15), 0x00000016, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(16), 0x00000016, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MaxHeatSetpointLimit */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(16), 0x00000017, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(17), 0x00000017, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MinCoolSetpointLimit */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(17), 0x00000018, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(18), 0x00000018, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MaxCoolSetpointLimit */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(18), 0x00000019, 1, ZAP_TYPE(INT8S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(19), 0x00000019, 1, ZAP_TYPE(INT8S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MinSetpointDeadBand */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(19), 0x0000001B, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(20), 0x0000001B, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ControlSequenceOfOperation */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(20), 0x0000001C, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(21), 0x0000001C, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* SystemMode */ \ { ZAP_EMPTY_DEFAULT(), 0x00000048, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* PresetTypes */ \ { ZAP_EMPTY_DEFAULT(), 0x00000049, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ScheduleTypes */ \ @@ -1408,14 +1409,14 @@ { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Fan Control (server) */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(21), 0x00000000, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(22), 0x00000000, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* FanMode */ \ { ZAP_SIMPLE_DEFAULT(0x02), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* FanModeSequence */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(22), 0x00000002, 1, ZAP_TYPE(PERCENT), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(23), 0x00000002, 1, ZAP_TYPE(PERCENT), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* PercentSetting */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000003, 1, ZAP_TYPE(PERCENT), 0 }, /* PercentCurrent */ \ { ZAP_SIMPLE_DEFAULT(100), 0x00000004, 1, ZAP_TYPE(INT8U), 0 }, /* SpeedMax */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(23), 0x00000005, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(24), 0x00000005, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* SpeedSetting */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000006, 1, ZAP_TYPE(INT8U), 0 }, /* SpeedCurrent */ \ { ZAP_SIMPLE_DEFAULT(0x03), 0x00000007, 1, ZAP_TYPE(BITMAP8), 0 }, /* RockSupport */ \ @@ -1427,11 +1428,11 @@ { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Thermostat User Interface Configuration (server) */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(24), 0x00000000, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(25), 0x00000000, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* TemperatureDisplayMode */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(25), 0x00000001, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(26), 0x00000001, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* KeypadLockout */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(26), 0x00000002, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(27), 0x00000002, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ScheduleProgrammingVisibility */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ @@ -1467,25 +1468,25 @@ { ZAP_EMPTY_DEFAULT(), 0x00000028, 2, ZAP_TYPE(INT16U), 0 }, /* Primary6X */ \ { ZAP_EMPTY_DEFAULT(), 0x00000029, 2, ZAP_TYPE(INT16U), 0 }, /* Primary6Y */ \ { ZAP_EMPTY_DEFAULT(), 0x0000002A, 1, ZAP_TYPE(INT8U), ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* Primary6Intensity */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(27), 0x00000030, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(28), 0x00000030, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* WhitePointX */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(28), 0x00000031, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(29), 0x00000031, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* WhitePointY */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(29), 0x00000032, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(30), 0x00000032, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointRX */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(30), 0x00000033, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(31), 0x00000033, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointRY */ \ { ZAP_EMPTY_DEFAULT(), 0x00000034, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* ColorPointRIntensity */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(31), 0x00000036, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(32), 0x00000036, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointGX */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(32), 0x00000037, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(33), 0x00000037, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointGY */ \ { ZAP_EMPTY_DEFAULT(), 0x00000038, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* ColorPointGIntensity */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(33), 0x0000003A, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(34), 0x0000003A, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointBX */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(34), 0x0000003B, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(35), 0x0000003B, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* ColorPointBY */ \ { ZAP_EMPTY_DEFAULT(), 0x0000003C, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* ColorPointBIntensity */ \ @@ -1501,23 +1502,23 @@ { ZAP_SIMPLE_DEFAULT(0x0000), 0x0000400B, 2, ZAP_TYPE(INT16U), 0 }, /* ColorTempPhysicalMinMireds */ \ { ZAP_SIMPLE_DEFAULT(0xFEFF), 0x0000400C, 2, ZAP_TYPE(INT16U), 0 }, /* ColorTempPhysicalMaxMireds */ \ { ZAP_EMPTY_DEFAULT(), 0x0000400D, 2, ZAP_TYPE(INT16U), 0 }, /* CoupleColorTempToLevelMinMireds */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(35), 0x00004010, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(36), 0x00004010, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpColorTemperatureMireds */ \ { ZAP_SIMPLE_DEFAULT(0x1F), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(7), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Ballast Configuration (server) */ \ { ZAP_SIMPLE_DEFAULT(0x01), 0x00000000, 1, ZAP_TYPE(INT8U), 0 }, /* PhysicalMinLevel */ \ { ZAP_SIMPLE_DEFAULT(0xFE), 0x00000001, 1, ZAP_TYPE(INT8U), 0 }, /* PhysicalMaxLevel */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000002, 1, ZAP_TYPE(BITMAP8), 0 }, /* BallastStatus */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(36), 0x00000010, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(37), 0x00000010, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MinLevel */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(37), 0x00000011, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(38), 0x00000011, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* MaxLevel */ \ { ZAP_EMPTY_DEFAULT(), 0x00000014, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* IntrinsicBallastFactor */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(38), 0x00000015, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(39), 0x00000015, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* BallastFactorAdjustment */ \ { ZAP_EMPTY_DEFAULT(), 0x00000020, 1, ZAP_TYPE(INT8U), 0 }, /* LampQuantity */ \ @@ -1527,7 +1528,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LampRatedHours */ \ { ZAP_SIMPLE_DEFAULT(0x000000), 0x00000033, 3, ZAP_TYPE(INT24U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LampBurnHours */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(39), 0x00000034, 1, ZAP_TYPE(BITMAP8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(40), 0x00000034, 1, ZAP_TYPE(BITMAP8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* LampAlarmMode */ \ { ZAP_SIMPLE_DEFAULT(0xFFFFFF), 0x00000035, 3, ZAP_TYPE(INT24U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* LampBurnHoursTripPoint */ \ @@ -1874,13 +1875,13 @@ { ZAP_EMPTY_DEFAULT(), 0x00000024, 1, ZAP_TYPE(ENUM8), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* enum_attr */ \ { ZAP_EMPTY_DEFAULT(), 0x00000025, 0, ZAP_TYPE(STRUCT), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* struct_attr */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(40), 0x00000026, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(41), 0x00000026, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* range_restricted_int8u */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(41), 0x00000027, 1, ZAP_TYPE(INT8S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(42), 0x00000027, 1, ZAP_TYPE(INT8S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* range_restricted_int8s */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(42), 0x00000028, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(43), 0x00000028, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* range_restricted_int16u */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(43), 0x00000029, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(44), 0x00000029, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* range_restricted_int16s */ \ { ZAP_EMPTY_DEFAULT(), 0x0000002A, 0, ZAP_TYPE(ARRAY), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* list_long_octet_string */ \ @@ -1951,16 +1952,16 @@ { ZAP_EMPTY_DEFAULT(), 0x00004025, 0, ZAP_TYPE(STRUCT), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* nullable_struct */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(44), 0x00004026, 1, ZAP_TYPE(INT8U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(45), 0x00004026, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* nullable_range_restricted_int8u */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(45), 0x00004027, 1, ZAP_TYPE(INT8S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(46), 0x00004027, 1, ZAP_TYPE(INT8S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* nullable_range_restricted_int8s */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(46), 0x00004028, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(47), 0x00004028, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* nullable_range_restricted_int16u */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(47), 0x00004029, 2, ZAP_TYPE(INT16S), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(48), 0x00004029, 2, ZAP_TYPE(INT16S), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* nullable_range_restricted_int16s */ \ { ZAP_EMPTY_DEFAULT(), 0x0000402A, 1, ZAP_TYPE(INT8U), \ @@ -1985,7 +1986,7 @@ { ZAP_SIMPLE_DEFAULT(1), 0x00004000, 1, ZAP_TYPE(BOOLEAN), 0 }, /* GlobalSceneControl */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00004001, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* OnTime */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00004002, 2, ZAP_TYPE(INT16U), ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* OffWaitTime */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(48), 0x00004003, 1, ZAP_TYPE(ENUM8), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(49), 0x00004003, 1, ZAP_TYPE(ENUM8), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpOnOff */ \ { ZAP_SIMPLE_DEFAULT(0x0001), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ diff --git a/scripts/tools/zap/tests/outputs/lighting-app/app-templates/endpoint_config.h b/scripts/tools/zap/tests/outputs/lighting-app/app-templates/endpoint_config.h index 3f42a085adb376..ab7e45dab37b66 100644 --- a/scripts/tools/zap/tests/outputs/lighting-app/app-templates/endpoint_config.h +++ b/scripts/tools/zap/tests/outputs/lighting-app/app-templates/endpoint_config.h @@ -71,7 +71,7 @@ #define GENERATED_DEFAULTS_COUNT (3) // This is an array of EmberAfAttributeMinMaxValue structures. -#define GENERATED_MIN_MAX_DEFAULT_COUNT 3 +#define GENERATED_MIN_MAX_DEFAULT_COUNT 4 #define GENERATED_MIN_MAX_DEFAULTS \ { \ \ @@ -79,7 +79,8 @@ { (uint16_t) 0xFF, (uint16_t) 0x0, (uint16_t) 0x2 }, /* StartUpOnOff */ \ \ /* Endpoint: 1, Cluster: Level Control (server) */ \ - { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x3 }, /* Options */ \ + { (uint16_t) 0x0, (uint16_t) 0x0, (uint16_t) 0x3 }, /* Options */ \ + { (uint16_t) 0x32, (uint16_t) 0x1, (uint16_t) 0xFF }, /* DefaultMoveRate */ \ \ /* Endpoint: 1, Cluster: Color Control (server) */ \ { \ @@ -481,13 +482,13 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* OnTransitionTime */ \ { ZAP_EMPTY_DEFAULT(), 0x00000013, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* OffTransitionTime */ \ - { ZAP_SIMPLE_DEFAULT(50), 0x00000014, 1, ZAP_TYPE(INT8U), \ - ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* DefaultMoveRate */ \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(2), 0x00000014, 1, ZAP_TYPE(INT8U), \ + ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* DefaultMoveRate */ \ { ZAP_SIMPLE_DEFAULT(255), 0x00004000, 1, ZAP_TYPE(INT8U), \ ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpCurrentLevel */ \ { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* DeviceTypeList */ \ @@ -528,11 +529,11 @@ { ZAP_SIMPLE_DEFAULT(0x0000), 0x0000400B, 2, ZAP_TYPE(INT16U), 0 }, /* ColorTempPhysicalMinMireds */ \ { ZAP_SIMPLE_DEFAULT(0xFEFF), 0x0000400C, 2, ZAP_TYPE(INT16U), 0 }, /* ColorTempPhysicalMaxMireds */ \ { ZAP_EMPTY_DEFAULT(), 0x0000400D, 2, ZAP_TYPE(INT16U), 0 }, /* CoupleColorTempToLevelMinMireds */ \ - { ZAP_MIN_MAX_DEFAULTS_INDEX(2), 0x00004010, 2, ZAP_TYPE(INT16U), \ + { ZAP_MIN_MAX_DEFAULTS_INDEX(3), 0x00004010, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(TOKENIZE) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpColorTemperatureMireds */ \ { ZAP_SIMPLE_DEFAULT(0x1F), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(7), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Occupancy Sensing (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(BITMAP8), 0 }, /* Occupancy */ \ diff --git a/src/app/AttributeAccessInterface.h b/src/app/AttributeAccessInterface.h index f92b5987684039..50e0812fb61c1a 100644 --- a/src/app/AttributeAccessInterface.h +++ b/src/app/AttributeAccessInterface.h @@ -149,6 +149,9 @@ class AttributeAccessInterface (!mEndpointId.HasValue() || !aOther.mEndpointId.HasValue() || mEndpointId.Value() == aOther.mEndpointId.Value()); } +protected: + Optional GetEndpointId() { return mEndpointId; } + private: Optional mEndpointId; ClusterId mClusterId; diff --git a/src/app/AttributePathExpandIterator-Checked.cpp b/src/app/AttributePathExpandIterator-Checked.cpp new file mode 100644 index 00000000000000..3d0d660edcf1eb --- /dev/null +++ b/src/app/AttributePathExpandIterator-Checked.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ + +#include "lib/support/logging/TextOnlyLogging.h" +#include + +namespace chip { +namespace app { +AttributePathExpandIteratorChecked::AttributePathExpandIteratorChecked(InteractionModel::DataModel * dataModel, + SingleLinkedListNode * attributePath) : + mDataModelIterator(dataModel, attributePath), + mEmberIterator(dataModel, attributePath) +{ + CheckOutputsIdentical("Constructor"); +} + +bool AttributePathExpandIteratorChecked::Next() +{ + bool dmResult = mDataModelIterator.Next(); + bool emResult = mEmberIterator.Next(); + + CheckOutputsIdentical("Next"); + + VerifyOrDie(dmResult == emResult); + + return emResult; +} + +bool AttributePathExpandIteratorChecked::Get(ConcreteAttributePath & aPath) +{ + CheckOutputsIdentical("Get"); + return mEmberIterator.Get(aPath); +} + +void AttributePathExpandIteratorChecked::ResetCurrentCluster() +{ + mDataModelIterator.ResetCurrentCluster(); + mEmberIterator.ResetCurrentCluster(); + + CheckOutputsIdentical("ResetCurrentCluster"); +} + +void AttributePathExpandIteratorChecked::ResetTo(SingleLinkedListNode * paths) + +{ + mDataModelIterator.ResetTo(paths); + mEmberIterator.ResetTo(paths); + CheckOutputsIdentical("ResetTo"); +} + +void AttributePathExpandIteratorChecked::CheckOutputsIdentical(const char * msg) +{ + ConcreteAttributePath dmPath; + ConcreteAttributePath emPath; + + bool dmResult = mDataModelIterator.Get(dmPath); + bool emResult = mEmberIterator.Get(emPath); + + if (dmResult == emResult) + { + // We check for: + // - either failed result (in which case path should not matter) + // - or exact match of paths on success + // + // NOTE: extra logic because mExpanded is NOT considered in operator== (ugly...) + if ((dmResult == false) || ((dmPath == emPath) && (dmPath.mExpanded == emPath.mExpanded))) + { + // outputs are identical. All is good + return; + } + } + + ChipLogProgress(Test, "Different paths in DM vs EMBER (%d and %d) in %s", dmResult, emResult, msg); + ChipLogProgress(Test, " DM PATH: 0x%X/" ChipLogFormatMEI "/" ChipLogFormatMEI " (%s)", dmPath.mEndpointId, + ChipLogValueMEI(dmPath.mClusterId), ChipLogValueMEI(dmPath.mAttributeId), + dmPath.mExpanded ? "EXPANDED" : "NOT expanded"); + ChipLogProgress(Test, " EMBER PATH: 0x%X/" ChipLogFormatMEI "/" ChipLogFormatMEI " (%s)", emPath.mEndpointId, + ChipLogValueMEI(emPath.mClusterId), ChipLogValueMEI(emPath.mAttributeId), + emPath.mExpanded ? "EXPANDED" : "NOT expanded"); + + chipDie(); +} + +} // namespace app +} // namespace chip diff --git a/src/app/AttributePathExpandIterator-Checked.h b/src/app/AttributePathExpandIterator-Checked.h new file mode 100644 index 00000000000000..e1611b3288ee18 --- /dev/null +++ b/src/app/AttributePathExpandIterator-Checked.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ + +#pragma once + +#include +#include + +namespace chip { +namespace app { + +class AttributePathExpandIteratorChecked +{ +public: + AttributePathExpandIteratorChecked(InteractionModel::DataModel * dataModel, + SingleLinkedListNode * attributePath); + + bool Next(); + bool Get(ConcreteAttributePath & aPath); + void ResetCurrentCluster(); + void ResetTo(SingleLinkedListNode * paths); + +private: + AttributePathExpandIteratorDataModel mDataModelIterator; + AttributePathExpandIteratorEmber mEmberIterator; + + void CheckOutputsIdentical(const char * msg); +}; + +} // namespace app +} // namespace chip diff --git a/src/app/AttributePathExpandIterator-DataModel.cpp b/src/app/AttributePathExpandIterator-DataModel.cpp new file mode 100644 index 00000000000000..92af8b50ca6730 --- /dev/null +++ b/src/app/AttributePathExpandIterator-DataModel.cpp @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ +#include "lib/support/CodeUtils.h" +#include +#include + +using namespace chip::app::InteractionModel; + +namespace chip { +namespace app { + +AttributePathExpandIteratorDataModel::AttributePathExpandIteratorDataModel( + InteractionModel::DataModel * dataModel, SingleLinkedListNode * attributePath) : + mDataModel(dataModel), + mpAttributePath(attributePath), mOutputPath(kInvalidEndpointId, kInvalidClusterId, kInvalidAttributeId) + +{ + mOutputPath.mExpanded = true; // this is reset in 'next' if needed + + // Make the iterator ready to emit the first valid path in the list. + // TODO: the bool return value here is completely unchecked + Next(); +} + +bool AttributePathExpandIteratorDataModel::IsValidAttributeId(AttributeId attributeId) +{ + switch (attributeId) + { + case Clusters::Globals::Attributes::GeneratedCommandList::Id: + case Clusters::Globals::Attributes::AcceptedCommandList::Id: +#if CHIP_CONFIG_ENABLE_EVENTLIST_ATTRIBUTE + case Clusters::Globals::Attributes::EventList::Id: +#endif // CHIP_CONFIG_ENABLE_EVENTLIST_ATTRIBUTE + case Clusters::Globals::Attributes::AttributeList::Id: + return true; + default: + break; + } + + const ConcreteAttributePath attributePath(mOutputPath.mEndpointId, mOutputPath.mClusterId, attributeId); + return mDataModel->GetAttributeInfo(attributePath).has_value(); +} + +std::optional AttributePathExpandIteratorDataModel::NextAttributeId() +{ + if (mOutputPath.mAttributeId == kInvalidAttributeId) + { + if (mpAttributePath->mValue.HasWildcardAttributeId()) + { + AttributeEntry entry = mDataModel->FirstAttribute(mOutputPath); + return entry.IsValid() // + ? entry.path.mAttributeId // + : Clusters::Globals::Attributes::GeneratedCommandList::Id; // + } + + // We allow fixed attribute IDs if and only if they are valid: + // - they may be GLOBAL attributes OR + // - they are valid attributes for this cluster + if (IsValidAttributeId(mpAttributePath->mValue.mAttributeId)) + { + return mpAttributePath->mValue.mAttributeId; + } + + return std::nullopt; + } + + // advance the existing attribute id if it can be advanced + VerifyOrReturnValue(mpAttributePath->mValue.HasWildcardAttributeId(), std::nullopt); + + // Ensure (including ordering) that GlobalAttributesNotInMetadata is reported as needed + for (unsigned i = 0; i < ArraySize(GlobalAttributesNotInMetadata); i++) + { + if (GlobalAttributesNotInMetadata[i] != mOutputPath.mAttributeId) + { + continue; + } + + unsigned nextAttributeIndex = i + 1; + if (nextAttributeIndex < ArraySize(GlobalAttributesNotInMetadata)) + { + return GlobalAttributesNotInMetadata[nextAttributeIndex]; + } + + // reached the end of global attributes + return std::nullopt; + } + + AttributeEntry entry = mDataModel->NextAttribute(mOutputPath); + if (entry.IsValid()) + { + return entry.path.mAttributeId; + } + + // Finished the data model, start with global attributes + static_assert(ArraySize(GlobalAttributesNotInMetadata) > 0); + return GlobalAttributesNotInMetadata[0]; +} + +std::optional AttributePathExpandIteratorDataModel::NextClusterId() +{ + + if (mOutputPath.mClusterId == kInvalidClusterId) + { + if (mpAttributePath->mValue.HasWildcardClusterId()) + { + ClusterEntry entry = mDataModel->FirstCluster(mOutputPath.mEndpointId); + return entry.IsValid() ? std::make_optional(entry.path.mClusterId) : std::nullopt; + } + + // only return a cluster if it is valid + const ConcreteClusterPath clusterPath(mOutputPath.mEndpointId, mpAttributePath->mValue.mClusterId); + if (!mDataModel->GetClusterInfo(clusterPath).has_value()) + { + return std::nullopt; + } + + return mpAttributePath->mValue.mClusterId; + } + + VerifyOrReturnValue(mpAttributePath->mValue.HasWildcardClusterId(), std::nullopt); + + ClusterEntry entry = mDataModel->NextCluster(mOutputPath); + return entry.IsValid() ? std::make_optional(entry.path.mClusterId) : std::nullopt; +} + +std::optional AttributePathExpandIteratorDataModel::NextEndpointId() +{ + if (mOutputPath.mEndpointId == kInvalidEndpointId) + { + if (mpAttributePath->mValue.HasWildcardEndpointId()) + { + EndpointId id = mDataModel->FirstEndpoint(); + return (id != kInvalidEndpointId) ? std::make_optional(id) : std::nullopt; + } + + return mpAttributePath->mValue.mEndpointId; + } + + VerifyOrReturnValue(mpAttributePath->mValue.HasWildcardEndpointId(), std::nullopt); + + EndpointId id = mDataModel->NextEndpoint(mOutputPath.mEndpointId); + return (id != kInvalidEndpointId) ? std::make_optional(id) : std::nullopt; +} + +void AttributePathExpandIteratorDataModel::ResetCurrentCluster() +{ + // If this is a null iterator, or the attribute id of current cluster info is not a wildcard attribute id, then this function + // will do nothing, since we won't be expanding the wildcard attribute ids under a cluster. + VerifyOrReturn(mpAttributePath != nullptr && mpAttributePath->mValue.HasWildcardAttributeId()); + + // Reset path expansion to ask for the first attribute of the current cluster + mOutputPath.mAttributeId = kInvalidAttributeId; + mOutputPath.mExpanded = true; // we know this is a wildcard attribute + Next(); +} + +bool AttributePathExpandIteratorDataModel::AdvanceOutputPath() +{ + if (!mpAttributePath->mValue.IsWildcardPath()) + { + if (mOutputPath.mEndpointId != kInvalidEndpointId) + { + return false; // cannot expand non-wildcard path + } + + mOutputPath.mEndpointId = mpAttributePath->mValue.mEndpointId; + mOutputPath.mClusterId = mpAttributePath->mValue.mClusterId; + mOutputPath.mAttributeId = mpAttributePath->mValue.mAttributeId; + mOutputPath.mExpanded = false; + return true; + } + + while (true) + { + if (mOutputPath.mClusterId != kInvalidClusterId) + { + + std::optional nextAttribute = NextAttributeId(); + if (nextAttribute.has_value()) + { + mOutputPath.mAttributeId = *nextAttribute; + return true; + } + } + + // no valid attribute, try to advance the cluster, see if a suitable one exists + if (mOutputPath.mEndpointId != kInvalidEndpointId) + { + std::optional nextCluster = NextClusterId(); + if (nextCluster.has_value()) + { + mOutputPath.mClusterId = *nextCluster; + mOutputPath.mAttributeId = kInvalidAttributeId; // restarts attributes + continue; + } + } + + // no valid cluster, try advance the endpoint, see if a suitable on exists + std::optional nextEndpoint = NextEndpointId(); + if (nextEndpoint.has_value()) + { + mOutputPath.mEndpointId = *nextEndpoint; + mOutputPath.mClusterId = kInvalidClusterId; // restarts clusters + continue; + } + return false; + } +} + +bool AttributePathExpandIteratorDataModel::Next() +{ + while (mpAttributePath != nullptr) + { + if (AdvanceOutputPath()) + { + return true; + } + mpAttributePath = mpAttributePath->mpNext; + mOutputPath = ConcreteReadAttributePath(kInvalidEndpointId, kInvalidClusterId, kInvalidAttributeId); + mOutputPath.mExpanded = true; // this is reset to false on advancement if needed + } + + mOutputPath = ConcreteReadAttributePath(); + return false; +} + +} // namespace app +} // namespace chip diff --git a/src/app/AttributePathExpandIterator-DataModel.h b/src/app/AttributePathExpandIterator-DataModel.h new file mode 100644 index 00000000000000..546151c7dd2806 --- /dev/null +++ b/src/app/AttributePathExpandIterator-DataModel.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ +#pragma once + +#include +#include +#include +#include + +namespace chip { +namespace app { + +/** + * AttributePathExpandIteratorDataModel is used to iterate over a linked list of AttributePathParams-s. + * The AttributePathExpandIteratorDataModel is copiable, however, the given cluster info must be valid when calling Next(). + * + * AttributePathExpandIteratorDataModel will expand attribute paths with wildcards, and only emit existing paths for + * AttributePathParams with wildcards. For AttributePathParams with a concrete path (i.e. does not contain wildcards), + * AttributePathExpandIteratorDataModel will emit them as-is. + * + * The typical use of AttributePathExpandIteratorDataModel may look like: + * ConcreteAttributePath path; + * for (AttributePathExpandIteratorDataModel iterator(AttributePathParams); iterator.Get(path); iterator.Next()) {...} + * + * The iterator does not copy the given AttributePathParams, The given AttributePathParams must be valid when using the iterator. + * If the set of endpoints, clusters, or attributes that are supported changes, AttributePathExpandIteratorDataModel must be + * reinitialized. + * + * A initialized iterator will return the first valid path, no need to call Next() before calling Get() for the first time. + * + * Note: The Next() and Get() are two separate operations by design since a possible call of this iterator might be: + * - Get() + * - Chunk full, return + * - In a new chunk, Get() + * + * TODO: The AttributePathParams may support a group id, the iterator should be able to call group data provider to expand the group + * id. + */ +class AttributePathExpandIteratorDataModel +{ +public: + AttributePathExpandIteratorDataModel(InteractionModel::DataModel * dataModel, + SingleLinkedListNode * attributePath); + + /** + * Proceed the iterator to the next attribute path in the given cluster info. + * + * Returns false if AttributePathExpandIteratorDataModeDataModel has exhausted all paths in the given AttributePathParams list. + */ + bool Next(); + + /** + * Fills the aPath with the path the iterator currently points to. + * Returns false if the iterator is not pointing to a valid path (i.e. it has exhausted the cluster info). + */ + bool Get(ConcreteAttributePath & aPath) + { + aPath = mOutputPath; + return (mpAttributePath != nullptr); + } + + /** + * Reset the iterator to the beginning of current cluster if we are in the middle of expanding a wildcard attribute id for some + * cluster. + * + * When attributes are changed in the middle of expanding a wildcard attribute, we need to reset the iterator, to provide the + * client with a consistent state of the cluster. + */ + void ResetCurrentCluster(); + + /** Start iterating over the given `paths` */ + inline void ResetTo(SingleLinkedListNode * paths) + { + *this = AttributePathExpandIteratorDataModel(mDataModel, paths); + } + +private: + InteractionModel::DataModel * mDataModel; + SingleLinkedListNode * mpAttributePath; + ConcreteAttributePath mOutputPath; + + /// Move to the next endpoint/cluster/attribute triplet that is valid given + /// the current mOutputPath and mpAttributePath + /// + /// returns true if such a next value was found. + bool AdvanceOutputPath(); + + /// Get the next attribute ID in mOutputPath(endpoint/cluster) if one is available. + /// Will start from the beginning if current mOutputPath.mAttributeId is kInvalidAttributeId + /// + /// Respects path expansion/values in mpAttributePath + /// + /// Handles Global attributes (which are returned at the end) + std::optional NextAttributeId(); + + /// Get the next cluster ID in mOutputPath(endpoint) if one is available. + /// Will start from the beginning if current mOutputPath.mClusterId is kInvalidClusterId + /// + /// Respects path expansion/values in mpAttributePath + std::optional NextClusterId(); + + /// Get the next endpoint ID in mOutputPath if one is available. + /// Will start from the beginning if current mOutputPath.mEndpointId is kInvalidEndpointId + /// + /// Respects path expansion/values in mpAttributePath + std::optional NextEndpointId(); + + /// Checks if the given attributeId is valid for the current mOutputPath(endpoint/cluster) + /// + /// Meaning that it is known to the data model OR it is a always-there global attribute. + bool IsValidAttributeId(AttributeId attributeId); +}; + +} // namespace app +} // namespace chip diff --git a/src/app/AttributePathExpandIterator.cpp b/src/app/AttributePathExpandIterator-Ember.cpp similarity index 92% rename from src/app/AttributePathExpandIterator.cpp rename to src/app/AttributePathExpandIterator-Ember.cpp index 9be7ab495a4267..abaa621cb736ca 100644 --- a/src/app/AttributePathExpandIterator.cpp +++ b/src/app/AttributePathExpandIterator-Ember.cpp @@ -16,7 +16,7 @@ * limitations under the License. */ -#include +#include #include #include @@ -53,9 +53,10 @@ extern bool emberAfEndpointIndexIsEnabled(uint16_t index); namespace chip { namespace app { -AttributePathExpandIterator::AttributePathExpandIterator(SingleLinkedListNode * aAttributePath) +AttributePathExpandIteratorEmber::AttributePathExpandIteratorEmber(InteractionModel::DataModel *, + SingleLinkedListNode * aAttributePath) : + mpAttributePath(aAttributePath) { - mpAttributePath = aAttributePath; // Reset iterator state mEndpointIndex = UINT16_MAX; @@ -72,7 +73,7 @@ AttributePathExpandIterator::AttributePathExpandIterator(SingleLinkedListNodempNext, mEndpointIndex = UINT16_MAX)) { diff --git a/src/app/AttributePathExpandIterator-Ember.h b/src/app/AttributePathExpandIterator-Ember.h new file mode 100644 index 00000000000000..ef359fc21b60fa --- /dev/null +++ b/src/app/AttributePathExpandIterator-Ember.h @@ -0,0 +1,136 @@ +/* + * + * Copyright (c) 2021 Project CHIP Authors + * 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 + * Defines an iterator for iterating all possible paths from a list of AttributePathParams-s according to spec section 8.9.2.2 + * (Valid Attribute Paths) + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace chip { +namespace app { + +/** + * AttributePathExpandIteratorEmber is used to iterate over a linked list of AttributePathParams-s. + * The AttributePathExpandIteratorEmber is copiable, however, the given cluster info must be valid when calling Next(). + * + * AttributePathExpandIteratorEmber will expand attribute paths with wildcards, and only emit existing paths for AttributePathParams + * with wildcards. For AttributePathParams with a concrete path (i.e. does not contain wildcards), AttributePathExpandIteratorEmber + * will emit them as-is. + * + * The typical use of AttributePathExpandIteratorEmber may look like: + * ConcreteAttributePath path; + * for (AttributePathExpandIteratorEmber iterator(AttributePathParams); iterator.Get(path); iterator.Next()) {...} + * + * The iterator does not copy the given AttributePathParams, The given AttributePathParams must be valid when using the iterator. + * If the set of endpoints, clusters, or attributes that are supported changes, AttributePathExpandIteratorEmber must be + * reinitialized. + * + * A initialized iterator will return the first valid path, no need to call Next() before calling Get() for the first time. + * + * Note: The Next() and Get() are two separate operations by design since a possible call of this iterator might be: + * - Get() + * - Chunk full, return + * - In a new chunk, Get() + * + * TODO: The AttributePathParams may support a group id, the iterator should be able to call group data provider to expand the group + * id. + */ +class AttributePathExpandIteratorEmber +{ +public: + AttributePathExpandIteratorEmber(InteractionModel::DataModel *, // datamodel is NOT used by this class + SingleLinkedListNode * aAttributePath); + + /** + * Proceed the iterator to the next attribute path in the given cluster info. + * + * Returns false if AttributePathExpandIteratorEmber has exhausted all paths in the given AttributePathParams list. + */ + bool Next(); + + /** + * Fills the aPath with the path the iterator currently points to. + * Returns false if the iterator is not pointing to a valid path (i.e. it has exhausted the cluster info). + */ + bool Get(ConcreteAttributePath & aPath) + { + aPath = mOutputPath; + return (mpAttributePath != nullptr); // still handling some path + } + + /** + * Reset the iterator to the beginning of current cluster if we are in the middle of expanding a wildcard attribute id for some + * cluster. + * + * When attributes are changed in the middle of expanding a wildcard attribute, we need to reset the iterator, to provide the + * client with a consistent state of the cluster. + */ + void ResetCurrentCluster(); + + /** Start iterating over the given `paths` */ + inline void ResetTo(SingleLinkedListNode * paths) + { + *this = AttributePathExpandIteratorEmber(nullptr /* data model is not used */, paths); + } + +private: + SingleLinkedListNode * mpAttributePath; + + ConcreteAttributePath mOutputPath; + + uint16_t mEndpointIndex, mEndEndpointIndex; + uint16_t mAttributeIndex, mEndAttributeIndex; + + // Note: should use decltype(EmberAfEndpointType::clusterCount) here, but af-types is including app specific generated files. + uint8_t mClusterIndex, mEndClusterIndex; + // For dealing with global attributes that are not part of the attribute + // metadata. + uint8_t mGlobalAttributeIndex, mGlobalAttributeEndIndex; + + /** + * Prepare*IndexRange will update mBegin*Index and mEnd*Index variables. + * If AttributePathParams contains a wildcard field, it will set mBegin*Index to 0 and mEnd*Index to count. + * Or it will set mBegin*Index to the index of the Endpoint/Cluster/Attribute, and mEnd*Index to mBegin*Index + 1. + * + * If the Endpoint/Cluster/Attribute does not exist, mBegin*Index will be UINT*_MAX, and mEnd*Inde will be 0. + * + * The index can be used with emberAfEndpointFromIndex, emberAfGetNthClusterId and emberAfGetServerAttributeIdByIndex. + */ + void PrepareEndpointIndexRange(const AttributePathParams & aAttributePath); + void PrepareClusterIndexRange(const AttributePathParams & aAttributePath, EndpointId aEndpointId); + void PrepareAttributeIndexRange(const AttributePathParams & aAttributePath, EndpointId aEndpointId, ClusterId aClusterId); +}; +} // namespace app +} // namespace chip diff --git a/src/app/AttributePathExpandIterator.h b/src/app/AttributePathExpandIterator.h index f11e6793822f84..fae69fe7995d4e 100644 --- a/src/app/AttributePathExpandIterator.h +++ b/src/app/AttributePathExpandIterator.h @@ -15,121 +15,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -/** - * @file - * Defines an iterator for iterating all possible paths from a list of AttributePathParams-s according to spec section 8.9.2.2 - * (Valid Attribute Paths) - */ - #pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#if CHIP_CONFIG_USE_EMBER_DATA_MODEL && CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +#include +#else +#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +#include +#else +#include +#endif // CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +#endif // CHIP_CONFIG_USE_EMBER_DATA_MODEL && CHIP_CONFIG_USE_DATA_MODEL_INTERFACE namespace chip { namespace app { -/** - * AttributePathExpandIterator is used to iterate over a linked list of AttributePathParams-s. - * The AttributePathExpandIterator is copiable, however, the given cluster info must be valid when calling Next(). - * - * AttributePathExpandIterator will expand attribute paths with wildcards, and only emit existing paths for AttributePathParams with - * wildcards. For AttributePathParams with a concrete path (i.e. does not contain wildcards), AttributePathExpandIterator will emit - * them as-is. - * - * The typical use of AttributePathExpandIterator may look like: - * ConcreteAttributePath path; - * for (AttributePathExpandIterator iterator(AttributePathParams); iterator.Get(path); iterator.Next()) {...} - * - * The iterator does not copy the given AttributePathParams, The given AttributePathParams must be valid when using the iterator. - * If the set of endpoints, clusters, or attributes that are supported changes, AttributePathExpandIterator must be reinitialized. - * - * A initialized iterator will return the first valid path, no need to call Next() before calling Get() for the first time. - * - * Note: The Next() and Get() are two separate operations by design since a possible call of this iterator might be: - * - Get() - * - Chunk full, return - * - In a new chunk, Get() - * - * TODO: The AttributePathParams may support a group id, the iterator should be able to call group data provider to expand the group - * id. - */ -class AttributePathExpandIterator -{ -public: - AttributePathExpandIterator(SingleLinkedListNode * aAttributePath); - - /** - * Proceed the iterator to the next attribute path in the given cluster info. - * - * Returns false if AttributePathExpandIterator has exhausted all paths in the given AttributePathParams list. - */ - bool Next(); - - /** - * Fills the aPath with the path the iterator currently points to. - * Returns false if the iterator is not pointing to a valid path (i.e. it has exhausted the cluster info). - */ - bool Get(ConcreteAttributePath & aPath) - { - aPath = mOutputPath; - return Valid(); - } - - /** - * Reset the iterator to the beginning of current cluster if we are in the middle of expanding a wildcard attribute id for some - * cluster. - * - * When attributes are changed in the middle of expanding a wildcard attribute, we need to reset the iterator, to provide the - * client with a consistent state of the cluster. - */ - void ResetCurrentCluster(); - - /** - * Returns if the iterator is valid (not exhausted). An iterator is exhausted if and only if: - * - Next() is called after iterating last path. - * - Iterator is initialized with a null AttributePathParams. - */ - inline bool Valid() const { return mpAttributePath != nullptr; } - -private: - SingleLinkedListNode * mpAttributePath; - - ConcreteAttributePath mOutputPath; - - uint16_t mEndpointIndex, mEndEndpointIndex; - uint16_t mAttributeIndex, mEndAttributeIndex; - - // Note: should use decltype(EmberAfEndpointType::clusterCount) here, but af-types is including app specific generated files. - uint8_t mClusterIndex, mEndClusterIndex; - // For dealing with global attributes that are not part of the attribute - // metadata. - uint8_t mGlobalAttributeIndex, mGlobalAttributeEndIndex; +#if CHIP_CONFIG_USE_EMBER_DATA_MODEL && CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +using AttributePathExpandIterator = ::chip::app::AttributePathExpandIteratorChecked; +#else +#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +using AttributePathExpandIterator = ::chip::app::AttributePathExpandIteratorDataModel; +#else +using AttributePathExpandIterator = ::chip::app::AttributePathExpandIteratorEmber; +#endif // CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +#endif // CHIP_CONFIG_USE_EMBER_DATA_MODEL && CHIP_CONFIG_USE_DATA_MODEL_INTERFACE - /** - * Prepare*IndexRange will update mBegin*Index and mEnd*Index variables. - * If AttributePathParams contains a wildcard field, it will set mBegin*Index to 0 and mEnd*Index to count. - * Or it will set mBegin*Index to the index of the Endpoint/Cluster/Attribute, and mEnd*Index to mBegin*Index + 1. - * - * If the Endpoint/Cluster/Attribute does not exist, mBegin*Index will be UINT*_MAX, and mEnd*Inde will be 0. - * - * The index can be used with emberAfEndpointFromIndex, emberAfGetNthClusterId and emberAfGetServerAttributeIdByIndex. - */ - void PrepareEndpointIndexRange(const AttributePathParams & aAttributePath); - void PrepareClusterIndexRange(const AttributePathParams & aAttributePath, EndpointId aEndpointId); - void PrepareAttributeIndexRange(const AttributePathParams & aAttributePath, EndpointId aEndpointId, ClusterId aClusterId); -}; } // namespace app } // namespace chip diff --git a/src/app/BUILD.gn b/src/app/BUILD.gn index 666c452b09dc3a..0ca8c63d37bb62 100644 --- a/src/app/BUILD.gn +++ b/src/app/BUILD.gn @@ -58,6 +58,16 @@ declare_args() { chip_im_static_global_interaction_model_engine = current_os != "linux" && current_os != "mac" && current_os != "ios" && current_os != "android" + + # Data model interface usage: + # - disabled: does not use data model interface at all + # - check: runs BOTH datamodel and non-data-model (if possible) functionality and compares results + # - enabled: runs only the data model interface (does not use the legacy code) + if (current_os == "linux") { + chip_use_data_model_interface = "check" + } else { + chip_use_data_model_interface = "disabled" + } } buildconfig_header("app_buildconfig") { @@ -80,6 +90,27 @@ buildconfig_header("app_buildconfig") { "CHIP_CONFIG_ENABLE_BUSY_HANDLING_FOR_OPERATIONAL_SESSION_SETUP=${chip_enable_busy_handling_for_operational_session_setup}", ] + if (chip_use_data_model_interface == "disabled") { + defines += [ + "CHIP_CONFIG_USE_DATA_MODEL_INTERFACE=0", + "CHIP_CONFIG_USE_EMBER_DATA_MODEL=1", + ] + } else if (chip_use_data_model_interface == "check") { + defines += [ + "CHIP_CONFIG_USE_DATA_MODEL_INTERFACE=1", + "CHIP_CONFIG_USE_EMBER_DATA_MODEL=1", + ] + } else { + # only one of disabled/check/enabled must be used + assert(chip_use_data_model_interface == "enabled", + "chip_use_data_model_interface must use a supported value") + + defines += [ + "CHIP_CONFIG_USE_DATA_MODEL_INTERFACE=1", + "CHIP_CONFIG_USE_EMBER_DATA_MODEL=0", + ] + } + visibility = [ ":app_config" ] } @@ -212,6 +243,8 @@ static_library("interaction-model") { ":paths", ":subscription-info-provider", "${chip_root}/src/app/MessageDef", + "${chip_root}/src/app/codegen-data-model:instance-header", + "${chip_root}/src/app/data-model-interface", "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/app/icd/server:manager", "${chip_root}/src/app/icd/server:observer", @@ -377,7 +410,6 @@ static_library("app") { output_name = "libCHIPDataModel" sources = [ - "AttributePathExpandIterator.cpp", "AttributePathExpandIterator.h", "AttributePersistenceProvider.h", "ChunkedWriteCallback.cpp", @@ -426,6 +458,32 @@ static_library("app") { "${chip_root}/src/system", ] + if (chip_use_data_model_interface == "disabled") { + sources += [ + "AttributePathExpandIterator-Ember.cpp", + "AttributePathExpandIterator-Ember.h", + "AttributePathExpandIterator.h", + ] + } else if (chip_use_data_model_interface == "check") { + sources += [ + "AttributePathExpandIterator-Checked.cpp", + "AttributePathExpandIterator-Checked.h", + "AttributePathExpandIterator-DataModel.cpp", + "AttributePathExpandIterator-DataModel.h", + "AttributePathExpandIterator-Ember.cpp", + "AttributePathExpandIterator-Ember.h", + "AttributePathExpandIterator.h", + ] + public_deps += [ "${chip_root}/src/app/data-model-interface" ] + } else { # enabled + sources += [ + "AttributePathExpandIterator-DataModel.cpp", + "AttributePathExpandIterator-DataModel.h", + "AttributePathExpandIterator.h", + ] + public_deps += [ "${chip_root}/src/app/data-model-interface" ] + } + if (chip_enable_read_client) { sources += [ "BufferedReadCallback.cpp", diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index d36a41e37f076c..6a0d8a4bc36e5c 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -226,6 +226,8 @@ class CommandHandlerInterface } } + Optional GetEndpointId() { return mEndpointId; } + private: Optional mEndpointId; ClusterId mClusterId; diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index 132e8cdf108a72..cb595e5bf239d1 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -41,6 +41,10 @@ #include #include +#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE +#include +#endif + namespace chip { namespace app { @@ -482,7 +486,7 @@ CHIP_ERROR InteractionModelEngine::ParseAttributePaths(const Access::SubjectDesc if (paramsList.mValue.IsWildcardPath()) { - AttributePathExpandIterator pathIterator(¶msList); + AttributePathExpandIterator pathIterator(GetDataModel(), ¶msList); ConcreteAttributePath readPath; // The definition of "valid path" is "path exists and ACL allows access". The "path exists" part is handled by @@ -845,7 +849,8 @@ Protocols::InteractionModel::Status InteractionModelEngine::OnReadInitialRequest // We have already reserved enough resources for read requests, and have granted enough resources for current subscriptions, so // we should be able to allocate resources requested by this request. - ReadHandler * handler = mReadHandlers.CreateObject(*this, apExchangeContext, aInteractionType, mReportScheduler); + ReadHandler * handler = + mReadHandlers.CreateObject(*this, apExchangeContext, aInteractionType, mReportScheduler, GetDataModel()); if (handler == nullptr) { ChipLogProgress(InteractionModel, "no resource for %s interaction", @@ -1788,6 +1793,15 @@ CommandHandlerInterface * InteractionModelEngine::FindCommandHandler(EndpointId return nullptr; } +InteractionModel::DataModel * InteractionModelEngine::GetDataModel() const +{ +#if CHIP_CONFIG_USE_DATA_MODEL_INTERFACE + // TODO: this should be temporary, we should fully inject the data model + VerifyOrReturnValue(mDataModel != nullptr, CodegenDataModelInstance()); +#endif + return mDataModel; +} + void InteractionModelEngine::OnTimedInteractionFailed(TimedHandler * apTimedHandler) { mTimedHandlers.ReleaseObject(apTimedHandler); diff --git a/src/app/InteractionModelEngine.h b/src/app/InteractionModelEngine.h index 69c565254f96f0..e2d299cce67280 100644 --- a/src/app/InteractionModelEngine.h +++ b/src/app/InteractionModelEngine.h @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -411,6 +412,8 @@ class InteractionModelEngine : public Messaging::UnsolicitedMessageHandler, } #endif + InteractionModel::DataModel * GetDataModel() const; + private: friend class reporting::Engine; friend class TestCommandInteraction; @@ -450,9 +453,9 @@ class InteractionModelEngine : public Messaging::UnsolicitedMessageHandler, * * */ - static CHIP_ERROR ParseAttributePaths(const Access::SubjectDescriptor & aSubjectDescriptor, - AttributePathIBs::Parser & aAttributePathListParser, bool & aHasValidAttributePath, - size_t & aRequestedAttributePathCount); + CHIP_ERROR ParseAttributePaths(const Access::SubjectDescriptor & aSubjectDescriptor, + AttributePathIBs::Parser & aAttributePathListParser, bool & aHasValidAttributePath, + size_t & aRequestedAttributePathCount); /** * This parses the event path list to ensure it is well formed. If so, for each path in the list, it will expand to a list @@ -699,6 +702,8 @@ class InteractionModelEngine : public Messaging::UnsolicitedMessageHandler, CASESessionManager * mpCASESessionMgr = nullptr; SubscriptionResumptionStorage * mpSubscriptionResumptionStorage = nullptr; + + InteractionModel::DataModel * mDataModel = nullptr; }; } // namespace app diff --git a/src/app/ReadHandler.cpp b/src/app/ReadHandler.cpp index 487acd27ed883e..3e182bb9428a5f 100644 --- a/src/app/ReadHandler.cpp +++ b/src/app/ReadHandler.cpp @@ -22,6 +22,7 @@ * */ +#include "data-model-interface/DataModel.h" #include #include #include @@ -53,9 +54,9 @@ uint16_t ReadHandler::GetPublisherSelectedIntervalLimit() } ReadHandler::ReadHandler(ManagementCallback & apCallback, Messaging::ExchangeContext * apExchangeContext, - InteractionType aInteractionType, Observer * observer) : - mExchangeCtx(*this), - mManagementCallback(apCallback) + InteractionType aInteractionType, Observer * observer, InteractionModel::DataModel * apDataModel) : + mAttributePathExpandIterator(apDataModel, nullptr), + mExchangeCtx(*this), mManagementCallback(apCallback) { VerifyOrDie(apExchangeContext != nullptr); @@ -79,8 +80,8 @@ ReadHandler::ReadHandler(ManagementCallback & apCallback, Messaging::ExchangeCon } #if CHIP_CONFIG_PERSIST_SUBSCRIPTIONS -ReadHandler::ReadHandler(ManagementCallback & apCallback, Observer * observer) : - mExchangeCtx(*this), mManagementCallback(apCallback) +ReadHandler::ReadHandler(ManagementCallback & apCallback, Observer * observer, InteractionModel::DataModel * apDataModel) : + mAttributePathExpandIterator(apDataModel, nullptr), mExchangeCtx(*this), mManagementCallback(apCallback) { mInteractionType = InteractionType::Subscribe; mFlags.ClearAll(); @@ -509,8 +510,8 @@ CHIP_ERROR ReadHandler::ProcessAttributePaths(AttributePathIBs::Parser & aAttrib if (CHIP_END_OF_TLV == err) { mManagementCallback.GetInteractionModelEngine()->RemoveDuplicateConcreteAttributePath(mpAttributePathList); - mAttributePathExpandIterator = AttributePathExpandIterator(mpAttributePathList); - err = CHIP_NO_ERROR; + mAttributePathExpandIterator.ResetTo(mpAttributePathList); + err = CHIP_NO_ERROR; } return err; } @@ -850,7 +851,7 @@ void ReadHandler::PersistSubscription() void ReadHandler::ResetPathIterator() { - mAttributePathExpandIterator = AttributePathExpandIterator(mpAttributePathList); + mAttributePathExpandIterator.ResetTo(mpAttributePathList); mAttributeEncoderState.Reset(); } diff --git a/src/app/ReadHandler.h b/src/app/ReadHandler.h index c973432953275b..0f6b3fada87572 100644 --- a/src/app/ReadHandler.h +++ b/src/app/ReadHandler.h @@ -212,7 +212,7 @@ class ReadHandler : public Messaging::ExchangeDelegate * */ ReadHandler(ManagementCallback & apCallback, Messaging::ExchangeContext * apExchangeContext, InteractionType aInteractionType, - Observer * observer); + Observer * observer, InteractionModel::DataModel * apDataModel); #if CHIP_CONFIG_PERSIST_SUBSCRIPTIONS /** @@ -222,7 +222,7 @@ class ReadHandler : public Messaging::ExchangeDelegate * The callback passed in has to outlive this handler object. * */ - ReadHandler(ManagementCallback & apCallback, Observer * observer); + ReadHandler(ManagementCallback & apCallback, Observer * observer, InteractionModel::DataModel * apDataModel); #endif const SingleLinkedListNode * GetAttributePathList() const { return mpAttributePathList; } @@ -500,7 +500,7 @@ class ReadHandler : public Messaging::ExchangeDelegate /// @param aFlag Flag to clear void ClearStateFlag(ReadHandlerFlags aFlag); - AttributePathExpandIterator mAttributePathExpandIterator = AttributePathExpandIterator(nullptr); + AttributePathExpandIterator mAttributePathExpandIterator; // The current generation of the reporting engine dirty set the last time we were notified that a path we're interested in was // marked dirty. @@ -582,5 +582,6 @@ class ReadHandler : public Messaging::ExchangeDelegate // TODO (#27675): Merge all observers into one and that one will dispatch the callbacks to the right place. Observer * mObserver = nullptr; }; + } // namespace app } // namespace chip diff --git a/src/app/SubscriptionResumptionSessionEstablisher.cpp b/src/app/SubscriptionResumptionSessionEstablisher.cpp index 6e016684410fc8..11da3c3d496f92 100644 --- a/src/app/SubscriptionResumptionSessionEstablisher.cpp +++ b/src/app/SubscriptionResumptionSessionEstablisher.cpp @@ -17,6 +17,7 @@ #include #include +#include namespace chip { namespace app { @@ -103,7 +104,8 @@ void SubscriptionResumptionSessionEstablisher::HandleDeviceConnected(void * cont ChipLogProgress(InteractionModel, "no resource for subscription resumption"); return; } - ReadHandler * readHandler = imEngine->mReadHandlers.CreateObject(*imEngine, imEngine->GetReportScheduler()); + ReadHandler * readHandler = + imEngine->mReadHandlers.CreateObject(*imEngine, imEngine->GetReportScheduler(), imEngine->GetDataModel()); if (readHandler == nullptr) { // TODO - Should we keep the subscription here? diff --git a/src/app/chip_data_model.cmake b/src/app/chip_data_model.cmake index 2d4149b66f6a8a..eac3b492c0eeff 100644 --- a/src/app/chip_data_model.cmake +++ b/src/app/chip_data_model.cmake @@ -17,6 +17,7 @@ set(CHIP_APP_BASE_DIR ${CMAKE_CURRENT_LIST_DIR}) include("${CHIP_ROOT}/build/chip/chip_codegen.cmake") +include("${CHIP_ROOT}/src/app/codegen-data-model/model.cmake") # Configure ${APP_TARGET} with source files associated with ${CLUSTER} cluster # @@ -132,6 +133,8 @@ function(chip_configure_data_model APP_TARGET) target_include_directories(${APP_TARGET} ${SCOPE} "${APP_TEMPLATES_GEN_DIR}") add_dependencies(${APP_TARGET} ${APP_TARGET}-zapgen) + # TODO: source for codedgen_data_model ??? + target_sources(${APP_TARGET} ${SCOPE} ${CHIP_APP_BASE_DIR}/../../zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp ${CHIP_APP_BASE_DIR}/../../zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp @@ -149,6 +152,7 @@ function(chip_configure_data_model APP_TARGET) ${CHIP_APP_BASE_DIR}/util/generic-callback-stubs.cpp ${CHIP_APP_BASE_DIR}/util/privilege-storage.cpp ${CHIP_APP_BASE_DIR}/util/util.cpp + ${CODEGEN_DATA_MODEL_SOURCES} ${APP_GEN_FILES} ${APP_TEMPLATES_GEN_FILES} ) diff --git a/src/app/chip_data_model.gni b/src/app/chip_data_model.gni index 16c500cc354cac..62f59e30669ac0 100644 --- a/src/app/chip_data_model.gni +++ b/src/app/chip_data_model.gni @@ -15,6 +15,7 @@ import("//build_overrides/build.gni") import("//build_overrides/chip.gni") import("${chip_root}/build/chip/chip_codegen.gni") +import("${chip_root}/src/app/codegen-data-model/model.gni") import("${chip_root}/src/app/common_flags.gni") import("${chip_root}/src/platform/python.gni") @@ -201,6 +202,7 @@ template("chip_data_model") { "${_app_root}/util/privilege-storage.cpp", "${chip_root}/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp", ] + sources += codegen_data_model_SOURCES if (!chip_build_controller_dynamic_server) { sources += [ @@ -396,6 +398,14 @@ template("chip_data_model") { "${_app_root}/clusters/${cluster}/thread-network-diagnostics-provider.cpp", "${_app_root}/clusters/${cluster}/thread-network-diagnostics-provider.h", ] + } else if (cluster == "thread-network-directory-server") { + sources += [ + "${_app_root}/clusters/${cluster}/${cluster}.cpp", + "${_app_root}/clusters/${cluster}/${cluster}.h", + "${_app_root}/clusters/${cluster}/DefaultThreadNetworkDirectoryStorage.cpp", + "${_app_root}/clusters/${cluster}/DefaultThreadNetworkDirectoryStorage.h", + "${_app_root}/clusters/${cluster}/ThreadNetworkDirectoryStorage.h", + ] } else { sources += [ "${_app_root}/clusters/${cluster}/${cluster}.cpp" ] } @@ -419,6 +429,7 @@ template("chip_data_model") { "${chip_root}/src/lib/support", "${chip_root}/src/protocols/secure_channel", ] + public_deps += codegen_data_model_PUBLIC_DEPS if (is_server) { public_deps += [ "${chip_root}/src/app/server" ] diff --git a/src/app/cluster-building-blocks/QuieterReporting.h b/src/app/cluster-building-blocks/QuieterReporting.h index d44f12b0f2b0bf..bf6b4fe36346d2 100644 --- a/src/app/cluster-building-blocks/QuieterReporting.h +++ b/src/app/cluster-building-blocks/QuieterReporting.h @@ -142,15 +142,6 @@ class QuieterReportingAttribute }; } - /** - * @brief Factory to generate a functor that forces reportable now. - * @return a functor usable for the `changedPredicate` arg of `SetValue()` - */ - static SufficientChangePredicate GetForceReportablePredicate() - { - return [](const SufficientChangePredicateCandidate & candidate) -> bool { return true; }; - } - Nullable value() const { return mValue; } QuieterReportingPolicyFlags & policy() { return mPolicyFlags; } const QuieterReportingPolicyFlags & policy() const { return mPolicyFlags; } @@ -163,6 +154,7 @@ class QuieterReportingAttribute * - The policies from `QuieterReportingPolicyEnum` and set via `SetPolicy()` are self-explanatory by name. * - The changedPredicate will be called with last dirty and new and may override * the dirty state altogether when it returns true. Use sparingly and default to a functor returning false. + * The changedPredicate is only called on change. * * Internal recording will be done about last dirty value and last dirty timestamp based on the policies having applied. * @@ -172,13 +164,13 @@ class QuieterReportingAttribute * @return AttributeDirtyState::kMustReport if attribute must be marked dirty right away, or * AttributeDirtyState::kNoReportNeeded otherwise. */ - AttributeDirtyState SetValue(const chip::app::DataModel::Nullable & newValue, Timestamp now, - SufficientChangePredicate changedPredicate) + AttributeDirtyState SetValue(const DataModel::Nullable & newValue, Timestamp now, SufficientChangePredicate changedPredicate) { - bool isChangeOfNull = newValue.IsNull() ^ mValue.IsNull(); - bool areBothValuesNonNull = !newValue.IsNull() && !mValue.IsNull(); + bool isChangeOfNull = newValue.IsNull() != mValue.IsNull(); + bool areBothValuesNonNull = !newValue.IsNull() && !mValue.IsNull(); + bool areBothValuesDifferent = areBothValuesNonNull && (newValue.Value() != mValue.Value()); - bool changeToFromZero = areBothValuesNonNull && (newValue.Value() == 0 || mValue.Value() == 0); + bool changeToFromZero = areBothValuesNonNull && areBothValuesDifferent && (newValue.Value() == 0 || mValue.Value() == 0); bool isIncrement = areBothValuesNonNull && (newValue.Value() > mValue.Value()); bool isDecrement = areBothValuesNonNull && (newValue.Value() < mValue.Value()); @@ -188,13 +180,17 @@ class QuieterReportingAttribute isNewlyDirty = isNewlyDirty || (mPolicyFlags.Has(QuieterReportingPolicyEnum::kMarkDirtyOnDecrement) && isDecrement); isNewlyDirty = isNewlyDirty || (mPolicyFlags.Has(QuieterReportingPolicyEnum::kMarkDirtyOnIncrement) && isIncrement); - SufficientChangePredicateCandidate candidate{ - mLastDirtyTimestampMillis, // lastDirtyTimestamp - now, // nowTimestamp - mLastDirtyValue, // lastDirtyValue - newValue // newValue - }; - isNewlyDirty = isNewlyDirty || changedPredicate(candidate); + // Only execute predicate on value change from last marked dirty. + if (newValue != mLastDirtyValue) + { + SufficientChangePredicateCandidate candidate{ + mLastDirtyTimestampMillis, // lastDirtyTimestamp + now, // nowTimestamp + mLastDirtyValue, // lastDirtyValue + newValue // newValue + }; + isNewlyDirty = isNewlyDirty || changedPredicate(candidate); + } mValue = newValue; @@ -217,20 +213,20 @@ class QuieterReportingAttribute * @return AttributeDirtyState::kMustReport if attribute must be marked dirty right away, or * AttributeDirtyState::kNoReportNeeded otherwise. */ - AttributeDirtyState SetValue(const chip::app::DataModel::Nullable & newValue, Timestamp now) + AttributeDirtyState SetValue(const DataModel::Nullable & newValue, Timestamp now) { return SetValue(newValue, now, [](const SufficientChangePredicateCandidate &) -> bool { return false; }); } protected: // Current value of the attribute. - chip::app::DataModel::Nullable mValue; + DataModel::Nullable mValue; // Last value that was marked as dirty (to use in comparisons for change, e.g. by SufficientChangePredicate). - chip::app::DataModel::Nullable mLastDirtyValue; + DataModel::Nullable mLastDirtyValue; // Enabled internal change detection policies. QuieterReportingPolicyFlags mPolicyFlags{ 0 }; // Timestamp associated with the last time the attribute was marked dirty (to use in comparisons for change). - chip::System::Clock::Milliseconds64 mLastDirtyTimestampMillis{}; + chip::System::Clock::Timestamp mLastDirtyTimestampMillis{}; }; } // namespace detail diff --git a/src/app/cluster-building-blocks/tests/TestQuieterReporting.cpp b/src/app/cluster-building-blocks/tests/TestQuieterReporting.cpp index a7750380285438..ad7800d556afa4 100644 --- a/src/app/cluster-building-blocks/tests/TestQuieterReporting.cpp +++ b/src/app/cluster-building-blocks/tests/TestQuieterReporting.cpp @@ -74,6 +74,10 @@ TEST(TestQuieterReporting, ChangeToFromZeroPolicyWorks) EXPECT_EQ(attribute.SetValue(0, now), AttributeDirtyState::kMustReport); EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 0); + // 0 --> 0, expect NOT marked dirty. + EXPECT_EQ(attribute.SetValue(0, now), AttributeDirtyState::kNoReportNeeded); + EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 0); + // 0 --> 11, expect marked dirty. EXPECT_EQ(attribute.SetValue(11, now), AttributeDirtyState::kMustReport); EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 11); @@ -209,9 +213,6 @@ TEST(TestQuieterReporting, SufficientChangePredicateWorks) EXPECT_EQ(attribute.SetValue(10, now), AttributeDirtyState::kNoReportNeeded); EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 10); - // Forcing dirty can be done with a force-true predicate - EXPECT_EQ(attribute.SetValue(10, now, attribute.GetForceReportablePredicate()), AttributeDirtyState::kMustReport); - auto predicate = attribute.GetPredicateForSufficientTimeSinceLastDirty(1000_ms); now = fakeClock.Advance(100_ms); @@ -250,6 +251,14 @@ TEST(TestQuieterReporting, SufficientChangePredicateWorks) EXPECT_EQ(attribute.SetValue(14, now, predicate), AttributeDirtyState::kNoReportNeeded); EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 14); + // Forcing dirty can NOT done with a force-true predicate. + decltype(attribute)::SufficientChangePredicate forceTruePredicate{ + [](const decltype(attribute)::SufficientChangePredicateCandidate &) -> bool { return true; } + }; + now = fakeClock.Advance(1_ms); + EXPECT_EQ(attribute.SetValue(12, now, forceTruePredicate), AttributeDirtyState::kNoReportNeeded); + EXPECT_EQ(attribute.value().ValueOr(INT_MAX), 12); + // Change to a value that marks dirty no matter what (e.g. null). Should be dirty even // before delay. now = fakeClock.Advance(1_ms); diff --git a/src/app/clusters/color-control-server/color-control-server.cpp b/src/app/clusters/color-control-server/color-control-server.cpp index 6c2dcb2353331c..55c8cd9e7a77de 100644 --- a/src/app/clusters/color-control-server/color-control-server.cpp +++ b/src/app/clusters/color-control-server/color-control-server.cpp @@ -491,7 +491,19 @@ bool ColorControlServer::stopMoveStepCommand(app::CommandHandler * commandObj, c EndpointId endpoint = commandPath.mEndpointId; Status status = Status::Success; - if (shouldExecuteIfOff(endpoint, optionsMask, optionsOverride)) + // StopMoveStep command has no effect on an active color loop. + // Fetch if it is supported and active. + uint8_t isColorLoopActive = 0; + if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kColorLoop)) + { + // In case of get failure, isColorLoopActive will remain at the init value 0 (not active) + if (Attributes::ColorLoopActive::Get(endpoint, &isColorLoopActive) != Status::Success) + { + ChipLogError(Zcl, "Failed to retrieve ColorLoopActive value"); + } + } + + if (shouldExecuteIfOff(endpoint, optionsMask, optionsOverride) && !isColorLoopActive) { status = stopAllColorTransitions(endpoint); @@ -1165,7 +1177,7 @@ bool ColorControlServer::computeNewHueValue(ColorControlServer::ColorHueTransiti return true; } - // Check if we are in a color loop. If not, we are in a moveHue + // Check if we are in a color loop. If not, we are in a moveHue uint8_t isColorLoop = 0; Attributes::ColorLoopActive::Get(p->endpoint, &isColorLoop); @@ -1387,7 +1399,8 @@ bool ColorControlServer::moveHueCommand(app::CommandHandler * commandObj, const VerifyOrExit(colorHueTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // check moveMode before any operation is done on the transition states + // check moveMode and rate before any operation is done on the transition states + // rate value is ignored if the MoveMode is stop if (moveMode == HueMoveMode::kUnknownEnumValue || (rate == 0 && moveMode != HueMoveMode::kStop)) { commandObj->AddStatus(commandPath, Status::InvalidCommand); @@ -1669,8 +1682,8 @@ bool ColorControlServer::stepHueCommand(app::CommandHandler * commandObj, const ColorHueTransitionState * colorHueTransitionState = getColorHueTransitionState(endpoint); VerifyOrExit(colorHueTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // Confirm validity of the step mode received - if (stepMode == HueStepMode::kUnknownEnumValue) + // Confirm validity of the step mode and step size received + if (stepMode == HueStepMode::kUnknownEnumValue || stepSize == 0) { commandObj->AddStatus(commandPath, Status::InvalidCommand); return true; @@ -1756,7 +1769,8 @@ bool ColorControlServer::moveSaturationCommand(app::CommandHandler * commandObj, Color16uTransitionState * colorSaturationTransitionState = getSaturationTransitionState(endpoint); VerifyOrExit(colorSaturationTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // check moveMode before any operation is done on the transition states + // check moveMode and rate before any operation is done on the transition states + // rate value is ignored if the MoveMode is stop if (moveMode == SaturationMoveMode::kUnknownEnumValue || (rate == 0 && moveMode != SaturationMoveMode::kStop)) { commandObj->AddStatus(commandPath, Status::InvalidCommand); @@ -1867,8 +1881,8 @@ bool ColorControlServer::stepSaturationCommand(app::CommandHandler * commandObj, Color16uTransitionState * colorSaturationTransitionState = getSaturationTransitionState(endpoint); VerifyOrExit(colorSaturationTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // Confirm validity of the step mode received - if (stepMode == SaturationStepMode::kUnknownEnumValue) + // Confirm validity of the step mode and step size received + if (stepMode == SaturationStepMode::kUnknownEnumValue || stepSize == 0) { commandObj->AddStatus(commandPath, Status::InvalidCommand); return true; @@ -1947,7 +1961,11 @@ bool ColorControlServer::colorLoopCommand(app::CommandHandler * commandObj, cons return true; } - Attributes::ColorLoopActive::Get(endpoint, &isColorLoopActive); + // In case of get failure, isColorLoopActive will remain at the init value 0 (not active) + if (Attributes::ColorLoopActive::Get(endpoint, &isColorLoopActive) != Status::Success) + { + ChipLogError(Zcl, "Failed to retrieve ColorLoopActive value"); + } deactiveColorLoop = updateFlags.Has(ColorLoopUpdateFlags::kUpdateAction) && (action == ColorLoopAction::kDeactivate); @@ -2277,6 +2295,7 @@ bool ColorControlServer::moveColorCommand(app::CommandHandler * commandObj, cons if (rateX == 0 && rateY == 0) { + // any current transition has been stopped. We are done. commandObj->AddStatus(commandPath, Status::Success); return true; } @@ -2364,6 +2383,12 @@ bool ColorControlServer::stepColorCommand(app::CommandHandler * commandObj, cons VerifyOrExit(colorXTransitionState != nullptr, status = Status::UnsupportedEndpoint); VerifyOrExit(colorYTransitionState != nullptr, status = Status::UnsupportedEndpoint); + if (stepX == 0 && stepY == 0) + { + commandObj->AddStatus(commandPath, Status::InvalidCommand); + return true; + } + if (!shouldExecuteIfOff(endpoint, optionsMask, optionsOverride)) { commandObj->AddStatus(commandPath, Status::Success); @@ -2693,7 +2718,8 @@ bool ColorControlServer::moveColorTempCommand(app::CommandHandler * commandObj, Color16uTransitionState * colorTempTransitionState = getTempTransitionState(endpoint); VerifyOrExit(colorTempTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // check moveMode before any operation is done on the transition states + // check moveMode and rate before any operation is done on the transition states + // rate value is ignored if the MoveMode is stop if (moveMode == HueMoveMode::kUnknownEnumValue || (rate == 0 && moveMode != HueMoveMode::kStop)) { commandObj->AddStatus(commandPath, Status::InvalidCommand); @@ -2815,8 +2841,8 @@ bool ColorControlServer::stepColorTempCommand(app::CommandHandler * commandObj, Color16uTransitionState * colorTempTransitionState = getTempTransitionState(endpoint); VerifyOrExit(colorTempTransitionState != nullptr, status = Status::UnsupportedEndpoint); - // Confirm validity of the step mode received - if (stepMode == HueStepMode::kUnknownEnumValue) + // Confirm validity of the step mode and step size received + if (stepMode == HueStepMode::kUnknownEnumValue || stepSize == 0) { commandObj->AddStatus(commandPath, Status::InvalidCommand); return true; diff --git a/src/app/clusters/level-control/level-control.cpp b/src/app/clusters/level-control/level-control.cpp index 6ae7d141a4edfe..3f15620181dfd0 100644 --- a/src/app/clusters/level-control/level-control.cpp +++ b/src/app/clusters/level-control/level-control.cpp @@ -950,14 +950,21 @@ static void moveHandler(app::CommandHandler * commandObj, const app::ConcreteCom app::DataModel::Nullable rate, chip::Optional> optionsMask, chip::Optional> optionsOverride) { - EndpointId endpoint = commandPath.mEndpointId; - CommandId commandId = commandPath.mCommandId; - - EmberAfLevelControlState * state = getState(endpoint); Status status; - app::DataModel::Nullable currentLevel; uint8_t difference; + EmberAfLevelControlState * state; + app::DataModel::Nullable currentLevel; + EndpointId endpoint = commandPath.mEndpointId; + CommandId commandId = commandPath.mCommandId; + // Validate the received rate and moveMode first. + if (rate == static_cast(0) || moveMode == MoveModeEnum::kUnknownEnumValue) + { + status = Status::InvalidCommand; + goto send_default_response; + } + + state = getState(endpoint); if (state == nullptr) { status = Status::Failure; @@ -970,18 +977,51 @@ static void moveHandler(app::CommandHandler * commandObj, const app::ConcreteCom goto send_default_response; } - if (!rate.IsNull() && (rate.Value() == 0)) + uint8_t eventDuration; // use this local var so state->eventDurationMs is only set once the command is validated. +#ifndef IGNORE_LEVEL_CONTROL_CLUSTER_TRANSITION + // If the Rate field is null, the device should move at the default move rate, if available, + // Otherwise, move as fast as possible + if (rate.IsNull()) { - // Move at a rate of zero is no move at all. Immediately succeed without touching anything. - ChipLogProgress(Zcl, "Immediate success due to move rate of 0 (would move at no rate)."); - status = Status::Success; - goto send_default_response; + app::DataModel::Nullable defaultMoveRate; + status = Attributes::DefaultMoveRate::Get(endpoint, defaultMoveRate); + if (status != Status::Success || defaultMoveRate.IsNull()) + { + ChipLogProgress(Zcl, "ERR: reading default move rate %x", to_underlying(status)); + eventDuration = FASTEST_TRANSITION_TIME_MS; + } + else + { + // This should never occur, but old devices could have this, now invalid, value stored. + if (defaultMoveRate.Value() == 0) + { + // The spec is not explicit about what should be done if this happens. + // For now Error out if DefaultMoveRate is equal to 0 as this is invalid + // until spec defines a behaviour. + status = Status::InvalidCommand; + goto send_default_response; + } + // Already checked that defaultMoveRate.Value() != 0. + eventDuration = static_cast(MILLISECOND_TICKS_PER_SECOND / defaultMoveRate.Value()); + } + } + else + { + // Already confirmed rate.Value() != 0. + eventDuration = static_cast(MILLISECOND_TICKS_PER_SECOND / rate.Value()); } +#else + // Transition/rate is not supported so always use fastest transition time and ignore + // both the provided transition time as well as OnOffTransitionTime. + ChipLogProgress(Zcl, "Device does not support transition, ignoring rate"); + eventDuration = FASTEST_TRANSITION_TIME_MS; +#endif // IGNORE_LEVEL_CONTROL_CLUSTER_TRANSITION // Cancel any currently active command before fiddling with the state. cancelEndpointTimerCallback(endpoint); - status = Attributes::CurrentLevel::Get(endpoint, currentLevel); + state->eventDurationMs = eventDuration; + status = Attributes::CurrentLevel::Get(endpoint, currentLevel); if (status != Status::Success) { ChipLogProgress(Zcl, "ERR: reading current level %x", to_underlying(status)); @@ -1034,41 +1074,6 @@ static void moveHandler(app::CommandHandler * commandObj, const app::ConcreteCom } } -#ifndef IGNORE_LEVEL_CONTROL_CLUSTER_TRANSITION - // If the Rate field is null, the device should move at the default move rate, if available, - // Otherwise, move as fast as possible - if (rate.IsNull()) - { - app::DataModel::Nullable defaultMoveRate; - status = Attributes::DefaultMoveRate::Get(endpoint, defaultMoveRate); - if (status != Status::Success || defaultMoveRate.IsNull()) - { - ChipLogProgress(Zcl, "ERR: reading default move rate %x", to_underlying(status)); - state->eventDurationMs = FASTEST_TRANSITION_TIME_MS; - } - else - { - // nonsensical case, means "don't move", so we're done - if (defaultMoveRate.Value() == 0) - { - status = Status::Success; - goto send_default_response; - } - // Already checked that defaultMoveRate.Value() != 0. - state->eventDurationMs = MILLISECOND_TICKS_PER_SECOND / defaultMoveRate.Value(); - } - } - else - { - state->eventDurationMs = MILLISECOND_TICKS_PER_SECOND / std::max(static_cast(1u), rate.Value()); - } -#else - // Transition/rate is not supported so always use fastest transition time and ignore - // both the provided transition time as well as OnOffTransitionTime. - ChipLogProgress(Zcl, "Device does not support transition, ignoring rate"); - state->eventDurationMs = FASTEST_TRANSITION_TIME_MS; -#endif // IGNORE_LEVEL_CONTROL_CLUSTER_TRANSITION - state->transitionTimeMs = difference * state->eventDurationMs; state->elapsedTimeMs = 0; @@ -1089,14 +1094,22 @@ static void stepHandler(app::CommandHandler * commandObj, const app::ConcreteCom uint8_t stepSize, app::DataModel::Nullable transitionTimeDs, chip::Optional> optionsMask, chip::Optional> optionsOverride) { - EndpointId endpoint = commandPath.mEndpointId; - CommandId commandId = commandPath.mCommandId; - - EmberAfLevelControlState * state = getState(endpoint); Status status; + EmberAfLevelControlState * state; app::DataModel::Nullable currentLevel; + + EndpointId endpoint = commandPath.mEndpointId; + CommandId commandId = commandPath.mCommandId; uint8_t actualStepSize = stepSize; + // Validate the received stepSize and stepMode first. + if (stepSize == 0 || stepMode == StepModeEnum::kUnknownEnumValue) + { + status = Status::InvalidCommand; + goto send_default_response; + } + + state = getState(endpoint); if (state == nullptr) { status = Status::Failure; @@ -1158,6 +1171,7 @@ static void stepHandler(app::CommandHandler * commandObj, const app::ConcreteCom } break; default: + // Should never happen as it is verified at function entry. status = Status::InvalidCommand; goto send_default_response; } diff --git a/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.cpp b/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.cpp new file mode 100644 index 00000000000000..6daaffce9ce91c --- /dev/null +++ b/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.cpp @@ -0,0 +1,144 @@ +/** + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#include "DefaultThreadNetworkDirectoryStorage.h" +#include +#include +#include + +namespace chip { +namespace app { + +void DefaultThreadNetworkDirectoryStorage::InitializedIfNeeded() +{ + VerifyOrReturn(!mInitialized); + mInitialized = true; + + CHIP_ERROR err; + StorageKeyName key = DefaultStorageKeyAllocator::ThreadNetworkDirectoryIndex(); + uint16_t size = sizeof(mExtendedPanIds); + SuccessOrExit(err = mStorage.SyncGetKeyValue(key.KeyName(), mExtendedPanIds, size)); + VerifyOrExit(size % ExtendedPanId::size() == 0, err = CHIP_ERROR_INTERNAL); + mCount = static_cast(size / ExtendedPanId::size()); + return; +exit: + if (err != CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND) + { + ChipLogError(Zcl, "Failed to load Thread Network Directory storage: %" CHIP_ERROR_FORMAT, err.Format()); + } +} + +CHIP_ERROR DefaultThreadNetworkDirectoryStorage::StoreIndex() +{ + VerifyOrDie(mInitialized); + StorageKeyName key = DefaultStorageKeyAllocator::ThreadNetworkDirectoryIndex(); + return mStorage.SyncSetKeyValue(key.KeyName(), mExtendedPanIds, mCount * ExtendedPanId::size()); +} + +bool DefaultThreadNetworkDirectoryStorage::FindNetwork(const ExtendedPanId & exPanId, index_t & outIndex) +{ + for (index_t idx = 0; idx < mCount; idx++) + { + if (mExtendedPanIds[idx] == exPanId) + { + outIndex = idx; + return true; + } + } + return false; +} + +ThreadNetworkDirectoryStorage::ExtendedPanIdIterator * DefaultThreadNetworkDirectoryStorage::IterateNetworkIds() +{ + InitializedIfNeeded(); + return mIterators.CreateObject(*this); +} + +bool DefaultThreadNetworkDirectoryStorage::ContainsNetwork(const ExtendedPanId & exPanId) +{ + InitializedIfNeeded(); + index_t unused; + return FindNetwork(exPanId, unused); +} + +CHIP_ERROR DefaultThreadNetworkDirectoryStorage::GetNetworkDataset(const ExtendedPanId & exPanId, MutableByteSpan & dataset) +{ + VerifyOrReturnError(ContainsNetwork(exPanId), CHIP_ERROR_NOT_FOUND); + uint16_t size = static_cast(CanCastTo(dataset.size()) ? dataset.size() : UINT16_MAX); + StorageKeyName key = DefaultStorageKeyAllocator::ThreadNetworkDirectoryDataset(exPanId.AsNumber()); + ReturnErrorOnFailure(mStorage.SyncGetKeyValue(key.KeyName(), dataset.data(), size)); + dataset.reduce_size(size); + return CHIP_NO_ERROR; +} + +CHIP_ERROR DefaultThreadNetworkDirectoryStorage::AddOrUpdateNetwork(const ExtendedPanId & exPanId, ByteSpan dataset) +{ + VerifyOrReturnError(0 < dataset.size() && dataset.size() <= kMaxThreadDatasetLen, CHIP_ERROR_INVALID_ARGUMENT); + bool update = ContainsNetwork(exPanId); + VerifyOrReturnError(update || mCount < kCapacity, CHIP_ERROR_NO_MEMORY); + + // Store the dataset first + StorageKeyName key = DefaultStorageKeyAllocator::ThreadNetworkDirectoryDataset(exPanId.AsNumber()); + ReturnErrorOnFailure(mStorage.SyncSetKeyValue(key.KeyName(), dataset.data(), static_cast(dataset.size()))); + + // Update the index if we're adding a new network, rolling back on failure. + if (!update) + { + mExtendedPanIds[mCount++] = exPanId; + CHIP_ERROR err = StoreIndex(); + if (err != CHIP_NO_ERROR) + { + mCount--; + mStorage.SyncDeleteKeyValue(key.KeyName()); + return err; + } + } + + return CHIP_NO_ERROR; +} + +CHIP_ERROR DefaultThreadNetworkDirectoryStorage::RemoveNetwork(const ExtendedPanId & exPanId) +{ + InitializedIfNeeded(); + index_t index; + VerifyOrReturnError(FindNetwork(exPanId, index), CHIP_ERROR_NOT_FOUND); + + // Move subsequent elements down to fill the deleted slot + static_assert(std::is_trivially_copyable_v); + size_t subsequentCount = mCount - (index + 1u); + auto * element = &mExtendedPanIds[index]; + memmove(element, element + 1, subsequentCount * sizeof(*element)); + mCount--; + + CHIP_ERROR err = StoreIndex(); + if (err != CHIP_NO_ERROR) + { + // Roll back the change to our in-memory state + memmove(element + 1, element, subsequentCount * sizeof(*element)); + mExtendedPanIds[index] = exPanId; + mCount++; + return err; + } + + // Delete the dataset itself. Ignore errors since we successfully updated the index. + StorageKeyName key = DefaultStorageKeyAllocator::ThreadNetworkDirectoryDataset(exPanId.AsNumber()); + mStorage.SyncDeleteKeyValue(key.KeyName()); + return CHIP_NO_ERROR; +} + +} // namespace app +} // namespace chip diff --git a/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.h b/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.h new file mode 100644 index 00000000000000..0cda5e3e188c7f --- /dev/null +++ b/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.h @@ -0,0 +1,80 @@ +/** + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#pragma once + +#include +#include +#include + +#include + +namespace chip { +namespace app { + +/** + * Stores Thread network information via a PersistentStorageDelegate. + */ +class DefaultThreadNetworkDirectoryStorage : public ThreadNetworkDirectoryStorage +{ +public: + DefaultThreadNetworkDirectoryStorage(PersistentStorageDelegate & storage) : mStorage(storage) {} + + uint8_t Capacity() override { return kCapacity; } + ExtendedPanIdIterator * IterateNetworkIds() override; + bool ContainsNetwork(const ExtendedPanId & exPanId) override; + CHIP_ERROR GetNetworkDataset(const ExtendedPanId & exPanId, MutableByteSpan & dataset) override; + CHIP_ERROR AddOrUpdateNetwork(const ExtendedPanId & exPanId, ByteSpan dataset) override; + CHIP_ERROR RemoveNetwork(const ExtendedPanId & exPanId) override; + +private: + using index_t = uint8_t; + static constexpr index_t kCapacity = CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CAPACITY; + static constexpr size_t kIteratorsMax = CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CONCURRENT_ITERATORS; + + void InitializedIfNeeded(); + CHIP_ERROR StoreIndex(); + bool FindNetwork(const ExtendedPanId & exPanId, index_t & outIndex); + + struct IteratorImpl final : public ExtendedPanIdIterator + { + IteratorImpl(DefaultThreadNetworkDirectoryStorage & storage) : mContainer(storage) {} + + size_t Count() override { return mContainer.mCount; } + + bool Next(ExtendedPanId & item) override + { + VerifyOrReturnValue(mIndex < Count(), false); + item = mContainer.mExtendedPanIds[mIndex++]; + return true; + } + + void Release() override { mContainer.mIterators.ReleaseObject(this); } + + DefaultThreadNetworkDirectoryStorage & mContainer; + index_t mIndex = 0; + }; + + PersistentStorageDelegate & mStorage; + ObjectPool mIterators; + ExtendedPanId mExtendedPanIds[kCapacity]; + index_t mCount = 0; + bool mInitialized = false; +}; + +} // namespace app +} // namespace chip diff --git a/src/app/clusters/thread-network-directory-server/ThreadNetworkDirectoryStorage.h b/src/app/clusters/thread-network-directory-server/ThreadNetworkDirectoryStorage.h new file mode 100644 index 00000000000000..b31d34e9778bd0 --- /dev/null +++ b/src/app/clusters/thread-network-directory-server/ThreadNetworkDirectoryStorage.h @@ -0,0 +1,127 @@ +/** + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#pragma once + +#include +#include +#include + +#include +#include +#include + +namespace chip { +namespace app { + +class ThreadNetworkDirectoryStorage +{ +public: + static constexpr size_t kMaxThreadDatasetLen = 254; + + /** + * A Thread Extended PAN ID is an opaque 8 byte value, + * and can optionally be interpreted as a big-endian number. + * + * ExtendedPanId structs or arrays thereof can be directly + * read from or written to storage and are byte-order independent. + */ + struct ExtendedPanId final + { + uint8_t bytes[8]; + static constexpr size_t size() { return sizeof(bytes); } + + constexpr ExtendedPanId() : bytes{} {} + explicit ExtendedPanId(ByteSpan source) + { + VerifyOrDie(source.size() == size()); + memcpy(bytes, source.data(), size()); + } + + explicit ExtendedPanId(uint64_t number) { Encoding::BigEndian::Put64(bytes, number); } + + constexpr ByteSpan AsSpan() const { return ByteSpan(bytes); } + uint64_t AsNumber() const { return Encoding::BigEndian::Get64(bytes); } + + bool operator==(const ExtendedPanId & other) const { return memcmp(bytes, other.bytes, size()) == 0; } + bool operator!=(const ExtendedPanId & other) const { return !(*this == other); } + }; + + static_assert(std::is_trivially_copyable_v && sizeof(ExtendedPanId) == sizeof(ExtendedPanId::bytes)); + + using ExtendedPanIdIterator = CommonIterator; + + virtual ~ThreadNetworkDirectoryStorage() = default; + + /** + * Returns the maximum number of networks that can be stored. + */ + virtual uint8_t Capacity() = 0; + + /** + * Creates an iterator over the list of stored networks. + * Release() must be called on the iterator after the iteration is finished. + * Adding or removing networks during the iteration is not supported. + * + * The iteration order of stored networks should remain stable as long as + * as no networks are added or removed. + * + * @retval An instance of ExtendedPanIdIterator on success + * @retval nullptr if no iterator instances are available. + */ + virtual ExtendedPanIdIterator * IterateNetworkIds() = 0; + + /** + * Retrieves the dataset associated with the specified Extended PAN ID. + * + * @retval CHIP_ERROR_NOT_FOUND if there is no matching network stored. + * @retval CHIP_ERROR_BUFFER_TOO_SMALL if the provided buffer buffer is too small. + * @retval CHIP_ERROR_* for other errors. + */ + virtual CHIP_ERROR GetNetworkDataset(const ExtendedPanId & exPanId, MutableByteSpan & dataset) = 0; + + /** + * Adds (or updates, if a matching network already exists) the network with the specified + * Extended PAN ID and dataset. Note that the dataset must be treated as an opaque blob; + * no validation of any kind is expected to be performed on the dataset contents. + * + * @retval CHIP_ERROR_INVALID_ARGUMENT if the dataset is empty or too long. + * @retval CHIP_ERROR_NO_MEMORY if adding the network would exceed the storage capacity. + * @retval CHIP_ERROR_* for other errors. + */ + virtual CHIP_ERROR AddOrUpdateNetwork(const ExtendedPanId & exPanId, ByteSpan dataset) = 0; + + /** + * Removes the network with the specified Extended PAN ID. + * + * @retval CHIP_ERROR_NOT_FOUND if there is no matching network stored. + * @retval CHIP_ERROR_* for other errors. + */ + virtual CHIP_ERROR RemoveNetwork(const ExtendedPanId & exPanId) = 0; + + /** + * Returns true if a network with the specified Extended PAN ID is stored, or false otherwise. + */ + virtual bool ContainsNetwork(const ExtendedPanId & exPanId) + { + MutableByteSpan empty; + return GetNetworkDataset(exPanId, empty) != CHIP_ERROR_NOT_FOUND; + } +}; + +} // namespace app +} // namespace chip diff --git a/src/app/clusters/thread-network-directory-server/thread-network-directory-server.cpp b/src/app/clusters/thread-network-directory-server/thread-network-directory-server.cpp new file mode 100644 index 00000000000000..888972b3075c33 --- /dev/null +++ b/src/app/clusters/thread-network-directory-server/thread-network-directory-server.cpp @@ -0,0 +1,288 @@ +/** + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#include "thread-network-directory-server.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace chip; +using namespace chip::app; +using namespace chip::app::Clusters; +using namespace chip::app::Clusters::ThreadNetworkDirectory::Attributes; +using namespace chip::app::Clusters::ThreadNetworkDirectory::Commands; +using namespace chip::app::Clusters::ThreadNetworkDirectory::Structs; +using namespace chip::Thread; +using IMStatus = chip::Protocols::InteractionModel::Status; + +namespace chip { +namespace app { +namespace Clusters { + +ThreadNetworkDirectoryServer::ThreadNetworkDirectoryServer(EndpointId endpoint, ThreadNetworkDirectoryStorage & storage) : + AttributeAccessInterface(MakeOptional(endpoint), ThreadNetworkDirectory::Id), + CommandHandlerInterface(MakeOptional(endpoint), ThreadNetworkDirectory::Id), mStorage(storage) +{} + +ThreadNetworkDirectoryServer::~ThreadNetworkDirectoryServer() +{ + unregisterAttributeAccessOverride(this); + InteractionModelEngine::GetInstance()->UnregisterCommandHandler(this); +} + +CHIP_ERROR ThreadNetworkDirectoryServer::Init() +{ + VerifyOrReturnError(registerAttributeAccessOverride(this), CHIP_ERROR_INTERNAL); + ReturnErrorOnFailure(InteractionModelEngine::GetInstance()->RegisterCommandHandler(this)); + return CHIP_NO_ERROR; +} + +CHIP_ERROR ThreadNetworkDirectoryServer::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) +{ + switch (aPath.mAttributeId) + { + case PreferredExtendedPanID::Id: + return ReadPreferredExtendedPanId(aPath, aEncoder); + case ThreadNetworks::Id: + return ReadThreadNetworks(aPath, aEncoder); + case ThreadNetworkTableSize::Id: + return aEncoder.Encode(mStorage.Capacity()); + } + return CHIP_NO_ERROR; +} + +CHIP_ERROR ThreadNetworkDirectoryServer::Write(const ConcreteDataAttributePath & aPath, AttributeValueDecoder & aDecoder) +{ + switch (aPath.mAttributeId) + { + case PreferredExtendedPanID::Id: + return WritePreferredExtendedPanId(aPath, aDecoder); + } + return CHIP_NO_ERROR; +} + +CHIP_ERROR ThreadNetworkDirectoryServer::ReadExtendedPanId(const ConcreteDataAttributePath & aPath, + std::optional & outExPanId) +{ + MutableByteSpan value(outExPanId.emplace().bytes); + CHIP_ERROR err = GetSafeAttributePersistenceProvider()->SafeReadValue(aPath, value); + if (err == CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND) + { + outExPanId.reset(); // default to empty + return CHIP_NO_ERROR; + } + ReturnErrorOnFailure(err); + + if (value.size() == 0) + { + outExPanId.reset(); + return CHIP_NO_ERROR; + } + + VerifyOrReturnError(value.size() == ExtendedPanId::size(), CHIP_ERROR_INTERNAL); + return CHIP_NO_ERROR; +} + +CHIP_ERROR ThreadNetworkDirectoryServer::ReadPreferredExtendedPanId(const ConcreteDataAttributePath & aPath, + AttributeValueEncoder & aEncoder) +{ + std::optional value; + ReturnErrorOnFailure(ReadExtendedPanId(aPath, value)); + return (value.has_value()) ? aEncoder.Encode(value.value().AsSpan()) : aEncoder.EncodeNull(); +} + +CHIP_ERROR ThreadNetworkDirectoryServer::WritePreferredExtendedPanId(const ConcreteDataAttributePath & aPath, + AttributeValueDecoder & aDecoder) +{ + DataModel::Nullable nullableValue; + ReturnErrorOnFailure(aDecoder.Decode(nullableValue)); + + // "A zero-length value SHALL be allowed for nullable values ... and SHALL have the same semantics as the null value." + ByteSpan value = nullableValue.ValueOr(ByteSpan()); + // Ensure the provided value is valid (correct size) and refers to PAN from the list. + VerifyOrReturnError(value.empty() || (value.size() == ExtendedPanId::size() && mStorage.ContainsNetwork(ExtendedPanId(value))), + StatusIB(IMStatus::ConstraintError).ToChipError()); + + return GetSafeAttributePersistenceProvider()->SafeWriteValue(aPath, value); +} + +CHIP_ERROR ThreadNetworkDirectoryServer::ReadThreadNetworks(const ConcreteDataAttributePath &, AttributeValueEncoder & aEncoder) +{ + return aEncoder.EncodeList([this](const auto & encoder) -> CHIP_ERROR { + CHIP_ERROR err = CHIP_NO_ERROR; + ExtendedPanId exPanId; + auto * iterator = mStorage.IterateNetworkIds(); + while (iterator->Next(exPanId)) + { + uint8_t datasetBuffer[kSizeOperationalDataset]; + MutableByteSpan datasetSpan(datasetBuffer); + SuccessOrExit(err = mStorage.GetNetworkDataset(exPanId, datasetSpan)); + + OperationalDataset dataset; + char networkName[kSizeNetworkName + 1]; + ThreadNetworkStruct::Type network; + + dataset.Init(datasetSpan); + SuccessOrExit(err = dataset.GetExtendedPanIdAsByteSpan(network.extendedPanID)); + SuccessOrExit(err = dataset.GetNetworkName(networkName)); + network.networkName = CharSpan::fromCharString(networkName); + SuccessOrExit(err = dataset.GetChannel(network.channel)); + SuccessOrExit(err = dataset.GetActiveTimestamp(network.activeTimestamp)); + + SuccessOrExit(err = encoder.Encode(network)); + } + exit: + iterator->Release(); + return err; + }); +} + +void ThreadNetworkDirectoryServer::InvokeCommand(HandlerContext & ctx) +{ + switch (ctx.mRequestPath.mCommandId) + { + case AddNetwork::Id: + HandleCommand( + ctx, [this](HandlerContext & aCtx, const auto & req) { HandleAddNetworkRequest(aCtx, req); }); + return; + case RemoveNetwork::Id: + HandleCommand( + ctx, [this](HandlerContext & aCtx, const auto & req) { HandleRemoveNetworkRequest(aCtx, req); }); + return; + case GetOperationalDataset::Id: + HandleCommand( + ctx, [this](HandlerContext & aCtx, const auto & req) { HandleOperationalDatasetRequest(aCtx, req); }); + return; + } +} + +void ThreadNetworkDirectoryServer::HandleAddNetworkRequest(HandlerContext & ctx, + const ThreadNetworkDirectory::Commands::AddNetwork::DecodableType & req) +{ + OperationalDataset dataset; + ByteSpan extendedPanIdSpan; + union + { + uint64_t activeTimestamp; + uint16_t channel; + uint8_t masterKey[kSizeMasterKey]; + uint8_t meshLocalPrefix[kSizeMeshLocalPrefix]; + char networkName[kSizeNetworkName + 1]; + uint16_t panId; + uint8_t pksc[kSizePSKc]; + uint32_t securityPolicy; + } unused; + ByteSpan unusedSpan; + + // "It SHALL contain at least the following sub-TLVs: Active Timestamp, Channel, Channel Mask, + // Extended PAN ID, Network Key, Network Mesh-Local Prefix, Network Name, PAN ID, PKSc, and Security Policy." + CHIP_ERROR err; + auto status = IMStatus::ConstraintError; + const char * context = nullptr; + // TODO: An immutable OperationalDatasetView on top of a ByteSpan (without copying) would be useful here. + SuccessOrExitAction(err = dataset.Init(req.operationalDataset), context = "OperationalDataset"); + SuccessOrExitAction(err = dataset.GetExtendedPanIdAsByteSpan(extendedPanIdSpan), context = "ExtendedPanID"); + SuccessOrExitAction(err = dataset.GetActiveTimestamp(unused.activeTimestamp), context = "ActiveTimestamp"); + SuccessOrExitAction(err = dataset.GetChannel(unused.channel), context = "Channel"); + SuccessOrExitAction(err = dataset.GetChannelMask(unusedSpan), context = "ChannelMask"); + SuccessOrExitAction(err = dataset.GetMasterKey(unused.masterKey), context = "NetworkKey"); + SuccessOrExitAction(err = dataset.GetMeshLocalPrefix(unused.meshLocalPrefix), context = "MeshLocalPrefix"); + SuccessOrExitAction(err = dataset.GetNetworkName(unused.networkName), context = "NetworkName"); + SuccessOrExitAction(err = dataset.GetPanId(unused.panId), context = "PanID"); + SuccessOrExitAction(err = dataset.GetPSKc(unused.pksc), context = "PKSc"); + SuccessOrExitAction(err = dataset.GetSecurityPolicy(unused.securityPolicy), context = "SecurityContext"); + + status = IMStatus::Failure; + SuccessOrExit(err = mStorage.AddOrUpdateNetwork(ExtendedPanId(extendedPanIdSpan), req.operationalDataset)); + + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::Success); + MatterReportingAttributeChangeCallback(GetEndpointId(), ThreadNetworkDirectory::Id, ThreadNetworks::Id); + return; + +exit: + ChipLogError(Zcl, "AddNetwork: %" CHIP_ERROR_FORMAT, err.Format()); + ctx.mCommandHandler.AddStatus( + ctx.mRequestPath, (status == IMStatus::Failure && err == CHIP_ERROR_NO_MEMORY) ? IMStatus::ResourceExhausted : status, + context); +} + +void ThreadNetworkDirectoryServer::HandleRemoveNetworkRequest( + HandlerContext & ctx, const ThreadNetworkDirectory::Commands::RemoveNetwork::DecodableType & req) +{ + CHIP_ERROR err; + + if (req.extendedPanID.size() != ExtendedPanId::size()) + { + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::ConstraintError); + return; + } + ExtendedPanId exPanId(req.extendedPanID); + + std::optional preferredExPanId; + ConcreteReadAttributePath preferredExPanIdPath(GetEndpointId(), ThreadNetworkDirectory::Id, + ThreadNetworkDirectory::Attributes::PreferredExtendedPanID::Id); + SuccessOrExit(err = ReadExtendedPanId(preferredExPanIdPath, preferredExPanId)); + if (preferredExPanId.has_value() && preferredExPanId.value() == exPanId) + { + ChipLogError(Zcl, "RemoveNetwork: Rejecting removal of preferred PAN"); + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::ConstraintError); + return; + } + + SuccessOrExit(err = mStorage.RemoveNetwork(exPanId)); + + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::Success); + MatterReportingAttributeChangeCallback(GetEndpointId(), ThreadNetworkDirectory::Id, ThreadNetworks::Id); + return; + +exit: + ChipLogError(Zcl, "RemoveNetwork: %" CHIP_ERROR_FORMAT, err.Format()); + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, (err == CHIP_ERROR_NOT_FOUND) ? IMStatus::NotFound : IMStatus::Failure); +} + +void ThreadNetworkDirectoryServer::HandleOperationalDatasetRequest( + HandlerContext & ctx, const ThreadNetworkDirectory::Commands::GetOperationalDataset::DecodableType & req) +{ + CHIP_ERROR err; + + if (req.extendedPanID.size() != ExtendedPanId::size()) + { + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::ConstraintError); + return; + } + + uint8_t datasetBuffer[kSizeOperationalDataset]; + MutableByteSpan datasetSpan(datasetBuffer); + SuccessOrExit(err = mStorage.GetNetworkDataset(ExtendedPanId(req.extendedPanID), datasetSpan)); + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, IMStatus::Success); + return; +exit: + ChipLogError(Zcl, "GetOperationalDataset: %" CHIP_ERROR_FORMAT, err.Format()); + ctx.mCommandHandler.AddStatus(ctx.mRequestPath, (err == CHIP_ERROR_NOT_FOUND) ? IMStatus::NotFound : IMStatus::Failure); +} + +} // namespace Clusters +} // namespace app +} // namespace chip + +void MatterThreadNetworkDirectoryPluginServerInitCallback() {} diff --git a/src/app/clusters/thread-network-directory-server/thread-network-directory-server.h b/src/app/clusters/thread-network-directory-server/thread-network-directory-server.h new file mode 100644 index 00000000000000..2f671bdd6b4e09 --- /dev/null +++ b/src/app/clusters/thread-network-directory-server/thread-network-directory-server.h @@ -0,0 +1,86 @@ +/** + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace chip { +namespace app { +namespace Clusters { + +class ThreadNetworkDirectoryServer : private AttributeAccessInterface, private CommandHandlerInterface +{ +public: + ThreadNetworkDirectoryServer(EndpointId endpoint, ThreadNetworkDirectoryStorage & storage); + ~ThreadNetworkDirectoryServer(); + + CHIP_ERROR Init(); + + ThreadNetworkDirectoryServer(ThreadNetworkDirectoryServer const &) = delete; + ThreadNetworkDirectoryServer & operator=(ThreadNetworkDirectoryServer const &) = delete; + +private: + using ExtendedPanId = ThreadNetworkDirectoryStorage::ExtendedPanId; + + EndpointId GetEndpointId() { return AttributeAccessInterface::GetEndpointId().Value(); } + + CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; + CHIP_ERROR Write(const ConcreteDataAttributePath & aPath, AttributeValueDecoder & aDecoder) override; + void InvokeCommand(HandlerContext & handlerContext) override; + + CHIP_ERROR ReadExtendedPanId(const ConcreteDataAttributePath & aPath, std::optional & outExPanId); + CHIP_ERROR ReadPreferredExtendedPanId(const ConcreteDataAttributePath & aPath, AttributeValueEncoder & aEncoder); + CHIP_ERROR WritePreferredExtendedPanId(const ConcreteDataAttributePath & aPath, AttributeValueDecoder & aDecoder); + CHIP_ERROR ReadThreadNetworks(const ConcreteDataAttributePath & aPath, AttributeValueEncoder & aEncoder); + + void HandleAddNetworkRequest(HandlerContext & ctx, const ThreadNetworkDirectory::Commands::AddNetwork::DecodableType & req); + void HandleRemoveNetworkRequest(HandlerContext & ctx, + const ThreadNetworkDirectory::Commands::RemoveNetwork::DecodableType & req); + void HandleOperationalDatasetRequest(HandlerContext & ctx, + const ThreadNetworkDirectory::Commands::GetOperationalDataset::DecodableType & req); + + ThreadNetworkDirectoryStorage & mStorage; +}; + +/** + * A ThreadNetworkDirectoryServer using DefaultThreadNetworkDirectoryStorage. + */ +class DefaultThreadNetworkDirectoryServer final : public ThreadNetworkDirectoryServer +{ +public: + DefaultThreadNetworkDirectoryServer(EndpointId endpoint, + PersistentStorageDelegate & storage = Server::GetInstance().GetPersistentStorage()) : + ThreadNetworkDirectoryServer(endpoint, mStorage), + mStorage(storage) + {} + +private: + DefaultThreadNetworkDirectoryStorage mStorage; +}; + +} // namespace Clusters +} // namespace app +} // namespace chip diff --git a/src/app/clusters/wifi-network-management-server/wifi-network-management-server.cpp b/src/app/clusters/wifi-network-management-server/wifi-network-management-server.cpp index 1a739e354bd3df..d2815b582f5ce1 100644 --- a/src/app/clusters/wifi-network-management-server/wifi-network-management-server.cpp +++ b/src/app/clusters/wifi-network-management-server/wifi-network-management-server.cpp @@ -20,8 +20,6 @@ #include #include #include -#include -#include #include #include @@ -55,18 +53,11 @@ bool IsValidWpaPersonalCredential(ByteSpan credential) return false; } -Global gWiFiNetworkManagementServerInstance; - } // namespace -WiFiNetworkManagementServer & WiFiNetworkManagementServer::Instance() -{ - return gWiFiNetworkManagementServerInstance.get(); -} - -WiFiNetworkManagementServer::WiFiNetworkManagementServer() : - AttributeAccessInterface(NullOptional, WiFiNetworkManagement::Id), - CommandHandlerInterface(NullOptional, WiFiNetworkManagement::Id) +WiFiNetworkManagementServer::WiFiNetworkManagementServer(EndpointId endpoint) : + AttributeAccessInterface(MakeOptional(endpoint), WiFiNetworkManagement::Id), + CommandHandlerInterface(MakeOptional(endpoint), WiFiNetworkManagement::Id) {} WiFiNetworkManagementServer::~WiFiNetworkManagementServer() @@ -75,12 +66,8 @@ WiFiNetworkManagementServer::~WiFiNetworkManagementServer() InteractionModelEngine::GetInstance()->UnregisterCommandHandler(this); } -CHIP_ERROR WiFiNetworkManagementServer::Init(EndpointId endpoint) +CHIP_ERROR WiFiNetworkManagementServer::Init() { - VerifyOrReturnError(endpoint != kInvalidEndpointId, CHIP_ERROR_INVALID_ARGUMENT); - VerifyOrReturnError(mEndpointId == kInvalidEndpointId, CHIP_ERROR_INCORRECT_STATE); - - mEndpointId = endpoint; VerifyOrReturnError(registerAttributeAccessOverride(this), CHIP_ERROR_INTERNAL); ReturnErrorOnFailure(InteractionModelEngine::GetInstance()->RegisterCommandHandler(this)); return CHIP_NO_ERROR; @@ -92,7 +79,7 @@ CHIP_ERROR WiFiNetworkManagementServer::ClearNetworkCredentials() mSsidLen = 0; mPassphrase.SetLength(0); - MatterReportingAttributeChangeCallback(mEndpointId, WiFiNetworkManagement::Id, Ssid::Id); + MatterReportingAttributeChangeCallback(GetEndpointId(), WiFiNetworkManagement::Id, Ssid::Id); return CHIP_NO_ERROR; } @@ -114,7 +101,7 @@ CHIP_ERROR WiFiNetworkManagementServer::SetNetworkCredentials(ByteSpan ssid, Byt // Note: The spec currently defines no way to signal a passphrase change if (ssidChanged) { - MatterReportingAttributeChangeCallback(mEndpointId, WiFiNetworkManagement::Id, Ssid::Id); + MatterReportingAttributeChangeCallback(GetEndpointId(), WiFiNetworkManagement::Id, Ssid::Id); } return CHIP_NO_ERROR; } @@ -160,17 +147,4 @@ void WiFiNetworkManagementServer::HandleNetworkPassphraseRequest(HandlerContext } // namespace app } // namespace chip -#if defined(MATTER_DM_WIFI_NETWORK_MANAGEMENT_CLUSTER_SERVER_ENDPOINT_COUNT) && \ - MATTER_DM_WIFI_NETWORK_MANAGEMENT_CLUSTER_SERVER_ENDPOINT_COUNT > 1 -#error Only a single Wi-Fi Network Management Cluster instance is supported. -#endif - void MatterWiFiNetworkManagementPluginServerInitCallback() {} - -void emberAfWiFiNetworkManagementClusterServerInitCallback(EndpointId endpoint) -{ - // We could delay constructing the instance until this point; however it's not - // clear if this is inconvenient in terms of forcing the application to initialize - // the network credentials later than it otherwise would. - LogErrorOnFailure(chip::app::Clusters::WiFiNetworkManagementServer::Instance().Init(endpoint)); -} diff --git a/src/app/clusters/wifi-network-management-server/wifi-network-management-server.h b/src/app/clusters/wifi-network-management-server/wifi-network-management-server.h index aa3cba89636a77..ce438edf79ff73 100644 --- a/src/app/clusters/wifi-network-management-server/wifi-network-management-server.h +++ b/src/app/clusters/wifi-network-management-server/wifi-network-management-server.h @@ -20,9 +20,7 @@ #include #include #include -#include #include -#include #include void emberAfWiFiNetworkManagementClusterServerInitCallback(chip::EndpointId); @@ -34,30 +32,26 @@ namespace Clusters { class WiFiNetworkManagementServer : private AttributeAccessInterface, private CommandHandlerInterface { public: - static WiFiNetworkManagementServer & Instance(); + WiFiNetworkManagementServer(EndpointId endpoint); + ~WiFiNetworkManagementServer(); + + CHIP_ERROR Init(); CHIP_ERROR ClearNetworkCredentials(); CHIP_ERROR SetNetworkCredentials(ByteSpan ssid, ByteSpan passphrase); -private: - friend Global; - friend void ::emberAfWiFiNetworkManagementClusterServerInitCallback(chip::EndpointId); - - WiFiNetworkManagementServer(); - ~WiFiNetworkManagementServer(); - CHIP_ERROR Init(EndpointId endpoint); - WiFiNetworkManagementServer(WiFiNetworkManagementServer const &) = delete; WiFiNetworkManagementServer & operator=(WiFiNetworkManagementServer const &) = delete; +private: + EndpointId GetEndpointId() { return AttributeAccessInterface::GetEndpointId().Value(); } + CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; void InvokeCommand(HandlerContext & handlerContext) override; void HandleNetworkPassphraseRequest(HandlerContext & ctx, const WiFiNetworkManagement::Commands::NetworkPassphraseRequest::DecodableType & req); - EndpointId mEndpointId = kInvalidEndpointId; - uint8_t mSsid[32]; uint8_t mSsidLen = 0; static_assert(std::numeric_limits::max() >= sizeof(mSsid)); diff --git a/src/app/codegen-data-model/BUILD.gn b/src/app/codegen-data-model/BUILD.gn index cc856539d001e7..955f76c091c0bd 100644 --- a/src/app/codegen-data-model/BUILD.gn +++ b/src/app/codegen-data-model/BUILD.gn @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import("//build_overrides/chip.gni") + # This source set is TIGHLY coupled with code-generated data models # as generally implemented by `src/app/util` # @@ -25,7 +26,20 @@ import("//build_overrides/chip.gni") # CodegenDataModel_Write.cpp # EmberMetadata.cpp # EmberMetadata.h +# Instance.cpp # # The above list of files exists to satisfy the "dependency linter" # since those files should technically be "visible to gn" even though we # are supposed to go through model.gni constants + +source_set("instance-header") { + # TODO: this is a workaround until we have actual injection in our code. The issue is that + # DataModel is not currently injected and InteractionModelEngine needs a default + # + # The default should be code-generated data models, however that depends on code + # generation and is application specific. + # + # This only declares that the instance method is provided by something (that something + # generally being unit tests or data_model.gni/data_model.cmake files) + sources = [ "Instance.h" ] +} diff --git a/src/app/codegen-data-model/CodegenDataModel_Read.cpp b/src/app/codegen-data-model/CodegenDataModel_Read.cpp index 127e0e7ad3866a..3e1f246cb3a2f9 100644 --- a/src/app/codegen-data-model/CodegenDataModel_Read.cpp +++ b/src/app/codegen-data-model/CodegenDataModel_Read.cpp @@ -121,8 +121,8 @@ static_assert(sizeof(LongPascalString::LengthType) == 2); /// Given a ByteSpan containing data from ember, interpret it /// as a span of type OUT (i.e. ByteSpan or CharSpan) given a ENCODING /// where ENCODING is Short or Long pascal strings. -template -std::optional ExtractEmberString(ByteSpan data) +template +std::optional ExtractEmberString(ByteSpan data) { constexpr size_t kLengthTypeSize = sizeof(typename ENCODING::LengthType); VerifyOrDie(kLengthTypeSize <= data.size()); @@ -134,7 +134,7 @@ std::optional ExtractEmberString(ByteSpan data) } VerifyOrDie(len + sizeof(len) <= data.size()); - return std::make_optional(reinterpret_cast(data.data() + kLengthTypeSize), len); + return std::make_optional(reinterpret_cast(data.data() + kLengthTypeSize), len); } /// Encode a value inside `encoder` diff --git a/src/app/codegen-data-model/Instance.cpp b/src/app/codegen-data-model/Instance.cpp new file mode 100644 index 00000000000000..98eeeb604503b9 --- /dev/null +++ b/src/app/codegen-data-model/Instance.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ +#include +#include + +namespace chip { +namespace app { + +InteractionModel::DataModel * CodegenDataModelInstance() +{ + static CodegenDataModel gCodegenModel; + return &gCodegenModel; +} + +} // namespace app +} // namespace chip diff --git a/src/app/codegen-data-model/Instance.h b/src/app/codegen-data-model/Instance.h new file mode 100644 index 00000000000000..4c7530981920c1 --- /dev/null +++ b/src/app/codegen-data-model/Instance.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ +#pragma once + +#include + +namespace chip { +namespace app { + +InteractionModel::DataModel * CodegenDataModelInstance(); + +} // namespace app +} // namespace chip diff --git a/src/app/codegen-data-model/model.cmake b/src/app/codegen-data-model/model.cmake new file mode 100644 index 00000000000000..73b54247a81033 --- /dev/null +++ b/src/app/codegen-data-model/model.cmake @@ -0,0 +1,26 @@ +# Copyright (c) 2024 Project CHIP Authors +# +# 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. +set(BASE_DIR ${CMAKE_CURRENT_LIST_DIR}) + +# If you change this list, please ALSO CHANGE model.gni +SET(CODEGEN_DATA_MODEL_SOURCES + "${BASE_DIR}/CodegenDataModel.cpp" + "${BASE_DIR}/CodegenDataModel.h" + "${BASE_DIR}/CodegenDataModel_Read.cpp" + "${BASE_DIR}/CodegenDataModel_Write.cpp" + "${BASE_DIR}/EmberMetadata.cpp" + "${BASE_DIR}/EmberMetadata.h" + "${BASE_DIR}/Instance.cpp" +) + diff --git a/src/app/codegen-data-model/model.gni b/src/app/codegen-data-model/model.gni index a2abf6377c07a4..25f50571223971 100644 --- a/src/app/codegen-data-model/model.gni +++ b/src/app/codegen-data-model/model.gni @@ -25,15 +25,17 @@ import("//build_overrides/chip.gni") # be cleanly built as a stand-alone and instead have to be imported as part of # a different data model or compilation unit. codegen_data_model_SOURCES = [ - "${chip_root}/src/app/codegen-data-model/CodegenDataModel.h", "${chip_root}/src/app/codegen-data-model/CodegenDataModel.cpp", + "${chip_root}/src/app/codegen-data-model/CodegenDataModel.h", "${chip_root}/src/app/codegen-data-model/CodegenDataModel_Read.cpp", "${chip_root}/src/app/codegen-data-model/CodegenDataModel_Write.cpp", "${chip_root}/src/app/codegen-data-model/EmberMetadata.cpp", "${chip_root}/src/app/codegen-data-model/EmberMetadata.h", + "${chip_root}/src/app/codegen-data-model/Instance.cpp", ] codegen_data_model_PUBLIC_DEPS = [ "${chip_root}/src/app/common:attribute-type", "${chip_root}/src/app/data-model-interface", + "${chip_root}/src/app/codegen-data-model:instance-header", ] diff --git a/src/app/common/templates/config-data.yaml b/src/app/common/templates/config-data.yaml index 83d1b682153ed7..fd060149c8ff20 100644 --- a/src/app/common/templates/config-data.yaml +++ b/src/app/common/templates/config-data.yaml @@ -41,6 +41,7 @@ CommandHandlerInterfaceOnlyClusters: - Electrical Power Measurement - Electrical Energy Measurement - Wi-Fi Network Management + - Thread Network Directory # We need a more configurable way of deciding which clusters have which init functions.... # See https://github.com/project-chip/connectedhomeip/issues/4369 @@ -58,7 +59,6 @@ ClustersWithInitFunctions: - Mode Select - Sample MEI - Scenes Management - - Wi-Fi Network Management ClustersWithAttributeChangedFunctions: - Bridged Device Basic diff --git a/src/app/server/Dnssd.cpp b/src/app/server/Dnssd.cpp index 3cdcd35f9a7e98..2fc56614e3ab9e 100644 --- a/src/app/server/Dnssd.cpp +++ b/src/app/server/Dnssd.cpp @@ -213,6 +213,9 @@ CHIP_ERROR DnssdServer::AdvertiseOperational() AddICDKeyToAdvertisement(advertiseParameters); #endif +#if INET_CONFIG_ENABLE_TCP_ENDPOINT + advertiseParameters.SetTCPSupportModes(chip::Dnssd::TCPModeAdvertise::kTCPClientServer); +#endif auto & mdnsAdvertiser = chip::Dnssd::ServiceAdvertiser::Instance(); ChipLogProgress(Discovery, "Advertise operational node " ChipLogFormatX64 "-" ChipLogFormatX64, diff --git a/src/app/server/Dnssd.h b/src/app/server/Dnssd.h index 105318ca5a08be..3103a2010c03f6 100644 --- a/src/app/server/Dnssd.h +++ b/src/app/server/Dnssd.h @@ -96,6 +96,7 @@ class DLL_EXPORT DnssdServer : public ICDStateObserver void SetICDManager(ICDManager * manager) { mICDManager = manager; }; #endif + /// Start operational advertising CHIP_ERROR AdvertiseOperational(); diff --git a/src/app/tests/BUILD.gn b/src/app/tests/BUILD.gn index c1826884923af4..0f0694dcc51574 100644 --- a/src/app/tests/BUILD.gn +++ b/src/app/tests/BUILD.gn @@ -55,6 +55,7 @@ source_set("binding-test-srcs") { ] public_deps = [ + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", ] @@ -73,6 +74,19 @@ source_set("ota-requestor-test-srcs") { ] } +source_set("thread-network-directory-test-srcs") { + sources = [ + "${chip_root}/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.cpp", + "${chip_root}/src/app/clusters/thread-network-directory-server/DefaultThreadNetworkDirectoryStorage.h", + "${chip_root}/src/app/clusters/thread-network-directory-server/ThreadNetworkDirectoryStorage.h", + ] + + public_deps = [ + "${chip_root}/src/app/common:cluster-objects", + "${chip_root}/src/lib/core", + ] +} + source_set("time-sync-data-provider-test-srcs") { sources = [ "${chip_root}/src/app/clusters/time-synchronization-server/TimeSyncDataProvider.cpp" ] @@ -89,6 +103,7 @@ source_set("power-cluster-test-srcs") { public_deps = [ "${chip_root}/src/app/common:cluster-objects", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", ] @@ -109,6 +124,7 @@ source_set("scenes-table-test-srcs") { public_deps = [ "${chip_root}/src/app", "${chip_root}/src/app/common:cluster-objects", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", ] @@ -133,6 +149,7 @@ source_set("app-test-stubs") { public_configs = [ "${chip_root}/src/lib/support/pw_log_chip:config" ] public_deps = [ + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", @@ -159,6 +176,7 @@ chip_test_suite("tests") { "TestConcreteAttributePath.cpp", "TestDataModelSerialization.cpp", "TestDefaultOTARequestorStorage.cpp", + "TestDefaultThreadNetworkDirectoryStorage.cpp", "TestEventLoggingNoUTCTime.cpp", "TestEventOverflow.cpp", "TestEventPathParams.cpp", @@ -189,11 +207,14 @@ chip_test_suite("tests") { ":operational-state-test-srcs", ":ota-requestor-test-srcs", ":power-cluster-test-srcs", + ":thread-network-directory-test-srcs", ":time-sync-data-provider-test-srcs", "${chip_root}/src/app", + "${chip_root}/src/app/codegen-data-model:instance-header", "${chip_root}/src/app/common:cluster-objects", "${chip_root}/src/app/icd/client:manager", "${chip_root}/src/app/tests:helpers", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", "${chip_root}/src/lib/core:string-builder-adapters", diff --git a/src/app/tests/TestAttributePathExpandIterator.cpp b/src/app/tests/TestAttributePathExpandIterator.cpp index 032581bff16f8a..236203098c8fb8 100644 --- a/src/app/tests/TestAttributePathExpandIterator.cpp +++ b/src/app/tests/TestAttributePathExpandIterator.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -132,7 +133,7 @@ TEST(TestAttributePathExpandIterator, TestAllWildcard) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -156,7 +157,7 @@ TEST(TestAttributePathExpandIterator, TestWildcardEndpoint) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -183,7 +184,7 @@ TEST(TestAttributePathExpandIterator, TestWildcardCluster) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -210,7 +211,7 @@ TEST(TestAttributePathExpandIterator, TestWildcardClusterGlobalAttributeNotInMet size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -244,7 +245,7 @@ TEST(TestAttributePathExpandIterator, TestWildcardAttribute) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -269,7 +270,7 @@ TEST(TestAttributePathExpandIterator, TestNoWildcard) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); @@ -413,7 +414,7 @@ TEST(TestAttributePathExpandIterator, TestMultipleClusInfo) size_t index = 0; - for (app::AttributePathExpandIterator iter(&clusInfo1); iter.Get(path); iter.Next()) + for (app::AttributePathExpandIterator iter(CodegenDataModelInstance(), &clusInfo1); iter.Get(path); iter.Next()) { ChipLogDetail(AppServer, "Visited Attribute: 0x%04X / " ChipLogFormatMEI " / " ChipLogFormatMEI, path.mEndpointId, ChipLogValueMEI(path.mClusterId), ChipLogValueMEI(path.mAttributeId)); diff --git a/src/app/tests/TestDefaultThreadNetworkDirectoryStorage.cpp b/src/app/tests/TestDefaultThreadNetworkDirectoryStorage.cpp new file mode 100644 index 00000000000000..761b78afad4ff9 --- /dev/null +++ b/src/app/tests/TestDefaultThreadNetworkDirectoryStorage.cpp @@ -0,0 +1,292 @@ +/* + * + * Copyright (c) 2024 Project CHIP Authors + * + * 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. + */ + +#include +#include +#include +#include + +#include +#include +#include + +using namespace chip; +using namespace chip::app; + +namespace { + +class TestDefaultThreadNetworkDirectoryStorage : public ::testing::Test +{ +public: + static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); } + static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); } + +protected: + TestPersistentStorageDelegate persistentStorageDelegate; + DefaultThreadNetworkDirectoryStorage storageImpl{ persistentStorageDelegate }; + ThreadNetworkDirectoryStorage & storage = storageImpl; +}; + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestEmptyStorage) +{ + EXPECT_GE(storage.Capacity(), 2); // can't meaningfully test with less and spec requires 2 per fabric + + { + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId; + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 0u); + EXPECT_FALSE(iterator->Next(exPanId)); + iterator->Release(); + } + + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId(UINT64_C(0x1122334455667788)); + EXPECT_FALSE(storage.ContainsNetwork(exPanId)); + EXPECT_EQ(storage.RemoveNetwork(exPanId), CHIP_ERROR_NOT_FOUND); + MutableByteSpan mutableSpan; + EXPECT_EQ(storage.GetNetworkDataset(exPanId, mutableSpan), CHIP_ERROR_NOT_FOUND); +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestAddEmptyDataset) +{ + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId(UINT64_C(0xd00fd00fdeadbeef)); + EXPECT_EQ(storage.AddOrUpdateNetwork(exPanId, ByteSpan()), CHIP_ERROR_INVALID_ARGUMENT); +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestAddDatasetTooLong) +{ + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId(UINT64_C(0xd00fd00fdeadbeef)); + uint8_t dataset[ThreadNetworkDirectoryStorage::kMaxThreadDatasetLen + 1] = { 1, 2, 3 }; + EXPECT_EQ(storage.AddOrUpdateNetwork(exPanId, ByteSpan(dataset)), CHIP_ERROR_INVALID_ARGUMENT); +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestAddRemoveNetworks) +{ + const ThreadNetworkDirectoryStorage::ExtendedPanId panA(UINT64_C(0xd00fd00fdeadbeef)); + const uint8_t datasetA[] = { 1 }; + const uint8_t updatedDatasetA[] = { 0x11, 0x11 }; + const ThreadNetworkDirectoryStorage::ExtendedPanId panB(UINT64_C(0xe475cafef00df00d)); + const uint8_t datasetB[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; + uint8_t mutableBytes[ThreadNetworkDirectoryStorage::kMaxThreadDatasetLen]; + + // Add Pan A only + EXPECT_EQ(storage.AddOrUpdateNetwork(panA, ByteSpan(datasetA)), CHIP_NO_ERROR); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_FALSE(storage.ContainsNetwork(panB)); + + { + MutableByteSpan retrievedDatasetA(mutableBytes); + EXPECT_EQ(storage.GetNetworkDataset(panA, retrievedDatasetA), CHIP_NO_ERROR); + EXPECT_TRUE(retrievedDatasetA.data_equal(ByteSpan(datasetA))); + } + { + MutableByteSpan emptyMutableSpan; + EXPECT_EQ(storage.GetNetworkDataset(panA, emptyMutableSpan), CHIP_ERROR_BUFFER_TOO_SMALL); + } + { + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId; + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 1u); + EXPECT_TRUE(iterator->Next(exPanId)); + EXPECT_EQ(exPanId, panA); + EXPECT_NE(exPanId, panB); // just to ensure operator== is sane + EXPECT_FALSE(iterator->Next(exPanId)); + EXPECT_EQ(iterator->Count(), 1u); + iterator->Release(); + } + + // Update Pan A + EXPECT_EQ(storage.AddOrUpdateNetwork(panA, ByteSpan(updatedDatasetA)), CHIP_NO_ERROR); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_FALSE(storage.ContainsNetwork(panB)); + + { + MutableByteSpan retrievedUpdatedDatasetA(mutableBytes); + EXPECT_EQ(storage.GetNetworkDataset(panA, retrievedUpdatedDatasetA), CHIP_NO_ERROR); + EXPECT_TRUE(retrievedUpdatedDatasetA.data_equal(ByteSpan(updatedDatasetA))); + } + { + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 1u); // still 1 + iterator->Release(); + } + + // Add Pan B + EXPECT_EQ(storage.AddOrUpdateNetwork(panB, ByteSpan(datasetB)), CHIP_NO_ERROR); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_TRUE(storage.ContainsNetwork(panB)); + { + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId1; + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId2; + ThreadNetworkDirectoryStorage::ExtendedPanId unused; + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 2u); + EXPECT_TRUE(iterator->Next(exPanId1)); + EXPECT_TRUE(iterator->Next(exPanId2)); + EXPECT_TRUE((exPanId1 == panA && exPanId2 == panB) || (exPanId1 == panB && exPanId2 == panA)); + EXPECT_FALSE(iterator->Next(unused)); + EXPECT_EQ(iterator->Count(), 2u); + iterator->Release(); + } + { + MutableByteSpan retrievedDatasetB(mutableBytes); + EXPECT_EQ(storage.GetNetworkDataset(panB, retrievedDatasetB), CHIP_NO_ERROR); + EXPECT_TRUE(retrievedDatasetB.data_equal(ByteSpan(datasetB))); + } + + // Remove Pan A + EXPECT_EQ(storage.RemoveNetwork(panA), CHIP_NO_ERROR); + EXPECT_FALSE(storage.ContainsNetwork(panA)); + EXPECT_TRUE(storage.ContainsNetwork(panB)); + + { + MutableByteSpan mutableSpan; + EXPECT_EQ(storage.GetNetworkDataset(panA, mutableSpan), CHIP_ERROR_NOT_FOUND); + } + { + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId; + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 1u); + EXPECT_TRUE(iterator->Next(exPanId)); + EXPECT_EQ(exPanId, panB); + EXPECT_FALSE(iterator->Next(exPanId)); + iterator->Release(); + } + + // Remove Pan B + EXPECT_EQ(storage.RemoveNetwork(panB), CHIP_NO_ERROR); + EXPECT_FALSE(storage.ContainsNetwork(panA)); + EXPECT_FALSE(storage.ContainsNetwork(panB)); + + { + MutableByteSpan mutableSpan; + EXPECT_EQ(storage.GetNetworkDataset(panB, mutableSpan), CHIP_ERROR_NOT_FOUND); + } + { + ThreadNetworkDirectoryStorage::ExtendedPanId exPanId; + auto * iterator = storage.IterateNetworkIds(); + EXPECT_TRUE(iterator != nullptr); + EXPECT_EQ(iterator->Count(), 0u); + EXPECT_FALSE(iterator->Next(exPanId)); + iterator->Release(); + } +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestStorageOverflow) +{ + // Fill up the storage to capacity + uint8_t dataset[] = { 42 }; + for (uint64_t id = 0; id < storage.Capacity(); id++) + { + EXPECT_EQ(storage.AddOrUpdateNetwork(ThreadNetworkDirectoryStorage::ExtendedPanId(id), ByteSpan(dataset)), CHIP_NO_ERROR); + } + + // Capacity limit should be enforced + const ThreadNetworkDirectoryStorage::ExtendedPanId exPanId(UINT64_C(0xd00fd00fdeadbeef)); + EXPECT_EQ(storage.AddOrUpdateNetwork(exPanId, ByteSpan(dataset)), CHIP_ERROR_NO_MEMORY); + + // Updating an existing network is still possible + dataset[0] = 88; + EXPECT_EQ(storage.AddOrUpdateNetwork(ThreadNetworkDirectoryStorage::ExtendedPanId(0u), ByteSpan(dataset)), CHIP_NO_ERROR); +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestAddNetworkStorageFailure) +{ + const ThreadNetworkDirectoryStorage::ExtendedPanId panA(UINT64_C(0xd00fd00fdeadbeef)); + const uint8_t datasetA[] = { 1 }; + const ThreadNetworkDirectoryStorage::ExtendedPanId panB(UINT64_C(0xe475cafef00df00d)); + uint8_t datasetB[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; + + EXPECT_EQ(storage.AddOrUpdateNetwork(panA, ByteSpan(datasetA)), CHIP_NO_ERROR); + + // Make the storage delegate return CHIP_ERROR_PERSISTED_STORAGE_FAILED for writes. + // Attempting to add a network should fail and state should be unaffected. + persistentStorageDelegate.SetRejectWrites(true); + EXPECT_EQ(storage.AddOrUpdateNetwork(panB, ByteSpan(datasetB)), CHIP_ERROR_PERSISTED_STORAGE_FAILED); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_FALSE(storage.ContainsNetwork(panB)); + { + auto * iterator = storage.IterateNetworkIds(); + EXPECT_EQ(iterator->Count(), 1u); + iterator->Release(); + } +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestAddNetworkStorageWriteIndexFailure) +{ + const ThreadNetworkDirectoryStorage::ExtendedPanId panA(UINT64_C(0xd00fd00fdeadbeef)); + const uint8_t datasetA[] = { 1 }; + const ThreadNetworkDirectoryStorage::ExtendedPanId panB(UINT64_C(0xe475cafef00df00d)); + uint8_t datasetB[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; + + EXPECT_EQ(storage.AddOrUpdateNetwork(panA, ByteSpan(datasetA)), CHIP_NO_ERROR); + + // White box test: Poison the index key specifically, so the dataset + // can be written but the subsequent update of the index fails. + // Attempting to add a network should fail and state should be unaffected. + StorageKeyName indexKey = DefaultStorageKeyAllocator::ThreadNetworkDirectoryIndex(); + persistentStorageDelegate.AddPoisonKey(indexKey.KeyName()); + EXPECT_EQ(storage.AddOrUpdateNetwork(panB, ByteSpan(datasetB)), CHIP_ERROR_PERSISTED_STORAGE_FAILED); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_FALSE(storage.ContainsNetwork(panB)); + { + auto * iterator = storage.IterateNetworkIds(); + EXPECT_EQ(iterator->Count(), 1u); + iterator->Release(); + } +} + +TEST_F(TestDefaultThreadNetworkDirectoryStorage, TestRemoveNetworkStorageFailure) +{ + const ThreadNetworkDirectoryStorage::ExtendedPanId panA(UINT64_C(0xd00f0001)); + const ThreadNetworkDirectoryStorage::ExtendedPanId panB(UINT64_C(0xd00f0002)); + const ThreadNetworkDirectoryStorage::ExtendedPanId panC(UINT64_C(0xd00f0003)); + const uint8_t dataset[] = { 1 }; + + // Just in case the test is compiled with CHIP_CONFIG_MAX_FABRICS == 1 + bool canStorePanC = (storage.Capacity() >= 3); + + // Add Pans A, B, and C + EXPECT_EQ(storage.AddOrUpdateNetwork(panA, ByteSpan(dataset)), CHIP_NO_ERROR); + EXPECT_EQ(storage.AddOrUpdateNetwork(panB, ByteSpan(dataset)), CHIP_NO_ERROR); + if (canStorePanC) + { + EXPECT_EQ(storage.AddOrUpdateNetwork(panC, ByteSpan(dataset)), CHIP_NO_ERROR); + } + + // Make the storage delegate return CHIP_ERROR_PERSISTED_STORAGE_FAILED for writes. + // Attempting to remove a network should fail and state should be unaffected. + persistentStorageDelegate.SetRejectWrites(true); + EXPECT_EQ(storage.RemoveNetwork(panA), CHIP_ERROR_PERSISTED_STORAGE_FAILED); + EXPECT_TRUE(storage.ContainsNetwork(panA)); + EXPECT_TRUE(storage.ContainsNetwork(panB)); + if (canStorePanC) + { + EXPECT_TRUE(storage.ContainsNetwork(panC)); + } + { + auto * iterator = storage.IterateNetworkIds(); + EXPECT_EQ(iterator->Count(), canStorePanC ? 3u : 2u); + iterator->Release(); + } +} + +} // namespace diff --git a/src/app/tests/TestInteractionModelEngine.cpp b/src/app/tests/TestInteractionModelEngine.cpp index f724f1921ef81d..db79875b010f48 100644 --- a/src/app/tests/TestInteractionModelEngine.cpp +++ b/src/app/tests/TestInteractionModelEngine.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -264,8 +265,9 @@ TEST_F_FROM_FIXTURE(TestInteractionModelEngine, TestSubjectHasActiveSubscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); // Create and setup readHandler 1 - ReadHandler * readHandler1 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx1, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler1 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx1, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify that Bob still doesn't have an active subscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); @@ -311,14 +313,15 @@ TEST_F_FROM_FIXTURE(TestInteractionModelEngine, TestSubjectHasActiveSubscription // Create readHandler 1 engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx1, ReadHandler::InteractionType::Subscribe, - reporting::GetDefaultReportScheduler()); + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify that Bob still doesn't have an active subscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); // Create and setup readHandler 2 - ReadHandler * readHandler2 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx2, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler2 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx2, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify that Bob still doesn't have an active subscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); @@ -368,12 +371,14 @@ TEST_F_FROM_FIXTURE(TestInteractionModelEngine, TestSubjectHasActiveSubscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(aliceFabricIndex, aliceNodeId)); // Create and setup readHandler 1 - ReadHandler * readHandler1 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx1, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler1 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx1, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Create and setup readHandler 2 - ReadHandler * readHandler2 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx2, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler2 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx2, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify that Bob still doesn't have an active subscription EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); @@ -449,19 +454,21 @@ TEST_F_FROM_FIXTURE(TestInteractionModelEngine, TestSubjectHasActiveSubscription // Create and setup readHandler 1-1 engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx11, ReadHandler::InteractionType::Subscribe, - reporting::GetDefaultReportScheduler()); + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Create and setup readHandler 1-2 - ReadHandler * readHandler12 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx12, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler12 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx12, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Create and setup readHandler 2-1 engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx21, ReadHandler::InteractionType::Subscribe, - reporting::GetDefaultReportScheduler()); + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Create and setup readHandler 2-2 - ReadHandler * readHandler22 = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx22, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler22 = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx22, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify that both Alice and Bob have no active subscriptions EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, bobNodeId)); @@ -531,8 +538,9 @@ TEST_F_FROM_FIXTURE(TestInteractionModelEngine, TestSubjectHasActiveSubscription ASSERT_TRUE(exchangeCtx); // Create readHandler - ReadHandler * readHandler = engine->GetReadHandlerPool().CreateObject( - nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, reporting::GetDefaultReportScheduler()); + ReadHandler * readHandler = + engine->GetReadHandlerPool().CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); // Verify there are not active subscriptions EXPECT_FALSE(engine->SubjectHasActiveSubscription(bobFabricIndex, valideSubjectId)); diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp index 81c66e45f40999..57d23d1eb0db81 100644 --- a/src/app/tests/TestReadInteraction.cpp +++ b/src/app/tests/TestReadInteraction.cpp @@ -18,17 +18,17 @@ #include -#include "app/tests/test-interaction-model-api.h" -#include "lib/support/CHIPMem.h" #include #include #include #include #include #include +#include #include #include #include +#include #include #include #include @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -469,7 +470,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandler) { Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); - ReadHandler readHandler(nullCallback, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(nullCallback, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); GenerateReportData(reportDatabuf, ReportType::kValid, false /* aSuppressResponse*/); EXPECT_EQ(readHandler.SendReportData(std::move(reportDatabuf), false), CHIP_ERROR_INCORRECT_STATE); @@ -624,7 +626,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerInvalidAttributePath) { Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); - ReadHandler readHandler(nullCallback, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(nullCallback, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); GenerateReportData(reportDatabuf, ReportType::kValid, false /* aSuppressResponse*/); EXPECT_EQ(readHandler.SendReportData(std::move(reportDatabuf), false), CHIP_ERROR_INCORRECT_STATE); @@ -1349,7 +1352,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestProcessSubscribeRequest) Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); @@ -1408,7 +1412,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMaxInt Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); @@ -1474,7 +1479,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInfMaxInt Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); @@ -1540,7 +1546,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMinInt Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); @@ -1606,7 +1613,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestMaxMinInt Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); @@ -1670,7 +1678,8 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInvalidId Messaging::ExchangeContext * exchangeCtx = NewExchangeToAlice(nullptr, false); { - ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler); + ReadHandler readHandler(*engine, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, gReportScheduler, + CodegenDataModelInstance()); writer.Init(std::move(subscribeRequestbuf)); EXPECT_EQ(subscribeRequestBuilder.Init(&writer), CHIP_NO_ERROR); diff --git a/src/app/tests/TestReportScheduler.cpp b/src/app/tests/TestReportScheduler.cpp index bd8cd11041dacf..f9ff58eac9e017 100644 --- a/src/app/tests/TestReportScheduler.cpp +++ b/src/app/tests/TestReportScheduler.cpp @@ -17,6 +17,7 @@ */ #include +#include #include #include #include @@ -274,8 +275,8 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestReadHandlerList) for (size_t i = 0; i < kNumMaxReadHandlers; i++) { - ReadHandler * readHandler = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + ReadHandler * readHandler = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &sScheduler, CodegenDataModelInstance()); sScheduler.OnSubscriptionEstablished(readHandler); ASSERT_NE(nullptr, readHandler); ASSERT_NE(nullptr, sScheduler.FindReadHandlerNode(readHandler)); @@ -338,20 +339,20 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestReportTiming) // Dirty read handler, will be triggered at min interval // Test OnReadHandler created - ReadHandler * readHandler1 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + ReadHandler * readHandler1 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &sScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler1, &sScheduler, 1, 2)); readHandler1->ForceDirtyState(); // Clean read handler, will be triggered at max interval - ReadHandler * readHandler2 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + ReadHandler * readHandler2 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &sScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler2, &sScheduler, 0, 3)); // Clean read handler, will be triggered at max interval, but will be cancelled before - ReadHandler * readHandler3 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + ReadHandler * readHandler3 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &sScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler3, &sScheduler, 0, 3)); // Confirms that none of the ReadHandlers are currently reportable @@ -404,8 +405,8 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestObserverCallbacks) // Initialize mock timestamp sTestTimerDelegate.SetMockSystemTimestamp(Milliseconds64(0)); - ReadHandler * readHandler = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &sScheduler); + ReadHandler * readHandler = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &sScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler, &sScheduler, 1, 2)); @@ -480,14 +481,14 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestSynchronizedScheduler) // Initialize the mock system time sTestTimerSynchronizedDelegate.SetMockSystemTimestamp(System::Clock::Milliseconds64(0)); - ReadHandler * readHandler1 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); + ReadHandler * readHandler1 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &syncScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler1, &syncScheduler, 0, 2)); ReadHandlerNode * node1 = syncScheduler.FindReadHandlerNode(readHandler1); - ReadHandler * readHandler2 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); + ReadHandler * readHandler2 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &syncScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler2, &syncScheduler, 1, 3)); ReadHandlerNode * node2 = syncScheduler.FindReadHandlerNode(readHandler2); @@ -614,8 +615,8 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestSynchronizedScheduler) // Wait for 1 second, nothing should happen here sTestTimerSynchronizedDelegate.IncrementMockTimestamp(System::Clock::Milliseconds64(1000)); - ReadHandler * readHandler3 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); + ReadHandler * readHandler3 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &syncScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler3, &syncScheduler, 2, 3)); ReadHandlerNode * node3 = syncScheduler.FindReadHandlerNode(readHandler3); @@ -668,8 +669,8 @@ TEST_F_FROM_FIXTURE(TestReportScheduler, TestSynchronizedScheduler) EXPECT_EQ(syncScheduler.mNextReportTimestamp, node1->GetMaxTimestamp()); // Now simulate a new readHandler being added with a max forcing a conflict - ReadHandler * readHandler4 = - readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, &syncScheduler); + ReadHandler * readHandler4 = readHandlerPool.CreateObject(nullCallback, exchangeCtx, ReadHandler::InteractionType::Subscribe, + &syncScheduler, CodegenDataModelInstance()); EXPECT_EQ(CHIP_NO_ERROR, MockReadHandlerSubscriptionTransaction(readHandler4, &syncScheduler, 0, 1)); ReadHandlerNode * node4 = syncScheduler.FindReadHandlerNode(readHandler4); diff --git a/src/app/tests/TestReportingEngine.cpp b/src/app/tests/TestReportingEngine.cpp index f0d3b0cc60d935..4468eeaaf12ade 100644 --- a/src/app/tests/TestReportingEngine.cpp +++ b/src/app/tests/TestReportingEngine.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -170,7 +171,7 @@ TEST_F_FROM_FIXTURE(TestReportingEngine, TestBuildAndSendSingleReportData) EXPECT_EQ(readRequestBuilder.GetError(), CHIP_NO_ERROR); EXPECT_EQ(writer.Finalize(&readRequestbuf), CHIP_NO_ERROR); app::ReadHandler readHandler(dummy, exchangeCtx, chip::app::ReadHandler::InteractionType::Read, - app::reporting::GetDefaultReportScheduler()); + app::reporting::GetDefaultReportScheduler(), CodegenDataModelInstance()); readHandler.OnInitialRequest(std::move(readRequestbuf)); EXPECT_EQ(InteractionModelEngine::GetInstance()->GetReportingEngine().BuildAndSendSingleReportData(&readHandler), diff --git a/src/app/tests/integration/BUILD.gn b/src/app/tests/integration/BUILD.gn index 6acd4ccdd8d6af..88b3eccc14b6f5 100644 --- a/src/app/tests/integration/BUILD.gn +++ b/src/app/tests/integration/BUILD.gn @@ -44,6 +44,7 @@ executable("chip-im-initiator") { deps = [ ":common", "${chip_root}/src/app", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", @@ -67,6 +68,7 @@ executable("chip-im-responder") { deps = [ ":common", "${chip_root}/src/app", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", diff --git a/src/app/tests/suites/certification/Test_TC_CC_3_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_3_2.yaml index 0c21f1a6ffcfb1..398ec48f36f4d2 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_3_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_3_2.yaml @@ -346,6 +346,58 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends MoveHue command to DUT with MoveMode=0x01 (up) and + Rate=0 (units/s)" + PICS: CC.S.F00 && CC.S.C01.Rsp + command: "MoveHue" + arguments: + values: + - name: "MoveMode" + value: 1 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5b: TH sends MoveHue command to DUT with MoveMode=0x03 (down) + and Rate=0 (units/s)" + PICS: CC.S.F00 && CC.S.C01.Rsp + command: "MoveHue" + arguments: + values: + - name: "MoveMode" + value: 3 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5c: TH sends MoveHue command to DUT with MoveMode=0x00 (stop) + and Rate=0 (units/s)" + PICS: CC.S.F00 && CC.S.C01.Rsp + command: "MoveHue" + arguments: + values: + - name: "MoveMode" + value: 0 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_3_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_3_3.yaml index 53175d974716ea..91cdcbffe7d255 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_3_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_3_3.yaml @@ -287,6 +287,46 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends StepHue command to DUT with StepMode=0x01 (up), + StepSize=0" + PICS: CC.S.F00 && CC.S.C02.Rsp + command: "StepHue" + arguments: + values: + - name: "StepMode" + value: 1 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5b: TH sends StepHue command to DUT with StepMode=0x03 (down), + StepSize=0" + PICS: CC.S.F00 && CC.S.C02.Rsp + command: "StepHue" + arguments: + values: + - name: "StepMode" + value: 3 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_4_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_4_2.yaml index 4b6630f18d4b92..0438a6e376f0ee 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_4_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_4_2.yaml @@ -357,6 +357,42 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 6a: TH sends MoveSaturation command to DUT with MoveMode=0x01 + (up) and Rate=0 (units/s)" + command: "MoveSaturation" + PICS: CC.S.F00 && CC.S.C04.Rsp + arguments: + values: + - name: "MoveMode" + value: 1 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 6b: TH sends MoveSaturation command to DUT with MoveMode=0x03 + (down) and Rate=0 (units/s)" + command: "MoveSaturation" + PICS: CC.S.F00 && CC.S.C04.Rsp + arguments: + values: + - name: "MoveMode" + value: 3 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_4_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_4_3.yaml index 8a6a953fb25af8..02826ab6bfef76 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_4_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_4_3.yaml @@ -327,6 +327,46 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends StepSaturation command to DUT with StepMode=0x01 + (up), StepSize=0" + PICS: CC.S.F00 && CC.S.C05.Rsp + command: "StepSaturation" + arguments: + values: + - name: "StepMode" + value: 1 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5b: TH sends StepSaturation command to DUT with StepMode=0x03 + (down), StepSize=0" + PICS: CC.S.F00 && CC.S.C05.Rsp + command: "StepSaturation" + arguments: + values: + - name: "StepMode" + value: 3 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_5_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_5_2.yaml index 17da61ef9ccb57..0c88fdaa0cb906 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_5_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_5_2.yaml @@ -217,6 +217,21 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends MoveColor command to DUT with RateX=0 and RateY=0" + command: "MoveColor" + PICS: CC.S.F03 && CC.S.C08.Rsp + arguments: + values: + - name: "RateX" + value: 0 + - name: "RateY" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_5_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_5_3.yaml index 4e8eba6ced993f..1f949647cefe4f 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_5_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_5_3.yaml @@ -189,6 +189,25 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends StepColor command to DUT with StepX = 0, StepY = 0" + command: "StepColor" + PICS: CC.S.F03 && CC.S.C09.Rsp + arguments: + values: + - name: "StepX" + value: 0 + - name: "StepY" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + - label: "Turn off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml index f5259372823048..2283df1214e72e 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_6_2.yaml @@ -364,8 +364,73 @@ tests: constraints: minValue: 0 maxValue: 3 + - label: - "Step 6a: TH sends MoveColorTemperature command to DUT with MoveMode = + "Step 6a: TH sends _MoveColorTemperature command_ to DUT with + MoveMode=0x01 (up) and Rate=0 (units/s)" + PICS: CC.S.F04 && CC.S.C4b.Rsp + command: MoveColorTemperature + arguments: + values: + - name: "MoveMode" + value: 1 + - name: "Rate" + value: 0 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 6b: TH sends _MoveColorTemperature command_ to DUT with + MoveMode=0x03 (down) and Rate=0 (units/s)" + PICS: CC.S.F04 && CC.S.C4b.Rsp + command: MoveColorTemperature + arguments: + values: + - name: "MoveMode" + value: 3 + - name: "Rate" + value: 0 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 6c: TH sends _MoveColorTemperature command_ to DUT with + MoveMode=0x00 (stop) and Rate=0 (units/s)" + PICS: CC.S.F04 && CC.S.C4b.Rsp + command: MoveColorTemperature + arguments: + values: + - name: "MoveMode" + value: 0 + - name: "Rate" + value: 0 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + + - label: + "Step 7a: TH sends MoveColorTemperature command to DUT with MoveMode = 0x03(down), Rate = 65535 (max value) with ColorTemperatureMinimumMireds of 0" PICS: CC.S.F04 && CC.S.C4b.Rsp @@ -394,7 +459,7 @@ tests: - name: "ms" value: 1000 - - label: "Step 6b: TH reads ColorTemperatureMireds attribute from DUT." + - label: "Step 7b: TH reads ColorTemperatureMireds attribute from DUT." PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4b.Rsp command: "readAttribute" attribute: "ColorTemperatureMireds" @@ -405,7 +470,7 @@ tests: maxValue: ColorTempPhysicalMaxMiredsValue - label: - "Step 7a: TH sends MoveColorTemperature command to DUT with MoveMode = + "Step 8a: TH sends MoveColorTemperature command to DUT with MoveMode = 0x01(up), Rate = 65535 (max value) with ColorTemperatureMaximumMireds of 0" PICS: CC.S.F04 && CC.S.C4b.Rsp @@ -434,7 +499,7 @@ tests: - name: "ms" value: 1000 - - label: "Step 7b: TH reads ColorTemperatureMireds attribute from DUT." + - label: "Step 8b: TH reads ColorTemperatureMireds attribute from DUT." PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4b.Rsp command: "readAttribute" attribute: "ColorTemperatureMireds" diff --git a/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml index 437ef78af33f27..5222aec2aa198c 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_6_3.yaml @@ -288,7 +288,55 @@ tests: maxValue: 3 - label: - "Step 5a: TH sends StepColorTemperature command to DUT with StepMode = + "Step 5a: TH sends StepColorTemperature command to DUT with + StepMode=0x01 (up), StepSize=0" + PICS: CC.S.F04 && CC.S.C4c.Rsp + command: "StepColorTemperature" + arguments: + values: + - name: "StepMode" + value: 1 + - name: "StepSize" + value: 0 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5ab TH sends StepColorTemperature command to DUT with + StepMode=0x03 (down), StepSize=0" + PICS: CC.S.F04 && CC.S.C4c.Rsp + command: "StepColorTemperature" + arguments: + values: + - name: "StepMode" + value: 3 + - name: "StepSize" + value: 0 + - name: "ColorTemperatureMinimumMireds" + value: 0 + - name: "ColorTemperatureMaximumMireds" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 6a: TH sends StepColorTemperature command to DUT with StepMode = 0x01 (up), StepSize = ColorTempPhysicalMaxMireds and TransitionTime = 0 (instant)." PICS: CC.S.F04 && CC.S.C4c.Rsp @@ -319,7 +367,7 @@ tests: - name: "ms" value: 100 - - label: "Step 5b: TH reads ColorTemperatureMireds attribute from DUT." + - label: "Step 6b: TH reads ColorTemperatureMireds attribute from DUT." PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4c.Rsp command: "readAttribute" attribute: "ColorTemperatureMireds" @@ -330,7 +378,7 @@ tests: maxValue: ColorTempPhysicalMaxMiredsValue - label: - "Step 6a: TH sends StepColorTemperature command to DUT with StepMode = + "Step 7a: TH sends StepColorTemperature command to DUT with StepMode = 0x03 (down), StepSize = ColorTempPhysicalMaxMireds and TransitionTime = 0 (instant)." PICS: CC.S.F04 && CC.S.C4c.Rsp @@ -361,7 +409,7 @@ tests: - name: "ms" value: 100 - - label: "Step 6b: TH reads ColorTemperatureMireds attribute from DUT." + - label: "Step 7b: TH reads ColorTemperatureMireds attribute from DUT." PICS: CC.S.F04 && CC.S.A0007 && CC.S.C4c.Rsp command: "readAttribute" attribute: "ColorTemperatureMireds" diff --git a/src/app/tests/suites/certification/Test_TC_CC_7_2.yaml b/src/app/tests/suites/certification/Test_TC_CC_7_2.yaml index b9ded89a132a6f..18f1113d4928b6 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_7_2.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_7_2.yaml @@ -329,6 +329,58 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 5a: TH sends EnhancedMoveHue command to DUT with MoveMode=0x01 + (up) and Rate=0 (units/s)" + PICS: CC.S.F01 && CC.S.C41.Rsp" + command: "EnhancedMoveHue" + arguments: + values: + - name: "MoveMode" + value: 1 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5b: TH sends EnhancedMoveHue command to DUT with MoveMode=0x03 + (down) and Rate=0 (units/s)" + PICS: CC.S.F01 && CC.S.C41.Rsp + command: "EnhancedMoveHue" + arguments: + values: + - name: "MoveMode" + value: 3 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 5c: TH sends EnhancedMoveHue command to DUT with MoveMode=0x00 + (stop) and Rate=0 (units/s)" + PICS: CC.S.F01 && CC.S.C41.Rsp + command: "EnhancedMoveHue" + arguments: + values: + - name: "MoveMode" + value: 0 + - name: "Rate" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + - label: "Turn Off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_CC_7_3.yaml b/src/app/tests/suites/certification/Test_TC_CC_7_3.yaml index 53bf4ba4883f3c..bfdfd26ed3ca1a 100644 --- a/src/app/tests/suites/certification/Test_TC_CC_7_3.yaml +++ b/src/app/tests/suites/certification/Test_TC_CC_7_3.yaml @@ -299,6 +299,46 @@ tests: minValue: 0 maxValue: 3 + - label: + "Step 7a: TH sends EnhancedStepHue command to DUT with StepMode=0x01 + (up), StepSize=0" + PICS: CC.S.F01 && CC.S.C42.Rsp + command: "EnhancedStepHue" + arguments: + values: + - name: "StepMode" + value: 1 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + + - label: + "Step 7b: TH sends EnhancedStepHue command to DUT with StepMode=0x03 + (down), StepSize=0" + PICS: CC.S.F01 && CC.S.C42.Rsp + command: "EnhancedStepHue" + arguments: + values: + - name: "StepMode" + value: 3 + - name: "StepSize" + value: 0 + - name: "TransitionTime" + value: 0 + - name: "OptionsMask" + value: 0 + - name: "OptionsOverride" + value: 0 + response: + error: INVALID_COMMAND + - label: "Turn Off light that we turned on" PICS: OO.S.C00.Rsp cluster: "On/Off" diff --git a/src/app/tests/suites/certification/Test_TC_LVL_2_1.yaml b/src/app/tests/suites/certification/Test_TC_LVL_2_1.yaml index b930badc0971a1..8e9ee05b33e9ff 100644 --- a/src/app/tests/suites/certification/Test_TC_LVL_2_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_LVL_2_1.yaml @@ -215,7 +215,7 @@ tests: response: constraints: type: int8u - minValue: 0 + minValue: 1 maxValue: 255 - label: "Step 13: TH reads the Options attribute from the DUT" diff --git a/src/app/tests/suites/certification/Test_TC_LVL_4_1.yaml b/src/app/tests/suites/certification/Test_TC_LVL_4_1.yaml index 14ac5ea5a69ffd..65e5ede6845c2c 100644 --- a/src/app/tests/suites/certification/Test_TC_LVL_4_1.yaml +++ b/src/app/tests/suites/certification/Test_TC_LVL_4_1.yaml @@ -269,7 +269,7 @@ tests: - label: "Step 4h: TH sends a Move command to the DUT with MoveMode =0x00 (up) - and Rate =0 (units/s), expect success" + and Rate =0 (units/s), expect failure" PICS: LVL.S.C01.Rsp command: "Move" arguments: @@ -282,6 +282,8 @@ tests: value: 1 - name: "OptionsOverride" value: 1 + response: + error: INVALID_COMMAND - label: "Wait 5s" cluster: "DelayCommands" diff --git a/src/app/util/mock/BUILD.gn b/src/app/util/mock/BUILD.gn index 59ab39947711c2..fa57cf4e9e71e9 100644 --- a/src/app/util/mock/BUILD.gn +++ b/src/app/util/mock/BUILD.gn @@ -14,6 +14,8 @@ import("//build_overrides/chip.gni") +import("${chip_root}/src/app/codegen-data-model/model.gni") + config("mock_include") { include_dirs = [ "include" ] } @@ -39,3 +41,19 @@ source_set("mock_ember") { cflags = [ "-Wconversion" ] } + +# Include a runnable codegen data model that is based on the mocks +# defined in mock_ember. +source_set("mock_codegen_data_model") { + sources = codegen_data_model_SOURCES + public_deps = codegen_data_model_PUBLIC_DEPS + + sources += [ + "${chip_root}/src/app/util/ember-global-attribute-access-interface.cpp", + "${chip_root}/src/app/util/ember-io-storage.cpp", + "CodegenEmberMocks.cpp", + ] + + public_configs = [ ":mock_include" ] + public_deps += [ ":mock_ember" ] +} diff --git a/src/app/util/mock/CodegenEmberMocks.cpp b/src/app/util/mock/CodegenEmberMocks.cpp new file mode 100644 index 00000000000000..e1f0b2436084a7 --- /dev/null +++ b/src/app/util/mock/CodegenEmberMocks.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ +#include +#include + +using chip::Protocols::InteractionModel::Status; + +void MatterReportingAttributeChangeCallback(const chip::app::ConcreteAttributePath & aPath) +{ + // NOOP currently, exists to satisfy linker only +} + +Status emAfReadOrWriteAttribute(const EmberAfAttributeSearchRecord * attRecord, const EmberAfAttributeMetadata ** metadata, + uint8_t * buffer, uint16_t readLength, bool write) +{ + if (!write) + { + memset(buffer, 0, readLength); + } + return Status::Success; +} + +Status emAfWriteAttributeExternal(chip::EndpointId endpoint, chip::ClusterId cluster, chip::AttributeId attributeID, + uint8_t * dataPtr, EmberAfAttributeType dataType) +{ + return Status::Success; +} + +Status emberAfWriteAttribute(chip::EndpointId endpoint, chip::ClusterId cluster, chip::AttributeId attributeID, uint8_t * dataPtr, + EmberAfAttributeType dataType) +{ + return emAfWriteAttributeExternal(endpoint, cluster, attributeID, dataPtr, dataType); +} diff --git a/src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml index 749731069494f5..c97d4a59baa00b 100644 --- a/src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/color-control-cluster.xml @@ -98,7 +98,7 @@ limitations under the License. true true - + diff --git a/src/app/zap-templates/zcl/data-model/chip/level-control-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/level-control-cluster.xml index 79a7da56a448e0..4d0e67ddbd1b47 100644 --- a/src/app/zap-templates/zcl/data-model/chip/level-control-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/level-control-cluster.xml @@ -46,7 +46,7 @@ limitations under the License. true true - + @@ -74,8 +74,8 @@ limitations under the License. OnLevel OnTransitionTime OffTransitionTime - DefaultMoveRate - Options + DefaultMoveRate + Options StartUpCurrentLevel diff --git a/src/app/zap-templates/zcl/data-model/chip/matter-devices.xml b/src/app/zap-templates/zcl/data-model/chip/matter-devices.xml index ce12fb58abb9f5..f0266fffecb872 100644 --- a/src/app/zap-templates/zcl/data-model/chip/matter-devices.xml +++ b/src/app/zap-templates/zcl/data-model/chip/matter-devices.xml @@ -2426,6 +2426,7 @@ limitations under the License. Endpoint + diff --git a/src/app/zap-templates/zcl/data-model/chip/thread-network-directory-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/thread-network-directory-cluster.xml index f802b7ab4452c0..e97cbc931e6b0e 100644 --- a/src/app/zap-templates/zcl/data-model/chip/thread-network-directory-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/thread-network-directory-cluster.xml @@ -19,9 +19,10 @@ limitations under the License. - + + @@ -37,7 +38,7 @@ limitations under the License. - + PreferredExtendedPanID @@ -56,22 +57,16 @@ limitations under the License. Removes an entry from the ThreadNetworks list. - + Retrieves a Thread Operational Dataset from the ThreadNetworks list. - + This is the response to a GetOperationalDataset request. - - - This event SHALL be generated when an entry in ThreadNetworks is added, removed, or had its Operational Dataset changed. - - - diff --git a/src/app/zap-templates/zcl/zcl-with-test-extensions.json b/src/app/zap-templates/zcl/zcl-with-test-extensions.json index 3b11954f1582b0..1a76205be885f9 100644 --- a/src/app/zap-templates/zcl/zcl-with-test-extensions.json +++ b/src/app/zap-templates/zcl/zcl-with-test-extensions.json @@ -645,7 +645,12 @@ "Valve Configuration and Control": ["RemainingDuration"], "Boolean State Configuration": ["CurrentSensitivityLevel"], "Water Heater Mode": ["SupportedModes", "CurrentMode", "FeatureMap"], - "Wi-Fi Network Management": ["SSID"] + "Wi-Fi Network Management": ["SSID"], + "Thread Network Directory": [ + "PreferredExtendedPanID", + "ThreadNetworks", + "ThreadNetworkTableSize" + ] }, "defaultReportingPolicy": "mandatory", "ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"], diff --git a/src/app/zap-templates/zcl/zcl.json b/src/app/zap-templates/zcl/zcl.json index b03da7bc7b1e67..5388a12156601a 100644 --- a/src/app/zap-templates/zcl/zcl.json +++ b/src/app/zap-templates/zcl/zcl.json @@ -643,7 +643,12 @@ "Valve Configuration and Control": ["RemainingDuration"], "Boolean State Configuration": ["CurrentSensitivityLevel"], "Water Heater Mode": ["SupportedModes", "CurrentMode", "FeatureMap"], - "Wi-Fi Network Management": ["SSID"] + "Wi-Fi Network Management": ["SSID"], + "Thread Network Directory": [ + "PreferredExtendedPanID", + "ThreadNetworks", + "ThreadNetworkTableSize" + ] }, "defaultReportingPolicy": "mandatory", "ZCLDataTypes": ["ARRAY", "BITMAP", "ENUM", "NUMBER", "STRING", "STRUCT"], diff --git a/src/app/zap_cluster_list.json b/src/app/zap_cluster_list.json index dc324968991adc..00bcb55adb90a7 100644 --- a/src/app/zap_cluster_list.json +++ b/src/app/zap_cluster_list.json @@ -117,6 +117,7 @@ "THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER": [], "THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER": [], "THREAD_NETWORK_DIAGNOSTICS_CLUSTER": [], + "THREAD_NETWORK_DIRECTORY_CLUSTER": [], "TIME_CLUSTER": [], "TIME_FORMAT_LOCALIZATION_CLUSTER": [], "TIME_SYNCHRONIZATION_CLUSTER": [], @@ -293,7 +294,7 @@ "THREAD_NETWORK_DIAGNOSTICS_CLUSTER": [ "thread-network-diagnostics-server" ], - "THREAD_NETWORK_DIRECTORY_CLUSTER": [], + "THREAD_NETWORK_DIRECTORY_CLUSTER": ["thread-network-directory-server"], "TIME_CLUSTER": [], "TIME_FORMAT_LOCALIZATION_CLUSTER": ["time-format-localization-server"], "TIME_SYNCHRONIZATION_CLUSTER": ["time-synchronization-server"], diff --git a/src/ble/BLEEndPoint.cpp b/src/ble/BLEEndPoint.cpp index 78e74bdec78b1a..d8e2a7b2a49d5e 100644 --- a/src/ble/BLEEndPoint.cpp +++ b/src/ble/BLEEndPoint.cpp @@ -133,11 +133,8 @@ CHIP_ERROR BLEEndPoint::StartConnect() // Add reference to message fragment for duration of platform's GATT write attempt. CHIP retains partial // ownership of message fragment's packet buffer, since this is the same buffer as that of the whole message, just // with a fragmenter-modified payload offset and data length, by a Retain() on the handle when calling this function. - if (!SendWrite(buf.Retain())) - { - err = BLE_ERROR_GATT_WRITE_FAILED; - ExitNow(); - } + err = SendWrite(buf.Retain()); + SuccessOrExit(err); // Free request buffer on write confirmation. Stash a reference to it in mSendQueue, which we don't use anyway // until the connection has been set up. @@ -213,13 +210,13 @@ void BLEEndPoint::HandleSubscribeReceived() // Add reference to message fragment for duration of platform's GATT indication attempt. CHIP retains partial // ownership of message fragment's packet buffer, since this is the same buffer as that of the whole message, just // with a fragmenter-modified payload offset and data length. - if (!SendIndication(mSendQueue.Retain())) + err = SendIndication(mSendQueue.Retain()); + if (err != CHIP_NO_ERROR) { // Ensure transmit queue is empty and set to NULL. mSendQueue = nullptr; ChipLogError(Ble, "cap resp ind failed"); - err = BLE_ERROR_GATT_INDICATE_FAILED; ExitNow(); } @@ -389,9 +386,10 @@ void BLEEndPoint::FinalizeClose(uint8_t oldState, uint8_t flags, CHIP_ERROR err) // Indicate close of chipConnection to peripheral via GATT unsubscribe. Keep end point allocated until // unsubscribe completes or times out, so platform doesn't close underlying BLE connection before // we're really sure the unsubscribe request has been sent. - if (!mBle->mPlatformDelegate->UnsubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID)) + err = mBle->mPlatformDelegate->UnsubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID); + if (err != CHIP_NO_ERROR) { - ChipLogError(Ble, "BtpEngine unsub failed"); + ChipLogError(Ble, "BtpEngine unsubscribe failed %" CHIP_ERROR_FORMAT, err.Format()); // If unsubscribe fails, release BLE connection and free end point immediately. Free(); @@ -568,31 +566,20 @@ CHIP_ERROR BLEEndPoint::SendCharacteristic(PacketBufferHandle && buf) if (mRole == kBleRole_Central) { - if (!SendWrite(std::move(buf))) - { - err = BLE_ERROR_GATT_WRITE_FAILED; - } - else - { - // Write succeeded, so shrink remote receive window counter by 1. - mRemoteReceiveWindowSize = static_cast(mRemoteReceiveWindowSize - 1); - ChipLogDebugBleEndPoint(Ble, "decremented remote rx window, new size = %u", mRemoteReceiveWindowSize); - } + SuccessOrExit(err = SendWrite(std::move(buf))); + // Write succeeded, so shrink remote receive window counter by 1. + mRemoteReceiveWindowSize = static_cast(mRemoteReceiveWindowSize - 1); + ChipLogDebugBleEndPoint(Ble, "decremented remote rx window, new size = %u", mRemoteReceiveWindowSize); } else // (mRole == kBleRole_Peripheral), verified on Init { - if (!SendIndication(std::move(buf))) - { - err = BLE_ERROR_GATT_INDICATE_FAILED; - } - else - { - // Indication succeeded, so shrink remote receive window counter by 1. - mRemoteReceiveWindowSize = static_cast(mRemoteReceiveWindowSize - 1); - ChipLogDebugBleEndPoint(Ble, "decremented remote rx window, new size = %u", mRemoteReceiveWindowSize); - } + SuccessOrExit(err = SendIndication(std::move(buf))); + // Indication succeeded, so shrink remote receive window counter by 1. + mRemoteReceiveWindowSize = static_cast(mRemoteReceiveWindowSize - 1); + ChipLogDebugBleEndPoint(Ble, "decremented remote rx window, new size = %u", mRemoteReceiveWindowSize); } +exit: return err; } @@ -750,8 +737,8 @@ CHIP_ERROR BLEEndPoint::HandleHandshakeConfirmationReceived() { // Subscribe to characteristic which peripheral will use to send indications. Prompts peripheral to send // BLE transport capabilities indication. - VerifyOrExit(mBle->mPlatformDelegate->SubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID), - err = BLE_ERROR_GATT_SUBSCRIBE_FAILED); + err = mBle->mPlatformDelegate->SubscribeCharacteristic(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID); + SuccessOrExit(err); // We just sent a GATT subscribe request, so make sure to attempt unsubscribe on close. mConnStateFlags.Set(ConnectionStateFlag::kDidBeginSubscribe); @@ -1309,18 +1296,25 @@ CHIP_ERROR BLEEndPoint::Receive(PacketBufferHandle && data) return err; } -bool BLEEndPoint::SendWrite(PacketBufferHandle && buf) +CHIP_ERROR BLEEndPoint::SendWrite(PacketBufferHandle && buf) { mConnStateFlags.Set(ConnectionStateFlag::kGattOperationInFlight); - return mBle->mPlatformDelegate->SendWriteRequest(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_1_UUID, std::move(buf)); + auto err = mBle->mPlatformDelegate->SendWriteRequest(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_1_UUID, std::move(buf)); + VerifyOrReturnError(err == CHIP_NO_ERROR, err, + ChipLogError(Ble, "Send write request failed: %" CHIP_ERROR_FORMAT, err.Format())); + + return err; } -bool BLEEndPoint::SendIndication(PacketBufferHandle && buf) +CHIP_ERROR BLEEndPoint::SendIndication(PacketBufferHandle && buf) { mConnStateFlags.Set(ConnectionStateFlag::kGattOperationInFlight); - return mBle->mPlatformDelegate->SendIndication(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID, std::move(buf)); + auto err = mBle->mPlatformDelegate->SendIndication(mConnObj, &CHIP_BLE_SVC_ID, &CHIP_BLE_CHAR_2_UUID, std::move(buf)); + VerifyOrReturnError(err == CHIP_NO_ERROR, err, ChipLogError(Ble, "Send indication failed: %" CHIP_ERROR_FORMAT, err.Format())); + + return err; } CHIP_ERROR BLEEndPoint::StartConnectTimer() diff --git a/src/ble/BLEEndPoint.h b/src/ble/BLEEndPoint.h index f027a9c2a9c0e6..97c094747a8d7f 100644 --- a/src/ble/BLEEndPoint.h +++ b/src/ble/BLEEndPoint.h @@ -169,8 +169,8 @@ class DLL_EXPORT BLEEndPoint CHIP_ERROR ContinueMessageSend(); CHIP_ERROR DoSendStandAloneAck(); CHIP_ERROR SendCharacteristic(PacketBufferHandle && buf); - bool SendIndication(PacketBufferHandle && buf); - bool SendWrite(PacketBufferHandle && buf); + CHIP_ERROR SendIndication(PacketBufferHandle && buf); + CHIP_ERROR SendWrite(PacketBufferHandle && buf); // Receive path: CHIP_ERROR HandleConnectComplete(); diff --git a/src/ble/BlePlatformDelegate.h b/src/ble/BlePlatformDelegate.h index bdf1e19ad211fc..35f8e1808eb25c 100644 --- a/src/ble/BlePlatformDelegate.h +++ b/src/ble/BlePlatformDelegate.h @@ -28,6 +28,7 @@ #error "Please include instead!" #endif +#include #include #include @@ -48,30 +49,26 @@ class DLL_EXPORT BlePlatformDelegate // Following APIs must be implemented by platform: // Subscribe to updates and indications on the specfied characteristic - virtual bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId) = 0; + virtual CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, + const ChipBleUUID * charId) = 0; // Unsubscribe from updates and indications on the specified characteristic - virtual bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, - const ChipBleUUID * charId) = 0; + virtual CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, + const ChipBleUUID * charId) = 0; // Close the underlying BLE connection. - virtual bool CloseConnection(BLE_CONNECTION_OBJECT connObj) = 0; + virtual CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT connObj) = 0; // Get MTU size negotiated for specified BLE connection. Return value of 0 means MTU size could not be determined. virtual uint16_t GetMTU(BLE_CONNECTION_OBJECT connObj) const = 0; - // Data path calling convention: - // A 'true' return value from a Send* function indicates that the characteristic was written or updated - // successfully. A 'false' value indicates failure, and is used to report this failure to the user via the return - // value of chipConnection::SendMessage. - // Send GATT characteristic indication request - virtual bool SendIndication(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) = 0; + virtual CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) = 0; // Send GATT characteristic write request - virtual bool SendWriteRequest(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) = 0; + virtual CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) = 0; }; } /* namespace Ble */ diff --git a/src/ble/tests/TestBleLayer.cpp b/src/ble/tests/TestBleLayer.cpp index 29c8c472198221..fe3c82db1a1917 100644 --- a/src/ble/tests/TestBleLayer.cpp +++ b/src/ble/tests/TestBleLayer.cpp @@ -132,19 +132,23 @@ class TestBleLayer : public BleLayer, /// // Implementation of BlePlatformDelegate - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *) override { return true; } - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *) override { return true; } - bool CloseConnection(BLE_CONNECTION_OBJECT connObj) override { return true; } - uint16_t GetMTU(BLE_CONNECTION_OBJECT connObj) const override { return 0; } - bool SendIndication(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *) override { - return true; + return CHIP_NO_ERROR; } - bool SendWriteRequest(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *) override { - return true; + return CHIP_NO_ERROR; + } + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT) override { return CHIP_NO_ERROR; } + uint16_t GetMTU(BLE_CONNECTION_OBJECT) const override { return 0; } + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *, PacketBufferHandle) override + { + return CHIP_NO_ERROR; + } + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT, const ChipBleUUID *, const ChipBleUUID *, PacketBufferHandle) override + { + return CHIP_NO_ERROR; } private: diff --git a/src/controller/BUILD.gn b/src/controller/BUILD.gn index b06b2defecb8f2..b4e81158d497e8 100644 --- a/src/controller/BUILD.gn +++ b/src/controller/BUILD.gn @@ -74,6 +74,7 @@ static_library("controller") { "CommandSenderAllocator.h", "CommissioneeDeviceProxy.h", "CommissioningDelegate.h", + "CommissioningWindowParams.h", "DeviceDiscoveryDelegate.h", "DevicePairingDelegate.h", "InvokeInteraction.h", diff --git a/src/controller/CHIPDeviceController.h b/src/controller/CHIPDeviceController.h index 1ab85ca0dc182b..1c4b490faa891a 100644 --- a/src/controller/CHIPDeviceController.h +++ b/src/controller/CHIPDeviceController.h @@ -243,9 +243,10 @@ class DLL_EXPORT DeviceController : public AbstractDnssdDiscoveryController * An error return from this function means that neither callback has been * called yet, and neither callback will be called in the future. */ - CHIP_ERROR GetConnectedDevice(NodeId peerNodeId, Callback::Callback * onConnection, - chip::Callback::Callback * onFailure, - TransportPayloadCapability transportPayloadCapability = TransportPayloadCapability::kMRPPayload) + virtual CHIP_ERROR + GetConnectedDevice(NodeId peerNodeId, Callback::Callback * onConnection, + Callback::Callback * onFailure, + TransportPayloadCapability transportPayloadCapability = TransportPayloadCapability::kMRPPayload) { VerifyOrReturnError(mState == State::Initialized, CHIP_ERROR_INCORRECT_STATE); mSystemState->CASESessionMgr()->FindOrEstablishSession(ScopedNodeId(peerNodeId, GetFabricIndex()), onConnection, onFailure, diff --git a/src/controller/CommissioningWindowOpener.cpp b/src/controller/CommissioningWindowOpener.cpp index 47666972137bcc..35011e69565c4a 100644 --- a/src/controller/CommissioningWindowOpener.cpp +++ b/src/controller/CommissioningWindowOpener.cpp @@ -43,11 +43,12 @@ CHIP_ERROR CommissioningWindowOpener::OpenBasicCommissioningWindow(NodeId device // Basic commissioning does not use the setup payload. - mCommissioningWindowOption = CommissioningWindowOption::kOriginalSetupCode; - mBasicCommissioningWindowCallback = callback; - mCommissioningWindowCallback = nullptr; - mNodeId = deviceId; - mCommissioningWindowTimeout = timeout; + mCommissioningWindowOption = CommissioningWindowOption::kOriginalSetupCode; + mBasicCommissioningWindowCallback = callback; + mCommissioningWindowCallback = nullptr; + mCommissioningWindowVerifierCallback = nullptr; + mNodeId = deviceId; + mCommissioningWindowTimeout = timeout; mNextStep = Step::kOpenCommissioningWindow; return mController->GetConnectedDevice(mNodeId, &mDeviceConnected, &mDeviceConnectionFailure); @@ -59,60 +60,74 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(NodeId deviceId, S Callback::Callback * callback, SetupPayload & payload, bool readVIDPIDAttributes) { - VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningStart, CHIP_ERROR_INCORRECT_STATE); + return OpenCommissioningWindow(CommissioningWindowPasscodeParams() + .SetNodeId(deviceId) + .SetTimeout(timeout) + .SetIteration(iteration) + .SetDiscriminator(discriminator) + .SetSetupPIN(setupPIN) + .SetSalt(salt) + .SetReadVIDPIDAttributes(readVIDPIDAttributes) + .SetCallback(callback), + payload); +} - VerifyOrReturnError(kSpake2p_Min_PBKDF_Iterations <= iteration && iteration <= kSpake2p_Max_PBKDF_Iterations, +CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const CommissioningWindowPasscodeParams & params, + SetupPayload & payload) +{ + VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningStart, CHIP_ERROR_INCORRECT_STATE); + VerifyOrReturnError(params.HasNodeId(), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(params.HasDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(kSpake2p_Min_PBKDF_Iterations <= params.GetIteration() && + params.GetIteration() <= kSpake2p_Max_PBKDF_Iterations, + CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(!params.HasSalt() || + (params.GetSalt().size() >= kSpake2p_Min_PBKDF_Salt_Length && + params.GetSalt().size() <= kSpake2p_Max_PBKDF_Salt_Length), CHIP_ERROR_INVALID_ARGUMENT); - VerifyOrReturnError( - !salt.HasValue() || - (salt.Value().size() >= kSpake2p_Min_PBKDF_Salt_Length && salt.Value().size() <= kSpake2p_Max_PBKDF_Salt_Length), - CHIP_ERROR_INVALID_ARGUMENT); mSetupPayload = SetupPayload(); - if (setupPIN.HasValue()) + if (params.HasSetupPIN()) { - if (!SetupPayload::IsValidSetupPIN(setupPIN.Value())) - { - return CHIP_ERROR_INVALID_ARGUMENT; - } - + VerifyOrReturnError(SetupPayload::IsValidSetupPIN(params.GetSetupPIN()), CHIP_ERROR_INVALID_ARGUMENT); mCommissioningWindowOption = CommissioningWindowOption::kTokenWithProvidedPIN; - mSetupPayload.setUpPINCode = setupPIN.Value(); + mSetupPayload.setUpPINCode = params.GetSetupPIN(); } else { mCommissioningWindowOption = CommissioningWindowOption::kTokenWithRandomPIN; } - if (salt.HasValue()) + mSetupPayload.version = 0; + mDiscriminator.SetLongValue(params.GetDiscriminator()); + mSetupPayload.discriminator = mDiscriminator; + mSetupPayload.rendezvousInformation.SetValue(RendezvousInformationFlag::kOnNetwork); + + if (params.HasSalt()) { - memcpy(mPBKDFSaltBuffer, salt.Value().data(), salt.Value().size()); - mPBKDFSalt = ByteSpan(mPBKDFSaltBuffer, salt.Value().size()); + memcpy(mPBKDFSaltBuffer, params.GetSalt().data(), params.GetSalt().size()); + mPBKDFSalt = ByteSpan(mPBKDFSaltBuffer, params.GetSalt().size()); } else { ReturnErrorOnFailure(DRBG_get_bytes(mPBKDFSaltBuffer, sizeof(mPBKDFSaltBuffer))); mPBKDFSalt = ByteSpan(mPBKDFSaltBuffer); } + mPBKDFIterations = params.GetIteration(); - mSetupPayload.version = 0; - mSetupPayload.discriminator.SetLongValue(discriminator); - mSetupPayload.rendezvousInformation.SetValue(RendezvousInformationFlag::kOnNetwork); - - mCommissioningWindowCallback = callback; - mBasicCommissioningWindowCallback = nullptr; - mNodeId = deviceId; - mCommissioningWindowTimeout = timeout; - mPBKDFIterations = iteration; - - bool randomSetupPIN = !setupPIN.HasValue(); + bool randomSetupPIN = !params.HasSetupPIN(); ReturnErrorOnFailure( PASESession::GeneratePASEVerifier(mVerifier, mPBKDFIterations, mPBKDFSalt, randomSetupPIN, mSetupPayload.setUpPINCode)); - payload = mSetupPayload; + payload = mSetupPayload; + mCommissioningWindowCallback = params.GetCallback(); + mBasicCommissioningWindowCallback = nullptr; + mCommissioningWindowVerifierCallback = nullptr; + mNodeId = params.GetNodeId(); + mCommissioningWindowTimeout = params.GetTimeout(); - if (readVIDPIDAttributes) + if (params.GetReadVIDPIDAttributes()) { mNextStep = Step::kReadVID; } @@ -124,6 +139,35 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(NodeId deviceId, S return mController->GetConnectedDevice(mNodeId, &mDeviceConnected, &mDeviceConnectionFailure); } +CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const CommissioningWindowVerifierParams & params) +{ + VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningStart, CHIP_ERROR_INCORRECT_STATE); + VerifyOrReturnError(params.HasNodeId(), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(params.HasDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(kSpake2p_Min_PBKDF_Iterations <= params.GetIteration() && + params.GetIteration() <= kSpake2p_Max_PBKDF_Iterations, + CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(params.GetSalt().size() >= kSpake2p_Min_PBKDF_Salt_Length && + params.GetSalt().size() <= kSpake2p_Max_PBKDF_Salt_Length, + CHIP_ERROR_INVALID_ARGUMENT); + memcpy(mPBKDFSaltBuffer, params.GetSalt().data(), params.GetSalt().size()); + mPBKDFSalt = ByteSpan(mPBKDFSaltBuffer, params.GetSalt().size()); + + ReturnErrorOnFailure(mVerifier.Deserialize(params.GetVerifier())); + mCommissioningWindowVerifierCallback = params.GetCallback(); + mBasicCommissioningWindowCallback = nullptr; + mCommissioningWindowCallback = nullptr; + mNodeId = params.GetNodeId(); + mCommissioningWindowTimeout = params.GetTimeout(); + mPBKDFIterations = params.GetIteration(); + mCommissioningWindowOption = CommissioningWindowOption::kTokenWithProvidedPIN; + mDiscriminator.SetLongValue(params.GetDiscriminator()); + + mNextStep = Step::kOpenCommissioningWindow; + + return mController->GetConnectedDevice(mNodeId, &mDeviceConnected, &mDeviceConnectionFailure); +} + CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindowInternal(Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle) { @@ -142,7 +186,7 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindowInternal(Messaging: AdministratorCommissioning::Commands::OpenCommissioningWindow::Type request; request.commissioningTimeout = mCommissioningWindowTimeout.count(); request.PAKEPasscodeVerifier = serializedVerifierSpan; - request.discriminator = mSetupPayload.discriminator.GetLongValue(); + request.discriminator = mDiscriminator.GetLongValue(); request.iterations = mPBKDFIterations; request.salt = mPBKDFSalt; @@ -230,15 +274,19 @@ void CommissioningWindowOpener::OnOpenCommissioningWindowSuccess(void * context, self->mCommissioningWindowCallback->mCall(self->mCommissioningWindowCallback->mContext, self->mNodeId, CHIP_NO_ERROR, self->mSetupPayload); - // Don't touch `self` anymore; it might have been destroyed by the - // callee. + // Don't touch `self` anymore; it might have been destroyed by the callee. + } + else if (self->mCommissioningWindowVerifierCallback != nullptr) + { + self->mCommissioningWindowVerifierCallback->mCall(self->mCommissioningWindowVerifierCallback->mContext, self->mNodeId, + CHIP_NO_ERROR); + // Don't touch `self` anymore; it might have been destroyed by the callee. } else if (self->mBasicCommissioningWindowCallback != nullptr) { self->mBasicCommissioningWindowCallback->mCall(self->mBasicCommissioningWindowCallback->mContext, self->mNodeId, CHIP_NO_ERROR); - // Don't touch `self` anymore; it might have been destroyed by the - // callee. + // Don't touch `self` anymore; it might have been destroyed by the callee. } } @@ -252,6 +300,11 @@ void CommissioningWindowOpener::OnOpenCommissioningWindowFailure(void * context, self->mCommissioningWindowCallback->mCall(self->mCommissioningWindowCallback->mContext, self->mNodeId, error, SetupPayload()); } + else if (self->mCommissioningWindowVerifierCallback != nullptr) + { + self->mCommissioningWindowVerifierCallback->mCall(self->mCommissioningWindowVerifierCallback->mContext, self->mNodeId, + error); + } else if (self->mBasicCommissioningWindowCallback != nullptr) { self->mBasicCommissioningWindowCallback->mCall(self->mBasicCommissioningWindowCallback->mContext, self->mNodeId, error); diff --git a/src/controller/CommissioningWindowOpener.h b/src/controller/CommissioningWindowOpener.h index 10547dce3a662d..b657345ca53219 100644 --- a/src/controller/CommissioningWindowOpener.h +++ b/src/controller/CommissioningWindowOpener.h @@ -20,22 +20,17 @@ #include #include #include +#include #include #include #include #include #include #include -#include namespace chip { namespace Controller { -// Passing SetupPayload by value on purpose, in case a consumer decides to reuse -// this object from inside the callback. -typedef void (*OnOpenCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status, SetupPayload payload); -typedef void (*OnOpenBasicCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status); - /** * A helper class to open a commissioning window given some parameters. */ @@ -107,6 +102,38 @@ class CommissioningWindowOpener Callback::Callback * callback, SetupPayload & payload, bool readVIDPIDAttributes = false); + /** + * @brief + * Try to look up the device attached to our controller with the given + * node id and ask it to re-enter commissioning mode with a PASE verifier + * derived from the given information and the given discriminator. The + * device will exit commissioning mode after a successful commissioning, + * or after the given `timeout` time. + * + * @param[in] params The parameters required to open an enhanced commissioning window + * with the provided or generated passcode. + * @param[out] payload The setup payload, not including the VID/PID bits, + * even if those were asked for, that is generated + * based on the passed-in information. The payload + * provided to the callback function, unlike this + * out parameter, will include the VID/PID bits if + * readVIDPIDAttributes is true. + */ + CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowPasscodeParams & params, SetupPayload & payload); + + /** + * @brief + * Try to look up the device attached to our controller with the given + * node id and ask it to re-enter commissioning mode with a PASE verifier + * derived from the given information and the given discriminator. The + * device will exit commissioning mode after a successful commissioning, + * or after the given `timeout` time. + * + * @param[in] params The parameters required to open an enhanced commissioning window + * with the provided PAKE passcode verifier. + */ + CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowVerifierParams & params); + private: enum class Step : uint8_t { @@ -133,9 +160,11 @@ class CommissioningWindowOpener DeviceController * const mController = nullptr; Step mNextStep = Step::kAcceptCommissioningStart; - Callback::Callback * mCommissioningWindowCallback = nullptr; - Callback::Callback * mBasicCommissioningWindowCallback = nullptr; + Callback::Callback * mCommissioningWindowCallback = nullptr; + Callback::Callback * mCommissioningWindowVerifierCallback = nullptr; + Callback::Callback * mBasicCommissioningWindowCallback = nullptr; SetupPayload mSetupPayload; + SetupDiscriminator mDiscriminator{}; NodeId mNodeId = kUndefinedNodeId; System::Clock::Seconds16 mCommissioningWindowTimeout = System::Clock::kZero; CommissioningWindowOption mCommissioningWindowOption = CommissioningWindowOption::kOriginalSetupCode; diff --git a/src/controller/CommissioningWindowParams.h b/src/controller/CommissioningWindowParams.h new file mode 100644 index 00000000000000..a4f0e43fa096c2 --- /dev/null +++ b/src/controller/CommissioningWindowParams.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace chip { +namespace Controller { + +// Passing SetupPayload by value on purpose, in case a consumer decides to reuse +// this object from inside the callback. +typedef void (*OnOpenCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status, SetupPayload payload); +typedef void (*OnOpenCommissioningWindowWithVerifier)(void * context, NodeId deviceId, CHIP_ERROR status); +typedef void (*OnOpenBasicCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status); + +template +class CommissioningWindowCommonParams +{ +public: + CommissioningWindowCommonParams() = default; + + bool HasNodeId() const { return mNodeId != kUndefinedNodeId; } + NodeId GetNodeId() const + { + VerifyOrDie(HasNodeId()); + return mNodeId; + } + // The node identifier of device + Derived & SetNodeId(NodeId nodeId) + { + mNodeId = nodeId; + return static_cast(*this); + } + + System::Clock::Seconds16 GetTimeout() const { return mTimeout; } + // The duration for which the commissioning window should remain open. + Derived & SetTimeout(System::Clock::Seconds16 timeout) + { + mTimeout = timeout; + return static_cast(*this); + } + Derived & SetTimeout(uint16_t timeoutSeconds) { return SetTimeout(System::Clock::Seconds16(timeoutSeconds)); } + + // The PAKE iteration count associated with the PAKE Passcode ID and + // ephemeral PAKE passcode verifier to be used for this commissioning. + uint32_t GetIteration() const { return mIteration; } + Derived & SetIteration(uint32_t iteration) + { + mIteration = iteration; + return static_cast(*this); + } + + // The long discriminator for the DNS-SD advertisement. + uint16_t GetDiscriminator() const { return mDiscriminator.Value(); } + bool HasDiscriminator() const { return mDiscriminator.HasValue(); } + Derived & SetDiscriminator(uint16_t discriminator) + { + mDiscriminator = MakeOptional(discriminator); + return static_cast(*this); + } + +private: + NodeId mNodeId = kUndefinedNodeId; + System::Clock::Seconds16 mTimeout = System::Clock::Seconds16(300); // Defaulting + uint32_t mIteration = 1000; // Defaulting + Optional mDiscriminator = NullOptional; // Using optional type to avoid picking a sentinnel in valid range +}; + +class CommissioningWindowPasscodeParams : public CommissioningWindowCommonParams +{ +public: + CommissioningWindowPasscodeParams() = default; + + bool HasSetupPIN() const { return mSetupPIN.HasValue(); } + // Get the value of setup PIN (Passcode) if present, crashes otherwise. + uint32_t GetSetupPIN() const { return mSetupPIN.Value(); } + // The setup PIN (Passcode) to use. A random one will be generated if not provided. + CommissioningWindowPasscodeParams & SetSetupPIN(uint32_t setupPIN) { return SetSetupPIN(MakeOptional(setupPIN)); } + // The setup PIN (Passcode) to use. A random one will be generated if NullOptional is used. + CommissioningWindowPasscodeParams & SetSetupPIN(Optional setupPIN) + { + mSetupPIN = setupPIN; + return *this; + } + + bool HasSalt() const { return mSalt.HasValue(); } + // Get the value of salt if present. + // Dies if absent! Make sure to check HasSalt() + ByteSpan GetSalt() const { return mSalt.Value(); } + // The salt to use. A random one will be generated if not provided. + // If provided, must be at least kSpake2p_Min_PBKDF_Salt_Length bytes + // and at most kSpake2p_Max_PBKDF_Salt_Length bytes in length. + CommissioningWindowPasscodeParams & SetSalt(ByteSpan salt) { return SetSalt(MakeOptional(salt)); } + // The salt to use. A random one will be generated if NullOptional is used. + // If provided, must be at least kSpake2p_Min_PBKDF_Salt_Length bytes + // and at most kSpake2p_Max_PBKDF_Salt_Length bytes in length. + // Note that this an overloaded optional arg function to support existing APIs. + CommissioningWindowPasscodeParams & SetSalt(Optional salt) + { + mSalt = salt; + return *this; + } + + bool GetReadVIDPIDAttributes() const { return mReadVIDPIDAttributes; } + // Should the API internally read VID and PID from the device while opening the + // commissioning window. If this argument is `true`, the API will read VID and PID + // from the device and include them in the setup payload passed to the callback. + CommissioningWindowPasscodeParams & SetReadVIDPIDAttributes(bool readVIDPIDAttributes) + { + mReadVIDPIDAttributes = readVIDPIDAttributes; + return *this; + } + + Callback::Callback * GetCallback() const { return mCallback; } + // The function to be called on success or failure of opening the commissioning window. + // This will include the SetupPayload generated from provided parameters. + CommissioningWindowPasscodeParams & SetCallback(Callback::Callback * callback) + { + mCallback = callback; + return *this; + } + +private: + Optional mSetupPIN = NullOptional; + Optional mSalt = NullOptional; + bool mReadVIDPIDAttributes = false; + Callback::Callback * mCallback = nullptr; +}; + +class CommissioningWindowVerifierParams : public CommissioningWindowCommonParams +{ +public: + CommissioningWindowVerifierParams() = default; + + ByteSpan GetVerifier() const { return mVerifier.Value(); } + // The PAKE passcode verifier generated with enclosed iterations, salt and not-enclosed passcode. + CommissioningWindowVerifierParams & SetVerifier(ByteSpan verifier) + { + mVerifier = MakeOptional(verifier); + return *this; + } + + ByteSpan GetSalt() const { return mSalt.Value(); } + // The salt that was used to generate the verifier. + // It must be at least kSpake2p_Min_PBKDF_Salt_Length bytes. + // Note: This is REQUIRED when verifier is used + CommissioningWindowVerifierParams & SetSalt(ByteSpan salt) + { + mSalt = MakeOptional(salt); + return *this; + } + + Callback::Callback * GetCallback() const { return mCallback; } + // The function to be called on success or failure of opening the + // commissioning window. This will NOT include the SetupPayload. + CommissioningWindowVerifierParams & SetCallback(Callback::Callback * callback) + { + mCallback = callback; + return *this; + } + +private: + Optional mSalt; + Optional mVerifier; + Callback::Callback * mCallback = nullptr; +}; + +} // namespace Controller +} // namespace chip diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter index 066f34e20d2731..be40c3d1b47fce 100644 --- a/src/controller/data_model/controller-clusters.matter +++ b/src/controller/data_model/controller-clusters.matter @@ -216,7 +216,7 @@ deprecated cluster OnOffSwitchConfiguration = 7 { /** Attributes and commands for controlling devices that can be set to a level between fully 'On' and fully 'Off.' */ cluster LevelControl = 8 { - revision 5; + revision 6; enum MoveModeEnum : enum8 { kUp = 0; @@ -7022,7 +7022,7 @@ cluster ThermostatUserInterfaceConfiguration = 516 { /** Attributes and commands for controlling the color properties of a color-capable light. */ cluster ColorControl = 768 { - revision 6; + revision 7; enum ColorLoopAction : enum8 { kDeactivate = 0; @@ -8168,16 +8168,13 @@ cluster ThreadNetworkDirectory = 1107 { revision 1; struct ThreadNetworkStruct { - int64u extendedPanID = 0; + octet_string<8> extendedPanID = 0; char_string<16> networkName = 1; int16u channel = 2; + int64u activeTimestamp = 3; } - info event access(read: operate) NetworkChanged = 0 { - int64u extendedPanID = 0; - } - - attribute access(read: manage, write: manage) nullable int64u preferredExtendedPanID = 0; + attribute access(read: manage, write: manage) nullable octet_string<8> preferredExtendedPanID = 0; readonly attribute access(read: operate) ThreadNetworkStruct threadNetworks[] = 1; readonly attribute int8u threadNetworkTableSize = 2; readonly attribute command_id generatedCommandList[] = 65528; @@ -8192,11 +8189,11 @@ cluster ThreadNetworkDirectory = 1107 { } request struct RemoveNetworkRequest { - int64u extendedPanID = 0; + octet_string<8> extendedPanID = 0; } request struct GetOperationalDatasetRequest { - int64u extendedPanID = 0; + octet_string<8> extendedPanID = 0; } response struct OperationalDatasetResponse = 3 { diff --git a/src/controller/data_model/controller-clusters.zap b/src/controller/data_model/controller-clusters.zap index 3c95a3320ba91b..97d960bb7f4d30 100644 --- a/src/controller/data_model/controller-clusters.zap +++ b/src/controller/data_model/controller-clusters.zap @@ -416,7 +416,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "5", + "defaultValue": "6", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -4120,7 +4120,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "6", + "defaultValue": "7", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -4816,6 +4816,82 @@ } ] }, + { + "name": "Thread Network Directory", + "code": 1107, + "mfgCode": null, + "define": "THREAD_NETWORK_DIRECTORY_CLUSTER", + "side": "client", + "enabled": 1, + "commands": [ + { + "name": "AddNetwork", + "code": 0, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "RemoveNetwork", + "code": 1, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "GetOperationalDataset", + "code": 2, + "mfgCode": null, + "source": "client", + "isIncoming": 0, + "isEnabled": 1 + }, + { + "name": "OperationalDatasetResponse", + "code": 3, + "mfgCode": null, + "source": "server", + "isIncoming": 1, + "isEnabled": 1 + } + ], + "attributes": [ + { + "name": "FeatureMap", + "code": 65532, + "mfgCode": null, + "side": "client", + "type": "bitmap32", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "0", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, + { + "name": "ClusterRevision", + "code": 65533, + "mfgCode": null, + "side": "client", + "type": "int16u", + "included": 1, + "storageOption": "RAM", + "singleton": 0, + "bounded": 0, + "defaultValue": "1", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + } + ] + }, { "name": "Wake on LAN", "code": 1283, diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java index 98e208fd3815ee..5369a5c42d4a26 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java @@ -54867,12 +54867,12 @@ public void onResponse(StructType invokeStructValue) { } - public void removeNetwork(DefaultClusterCallback callback, Long extendedPanID, int timedInvokeTimeoutMs) { + public void removeNetwork(DefaultClusterCallback callback, byte[] extendedPanID, int timedInvokeTimeoutMs) { final long commandId = 1L; ArrayList elements = new ArrayList<>(); final long extendedPanIDFieldID = 0L; - BaseTLVType extendedPanIDtlvValue = new UIntType(extendedPanID); + BaseTLVType extendedPanIDtlvValue = new ByteArrayType(extendedPanID); elements.add(new StructElement(extendedPanIDFieldID, extendedPanIDtlvValue)); StructType commandArgs = new StructType(elements); @@ -54884,12 +54884,12 @@ public void onResponse(StructType invokeStructValue) { } - public void getOperationalDataset(OperationalDatasetResponseCallback callback, Long extendedPanID, int timedInvokeTimeoutMs) { + public void getOperationalDataset(OperationalDatasetResponseCallback callback, byte[] extendedPanID, int timedInvokeTimeoutMs) { final long commandId = 2L; ArrayList elements = new ArrayList<>(); final long extendedPanIDFieldID = 0L; - BaseTLVType extendedPanIDtlvValue = new UIntType(extendedPanID); + BaseTLVType extendedPanIDtlvValue = new ByteArrayType(extendedPanID); elements.add(new StructElement(extendedPanIDFieldID, extendedPanIDtlvValue)); StructType commandArgs = new StructType(elements); @@ -54915,7 +54915,7 @@ public interface OperationalDatasetResponseCallback extends BaseClusterCallback } public interface PreferredExtendedPanIDAttributeCallback extends BaseAttributeCallback { - void onSuccess(@Nullable Long value); + void onSuccess(@Nullable byte[] value); } public interface ThreadNetworksAttributeCallback extends BaseAttributeCallback { @@ -54945,18 +54945,18 @@ public void readPreferredExtendedPanIDAttribute( readAttribute(new ReportCallbackImpl(callback, path) { @Override public void onSuccess(byte[] tlv) { - @Nullable Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv); + @Nullable byte[] value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv); callback.onSuccess(value); } }, PREFERRED_EXTENDED_PAN_I_D_ATTRIBUTE_ID, true); } - public void writePreferredExtendedPanIDAttribute(DefaultClusterCallback callback, Long value) { + public void writePreferredExtendedPanIDAttribute(DefaultClusterCallback callback, byte[] value) { writePreferredExtendedPanIDAttribute(callback, value, 0); } - public void writePreferredExtendedPanIDAttribute(DefaultClusterCallback callback, Long value, int timedWriteTimeoutMs) { - BaseTLVType tlvValue = value != null ? new UIntType(value) : new NullType(); + public void writePreferredExtendedPanIDAttribute(DefaultClusterCallback callback, byte[] value, int timedWriteTimeoutMs) { + BaseTLVType tlvValue = value != null ? new ByteArrayType(value) : new NullType(); writeAttribute(new WriteAttributesCallbackImpl(callback), PREFERRED_EXTENDED_PAN_I_D_ATTRIBUTE_ID, tlvValue, timedWriteTimeoutMs); } @@ -54967,7 +54967,7 @@ public void subscribePreferredExtendedPanIDAttribute( subscribeAttribute(new ReportCallbackImpl(callback, path) { @Override public void onSuccess(byte[] tlv) { - @Nullable Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv); + @Nullable byte[] value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv); callback.onSuccess(value); } }, PREFERRED_EXTENDED_PAN_I_D_ATTRIBUTE_ID, minInterval, maxInterval); diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipEventStructs.java b/src/controller/java/generated/java/chip/devicecontroller/ChipEventStructs.java index d256c91c32d9ed..6ab2b64ce65000 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ChipEventStructs.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ChipEventStructs.java @@ -5614,52 +5614,6 @@ public String toString() { return output.toString(); } } -public static class ThreadNetworkDirectoryClusterNetworkChangedEvent { - public Long extendedPanID; - private static final long EXTENDED_PAN_I_D_ID = 0L; - - public ThreadNetworkDirectoryClusterNetworkChangedEvent( - Long extendedPanID - ) { - this.extendedPanID = extendedPanID; - } - - public StructType encodeTlv() { - ArrayList values = new ArrayList<>(); - values.add(new StructElement(EXTENDED_PAN_I_D_ID, new UIntType(extendedPanID))); - - return new StructType(values); - } - - public static ThreadNetworkDirectoryClusterNetworkChangedEvent decodeTlv(BaseTLVType tlvValue) { - if (tlvValue == null || tlvValue.type() != TLVType.Struct) { - return null; - } - Long extendedPanID = null; - for (StructElement element: ((StructType)tlvValue).value()) { - if (element.contextTagNum() == EXTENDED_PAN_I_D_ID) { - if (element.value(BaseTLVType.class).type() == TLVType.UInt) { - UIntType castingValue = element.value(UIntType.class); - extendedPanID = castingValue.value(Long.class); - } - } - } - return new ThreadNetworkDirectoryClusterNetworkChangedEvent( - extendedPanID - ); - } - - @Override - public String toString() { - StringBuilder output = new StringBuilder(); - output.append("ThreadNetworkDirectoryClusterNetworkChangedEvent {\n"); - output.append("\textendedPanID: "); - output.append(extendedPanID); - output.append("\n"); - output.append("}\n"); - return output.toString(); - } -} public static class TargetNavigatorClusterTargetUpdatedEvent { public ArrayList targetList; public Integer currentTarget; diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java index 94bd7622678351..11cba416fb733c 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java @@ -10067,28 +10067,33 @@ public String toString() { } } public static class ThreadNetworkDirectoryClusterThreadNetworkStruct { - public Long extendedPanID; + public byte[] extendedPanID; public String networkName; public Integer channel; + public Long activeTimestamp; private static final long EXTENDED_PAN_I_D_ID = 0L; private static final long NETWORK_NAME_ID = 1L; private static final long CHANNEL_ID = 2L; + private static final long ACTIVE_TIMESTAMP_ID = 3L; public ThreadNetworkDirectoryClusterThreadNetworkStruct( - Long extendedPanID, + byte[] extendedPanID, String networkName, - Integer channel + Integer channel, + Long activeTimestamp ) { this.extendedPanID = extendedPanID; this.networkName = networkName; this.channel = channel; + this.activeTimestamp = activeTimestamp; } public StructType encodeTlv() { ArrayList values = new ArrayList<>(); - values.add(new StructElement(EXTENDED_PAN_I_D_ID, new UIntType(extendedPanID))); + values.add(new StructElement(EXTENDED_PAN_I_D_ID, new ByteArrayType(extendedPanID))); values.add(new StructElement(NETWORK_NAME_ID, new StringType(networkName))); values.add(new StructElement(CHANNEL_ID, new UIntType(channel))); + values.add(new StructElement(ACTIVE_TIMESTAMP_ID, new UIntType(activeTimestamp))); return new StructType(values); } @@ -10097,14 +10102,15 @@ public static ThreadNetworkDirectoryClusterThreadNetworkStruct decodeTlv(BaseTLV if (tlvValue == null || tlvValue.type() != TLVType.Struct) { return null; } - Long extendedPanID = null; + byte[] extendedPanID = null; String networkName = null; Integer channel = null; + Long activeTimestamp = null; for (StructElement element: ((StructType)tlvValue).value()) { if (element.contextTagNum() == EXTENDED_PAN_I_D_ID) { - if (element.value(BaseTLVType.class).type() == TLVType.UInt) { - UIntType castingValue = element.value(UIntType.class); - extendedPanID = castingValue.value(Long.class); + if (element.value(BaseTLVType.class).type() == TLVType.ByteArray) { + ByteArrayType castingValue = element.value(ByteArrayType.class); + extendedPanID = castingValue.value(byte[].class); } } else if (element.contextTagNum() == NETWORK_NAME_ID) { if (element.value(BaseTLVType.class).type() == TLVType.String) { @@ -10116,12 +10122,18 @@ public static ThreadNetworkDirectoryClusterThreadNetworkStruct decodeTlv(BaseTLV UIntType castingValue = element.value(UIntType.class); channel = castingValue.value(Integer.class); } + } else if (element.contextTagNum() == ACTIVE_TIMESTAMP_ID) { + if (element.value(BaseTLVType.class).type() == TLVType.UInt) { + UIntType castingValue = element.value(UIntType.class); + activeTimestamp = castingValue.value(Long.class); + } } } return new ThreadNetworkDirectoryClusterThreadNetworkStruct( extendedPanID, networkName, - channel + channel, + activeTimestamp ); } @@ -10130,7 +10142,7 @@ public String toString() { StringBuilder output = new StringBuilder(); output.append("ThreadNetworkDirectoryClusterThreadNetworkStruct {\n"); output.append("\textendedPanID: "); - output.append(extendedPanID); + output.append(Arrays.toString(extendedPanID)); output.append("\n"); output.append("\tnetworkName: "); output.append(networkName); @@ -10138,6 +10150,9 @@ public String toString() { output.append("\tchannel: "); output.append(channel); output.append("\n"); + output.append("\tactiveTimestamp: "); + output.append(activeTimestamp); + output.append("\n"); output.append("}\n"); return output.toString(); } diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java index b733ca22822c88..fc0a28a6d4eb0c 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java @@ -14988,8 +14988,7 @@ public static Attribute value(long id) throws NoSuchFieldError { } } - public enum Event { - NetworkChanged(0L),; + public enum Event {; private final long id; Event(long id) { this.id = id; diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java index 23dc3048a5fb3d..1538d4f47415ad 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java @@ -18117,9 +18117,9 @@ public void setCallbackDelegate(ClusterCommandCallback callback) { } @Override - public void onSuccess(@Nullable Long value) { + public void onSuccess(@Nullable byte[] value) { Map responseValues = new LinkedHashMap<>(); - CommandResponseInfo commandResponseInfo = new CommandResponseInfo("value", "Long"); + CommandResponseInfo commandResponseInfo = new CommandResponseInfo("value", "byte[]"); responseValues.put(commandResponseInfo, value); callback.onSuccess(responseValues); } @@ -27690,13 +27690,13 @@ public Map> getCommandMap() { Map threadNetworkDirectoryremoveNetworkCommandParams = new LinkedHashMap(); - CommandParameterInfo threadNetworkDirectoryremoveNetworkextendedPanIDCommandParameterInfo = new CommandParameterInfo("extendedPanID", Long.class, Long.class); + CommandParameterInfo threadNetworkDirectoryremoveNetworkextendedPanIDCommandParameterInfo = new CommandParameterInfo("extendedPanID", byte[].class, byte[].class); threadNetworkDirectoryremoveNetworkCommandParams.put("extendedPanID",threadNetworkDirectoryremoveNetworkextendedPanIDCommandParameterInfo); InteractionInfo threadNetworkDirectoryremoveNetworkInteractionInfo = new InteractionInfo( (cluster, callback, commandArguments) -> { ((ChipClusters.ThreadNetworkDirectoryCluster) cluster) .removeNetwork((DefaultClusterCallback) callback - , (Long) + , (byte[]) commandArguments.get("extendedPanID"), 10000 ); }, @@ -27707,13 +27707,13 @@ public Map> getCommandMap() { Map threadNetworkDirectorygetOperationalDatasetCommandParams = new LinkedHashMap(); - CommandParameterInfo threadNetworkDirectorygetOperationalDatasetextendedPanIDCommandParameterInfo = new CommandParameterInfo("extendedPanID", Long.class, Long.class); + CommandParameterInfo threadNetworkDirectorygetOperationalDatasetextendedPanIDCommandParameterInfo = new CommandParameterInfo("extendedPanID", byte[].class, byte[].class); threadNetworkDirectorygetOperationalDatasetCommandParams.put("extendedPanID",threadNetworkDirectorygetOperationalDatasetextendedPanIDCommandParameterInfo); InteractionInfo threadNetworkDirectorygetOperationalDatasetInteractionInfo = new InteractionInfo( (cluster, callback, commandArguments) -> { ((ChipClusters.ThreadNetworkDirectoryCluster) cluster) .getOperationalDataset((ChipClusters.ThreadNetworkDirectoryCluster.OperationalDatasetResponseCallback) callback - , (Long) + , (byte[]) commandArguments.get("extendedPanID") , 10000); diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java index 715cb477319345..28cba2abd728f8 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterWriteMapping.java @@ -3717,8 +3717,8 @@ public Map> getWriteAttributeMap() { CommandParameterInfo threadNetworkDirectorypreferredExtendedPanIDCommandParameterInfo = new CommandParameterInfo( "value", - Long.class, - Long.class + byte[].class, + byte[].class ); writeThreadNetworkDirectoryPreferredExtendedPanIDCommandParams.put( "value", @@ -3728,7 +3728,7 @@ public Map> getWriteAttributeMap() { (cluster, callback, commandArguments) -> { ((ChipClusters.ThreadNetworkDirectoryCluster) cluster).writePreferredExtendedPanIDAttribute( (DefaultClusterCallback) callback, - (Long) commandArguments.get("value") + (byte[]) commandArguments.get("value") ); }, () -> new ClusterInfoMapping.DelegatedDefaultClusterCallback(), diff --git a/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt b/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt deleted file mode 100644 index b90c6e8126260b..00000000000000 --- a/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright (c) 2023 Project CHIP Authors - * - * 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. - */ -package chip.devicecontroller.cluster.eventstructs - -import chip.devicecontroller.cluster.* -import matter.tlv.ContextSpecificTag -import matter.tlv.Tag -import matter.tlv.TlvReader -import matter.tlv.TlvWriter - -class ThreadNetworkDirectoryClusterNetworkChangedEvent(val extendedPanID: ULong) { - override fun toString(): String = buildString { - append("ThreadNetworkDirectoryClusterNetworkChangedEvent {\n") - append("\textendedPanID : $extendedPanID\n") - append("}\n") - } - - fun toTlv(tlvTag: Tag, tlvWriter: TlvWriter) { - tlvWriter.apply { - startStructure(tlvTag) - put(ContextSpecificTag(TAG_EXTENDED_PAN_I_D), extendedPanID) - endStructure() - } - } - - companion object { - private const val TAG_EXTENDED_PAN_I_D = 0 - - fun fromTlv( - tlvTag: Tag, - tlvReader: TlvReader, - ): ThreadNetworkDirectoryClusterNetworkChangedEvent { - tlvReader.enterStructure(tlvTag) - val extendedPanID = tlvReader.getULong(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) - - tlvReader.exitContainer() - - return ThreadNetworkDirectoryClusterNetworkChangedEvent(extendedPanID) - } - } -} diff --git a/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni b/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni index c15fb2a01efd80..5a29a90b27372b 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni +++ b/src/controller/java/generated/java/chip/devicecontroller/cluster/files.gni @@ -222,7 +222,6 @@ eventstructs_sources = [ "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/TargetNavigatorClusterTargetUpdatedEvent.kt", "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDiagnosticsClusterConnectionStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDiagnosticsClusterNetworkFaultChangeEvent.kt", - "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt", "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/TimeSynchronizationClusterDSTStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/TimeSynchronizationClusterTimeZoneStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/chip/devicecontroller/cluster/eventstructs/UnitTestingClusterTestDifferentVendorMeiEventEvent.kt", diff --git a/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt b/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt index 2ba4a216410ef3..ae988738b7be34 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt +++ b/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt @@ -23,15 +23,17 @@ import matter.tlv.TlvReader import matter.tlv.TlvWriter class ThreadNetworkDirectoryClusterThreadNetworkStruct( - val extendedPanID: ULong, + val extendedPanID: ByteArray, val networkName: String, val channel: UInt, + val activeTimestamp: ULong, ) { override fun toString(): String = buildString { append("ThreadNetworkDirectoryClusterThreadNetworkStruct {\n") append("\textendedPanID : $extendedPanID\n") append("\tnetworkName : $networkName\n") append("\tchannel : $channel\n") + append("\tactiveTimestamp : $activeTimestamp\n") append("}\n") } @@ -41,6 +43,7 @@ class ThreadNetworkDirectoryClusterThreadNetworkStruct( put(ContextSpecificTag(TAG_EXTENDED_PAN_I_D), extendedPanID) put(ContextSpecificTag(TAG_NETWORK_NAME), networkName) put(ContextSpecificTag(TAG_CHANNEL), channel) + put(ContextSpecificTag(TAG_ACTIVE_TIMESTAMP), activeTimestamp) endStructure() } } @@ -49,19 +52,26 @@ class ThreadNetworkDirectoryClusterThreadNetworkStruct( private const val TAG_EXTENDED_PAN_I_D = 0 private const val TAG_NETWORK_NAME = 1 private const val TAG_CHANNEL = 2 + private const val TAG_ACTIVE_TIMESTAMP = 3 fun fromTlv( tlvTag: Tag, tlvReader: TlvReader, ): ThreadNetworkDirectoryClusterThreadNetworkStruct { tlvReader.enterStructure(tlvTag) - val extendedPanID = tlvReader.getULong(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) + val extendedPanID = tlvReader.getByteArray(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) val networkName = tlvReader.getString(ContextSpecificTag(TAG_NETWORK_NAME)) val channel = tlvReader.getUInt(ContextSpecificTag(TAG_CHANNEL)) + val activeTimestamp = tlvReader.getULong(ContextSpecificTag(TAG_ACTIVE_TIMESTAMP)) tlvReader.exitContainer() - return ThreadNetworkDirectoryClusterThreadNetworkStruct(extendedPanID, networkName, channel) + return ThreadNetworkDirectoryClusterThreadNetworkStruct( + extendedPanID, + networkName, + channel, + activeTimestamp, + ) } } } diff --git a/src/controller/java/generated/java/matter/controller/cluster/clusters/ThreadNetworkDirectoryCluster.kt b/src/controller/java/generated/java/matter/controller/cluster/clusters/ThreadNetworkDirectoryCluster.kt index 6bbf6ffe4f813c..e479f0c79ef0f2 100644 --- a/src/controller/java/generated/java/matter/controller/cluster/clusters/ThreadNetworkDirectoryCluster.kt +++ b/src/controller/java/generated/java/matter/controller/cluster/clusters/ThreadNetworkDirectoryCluster.kt @@ -49,10 +49,10 @@ class ThreadNetworkDirectoryCluster( ) { class OperationalDatasetResponse(val operationalDataset: ByteArray) - class PreferredExtendedPanIDAttribute(val value: ULong?) + class PreferredExtendedPanIDAttribute(val value: ByteArray?) sealed class PreferredExtendedPanIDAttributeSubscriptionState { - data class Success(val value: ULong?) : PreferredExtendedPanIDAttributeSubscriptionState() + data class Success(val value: ByteArray?) : PreferredExtendedPanIDAttributeSubscriptionState() data class Error(val exception: Exception) : PreferredExtendedPanIDAttributeSubscriptionState() @@ -131,7 +131,7 @@ class ThreadNetworkDirectoryCluster( logger.log(Level.FINE, "Invoke command succeeded: ${response}") } - suspend fun removeNetwork(extendedPanID: ULong, timedInvokeTimeout: Duration) { + suspend fun removeNetwork(extendedPanID: ByteArray, timedInvokeTimeout: Duration) { val commandId: UInt = 1u val tlvWriter = TlvWriter() @@ -153,7 +153,7 @@ class ThreadNetworkDirectoryCluster( } suspend fun getOperationalDataset( - extendedPanID: ULong, + extendedPanID: ByteArray, timedInvokeTimeout: Duration, ): OperationalDatasetResponse { val commandId: UInt = 2u @@ -225,9 +225,9 @@ class ThreadNetworkDirectoryCluster( // Decode the TLV data into the appropriate type val tlvReader = TlvReader(attributeData.data) - val decodedValue: ULong? = + val decodedValue: ByteArray? = if (!tlvReader.isNull()) { - tlvReader.getULong(AnonymousTag) + tlvReader.getByteArray(AnonymousTag) } else { tlvReader.getNull(AnonymousTag) null @@ -237,7 +237,7 @@ class ThreadNetworkDirectoryCluster( } suspend fun writePreferredExtendedPanIDAttribute( - value: ULong, + value: ByteArray, timedWriteTimeout: Duration? = null, ) { val ATTRIBUTE_ID: UInt = 0u @@ -320,9 +320,9 @@ class ThreadNetworkDirectoryCluster( // Decode the TLV data into the appropriate type val tlvReader = TlvReader(attributeData.data) - val decodedValue: ULong? = + val decodedValue: ByteArray? = if (!tlvReader.isNull()) { - tlvReader.getULong(AnonymousTag) + tlvReader.getByteArray(AnonymousTag) } else { tlvReader.getNull(AnonymousTag) null diff --git a/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt b/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt deleted file mode 100644 index a5b1f26621002e..00000000000000 --- a/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright (c) 2023 Project CHIP Authors - * - * 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. - */ -package matter.controller.cluster.eventstructs - -import matter.controller.cluster.* -import matter.tlv.ContextSpecificTag -import matter.tlv.Tag -import matter.tlv.TlvReader -import matter.tlv.TlvWriter - -class ThreadNetworkDirectoryClusterNetworkChangedEvent(val extendedPanID: ULong) { - override fun toString(): String = buildString { - append("ThreadNetworkDirectoryClusterNetworkChangedEvent {\n") - append("\textendedPanID : $extendedPanID\n") - append("}\n") - } - - fun toTlv(tlvTag: Tag, tlvWriter: TlvWriter) { - tlvWriter.apply { - startStructure(tlvTag) - put(ContextSpecificTag(TAG_EXTENDED_PAN_I_D), extendedPanID) - endStructure() - } - } - - companion object { - private const val TAG_EXTENDED_PAN_I_D = 0 - - fun fromTlv( - tlvTag: Tag, - tlvReader: TlvReader, - ): ThreadNetworkDirectoryClusterNetworkChangedEvent { - tlvReader.enterStructure(tlvTag) - val extendedPanID = tlvReader.getULong(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) - - tlvReader.exitContainer() - - return ThreadNetworkDirectoryClusterNetworkChangedEvent(extendedPanID) - } - } -} diff --git a/src/controller/java/generated/java/matter/controller/cluster/files.gni b/src/controller/java/generated/java/matter/controller/cluster/files.gni index bf7839d661528d..ddb25414b6304d 100644 --- a/src/controller/java/generated/java/matter/controller/cluster/files.gni +++ b/src/controller/java/generated/java/matter/controller/cluster/files.gni @@ -222,7 +222,6 @@ matter_eventstructs_sources = [ "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/TargetNavigatorClusterTargetUpdatedEvent.kt", "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDiagnosticsClusterConnectionStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDiagnosticsClusterNetworkFaultChangeEvent.kt", - "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/ThreadNetworkDirectoryClusterNetworkChangedEvent.kt", "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/TimeSynchronizationClusterDSTStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/TimeSynchronizationClusterTimeZoneStatusEvent.kt", "${chip_root}/src/controller/java/generated/java/matter/controller/cluster/eventstructs/UnitTestingClusterTestDifferentVendorMeiEventEvent.kt", diff --git a/src/controller/java/generated/java/matter/controller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt b/src/controller/java/generated/java/matter/controller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt index db8dbbb0324745..bacfb457534ddd 100644 --- a/src/controller/java/generated/java/matter/controller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt +++ b/src/controller/java/generated/java/matter/controller/cluster/structs/ThreadNetworkDirectoryClusterThreadNetworkStruct.kt @@ -23,15 +23,17 @@ import matter.tlv.TlvReader import matter.tlv.TlvWriter class ThreadNetworkDirectoryClusterThreadNetworkStruct( - val extendedPanID: ULong, + val extendedPanID: ByteArray, val networkName: String, val channel: UShort, + val activeTimestamp: ULong, ) { override fun toString(): String = buildString { append("ThreadNetworkDirectoryClusterThreadNetworkStruct {\n") append("\textendedPanID : $extendedPanID\n") append("\tnetworkName : $networkName\n") append("\tchannel : $channel\n") + append("\tactiveTimestamp : $activeTimestamp\n") append("}\n") } @@ -41,6 +43,7 @@ class ThreadNetworkDirectoryClusterThreadNetworkStruct( put(ContextSpecificTag(TAG_EXTENDED_PAN_I_D), extendedPanID) put(ContextSpecificTag(TAG_NETWORK_NAME), networkName) put(ContextSpecificTag(TAG_CHANNEL), channel) + put(ContextSpecificTag(TAG_ACTIVE_TIMESTAMP), activeTimestamp) endStructure() } } @@ -49,19 +52,26 @@ class ThreadNetworkDirectoryClusterThreadNetworkStruct( private const val TAG_EXTENDED_PAN_I_D = 0 private const val TAG_NETWORK_NAME = 1 private const val TAG_CHANNEL = 2 + private const val TAG_ACTIVE_TIMESTAMP = 3 fun fromTlv( tlvTag: Tag, tlvReader: TlvReader, ): ThreadNetworkDirectoryClusterThreadNetworkStruct { tlvReader.enterStructure(tlvTag) - val extendedPanID = tlvReader.getULong(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) + val extendedPanID = tlvReader.getByteArray(ContextSpecificTag(TAG_EXTENDED_PAN_I_D)) val networkName = tlvReader.getString(ContextSpecificTag(TAG_NETWORK_NAME)) val channel = tlvReader.getUShort(ContextSpecificTag(TAG_CHANNEL)) + val activeTimestamp = tlvReader.getULong(ContextSpecificTag(TAG_ACTIVE_TIMESTAMP)) tlvReader.exitContainer() - return ThreadNetworkDirectoryClusterThreadNetworkStruct(extendedPanID, networkName, channel) + return ThreadNetworkDirectoryClusterThreadNetworkStruct( + extendedPanID, + networkName, + channel, + activeTimestamp, + ) } } } diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp index 9d1d0bd1bb65a3..cff767b424b59d 100644 --- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp +++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp @@ -38832,11 +38832,10 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR } else { - std::string valueClassName = "java/lang/Long"; - std::string valueCtorSignature = "(J)V"; - jlong jnivalue = static_cast(cppValue.Value()); - chip::JniReferences::GetInstance().CreateBoxedObject(valueClassName.c_str(), valueCtorSignature.c_str(), - jnivalue, value); + jbyteArray valueByteArray = env->NewByteArray(static_cast(cppValue.Value().size())); + env->SetByteArrayRegion(valueByteArray, 0, static_cast(cppValue.Value().size()), + reinterpret_cast(cppValue.Value().data())); + value = valueByteArray; } return value; } @@ -38857,12 +38856,11 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR auto & entry_0 = iter_value_0.GetValue(); jobject newElement_0; jobject newElement_0_extendedPanID; - std::string newElement_0_extendedPanIDClassName = "java/lang/Long"; - std::string newElement_0_extendedPanIDCtorSignature = "(J)V"; - jlong jninewElement_0_extendedPanID = static_cast(entry_0.extendedPanID); - chip::JniReferences::GetInstance().CreateBoxedObject( - newElement_0_extendedPanIDClassName.c_str(), newElement_0_extendedPanIDCtorSignature.c_str(), - jninewElement_0_extendedPanID, newElement_0_extendedPanID); + jbyteArray newElement_0_extendedPanIDByteArray = + env->NewByteArray(static_cast(entry_0.extendedPanID.size())); + env->SetByteArrayRegion(newElement_0_extendedPanIDByteArray, 0, static_cast(entry_0.extendedPanID.size()), + reinterpret_cast(entry_0.extendedPanID.data())); + newElement_0_extendedPanID = newElement_0_extendedPanIDByteArray; jobject newElement_0_networkName; LogErrorOnFailure( chip::JniReferences::GetInstance().CharToStringUTF(entry_0.networkName, newElement_0_networkName)); @@ -38873,6 +38871,13 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR chip::JniReferences::GetInstance().CreateBoxedObject(newElement_0_channelClassName.c_str(), newElement_0_channelCtorSignature.c_str(), jninewElement_0_channel, newElement_0_channel); + jobject newElement_0_activeTimestamp; + std::string newElement_0_activeTimestampClassName = "java/lang/Long"; + std::string newElement_0_activeTimestampCtorSignature = "(J)V"; + jlong jninewElement_0_activeTimestamp = static_cast(entry_0.activeTimestamp); + chip::JniReferences::GetInstance().CreateBoxedObject( + newElement_0_activeTimestampClassName.c_str(), newElement_0_activeTimestampCtorSignature.c_str(), + jninewElement_0_activeTimestamp, newElement_0_activeTimestamp); jclass threadNetworkStructStructClass_1; err = chip::JniReferences::GetInstance().GetLocalClassRef( @@ -38886,7 +38891,7 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR jmethodID threadNetworkStructStructCtor_1; err = chip::JniReferences::GetInstance().FindMethod(env, threadNetworkStructStructClass_1, "", - "(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Integer;)V", + "([BLjava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;)V", &threadNetworkStructStructCtor_1); if (err != CHIP_NO_ERROR || threadNetworkStructStructCtor_1 == nullptr) { @@ -38894,8 +38899,9 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR return nullptr; } - newElement_0 = env->NewObject(threadNetworkStructStructClass_1, threadNetworkStructStructCtor_1, - newElement_0_extendedPanID, newElement_0_networkName, newElement_0_channel); + newElement_0 = + env->NewObject(threadNetworkStructStructClass_1, threadNetworkStructStructCtor_1, newElement_0_extendedPanID, + newElement_0_networkName, newElement_0_channel, newElement_0_activeTimestamp); chip::JniReferences::GetInstance().AddToList(value, newElement_0); } return value; diff --git a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp index 789e3ea5f1310e..0dbed58b4b93d3 100644 --- a/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp +++ b/src/controller/java/zap-generated/CHIPEventTLVValueDecoder.cpp @@ -7481,44 +7481,6 @@ jobject DecodeEventValue(const app::ConcreteEventPath & aPath, TLV::TLVReader & using namespace app::Clusters::ThreadNetworkDirectory; switch (aPath.mEventId) { - case Events::NetworkChanged::Id: { - Events::NetworkChanged::DecodableType cppValue; - *aError = app::DataModel::Decode(aReader, cppValue); - if (*aError != CHIP_NO_ERROR) - { - return nullptr; - } - jobject value_extendedPanID; - std::string value_extendedPanIDClassName = "java/lang/Long"; - std::string value_extendedPanIDCtorSignature = "(J)V"; - jlong jnivalue_extendedPanID = static_cast(cppValue.extendedPanID); - chip::JniReferences::GetInstance().CreateBoxedObject(value_extendedPanIDClassName.c_str(), - value_extendedPanIDCtorSignature.c_str(), - jnivalue_extendedPanID, value_extendedPanID); - - jclass networkChangedStructClass; - err = chip::JniReferences::GetInstance().GetLocalClassRef( - env, "chip/devicecontroller/ChipEventStructs$ThreadNetworkDirectoryClusterNetworkChangedEvent", - networkChangedStructClass); - if (err != CHIP_NO_ERROR) - { - ChipLogError(Zcl, "Could not find class ChipEventStructs$ThreadNetworkDirectoryClusterNetworkChangedEvent"); - return nullptr; - } - - jmethodID networkChangedStructCtor; - err = chip::JniReferences::GetInstance().FindMethod(env, networkChangedStructClass, "", "(Ljava/lang/Long;)V", - &networkChangedStructCtor); - if (err != CHIP_NO_ERROR || networkChangedStructCtor == nullptr) - { - ChipLogError(Zcl, "Could not find ChipEventStructs$ThreadNetworkDirectoryClusterNetworkChangedEvent constructor"); - return nullptr; - } - - jobject value = env->NewObject(networkChangedStructClass, networkChangedStructCtor, value_extendedPanID); - - return value; - } default: *aError = CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB; break; diff --git a/src/controller/python/ChipDeviceController-ScriptBinding.cpp b/src/controller/python/ChipDeviceController-ScriptBinding.cpp index a98c8082d45380..556ae2c6943325 100644 --- a/src/controller/python/ChipDeviceController-ScriptBinding.cpp +++ b/src/controller/python/ChipDeviceController-ScriptBinding.cpp @@ -714,9 +714,14 @@ PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::De SetupPayload payload; auto opener = Platform::New(static_cast(devCtrl)); - PyChipError err = ToPyChipError(opener->OpenCommissioningWindow(nodeid, System::Clock::Seconds16(timeout), iteration, - discriminator, NullOptional, NullOptional, - pairingDelegate->GetOpenWindowCallback(opener), payload)); + PyChipError err = + ToPyChipError(opener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(nodeid) + .SetTimeout(timeout) + .SetIteration(iteration) + .SetDiscriminator(discriminator) + .SetCallback(pairingDelegate->GetOpenWindowCallback(opener)), + payload)); return err; } diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py index 1901351596228a..3b77856a4121d2 100644 --- a/src/controller/python/chip/clusters/CHIPClusters.py +++ b/src/controller/python/chip/clusters/CHIPClusters.py @@ -11989,14 +11989,14 @@ class ChipClusters: "commandId": 0x00000001, "commandName": "RemoveNetwork", "args": { - "extendedPanID": "int", + "extendedPanID": "bytes", }, }, 0x00000002: { "commandId": 0x00000002, "commandName": "GetOperationalDataset", "args": { - "extendedPanID": "int", + "extendedPanID": "bytes", }, }, }, @@ -12004,7 +12004,7 @@ class ChipClusters: 0x00000000: { "attributeName": "PreferredExtendedPanID", "attributeId": 0x00000000, - "type": "int", + "type": "bytes", "reportable": True, "writable": True, }, diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index 7b0c4a0cd6bc37..52e2be80aa74f5 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -42011,7 +42011,7 @@ class ThreadNetworkDirectory(Cluster): def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields=[ - ClusterObjectFieldDescriptor(Label="preferredExtendedPanID", Tag=0x00000000, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="preferredExtendedPanID", Tag=0x00000000, Type=typing.Union[Nullable, bytes]), ClusterObjectFieldDescriptor(Label="threadNetworks", Tag=0x00000001, Type=typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct]), ClusterObjectFieldDescriptor(Label="threadNetworkTableSize", Tag=0x00000002, Type=uint), ClusterObjectFieldDescriptor(Label="generatedCommandList", Tag=0x0000FFF8, Type=typing.List[uint]), @@ -42022,7 +42022,7 @@ def descriptor(cls) -> ClusterObjectDescriptor: ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint), ]) - preferredExtendedPanID: 'typing.Union[Nullable, uint]' = None + preferredExtendedPanID: 'typing.Union[Nullable, bytes]' = None threadNetworks: 'typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct]' = None threadNetworkTableSize: 'uint' = None generatedCommandList: 'typing.List[uint]' = None @@ -42039,14 +42039,16 @@ class ThreadNetworkStruct(ClusterObject): def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields=[ - ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=uint), + ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=bytes), ClusterObjectFieldDescriptor(Label="networkName", Tag=1, Type=str), ClusterObjectFieldDescriptor(Label="channel", Tag=2, Type=uint), + ClusterObjectFieldDescriptor(Label="activeTimestamp", Tag=3, Type=uint), ]) - extendedPanID: 'uint' = 0 + extendedPanID: 'bytes' = b"" networkName: 'str' = "" channel: 'uint' = 0 + activeTimestamp: 'uint' = 0 class Commands: @dataclass @@ -42080,14 +42082,14 @@ class RemoveNetwork(ClusterCommand): def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields=[ - ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=uint), + ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=bytes), ]) @ChipUtility.classproperty def must_use_timed_invoke(cls) -> bool: return True - extendedPanID: 'uint' = 0 + extendedPanID: 'bytes' = b"" @dataclass class GetOperationalDataset(ClusterCommand): @@ -42100,14 +42102,14 @@ class GetOperationalDataset(ClusterCommand): def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields=[ - ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=uint), + ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=bytes), ]) @ChipUtility.classproperty def must_use_timed_invoke(cls) -> bool: return True - extendedPanID: 'uint' = 0 + extendedPanID: 'bytes' = b"" @dataclass class OperationalDatasetResponse(ClusterCommand): @@ -42138,9 +42140,9 @@ def attribute_id(cls) -> int: @ChipUtility.classproperty def attribute_type(cls) -> ClusterObjectFieldDescriptor: - return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint]) + return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes]) - value: 'typing.Union[Nullable, uint]' = NullValue + value: 'typing.Union[Nullable, bytes]' = NullValue @dataclass class ThreadNetworks(ClusterAttributeDescriptor): @@ -42270,26 +42272,6 @@ def attribute_type(cls) -> ClusterObjectFieldDescriptor: value: 'uint' = 0 - class Events: - @dataclass - class NetworkChanged(ClusterEvent): - @ChipUtility.classproperty - def cluster_id(cls) -> int: - return 0x00000453 - - @ChipUtility.classproperty - def event_id(cls) -> int: - return 0x00000000 - - @ChipUtility.classproperty - def descriptor(cls) -> ClusterObjectDescriptor: - return ClusterObjectDescriptor( - Fields=[ - ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=uint), - ]) - - extendedPanID: 'uint' = 0 - @dataclass class WakeOnLan(Cluster): diff --git a/src/controller/python/chip/clusters/__init__.py b/src/controller/python/chip/clusters/__init__.py index 1aa2a61a8911d6..f633ca272a48a7 100644 --- a/src/controller/python/chip/clusters/__init__.py +++ b/src/controller/python/chip/clusters/__init__.py @@ -44,10 +44,10 @@ RefrigeratorAndTemperatureControlledCabinetMode, RelativeHumidityMeasurement, RvcCleanMode, RvcOperationalState, RvcRunMode, ScenesManagement, SmokeCoAlarm, SoftwareDiagnostics, Switch, TargetNavigator, TemperatureControl, TemperatureMeasurement, Thermostat, ThermostatUserInterfaceConfiguration, - ThreadBorderRouterManagement, ThreadNetworkDiagnostics, TimeFormatLocalization, TimeSynchronization, - TotalVolatileOrganicCompoundsConcentrationMeasurement, UnitLocalization, UnitTesting, UserLabel, - ValveConfigurationAndControl, WakeOnLan, WaterHeaterManagement, WaterHeaterMode, WiFiNetworkDiagnostics, - WindowCovering) + ThreadBorderRouterManagement, ThreadNetworkDiagnostics, ThreadNetworkDirectory, TimeFormatLocalization, + TimeSynchronization, TotalVolatileOrganicCompoundsConcentrationMeasurement, UnitLocalization, UnitTesting, + UserLabel, ValveConfigurationAndControl, WakeOnLan, WaterHeaterManagement, WaterHeaterMode, + WiFiNetworkDiagnostics, WindowCovering) __all__ = [Attribute, CHIPClusters, Command, AccessControl, AccountLogin, Actions, ActivatedCarbonFilterMonitoring, AdministratorCommissioning, AirQuality, ApplicationBasic, ApplicationLauncher, AudioOutput, BallastConfiguration, BarrierControl, BasicInformation, @@ -68,6 +68,6 @@ RefrigeratorAlarm, RefrigeratorAndTemperatureControlledCabinetMode, RelativeHumidityMeasurement, RvcCleanMode, RvcOperationalState, RvcRunMode, ScenesManagement, SmokeCoAlarm, SoftwareDiagnostics, Switch, TargetNavigator, TemperatureControl, TemperatureMeasurement, Thermostat, ThermostatUserInterfaceConfiguration, - ThreadBorderRouterManagement, ThreadNetworkDiagnostics, TimeFormatLocalization, TimeSynchronization, + ThreadBorderRouterManagement, ThreadNetworkDiagnostics, ThreadNetworkDirectory, TimeFormatLocalization, TimeSynchronization, TotalVolatileOrganicCompoundsConcentrationMeasurement, UnitLocalization, UnitTesting, UserLabel, ValveConfigurationAndControl, WakeOnLan, WaterHeaterManagement, WaterHeaterMode, WiFiNetworkDiagnostics, WindowCovering] diff --git a/src/controller/tests/BUILD.gn b/src/controller/tests/BUILD.gn index 7b3dff0e27d441..a1d7b9433075b7 100644 --- a/src/controller/tests/BUILD.gn +++ b/src/controller/tests/BUILD.gn @@ -31,6 +31,7 @@ chip_test_suite("tests") { test_sources += [ "TestReadChunking.cpp" ] test_sources += [ "TestWriteChunking.cpp" ] test_sources += [ "TestEventNumberCaching.cpp" ] + test_sources += [ "TestCommissioningWindowOpener.cpp" ] } cflags = [ "-Wconversion" ] diff --git a/src/controller/tests/TestCommissioningWindowOpener.cpp b/src/controller/tests/TestCommissioningWindowOpener.cpp new file mode 100644 index 00000000000000..01aa42fbe8b17a --- /dev/null +++ b/src/controller/tests/TestCommissioningWindowOpener.cpp @@ -0,0 +1,192 @@ +/* + * + * Copyright (c) 2024 Project CHIP Authors + * 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. + */ + +#include + +#include +#include +#include +#include + +using namespace chip; + +namespace { + +class MockDeviceController : public Controller::DeviceController +{ +public: + CHIP_ERROR + GetConnectedDevice(NodeId peerNodeId, Callback::Callback * onConnection, + Callback::Callback * onFailure, + TransportPayloadCapability transportPayloadCapability = TransportPayloadCapability::kMRPPayload) override + { + return CHIP_NO_ERROR; + } +}; + +// Valid crypto values from src/protocols/secure_channel/tests/TestPASESession.cpp +constexpr uint32_t sTestSpake2p01_PinCode = 20202021; +constexpr uint32_t sTestSpake2p01_IterationCount = 1000; +constexpr uint8_t sTestSpake2p01_Salt[] = { 0x53, 0x50, 0x41, 0x4B, 0x45, 0x32, 0x50, 0x20, + 0x4B, 0x65, 0x79, 0x20, 0x53, 0x61, 0x6C, 0x74 }; +constexpr Crypto::Spake2pVerifierSerialized sTestSpake2p01_SerializedVerifier = { + 0xB9, 0x61, 0x70, 0xAA, 0xE8, 0x03, 0x34, 0x68, 0x84, 0x72, 0x4F, 0xE9, 0xA3, 0xB2, 0x87, 0xC3, 0x03, 0x30, 0xC2, 0xA6, + 0x60, 0x37, 0x5D, 0x17, 0xBB, 0x20, 0x5A, 0x8C, 0xF1, 0xAE, 0xCB, 0x35, 0x04, 0x57, 0xF8, 0xAB, 0x79, 0xEE, 0x25, 0x3A, + 0xB6, 0xA8, 0xE4, 0x6B, 0xB0, 0x9E, 0x54, 0x3A, 0xE4, 0x22, 0x73, 0x6D, 0xE5, 0x01, 0xE3, 0xDB, 0x37, 0xD4, 0x41, 0xFE, + 0x34, 0x49, 0x20, 0xD0, 0x95, 0x48, 0xE4, 0xC1, 0x82, 0x40, 0x63, 0x0C, 0x4F, 0xF4, 0x91, 0x3C, 0x53, 0x51, 0x38, 0x39, + 0xB7, 0xC0, 0x7F, 0xCC, 0x06, 0x27, 0xA1, 0xB8, 0x57, 0x3A, 0x14, 0x9F, 0xCD, 0x1F, 0xA4, 0x66, 0xCF +}; + +static void OCWPasscodeCallback(void * context, NodeId deviceId, CHIP_ERROR status, SetupPayload payload) {} +static void OCWVerifierCallback(void * context, NodeId deviceId, CHIP_ERROR status) {} + +class TestCommissioningWindowOpener : public ::testing::Test +{ +public: + static void SetUpTestSuite() { ASSERT_EQ(Platform::MemoryInit(), CHIP_NO_ERROR); } + static void TearDownTestSuite() { Platform::MemoryShutdown(); } + +protected: + // Initialize with a null pointer for now, replace with a valid controller pointer if available + MockDeviceController mockController; + Controller::CommissioningWindowOpener opener = Controller::CommissioningWindowOpener(&mockController); +}; + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Success) +{ + Callback::Callback callback(OCWVerifierCallback, this); + + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSalt(ByteSpan(sTestSpake2p01_Salt)) + .SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)) + .SetCallback(&callback)); + EXPECT_EQ(err, CHIP_NO_ERROR); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_InvalidSalt) +{ + Callback::Callback callback(OCWVerifierCallback, this); + + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSalt(ByteSpan()) + .SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)) + .SetCallback(&callback)); + EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_InvalidVerifier) +{ + Callback::Callback callback(OCWVerifierCallback, this); + + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSalt(ByteSpan(sTestSpake2p01_Salt)) + .SetVerifier(ByteSpan()) + .SetCallback(&callback)); + EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_InvalidIteration) +{ + Callback::Callback callback(OCWVerifierCallback, this); + + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowVerifierParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(0) + .SetDiscriminator(3840) + .SetSalt(ByteSpan(sTestSpake2p01_Salt)) + .SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)) + .SetCallback(&callback)); + EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success) +{ + SetupPayload ignored; + Callback::Callback callback(OCWPasscodeCallback, this); + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSetupPIN(sTestSpake2p01_PinCode) + .SetReadVIDPIDAttributes(true) + .SetSalt(ByteSpan(sTestSpake2p01_Salt)) + .SetCallback(&callback), + ignored); + EXPECT_EQ(err, CHIP_NO_ERROR); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success_NoPin) +{ + SetupPayload ignored; + Callback::Callback callback(OCWPasscodeCallback, this); + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSalt(ByteSpan(sTestSpake2p01_Salt)) + .SetCallback(&callback), + ignored); + EXPECT_EQ(err, CHIP_NO_ERROR); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success_NoSalt) +{ + SetupPayload ignored; + Callback::Callback callback(OCWPasscodeCallback, this); + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(sTestSpake2p01_IterationCount) + .SetDiscriminator(3840) + .SetSetupPIN(sTestSpake2p01_PinCode) + .SetCallback(&callback), + ignored); + EXPECT_EQ(err, CHIP_NO_ERROR); +} + +TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Failure_InvalidIteration) +{ + SetupPayload ignored; + Callback::Callback callback(OCWPasscodeCallback, this); + CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams() + .SetNodeId(0x1234) + .SetTimeout(300) + .SetIteration(0) + .SetDiscriminator(3840) + .SetCallback(&callback), + ignored); + EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT); +} + +// Add more test cases as needed to cover different scenarios +} // namespace diff --git a/src/controller/tests/data_model/BUILD.gn b/src/controller/tests/data_model/BUILD.gn index db1d9f8273b2ed..9439bd33b83458 100644 --- a/src/controller/tests/data_model/BUILD.gn +++ b/src/controller/tests/data_model/BUILD.gn @@ -41,6 +41,7 @@ chip_test_suite("data_model") { "${chip_root}/src/app", "${chip_root}/src/app/common:cluster-objects", "${chip_root}/src/app/tests:helpers", + "${chip_root}/src/app/util/mock:mock_codegen_data_model", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/controller", "${chip_root}/src/lib/core:string-builder-adapters", diff --git a/src/darwin/Framework/CHIP/MTRDemuxingStorage.mm b/src/darwin/Framework/CHIP/MTRDemuxingStorage.mm index 4ce1a3a93a8f72..fff85f8eb4c3d2 100644 --- a/src/darwin/Framework/CHIP/MTRDemuxingStorage.mm +++ b/src/darwin/Framework/CHIP/MTRDemuxingStorage.mm @@ -167,6 +167,8 @@ static bool IsMemoryOnlyGlobalKey(NSString * key) // We do not expect to see the "g/icdfl" key; that's only used by // DefaultICDClientStorage, which Matter.framework does not use. + // We do not expect to see the "g/tnd/*" Thread Network Directory keys. + return false; } diff --git a/src/darwin/Framework/CHIP/templates/availability.yaml b/src/darwin/Framework/CHIP/templates/availability.yaml index 5d8aef90a50d95..59a09aa0769686 100644 --- a/src/darwin/Framework/CHIP/templates/availability.yaml +++ b/src/darwin/Framework/CHIP/templates/availability.yaml @@ -9695,6 +9695,7 @@ - ThreadBorderRouterManagement - ThreadNetworkDirectory - WaterHeaterManagement + - WaterHeaterMode - WiFiNetworkManagement attributes: OccupancySensing: diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm index 96f5a211636050..26db9e819103af 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm @@ -15779,11 +15779,11 @@ static id _Nullable DecodeAttributeValueForThreadNetworkDirectoryCluster(Attribu if (*aError != CHIP_NO_ERROR) { return nil; } - NSNumber * _Nullable value; + NSData * _Nullable value; if (cppValue.IsNull()) { value = nil; } else { - value = [NSNumber numberWithUnsignedLongLong:cppValue.Value()]; + value = AsData(cppValue.Value()); } return value; } @@ -15802,7 +15802,7 @@ static id _Nullable DecodeAttributeValueForThreadNetworkDirectoryCluster(Attribu auto & entry_0 = iter_0.GetValue(); MTRThreadNetworkDirectoryClusterThreadNetworkStruct * newElement_0; newElement_0 = [MTRThreadNetworkDirectoryClusterThreadNetworkStruct new]; - newElement_0.extendedPanID = [NSNumber numberWithUnsignedLongLong:entry_0.extendedPanID]; + newElement_0.extendedPanID = AsData(entry_0.extendedPanID); newElement_0.networkName = AsString(entry_0.networkName); if (newElement_0.networkName == nil) { CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT; @@ -15810,6 +15810,7 @@ static id _Nullable DecodeAttributeValueForThreadNetworkDirectoryCluster(Attribu return nil; } newElement_0.channel = [NSNumber numberWithUnsignedShort:entry_0.channel]; + newElement_0.activeTimestamp = [NSNumber numberWithUnsignedLongLong:entry_0.activeTimestamp]; [array_0 addObject:newElement_0]; } CHIP_ERROR err = iter_0.GetStatus(); diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h index 181d0c70408b24..91b6e9a65a2fc6 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h @@ -13547,13 +13547,13 @@ MTR_PROVISIONALLY_AVAILABLE */ - (void)getOperationalDatasetWithParams:(MTRThreadNetworkDirectoryClusterGetOperationalDatasetParams *)params completion:(void (^)(MTRThreadNetworkDirectoryClusterOperationalDatasetResponseParams * _Nullable data, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; -- (void)readAttributePreferredExtendedPanIDWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; -- (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)value completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE; -- (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)value params:(MTRWriteParams * _Nullable)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE; +- (void)readAttributePreferredExtendedPanIDWithCompletion:(void (^)(NSData * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; +- (void)writeAttributePreferredExtendedPanIDWithValue:(NSData * _Nullable)value completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE; +- (void)writeAttributePreferredExtendedPanIDWithValue:(NSData * _Nullable)value params:(MTRWriteParams * _Nullable)params completion:(MTRStatusCompletion)completion MTR_PROVISIONALLY_AVAILABLE; - (void)subscribeAttributePreferredExtendedPanIDWithParams:(MTRSubscribeParams *)params subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished - reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE; -+ (void)readAttributePreferredExtendedPanIDWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; + reportHandler:(void (^)(NSData * _Nullable value, NSError * _Nullable error))reportHandler MTR_PROVISIONALLY_AVAILABLE; ++ (void)readAttributePreferredExtendedPanIDWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSData * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; - (void)readAttributeThreadNetworksWithCompletion:(void (^)(NSArray * _Nullable value, NSError * _Nullable error))completion MTR_PROVISIONALLY_AVAILABLE; - (void)subscribeAttributeThreadNetworksWithParams:(MTRSubscribeParams *)params diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm index 6a15e501af9a7d..9aa9dbfab3dec4 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm @@ -95301,7 +95301,7 @@ - (void)getOperationalDatasetWithParams:(MTRThreadNetworkDirectoryClusterGetOper completion:responseHandler]; } -- (void)readAttributePreferredExtendedPanIDWithCompletion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion +- (void)readAttributePreferredExtendedPanIDWithCompletion:(void (^)(NSData * _Nullable value, NSError * _Nullable error))completion { using TypeInfo = ThreadNetworkDirectory::Attributes::PreferredExtendedPanID::TypeInfo; [self.device _readKnownAttributeWithEndpointID:self.endpointID @@ -95312,11 +95312,11 @@ - (void)readAttributePreferredExtendedPanIDWithCompletion:(void (^)(NSNumber * _ completion:completion]; } -- (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)value completion:(MTRStatusCompletion)completion +- (void)writeAttributePreferredExtendedPanIDWithValue:(NSData * _Nullable)value completion:(MTRStatusCompletion)completion { - [self writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable) value params:nil completion:completion]; + [self writeAttributePreferredExtendedPanIDWithValue:(NSData * _Nullable) value params:nil completion:completion]; } -- (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)value params:(MTRWriteParams * _Nullable)params completion:(MTRStatusCompletion)completion +- (void)writeAttributePreferredExtendedPanIDWithValue:(NSData * _Nullable)value params:(MTRWriteParams * _Nullable)params completion:(MTRStatusCompletion)completion { // Make a copy of params before we go async. params = [params copy]; @@ -95337,8 +95337,8 @@ - (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)valu cppValue.SetNull(); } else { auto & nonNullValue_0 = cppValue.SetNonNull(); - nonNullValue_0 = value.unsignedLongLongValue; - } + nonNullValue_0 = AsByteSpan(value); + } chip::Controller::ClusterBase cppCluster(exchangeManager, session, self.endpointID.unsignedShortValue); return cppCluster.WriteAttribute(cppValue, bridge, successCb, failureCb, timedWriteTimeout); }); @@ -95347,7 +95347,7 @@ - (void)writeAttributePreferredExtendedPanIDWithValue:(NSNumber * _Nullable)valu - (void)subscribeAttributePreferredExtendedPanIDWithParams:(MTRSubscribeParams * _Nonnull)params subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished - reportHandler:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))reportHandler + reportHandler:(void (^)(NSData * _Nullable value, NSError * _Nullable error))reportHandler { using TypeInfo = ThreadNetworkDirectory::Attributes::PreferredExtendedPanID::TypeInfo; [self.device _subscribeToKnownAttributeWithEndpointID:self.endpointID @@ -95359,7 +95359,7 @@ - (void)subscribeAttributePreferredExtendedPanIDWithParams:(MTRSubscribeParams * subscriptionEstablished:subscriptionEstablished]; } -+ (void)readAttributePreferredExtendedPanIDWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSNumber * _Nullable value, NSError * _Nullable error))completion ++ (void)readAttributePreferredExtendedPanIDWithClusterStateCache:(MTRClusterStateCacheContainer *)clusterStateCacheContainer endpoint:(NSNumber *)endpoint queue:(dispatch_queue_t)queue completion:(void (^)(NSData * _Nullable value, NSError * _Nullable error))completion { using TypeInfo = ThreadNetworkDirectory::Attributes::PreferredExtendedPanID::TypeInfo; [clusterStateCacheContainer diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h index 445404818a9573..6c2978795cdafd 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusterConstants.h @@ -7452,9 +7452,6 @@ typedef NS_ENUM(uint32_t, MTREventIDType) { MTREventIDTypeClusterPumpConfigurationAndControlEventAirDetectionID MTR_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x0000000F, MTREventIDTypeClusterPumpConfigurationAndControlEventTurbineOperationID MTR_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4)) = 0x00000010, - // Cluster ThreadNetworkDirectory events - MTREventIDTypeClusterThreadNetworkDirectoryEventNetworkChangedID MTR_PROVISIONALLY_AVAILABLE = 0x00000000, - // Cluster TargetNavigator deprecated event names // Cluster TargetNavigator events diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h index 7c30f13fbe7044..4bdab512cd6d77 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h @@ -8950,7 +8950,7 @@ MTR_PROVISIONALLY_AVAILABLE MTR_PROVISIONALLY_AVAILABLE @interface MTRThreadNetworkDirectoryClusterRemoveNetworkParams : NSObject -@property (nonatomic, copy) NSNumber * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; +@property (nonatomic, copy) NSData * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; /** * Controls whether the command is a timed command (using Timed Invoke). * @@ -8980,7 +8980,7 @@ MTR_PROVISIONALLY_AVAILABLE MTR_PROVISIONALLY_AVAILABLE @interface MTRThreadNetworkDirectoryClusterGetOperationalDatasetParams : NSObject -@property (nonatomic, copy) NSNumber * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; +@property (nonatomic, copy) NSData * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; /** * Controls whether the command is a timed command (using Timed Invoke). * diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm index 441fc5cb8361cf..9f7ffd3a16b328 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm @@ -25408,7 +25408,7 @@ - (instancetype)init { if (self = [super init]) { - _extendedPanID = @(0); + _extendedPanID = [NSData data]; _timedInvokeTimeoutMs = nil; _serverSideProcessingTimeout = nil; } @@ -25428,7 +25428,7 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; - (NSString *)description { - NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; >", NSStringFromClass([self class]), _extendedPanID]; + NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; >", NSStringFromClass([self class]), [_extendedPanID base64EncodedStringWithOptions:0]]; return descriptionString; } @@ -25441,7 +25441,7 @@ - (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader chip::app::Clusters::ThreadNetworkDirectory::Commands::RemoveNetwork::Type encodableStruct; ListFreer listFreer; { - encodableStruct.extendedPanID = self.extendedPanID.unsignedLongLongValue; + encodableStruct.extendedPanID = AsByteSpan(self.extendedPanID); } auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0); @@ -25487,7 +25487,7 @@ - (instancetype)init { if (self = [super init]) { - _extendedPanID = @(0); + _extendedPanID = [NSData data]; _timedInvokeTimeoutMs = nil; _serverSideProcessingTimeout = nil; } @@ -25507,7 +25507,7 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; - (NSString *)description { - NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; >", NSStringFromClass([self class]), _extendedPanID]; + NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; >", NSStringFromClass([self class]), [_extendedPanID base64EncodedStringWithOptions:0]]; return descriptionString; } @@ -25520,7 +25520,7 @@ - (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader chip::app::Clusters::ThreadNetworkDirectory::Commands::GetOperationalDataset::Type encodableStruct; ListFreer listFreer; { - encodableStruct.extendedPanID = self.extendedPanID.unsignedLongLongValue; + encodableStruct.extendedPanID = AsByteSpan(self.extendedPanID); } auto buffer = chip::System::PacketBufferHandle::New(chip::System::PacketBuffer::kMaxSizeWithoutReserve, 0); diff --git a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm index 445807b9902bd8..e2fc7e70cba67b 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTREventTLVValueDecoder.mm @@ -4117,23 +4117,6 @@ static id _Nullable DecodeEventPayloadForThreadNetworkDirectoryCluster(EventId a { using namespace Clusters::ThreadNetworkDirectory; switch (aEventId) { - case Events::NetworkChanged::Id: { - Events::NetworkChanged::DecodableType cppValue; - *aError = DataModel::Decode(aReader, cppValue); - if (*aError != CHIP_NO_ERROR) { - return nil; - } - - __auto_type * value = [MTRThreadNetworkDirectoryClusterNetworkChangedEvent new]; - - do { - NSNumber * _Nonnull memberValue; - memberValue = [NSNumber numberWithUnsignedLongLong:cppValue.extendedPanID]; - value.extendedPanID = memberValue; - } while (0); - - return value; - } default: { break; } diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h index dd93b4322ad447..92f82f3496fca9 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.h @@ -1711,14 +1711,10 @@ MTR_PROVISIONALLY_AVAILABLE MTR_PROVISIONALLY_AVAILABLE @interface MTRThreadNetworkDirectoryClusterThreadNetworkStruct : NSObject -@property (nonatomic, copy) NSNumber * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; +@property (nonatomic, copy) NSData * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; @property (nonatomic, copy) NSString * _Nonnull networkName MTR_PROVISIONALLY_AVAILABLE; @property (nonatomic, copy) NSNumber * _Nonnull channel MTR_PROVISIONALLY_AVAILABLE; -@end - -MTR_PROVISIONALLY_AVAILABLE -@interface MTRThreadNetworkDirectoryClusterNetworkChangedEvent : NSObject -@property (nonatomic, copy) NSNumber * _Nonnull extendedPanID MTR_PROVISIONALLY_AVAILABLE; +@property (nonatomic, copy) NSNumber * _Nonnull activeTimestamp MTR_PROVISIONALLY_AVAILABLE; @end MTR_PROVISIONALLY_AVAILABLE diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm index 6fe345c0621baf..f0869bd61918fb 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRStructsObjc.mm @@ -7213,11 +7213,13 @@ - (instancetype)init { if (self = [super init]) { - _extendedPanID = @(0); + _extendedPanID = [NSData data]; _networkName = @""; _channel = @(0); + + _activeTimestamp = @(0); } return self; } @@ -7229,40 +7231,14 @@ - (id)copyWithZone:(NSZone * _Nullable)zone other.extendedPanID = self.extendedPanID; other.networkName = self.networkName; other.channel = self.channel; + other.activeTimestamp = self.activeTimestamp; return other; } - (NSString *)description { - NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; networkName:%@; channel:%@; >", NSStringFromClass([self class]), _extendedPanID, _networkName, _channel]; - return descriptionString; -} - -@end - -@implementation MTRThreadNetworkDirectoryClusterNetworkChangedEvent -- (instancetype)init -{ - if (self = [super init]) { - - _extendedPanID = @(0); - } - return self; -} - -- (id)copyWithZone:(NSZone * _Nullable)zone -{ - auto other = [[MTRThreadNetworkDirectoryClusterNetworkChangedEvent alloc] init]; - - other.extendedPanID = self.extendedPanID; - - return other; -} - -- (NSString *)description -{ - NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; >", NSStringFromClass([self class]), _extendedPanID]; + NSString * descriptionString = [NSString stringWithFormat:@"<%@: extendedPanID:%@; networkName:%@; channel:%@; activeTimestamp:%@; >", NSStringFromClass([self class]), [_extendedPanID base64EncodedStringWithOptions:0], _networkName, _channel, _activeTimestamp]; return descriptionString; } diff --git a/src/lib/core/CHIPConfig.h b/src/lib/core/CHIPConfig.h index 2de6a662ee8c4d..32e49ab2e3d45f 100644 --- a/src/lib/core/CHIPConfig.h +++ b/src/lib/core/CHIPConfig.h @@ -1702,6 +1702,24 @@ extern const char CHIP_NON_PRODUCTION_MARKER[]; #define CHIP_CONFIG_MAX_ICD_CLIENTS_INFO_STORAGE_CONCURRENT_ITERATORS 1 #endif +/** + * @def CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CAPACITY + * + * Defines the number of networks the default ThreadNetworkDirectoryStorage implementation will store. + */ +#ifndef CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CAPACITY +#define CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CAPACITY (CHIP_CONFIG_MAX_FABRICS * 2) +#endif + +/** + * @def CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CONCURRENT_ITERATORS + * + * Defines the number of ThreadNetworkDirectoryStorage iterators that can be allocated at any one time. + */ +#ifndef CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CONCURRENT_ITERATORS +#define CHIP_CONFIG_MAX_THREAD_NETWORK_DIRECTORY_STORAGE_CONCURRENT_ITERATORS 1 +#endif + /** * @def CHIP_CONFIG_COMMAND_SENDER_BUILTIN_SUPPORT_FOR_BATCHED_COMMANDS * diff --git a/src/lib/dnssd/Advertiser.h b/src/lib/dnssd/Advertiser.h index 02888181f98181..88b86ef871b91d 100644 --- a/src/lib/dnssd/Advertiser.h +++ b/src/lib/dnssd/Advertiser.h @@ -55,6 +55,14 @@ enum class ICDModeAdvertise : uint8_t kLIT, // The ICD is currently operating as a LIT. ICD=1 in DNS-SD key/value pairs. }; +enum class TCPModeAdvertise : uint16_t +{ + kNone = 0, // The device does not support TCP. + kTCPClient = 1 << 1, // The device supports the TCP client. + kTCPServer = 1 << 2, // The device supports the TCP server. + kTCPClientServer = (kTCPClient | kTCPServer), // The device supports both the TCP client and server. +}; + template class BaseAdvertisingParams { @@ -102,13 +110,12 @@ class BaseAdvertisingParams } const std::optional & GetLocalMRPConfig() const { return mLocalMRPConfig; } - // NOTE: The SetTcpSupported API is deprecated and not compliant with 1.3. T flag should not be set. - Derived & SetTcpSupported(std::optional tcpSupported) + Derived & SetTCPSupportModes(TCPModeAdvertise tcpSupportModes) { - mTcpSupported = tcpSupported; + mTcpSupportModes = tcpSupportModes; return *reinterpret_cast(this); } - std::optional GetTcpSupported() const { return mTcpSupported; } + TCPModeAdvertise GetTCPSupportModes() const { return mTcpSupportModes; } Derived & SetICDModeToAdvertise(ICDModeAdvertise operatingMode) { @@ -124,7 +131,7 @@ class BaseAdvertisingParams uint8_t mMacStorage[kMaxMacSize] = {}; size_t mMacLength = 0; std::optional mLocalMRPConfig; - std::optional mTcpSupported; + TCPModeAdvertise mTcpSupportModes = TCPModeAdvertise::kNone; ICDModeAdvertise mICDModeAdvertise = ICDModeAdvertise::kNone; }; diff --git a/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp b/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp index 5ca002673cd4c9..ce46137c9a00e2 100644 --- a/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp +++ b/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp @@ -278,10 +278,10 @@ class AdvertiserMinMdns : public ServiceAdvertiser, } } - if (const auto & tcpSupported = params.GetTcpSupported(); tcpSupported.has_value()) + if (params.GetTCPSupportModes() != TCPModeAdvertise::kNone) { - size_t writtenCharactersNumber = - static_cast(snprintf(storage.tcpSupportedBuf, sizeof(storage.tcpSupportedBuf), "T=%d", *tcpSupported)); + size_t writtenCharactersNumber = static_cast(snprintf(storage.tcpSupportedBuf, sizeof(storage.tcpSupportedBuf), + "T=%d", static_cast(params.GetTCPSupportModes()))); VerifyOrReturnError((writtenCharactersNumber > 0) && (writtenCharactersNumber < sizeof(storage.tcpSupportedBuf)), CHIP_ERROR_INVALID_STRING_LENGTH); txtFields[numTxtFields++] = storage.tcpSupportedBuf; diff --git a/src/lib/dnssd/Discovery_ImplPlatform.cpp b/src/lib/dnssd/Discovery_ImplPlatform.cpp index beb733b1276a3f..e214aed4f80da6 100644 --- a/src/lib/dnssd/Discovery_ImplPlatform.cpp +++ b/src/lib/dnssd/Discovery_ImplPlatform.cpp @@ -240,7 +240,8 @@ CHIP_ERROR CopyTxtRecord(TxtFieldKey key, char * buffer, size_t bufferLen, const switch (key) { case TxtFieldKey::kTcpSupported: - return CopyTextRecordValue(buffer, bufferLen, params.GetTcpSupported()); + VerifyOrReturnError(params.GetTCPSupportModes() != TCPModeAdvertise::kNone, CHIP_ERROR_UNINITIALIZED); + return CopyTextRecordValue(buffer, bufferLen, to_underlying(params.GetTCPSupportModes())); case TxtFieldKey::kSessionIdleInterval: #if CHIP_CONFIG_ENABLE_ICD_SERVER // A ICD operating as a LIT should not advertise its slow polling interval diff --git a/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp b/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp index 1a66865c143a2e..ea85f74d2be11a 100644 --- a/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp +++ b/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp @@ -81,7 +81,8 @@ OperationalAdvertisingParameters operationalParams1 = .SetPort(CHIP_PORT) .EnableIpV4(true) .SetLocalMRPConfig(std::make_optional( - 32_ms32, 30_ms32)); // Match SII, SAI. SAT not provided so it uses default 4000ms + 32_ms32, 30_ms32)) // Match SII, SAI. SAT not provided so it uses default 4000ms + .SetTCPSupportModes(chip::Dnssd::TCPModeAdvertise::kTCPClientServer); OperationalAdvertisingParameters operationalParams2 = OperationalAdvertisingParameters().SetPeerId(kPeerId2).SetMac(ByteSpan(kMac)).SetPort(CHIP_PORT).EnableIpV4(true); OperationalAdvertisingParameters operationalParams3 = @@ -92,7 +93,7 @@ OperationalAdvertisingParameters operationalParams5 = OperationalAdvertisingParameters().SetPeerId(kPeerId5).SetMac(ByteSpan(kMac)).SetPort(CHIP_PORT).EnableIpV4(true); OperationalAdvertisingParameters operationalParams6 = OperationalAdvertisingParameters().SetPeerId(kPeerId6).SetMac(ByteSpan(kMac)).SetPort(CHIP_PORT).EnableIpV4(true); -const QNamePart txtOperational1Parts[] = { "SII=32", "SAI=30", "SAT=4000" }; +const QNamePart txtOperational1Parts[] = { "SII=32", "SAI=30", "SAT=4000", "T=6" }; PtrResourceRecord ptrOperationalService = PtrResourceRecord(kDnsSdQueryName, kMatterOperationalQueryName); PtrResourceRecord ptrOperational1 = PtrResourceRecord(kMatterOperationalQueryName, kInstanceName1); SrvResourceRecord srvOperational1 = SrvResourceRecord(kInstanceName1, kHostnameName, CHIP_PORT); diff --git a/src/lib/support/CodeUtils.h b/src/lib/support/CodeUtils.h index 500804bc94912d..800123aa456851 100644 --- a/src/lib/support/CodeUtils.h +++ b/src/lib/support/CodeUtils.h @@ -392,6 +392,19 @@ constexpr inline const _T & max(const _T & a, const _T & b) */ #define SuccessOrExit(error) nlEXPECT(::chip::ChipError::IsSuccess((error)), exit) +/** + * @def SuccessOrExitAction(error, anAction) + * + * @brief + * This checks for the specified error, which is expected to + * commonly be successful (CHIP_NO_ERROR), and both executes + * @a anAction and branches to the local label 'exit' if the + * status is unsuccessful. + * + * @param[in] error A ChipError object to be evaluated against success (CHIP_NO_ERROR). + */ +#define SuccessOrExitAction(error, action) nlEXPECT_ACTION(::chip::ChipError::IsSuccess((error)), exit, action) + /** * @def VerifyOrExit(aCondition, anAction) * diff --git a/src/lib/support/CommonIterator.h b/src/lib/support/CommonIterator.h index fc799c33b233eb..0eec391a40e777 100644 --- a/src/lib/support/CommonIterator.h +++ b/src/lib/support/CommonIterator.h @@ -46,7 +46,7 @@ class CommonIterator virtual bool Next(T & item) = 0; /** * Release the memory allocated by this iterator. - * Must be called before the iterator goes out of scope in the iterator was dynamically allocated. + * Must be called before the iterator goes out of scope if the iterator was dynamically allocated. */ virtual void Release() = 0; diff --git a/src/lib/support/DefaultStorageKeyAllocator.h b/src/lib/support/DefaultStorageKeyAllocator.h index 04825c9ca4d719..9ed8a2f56cfd77 100644 --- a/src/lib/support/DefaultStorageKeyAllocator.h +++ b/src/lib/support/DefaultStorageKeyAllocator.h @@ -193,6 +193,17 @@ class DefaultStorageKeyAllocator return StorageKeyName::Formatted("f/%x/icd/%x", fabric, index); } + // Thread Network Directory + + static StorageKeyName ThreadNetworkDirectoryIndex() { return StorageKeyName::FromConst("g/tnd/i"); } + static StorageKeyName ThreadNetworkDirectoryDataset(uint64_t extendedPanId) + { + return StorageKeyName::Formatted("g/tnd/n/%08" PRIx32 "%08" PRIx32, // some platforms can't format uint64 + static_cast(extendedPanId >> 32), static_cast(extendedPanId)); + } + + // OTA + static StorageKeyName OTADefaultProviders() { return StorageKeyName::FromConst("g/o/dp"); } static StorageKeyName OTACurrentProvider() { return StorageKeyName::FromConst("g/o/cp"); } static StorageKeyName OTAUpdateToken() { return StorageKeyName::FromConst("g/o/ut"); } diff --git a/src/lib/support/Span.h b/src/lib/support/Span.h index a6f63c7c59f33e..2e6627d937e560 100644 --- a/src/lib/support/Span.h +++ b/src/lib/support/Span.h @@ -364,6 +364,8 @@ using ByteSpan = Span; using MutableByteSpan = Span; template using FixedByteSpan = FixedSpan; +template +using MutableFixedByteSpan = FixedSpan; using CharSpan = Span; using MutableCharSpan = Span; diff --git a/src/lib/support/TestPersistentStorageDelegate.h b/src/lib/support/TestPersistentStorageDelegate.h index 8d3bfd63e11bb2..7dc1c06008c77c 100644 --- a/src/lib/support/TestPersistentStorageDelegate.h +++ b/src/lib/support/TestPersistentStorageDelegate.h @@ -134,6 +134,11 @@ class TestPersistentStorageDelegate : public PersistentStorageDelegate */ virtual void AddPoisonKey(const std::string & key) { mPoisonKeys.insert(key); } + /** + * Allows subsequent writes to be rejected for unit testing purposes. + */ + virtual void SetRejectWrites(bool rejectWrites) { mRejectWrites = rejectWrites; } + /** * @brief Clear all "poison keys" * @@ -233,8 +238,8 @@ class TestPersistentStorageDelegate : public PersistentStorageDelegate virtual CHIP_ERROR SyncSetKeyValueInternal(const char * key, const void * value, uint16_t size) { - // Make sure poison keys are not accessed - if (mPoisonKeys.find(std::string(key)) != mPoisonKeys.end()) + // Make sure writes are allowed and poison keys are not accessed + if (mRejectWrites || mPoisonKeys.find(std::string(key)) != mPoisonKeys.end()) { return CHIP_ERROR_PERSISTED_STORAGE_FAILED; } @@ -259,8 +264,8 @@ class TestPersistentStorageDelegate : public PersistentStorageDelegate virtual CHIP_ERROR SyncDeleteKeyValueInternal(const char * key) { - // Make sure poison keys are not accessed - if (mPoisonKeys.find(std::string(key)) != mPoisonKeys.end()) + // Make sure writes are allowed and poison keys are not accessed + if (mRejectWrites || mPoisonKeys.find(std::string(key)) != mPoisonKeys.end()) { return CHIP_ERROR_PERSISTED_STORAGE_FAILED; } @@ -273,6 +278,7 @@ class TestPersistentStorageDelegate : public PersistentStorageDelegate std::map> mStorage; std::set mPoisonKeys; + bool mRejectWrites = false; LoggingLevel mLoggingLevel = LoggingLevel::kDisabled; }; diff --git a/src/lib/support/ThreadOperationalDataset.cpp b/src/lib/support/ThreadOperationalDataset.cpp index 9f2ae6a1b1a8ec..1c11712166cfa4 100644 --- a/src/lib/support/ThreadOperationalDataset.cpp +++ b/src/lib/support/ThreadOperationalDataset.cpp @@ -39,9 +39,11 @@ namespace Thread { class ThreadTLV final { static constexpr uint8_t kLengthEscape = 0xff; ///< This length value indicates the actual length is of two-bytes length, which - ///< not allowed in Thread Operational Dataset TLVs. + ///< is not allowed in Thread Operational Dataset TLVs. public: + static constexpr uint8_t kMaxLength = kLengthEscape - 1; + enum : uint8_t { kChannel = 0, @@ -51,7 +53,9 @@ class ThreadTLV final kPSKc = 4, kMasterKey = 5, kMeshLocalPrefix = 7, + kSecurityPolicy = 12, kActiveTimestamp = 14, + kChannelMask = 53, }; uint8_t GetSize() const { return static_cast(sizeof(*this) + GetLength()); } @@ -127,6 +131,8 @@ class ThreadTLV final memcpy(GetValue(), aValue, aLength); } + void SetValue(const ByteSpan & aValue) { SetValue(aValue.data(), static_cast(aValue.size())); } + const ThreadTLV * GetNext() const { static_assert(alignof(ThreadTLV) == 1, "Wrong alignment for ThreadTLV header"); @@ -239,12 +245,21 @@ CHIP_ERROR OperationalDataset::GetExtendedPanId(uint8_t (&aExtendedPanId)[kSizeE return CHIP_NO_ERROR; } +CHIP_ERROR OperationalDataset::GetExtendedPanId(uint64_t & extendedPanId) const +{ + ByteSpan extPanIdSpan; + ReturnErrorOnFailure(GetExtendedPanIdAsByteSpan(extPanIdSpan)); + VerifyOrDie(extPanIdSpan.size() == sizeof(extendedPanId)); + extendedPanId = Encoding::BigEndian::Get64(extPanIdSpan.data()); + return CHIP_NO_ERROR; +} + CHIP_ERROR OperationalDataset::GetExtendedPanIdAsByteSpan(ByteSpan & span) const { const ThreadTLV * tlv = Locate(ThreadTLV::kExtendedPanId); VerifyOrReturnError(tlv != nullptr, CHIP_ERROR_TLV_TAG_NOT_FOUND); VerifyOrReturnError(tlv->GetLength() == kSizeExtendedPanId, CHIP_ERROR_INVALID_TLV_ELEMENT); - span = ByteSpan(static_cast(tlv->GetValue()), tlv->GetLength()); + span = tlv->GetValueAsSpan(); return CHIP_NO_ERROR; } @@ -374,6 +389,43 @@ CHIP_ERROR OperationalDataset::SetPSKc(const uint8_t (&aPSKc)[kSizePSKc]) return CHIP_NO_ERROR; } +CHIP_ERROR OperationalDataset::GetChannelMask(ByteSpan & aChannelMask) const +{ + const ThreadTLV * tlv = Locate(ThreadTLV::kChannelMask); + VerifyOrReturnError(tlv != nullptr, CHIP_ERROR_TLV_TAG_NOT_FOUND); + VerifyOrReturnError(tlv->GetLength() > 0, CHIP_ERROR_INVALID_TLV_ELEMENT); + aChannelMask = tlv->GetValueAsSpan(); + return CHIP_NO_ERROR; +} + +CHIP_ERROR OperationalDataset::SetChannelMask(ByteSpan aChannelMask) +{ + VerifyOrReturnError(0 < aChannelMask.size() && aChannelMask.size() < ThreadTLV::kMaxLength, CHIP_ERROR_INVALID_ARGUMENT); + ThreadTLV * tlv = MakeRoom(ThreadTLV::kChannelMask, sizeof(*tlv) + aChannelMask.size()); + VerifyOrReturnError(tlv != nullptr, CHIP_ERROR_NO_MEMORY); + tlv->SetValue(aChannelMask); + mLength = static_cast(mLength + tlv->GetSize()); + return CHIP_NO_ERROR; +} + +CHIP_ERROR OperationalDataset::GetSecurityPolicy(uint32_t & aSecurityPolicy) const +{ + const ThreadTLV * tlv = Locate(ThreadTLV::kSecurityPolicy); + VerifyOrReturnError(tlv != nullptr, CHIP_ERROR_TLV_TAG_NOT_FOUND); + VerifyOrReturnError(tlv->GetLength() == sizeof(aSecurityPolicy), CHIP_ERROR_INVALID_TLV_ELEMENT); + tlv->Get32(aSecurityPolicy); + return CHIP_NO_ERROR; +} + +CHIP_ERROR OperationalDataset::SetSecurityPolicy(uint32_t aSecurityPolicy) +{ + ThreadTLV * tlv = MakeRoom(ThreadTLV::kSecurityPolicy, sizeof(*tlv) + sizeof(aSecurityPolicy)); + VerifyOrReturnError(tlv != nullptr, CHIP_ERROR_NO_MEMORY); + tlv->Set32(aSecurityPolicy); + mLength = static_cast(mLength + tlv->GetSize()); + return CHIP_NO_ERROR; +} + void OperationalDataset::UnsetMasterKey() { Remove(ThreadTLV::kMasterKey); diff --git a/src/lib/support/ThreadOperationalDataset.h b/src/lib/support/ThreadOperationalDataset.h index 7bb528d691c193..5cd57df6a79db6 100644 --- a/src/lib/support/ThreadOperationalDataset.h +++ b/src/lib/support/ThreadOperationalDataset.h @@ -110,10 +110,20 @@ class OperationalDataset */ CHIP_ERROR GetExtendedPanId(uint8_t (&aExtendedPanId)[kSizeExtendedPanId]) const; + /** + * This method retrieves the Thread extended PAN ID from the dataset, interpreted as a big endian number. + * @retval CHIP_NO_ERROR Successfully retrieved the extended PAN ID. + * @retval CHIP_ERROR_TLV_TAG_NOT_FOUND Thread extended PAN ID is not present in the dataset. + */ + CHIP_ERROR GetExtendedPanId(uint64_t & extendedPanId) const; + /** * This method returns a const ByteSpan to the extended PAN ID in the dataset. * This can be used to pass the extended PAN ID to a cluster command without the use of external memory. * + * Note: The returned span points into storage managed by this class, + * and must not be dereferenced beyond the lifetime of this object. + * * @param[out] span A reference to receive the location of the extended PAN ID. * * @retval CHIP_NO_ERROR Successfully retrieved the extended PAN ID. @@ -247,6 +257,43 @@ class OperationalDataset */ void UnsetPSKc(void); + /** + * Returns ByteSpan pointing to the channel mask within the dataset. + * + * Note: The returned span points into storage managed by this class, + * and must not be dereferenced beyond the lifetime of this object. + * + * @retval CHIP_NO_ERROR on success. + * @retval CHIP_ERROR_TLV_TAG_NOT_FOUND if the channel mask is not present in the dataset. + * @retval CHIP_ERROR_INVALID_TLV_ELEMENT if the TLV element is invalid. + */ + CHIP_ERROR GetChannelMask(ByteSpan & aChannelMask) const; + + /** + * This method sets the channel mask within the dataset. + * + * @retval CHIP_NO_ERROR on success. + * @retval CHIP_ERROR_NO_MEMORY if there is insufficient space within the dataset. + */ + CHIP_ERROR SetChannelMask(ByteSpan aChannelMask); + + /** + * Retrieves the security policy from the dataset. + * + * @retval CHIP_NO_ERROR on success. + * @retval CHIP_ERROR_TLV_TAG_NOT_FOUND if no security policy is present in the dataset. + * @retval CHIP_ERROR_INVALID_TLV_ELEMENT if the TLV element is invalid. + */ + CHIP_ERROR GetSecurityPolicy(uint32_t & aSecurityPolicy) const; + + /** + * This method sets the security policy within the dataset. + * + * @retval CHIP_NO_ERROR on success. + * @retval CHIP_ERROR_NO_MEMORY if there is insufficient space within the dataset. + */ + CHIP_ERROR SetSecurityPolicy(uint32_t aSecurityPolicy); + /** * This method clears all data stored in the dataset. */ @@ -254,7 +301,6 @@ class OperationalDataset /** * This method checks if the dataset is ready for creating Thread network. - * */ bool IsCommissioned(void) const; @@ -267,7 +313,6 @@ class OperationalDataset * This method checks whether @p aData is formatted as ThreadTLVs. * * @note This method doesn't verify ThreadTLV values are valid. - * */ static bool IsValid(ByteSpan aData); diff --git a/src/lib/support/tests/TestThreadOperationalDataset.cpp b/src/lib/support/tests/TestThreadOperationalDataset.cpp index 3c60230a573a2a..2ea4d3c99eba30 100644 --- a/src/lib/support/tests/TestThreadOperationalDataset.cpp +++ b/src/lib/support/tests/TestThreadOperationalDataset.cpp @@ -276,6 +276,15 @@ TEST_F(TestThreadOperationalDataset, TestExampleDataset) 0x3c, 0xa6, 0x7c, 0x96, 0x9e, 0xfb, 0x0d, 0x0c, 0x74, 0xa4, 0xd8, 0xee, 0x92, 0x3b, 0x57, 0x6c }; EXPECT_TRUE(ByteSpan(pksc).data_equal(ByteSpan(expectedPksc))); + + ByteSpan channelMask; + EXPECT_EQ(dataset.GetChannelMask(channelMask), CHIP_NO_ERROR); + const uint8_t expectedChannelMask[] = { 0x07, 0xff, 0xf8, 0x00 }; + EXPECT_TRUE(channelMask.data_equal(ByteSpan(expectedChannelMask))); + + uint32_t securityPolicy; + EXPECT_EQ(dataset.GetSecurityPolicy(securityPolicy), CHIP_NO_ERROR); + EXPECT_EQ(securityPolicy, 0x02a0f7f8u); } TEST_F(TestThreadOperationalDataset, TestInvalidExampleDataset) @@ -319,6 +328,12 @@ TEST_F(TestThreadOperationalDataset, TestInvalidExampleDataset) uint8_t pksc[Thread::kSizePSKc]; EXPECT_EQ(dataset.GetPSKc(pksc), CHIP_ERROR_INVALID_TLV_ELEMENT); + + ByteSpan channelMask; + EXPECT_EQ(dataset.GetChannelMask(channelMask), CHIP_ERROR_INVALID_TLV_ELEMENT); + + uint32_t securityPolicy; + EXPECT_EQ(dataset.GetSecurityPolicy(securityPolicy), CHIP_ERROR_INVALID_TLV_ELEMENT); } } // namespace diff --git a/src/platform/ASR/BLEManagerImpl.cpp b/src/platform/ASR/BLEManagerImpl.cpp index 012fb54f8718dc..e06968111b674c 100644 --- a/src/platform/ASR/BLEManagerImpl.cpp +++ b/src/platform/ASR/BLEManagerImpl.cpp @@ -284,25 +284,27 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { log_i("%s:%s:%d\r\n", "BLEManagerImpl", __func__, __LINE__); ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { log_i("%s:%s:%d\r\n", "BLEManagerImpl", __func__, __LINE__); ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { log_i("%s:%s:%d\r\n", "BLEManagerImpl", __func__, __LINE__); matter_close_connection(conId); - return true; + return CHIP_NO_ERROR; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -324,8 +326,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const } } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; CHIPoBLEConState * conState = GetConnectionState(conId); @@ -335,20 +337,15 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU matter_tx_char_send_indication(conId, data->DataLength(), data->Start()); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { log_i("%s:%s:%d\r\n", "BLEManagerImpl", __func__, __LINE__); ChipLogError(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) {} diff --git a/src/platform/ASR/BLEManagerImpl.h b/src/platform/ASR/BLEManagerImpl.h index 71198f4679791d..7e4ab99bd285a8 100644 --- a/src/platform/ASR/BLEManagerImpl.h +++ b/src/platform/ASR/BLEManagerImpl.h @@ -53,16 +53,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Ameba/BLEManagerImpl.cpp b/src/platform/Ameba/BLEManagerImpl.cpp index 72367e1ee1d0bf..f0bbecb42019e5 100644 --- a/src/platform/Ameba/BLEManagerImpl.cpp +++ b/src/platform/Ameba/BLEManagerImpl.cpp @@ -511,19 +511,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err; ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %u)", conId); @@ -543,7 +545,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) mFlags.Clear(Flags::kAdvertisingConfigured); PlatformMgr().ScheduleWork(DriveBLEState, 0); - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -557,11 +559,11 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return mtu; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogError(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) @@ -569,8 +571,8 @@ void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) // Nothing to do } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -583,12 +585,7 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU #endif exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + return err; } /******************************************************************************* diff --git a/src/platform/Ameba/BLEManagerImpl.h b/src/platform/Ameba/BLEManagerImpl.h index 06e44f8475a887..9081b2bfb3026d 100644 --- a/src/platform/Ameba/BLEManagerImpl.h +++ b/src/platform/Ameba/BLEManagerImpl.h @@ -63,16 +63,16 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Beken/BLEManagerImpl.cpp b/src/platform/Beken/BLEManagerImpl.cpp index bf1a0dc70e007e..555fbfc7086e11 100644 --- a/src/platform/Beken/BLEManagerImpl.cpp +++ b/src/platform/Beken/BLEManagerImpl.cpp @@ -539,19 +539,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err; ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %u)", conId); @@ -576,7 +578,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) ChipLogError(DeviceLayer, "bk_ble_disconnect() failed: %s", ErrorStr(err)); } - return false; + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -585,11 +587,11 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return (conState != NULL) ? conState->mtu : 0; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogError(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) @@ -597,8 +599,8 @@ void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) // Nothing to do } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; int ret; @@ -607,13 +609,7 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU ret = bk_ble_send_noti_value(conId, data->DataLength(), data->Start(), 0, SVR_FFF6_TX_VALUE); err = MapBLEError(ret); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - - return true; + return err; } /******************************************************************************* diff --git a/src/platform/Beken/BLEManagerImpl.h b/src/platform/Beken/BLEManagerImpl.h index d8789481db4d38..ba52a4e26d271d 100644 --- a/src/platform/Beken/BLEManagerImpl.h +++ b/src/platform/Beken/BLEManagerImpl.h @@ -58,16 +58,16 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Darwin/BlePlatformDelegate.h b/src/platform/Darwin/BlePlatformDelegate.h index 15ff40e976fd47..d53f9007ca1b59 100644 --- a/src/platform/Darwin/BlePlatformDelegate.h +++ b/src/platform/Darwin/BlePlatformDelegate.h @@ -30,14 +30,16 @@ namespace Internal { class BlePlatformDelegateImpl : public Ble::BlePlatformDelegate { public: - virtual bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId); - virtual bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId); - virtual bool CloseConnection(BLE_CONNECTION_OBJECT connObj); - virtual uint16_t GetMTU(BLE_CONNECTION_OBJECT connObj) const; - virtual bool SendIndication(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - virtual bool SendWriteRequest(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT connObj) override; + uint16_t GetMTU(BLE_CONNECTION_OBJECT connObj) const override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; }; } // namespace Internal diff --git a/src/platform/Darwin/BlePlatformDelegateImpl.mm b/src/platform/Darwin/BlePlatformDelegateImpl.mm index d6e12ecf15a11a..d967ea41d2a686 100644 --- a/src/platform/Darwin/BlePlatformDelegateImpl.mm +++ b/src/platform/Darwin/BlePlatformDelegateImpl.mm @@ -38,13 +38,13 @@ namespace chip { namespace DeviceLayer { namespace Internal { - bool BlePlatformDelegateImpl::SubscribeCharacteristic( + CHIP_ERROR BlePlatformDelegateImpl::SubscribeCharacteristic( BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId) { - bool found = false; + CHIP_ERROR err = BLE_ERROR_GATT_SUBSCRIBE_FAILED; if (nullptr == svcId || nullptr == charId) { - return found; + return err; } CBUUID * serviceId = [MTRUUIDHelper GetShortestServiceUUID:svcId]; @@ -55,7 +55,7 @@ if ([service.UUID.data isEqualToData:serviceId.data]) { for (CBCharacteristic * characteristic in service.characteristics) { if ([characteristic.UUID.data isEqualToData:characteristicId.data]) { - found = true; + err = CHIP_NO_ERROR; [peripheral setNotifyValue:true forCharacteristic:characteristic]; break; } @@ -63,15 +63,15 @@ } } - return found; + return err; } - bool BlePlatformDelegateImpl::UnsubscribeCharacteristic( + CHIP_ERROR BlePlatformDelegateImpl::UnsubscribeCharacteristic( BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId) { - bool found = false; + CHIP_ERROR err = BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; if (nullptr == svcId || nullptr == charId) { - return found; + return err; } CBUUID * serviceId = [MTRUUIDHelper GetShortestServiceUUID:svcId]; @@ -83,7 +83,7 @@ if ([service.UUID.data isEqualToData:serviceId.data]) { for (CBCharacteristic * characteristic in service.characteristics) { if ([characteristic.UUID.data isEqualToData:characteristicId.data]) { - found = true; + err = CHIP_NO_ERROR; [peripheral setNotifyValue:false forCharacteristic:characteristic]; break; } @@ -91,10 +91,10 @@ } } - return found; + return err; } - bool BlePlatformDelegateImpl::CloseConnection(BLE_CONNECTION_OBJECT connObj) + CHIP_ERROR BlePlatformDelegateImpl::CloseConnection(BLE_CONNECTION_OBJECT connObj) { CBPeripheral * peripheral = (__bridge CBPeripheral *) connObj; @@ -103,7 +103,7 @@ if (manager != nil) [manager cancelPeripheralConnection:peripheral]; - return true; + return CHIP_NO_ERROR; } uint16_t BlePlatformDelegateImpl::GetMTU(BLE_CONNECTION_OBJECT connObj) const @@ -117,18 +117,18 @@ return mtuLength; } - bool BlePlatformDelegateImpl::SendIndication( + CHIP_ERROR BlePlatformDelegateImpl::SendIndication( BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, PacketBufferHandle pBuf) { - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } - bool BlePlatformDelegateImpl::SendWriteRequest( + CHIP_ERROR BlePlatformDelegateImpl::SendWriteRequest( BLE_CONNECTION_OBJECT connObj, const ChipBleUUID * svcId, const ChipBleUUID * charId, PacketBufferHandle pBuf) { - bool found = false; + CHIP_ERROR err = BLE_ERROR_GATT_WRITE_FAILED; if (nullptr == svcId || nullptr == charId || pBuf.IsNull()) { - return found; + return err; } CBUUID * serviceId = [MTRUUIDHelper GetShortestServiceUUID:svcId]; @@ -140,7 +140,7 @@ if ([service.UUID.data isEqualToData:serviceId.data]) { for (CBCharacteristic * characteristic in service.characteristics) { if ([characteristic.UUID.data isEqualToData:characteristicId.data]) { - found = true; + err = CHIP_NO_ERROR; [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse]; break; } @@ -151,7 +151,7 @@ // Going out of scope releases delegate's reference to pBuf. pBuf will be freed when both platform delegate and Chip // stack free their references to it. We release pBuf's reference here since its payload bytes were copied into a new // NSData object - return found; + return err; } } // namespace Internal diff --git a/src/platform/ESP32/BLEManagerImpl.h b/src/platform/ESP32/BLEManagerImpl.h index 2bed34902002c1..eeed125012b00f 100644 --- a/src/platform/ESP32/BLEManagerImpl.h +++ b/src/platform/ESP32/BLEManagerImpl.h @@ -171,16 +171,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp index 07c02647055ca8..f542af93b6f848 100644 --- a/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp +++ b/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp @@ -737,7 +737,8 @@ void BLEManagerImpl::ConnectDevice(esp_bd_addr_t & addr, esp_ble_addr_type_t add } #endif -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER uint8_t value[2]; @@ -752,20 +753,21 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const { ChipLogError(Ble, "esp_ble_gattc_get_descr_by_char_handle failed: %d", rc); esp_ble_gattc_close(chip_ctrl_gattc_if, conId); - return false; + return BLE_ERROR_GATT_SUBSCRIBE_FAILED; } ChipDeviceEvent event; event.Type = DeviceEventType::kPlatformESP32BLESubscribeOpComplete; event.Platform.BLESubscribeOpComplete.mConnection = conId; event.Platform.BLESubscribeOpComplete.mIsSubscribed = true; PlatformMgr().PostEventOrDie(&event); - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER uint8_t value[2]; @@ -780,20 +782,20 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons { ChipLogError(Ble, "ble_gattc_write_flat failed: %d", rc); esp_ble_gattc_close(chip_ctrl_gattc_if, conId); - return false; + return BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; } ChipDeviceEvent event; event.Type = DeviceEventType::kPlatformESP32BLESubscribeOpComplete; event.Platform.BLESubscribeOpComplete.mConnection = conId; event.Platform.BLESubscribeOpComplete.mIsSubscribed = false; PlatformMgr().PostEventOrDie(&event); - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err; @@ -816,7 +818,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) PlatformMgr().ScheduleWork(DriveBLEState, 0); #endif - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -825,8 +827,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return (conState != NULL) ? conState->MTU : 0; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; CHIPoBLEConState * conState = GetConnectionState(conId); @@ -854,16 +856,11 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU conState->PendingIndBuf = std::move(data); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER ChipLogProgress(Ble, "In send write request\n"); @@ -875,15 +872,15 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBle if (rc != 0) { ChipLogError(Ble, "ble_gattc_write_flat failed: %d", rc); - return false; + return BLE_ERROR_GATT_WRITE_FAILED; } ChipDeviceEvent event; event.Type = DeviceEventType::kPlatformESP32BLEWriteComplete; event.Platform.BLEWriteComplete.mConnection = conId; PlatformMgr().PostEventOrDie(&event); - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } diff --git a/src/platform/ESP32/nimble/BLEManagerImpl.cpp b/src/platform/ESP32/nimble/BLEManagerImpl.cpp index 56b0ae7ffd20c2..4f6ab4f73f7200 100644 --- a/src/platform/ESP32/nimble/BLEManagerImpl.cpp +++ b/src/platform/ESP32/nimble/BLEManagerImpl.cpp @@ -484,7 +484,8 @@ static int OnSubscribeCharComplete(uint16_t conn_handle, const struct ble_gatt_e } #endif -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER const struct peer_dsc * dsc; @@ -493,7 +494,7 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const struct peer * peer = peer_find(conId); if (peer == nullptr) { - return false; + return BLE_ERROR_GATT_SUBSCRIBE_FAILED; } dsc = peer_dsc_find_uuid(peer, (ble_uuid_t *) (&ShortUUID_CHIPoBLEService), (ble_uuid_t *) (&UUID_CHIPoBLEChar_TX), @@ -503,7 +504,7 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const { ChipLogError(Ble, "Peer does not have CCCD"); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_SUBSCRIBE_FAILED; } value[0] = 0x02; @@ -514,15 +515,16 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const { ChipLogError(Ble, "ble_gattc_write_flat failed: %d", rc); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_SUBSCRIBE_FAILED; } - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER const struct peer_dsc * dsc; @@ -531,7 +533,7 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons struct peer * peer = peer_find(conId); if (peer == nullptr) { - return false; + return BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; } dsc = peer_dsc_find_uuid(peer, (ble_uuid_t *) (&ShortUUID_CHIPoBLEService), (ble_uuid_t *) (&UUID_CHIPoBLEChar_TX), @@ -541,7 +543,7 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons { ChipLogError(Ble, "Peer does not have CCCD"); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; } value[0] = 0x00; @@ -552,15 +554,15 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons { ChipLogError(Ble, "ble_gattc_write_flat failed: %d", rc); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; } - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err; @@ -580,7 +582,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) PlatformMgr().ScheduleWork(DriveBLEState, 0); #endif - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -588,8 +590,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return ble_att_mtu(conId); } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - chip::System::PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + chip::System::PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; struct os_mbuf * om; @@ -618,12 +620,7 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU } exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + return err; } #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER @@ -643,8 +640,8 @@ static int OnWriteComplete(uint16_t conn_handle, const struct ble_gatt_error * e } #endif -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + chip::System::PacketBufferHandle pBuf) { #ifdef CONFIG_ENABLE_ESP32_BLE_CONTROLLER const struct peer_chr * chr; @@ -656,7 +653,7 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBle { ChipLogError(Ble, "Peer does not have RX characteristic"); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_WRITE_FAILED; } if (pBuf->DataLength() > UINT16_MAX) @@ -670,11 +667,11 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBle { ChipLogError(Ble, "ble_gattc_write_flat failed: %d", rc); ble_gap_terminate(peer->conn_handle, BLE_ERR_REM_USER_CONN_TERM); - return false; + return BLE_ERROR_GATT_WRITE_FAILED; } - return true; + return CHIP_NO_ERROR; #else - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; #endif } diff --git a/src/platform/Infineon/CYW30739/BLEManagerImpl.cpp b/src/platform/Infineon/CYW30739/BLEManagerImpl.cpp index afc0be2f9410e7..7afeb59b69e172 100644 --- a/src/platform/Infineon/CYW30739/BLEManagerImpl.cpp +++ b/src/platform/Infineon/CYW30739/BLEManagerImpl.cpp @@ -226,30 +226,30 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %u)", conId); // Initiate a GAP disconnect. wiced_bt_gatt_status_t gatt_err = wiced_bt_gatt_disconnect((uint16_t) conId); - if (gatt_err != WICED_BT_GATT_SUCCESS) - { - ChipLogError(DeviceLayer, "wiced_bt_gatt_disconnect() failed: %d", gatt_err); - } + VerifyOrReturnError(gatt_err == WICED_BT_GATT_SUCCESS, CHIP_ERROR_INTERNAL, + ChipLogError(DeviceLayer, "wiced_bt_gatt_disconnect() failed: %d", gatt_err)); - return (gatt_err == WICED_BT_GATT_SUCCESS); + return CHIP_NO_ERROR; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -269,8 +269,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const } } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; uint16_t dataLen = data->DataLength(); @@ -288,17 +288,16 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU if (gatt_err != WICED_BT_GATT_SUCCESS) { ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %d", gatt_err); - return false; + return BLE_ERROR_GATT_INDICATE_FAILED; } - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) {} diff --git a/src/platform/Infineon/CYW30739/BLEManagerImpl.h b/src/platform/Infineon/CYW30739/BLEManagerImpl.h index 1d452267d0b989..90a3b3ef2d6dab 100644 --- a/src/platform/Infineon/CYW30739/BLEManagerImpl.h +++ b/src/platform/Infineon/CYW30739/BLEManagerImpl.h @@ -68,16 +68,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Infineon/PSOC6/BLEManagerImpl.cpp b/src/platform/Infineon/PSOC6/BLEManagerImpl.cpp index ea896cdf62cf38..c5e6f3df4fdf15 100644 --- a/src/platform/Infineon/PSOC6/BLEManagerImpl.cpp +++ b/src/platform/Infineon/PSOC6/BLEManagerImpl.cpp @@ -270,30 +270,30 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %u)", conId); // Initiate a GAP disconnect. wiced_bt_gatt_status_t gatt_err = wiced_bt_gatt_disconnect((uint16_t) conId); - if (gatt_err != WICED_BT_GATT_SUCCESS) - { - ChipLogError(DeviceLayer, "wiced_bt_gatt_disconnect() failed: %d", gatt_err); - } + VerifyOrReturnError(gatt_err == WICED_BT_GATT_SUCCESS, CHIP_ERROR_INTERNAL, + ChipLogError(DeviceLayer, "wiced_bt_gatt_disconnect() failed: %d", gatt_err)); - return (gatt_err == WICED_BT_GATT_SUCCESS); + return CHIP_NO_ERROR; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -313,8 +313,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const } } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; uint16_t dataLen = data->DataLength(); @@ -335,17 +335,16 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU if (gatt_err != WICED_BT_GATT_SUCCESS) { ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %d", gatt_err); - return false; + return BLE_ERROR_GATT_INDICATE_FAILED; } - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) {} diff --git a/src/platform/Infineon/PSOC6/BLEManagerImpl.h b/src/platform/Infineon/PSOC6/BLEManagerImpl.h index 266dc7db7eab00..ae8da4b930b230 100644 --- a/src/platform/Infineon/PSOC6/BLEManagerImpl.h +++ b/src/platform/Infineon/PSOC6/BLEManagerImpl.h @@ -65,16 +65,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle data) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle data) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Infineon/PSOC6/BUILD.gn b/src/platform/Infineon/PSOC6/BUILD.gn index bc048a31d3a9b7..3fd150eeeaae13 100644 --- a/src/platform/Infineon/PSOC6/BUILD.gn +++ b/src/platform/Infineon/PSOC6/BUILD.gn @@ -48,10 +48,10 @@ static_library("PSOC6") { "NetworkCommissioningWiFiDriver.cpp", "OTAImageProcessorImpl.cpp", "OTAImageProcessorImpl.h", - "P6Config.cpp", - "P6Config.h", - "P6Utils.cpp", - "P6Utils.h", + "PSOC6Config.cpp", + "PSOC6Config.h", + "PSOC6Utils.cpp", + "PSOC6Utils.h", "PlatformManagerImpl.cpp", "PlatformManagerImpl.h", "SystemPlatformConfig.h", diff --git a/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.cpp b/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.cpp index 67ed7f1d8eab4b..220caf0bdddc2f 100644 --- a/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.cpp +++ b/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.cpp @@ -28,7 +28,7 @@ #include #include -#include +#include #include namespace chip { @@ -48,13 +48,13 @@ CHIP_ERROR ConfigurationManagerImpl::Init() uint32_t rebootCount; // Save out software version on first boot - if (!P6Config::ConfigValueExists(P6Config::kConfigKey_SoftwareVersion)) + if (!PSOC6Config::ConfigValueExists(PSOC6Config::kConfigKey_SoftwareVersion)) { err = StoreSoftwareVersion(CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION); SuccessOrExit(err); } - if (P6Config::ConfigValueExists(P6Config::kCounterKey_RebootCount)) + if (PSOC6Config::ConfigValueExists(PSOC6Config::kCounterKey_RebootCount)) { err = GetRebootCount(rebootCount); SuccessOrExit(err); @@ -69,14 +69,14 @@ CHIP_ERROR ConfigurationManagerImpl::Init() SuccessOrExit(err); } - if (!P6Config::ConfigValueExists(P6Config::kCounterKey_TotalOperationalHours)) + if (!PSOC6Config::ConfigValueExists(PSOC6Config::kCounterKey_TotalOperationalHours)) { err = StoreTotalOperationalHours(0); SuccessOrExit(err); } // Initialize the generic implementation base class. - err = Internal::GenericConfigurationManagerImpl::Init(); + err = Internal::GenericConfigurationManagerImpl::Init(); VerifyOrReturnError(CHIP_NO_ERROR == err, err); exit: @@ -85,32 +85,32 @@ CHIP_ERROR ConfigurationManagerImpl::Init() CHIP_ERROR ConfigurationManagerImpl::GetRebootCount(uint32_t & rebootCount) { - return ReadConfigValue(P6Config::kCounterKey_RebootCount, rebootCount); + return ReadConfigValue(PSOC6Config::kCounterKey_RebootCount, rebootCount); } CHIP_ERROR ConfigurationManagerImpl::StoreRebootCount(uint32_t rebootCount) { - return WriteConfigValue(P6Config::kCounterKey_RebootCount, rebootCount); + return WriteConfigValue(PSOC6Config::kCounterKey_RebootCount, rebootCount); } CHIP_ERROR ConfigurationManagerImpl::GetSoftwareVersion(uint32_t & softwareVer) { - return ReadConfigValue(P6Config::kConfigKey_SoftwareVersion, softwareVer); + return ReadConfigValue(PSOC6Config::kConfigKey_SoftwareVersion, softwareVer); } CHIP_ERROR ConfigurationManagerImpl::StoreSoftwareVersion(uint32_t softwareVer) { - return WriteConfigValue(P6Config::kConfigKey_SoftwareVersion, softwareVer); + return WriteConfigValue(PSOC6Config::kConfigKey_SoftwareVersion, softwareVer); } CHIP_ERROR ConfigurationManagerImpl::GetTotalOperationalHours(uint32_t & totalOperationalHours) { - return ReadConfigValue(P6Config::kCounterKey_TotalOperationalHours, totalOperationalHours); + return ReadConfigValue(PSOC6Config::kCounterKey_TotalOperationalHours, totalOperationalHours); } CHIP_ERROR ConfigurationManagerImpl::StoreTotalOperationalHours(uint32_t totalOperationalHours) { - return WriteConfigValue(P6Config::kCounterKey_TotalOperationalHours, totalOperationalHours); + return WriteConfigValue(PSOC6Config::kCounterKey_TotalOperationalHours, totalOperationalHours); } CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf) @@ -163,62 +163,62 @@ CHIP_ERROR ConfigurationManagerImpl::WritePersistedStorageValue(::chip::Platform CHIP_ERROR ConfigurationManagerImpl::ReadConfigValue(Key key, bool & val) { - return P6Config::ReadConfigValue(key, val); + return PSOC6Config::ReadConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::ReadConfigValue(Key key, uint32_t & val) { - return P6Config::ReadConfigValue(key, val); + return PSOC6Config::ReadConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::ReadConfigValue(Key key, uint64_t & val) { - return P6Config::ReadConfigValue(key, val); + return PSOC6Config::ReadConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::ReadConfigValueStr(Key key, char * buf, size_t bufSize, size_t & outLen) { - return P6Config::ReadConfigValueStr(key, buf, bufSize, outLen); + return PSOC6Config::ReadConfigValueStr(key, buf, bufSize, outLen); } CHIP_ERROR ConfigurationManagerImpl::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, size_t & outLen) { - return P6Config::ReadConfigValueBin(key, buf, bufSize, outLen); + return PSOC6Config::ReadConfigValueBin(key, buf, bufSize, outLen); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValue(Key key, bool val) { - return P6Config::WriteConfigValue(key, val); + return PSOC6Config::WriteConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValue(Key key, uint32_t val) { - return P6Config::WriteConfigValue(key, val); + return PSOC6Config::WriteConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValue(Key key, uint64_t val) { - return P6Config::WriteConfigValue(key, val); + return PSOC6Config::WriteConfigValue(key, val); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValueStr(Key key, const char * str) { - return P6Config::WriteConfigValueStr(key, str); + return PSOC6Config::WriteConfigValueStr(key, str); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValueStr(Key key, const char * str, size_t strLen) { - return P6Config::WriteConfigValueStr(key, str, strLen); + return PSOC6Config::WriteConfigValueStr(key, str, strLen); } CHIP_ERROR ConfigurationManagerImpl::WriteConfigValueBin(Key key, const uint8_t * data, size_t dataLen) { - return P6Config::WriteConfigValueBin(key, data, dataLen); + return PSOC6Config::WriteConfigValueBin(key, data, dataLen); } void ConfigurationManagerImpl::RunConfigUnitTest(void) { - P6Config::RunConfigUnitTest(); + PSOC6Config::RunConfigUnitTest(); } void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) @@ -227,7 +227,7 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) ChipLogProgress(DeviceLayer, "Performing factory reset"); - err = P6Config::FactoryResetConfig(); + err = PSOC6Config::FactoryResetConfig(); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "FactoryResetConfig() failed: %s", ErrorStr(err)); diff --git a/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.h b/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.h index 1327b3bc546214..4ad9fef2c55a92 100644 --- a/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.h +++ b/src/platform/Infineon/PSOC6/ConfigurationManagerImpl.h @@ -27,7 +27,7 @@ #include -#include "P6Config.h" +#include "PSOC6Config.h" namespace chip { namespace DeviceLayer { @@ -35,7 +35,7 @@ namespace DeviceLayer { /** * Concrete implementation of the ConfigurationManager singleton object for the PSoC6 platform. */ -class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImpl +class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImpl { public: CHIP_ERROR GetRebootCount(uint32_t & rebootCount) override; diff --git a/src/platform/Infineon/PSOC6/ConnectivityManagerImpl.cpp b/src/platform/Infineon/PSOC6/ConnectivityManagerImpl.cpp index b78f6fe757286b..a2f7fae9f32604 100644 --- a/src/platform/Infineon/PSOC6/ConnectivityManagerImpl.cpp +++ b/src/platform/Infineon/PSOC6/ConnectivityManagerImpl.cpp @@ -35,15 +35,17 @@ #include #include -#include +#include #include +#include "cy_network_mw_core.h" +#include "cy_nw_helper.h" + #include #include #include #include -#include "cy_network_mw_core.h" #include "lwip/opt.h" #include #include @@ -55,6 +57,7 @@ using namespace ::chip; using namespace ::chip::Inet; using namespace ::chip::System; +using namespace ::chip::TLV; namespace chip { namespace DeviceLayer { @@ -64,7 +67,7 @@ ConnectivityManagerImpl ConnectivityManagerImpl::sInstance; ConnectivityManager::WiFiStationMode ConnectivityManagerImpl::_GetWiFiStationMode(void) { uint32_t curWiFiMode; - mWiFiStationMode = (Internal::P6Utils::wifi_get_mode(curWiFiMode) == CHIP_NO_ERROR && + mWiFiStationMode = (Internal::PSOC6Utils::wifi_get_mode(curWiFiMode) == CHIP_NO_ERROR && (curWiFiMode == WIFI_MODE_APSTA || curWiFiMode == WIFI_MODE_STA)) ? kWiFiStationMode_Enabled : kWiFiStationMode_Disabled; @@ -103,7 +106,7 @@ bool ConnectivityManagerImpl::_IsWiFiStationEnabled(void) bool ConnectivityManagerImpl::_IsWiFiStationProvisioned(void) { - return Internal::P6Utils::IsStationProvisioned(); + return Internal::PSOC6Utils::IsStationProvisioned(); } void ConnectivityManagerImpl::_ClearWiFiStationProvision(void) @@ -113,7 +116,7 @@ void ConnectivityManagerImpl::_ClearWiFiStationProvision(void) wifi_config_t stationConfig; memset(&stationConfig, 0, sizeof(stationConfig)); - Internal::P6Utils::p6_wifi_set_config(WIFI_IF_STA, &stationConfig); + Internal::PSOC6Utils::p6_wifi_set_config(WIFI_IF_STA, &stationConfig); DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL); DeviceLayer::SystemLayer().ScheduleWork(DriveAPState, NULL); @@ -210,8 +213,8 @@ CHIP_ERROR ConnectivityManagerImpl::_Init() mWiFiAPIdleTimeout = System::Clock::Milliseconds32(CHIP_DEVICE_CONFIG_WIFI_AP_IDLE_TIMEOUT); mFlags.SetRaw(0); - // Ensure that P6 station mode is enabled. - err = Internal::P6Utils::EnableStationMode(); + // Ensure that PSOC6 station mode is enabled. + err = Internal::PSOC6Utils::EnableStationMode(); SuccessOrExit(err); // If there is no persistent station provision... if (!IsWiFiStationProvisioned()) @@ -230,7 +233,7 @@ CHIP_ERROR ConnectivityManagerImpl::_Init() memcpy(wifiConfig.sta.password, CHIP_DEVICE_CONFIG_DEFAULT_STA_PASSWORD, min(strlen(CHIP_DEVICE_CONFIG_DEFAULT_STA_PASSWORD), sizeof(wifiConfig.sta.password))); wifiConfig.sta.security = CHIP_DEVICE_CONFIG_DEFAULT_STA_SECURITY; - err = Internal::P6Utils::p6_wifi_set_config(WIFI_IF_STA, &wifiConfig); + err = Internal::PSOC6Utils::p6_wifi_set_config(WIFI_IF_STA, &wifiConfig); SuccessOrExit(err); // Enable WiFi station mode. @@ -247,7 +250,7 @@ CHIP_ERROR ConnectivityManagerImpl::_Init() ReturnErrorOnFailure(SetWiFiStationMode(kWiFiStationMode_Enabled)); } // Force AP mode off for now. - err = Internal::P6Utils::SetAPMode(false); + err = Internal::PSOC6Utils::SetAPMode(false); SuccessOrExit(err); // Queue work items to bootstrap the station state machines once the Chip event loop is running. @@ -375,10 +378,10 @@ CHIP_ERROR ConnectivityManagerImpl::ConfigureWiFiAP() wifiConfig.ap.ip_settings.gateway = ap_mode_ip_settings.gateway; ChipLogProgress(DeviceLayer, "Configuring WiFi AP: SSID %s, channel %u", wifiConfig.ap.ssid, wifiConfig.ap.channel); - err = Internal::P6Utils::p6_wifi_set_config(WIFI_IF_AP, &wifiConfig); + err = Internal::PSOC6Utils::p6_wifi_set_config(WIFI_IF_AP, &wifiConfig); SuccessOrExit(err); - err = Internal::P6Utils::p6_start_ap(); + err = Internal::PSOC6Utils::p6_start_ap(); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "p6_start_ap failed: %s", chip::ErrorStr(err)); @@ -394,8 +397,8 @@ void ConnectivityManagerImpl::DriveAPState() WiFiAPState targetState; bool APModeEnabled; - // Determine if AP mode is currently enabled in the P6 WiFi layer. - err = Internal::P6Utils::IsAPEnabled(APModeEnabled); + // Determine if AP mode is currently enabled in the PSOC6 WiFi layer. + err = Internal::PSOC6Utils::IsAPEnabled(APModeEnabled); SuccessOrExit(err); // Adjust the Connectivity Manager's AP state to match the state in the WiFi layer. @@ -470,13 +473,13 @@ void ConnectivityManagerImpl::DriveAPState() { // If the target state is 'Active' and the current state is NOT 'Activating', enable // and configure the AP interface, and then enter the 'Activating' state. Eventually - // a SYSTEM_EVENT_AP_START event will be received from the P6 WiFi layer which will + // a SYSTEM_EVENT_AP_START event will be received from the PSOC6 WiFi layer which will // cause the state to transition to 'Active'. if (targetState == kWiFiAPState_Active) { if (mWiFiAPState != kWiFiAPState_Active) { - err = Internal::P6Utils::SetAPMode(true); + err = Internal::PSOC6Utils::SetAPMode(true); SuccessOrExit(err); err = ConfigureWiFiAP(); SuccessOrExit(err); @@ -491,9 +494,9 @@ void ConnectivityManagerImpl::DriveAPState() { if (mWiFiAPState != kWiFiAPState_Deactivating) { - err = Internal::P6Utils::SetAPMode(false); + err = Internal::PSOC6Utils::SetAPMode(false); SuccessOrExit(err); - err = Internal::P6Utils::p6_stop_ap(); + err = Internal::PSOC6Utils::p6_stop_ap(); SuccessOrExit(err); ChangeWiFiAPState(kWiFiAPState_Deactivating); } @@ -505,8 +508,8 @@ void ConnectivityManagerImpl::DriveAPState() if (err != CHIP_NO_ERROR && mWiFiAPMode != kWiFiAPMode_ApplicationControlled) { SetWiFiAPMode(kWiFiAPMode_Disabled); - Internal::P6Utils::SetAPMode(false); - Internal::P6Utils::p6_stop_ap(); + Internal::PSOC6Utils::SetAPMode(false); + Internal::PSOC6Utils::p6_stop_ap(); } } @@ -518,17 +521,17 @@ void ConnectivityManagerImpl::DriveStationState() // If the station interface is NOT under application control... if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled) { - // Ensure that the P6 WiFi layer is started. + // Ensure that the PSOC6 WiFi layer is started. err = WiFi_init(); SuccessOrExit(err); - // Ensure that station mode is enabled in the P6 WiFi layer. - err = Internal::P6Utils::EnableStationMode(); + // Ensure that station mode is enabled in the PSOC6 WiFi layer. + err = Internal::PSOC6Utils::EnableStationMode(); SuccessOrExit(err); } - // Determine if the P6 WiFi layer thinks the station interface is currently connected. - err = Internal::P6Utils::IsStationConnected(stationConnected); + // Determine if the PSOC6 WiFi layer thinks the station interface is currently connected. + err = Internal::PSOC6Utils::IsStationConnected(stationConnected); SuccessOrExit(err); // If the station interface is currently connected ... if (stationConnected) @@ -549,7 +552,7 @@ void ConnectivityManagerImpl::DriveStationState() (mWiFiStationMode != kWiFiStationMode_Enabled || !IsWiFiStationProvisioned())) { ChipLogProgress(DeviceLayer, "Disconnecting WiFi station interface"); - err = Internal::P6Utils::p6_wifi_disconnect(); + err = Internal::PSOC6Utils::p6_wifi_disconnect(); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "p6_wifi_disconnect() failed: %s", chip::ErrorStr(err)); @@ -593,7 +596,7 @@ void ConnectivityManagerImpl::DriveStationState() { ChangeWiFiStationState(kWiFiStationState_Connecting); ChipLogProgress(DeviceLayer, "Attempting to connect WiFi station interface"); - err = Internal::P6Utils::p6_wifi_connect(); + err = Internal::PSOC6Utils::p6_wifi_connect(); if (err != CHIP_NO_ERROR) { ChipLogError(DeviceLayer, "p6_wifi_connect() failed: %s", chip::ErrorStr(err)); @@ -632,7 +635,7 @@ void ConnectivityManagerImpl::UpdateInternetConnectivityState(void) struct netif * net_interface = NULL; IPAddress addr; bool stationConnected; - Internal::P6Utils::IsStationConnected(stationConnected); + Internal::PSOC6Utils::IsStationConnected(stationConnected); ChipLogProgress(DeviceLayer, "UpdateInternetConnectivityState"); // If the WiFi station is currently in the connected state... @@ -705,7 +708,7 @@ CHIP_ERROR ConnectivityManagerImpl::WiFi_init(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; - err = Internal::P6Utils::StartWiFiLayer(); + err = Internal::PSOC6Utils::StartWiFiLayer(); SuccessOrExit(err); /* Register event callback */ if (eventcallback == false) @@ -726,7 +729,7 @@ CHIP_ERROR ConnectivityManagerImpl::WiFi_init(void) CHIP_ERROR ConnectivityManagerImpl::ping_thread() { CHIP_ERROR err = CHIP_NO_ERROR; - err = Internal::P6Utils::ping_init(); + err = Internal::PSOC6Utils::ping_init(); return err; } diff --git a/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.cpp b/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.cpp index b09fd83cecc5df..0abd1cba0dd5ad 100644 --- a/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.cpp +++ b/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.cpp @@ -1,6 +1,7 @@ /* * * Copyright (c) 2021-2022 Project CHIP Authors + * Copyright (c) 2024 Infineon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,18 +19,19 @@ /** * @file * Provides an implementation of the DiagnosticDataProvider object - * for P6 platform. + * for PSOC6 platform. */ #include #include "cy_network_mw_core.h" +#include "cy_nw_helper.h" #include "cyhal_system.h" #include #include #include #include -#include +#include namespace chip { namespace DeviceLayer { @@ -43,7 +45,7 @@ DiagnosticDataProviderImpl & DiagnosticDataProviderImpl::GetDefaultInstance() CHIP_ERROR DiagnosticDataProviderImpl::GetCurrentHeapFree(uint64_t & currentHeapFree) { heap_info_t heap; - Internal::P6Utils::heap_usage(&heap); + Internal::PSOC6Utils::heap_usage(&heap); currentHeapFree = static_cast(heap.HeapFree); return CHIP_NO_ERROR; } @@ -52,7 +54,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetCurrentHeapUsed(uint64_t & currentHeap { // Calculate the Heap used based on Total heap - Free heap heap_info_t heap; - Internal::P6Utils::heap_usage(&heap); + Internal::PSOC6Utils::heap_usage(&heap); currentHeapUsed = static_cast(heap.HeapUsed); return CHIP_NO_ERROR; } @@ -60,7 +62,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetCurrentHeapUsed(uint64_t & currentHeap CHIP_ERROR DiagnosticDataProviderImpl::GetCurrentHeapHighWatermark(uint64_t & currentHeapHighWatermark) { heap_info_t heap; - Internal::P6Utils::heap_usage(&heap); + Internal::PSOC6Utils::heap_usage(&heap); currentHeapHighWatermark = static_cast(heap.HeapMax); return CHIP_NO_ERROR; } @@ -506,7 +508,7 @@ void DiagnosticDataProviderImpl::xtlv_buffer_parsing(const uint8_t * tlv_buf, ui wl_cnt_ge40mcst_v1_t cnt_ge40; /* parse the tlv buffer and populate the cnt and cnt_ge40 buffer with the counter values */ - Internal::P6Utils::unpack_xtlv_buf(tlv_buf, buflen, &cnt, &cnt_ge40); + Internal::PSOC6Utils::unpack_xtlv_buf(tlv_buf, buflen, &cnt, &cnt_ge40); /* Read the counter based on the Counttype passed */ ReadCounters(Counttype, count, &cnt, &cnt_ge40); @@ -571,17 +573,20 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetThreadMetrics(ThreadMetrics ** threadM { ThreadMetrics * thread = (ThreadMetrics *) pvPortMalloc(sizeof(ThreadMetrics)); - Platform::CopyString(thread->NameBuf, taskStatusArray[x].pcTaskName); - thread->name.Emplace(CharSpan::fromCharString(thread->NameBuf)); - thread->id = taskStatusArray[x].xTaskNumber; + if (thread != NULL) + { + Platform::CopyString(thread->NameBuf, taskStatusArray[x].pcTaskName); + thread->name.Emplace(CharSpan::fromCharString(thread->NameBuf)); + thread->id = taskStatusArray[x].xTaskNumber; - thread->stackFreeMinimum.Emplace(taskStatusArray[x].usStackHighWaterMark); - /* Unsupported metrics */ - thread->stackSize.Emplace(0); - thread->stackFreeCurrent.Emplace(0); + thread->stackFreeMinimum.Emplace(taskStatusArray[x].usStackHighWaterMark); + /* Unsupported metrics */ + thread->stackSize.Emplace(0); + thread->stackFreeCurrent.Emplace(0); - thread->Next = head; - head = thread; + thread->Next = head; + head = thread; + } } *threadMetricsOut = head; diff --git a/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.h b/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.h index f3e625d787a9e5..2d02050a9ddb68 100644 --- a/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.h +++ b/src/platform/Infineon/PSOC6/DiagnosticDataProviderImpl.h @@ -31,7 +31,7 @@ #include "whd_wlioctl.h" #include #include -#include +#include #define PHYRATE_KPBS_BYTES_PER_SEC 125 diff --git a/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.cpp b/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.cpp index e38d41e47fc61a..fe60d50a2823ae 100644 --- a/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.cpp +++ b/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.cpp @@ -18,7 +18,7 @@ /** * @file - * Platform-specific key value storage implementation for P6 + * Platform-specific key value storage implementation for PSOC6 */ #include "cy_result.h" diff --git a/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.h b/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.h index 62bead34c37033..5300d06d8ce014 100644 --- a/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.h +++ b/src/platform/Infineon/PSOC6/KeyValueStoreManagerImpl.h @@ -18,7 +18,7 @@ /** * @file - * Platform-specific key value storage implementation for P6. + * Platform-specific key value storage implementation for PSOC6. * */ @@ -71,7 +71,7 @@ inline KeyValueStoreManager & KeyValueStoreMgr(void) * Returns the platform-specific implementation of the KeyValueStoreManager singleton object. * * Chip applications can use this to gain access to features of the KeyValueStoreManager - * that are specific to the P6 platform. + * that are specific to the PSOC6 platform. */ inline KeyValueStoreManagerImpl & KeyValueStoreMgrImpl(void) { diff --git a/src/platform/Infineon/PSOC6/Logging.cpp b/src/platform/Infineon/PSOC6/Logging.cpp index ab6af699ac3a17..14d824f63229ec 100644 --- a/src/platform/Infineon/PSOC6/Logging.cpp +++ b/src/platform/Infineon/PSOC6/Logging.cpp @@ -25,7 +25,7 @@ namespace Platform { */ void LogV(const char * module, uint8_t category, const char * msg, va_list v) { -#if P6_LOG_ENABLED && _CHIP_USE_LOGGING +#if PSOC6_LOG_ENABLED && _CHIP_USE_LOGGING printf("CHIP:%s: ", module); vprintf(msg, v); printf("\n"); @@ -34,11 +34,11 @@ void LogV(const char * module, uint8_t category, const char * msg, va_list v) #endif } -extern "C" void P6Log(const char * aFormat, ...) +extern "C" void PSOC6Log(const char * aFormat, ...) { va_list v; va_start(v, aFormat); - LogV("P6", chip::Logging::kLogCategory_Progress, aFormat, v); + LogV("PSOC6", chip::Logging::kLogCategory_Progress, aFormat, v); va_end(v); } diff --git a/src/platform/Infineon/PSOC6/NetworkCommissioningWiFiDriver.cpp b/src/platform/Infineon/PSOC6/NetworkCommissioningWiFiDriver.cpp index 7fe0c1aaebb099..edeb39f588abf9 100644 --- a/src/platform/Infineon/PSOC6/NetworkCommissioningWiFiDriver.cpp +++ b/src/platform/Infineon/PSOC6/NetworkCommissioningWiFiDriver.cpp @@ -19,8 +19,8 @@ #include #include #include -#include -#include +#include +#include #include #include @@ -140,11 +140,11 @@ CHIP_ERROR P6WiFiDriver::ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen, ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled)); // Set the wifi configuration wifi_config_t wifi_config; - chip::DeviceLayer::Internal::P6Utils::populate_wifi_config_t( + chip::DeviceLayer::Internal::PSOC6Utils::populate_wifi_config_t( &wifi_config, WIFI_IF_STA, (const cy_wcm_ssid_t *) ssid, (const cy_wcm_passphrase_t *) key, (keyLen) ? CHIP_DEVICE_CONFIG_DEFAULT_STA_SECURITY : CY_WCM_SECURITY_OPEN); - err = chip::DeviceLayer::Internal::P6Utils::p6_wifi_set_config(WIFI_IF_STA, &wifi_config); + err = chip::DeviceLayer::Internal::PSOC6Utils::p6_wifi_set_config(WIFI_IF_STA, &wifi_config); SuccessOrExit(err); ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled)); @@ -173,7 +173,7 @@ void P6WiFiDriver::ConnectNetwork(ByteSpan networkId, ConnectCallback * callback VerifyOrExit(NetworkMatch(mStagingNetwork, networkId), networkingStatus = Status::kNetworkIDNotFound); VerifyOrExit(mpConnectCallback == nullptr, networkingStatus = Status::kUnknownError); - ChipLogProgress(NetworkProvisioning, "P6 NetworkCommissioningDelegate: SSID: %s", mStagingNetwork.ssid); + ChipLogProgress(NetworkProvisioning, "PSOC6 NetworkCommissioningDelegate: SSID: %s", mStagingNetwork.ssid); err = ConnectWiFiNetwork(reinterpret_cast(mStagingNetwork.ssid), mStagingNetwork.ssidLen, reinterpret_cast(mStagingNetwork.credentials), mStagingNetwork.credentialsLen); mpConnectCallback = callback; @@ -353,7 +353,7 @@ void P6WiFiDriver::OnNetworkStatusChange() { Network configuredNetwork; bool staEnabled = false, staConnected = false; - VerifyOrReturn(P6Utils::IsStationEnabled(staEnabled) == CHIP_NO_ERROR); + VerifyOrReturn(PSOC6Utils::IsStationEnabled(staEnabled) == CHIP_NO_ERROR); VerifyOrReturn(staEnabled && mpStatusChangeCallback != nullptr); CHIP_ERROR err = GetConnectedNetwork(configuredNetwork); if (err != CHIP_NO_ERROR) @@ -361,7 +361,7 @@ void P6WiFiDriver::OnNetworkStatusChange() ChipLogError(DeviceLayer, "Failed to get configured network when updating network status: %s", err.AsString()); return; } - VerifyOrReturn(P6Utils::IsStationConnected(staConnected) == CHIP_NO_ERROR); + VerifyOrReturn(PSOC6Utils::IsStationConnected(staConnected) == CHIP_NO_ERROR); if (staConnected) { mpStatusChangeCallback->OnNetworkingStatusChange( diff --git a/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.cpp b/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.cpp index b1cf7001bd2d38..d47434a80d4fb0 100644 --- a/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.cpp +++ b/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include using namespace ::chip::DeviceLayer::Internal; @@ -153,7 +152,7 @@ void OTAImageProcessorImpl::HandlePrepareDownload(intptr_t context) } /* Initialize SMIF subsystem for OTA Image download */ - ota_smif_initialize(); + cy_ota_mem_init(); // Open and erase secondary flash area to prepare if (flash_area_open(FLASH_AREA_IMAGE_SECONDARY(0), &(imageProcessor->mFlashArea)) != 0) @@ -187,7 +186,7 @@ void OTAImageProcessorImpl::HandleFinalize(intptr_t context) flash_area_close(imageProcessor->mFlashArea); ChipLogProgress(SoftwareUpdate, "Setting boot pending"); - int ret = boot_set_pending(0, 1); + int ret = flash_area_boot_set_pending(0, 1); if (ret != 0) { diff --git a/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.h b/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.h index e1ec3d50e9806c..3ac4f418008d40 100644 --- a/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.h +++ b/src/platform/Infineon/PSOC6/OTAImageProcessorImpl.h @@ -26,11 +26,10 @@ #ifdef P6_OTA extern "C" { -#include "bootutil/bootutil.h" -#include "cy_flash_psoc6.h" +#include "cy_ota_flash.h" #include "flash_map_backend.h" #include "flash_qspi.h" -#include "sysflash/sysflash.h" +#include "sysflash.h" } namespace chip { diff --git a/src/platform/Infineon/PSOC6/P6Config.cpp b/src/platform/Infineon/PSOC6/PSOC6Config.cpp similarity index 52% rename from src/platform/Infineon/PSOC6/P6Config.cpp rename to src/platform/Infineon/PSOC6/PSOC6Config.cpp index 2ef8a5ed038476..1c040811686fa3 100644 --- a/src/platform/Infineon/PSOC6/P6Config.cpp +++ b/src/platform/Infineon/PSOC6/PSOC6Config.cpp @@ -20,21 +20,21 @@ /** * @file - * Utilities for interacting with the the P6 key-value store. + * Utilities for interacting with the the PSOC6 key-value store. */ /* this file behaves like a config.h, comes first */ #include #include -#include +#include #include #include #include #include #include -#include +#include namespace chip { namespace DeviceLayer { @@ -43,57 +43,57 @@ namespace Internal { // *** CAUTION ***: Changing the names or namespaces of these values will *break* existing devices. // Namespaces used to store device configuration information. -const char P6Config::kConfigNamespace_ChipFactory[] = "chip-factory"; -const char P6Config::kConfigNamespace_ChipConfig[] = "chip-config"; -const char P6Config::kConfigNamespace_ChipCounters[] = "chip-counters"; +const char PSOC6Config::kConfigNamespace_ChipFactory[] = "chip-factory"; +const char PSOC6Config::kConfigNamespace_ChipConfig[] = "chip-config"; +const char PSOC6Config::kConfigNamespace_ChipCounters[] = "chip-counters"; // Keys stored in the chip-factory namespace -const P6Config::Key P6Config::kConfigKey_SerialNum = { kConfigNamespace_ChipFactory, "serial-num" }; -const P6Config::Key P6Config::kConfigKey_MfrDeviceId = { kConfigNamespace_ChipFactory, "device-id" }; -const P6Config::Key P6Config::kConfigKey_MfrDeviceCert = { kConfigNamespace_ChipFactory, "device-cert" }; -const P6Config::Key P6Config::kConfigKey_MfrDeviceICACerts = { kConfigNamespace_ChipFactory, "device-ca-certs" }; -const P6Config::Key P6Config::kConfigKey_MfrDevicePrivateKey = { kConfigNamespace_ChipFactory, "device-key" }; -const P6Config::Key P6Config::kConfigKey_SoftwareVersion = { kConfigNamespace_ChipFactory, "software-ver" }; -const P6Config::Key P6Config::kConfigKey_HardwareVersion = { kConfigNamespace_ChipFactory, "hardware-ver" }; -const P6Config::Key P6Config::kConfigKey_ManufacturingDate = { kConfigNamespace_ChipFactory, "mfg-date" }; -const P6Config::Key P6Config::kConfigKey_SetupPinCode = { kConfigNamespace_ChipFactory, "pin-code" }; -const P6Config::Key P6Config::kConfigKey_SetupDiscriminator = { kConfigNamespace_ChipFactory, "discriminator" }; -const P6Config::Key P6Config::kConfigKey_Spake2pIterationCount = { kConfigNamespace_ChipFactory, "iteration-count" }; -const P6Config::Key P6Config::kConfigKey_Spake2pSalt = { kConfigNamespace_ChipFactory, "salt" }; -const P6Config::Key P6Config::kConfigKey_Spake2pVerifier = { kConfigNamespace_ChipFactory, "verifier" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_SerialNum = { kConfigNamespace_ChipFactory, "serial-num" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_MfrDeviceId = { kConfigNamespace_ChipFactory, "device-id" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_MfrDeviceCert = { kConfigNamespace_ChipFactory, "device-cert" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_MfrDeviceICACerts = { kConfigNamespace_ChipFactory, "device-ca-certs" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_MfrDevicePrivateKey = { kConfigNamespace_ChipFactory, "device-key" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_SoftwareVersion = { kConfigNamespace_ChipFactory, "software-ver" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_HardwareVersion = { kConfigNamespace_ChipFactory, "hardware-ver" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_ManufacturingDate = { kConfigNamespace_ChipFactory, "mfg-date" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_SetupPinCode = { kConfigNamespace_ChipFactory, "pin-code" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_SetupDiscriminator = { kConfigNamespace_ChipFactory, "discriminator" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_Spake2pIterationCount = { kConfigNamespace_ChipFactory, "iteration-count" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_Spake2pSalt = { kConfigNamespace_ChipFactory, "salt" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_Spake2pVerifier = { kConfigNamespace_ChipFactory, "verifier" }; // Keys stored in the chip-config namespace -const P6Config::Key P6Config::kConfigKey_ServiceConfig = { kConfigNamespace_ChipConfig, "service-config" }; -const P6Config::Key P6Config::kConfigKey_PairedAccountId = { kConfigNamespace_ChipConfig, "account-id" }; -const P6Config::Key P6Config::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; -const P6Config::Key P6Config::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; -const P6Config::Key P6Config::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; -const P6Config::Key P6Config::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; -const P6Config::Key P6Config::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; -const P6Config::Key P6Config::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; -const P6Config::Key P6Config::kConfigKey_WiFiSSID = { kConfigNamespace_ChipConfig, "wifi-ssid" }; -const P6Config::Key P6Config::kConfigKey_WiFiPassword = { kConfigNamespace_ChipConfig, "wifi-password" }; -const P6Config::Key P6Config::kConfigKey_WiFiSecurity = { kConfigNamespace_ChipConfig, "wifi-security" }; -const P6Config::Key P6Config::kConfigKey_WiFiMode = { kConfigNamespace_ChipConfig, "wifimode" }; -const P6Config::Key P6Config::kConfigKey_UniqueId = { kConfigNamespace_ChipConfig, "unique-id" }; -const P6Config::Key P6Config::kConfigKey_LockUser = { kConfigNamespace_ChipConfig, "lock-user" }; -const P6Config::Key P6Config::kConfigKey_Credential = { kConfigNamespace_ChipConfig, "credential" }; -const P6Config::Key P6Config::kConfigKey_LockUserName = { kConfigNamespace_ChipConfig, "lock-user-name" }; -const P6Config::Key P6Config::kConfigKey_CredentialData = { kConfigNamespace_ChipConfig, "credential-data" }; -const P6Config::Key P6Config::kConfigKey_UserCredentials = { kConfigNamespace_ChipConfig, "user-credentials" }; -const P6Config::Key P6Config::kConfigKey_WeekDaySchedules = { kConfigNamespace_ChipConfig, "weekday-schedules" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_ServiceConfig = { kConfigNamespace_ChipConfig, "service-config" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_PairedAccountId = { kConfigNamespace_ChipConfig, "account-id" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_ServiceId = { kConfigNamespace_ChipConfig, "service-id" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_LastUsedEpochKeyId = { kConfigNamespace_ChipConfig, "last-ek-id" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "regulatory-location" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WiFiSSID = { kConfigNamespace_ChipConfig, "wifi-ssid" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WiFiPassword = { kConfigNamespace_ChipConfig, "wifi-password" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WiFiSecurity = { kConfigNamespace_ChipConfig, "wifi-security" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WiFiMode = { kConfigNamespace_ChipConfig, "wifimode" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_UniqueId = { kConfigNamespace_ChipConfig, "unique-id" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_LockUser = { kConfigNamespace_ChipConfig, "lock-user" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_Credential = { kConfigNamespace_ChipConfig, "credential" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_LockUserName = { kConfigNamespace_ChipConfig, "lock-user-name" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_CredentialData = { kConfigNamespace_ChipConfig, "credential-data" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_UserCredentials = { kConfigNamespace_ChipConfig, "user-credentials" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_WeekDaySchedules = { kConfigNamespace_ChipConfig, "weekday-schedules" }; ; -const P6Config::Key P6Config::kConfigKey_YearDaySchedules = { kConfigNamespace_ChipConfig, "yearday-schedules" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_YearDaySchedules = { kConfigNamespace_ChipConfig, "yearday-schedules" }; ; -const P6Config::Key P6Config::kConfigKey_HolidaySchedules = { kConfigNamespace_ChipConfig, "holiday-schedules" }; +const PSOC6Config::Key PSOC6Config::kConfigKey_HolidaySchedules = { kConfigNamespace_ChipConfig, "holiday-schedules" }; ; // Keys stored in the Chip-counters namespace -const P6Config::Key P6Config::kCounterKey_RebootCount = { kConfigNamespace_ChipCounters, "reboot-count" }; -const P6Config::Key P6Config::kCounterKey_UpTime = { kConfigNamespace_ChipCounters, "up-time" }; -const P6Config::Key P6Config::kCounterKey_TotalOperationalHours = { kConfigNamespace_ChipCounters, "total-hours" }; +const PSOC6Config::Key PSOC6Config::kCounterKey_RebootCount = { kConfigNamespace_ChipCounters, "reboot-count" }; +const PSOC6Config::Key PSOC6Config::kCounterKey_UpTime = { kConfigNamespace_ChipCounters, "up-time" }; +const PSOC6Config::Key PSOC6Config::kCounterKey_TotalOperationalHours = { kConfigNamespace_ChipCounters, "total-hours" }; -CHIP_ERROR P6Config::ReadConfigValue(Key key, bool & val) +CHIP_ERROR PSOC6Config::ReadConfigValue(Key key, bool & val) { bool in; char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; @@ -107,7 +107,7 @@ CHIP_ERROR P6Config::ReadConfigValue(Key key, bool & val) return err; } -CHIP_ERROR P6Config::ReadConfigValue(Key key, uint32_t & val) +CHIP_ERROR PSOC6Config::ReadConfigValue(Key key, uint32_t & val) { uint32_t in; char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; @@ -121,7 +121,7 @@ CHIP_ERROR P6Config::ReadConfigValue(Key key, uint32_t & val) return err; } -CHIP_ERROR P6Config::ReadConfigValue(Key key, uint64_t & val) +CHIP_ERROR PSOC6Config::ReadConfigValue(Key key, uint64_t & val) { uint64_t in; char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; @@ -135,7 +135,7 @@ CHIP_ERROR P6Config::ReadConfigValue(Key key, uint64_t & val) return err; } -CHIP_ERROR P6Config::ReadConfigValueStr(Key key, char * buf, size_t bufSize, size_t & outLen) +CHIP_ERROR PSOC6Config::ReadConfigValueStr(Key key, char * buf, size_t bufSize, size_t & outLen) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); @@ -147,7 +147,7 @@ CHIP_ERROR P6Config::ReadConfigValueStr(Key key, char * buf, size_t bufSize, siz return err; } -CHIP_ERROR P6Config::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, size_t & outLen) +CHIP_ERROR PSOC6Config::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, size_t & outLen) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); @@ -159,28 +159,28 @@ CHIP_ERROR P6Config::ReadConfigValueBin(Key key, uint8_t * buf, size_t bufSize, return err; } -CHIP_ERROR P6Config::WriteConfigValue(Key key, bool val) +CHIP_ERROR PSOC6Config::WriteConfigValue(Key key, bool val) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Put(key_str, static_cast(&val), sizeof(bool)); } -CHIP_ERROR P6Config::WriteConfigValue(Key key, uint32_t val) +CHIP_ERROR PSOC6Config::WriteConfigValue(Key key, uint32_t val) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Put(key_str, static_cast(&val), 4); } -CHIP_ERROR P6Config::WriteConfigValue(Key key, uint64_t val) +CHIP_ERROR PSOC6Config::WriteConfigValue(Key key, uint64_t val) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Put(key_str, static_cast(&val), 8); } -CHIP_ERROR P6Config::WriteConfigValueStr(Key key, const char * str) +CHIP_ERROR PSOC6Config::WriteConfigValueStr(Key key, const char * str) { size_t size = strlen(str) + 1; char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; @@ -188,27 +188,27 @@ CHIP_ERROR P6Config::WriteConfigValueStr(Key key, const char * str) return PersistedStorage::KeyValueStoreMgr().Put(key_str, str, size); } -CHIP_ERROR P6Config::WriteConfigValueStr(Key key, const char * str, size_t strLen) +CHIP_ERROR PSOC6Config::WriteConfigValueStr(Key key, const char * str, size_t strLen) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Put(key_str, str, strLen); } -CHIP_ERROR P6Config::WriteConfigValueBin(Key key, const uint8_t * data, size_t dataLen) +CHIP_ERROR PSOC6Config::WriteConfigValueBin(Key key, const uint8_t * data, size_t dataLen) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Put(key_str, data, dataLen); } -CHIP_ERROR P6Config::ClearConfigValue(Key key) +CHIP_ERROR PSOC6Config::ClearConfigValue(Key key) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); return PersistedStorage::KeyValueStoreMgr().Delete(key_str); } -bool P6Config::ConfigValueExists(Key key) +bool PSOC6Config::ConfigValueExists(Key key) { char key_str[MTB_KVSTORE_MAX_KEY_SIZE] = { 0 }; key.to_str(key_str, MTB_KVSTORE_MAX_KEY_SIZE); @@ -221,7 +221,7 @@ bool P6Config::ConfigValueExists(Key key) } // Clear out keys in config namespace -CHIP_ERROR P6Config::FactoryResetConfig(void) +CHIP_ERROR PSOC6Config::FactoryResetConfig(void) { CHIP_ERROR err = CHIP_NO_ERROR; const Key * config_keys[] = { &kConfigKey_ServiceConfig, &kConfigKey_PairedAccountId, &kConfigKey_ServiceId, @@ -249,7 +249,7 @@ CHIP_ERROR P6Config::FactoryResetConfig(void) return CHIP_NO_ERROR; } -void P6Config::RunConfigUnitTest() {} +void PSOC6Config::RunConfigUnitTest() {} } // namespace Internal } // namespace DeviceLayer diff --git a/src/platform/Infineon/PSOC6/P6Config.h b/src/platform/Infineon/PSOC6/PSOC6Config.h similarity index 93% rename from src/platform/Infineon/PSOC6/P6Config.h rename to src/platform/Infineon/PSOC6/PSOC6Config.h index 7e62fd6e66b772..17fa896346c348 100644 --- a/src/platform/Infineon/PSOC6/P6Config.h +++ b/src/platform/Infineon/PSOC6/PSOC6Config.h @@ -20,7 +20,7 @@ /** * @file - * Utilities for interacting with the the P6 key-value store. + * Utilities for interacting with the the PSOC6 key-value store. */ #pragma once @@ -35,12 +35,12 @@ namespace DeviceLayer { namespace Internal { /** - * Provides functions and definitions for accessing device configuration information on the P6. + * Provides functions and definitions for accessing device configuration information on the PSOC6. * * This class is designed to be mixed-in to concrete implementation classes as a means to * provide access to configuration information to generic base classes. */ -class P6Config +class PSOC6Config { public: struct Key; @@ -114,7 +114,7 @@ class P6Config static void RunConfigUnitTest(void); }; -struct P6Config::Key +struct PSOC6Config::Key { const char * Namespace; const char * Name; @@ -124,7 +124,7 @@ struct P6Config::Key bool operator==(const Key & other) const; }; -inline CHIP_ERROR P6Config::Key::to_str(char * buf, size_t buf_size) const +inline CHIP_ERROR PSOC6Config::Key::to_str(char * buf, size_t buf_size) const { if (buf_size < len() + 1) { @@ -139,14 +139,14 @@ inline CHIP_ERROR P6Config::Key::to_str(char * buf, size_t buf_size) const } // Length of key str (not including terminating null char) -inline size_t P6Config::Key::len() const +inline size_t PSOC6Config::Key::len() const { // + 1 for separating ';' size_t out_size = strlen(Namespace) + strlen(Name) + 1; return out_size; } -inline bool P6Config::Key::operator==(const Key & other) const +inline bool PSOC6Config::Key::operator==(const Key & other) const { return strcmp(Namespace, other.Namespace) == 0 && strcmp(Name, other.Name) == 0; } diff --git a/src/platform/Infineon/PSOC6/P6Utils.cpp b/src/platform/Infineon/PSOC6/PSOC6Utils.cpp similarity index 85% rename from src/platform/Infineon/PSOC6/P6Utils.cpp rename to src/platform/Infineon/PSOC6/PSOC6Utils.cpp index 2964cc4b5dfa5b..c65a29f6a96475 100644 --- a/src/platform/Infineon/PSOC6/P6Utils.cpp +++ b/src/platform/Infineon/PSOC6/PSOC6Utils.cpp @@ -19,17 +19,18 @@ /** * @file - * General utility methods for the P6 platform. + * General utility methods for the PSOC6 platform. */ /* this file behaves like a config.h, comes first */ #include #include "cy_network_mw_core.h" +#include "cy_nw_helper.h" #include #include #include #include -#include +#include #include "lwip/icmp.h" #include "lwip/inet.h" @@ -43,7 +44,7 @@ #include "lwip/sys.h" #include "lwip/timeouts.h" #include -#include +#include using namespace ::chip::DeviceLayer::Internal; using chip::DeviceLayer::Internal::DeviceNetworkInfo; @@ -96,39 +97,39 @@ typedef struct uint8_t data[PING_DATA_SIZE]; } icmp_packet_t; -CHIP_ERROR P6Utils::IsAPEnabled(bool & apEnabled) +CHIP_ERROR PSOC6Utils::IsAPEnabled(bool & apEnabled) { apEnabled = (WiFiMode == WIFI_MODE_AP || WiFiMode == WIFI_MODE_APSTA); return CHIP_NO_ERROR; } -CHIP_ERROR P6Utils::IsStationEnabled(bool & staEnabled) +CHIP_ERROR PSOC6Utils::IsStationEnabled(bool & staEnabled) { staEnabled = (WiFiMode == WIFI_MODE_STA || WiFiMode == WIFI_MODE_APSTA); return CHIP_NO_ERROR; } -bool P6Utils::IsStationProvisioned(void) +bool PSOC6Utils::IsStationProvisioned(void) { wifi_config_t stationConfig; return (p6_wifi_get_config(WIFI_IF_STA, &stationConfig) == CHIP_NO_ERROR && strlen((const char *) stationConfig.sta.ssid) != 0); } -CHIP_ERROR P6Utils::IsStationConnected(bool & connected) +CHIP_ERROR PSOC6Utils::IsStationConnected(bool & connected) { CHIP_ERROR err = CHIP_NO_ERROR; connected = cy_wcm_is_connected_to_ap(); return err; } -CHIP_ERROR P6Utils::StartWiFiLayer(void) +CHIP_ERROR PSOC6Utils::StartWiFiLayer(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; cy_wcm_config_t wcm_config; wcm_config.interface = CY_WCM_INTERFACE_TYPE_AP_STA; - ChipLogProgress(DeviceLayer, "Starting P6 WiFi layer"); + ChipLogProgress(DeviceLayer, "Starting PSOC6 WiFi layer"); if (wcm_init_done == false) { @@ -136,7 +137,7 @@ CHIP_ERROR P6Utils::StartWiFiLayer(void) if (result != CY_RSLT_SUCCESS) { err = CHIP_ERROR_INTERNAL; - ChipLogError(DeviceLayer, "StartWiFiLayer() P6 Wi-Fi Started Failed: %s", chip::ErrorStr(err)); + ChipLogError(DeviceLayer, "StartWiFiLayer() PSOC6 Wi-Fi Started Failed: %s", chip::ErrorStr(err)); SuccessOrExit(err); } wcm_init_done = true; @@ -146,7 +147,7 @@ CHIP_ERROR P6Utils::StartWiFiLayer(void) return err; } -CHIP_ERROR P6Utils::EnableStationMode(void) +CHIP_ERROR PSOC6Utils::EnableStationMode(void) { CHIP_ERROR err = CHIP_NO_ERROR; ChipLogProgress(DeviceLayer, "EnableStationMode"); @@ -163,7 +164,7 @@ CHIP_ERROR P6Utils::EnableStationMode(void) return err; } -CHIP_ERROR P6Utils::SetAPMode(bool enabled) +CHIP_ERROR PSOC6Utils::SetAPMode(bool enabled) { CHIP_ERROR err = CHIP_NO_ERROR; ChipLogProgress(DeviceLayer, "SetAPMode"); @@ -193,7 +194,7 @@ CHIP_ERROR P6Utils::SetAPMode(bool enabled) return err; } -const char * P6Utils::WiFiModeToStr(wifi_mode_t wifiMode) +const char * PSOC6Utils::WiFiModeToStr(wifi_mode_t wifiMode) { switch (wifiMode) { @@ -210,49 +211,49 @@ const char * P6Utils::WiFiModeToStr(wifi_mode_t wifiMode) } } -CHIP_ERROR P6Utils::GetWiFiSSID(char * buf, size_t bufSize) +CHIP_ERROR PSOC6Utils::GetWiFiSSID(char * buf, size_t bufSize) { size_t num = 0; - return P6Config::ReadConfigValueStr(P6Config::kConfigKey_WiFiSSID, buf, bufSize, num); + return PSOC6Config::ReadConfigValueStr(PSOC6Config::kConfigKey_WiFiSSID, buf, bufSize, num); } -CHIP_ERROR P6Utils::StoreWiFiSSID(char * buf, size_t size) +CHIP_ERROR PSOC6Utils::StoreWiFiSSID(char * buf, size_t size) { - return P6Config::WriteConfigValueStr(P6Config::kConfigKey_WiFiSSID, buf, size); + return PSOC6Config::WriteConfigValueStr(PSOC6Config::kConfigKey_WiFiSSID, buf, size); } -CHIP_ERROR P6Utils::GetWiFiPassword(char * buf, size_t bufSize) +CHIP_ERROR PSOC6Utils::GetWiFiPassword(char * buf, size_t bufSize) { size_t num = 0; - return P6Config::ReadConfigValueStr(P6Config::kConfigKey_WiFiPassword, buf, bufSize, num); + return PSOC6Config::ReadConfigValueStr(PSOC6Config::kConfigKey_WiFiPassword, buf, bufSize, num); } -CHIP_ERROR P6Utils::StoreWiFiPassword(char * buf, size_t size) +CHIP_ERROR PSOC6Utils::StoreWiFiPassword(char * buf, size_t size) { - return P6Config::WriteConfigValueStr(P6Config::kConfigKey_WiFiPassword, buf, size); + return PSOC6Config::WriteConfigValueStr(PSOC6Config::kConfigKey_WiFiPassword, buf, size); } -CHIP_ERROR P6Utils::GetWiFiSecurityCode(uint32_t & security) +CHIP_ERROR PSOC6Utils::GetWiFiSecurityCode(uint32_t & security) { - return P6Config::ReadConfigValue(P6Config::kConfigKey_WiFiSecurity, security); + return PSOC6Config::ReadConfigValue(PSOC6Config::kConfigKey_WiFiSecurity, security); } -CHIP_ERROR P6Utils::StoreWiFiSecurityCode(uint32_t security) +CHIP_ERROR PSOC6Utils::StoreWiFiSecurityCode(uint32_t security) { - return P6Config::WriteConfigValue(P6Config::kConfigKey_WiFiSecurity, security); + return PSOC6Config::WriteConfigValue(PSOC6Config::kConfigKey_WiFiSecurity, security); } -CHIP_ERROR P6Utils::wifi_get_mode(uint32_t & mode) +CHIP_ERROR PSOC6Utils::wifi_get_mode(uint32_t & mode) { - return P6Config::ReadConfigValue(P6Config::kConfigKey_WiFiMode, mode); + return PSOC6Config::ReadConfigValue(PSOC6Config::kConfigKey_WiFiMode, mode); } -CHIP_ERROR P6Utils::wifi_set_mode(uint32_t mode) +CHIP_ERROR PSOC6Utils::wifi_set_mode(uint32_t mode) { - return P6Config::WriteConfigValue(P6Config::kConfigKey_WiFiMode, mode); + return PSOC6Config::WriteConfigValue(PSOC6Config::kConfigKey_WiFiMode, mode); } -CHIP_ERROR P6Utils::p6_wifi_set_config(wifi_interface_t interface, wifi_config_t * conf) +CHIP_ERROR PSOC6Utils::p6_wifi_set_config(wifi_interface_t interface, wifi_config_t * conf) { CHIP_ERROR err = CHIP_NO_ERROR; if (interface == WIFI_IF_STA) @@ -281,15 +282,15 @@ CHIP_ERROR P6Utils::p6_wifi_set_config(wifi_interface_t interface, wifi_config_t return err; } -CHIP_ERROR P6Utils::p6_wifi_get_config(wifi_interface_t interface, wifi_config_t * conf) +CHIP_ERROR PSOC6Utils::p6_wifi_get_config(wifi_interface_t interface, wifi_config_t * conf) { uint32 code = 0; CHIP_ERROR err = CHIP_NO_ERROR; if (interface == WIFI_IF_STA) { - if (P6Config::ConfigValueExists(P6Config::kConfigKey_WiFiSSID) && - P6Config::ConfigValueExists(P6Config::kConfigKey_WiFiPassword) && - P6Config::ConfigValueExists(P6Config::kConfigKey_WiFiSecurity)) + if (PSOC6Config::ConfigValueExists(PSOC6Config::kConfigKey_WiFiSSID) && + PSOC6Config::ConfigValueExists(PSOC6Config::kConfigKey_WiFiPassword) && + PSOC6Config::ConfigValueExists(PSOC6Config::kConfigKey_WiFiSecurity)) { /* Retrieve Wi-Fi Configurations from Storage */ err = GetWiFiSSID((char *) conf->sta.ssid, sizeof(conf->sta.ssid)); @@ -320,7 +321,7 @@ CHIP_ERROR P6Utils::p6_wifi_get_config(wifi_interface_t interface, wifi_config_t return err; } -CHIP_ERROR P6Utils::GetWiFiStationProvision(Internal::DeviceNetworkInfo & netInfo, bool includeCredentials) +CHIP_ERROR PSOC6Utils::GetWiFiStationProvision(Internal::DeviceNetworkInfo & netInfo, bool includeCredentials) { CHIP_ERROR err = CHIP_NO_ERROR; wifi_config_t stationConfig; @@ -350,7 +351,7 @@ CHIP_ERROR P6Utils::GetWiFiStationProvision(Internal::DeviceNetworkInfo & netInf return err; } -CHIP_ERROR P6Utils::SetWiFiStationProvision(const Internal::DeviceNetworkInfo & netInfo) +CHIP_ERROR PSOC6Utils::SetWiFiStationProvision(const Internal::DeviceNetworkInfo & netInfo) { CHIP_ERROR err = CHIP_NO_ERROR; wifi_config_t wifiConfig; @@ -358,9 +359,9 @@ CHIP_ERROR P6Utils::SetWiFiStationProvision(const Internal::DeviceNetworkInfo & char wifiSSID[kMaxWiFiSSIDLength + 1]; size_t netInfoSSIDLen = strlen(netInfo.WiFiSSID); - // Ensure that P6 station mode is enabled. This is required before p6_wifi_set_config + // Ensure that PSOC6 station mode is enabled. This is required before p6_wifi_set_config // can be called. - err = P6Utils::EnableStationMode(); + err = PSOC6Utils::EnableStationMode(); SuccessOrExit(err); // Enforce that wifiSSID is null terminated before copying it @@ -374,10 +375,10 @@ CHIP_ERROR P6Utils::SetWiFiStationProvision(const Internal::DeviceNetworkInfo & wifiSSID[kMaxWiFiSSIDLength] = '\0'; } - // Initialize an P6 wifi_config_t structure based on the new provision information. + // Initialize an PSOC6 wifi_config_t structure based on the new provision information. populate_wifi_config_t(&wifiConfig, WIFI_IF_STA, (cy_wcm_ssid_t *) wifiSSID, (cy_wcm_passphrase_t *) netInfo.WiFiKey); - // Configure the P6 WiFi interface. + // Configure the PSOC6 WiFi interface. ReturnLogErrorOnFailure(p6_wifi_set_config(WIFI_IF_STA, &wifiConfig)); ChipLogProgress(DeviceLayer, "WiFi station provision set (SSID: %s)", netInfo.WiFiSSID); @@ -386,18 +387,18 @@ CHIP_ERROR P6Utils::SetWiFiStationProvision(const Internal::DeviceNetworkInfo & return err; } -CHIP_ERROR P6Utils::ClearWiFiStationProvision(void) +CHIP_ERROR PSOC6Utils::ClearWiFiStationProvision(void) { CHIP_ERROR err = CHIP_NO_ERROR; wifi_config_t stationConfig; ChipLogProgress(DeviceLayer, "ClearWiFiStationProvision"); - // Clear the P6 WiFi station configuration. + // Clear the PSOC6 WiFi station configuration. memset(&stationConfig.sta, 0, sizeof(stationConfig.sta)); ReturnLogErrorOnFailure(p6_wifi_set_config(WIFI_IF_STA, &stationConfig)); return err; } -CHIP_ERROR P6Utils::p6_wifi_disconnect(void) +CHIP_ERROR PSOC6Utils::p6_wifi_disconnect(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; @@ -411,7 +412,7 @@ CHIP_ERROR P6Utils::p6_wifi_disconnect(void) return err; } -CHIP_ERROR P6Utils::p6_wifi_connect(void) +CHIP_ERROR PSOC6Utils::p6_wifi_connect(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; @@ -445,7 +446,7 @@ static const cy_wcm_ip_setting_t ap_mode_ip_settings2 = { INITIALISER_IPV4_ADDRESS1(.netmask, MAKE_IPV4_ADDRESS1(255, 255, 255, 0)), }; -CHIP_ERROR P6Utils::p6_start_ap(void) +CHIP_ERROR PSOC6Utils::p6_start_ap(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; @@ -481,7 +482,7 @@ CHIP_ERROR P6Utils::p6_start_ap(void) return err; } -CHIP_ERROR P6Utils::p6_stop_ap(void) +CHIP_ERROR PSOC6Utils::p6_stop_ap(void) { CHIP_ERROR err = CHIP_NO_ERROR; cy_rslt_t result = CY_RSLT_SUCCESS; @@ -495,8 +496,8 @@ CHIP_ERROR P6Utils::p6_stop_ap(void) return err; } -void P6Utils::populate_wifi_config_t(wifi_config_t * wifi_config, wifi_interface_t interface, const cy_wcm_ssid_t * ssid, - const cy_wcm_passphrase_t * password, cy_wcm_security_t security) +void PSOC6Utils::populate_wifi_config_t(wifi_config_t * wifi_config, wifi_interface_t interface, const cy_wcm_ssid_t * ssid, + const cy_wcm_passphrase_t * password, cy_wcm_security_t security) { CY_ASSERT(wifi_config != NULL); @@ -723,7 +724,7 @@ void ping_raw(void) } #endif -CHIP_ERROR P6Utils::ping_init(void) +CHIP_ERROR PSOC6Utils::ping_init(void) { CHIP_ERROR err = CHIP_NO_ERROR; struct netif * net_interface = NULL; @@ -819,7 +820,7 @@ static void xtlv_unpack_xtlv(const xtlv_t * xtlv, uint16_t * type, uint16_t * le } } -void P6Utils::unpack_xtlv_buf(const uint8_t * tlv_buf, uint16_t buflen, wl_cnt_ver_30_t * cnt, wl_cnt_ge40mcst_v1_t * cnt_ge40) +void PSOC6Utils::unpack_xtlv_buf(const uint8_t * tlv_buf, uint16_t buflen, wl_cnt_ver_30_t * cnt, wl_cnt_ge40mcst_v1_t * cnt_ge40) { uint16_t len; uint16_t type; @@ -853,7 +854,7 @@ void P6Utils::unpack_xtlv_buf(const uint8_t * tlv_buf, uint16_t buflen, wl_cnt_v } } -/* Get the Heap total size for P6 Linker file */ +/* Get the Heap total size for PSOC6 Linker file */ uint32_t get_heap_total() { extern uint8_t __HeapBase; /* Symbol exported by the linker. */ @@ -865,7 +866,7 @@ uint32_t get_heap_total() } /* Populate Heap info based on heap total size and Current Heap usage */ -void P6Utils::heap_usage(heap_info_t * heap) +void PSOC6Utils::heap_usage(heap_info_t * heap) { struct mallinfo mall_info = mallinfo(); diff --git a/src/platform/Infineon/PSOC6/P6Utils.h b/src/platform/Infineon/PSOC6/PSOC6Utils.h similarity index 99% rename from src/platform/Infineon/PSOC6/P6Utils.h rename to src/platform/Infineon/PSOC6/PSOC6Utils.h index c313e963576215..fbb28c4c0e5e7a 100644 --- a/src/platform/Infineon/PSOC6/P6Utils.h +++ b/src/platform/Infineon/PSOC6/PSOC6Utils.h @@ -187,7 +187,7 @@ namespace chip { namespace DeviceLayer { namespace Internal { -class P6Utils +class PSOC6Utils { public: static CHIP_ERROR IsAPEnabled(bool & apEnabled); diff --git a/src/platform/Linux/BLEManagerImpl.cpp b/src/platform/Linux/BLEManagerImpl.cpp index 2ff3136935b99e..e2070c6978ea70 100644 --- a/src/platform/Linux/BLEManagerImpl.cpp +++ b/src/platform/Linux/BLEManagerImpl.cpp @@ -355,9 +355,10 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return mtu; } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_SUBSCRIBE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -365,17 +366,16 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipLogError(DeviceLayer, "SubscribeCharacteristic() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_2_UUID), ChipLogError(DeviceLayer, "SubscribeCharacteristic() called with invalid characteristic ID")); - - VerifyOrExit(conId->SubscribeCharacteristic() == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SubscribeCharacteristic() failed")); - result = true; + err = conId->SubscribeCharacteristic(); exit: - return result; + return err; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -383,48 +383,42 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_2_UUID), ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() called with invalid characteristic ID")); - - VerifyOrExit(conId->UnsubscribeCharacteristic() == CHIP_NO_ERROR, - ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() failed")); - result = true; + err = conId->UnsubscribeCharacteristic(); exit: - return result; + return err; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { - bool result = false; + CHIP_ERROR err = CHIP_ERROR_INTERNAL; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %p)", conId); - - VerifyOrExit(conId->CloseConnection() == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "CloseConnection() failed")); - result = true; + err = conId->CloseConnection(); exit: - return result; + return err; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + chip::System::PacketBufferHandle pBuf) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_INDICATE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); - VerifyOrExit(conId->SendIndication(std::move(pBuf)) == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SendIndication() failed")); - result = true; + err = conId->SendIndication(std::move(pBuf)); exit: - return result; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, chip::System::PacketBufferHandle pBuf) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_WRITE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -432,12 +426,10 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::Ch ChipLogError(DeviceLayer, "SendWriteRequest() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_1_UUID), ChipLogError(DeviceLayer, "SendWriteRequest() called with invalid characteristic ID")); - - VerifyOrExit(conId->SendWriteRequest(std::move(pBuf)) == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SendWriteRequest() failed")); - result = true; + err = conId->SendWriteRequest(std::move(pBuf)); exit: - return result; + return err; } void BLEManagerImpl::HandleNewConnection(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/Linux/BLEManagerImpl.h b/src/platform/Linux/BLEManagerImpl.h index 97da171b641ace..e216a09b8e46f1 100644 --- a/src/platform/Linux/BLEManagerImpl.h +++ b/src/platform/Linux/BLEManagerImpl.h @@ -117,16 +117,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/NuttX/BLEManagerImpl.cpp b/src/platform/NuttX/BLEManagerImpl.cpp index 8502fd861fa307..f28308dd86fc6a 100644 --- a/src/platform/NuttX/BLEManagerImpl.cpp +++ b/src/platform/NuttX/BLEManagerImpl.cpp @@ -345,9 +345,10 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return mtu; } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_SUBSCRIBE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -355,17 +356,16 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipLogError(DeviceLayer, "SubscribeCharacteristic() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_2_UUID), ChipLogError(DeviceLayer, "SubscribeCharacteristic() called with invalid characteristic ID")); - - VerifyOrExit(conId->SubscribeCharacteristic() == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SubscribeCharacteristic() failed")); - result = true; + err = conId->SubscribeCharacteristic(); exit: - return result; + return err; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_UNSUBSCRIBE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -373,48 +373,42 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_2_UUID), ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() called with invalid characteristic ID")); - - VerifyOrExit(conId->UnsubscribeCharacteristic() == CHIP_NO_ERROR, - ChipLogError(DeviceLayer, "UnsubscribeCharacteristic() failed")); - result = true; + err = conId->UnsubscribeCharacteristic(); exit: - return result; + return err; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { - bool result = false; + CHIP_ERROR err = CHIP_ERROR_INTERNAL; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %p)", conId); - - VerifyOrExit(conId->CloseConnection() == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "CloseConnection() failed")); - result = true; + err = conId->CloseConnection(); exit: - return result; + return err; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + chip::System::PacketBufferHandle pBuf) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_INDICATE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); - VerifyOrExit(conId->SendIndication(std::move(pBuf)) == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SendIndication() failed")); - result = true; + err = conId->SendIndication(std::move(pBuf)); exit: - return result; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, chip::System::PacketBufferHandle pBuf) { - bool result = false; + CHIP_ERROR err = BLE_ERROR_GATT_WRITE_FAILED; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "BLE connection is not initialized in %s", __func__)); @@ -422,12 +416,10 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::Ch ChipLogError(DeviceLayer, "SendWriteRequest() called with invalid service ID")); VerifyOrExit(Ble::UUIDsMatch(charId, &Ble::CHIP_BLE_CHAR_1_UUID), ChipLogError(DeviceLayer, "SendWriteRequest() called with invalid characteristic ID")); - - VerifyOrExit(conId->SendWriteRequest(std::move(pBuf)) == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "SendWriteRequest() failed")); - result = true; + err = conId->SendWriteRequest(std::move(pBuf)); exit: - return result; + return err; } void BLEManagerImpl::HandleNewConnection(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/NuttX/BLEManagerImpl.h b/src/platform/NuttX/BLEManagerImpl.h index e22c83978fafa8..f6f6db6c3a3b3f 100644 --- a/src/platform/NuttX/BLEManagerImpl.h +++ b/src/platform/NuttX/BLEManagerImpl.h @@ -116,16 +116,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.h b/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.h index 317bff7c05403e..c45ff84bb0f26e 100644 --- a/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.h +++ b/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.h @@ -142,6 +142,7 @@ class GenericThreadStackManagerImpl_OpenThread // ===== Members available to the implementation subclass. + CHIP_ERROR ConfigureThreadStack(otInstance * otInst); CHIP_ERROR DoInit(otInstance * otInst); bool IsThreadAttachedNoLock(void); bool IsThreadInterfaceUpNoLock(void); diff --git a/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.hpp b/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.hpp index 876cb54385efe6..61452f5ff0ec90 100644 --- a/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.hpp +++ b/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.hpp @@ -1088,29 +1088,21 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::_GetPollPeriod(u return CHIP_NO_ERROR; } +/** + * @brief Helper that sets callbacks for OpenThread state changes and configures the Thread stack. + * Assigns mOTInst to an instance, and configures the OT stack on a device by setting state change callbacks enabling features + * for IPv6 address configuration, enabling the Thread network if necessary, and handling SRP if enabled. + * Allows for the configuration of the Thread stack on a device where the instance and the otCLI are already initialised. + * + * @param otInst Pointer to the OT instance + * @return CHIP_ERROR OpenThread error mapped to CHIP_ERROR + */ template -CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::DoInit(otInstance * otInst) +CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::ConfigureThreadStack(otInstance * otInst) { CHIP_ERROR err = CHIP_NO_ERROR; otError otErr = OT_ERROR_NONE; - // Arrange for OpenThread errors to be translated to text. - RegisterOpenThreadErrorFormatter(); - - mOTInst = NULL; - - // If an OpenThread instance hasn't been supplied, call otInstanceInitSingle() to - // create or acquire a singleton instance of OpenThread. - if (otInst == NULL) - { - otInst = otInstanceInitSingle(); - VerifyOrExit(otInst != NULL, err = MapOpenThreadError(OT_ERROR_FAILED)); - } - -#if !defined(PW_RPC_ENABLED) && CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI - otAppCliInit(otInst); -#endif - mOTInst = otInst; // Arrange for OpenThread to call the OnOpenThreadStateChange method whenever a @@ -1146,14 +1138,42 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::DoInit(otInstanc } #endif - initNetworkCommissioningThreadDriver(); - exit: ChipLogProgress(DeviceLayer, "OpenThread started: %s", otThreadErrorToString(otErr)); return err; } +template +CHIP_ERROR GenericThreadStackManagerImpl_OpenThread::DoInit(otInstance * otInst) +{ + CHIP_ERROR err = CHIP_NO_ERROR; + + // Arrange for OpenThread errors to be translated to text. + RegisterOpenThreadErrorFormatter(); + + mOTInst = NULL; + + // If an OpenThread instance hasn't been supplied, call otInstanceInitSingle() to + // create or acquire a singleton instance of OpenThread. + if (otInst == NULL) + { + otInst = otInstanceInitSingle(); + VerifyOrExit(otInst != NULL, err = MapOpenThreadError(OT_ERROR_FAILED)); + } + +#if !defined(PW_RPC_ENABLED) && CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI + otAppCliInit(otInst); +#endif + + err = ConfigureThreadStack(otInst); + + initNetworkCommissioningThreadDriver(); + +exit: + return err; +} + template bool GenericThreadStackManagerImpl_OpenThread::IsThreadAttachedNoLock(void) { diff --git a/src/platform/Tizen/BLEManagerImpl.cpp b/src/platform/Tizen/BLEManagerImpl.cpp index 116878e67e8cff..046d687c5012f5 100644 --- a/src/platform/Tizen/BLEManagerImpl.cpp +++ b/src/platform/Tizen/BLEManagerImpl.cpp @@ -1168,10 +1168,10 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return (conId != BLE_CONNECTION_UNINITIALIZED) ? static_cast(conId->mtu) : 0; } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) { - int ret; + int ret = TIZEN_ERROR_INVALID_PARAMETER; ChipLogProgress(DeviceLayer, "SubscribeCharacteristic"); @@ -1190,16 +1190,15 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipLogError(DeviceLayer, "bt_gatt_client_set_characteristic_value_changed_cb() failed: %s", get_error_message(ret))); NotifySubscribeOpComplete(conId, true); - return true; exit: - return false; + return TizenToChipError(ret); } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) { - int ret; + int ret = TIZEN_ERROR_INVALID_PARAMETER; ChipLogProgress(DeviceLayer, "UnSubscribeCharacteristic"); @@ -1218,15 +1217,14 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons ChipLogError(DeviceLayer, "bt_gatt_client_unset_characteristic_value_changed_cb() failed: %s", get_error_message(ret))); NotifySubscribeOpComplete(conId, false); - return true; exit: - return false; + return TizenToChipError(ret); } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { - int ret; + int ret = TIZEN_ERROR_INVALID_PARAMETER; ChipLogProgress(DeviceLayer, "Close BLE Connection"); @@ -1238,16 +1236,15 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) VerifyOrExit(ret == BT_ERROR_NONE, ChipLogError(DeviceLayer, "bt_gatt_disconnect() failed: %s", get_error_message(ret))); RemoveConnectionData(conId->peerAddr); - return true; exit: - return false; + return TizenToChipError(ret); } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, System::PacketBufferHandle pBuf) { - int ret; + int ret = TIZEN_ERROR_INVALID_PARAMETER; conId = static_cast(g_hash_table_lookup(mConnectionMap, conId->peerAddr)); VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "Failed to find connection info")); @@ -1269,16 +1266,15 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::Chip VerifyOrExit( ret == BT_ERROR_NONE, ChipLogError(DeviceLayer, "bt_gatt_server_notify_characteristic_changed_value() failed: %s", get_error_message(ret))); - return true; exit: - return false; + return TizenToChipError(ret); } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, System::PacketBufferHandle pBuf) { - int ret; + int ret = TIZEN_ERROR_INVALID_PARAMETER; VerifyOrExit(conId != BLE_CONNECTION_UNINITIALIZED, ChipLogError(DeviceLayer, "Invalid Connection")); VerifyOrExit(Ble::UUIDsMatch(svcId, &Ble::CHIP_BLE_SVC_ID), @@ -1296,9 +1292,9 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::Ch ret = bt_gatt_client_write_value(conId->gattCharC1Handle, WriteCompletedCb, conId); VerifyOrExit(ret == BT_ERROR_NONE, ChipLogError(DeviceLayer, "bt_gatt_client_write_value() failed: %s", get_error_message(ret))); - return true; + exit: - return false; + return TizenToChipError(ret); } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) {} diff --git a/src/platform/Tizen/BLEManagerImpl.h b/src/platform/Tizen/BLEManagerImpl.h index 013aa24e78c03d..c8ba6438167e01 100644 --- a/src/platform/Tizen/BLEManagerImpl.h +++ b/src/platform/Tizen/BLEManagerImpl.h @@ -114,16 +114,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/Zephyr/BLEManagerImpl.cpp b/src/platform/Zephyr/BLEManagerImpl.cpp index ae8ca1df7d408f..7af097195c6e27 100644 --- a/src/platform/Zephyr/BLEManagerImpl.cpp +++ b/src/platform/Zephyr/BLEManagerImpl.cpp @@ -740,10 +740,10 @@ uint16_t BLEManagerImpl::_NumConnections(void) return mMatterConnNum; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (ConnId %02x)", bt_conn_index(conId)); - return bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN) == 0; + return MapErrorZephyr(bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN)); } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -751,20 +751,22 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return bt_gatt_get_mtu(conId); } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { CHIP_ERROR err = CHIP_NO_ERROR; int status = 0; @@ -787,19 +789,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU VerifyOrExit(status == 0, err = MapErrorZephyr(status)); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %" CHIP_ERROR_FORMAT, err.Format()); - } - - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/Zephyr/BLEManagerImpl.h b/src/platform/Zephyr/BLEManagerImpl.h index 3be23dd2126a99..8c09ed457f94b2 100644 --- a/src/platform/Zephyr/BLEManagerImpl.h +++ b/src/platform/Zephyr/BLEManagerImpl.h @@ -63,14 +63,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool CloseConnection(BLE_CONNECTION_OBJECT conId); - uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; + uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/android/BLEManagerImpl.cpp b/src/platform/android/BLEManagerImpl.cpp index 8b0429e84a8af8..89653cfc427f53 100644 --- a/src/platform/android/BLEManagerImpl.cpp +++ b/src/platform/android/BLEManagerImpl.cpp @@ -218,7 +218,8 @@ BleLayer * BLEManagerImpl::_GetBleLayer() // ===== start implement virtual methods on BlePlatformDelegate. -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { chip::DeviceLayer::StackUnlock unlock; CHIP_ERROR err = CHIP_NO_ERROR; @@ -226,7 +227,6 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const jbyteArray svcIdObj; jbyteArray charIdObj; intptr_t tmpConnObj; - bool rc = false; ChipLogProgress(DeviceLayer, "Received SubscribeCharacteristic"); @@ -242,22 +242,23 @@ bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const env->ExceptionClear(); tmpConnObj = reinterpret_cast(conId); - rc = (bool) env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnSubscribeCharacteristicMethod, - static_cast(tmpConnObj), svcIdObj, charIdObj); + VerifyOrExit(env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnSubscribeCharacteristicMethod, + static_cast(tmpConnObj), svcIdObj, charIdObj), + err = BLE_ERROR_GATT_SUBSCRIBE_FAILED); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); exit: if (err != CHIP_NO_ERROR) { JniReferences::GetInstance().ReportError(env, err, __FUNCTION__); - rc = false; } env->ExceptionClear(); - return rc; + return err; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { chip::DeviceLayer::StackUnlock unlock; CHIP_ERROR err = CHIP_NO_ERROR; @@ -265,7 +266,6 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons jbyteArray svcIdObj; jbyteArray charIdObj; intptr_t tmpConnObj; - bool rc = false; ChipLogProgress(DeviceLayer, "Received UnsubscribeCharacteristic"); @@ -281,28 +281,27 @@ bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, cons env->ExceptionClear(); tmpConnObj = reinterpret_cast(conId); - rc = (bool) env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnUnsubscribeCharacteristicMethod, - static_cast(tmpConnObj), svcIdObj, charIdObj); + VerifyOrExit(env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnUnsubscribeCharacteristicMethod, + static_cast(tmpConnObj), svcIdObj, charIdObj), + err = BLE_ERROR_GATT_UNSUBSCRIBE_FAILED); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); exit: if (err != CHIP_NO_ERROR) { JniReferences::GetInstance().ReportError(env, err, __FUNCTION__); - rc = false; } env->ExceptionClear(); - return rc; + return err; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { chip::DeviceLayer::StackUnlock unlock; CHIP_ERROR err = CHIP_NO_ERROR; JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); intptr_t tmpConnObj; - bool rc = false; ChipLogProgress(DeviceLayer, "Received CloseConnection"); @@ -312,17 +311,17 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) env->ExceptionClear(); tmpConnObj = reinterpret_cast(conId); - rc = (bool) env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnCloseConnectionMethod, static_cast(tmpConnObj)); + VerifyOrExit(env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnCloseConnectionMethod, static_cast(tmpConnObj)), + err = CHIP_ERROR_INTERNAL); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); exit: if (err != CHIP_NO_ERROR) { JniReferences::GetInstance().ReportError(env, err, __FUNCTION__); - rc = false; } env->ExceptionClear(); - return rc; + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -355,14 +354,14 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return mtu; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + chip::System::PacketBufferHandle pBuf) { - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, chip::System::PacketBufferHandle pBuf) { chip::DeviceLayer::StackUnlock unlock; CHIP_ERROR err = CHIP_NO_ERROR; @@ -371,7 +370,6 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::Ch jbyteArray charIdObj; jbyteArray characteristicDataObj; intptr_t tmpConnObj; - bool rc = false; ChipLogProgress(DeviceLayer, "Received SendWriteRequest"); VerifyOrExit(mBLEManagerObject.HasValidObjectRef(), err = CHIP_ERROR_INCORRECT_STATE); @@ -391,19 +389,19 @@ bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::Ch env->ExceptionClear(); tmpConnObj = reinterpret_cast(conId); - rc = (bool) env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnSendWriteRequestMethod, static_cast(tmpConnObj), - svcIdObj, charIdObj, characteristicDataObj); + VerifyOrExit(env->CallBooleanMethod(mBLEManagerObject.ObjectRef(), mOnSendWriteRequestMethod, static_cast(tmpConnObj), + svcIdObj, charIdObj, characteristicDataObj), + err = BLE_ERROR_GATT_WRITE_FAILED); VerifyOrExit(!env->ExceptionCheck(), err = CHIP_JNI_ERROR_EXCEPTION_THROWN); exit: if (err != CHIP_NO_ERROR) { JniReferences::GetInstance().ReportError(env, err, __FUNCTION__); - rc = false; } env->ExceptionClear(); - return rc; + return err; } // ===== end implement virtual methods on BlePlatformDelegate. diff --git a/src/platform/android/BLEManagerImpl.h b/src/platform/android/BLEManagerImpl.h index a782ee8d06bd16..0642571782c30c 100644 --- a/src/platform/android/BLEManagerImpl.h +++ b/src/platform/android/BLEManagerImpl.h @@ -72,16 +72,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/bouffalolab/common/BLEManagerImpl.cpp b/src/platform/bouffalolab/common/BLEManagerImpl.cpp index eaf64c2021bec1..7731828c314ca3 100644 --- a/src/platform/bouffalolab/common/BLEManagerImpl.cpp +++ b/src/platform/bouffalolab/common/BLEManagerImpl.cpp @@ -625,10 +625,10 @@ uint16_t BLEManagerImpl::_NumConnections(void) return mGAPConns; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (ConnId %02x)", bt_conn_index((bt_conn *) conId)); - return bt_conn_disconnect((bt_conn *) conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN) == 0; + return MapErrorZephyr(bt_conn_disconnect((bt_conn *) conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN)); } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -636,20 +636,22 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return bt_gatt_get_mtu((bt_conn *) conId); } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { CHIP_ERROR err = CHIP_NO_ERROR; int status = 0; @@ -676,18 +678,17 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU exit: if (err != CHIP_NO_ERROR) { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %." CHIP_ERROR_FORMAT, err.Format()); ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %d", status); } - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/bouffalolab/common/BLEManagerImpl.h b/src/platform/bouffalolab/common/BLEManagerImpl.h index 630a726fe9ac4e..d5f3b56b66551a 100644 --- a/src/platform/bouffalolab/common/BLEManagerImpl.h +++ b/src/platform/bouffalolab/common/BLEManagerImpl.h @@ -60,14 +60,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool CloseConnection(BLE_CONNECTION_OBJECT conId); - uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; + uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/cc13xx_26xx/BLEManagerImpl.cpp b/src/platform/cc13xx_26xx/BLEManagerImpl.cpp index 7cc761f16d3b35..fc0a6af0beea94 100644 --- a/src/platform/cc13xx_26xx/BLEManagerImpl.cpp +++ b/src/platform/cc13xx_26xx/BLEManagerImpl.cpp @@ -260,12 +260,14 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } // ===== Members that implement virtual methods on BlePlatformDelegate. -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { void * pMsg = (void *) ICall_malloc(sizeof(void *)); pMsg = (void *) conId; - return (EnqueueEvtHdrMsg(BLEManagerIMPL_CHIPOBLE_CLOSE_CONN_EVT, (void *) pMsg) == true); + EnqueueEvtHdrMsg(BLEManagerIMPL_CHIPOBLE_CLOSE_CONN_EVT, (void *) pMsg); + + return CHIP_NO_ERROR; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -295,8 +297,8 @@ void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) // Unused } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { BLEMGR_LOG("BLEMGR: BLE SendIndication "); @@ -308,14 +310,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU pMsg = (CHIPoBLEIndEvt_t *) ICall_malloc(sizeof(CHIPoBLEIndEvt_t)); if (NULL == pMsg) { - return false; + return CHIP_ERROR_NO_MEMORY; } pBuf = (uint8_t *) ICall_malloc(dataLen); if (NULL == pBuf) { ICall_free((void *) pMsg); - return false; + return CHIP_ERROR_NO_MEMORY; } memset(pBuf, 0x00, dataLen); @@ -327,29 +329,28 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU EnqueueEvtHdrMsg(BLEManagerIMPL_CHIPOBLE_TX_IND_EVT, (void *) pMsg); BLEMGR_LOG("BLEMGR: BLE SendIndication RETURN, Length: %d ", dataLen); - return true; + return CHIP_NO_ERROR; } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) { /* Unsupported on TI peripheral device implementation */ - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) { /* Unsupported on TI peripheral device implementation */ - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { /* Unsupported on TI peripheral device implementation */ - BLEMGR_LOG("BLEMGR: BLE SendWriteRequest"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } // ===== Helper Members that implement the Low level BLE Stack behavior. diff --git a/src/platform/cc13xx_26xx/cc13x4_26x4/BLEManagerImpl.h b/src/platform/cc13xx_26xx/cc13x4_26x4/BLEManagerImpl.h index 510cea97df0e68..9af5b63f0b7219 100644 --- a/src/platform/cc13xx_26xx/cc13x4_26x4/BLEManagerImpl.h +++ b/src/platform/cc13xx_26xx/cc13x4_26x4/BLEManagerImpl.h @@ -220,17 +220,17 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/mbed/BLEManagerImpl.cpp b/src/platform/mbed/BLEManagerImpl.cpp index 3a7b859b70510d..1bcd14fdbfabb5 100644 --- a/src/platform/mbed/BLEManagerImpl.cpp +++ b/src/platform/mbed/BLEManagerImpl.cpp @@ -943,26 +943,30 @@ void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) // no-op } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection, connHandle=%d", conId); ble::Gap & gap = ble::BLE::Instance().gap(); ble_error_t mbed_err = gap.disconnect(conId, ble::local_disconnection_reason_t::USER_TERMINATION); - return mbed_err == BLE_ERROR_NONE; + VerifyOrReturnError(mbed_err == BLE_ERROR_NONE, CHIP_ERROR_INTERNAL); + + return CHIP_NO_ERROR; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -970,8 +974,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return sConnectionInfo.getMTU(conId); } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogDetail(DeviceLayer, "BlePlatformDelegate %s", __FUNCTION__); @@ -996,10 +1000,8 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU } else { - // TODO handle error with chipConnection::SendMessage as described - // in the BlePlatformDelegate.h. ChipLogError(DeviceLayer, "Send indication failed, invalid charID."); - return false; + return BLE_ERROR_GATT_INDICATE_FAILED; } ChipLogDetail(DeviceLayer, @@ -1015,14 +1017,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU { ChipLogError(DeviceLayer, "Send indication failed, mbed-os error: %d", mbed_err); } - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogError(DeviceLayer, "%s: NOT IMPLEMENTED", __PRETTY_FUNCTION__); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } } // namespace Internal diff --git a/src/platform/mbed/BLEManagerImpl.h b/src/platform/mbed/BLEManagerImpl.h index bde5a314409b4e..6e5d19f5548135 100644 --- a/src/platform/mbed/BLEManagerImpl.h +++ b/src/platform/mbed/BLEManagerImpl.h @@ -65,14 +65,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool CloseConnection(BLE_CONNECTION_OBJECT conId); - uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; + uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/mt793x/BLEManagerImpl.cpp b/src/platform/mt793x/BLEManagerImpl.cpp index d74910e974caed..55bb0bfad17f36 100644 --- a/src/platform/mt793x/BLEManagerImpl.cpp +++ b/src/platform/mt793x/BLEManagerImpl.cpp @@ -288,19 +288,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err = CHIP_NO_ERROR; bt_hci_cmd_disconnect_t disconnect_para; @@ -319,7 +321,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) ChipLogError(DeviceLayer, "bt_gap_le_disconnect() failed: %s", ErrorStr(err)); } - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -332,8 +334,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const } #define INDICATION_BUFFER_LENGTH (300) -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { uint8_t buf[INDICATION_BUFFER_LENGTH + 3] = { 0 }; bt_gattc_charc_value_notification_indication_t * req; @@ -362,13 +364,7 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU SuccessOrExit(err); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - - return true; + return err; } void BLEManagerImpl::HandleRXCharWrite(uint16_t handle, void * data, uint16_t size) @@ -447,11 +443,11 @@ void BLEManagerImpl::HandleTXCharCCCDWrite(uint16_t handle, void * data, uint16_ } } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/mt793x/BLEManagerImpl.h b/src/platform/mt793x/BLEManagerImpl.h index 00758be8a11852..283603a00a820d 100644 --- a/src/platform/mt793x/BLEManagerImpl.h +++ b/src/platform/mt793x/BLEManagerImpl.h @@ -64,16 +64,16 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.cpp b/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.cpp index 0b986033054fbe..0d1c4c0dcb8932 100644 --- a/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.cpp +++ b/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.cpp @@ -619,10 +619,11 @@ uint16_t BLEManagerImpl::_NumConnections(void) return mGAPConns; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (ConnId %02x)", bt_conn_index(conId)); - return bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN) == 0; + int status = bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN); + return (status == 0) ? CHIP_NO_ERROR : MapErrorZephyr(status); } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -630,20 +631,22 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return bt_gatt_get_mtu(conId); } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { CHIP_ERROR err = CHIP_NO_ERROR; int status = 0; @@ -665,33 +668,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU VerifyOrExit(status == 0, err = MapErrorZephyr(status)); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %" CHIP_ERROR_FORMAT, err.Format()); - } - - return err == CHIP_NO_ERROR; -} - -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) -{ - ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; -} - -bool BLEManagerImpl::SendReadRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) -{ - ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return err; } -bool BLEManagerImpl::SendReadResponse(BLE_CONNECTION_OBJECT conId, BLE_READ_REQUEST_CONTEXT requestContext, - const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.h b/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.h index e80faebe45abc1..4ae142b65cb6c0 100644 --- a/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.h +++ b/src/platform/nxp/common/ble_zephyr/BLEManagerImpl.h @@ -67,18 +67,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId); - bool CloseConnection(BLE_CONNECTION_OBJECT conId); - uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendReadRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf); - bool SendReadResponse(BLE_CONNECTION_OBJECT conId, BLE_READ_REQUEST_CONTEXT requestContext, const ChipBleUUID * svcId, - const ChipBleUUID * charId); + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; + uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/nxp/k32w/common/BLEManagerCommon.cpp b/src/platform/nxp/k32w/common/BLEManagerCommon.cpp index 59f745a0dd542e..d9dbde88f3a614 100644 --- a/src/platform/nxp/k32w/common/BLEManagerCommon.cpp +++ b/src/platform/nxp/k32w/common/BLEManagerCommon.cpp @@ -342,19 +342,21 @@ void BLEManagerCommon::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerCommon::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerCommon::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerCommon::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerCommon::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerCommon::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerCommon::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerCommon::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerCommon::CloseConnection(BLE_CONNECTION_OBJECT conId) { return blekw_stop_connection_internal(conId); } @@ -367,11 +369,11 @@ uint16_t BLEManagerCommon::GetMTU(BLE_CONNECTION_OBJECT conId) const return tempMtu; } -bool BLEManagerCommon::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerCommon::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerCommon::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerCommon::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) @@ -379,34 +381,26 @@ void BLEManagerCommon::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) BLEMgrImpl().CloseConnection(conId); } -bool BLEManagerCommon::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerCommon::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { + VerifyOrReturnError(UUIDsMatch(&Ble::CHIP_BLE_CHAR_2_UUID, charId), BLE_ERROR_GATT_WRITE_FAILED); + CHIP_ERROR err = CHIP_NO_ERROR; - uint16_t cId = (UUIDsMatch(&Ble::CHIP_BLE_CHAR_2_UUID, charId) ? value_chipoble_tx : 0); - ChipDeviceEvent event; - if (cId != 0) + if (blekw_send_event(conId, value_chipoble_tx, data->Start(), data->DataLength()) != BLE_OK) { - if (blekw_send_event(conId, cId, data->Start(), data->DataLength()) != BLE_OK) - { - err = CHIP_ERROR_SENDING_BLOCKED; - } - else - { - event.Type = DeviceEventType::kCHIPoBLEIndicateConfirm; - event.CHIPoBLEIndicateConfirm.ConId = conId; - err = PlatformMgr().PostEvent(&event); - } - - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerCommon::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + err = CHIP_ERROR_SENDING_BLOCKED; + } + else + { + ChipDeviceEvent event; + event.Type = DeviceEventType::kCHIPoBLEIndicateConfirm; + event.CHIPoBLEIndicateConfirm.ConId = conId; + err = PlatformMgr().PostEvent(&event); } - return false; + + return err; } BLEManagerCommon::ble_err_t BLEManagerCommon::blekw_send_event(int8_t connection_handle, uint16_t handle, uint8_t * data, @@ -1415,14 +1409,14 @@ void BLEManagerCommon::StartBleAdvTimeoutTimer(uint32_t aTimeoutInMs) } } -bool BLEManagerCommon::blekw_stop_connection_internal(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerCommon::blekw_stop_connection_internal(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (con %u)", conId); if (Gap_Disconnect(conId) != gBleSuccess_c) { ChipLogProgress(DeviceLayer, "Gap_Disconnect() failed."); - return false; + return CHIP_ERROR_INTERNAL; } #if defined(chip_with_low_power) && (chip_with_low_power == 1) else @@ -1432,7 +1426,7 @@ bool BLEManagerCommon::blekw_stop_connection_internal(BLE_CONNECTION_OBJECT conI } #endif - return true; + return CHIP_NO_ERROR; } } // namespace Internal diff --git a/src/platform/nxp/k32w/common/BLEManagerCommon.h b/src/platform/nxp/k32w/common/BLEManagerCommon.h index 3f70f080764168..b7fc1275d2501f 100644 --- a/src/platform/nxp/k32w/common/BLEManagerCommon.h +++ b/src/platform/nxp/k32w/common/BLEManagerCommon.h @@ -82,16 +82,16 @@ class BLEManagerCommon : public BLEManager, protected BleLayer, private BlePlatf // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. @@ -224,7 +224,7 @@ class BLEManagerCommon : public BLEManager, protected BleLayer, private BlePlatf static void blekw_gap_connection_cb(deviceId_t deviceId, gapConnectionEvent_t * pConnectionEvent); static void blekw_start_connection_timeout(void); static void blekw_stop_connection_timeout(void); - static bool blekw_stop_connection_internal(BLE_CONNECTION_OBJECT conId); + static CHIP_ERROR blekw_stop_connection_internal(BLE_CONNECTION_OBJECT conId); public: virtual CHIP_ERROR InitHostController(BLECallbackDelegate::GapGenericCallback cb_fp) = 0; diff --git a/src/platform/qpg/BLEManagerImpl.cpp b/src/platform/qpg/BLEManagerImpl.cpp index 9d203b9b34f961..6de29e1f2412a8 100644 --- a/src/platform/qpg/BLEManagerImpl.cpp +++ b/src/platform/qpg/BLEManagerImpl.cpp @@ -250,19 +250,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; @@ -274,7 +276,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) ChipLogError(DeviceLayer, "qvCHIP_BleCloseConnection() failed: %s", ErrorStr(err)); } - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -289,8 +291,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return retVal; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; bool isRxHandle; @@ -306,19 +308,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU qvCHIP_BleSendIndication(conId, cId, dataLen, data->Start()); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - return true; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/qpg/BLEManagerImpl.h b/src/platform/qpg/BLEManagerImpl.h index 9a9ad45a7a221e..b06593541d135f 100644 --- a/src/platform/qpg/BLEManagerImpl.h +++ b/src/platform/qpg/BLEManagerImpl.h @@ -61,14 +61,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/silabs/BLEManagerImpl.h b/src/platform/silabs/BLEManagerImpl.h index 69e5720387ef65..86d1b05a887869 100644 --- a/src/platform/silabs/BLEManagerImpl.h +++ b/src/platform/silabs/BLEManagerImpl.h @@ -109,16 +109,16 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/silabs/ConfigurationManagerImpl.cpp b/src/platform/silabs/ConfigurationManagerImpl.cpp index 9454367d3bf030..5a511038c799ed 100644 --- a/src/platform/silabs/ConfigurationManagerImpl.cpp +++ b/src/platform/silabs/ConfigurationManagerImpl.cpp @@ -260,6 +260,18 @@ void ConfigurationManagerImpl::RunConfigUnitTest(void) #endif // CONFIG_BUILD_FOR_HOST_UNIT_TEST } +/// @brief Helper to erase Thread info from device +void ConfigurationManagerImpl::ClearThreadStack() +{ +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT + ThreadStackMgr().ClearAllSrpHostAndServices(); +#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT + ChipLogProgress(DeviceLayer, "Clearing Thread provision"); + ThreadStackMgr().ErasePersistentInfo(); +#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD +} + void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) { CHIP_ERROR err; @@ -272,13 +284,7 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg) ChipLogError(DeviceLayer, "FactoryResetConfig() failed: %s", chip::ErrorStr(err)); } -#if CHIP_DEVICE_CONFIG_ENABLE_THREAD -#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT - ThreadStackMgr().ClearAllSrpHostAndServices(); -#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT - ChipLogProgress(DeviceLayer, "Clearing Thread provision"); - ThreadStackMgr().ErasePersistentInfo(); -#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD + GetDefaultInstance().ClearThreadStack(); PersistedStorage::KeyValueStoreMgrImpl().ErasePartition(); diff --git a/src/platform/silabs/ConfigurationManagerImpl.h b/src/platform/silabs/ConfigurationManagerImpl.h index f34e37ed91bb52..262b68053a3214 100644 --- a/src/platform/silabs/ConfigurationManagerImpl.h +++ b/src/platform/silabs/ConfigurationManagerImpl.h @@ -46,6 +46,8 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR GetTotalOperationalHours(uint32_t & totalOperationalHours); CHIP_ERROR StoreTotalOperationalHours(uint32_t totalOperationalHours); + void ClearThreadStack(); + private: // ===== Members that implement the ConfigurationManager public interface. diff --git a/src/platform/silabs/ThreadStackManagerImpl.h b/src/platform/silabs/ThreadStackManagerImpl.h index c56990fb0d3712..411c8eeb0676e1 100644 --- a/src/platform/silabs/ThreadStackManagerImpl.h +++ b/src/platform/silabs/ThreadStackManagerImpl.h @@ -25,12 +25,17 @@ #pragma once -#include #include #include #include +#include "cmsis_os2.h" + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT +static constexpr uint32_t threadSrpClearAllFlags = 0x0001U; +#endif + extern "C" void otSysEventSignalPending(void); namespace chip { @@ -47,8 +52,7 @@ extern int GetEntropy_EFR32(uint8_t * buf, size_t bufSize); * using the Silicon Labs SDK and the OpenThread stack. */ class ThreadStackManagerImpl final : public ThreadStackManager, - public Internal::GenericThreadStackManagerImpl_OpenThread, - public Internal::GenericThreadStackManagerImpl_FreeRTOS + public Internal::GenericThreadStackManagerImpl_OpenThread { // Allow the ThreadStackManager interface class to delegate method calls to // the implementation methods provided by this class. @@ -58,8 +62,6 @@ class ThreadStackManagerImpl final : public ThreadStackManager, // this class. #ifndef DOXYGEN_SHOULD_SKIP_THIS friend Internal::GenericThreadStackManagerImpl_OpenThread; - friend Internal::GenericThreadStackManagerImpl_OpenThread; - friend Internal::GenericThreadStackManagerImpl_FreeRTOS; #endif // Allow glue functions called by OpenThread to call helper methods on this @@ -72,11 +74,21 @@ class ThreadStackManagerImpl final : public ThreadStackManager, using ThreadStackManager::InitThreadStack; CHIP_ERROR InitThreadStack(otInstance * otInst); + void FactoryResetThreadStack(void); private: // ===== Methods that implement the ThreadStackManager abstract interface. CHIP_ERROR _InitThreadStack(void); + CHIP_ERROR _StartThreadTask(void); + void _LockThreadStack(void); + bool _TryLockThreadStack(void); + void _UnlockThreadStack(void); + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT + void _WaitOnSrpClearAllComplete(); + void _NotifySrpClearAllComplete(); +#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT // ===== Members for internal use by the following friends. friend ThreadStackManager & ::chip::DeviceLayer::ThreadStackMgr(void); @@ -90,6 +102,10 @@ class ThreadStackManagerImpl final : public ThreadStackManager, // ===== Private members for use by this class only. ThreadStackManagerImpl() = default; + +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT + osThreadId_t mSrpClearAllRequester = NULL; +#endif }; /** diff --git a/src/platform/silabs/efr32/BLEManagerImpl.cpp b/src/platform/silabs/efr32/BLEManagerImpl.cpp index 78bd13d061ef45..2fcceefa37b90a 100644 --- a/src/platform/silabs/efr32/BLEManagerImpl.cpp +++ b/src/platform/silabs/efr32/BLEManagerImpl.cpp @@ -279,19 +279,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err = CHIP_NO_ERROR; sl_status_t ret; @@ -306,7 +308,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) ChipLogError(DeviceLayer, "sl_bt_connection_close() failed: %s", ErrorStr(err)); } - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -315,8 +317,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return (conState != NULL) ? conState->mtu : 0; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { CHIP_ERROR err = CHIP_NO_ERROR; CHIPoBLEConState * conState = GetConnectionState(conId); @@ -334,20 +336,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU err = MapBLEError(ret); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %s", ErrorStr(err)); - return false; - } - - return true; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/silabs/efr32/ThreadStackManagerImpl.cpp b/src/platform/silabs/efr32/ThreadStackManagerImpl.cpp index 2cab401837e8d8..d2ae058a8a03f1 100644 --- a/src/platform/silabs/efr32/ThreadStackManagerImpl.cpp +++ b/src/platform/silabs/efr32/ThreadStackManagerImpl.cpp @@ -26,7 +26,8 @@ /* this file behaves like a config.h, comes first */ #include -#include +#include +#include #include #include #include @@ -35,11 +36,42 @@ #include -// Forward declaration -extern "C" otInstance * otGetInstance(void); +#include +#include + +extern "C" { +#include "platform-efr32.h" +otInstance * otGetInstance(void); +#if CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI +void otAppCliInit(otInstance * aInstance); +#endif // CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI +} namespace chip { namespace DeviceLayer { +namespace { +otInstance * sOTInstance = NULL; + +// Network commissioning +#ifndef _NO_GENERIC_THREAD_NETWORK_COMMISSIONING_DRIVER_ +NetworkCommissioning::GenericThreadDriver sGenericThreadDriver; +app::Clusters::NetworkCommissioning::Instance sThreadNetworkCommissioningInstance(0 /* Endpoint Id */, &sGenericThreadDriver); +#endif + +void initStaticNetworkCommissioningThreadDriver(void) +{ +#ifndef _NO_GENERIC_THREAD_NETWORK_COMMISSIONING_DRIVER_ + sThreadNetworkCommissioningInstance.Init(); +#endif +} + +void shutdownStaticNetworkCommissioningThreadDriver(void) +{ +#ifndef _NO_GENERIC_THREAD_NETWORK_COMMISSIONING_DRIVER_ + sThreadNetworkCommissioningInstance.Shutdown(); +#endif +} +}; // namespace using namespace ::chip::DeviceLayer::Internal; @@ -47,61 +79,81 @@ ThreadStackManagerImpl ThreadStackManagerImpl::sInstance; CHIP_ERROR ThreadStackManagerImpl::_InitThreadStack(void) { - return InitThreadStack(NULL); + return InitThreadStack(sOTInstance); } -CHIP_ERROR ThreadStackManagerImpl::InitThreadStack(otInstance * otInst) +CHIP_ERROR ThreadStackManagerImpl::_StartThreadTask(void) { - CHIP_ERROR err = CHIP_NO_ERROR; - - // Initialize the generic implementation base classes. - err = GenericThreadStackManagerImpl_FreeRTOS::DoInit(); - SuccessOrExit(err); - err = GenericThreadStackManagerImpl_OpenThread::DoInit(otInst); - SuccessOrExit(err); + // Stubbed since our thread task is created in the InitThreadStack function and it will start once the scheduler starts. + return CHIP_NO_ERROR; +} -exit: - return err; +void ThreadStackManagerImpl::_LockThreadStack(void) +{ + sl_ot_rtos_acquire_stack_mutex(); } -bool ThreadStackManagerImpl::IsInitialized() +bool ThreadStackManagerImpl::_TryLockThreadStack(void) { - return sInstance.mThreadStackLock != NULL; + // TODO: Implement a non-blocking version of the mutex lock + sl_ot_rtos_acquire_stack_mutex(); + return true; } -} // namespace DeviceLayer -} // namespace chip +void ThreadStackManagerImpl::_UnlockThreadStack(void) +{ + sl_ot_rtos_release_stack_mutex(); +} -using namespace ::chip::DeviceLayer; +#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT +void ThreadStackManagerImpl::_WaitOnSrpClearAllComplete() +{ + // Only 1 task can be blocked on a srpClearAll request + if (mSrpClearAllRequester == NULL) + { + mSrpClearAllRequester = osThreadGetId(); + // Wait on OnSrpClientNotification which confirms the clearing is done. + // It will notify this current task with NotifySrpClearAllComplete. + // However, we won't wait more than 2s. + osThreadFlagsWait(threadSrpClearAllFlags, osFlagsWaitAny, pdMS_TO_TICKS(2000)); + mSrpClearAllRequester = NULL; + } +} -/** - * Glue function called directly by the OpenThread stack when tasklet processing work - * is pending. - */ -extern "C" void otTaskletsSignalPending(otInstance * p_instance) +void ThreadStackManagerImpl::_NotifySrpClearAllComplete() { - ThreadStackMgrImpl().SignalThreadActivityPending(); + if (mSrpClearAllRequester) + { + osThreadFlagsSet(mSrpClearAllRequester, threadSrpClearAllFlags); + } } +#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT -/** - * Glue function called directly by the OpenThread stack when system event processing work - * is pending. - */ -extern "C" void otSysEventSignalPending(void) +CHIP_ERROR ThreadStackManagerImpl::InitThreadStack(otInstance * otInst) { - BaseType_t yieldRequired = ThreadStackMgrImpl().SignalThreadActivityPendingFromISR(); - portYIELD_FROM_ISR(yieldRequired); + CHIP_ERROR err = CHIP_NO_ERROR; + err = GenericThreadStackManagerImpl_OpenThread::ConfigureThreadStack(otInst); + initStaticNetworkCommissioningThreadDriver(); + return err; } -extern "C" void * otPlatCAlloc(size_t aNum, size_t aSize) +void ThreadStackManagerImpl::FactoryResetThreadStack(void) { - return CHIPPlatformMemoryCalloc(aNum, aSize); + VerifyOrReturn(sOTInstance != NULL); + otInstanceFactoryReset(sOTInstance); + shutdownStaticNetworkCommissioningThreadDriver(); } -extern "C" void otPlatFree(void * aPtr) +bool ThreadStackManagerImpl::IsInitialized() { - CHIPPlatformMemoryFree(aPtr); + return otGetInstance() != NULL; } + +} // namespace DeviceLayer +} // namespace chip + +using namespace ::chip::DeviceLayer; + #ifndef SL_COMPONENT_CATALOG_PRESENT extern "C" __WEAK void sl_openthread_init(void) { @@ -137,7 +189,22 @@ extern "C" otError otPlatUartEnable(void) extern "C" otInstance * otGetInstance(void) { - return ThreadStackMgrImpl().OTInstance(); + return sOTInstance; +} + +extern "C" void sl_ot_create_instance(void) +{ + VerifyOrDie(chip::Platform::MemoryInit() == CHIP_NO_ERROR); + mbedtls_platform_set_calloc_free(CHIPPlatformMemoryCalloc, CHIPPlatformMemoryFree); + sOTInstance = otInstanceInitSingle(); +} + +extern "C" void sl_ot_cli_init(void) +{ +#if !defined(PW_RPC_ENABLED) && CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI + VerifyOrDie(sOTInstance != NULL); + otAppCliInit(sOTInstance); +#endif } #if CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI diff --git a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp index 0881bea848112b..514003305868cf 100644 --- a/src/platform/silabs/platformAbstraction/GsdkSpam.cpp +++ b/src/platform/silabs/platformAbstraction/GsdkSpam.cpp @@ -79,10 +79,6 @@ CHIP_ERROR SilabsPlatform::Init(void) sl_iostream_set_default(sl_iostream_stdio_handle); #endif -#if CHIP_ENABLE_OPENTHREAD - sl_ot_sys_init(); -#endif - #ifdef SL_CATALOG_SYSTEMVIEW_TRACE_PRESENT SEGGER_SYSVIEW_Conf(); #endif diff --git a/src/platform/silabs/rs911x/BLEManagerImpl.cpp b/src/platform/silabs/rs911x/BLEManagerImpl.cpp index bce62e75e7a3d9..17047186eaf7fd 100644 --- a/src/platform/silabs/rs911x/BLEManagerImpl.cpp +++ b/src/platform/silabs/rs911x/BLEManagerImpl.cpp @@ -429,19 +429,21 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -452,7 +454,7 @@ bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) ChipLogError(DeviceLayer, "sl_bt_connection_close() failed: %s", ErrorStr(err)); } - return true; //(err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -461,8 +463,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return (conState != NULL) ? conState->mtu : 0; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { int32_t status = 0; status = rsi_ble_indicate_value(event_msg.resp_enh_conn.dev_addr, event_msg.rsi_ble_measurement_hndl, (data->DataLength()), @@ -471,20 +473,20 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU if (status != RSI_SUCCESS) { ChipLogProgress(DeviceLayer, "indication failed with error code %lx ", status); - return false; + return BLE_ERROR_GATT_INDICATE_FAILED; } // start timer for the indication Confirmation Event DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Milliseconds32(BLE_SEND_INDICATION_TIMER_PERIOD_MS), OnSendIndicationTimeout, this); - return true; + return CHIP_NO_ERROR; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/stm32/BLEManagerImpl.cpp b/src/platform/stm32/BLEManagerImpl.cpp index ba7ea02c3c9a91..96fe0a864a729f 100644 --- a/src/platform/stm32/BLEManagerImpl.cpp +++ b/src/platform/stm32/BLEManagerImpl.cpp @@ -233,25 +233,27 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event) } } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::UnsubscribeCharacteristic() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { CHIP_ERROR err = CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; ChipLogProgress(DeviceLayer, "Closing BLE GATT connection con %u", *(uint16_t *) conId); // aci_gap_terminate(gconnid, CONNECTION_CLOSE); - return (err == CHIP_NO_ERROR); + return err; } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -262,8 +264,8 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return retVal; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle data) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle data) { uint16_t dataLen = data->DataLength(); @@ -271,14 +273,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU APP_MATTER_Send_Notification(dataLen, data->Start()); - return true; + return CHIP_NO_ERROR; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogProgress(DeviceLayer, "BLEManagerImpl::SendWriteRequest() not supported"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/stm32/BLEManagerImpl.h b/src/platform/stm32/BLEManagerImpl.h index 7b60e811088fe6..0a75c555fad5ae 100644 --- a/src/platform/stm32/BLEManagerImpl.h +++ b/src/platform/stm32/BLEManagerImpl.h @@ -66,14 +66,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/telink/BLEManagerImpl.cpp b/src/platform/telink/BLEManagerImpl.cpp index 55125cc07ef0be..819d2614ce349d 100644 --- a/src/platform/telink/BLEManagerImpl.cpp +++ b/src/platform/telink/BLEManagerImpl.cpp @@ -694,10 +694,10 @@ uint16_t BLEManagerImpl::_NumConnections(void) return mGAPConns; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogProgress(DeviceLayer, "Closing BLE GATT connection (ConnId %02x)", bt_conn_index(conId)); - return bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN) == 0; + return MapErrorZephyr(bt_conn_disconnect(conId, BT_HCI_ERR_REMOTE_USER_TERM_CONN)); } uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const @@ -705,20 +705,22 @@ uint16_t BLEManagerImpl::GetMTU(BLE_CONNECTION_OBJECT conId) const return bt_gatt_get_mtu(conId); } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { CHIP_ERROR err = CHIP_NO_ERROR; int status = 0; @@ -740,19 +742,14 @@ bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUU VerifyOrExit(status == 0, err = MapErrorZephyr(status)); exit: - if (err != CHIP_NO_ERROR) - { - ChipLogError(DeviceLayer, "BLEManagerImpl::SendIndication() failed: %" CHIP_ERROR_FORMAT, err.Format()); - } - - return err == CHIP_NO_ERROR; + return err; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) { ChipLogDetail(DeviceLayer, "BLE central not implemented"); - return false; + return CHIP_ERROR_NOT_IMPLEMENTED; } void BLEManagerImpl::NotifyChipConnectionClosed(BLE_CONNECTION_OBJECT conId) diff --git a/src/platform/telink/BLEManagerImpl.h b/src/platform/telink/BLEManagerImpl.h index 38ef878cee7171..65b74fb144c144 100644 --- a/src/platform/telink/BLEManagerImpl.h +++ b/src/platform/telink/BLEManagerImpl.h @@ -67,14 +67,15 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, - PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId, + PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. diff --git a/src/platform/telink/tlsr9528a_2m_flash.overlay b/src/platform/telink/tlsr9528a_2m_flash.overlay deleted file mode 120000 index 3b425c1198b983..00000000000000 --- a/src/platform/telink/tlsr9528a_2m_flash.overlay +++ /dev/null @@ -1 +0,0 @@ -tlsr9518adk80d_2m_flash.overlay \ No newline at end of file diff --git a/src/platform/telink/tlsr9528a_2m_flash.overlay b/src/platform/telink/tlsr9528a_2m_flash.overlay new file mode 100644 index 00000000000000..98bc72b459dd24 --- /dev/null +++ b/src/platform/telink/tlsr9528a_2m_flash.overlay @@ -0,0 +1,44 @@ +&flash { + reg = <0x20000000 0x200000>; + + partitions { + /delete-node/ partition@0; + /delete-node/ partition@20000; + /delete-node/ partition@88000; + /delete-node/ partition@f0000; + /delete-node/ partition@f4000; + /delete-node/ partition@fe000; + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x13000>; + }; + slot0_partition: partition@13000 { + label = "image-0"; + reg = <0x13000 0xec000>; + }; + factory_partition: partition@ff000 { + label = "factory-data"; + reg = <0xff000 0x1000>; + }; + dac_keypair_partition: partition@100000 { + label = "dac-keypair"; + reg = <0x100000 0x1000>; //store dac and key pair. + }; + descriptor_partition: partition@101000 { + label = "sboot-descriptor"; + reg = <0x101000 0x2000>; + }; + storage_partition: partition@103000 { + label = "storage"; + reg = <0x103000 0xf000>; + }; + slot1_partition: partition@112000 { + label = "image-1"; + reg = <0x112000 0xec000>; + }; + vendor_partition: partition@1fe000 { + label = "vendor-data"; + reg = <0x1fe000 0x2000>; + }; + }; +}; diff --git a/src/platform/telink/tlsr9528a_4m_flash.overlay b/src/platform/telink/tlsr9528a_4m_flash.overlay new file mode 100644 index 00000000000000..0005da2a590ab4 --- /dev/null +++ b/src/platform/telink/tlsr9528a_4m_flash.overlay @@ -0,0 +1,44 @@ +&flash { + reg = <0x20000000 0x400000>; + + partitions { + /delete-node/ partition@0; + /delete-node/ partition@20000; + /delete-node/ partition@88000; + /delete-node/ partition@f0000; + /delete-node/ partition@f4000; + /delete-node/ partition@fe000; + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x13000>; + }; + slot0_partition: partition@13000 { + label = "image-0"; + reg = <0x13000 0x1ec000>; + }; + factory_partition: partition@1ff000 { + label = "factory-data"; + reg = <0x1ff000 0x1000>; + }; + dac_keypair_partition: partition@200000 { + label = "dac-keypair"; + reg = <0x200000 0x1000>; //store dac and key pair. + }; + descriptor_partition: partition@201000 { + label = "sboot-descriptor"; + reg = <0x201000 0x2000>; + }; + storage_partition: partition@203000 { + label = "storage"; + reg = <0x203000 0xf000>; + }; + slot1_partition: partition@212000 { + label = "image-1"; + reg = <0x212000 0x1ec000>; + }; + vendor_partition: partition@3fe000 { + label = "vendor-data"; + reg = <0x3fe000 0x2000>; + }; + }; +}; diff --git a/src/platform/webos/BLEManagerImpl.cpp b/src/platform/webos/BLEManagerImpl.cpp index ad03cd9ed2fa4f..a7a273d89b9523 100644 --- a/src/platform/webos/BLEManagerImpl.cpp +++ b/src/platform/webos/BLEManagerImpl.cpp @@ -421,7 +421,7 @@ bool BLEManagerImpl::gattWriteDescriptorValueCb(LSHandle * sh, LSMessage * messa return true; } -bool BLEManagerImpl::SubscribeCharacteristicToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristicToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId) { pbnjson::JValue valueForMonitor = pbnjson::JObject(); @@ -438,7 +438,7 @@ bool BLEManagerImpl::SubscribeCharacteristicToWebOS(void * bleConnObj, const uin if (mLSHandle == nullptr) { ChipLogError(DeviceLayer, "LS handle is null"); - return false; + return CHIP_ERROR_INTERNAL; } ret = LSCall(mLSHandle, "luna://com.webos.service.bluetooth2/gatt/monitorCharacteristics", valueForMonitor.stringify().c_str(), @@ -477,36 +477,36 @@ bool BLEManagerImpl::SubscribeCharacteristicToWebOS(void * bleConnObj, const uin gattWriteDescriptorValueCb, bleConnObj, NULL, NULL); if (ret != 1) - return false; + return BLE_ERROR_GATT_SUBSCRIBE_FAILED; - return true; + return CHIP_NO_ERROR; } -bool BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { - bool result = false; - result = SubscribeCharacteristicToWebOS(conId, static_cast(svcId->bytes), - static_cast(charId->bytes)); - return result; + return SubscribeCharacteristicToWebOS(conId, static_cast(svcId->bytes), + static_cast(charId->bytes)); } -bool BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const ChipBleUUID * charId) +CHIP_ERROR BLEManagerImpl::UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, + const ChipBleUUID * charId) { ChipLogError(Ble, "UnsubscribeCharacteristic: Not implemented"); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) +CHIP_ERROR BLEManagerImpl::CloseConnection(BLE_CONNECTION_OBJECT conId) { ChipLogError(Ble, "CloseConnection: Not implemented"); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } -bool BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendIndication(BLE_CONNECTION_OBJECT conId, const ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + chip::System::PacketBufferHandle pBuf) { ChipLogError(Ble, "SendIndication: Not implemented"); - return true; + return CHIP_ERROR_NOT_IMPLEMENTED; } bool BLEManagerImpl::gattWriteValueCb(LSHandle * sh, LSMessage * message, void * userData) @@ -536,8 +536,8 @@ bool BLEManagerImpl::gattWriteValueCb(LSHandle * sh, LSMessage * message, void * return true; } -bool BLEManagerImpl::SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId, const uint8_t * pBuf, - uint32_t pBufDataLen) +CHIP_ERROR BLEManagerImpl::SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId, + const uint8_t * pBuf, uint32_t pBufDataLen) { BLEConnection * conn = (BLEConnection *) bleConnObj; std::ostringstream cvt; @@ -595,7 +595,7 @@ bool BLEManagerImpl::SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * if (mLSHandle == nullptr) { ChipLogError(DeviceLayer, "LS handle is null"); - return false; + return CHIP_ERROR_INTERNAL; } ret = LSCall(mLSHandle, "luna://com.webos.service.bluetooth2/gatt/writeCharacteristicValue", param.stringify().c_str(), @@ -605,19 +605,16 @@ bool BLEManagerImpl::SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * exit: if (ret != 1) - return false; + return BLE_ERROR_GATT_WRITE_FAILED; - return true; + return CHIP_NO_ERROR; } -bool BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - chip::System::PacketBufferHandle pBuf) +CHIP_ERROR BLEManagerImpl::SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId, chip::System::PacketBufferHandle pBuf) { - bool result = false; - result = SendWriteRequestToWebOS(conId, static_cast(svcId->bytes), static_cast(charId->bytes), - pBuf->Start(), pBuf->DataLength()); - - return result; + return SendWriteRequestToWebOS(conId, static_cast(svcId->bytes), static_cast(charId->bytes), + pBuf->Start(), pBuf->DataLength()); } void BLEManagerImpl::AddConnectionData(const char * remoteAddr) diff --git a/src/platform/webos/BLEManagerImpl.h b/src/platform/webos/BLEManagerImpl.h index 238952cda03732..c18ab9b9686419 100644 --- a/src/platform/webos/BLEManagerImpl.h +++ b/src/platform/webos/BLEManagerImpl.h @@ -110,16 +110,16 @@ class BLEManagerImpl final : public BLEManager, // ===== Members that implement virtual methods on BlePlatformDelegate. - bool SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, - const Ble::ChipBleUUID * charId) override; - bool CloseConnection(BLE_CONNECTION_OBJECT conId) override; + CHIP_ERROR SubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR UnsubscribeCharacteristic(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, + const Ble::ChipBleUUID * charId) override; + CHIP_ERROR CloseConnection(BLE_CONNECTION_OBJECT conId) override; uint16_t GetMTU(BLE_CONNECTION_OBJECT conId) const override; - bool SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; - bool SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, - System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendIndication(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; + CHIP_ERROR SendWriteRequest(BLE_CONNECTION_OBJECT conId, const Ble::ChipBleUUID * svcId, const Ble::ChipBleUUID * charId, + System::PacketBufferHandle pBuf) override; // ===== Members that implement virtual methods on BleApplicationDelegate. @@ -174,9 +174,9 @@ class BLEManagerImpl final : public BLEManager, bool isChipDevice; }; - bool SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId, const uint8_t * pBuf, - uint32_t pBufDataLen); - bool SubscribeCharacteristicToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId); + CHIP_ERROR SendWriteRequestToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId, const uint8_t * pBuf, + uint32_t pBufDataLen); + CHIP_ERROR SubscribeCharacteristicToWebOS(void * bleConnObj, const uint8_t * svcId, const uint8_t * charId); void InitConnectionData(void); void AddConnectionData(const char * remoteAddr); diff --git a/third_party/infineon/psoc6/BUILD.gn b/third_party/infineon/psoc6/BUILD.gn index 19fe610b1e6777..82fe0865cec5ec 100644 --- a/third_party/infineon/psoc6/BUILD.gn +++ b/third_party/infineon/psoc6/BUILD.gn @@ -22,12 +22,25 @@ declare_args() { assert(psoc6_target_project != "", "psoc6_target_project must be specified") +mtb_json_local = + mtb_core_json # Can't modify without copying into current scope + +if (is_debug) { + mtb_json_local.cflags += [ "-Og" ] + mtb_json_local.cxxflags += [ "-Og" ] + mtb_json_local.defines += [ "-DDEBUG" ] +} else { + mtb_json_local.cflags += [ "-Os" ] + mtb_json_local.cxxflags += [ "-Os" ] + mtb_json_local.defines += [ "-DNDEBUG" ] +} + # Add includes, cflags, asmflags, etc in config config("psoc6_sdk_config") { # Pull out includes from generated json # Treat these includes as system includes, so warnings in them are not fatal. _system_include_dirs = [] - foreach(include_dir, mtb_json.includes) { + foreach(include_dir, mtb_json_local.includes) { # Strip off leading -I part include_dir = string_replace(include_dir, "-I", "", 1) @@ -48,24 +61,24 @@ config("psoc6_sdk_config") { # Pull out defines from generated json defines = [] - foreach(def, mtb_json.defines) { + foreach(def, mtb_json_local.defines) { # Strip off leading -D part defines += [ string_replace(def, "-D", "", 1) ] } # Pull out static libs (.a files) from generated json libs = [] - foreach(lib, mtb_json.libs) { + foreach(lib, mtb_json_local.libs) { # Path is relative to SDK lib = "${psoc6_sdk_root}/${lib}" libs += [ lib ] } - cflags_c = mtb_json.cflags - cflags_cc = mtb_json.cxxflags - asmflags = mtb_json.asflags - ldflags = filter_exclude(mtb_json.ldflags, [ "-T*" ]) + cflags_c = mtb_json_local.cflags + cflags_cc = mtb_json_local.cxxflags + asmflags = mtb_json_local.asflags + ldflags = filter_exclude(mtb_json_local.ldflags, [ "-T*" ]) # TODO, once the issue is properly fixed we should no longer need this warning. cflags_c += [ "-Wno-error=array-parameter" ] @@ -73,7 +86,7 @@ config("psoc6_sdk_config") { # Pull out linker flags with paths (-T flags) and make paths absolute # OTA app provides it's own linker script if (!chip_enable_ota_requestor) { - linker_script_flags = filter_include(mtb_json.ldflags, [ "-T*" ]) + linker_script_flags = filter_include(mtb_json_local.ldflags, [ "-T*" ]) foreach(linker_script, linker_script_flags) { # Strip off leading -T part linker_script = string_replace(linker_script, "-T", "", 1) diff --git a/third_party/infineon/psoc6/psoc6_board.gni b/third_party/infineon/psoc6/psoc6_board.gni index a6cae75a7aecc3..340f312a67753d 100644 --- a/third_party/infineon/psoc6/psoc6_board.gni +++ b/third_party/infineon/psoc6/psoc6_board.gni @@ -13,7 +13,7 @@ # limitations under the License. declare_args() { - # P6 board used + # PSOC6 board used psoc6_board = "" } diff --git a/third_party/infineon/psoc6/psoc6_sdk.gni b/third_party/infineon/psoc6/psoc6_sdk.gni index 90366ddac471aa..bc315affc544be 100644 --- a/third_party/infineon/psoc6/psoc6_sdk.gni +++ b/third_party/infineon/psoc6/psoc6_sdk.gni @@ -21,15 +21,9 @@ import("psoc6_board.gni") # TODO: Don't hardcode config/toolchain # TODO: Convert to GN action? -if (is_debug) { - debug_str = "Debug" -} else { - debug_str = "Release" -} -mtb_json = - read_file("${psoc6_sdk_root}/build/${psoc6_board}/$debug_str/GCC_ARM.json", - "json") +mtb_core_json = + read_file("${psoc6_sdk_root}/build/${psoc6_board}/GCC_ARM.json", "json") # Defines an psoc6 SDK build target. # @@ -73,13 +67,26 @@ template("psoc6_sdk_sources") { } # This is ugly. See note in BUILD.gn for reasoning - mtb_json_local = mtb_json # Can't modify without copying into current scope + mtb_json_local = + mtb_core_json # Can't modify without copying into current scope + + # Update the flags and defines for either Release or Debug mode + if (is_debug) { + mtb_json_local.cflags += [ "-Og" ] + mtb_json_local.cxxflags += [ "-Og" ] + mtb_json_local.defines += [ "-DDEBUG" ] + } else { + mtb_json_local.cflags += [ "-Os" ] + mtb_json_local.cxxflags += [ "-Os" ] + mtb_json_local.defines += [ "-DNDEBUG" ] + } + if (chip_enable_ota_requestor == true) { mtb_json_local.c_source -= [ - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_01_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_02_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_03_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_04_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_01_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_02_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_03_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_04_cm0p_sleep.c", ] } diff --git a/third_party/infineon/psoc6/psoc6_sdk/Makefile b/third_party/infineon/psoc6/psoc6_sdk/Makefile deleted file mode 100755 index 45318c6686baa7..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/Makefile +++ /dev/null @@ -1,236 +0,0 @@ -################################################################################ -# \file Makefile -# \version 1.0 -# -# \brief -# Top-level application make file. -# -################################################################################ -# \copyright -# Copyright 2018-2021 Cypress Semiconductor Corporation -# SPDX-License-Identifier: Apache-2.0 -# -# 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. -################################################################################ - - -################################################################################ -# Basic Configuration -################################################################################ - -# Target board/hardware (BSP). -# To change the target, it is recommended to use the Library manager -# ('make modlibs' from command line), which will also update Eclipse IDE launch -# configurations. If TARGET is manually edited, ensure TARGET_.mtb with a -# valid URL exists in the application, run 'make getlibs' to fetch BSP contents -# and update or regenerate launch configurations for your IDE. -TARGET=$(error TARGET should be set on make command-line) - -APPNAME=mtb-chip-sdk - -# Name of toolchain to use. Options include: -# -# GCC_ARM -- GCC provided with ModusToolbox IDE -# ARM -- ARM Compiler (must be installed separately) -# IAR -- IAR Compiler (must be installed separately) -# -# See also: CY_COMPILER_PATH below -TOOLCHAIN=GCC_ARM - -# Default build configuration. Options include: -# -# Debug -- build with minimal optimizations, focus on debugging. -# Release -- build with full optimizations -# Custom -- build with custom configuration, set the optimization flag in CFLAGS -# -# If CONFIG is manually edited, ensure to update or regenerate launch configurations -# for your IDE. -CONFIG=Debug - -# If set to "true" or "1", display full command-lines when building. -VERBOSE= - -# The MQTT Client library does not support secure connections to the Mosquitto -# broker by default, because the server uses the SHA1 hashing algorithm which -# is considered a weak message digest and is therefore not enabled by default. -# However, if it is required to connect securely to the Mosquitto Broker set -# this macro to "true" or "1". -ENABLE_SECURE_MOSQUITTO_BROKER_SUPPORT=0 - -################################################################################ -# Advanced Configuration -################################################################################ - -# Enable optional code that is ordinarily disabled by default. -# -# Available components depend on the specific targeted hardware and firmware -# in use. In general, if you have -# -# COMPONENTS=foo bar -# -# ... then code in directories named COMPONENT_foo and COMPONENT_bar will be -# added to the build -# -COMPONENTS=FREERTOS LWIP MBEDTLS RTOS_AWARE WICED_BLE OTA_MCUBOOT_PSOC - -# CHIP: ModusToolbox 2.2 & 2.3 do not have a way to disable indirect library -# dependencies. This causes trouble for CHIP because we need to use its -# bundled version of LwIP. -# -# As a work-around, we enable "QUICK_MODE" for the "getlibs" target. This -# tells it to skip automatic generation of .mtb files for indirect -# dependencies. We list everything we need as a direct dependency. -# -# This isn't ideal (it means have to manually manage dependencies), but it's -# the best we can do for these versions of ModusToolbox. -ifeq ($(filter getlibs,$(MAKECMDGOALS)),getlibs) -QUICK_MODE=true -endif - -# Like COMPONENTS, but disable optional code that was enabled by default. -DISABLE_COMPONENTS= - -# By default the build system automatically looks in the Makefile's directory -# tree for source code and builds it. The SOURCES variable can be used to -# manually add source code to the build process from a location not searched -# by default, or otherwise not found by the build system. -SOURCES= - -# Like SOURCES, but for include directories. Value should be paths to -# directories (without a leading -I). -INCLUDES=./configs - -# Custom configuration of mbedtls library. -MBEDTLSFLAGS = MBEDTLS_USER_CONFIG_FILE= - -# Add additional defines to the build process (without a leading -D). -DEFINES=$(MBEDTLSFLAGS) CYBSP_WIFI_CAPABLE CY_RETARGET_IO_CONVERT_LF_TO_CRLF CY_RTOS_AWARE PSOC_062_2M - -# Enable support for Mosquitto Broker based on 'ENABLE_SECURE_MOSQUITTO_BROKER_ -# SUPPORT' variable. See the MQTT Client library's README for more information. -ifneq (,$(filter $(ENABLE_SECURE_MOSQUITTO_BROKER_SUPPORT),true 1)) -DEFINES+=CY_MQTT_ENABLE_SECURE_TEST_MOSQUITTO_SUPPORT -endif - -# CY8CPROTO-062-4343W board shares the same GPIO for the user button (USER BTN1) -# and the CYW4343W host wake up pin. Since this example uses the GPIO for -# interfacing with the user button, the SDIO interrupt to wake up the host is -# disabled by setting CY_WIFI_HOST_WAKE_SW_FORCE to '0'. -ifeq ($(TARGET), CY8CPROTO-062-4343W) -DEFINES+=CY_WIFI_HOST_WAKE_SW_FORCE=0 -endif - -# Select softfp or hardfp floating point. Default is softfp. -VFP_SELECT= - -COMMON_WARNING_FLAGS = -Wall -Werror=all \ - -Wno-error=unused-function \ - -Wno-error=unused-but-set-variable \ - -Wno-error=unused-variable \ - -Wno-error=deprecated-declarations \ - -Wextra \ - -Wno-unused-parameter -Wno-sign-compare \ - -Wno-shadow \ - -Wno-maybe-uninitialized \ - -Wno-incompatible-pointer-types \ - -Wno-type-limits \ - -Wno-conversion - -# Additional / custom C compiler flags. -# -# NOTE: Includes and defines should use the INCLUDES and DEFINES variable -# above. -CFLAGS=$(COMMON_WARNING_FLAGS) - -# Additional / custom C++ compiler flags. -# -# NOTE: Includes and defines should use the INCLUDES and DEFINES variable -# above. -CXXFLAGS= - -# Additional / custom assembler flags. -# -# NOTE: Includes and defines should use the INCLUDES and DEFINES variable -# above. -ASFLAGS= - -# Additional / custom linker flags. -LDFLAGS= - -# Additional / custom libraries to link in to the application. -LDLIBS= - -# Path to the linker script to use (if empty, use the default linker script). -LINKER_SCRIPT= - -# Custom pre-build commands to run. -PREBUILD= - -# Custom post-build commands to run. -POSTBUILD= - - -################################################################################ -# Paths -################################################################################ - -# Relative path to the project directory (default is the Makefile's directory). -# -# This controls where automatic source code discovery looks for code. -CY_APP_PATH= - -# Relative path to the shared repo location. -# -# All .mtb files have the format, ##. If the field -# begins with $$ASSET_REPO$$, then the repo is deposited in the path specified by -# the CY_GETLIBS_SHARED_PATH variable. The default location is one directory level -# above the current app directory. -# This is used with CY_GETLIBS_SHARED_NAME variable, which specifies the directory name. -CY_GETLIBS_SHARED_PATH=../ - -# Directory name of the shared repo location. -# -CY_GETLIBS_SHARED_NAME=mtb_shared - -# Absolute path to the compiler's "bin" directory. -# -# The default depends on the selected TOOLCHAIN (GCC_ARM uses the ModusToolbox -# IDE provided compiler by default). -CY_COMPILER_PATH= - - -# Locate ModusToolbox IDE helper tools folders in default installation -# locations for Windows, Linux, and macOS. -CY_WIN_HOME=$(subst \,/,$(USERPROFILE)) -CY_TOOLS_PATHS ?= $(wildcard \ - $(CY_WIN_HOME)/ModusToolbox/tools_* \ - $(HOME)/ModusToolbox/tools_* \ - /Applications/ModusToolbox/tools_*) - -# If you install ModusToolbox IDE in a custom location, add the path to its -# "tools_X.Y" folder (where X and Y are the version number of the tools -# folder). Make sure you use forward slashes. -CY_TOOLS_PATHS+= - -# Default to the newest installed tools folder, or the users override (if it's -# found). -CY_TOOLS_DIR=$(lastword $(sort $(wildcard $(CY_TOOLS_PATHS)))) - -ifeq ($(CY_TOOLS_DIR),) -$(error Unable to find any of the available CY_TOOLS_PATHS -- $(CY_TOOLS_PATHS). On Windows, use forward slashes.) -endif - -$(info Tools Directory: $(CY_TOOLS_DIR)) - -include $(CY_TOOLS_DIR)/make/start.mk - diff --git a/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Debug/GCC_ARM.json b/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/GCC_ARM.json similarity index 83% rename from third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Debug/GCC_ARM.json rename to third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/GCC_ARM.json index bdf407807c5a42..89ef0454830145 100644 --- a/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Debug/GCC_ARM.json +++ b/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/GCC_ARM.json @@ -17,7 +17,6 @@ "-c", "-mcpu=cortex-m4", "--specs=nano.specs", - "-Og", "-mfloat-abi=softfp", "-mfpu=fpv4-sp-d16", "-mthumb", @@ -31,7 +30,6 @@ "-c", "-mcpu=cortex-m4", "--specs=nano.specs", - "-Og", "-mfloat-abi=softfp", "-mfpu=fpv4-sp-d16", "-mthumb", @@ -67,50 +65,48 @@ "-ffat-lto-objects", "-g", "-Wall", + "-pipe", "-Wl,--gc-sections", - "-T./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld" + "-T./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/linker.ld" ], "includes": [ "-I./configs", "-I.", - "-I./arch", - "-I./configs", "-I./libs", + "-I./libs/abstraction-rtos/include/COMPONENT_FREERTOS", + "-I./libs/secure-sockets/include/COMPONENT_FREERTOS", + "-I./arch", + "-I./libs/freertos", + "-I./libs/freertos/Source", + "-I./libs/freertos/Source/include", + "-I./libs/freertos/Source/portable", + "-I./libs/freertos/Source/portable/COMPONENT_CM4", + "-I./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM", "-I./libs/TARGET_CY8CKIT-062S2-43012", "-I./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS", - "-I./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource", + "-I./configs/GeneratedSource", "-I./libs/TARGET_CY8CKIT-062S2-43012/bluetooth", "-I./libs/abstraction-rtos", "-I./libs/abstraction-rtos/include", - "-I./libs/abstraction-rtos/include/COMPONENT_FREERTOS", - "-I./libs/abstraction-rtos/include/Template", - "-I./libs/anycloud-ota", - "-I./libs/anycloud-ota/include", - "-I./libs/anycloud-ota/source", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/include", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/include/bootutil", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/src", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/flash_qspi", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/include", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/include/flash_map_backend", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/mem_config", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/mcuboot_header", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/mcuboot_header/mcuboot_config", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/sysflash", - "-I./libs/anycloud-ota/source/port_support", - "-I./libs/anycloud-ota/source/port_support/serial_flash", - "-I./libs/anycloud-ota/source/port_support/untar", - "-I./libs/bluetooth-freertos", - "-I./libs/bluetooth-freertos/platform", - "-I./libs/bluetooth-freertos/platform/common", - "-I./libs/bluetooth-freertos/platform/debug", - "-I./libs/bluetooth-freertos/platform/include", - "-I./libs/btstack", + "-I./ota/config/", + "-I./libs/ota-update/include", + "-I./libs/ota-update/source", + "-I./libs/ota-update/configs", + "-I./libs/ota-update/source/COMPONENT_MBEDTLS", + "-I./libs/ota-update/source/COMPONENT_OTA_BLUETOOTH/", + "-I./libs/ota-update/configs/COMPONENT_OTA_BLUETOOTH_SECURE", + "-I./libs/ota-update/configs/FreeRTOS/COMPONENT_CM4", + "-I./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT", + "-I./libs/ota-bootloader-abstraction/configs/COMPONENT_MCUBOOT/flash/COMPONENT_OTA_PSOC_062", + "-I./libs/ota-bootloader-abstraction/include/", + "-I./libs/ota-bootloader-abstraction/configs/COMPONENT_MCUBOOT/flash/", + "-I./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT/", + "-I./libs/ota-bootloader-abstraction/source/untar/", + "-I./libs/btstack-integration/", + "-I./libs/btstack-integration/COMPONENT_HCI-UART/common", + "-I./libs/btstack-integration/COMPONENT_HCI-UART/include", "-I./libs/btstack/wiced_include", + "-I./libs/cat1cm0p/COMPONENT_CAT1A", "-I./libs/clib-support", "-I./libs/clib-support/TOOLCHAIN_GCC_ARM", "-I./libs/connectivity-utilities", @@ -121,12 +117,6 @@ "-I./libs/connectivity-utilities/network", "-I./libs/core-lib", "-I./libs/core-lib/include", - "-I./libs/freertos", - "-I./libs/freertos/Source", - "-I./libs/freertos/Source/include", - "-I./libs/freertos/Source/portable", - "-I./libs/freertos/Source/portable/COMPONENT_CM4", - "-I./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM", "-I./libs/kv-store", "-I./libs/lwip", "-I./libs/lwip/src", @@ -137,6 +127,8 @@ "-I./libs/lwip/src/include/netif", "-I./libs/lwip/src/include/netif/ppp", "-I./libs/lwip/src/include/netif/ppp/polarssl", + "-I./libs/lwip-network-interface-integration/include", + "-I./libs/lwip-network-interface-integration/source", "-I./libs/mbedtls", "-I./libs/mbedtls/include", "-I./libs/mbedtls/include/mbedtls", @@ -151,19 +143,21 @@ "-I./libs/mtb-hal-cat1/include_pvt", "-I./libs/mtb-hal-cat1/source", "-I./libs/mtb-pdl-cat1", - "-I./libs/mtb-pdl-cat1/cmsis", - "-I./libs/mtb-pdl-cat1/cmsis/include", + "-I./libs/cmsis/Core/Include", + "-I./libs/cmsis/COMPONENT_CMSIS_NN/include", "-I./libs/mtb-pdl-cat1/devices", "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A", "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/include", "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/include/ip", "-I./libs/mtb-pdl-cat1/drivers", "-I./libs/mtb-pdl-cat1/drivers/include", + "-I./ota", + "-I./ota/bootutil", "-I./libs/retarget-io", "-I./libs/secure-sockets", "-I./libs/secure-sockets/include", - "-I./libs/secure-sockets/include/COMPONENT_FREERTOS", "-I./libs/secure-sockets/source", + "-I./libs/secure-sockets/source/COMPONENT_MBEDTLS/include", "-I./libs/serial-flash", "-I./libs/whd-bsp-integration", "-I./libs/wifi-connection-manager", @@ -185,15 +179,15 @@ "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/resource_imp", "-I./libs/wifi-host-driver/WiFi_Host_Driver/src", "-I./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/src/include", - "-I./libs/lwip-network-interface-integration", - "-I./libs/lwip-network-interface-integration/source", - "-I./libs/lwip-network-interface-integration/include", - "-I./ota/config" + "-I./libs/wifi-host-driver/WiFi_Host_Driver/src/include" ], "defines": [ + "-DCOMPONENT_FREERTOS", "-DMBEDTLS_USER_CONFIG_FILE=", "-DCYBSP_WIFI_CAPABLE", + "-DCYBSP_WIFI_SDIO_NEEDS_INIT", + "-DCORE_NAME_CM4_0", + "-DCY_USING_PREBUILT_CM0P_IMAGE", "-DCY_RETARGET_IO_CONVERT_LF_TO_CRLF", "-DCY_RTOS_AWARE", "-DPSOC_062_2M", @@ -207,10 +201,11 @@ "-DCOMPONENT_BSP_DESIGN_MODUS", "-DCOMPONENT_CAT1", "-DCOMPONENT_CAT1A", + "-DCOMPONENT_CMSIS_NN", "-DCOMPONENT_CM0P_SLEEP", "-DCOMPONENT_CM4", "-DCOMPONENT_CY8CKIT_062S2_43012", - "-DCOMPONENT_FREERTOS", + "-DCOMPONENT_43012", "-DCOMPONENT_HCI_UART", "-DCOMPONENT_LWIP", "-DCOMPONENT_MBEDTLS", @@ -220,7 +215,6 @@ "-DCOMPONENT_RTOS_AWARE", "-DCOMPONENT_SOFTFP", "-DCOMPONENT_WICED_BLE", - "-DDEBUG", "-DCY_SUPPORTS_DEVICE_VALIDATION", "-DCY_CRYPTO_HAL_DISABLE", "-DCOMPONENT_SECURE_SOCKETS", @@ -228,24 +222,6 @@ "-DOPTIGA_LIB_EXTERNAL=" ], "c_source": [ - "./libs/abstraction-rtos/source/cy_worker_thread.c", - "./libs/anycloud-ota/source/port_support/serial_flash/ota_serial_flash.c", - "./libs/bluetooth-freertos/platform/common/cybt_hci_rx_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_hci_tx_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_host_stack_platform_interface.c", - "./libs/bluetooth-freertos/platform/common/cybt_patchram_download.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_main.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_trace.c", - "./libs/bluetooth-freertos/platform/common/cybt_prm.c", - "./libs/bluetooth-freertos/platform/debug/cybt_debug_uart.c", - "./libs/bluetooth-freertos/platform/freertos/cybt_platform_freertos.c", - "./libs/clib-support/cy_time.c", - "./libs/connectivity-utilities/JSON_parser/cy_json_parser.c", - "./libs/connectivity-utilities/cy_log/cy_log.c", - "./libs/connectivity-utilities/cy_string/cy_string_utils.c", - "./libs/connectivity-utilities/linked_list/cy_linked_list.c", - "./libs/connectivity-utilities/network/cy_nw_helper_common.c", "./libs/freertos/Source/croutine.c", "./libs/freertos/Source/event_groups.c", "./libs/freertos/Source/list.c", @@ -258,6 +234,46 @@ "./libs/freertos/Source/stream_buffer.c", "./libs/freertos/Source/tasks.c", "./libs/freertos/Source/timers.c", + "./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/port.c", + "./libs/clib-support/COMPONENT_FREERTOS/cy_mutex_pool.c", + "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_freertos_common.c", + "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_freertos_helpers.c", + "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_rtos_freertos.c", + "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_rtos_dsram.c", + "./arch/sys_arch.c", + "./libs/abstraction-rtos/source/cy_worker_thread.c", + "./libs/ota-update/source/cy_ota_agent.c", + "./libs/ota-update/source/cy_ota_ble.c", + "./libs/ota-update/source/cy_ota_http.c", + "./libs/ota-update/source/cy_ota_mqtt.c", + "./libs/ota-update/source/COMPONENT_MBEDTLS/cy_ota_ble_secure.c", + "./libs/ota-update/source/COMPONENT_OTA_BLUETOOTH/ota_ecc_pp.c", + "./libs/ota-update/source/COMPONENT_OTA_BLUETOOTH/ota_multprecision.c", + "./libs/ota-update/configs/COMPONENT_OTA_BLUETOOTH_SECURE/ecdsa256_pub.c", + "./libs/ota-bootloader-abstraction/configs/COMPONENT_MCUBOOT/flash/cy_ota_flash.c", + "./libs/ota-bootloader-abstraction/configs/COMPONENT_MCUBOOT/flash/COMPONENT_OTA_PSOC_062/flash_qspi.c", + "./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT/cy_flash_map.c", + "./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT/cy_ota_flash_weak.c", + "./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT/cy_ota_storage_api.c", + "./libs/ota-bootloader-abstraction/source/COMPONENT_MCUBOOT/cy_ota_untar_wrapper.c", + "./libs/ota-bootloader-abstraction/source/untar/cy_ota_untar.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_hci_rx_task.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_hci_tx_task.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_host_stack_platform_interface.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_patchram_download.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_platform_main.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_platform_task.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_platform_trace.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_prm.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/common/cybt_serialize.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/debug/cybt_debug_uart.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/freertos/cybt_platform_freertos.c", + "./libs/clib-support/cy_time.c", + "./libs/connectivity-utilities/JSON_parser/cy_json_parser.c", + "./libs/connectivity-utilities/cy_log/cy_log.c", + "./libs/connectivity-utilities/cy_string/cy_string_utils.c", + "./libs/connectivity-utilities/linked_list/cy_linked_list.c", + "./libs/connectivity-utilities/network/cy_nw_helper_common.c", "./libs/kv-store/mtb_kvstore.c", "./libs/lwip/src/api/api_lib.c", "./libs/lwip/src/api/api_msg.c", @@ -309,6 +325,9 @@ "./libs/lwip/src/netif/bridgeif_fdb.c", "./libs/lwip/src/netif/ethernet.c", "./libs/lwip/src/netif/zepif.c", + "./libs/lwip-network-interface-integration/source/cy_ethernetif.c", + "./libs/lwip-network-interface-integration/source/cy_lwip_dhcp_server.c", + "./libs/lwip-network-interface-integration/source/cy_network_mw_core.c", "./libs/mbedtls/library/aes.c", "./libs/mbedtls/library/aesni.c", "./libs/mbedtls/library/arc4.c", @@ -408,13 +427,12 @@ "./libs/mtb-hal-cat1/source/cyhal_dma_dmac.c", "./libs/mtb-hal-cat1/source/cyhal_dma_dw.c", "./libs/mtb-hal-cat1/source/cyhal_ezi2c.c", - "./libs/mtb-hal-cat1/source/cyhal_flash.c", "./libs/mtb-hal-cat1/source/cyhal_gpio.c", "./libs/mtb-hal-cat1/source/cyhal_hwmgr.c", + "./libs/mtb-hal-cat1/source/cyhal_irq_impl.c", "./libs/mtb-hal-cat1/source/cyhal_i2c.c", "./libs/mtb-hal-cat1/source/cyhal_i2s.c", "./libs/mtb-hal-cat1/source/cyhal_interconnect.c", - "./libs/mtb-hal-cat1/source/cyhal_irq_psoc.c", "./libs/mtb-hal-cat1/source/cyhal_keyscan.c", "./libs/mtb-hal-cat1/source/cyhal_lptimer.c", "./libs/mtb-hal-cat1/source/cyhal_opamp.c", @@ -436,13 +454,13 @@ "./libs/mtb-hal-cat1/source/cyhal_udb_sdio.c", "./libs/mtb-hal-cat1/source/cyhal_usb_dev.c", "./libs/mtb-hal-cat1/source/cyhal_utils.c", - "./libs/mtb-hal-cat1/source/cyhal_utils_psoc.c", + "./libs/mtb-hal-cat1/source/cyhal_utils_impl.c", "./libs/mtb-hal-cat1/source/cyhal_wdt.c", "./libs/mtb-pdl-cat1/drivers/source/cy_adcmic.c", "./libs/mtb-pdl-cat1/drivers/source/cy_ble_clk.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_btss.c", "./libs/mtb-pdl-cat1/drivers/source/cy_canfd.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto.c", + "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_trng.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_aes_v1.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_aes_v2.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_cmac_v1.c", @@ -466,11 +484,8 @@ "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_rsa.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_sha_v1.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_sha_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_trng_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_trng_v2.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_vu.c", "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_server.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_cryptolite.c", "./libs/mtb-pdl-cat1/drivers/source/cy_csd.c", "./libs/mtb-pdl-cat1/drivers/source/cy_ctb.c", "./libs/mtb-pdl-cat1/drivers/source/cy_ctdac.c", @@ -490,8 +505,6 @@ "./libs/mtb-pdl-cat1/drivers/source/cy_lpcomp.c", "./libs/mtb-pdl-cat1/drivers/source/cy_lvd.c", "./libs/mtb-pdl-cat1/drivers/source/cy_mcwdt.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pd_pdcm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pd_ppu.c", "./libs/mtb-pdl-cat1/drivers/source/cy_pdm_pcm.c", "./libs/mtb-pdl-cat1/drivers/source/cy_pdm_pcm_v2.c", "./libs/mtb-pdl-cat1/drivers/source/cy_pra.c", @@ -562,33 +575,21 @@ "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi.c", "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi_api.c", "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi_p2p.c", - "./libs/lwip-network-interface-integration/source/cy_network_mw_core.c", - "./libs/lwip-network-interface-integration/source/cy_lwip_dhcp_server.c", + "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_proto.c", "./libs/clib-support/TOOLCHAIN_GCC_ARM/cy_clib_support_newlib.c", "./libs/TARGET_CY8CKIT-062S2-43012/bluetooth/cybsp_bt_config.c", "./libs/TARGET_CY8CKIT-062S2-43012/cybsp.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_clocks.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_connectivity_bt.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_qspi_memslot.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c", + "./configs/GeneratedSource/cycfg.c", + "./configs/GeneratedSource/cycfg_clocks.c", + "./configs/GeneratedSource/cycfg_connectivity_bt.c", + "./configs/GeneratedSource/cycfg_peripherals.c", + "./configs/GeneratedSource/cycfg_pins.c", + "./configs/GeneratedSource/cycfg_qspi_memslot.c", + "./configs/GeneratedSource/cycfg_routing.c", + "./configs/GeneratedSource/cycfg_system.c", "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/system_psoc6_cm4.c", - "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_freertos_helpers.c", - "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_rtos_freertos.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/src/bootutil_misc.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/cy_flash_map.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/cy_flash_psoc6.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/flash_qspi/flash_qspi.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/mem_config/mem_config_sfdp.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/ota_flash_map.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/ota_flash_xip_map.c", - "./libs/bluetooth-freertos/firmware/COMPONENT_43012/COMPONENT_MURATA-1LV/COMPONENT_HCI-UART/w_bt_firmware_controller.c", - "./libs/clib-support/COMPONENT_FREERTOS/cy_mutex_pool.c", + "./libs/btstack-integration/COMPONENT_HCI-UART/firmware/COMPONENT_43012/COMPONENT_MURATA-1LV/w_bt_firmware_controller.c", "./libs/connectivity-utilities/network/COMPONENT_LWIP/cy_nw_helper.c", - "./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/port.c", "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble.c", "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble_usb.c", "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_116_bga_ble.c", @@ -613,10 +614,10 @@ "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_03.c", "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_04.c", "./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/source/cy_device.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_01_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_02_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_03_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_04_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_01_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_02_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_03_cm0p_sleep.c", + "./libs/cat1cm0p/COMPONENT_CAT1A/COMPONENT_CM0P_SLEEP/psoc6_04_cm0p_sleep.c", "./libs/secure-sockets/source/COMPONENT_LWIP/cy_secure_sockets.c", "./libs/secure-sockets/source/COMPONENT_MBEDTLS/cy_tls.c", "./libs/secure-sockets/source/COMPONENT_MBEDTLS/iot_crypto.c", @@ -627,12 +628,11 @@ "./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm/COMPONENT_43012/43012C0-mfgtest_clm_blob.c", "./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm/COMPONENT_43012/43012C0_clm_blob.c", "./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012/43012C0-mfgtest_bin.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012/43012C0_bin.c", - "./arch/sys_arch.c" + "./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012/43012C0_bin.c" ], "cxx_source": [], "asm_source": [ - "./libs/mtb-pdl-cat1/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_gcc.S", + "./libs/mtb-pdl-cat1/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_ext.S", "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/startup_psoc6_02_cm4.S" ], "libs": [ diff --git a/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Release/GCC_ARM.json b/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Release/GCC_ARM.json deleted file mode 100644 index 917160ac8f83e7..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/build/CY8CKIT-062S2-43012/Release/GCC_ARM.json +++ /dev/null @@ -1,642 +0,0 @@ -{ - "cflags": [ - "-Wall", - "-Werror=all", - "-Wno-error=unused-function", - "-Wno-error=unused-but-set-variable", - "-Wno-error=unused-variable", - "-Wno-error=deprecated-declarations", - "-Wextra", - "-Wno-unused-parameter", - "-Wno-sign-compare", - "-Wno-shadow", - "-Wno-maybe-uninitialized", - "-Wno-incompatible-pointer-types", - "-Wno-type-limits", - "-Wno-conversion", - "-c", - "-mcpu=cortex-m4", - "--specs=nano.specs", - "-Os", - "-mfloat-abi=softfp", - "-mfpu=fpv4-sp-d16", - "-mthumb", - "-ffunction-sections", - "-fdata-sections", - "-ffat-lto-objects", - "-g", - "-Wall" - ], - "cxxflags": [ - "-c", - "-mcpu=cortex-m4", - "--specs=nano.specs", - "-Os", - "-mfloat-abi=softfp", - "-mfpu=fpv4-sp-d16", - "-mthumb", - "-ffunction-sections", - "-fdata-sections", - "-ffat-lto-objects", - "-g", - "-Wall", - "-fno-rtti", - "-fno-exceptions" - ], - "asflags": [ - "-c", - "-mcpu=cortex-m4", - "--specs=nano.specs", - "-mfloat-abi=softfp", - "-mfpu=fpv4-sp-d16", - "-mthumb", - "-ffunction-sections", - "-fdata-sections", - "-ffat-lto-objects", - "-g", - "-Wall" - ], - "ldflags": [ - "-mcpu=cortex-m4", - "--specs=nano.specs", - "-mfloat-abi=softfp", - "-mfpu=fpv4-sp-d16", - "-mthumb", - "-ffunction-sections", - "-fdata-sections", - "-ffat-lto-objects", - "-g", - "-Wall", - "-Wl,--gc-sections", - "-T./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld" - ], - "includes": [ - "-I./configs", - "-I.", - "-I./arch", - "-I./configs", - "-I./libs", - "-I./libs/TARGET_CY8CKIT-062S2-43012", - "-I./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS", - "-I./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource", - "-I./libs/TARGET_CY8CKIT-062S2-43012/bluetooth", - "-I./libs/abstraction-rtos", - "-I./libs/abstraction-rtos/include", - "-I./libs/abstraction-rtos/include/COMPONENT_FREERTOS", - "-I./libs/abstraction-rtos/include/Template", - "-I./libs/anycloud-ota", - "-I./libs/anycloud-ota/include", - "-I./libs/anycloud-ota/source", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/include", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/include/bootutil", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/src", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/flash_qspi", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/include", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/include/flash_map_backend", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/mem_config", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/mcuboot_header", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/mcuboot_header/mcuboot_config", - "-I./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/sysflash", - "-I./libs/anycloud-ota/source/port_support", - "-I./libs/anycloud-ota/source/port_support/serial_flash", - "-I./libs/anycloud-ota/source/port_support/untar", - "-I./libs/bluetooth-freertos", - "-I./libs/bluetooth-freertos/platform", - "-I./libs/bluetooth-freertos/platform/common", - "-I./libs/bluetooth-freertos/platform/debug", - "-I./libs/bluetooth-freertos/platform/include", - "-I./libs/btstack", - "-I./libs/btstack/wiced_include", - "-I./libs/clib-support", - "-I./libs/clib-support/TOOLCHAIN_GCC_ARM", - "-I./libs/connectivity-utilities", - "-I./libs/connectivity-utilities/JSON_parser", - "-I./libs/connectivity-utilities/cy_log", - "-I./libs/connectivity-utilities/cy_string", - "-I./libs/connectivity-utilities/linked_list", - "-I./libs/connectivity-utilities/network", - "-I./libs/core-lib", - "-I./libs/core-lib/include", - "-I./libs/freertos", - "-I./libs/freertos/Source", - "-I./libs/freertos/Source/include", - "-I./libs/freertos/Source/portable", - "-I./libs/freertos/Source/portable/COMPONENT_CM4", - "-I./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM", - "-I./libs/kv-store", - "-I./libs/lwip", - "-I./libs/lwip/src", - "-I./libs/lwip/src/include", - "-I./libs/lwip/src/include/lwip/apps", - "-I./libs/lwip/src/include/lwip/priv", - "-I./libs/lwip/src/include/lwip/prot", - "-I./libs/lwip/src/include/netif", - "-I./libs/lwip/src/include/netif/ppp", - "-I./libs/lwip/src/include/netif/ppp/polarssl", - "-I./libs/mbedtls", - "-I./libs/mbedtls/include", - "-I./libs/mbedtls/include/mbedtls", - "-I./libs/mbedtls/include/psa", - "-I./libs/mbedtls/library", - "-I./libs/mtb-hal-cat1", - "-I./libs/mtb-hal-cat1/COMPONENT_CAT1A", - "-I./libs/mtb-hal-cat1/COMPONENT_CAT1A/include", - "-I./libs/mtb-hal-cat1/COMPONENT_CAT1A/include/pin_packages", - "-I./libs/mtb-hal-cat1/COMPONENT_CAT1A/include/triggers", - "-I./libs/mtb-hal-cat1/include", - "-I./libs/mtb-hal-cat1/include_pvt", - "-I./libs/mtb-hal-cat1/source", - "-I./libs/mtb-pdl-cat1", - "-I./libs/mtb-pdl-cat1/cmsis", - "-I./libs/mtb-pdl-cat1/cmsis/include", - "-I./libs/mtb-pdl-cat1/devices", - "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A", - "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/include", - "-I./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/include/ip", - "-I./libs/mtb-pdl-cat1/drivers", - "-I./libs/mtb-pdl-cat1/drivers/include", - "-I./libs/retarget-io", - "-I./libs/secure-sockets", - "-I./libs/secure-sockets/include", - "-I./libs/secure-sockets/include/COMPONENT_FREERTOS", - "-I./libs/secure-sockets/source", - "-I./libs/serial-flash", - "-I./libs/whd-bsp-integration", - "-I./libs/wifi-connection-manager", - "-I./libs/wifi-connection-manager/include", - "-I./libs/wifi-connection-manager/source", - "-I./libs/wifi-connection-manager/source/COMPONENT_43012", - "-I./libs/wifi-connection-manager/source/COMPONENT_MBEDTLS", - "-I./libs/wifi-host-driver", - "-I./libs/wifi-host-driver/WiFi_Host_Driver", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/inc", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm/COMPONENT_43012", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/nvram", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/nvram/COMPONENT_43012", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/nvram/COMPONENT_43012/COMPONENT_MURATA-1LV", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/resources/resource_imp", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/src", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols", - "-I./libs/wifi-host-driver/WiFi_Host_Driver/src/include", - "-I./libs/lwip-network-interface-integration", - "-I./libs/lwip-network-interface-integration/source", - "-I./libs/lwip-network-interface-integration/include", - "-I./ota/config" - ], - "defines": [ - "-DMBEDTLS_USER_CONFIG_FILE=", - "-DCYBSP_WIFI_CAPABLE", - "-DCY_RETARGET_IO_CONVERT_LF_TO_CRLF", - "-DCY_RTOS_AWARE", - "-DPSOC_062_2M", - "-DCY_USING_HAL", - "-DCY_APPNAME_mtb_chip_sdk", - "-DCY8C624ABZI_S2D44", - "-DCY_TARGET_DEVICE=CY8C624ABZI_S2D44", - "-DTARGET_CY8CKIT_062S2_43012", - "-DCY_TARGET_BOARD=CY8CKIT_062S2_43012", - "-DCOMPONENT_43012", - "-DCOMPONENT_BSP_DESIGN_MODUS", - "-DCOMPONENT_CAT1", - "-DCOMPONENT_CAT1A", - "-DCOMPONENT_CM0P_SLEEP", - "-DCOMPONENT_CM4", - "-DCOMPONENT_CY8CKIT_062S2_43012", - "-DCOMPONENT_FREERTOS", - "-DCOMPONENT_HCI_UART", - "-DCOMPONENT_LWIP", - "-DCOMPONENT_MBEDTLS", - "-DCOMPONENT_MURATA_1LV", - "-DCOMPONENT_OTA_MCUBOOT_PSOC", - "-DCOMPONENT_PSOC6HAL", - "-DCOMPONENT_RTOS_AWARE", - "-DCOMPONENT_SOFTFP", - "-DCOMPONENT_WICED_BLE", - "-DNDEBUG", - "-DCY_SUPPORTS_DEVICE_VALIDATION", - "-DCY_CRYPTO_HAL_DISABLE", - "-DCOMPONENT_SECURE_SOCKETS", - "-DCOMPONENT_PSOC6_FREERTOS", - "-DOPTIGA_LIB_EXTERNAL=" - ], - "c_source": [ - "./libs/abstraction-rtos/source/cy_worker_thread.c", - "./libs/anycloud-ota/source/port_support/serial_flash/ota_serial_flash.c", - "./libs/bluetooth-freertos/platform/common/cybt_hci_rx_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_hci_tx_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_host_stack_platform_interface.c", - "./libs/bluetooth-freertos/platform/common/cybt_patchram_download.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_main.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_task.c", - "./libs/bluetooth-freertos/platform/common/cybt_platform_trace.c", - "./libs/bluetooth-freertos/platform/common/cybt_prm.c", - "./libs/bluetooth-freertos/platform/debug/cybt_debug_uart.c", - "./libs/bluetooth-freertos/platform/freertos/cybt_platform_freertos.c", - "./libs/clib-support/cy_time.c", - "./libs/connectivity-utilities/JSON_parser/cy_json_parser.c", - "./libs/connectivity-utilities/cy_log/cy_log.c", - "./libs/connectivity-utilities/cy_string/cy_string_utils.c", - "./libs/connectivity-utilities/linked_list/cy_linked_list.c", - "./libs/connectivity-utilities/network/cy_nw_helper_common.c", - "./libs/freertos/Source/croutine.c", - "./libs/freertos/Source/event_groups.c", - "./libs/freertos/Source/list.c", - "./libs/freertos/Source/portable/MemMang/heap_1.c", - "./libs/freertos/Source/portable/MemMang/heap_2.c", - "./libs/freertos/Source/portable/MemMang/heap_3.c", - "./libs/freertos/Source/portable/MemMang/heap_4.c", - "./libs/freertos/Source/portable/MemMang/heap_5.c", - "./libs/freertos/Source/queue.c", - "./libs/freertos/Source/stream_buffer.c", - "./libs/freertos/Source/tasks.c", - "./libs/freertos/Source/timers.c", - "./libs/kv-store/mtb_kvstore.c", - "./libs/lwip/src/api/api_lib.c", - "./libs/lwip/src/api/api_msg.c", - "./libs/lwip/src/api/err.c", - "./libs/lwip/src/api/if_api.c", - "./libs/lwip/src/api/netbuf.c", - "./libs/lwip/src/api/netdb.c", - "./libs/lwip/src/api/netifapi.c", - "./libs/lwip/src/api/sockets.c", - "./libs/lwip/src/api/tcpip.c", - "./libs/lwip/src/core/altcp.c", - "./libs/lwip/src/core/altcp_alloc.c", - "./libs/lwip/src/core/altcp_tcp.c", - "./libs/lwip/src/core/def.c", - "./libs/lwip/src/core/dns.c", - "./libs/lwip/src/core/inet_chksum.c", - "./libs/lwip/src/core/init.c", - "./libs/lwip/src/core/ip.c", - "./libs/lwip/src/core/ipv4/autoip.c", - "./libs/lwip/src/core/ipv4/dhcp.c", - "./libs/lwip/src/core/ipv4/etharp.c", - "./libs/lwip/src/core/ipv4/icmp.c", - "./libs/lwip/src/core/ipv4/igmp.c", - "./libs/lwip/src/core/ipv4/ip4.c", - "./libs/lwip/src/core/ipv4/ip4_addr.c", - "./libs/lwip/src/core/ipv4/ip4_frag.c", - "./libs/lwip/src/core/ipv6/dhcp6.c", - "./libs/lwip/src/core/ipv6/ethip6.c", - "./libs/lwip/src/core/ipv6/icmp6.c", - "./libs/lwip/src/core/ipv6/inet6.c", - "./libs/lwip/src/core/ipv6/ip6.c", - "./libs/lwip/src/core/ipv6/ip6_addr.c", - "./libs/lwip/src/core/ipv6/ip6_frag.c", - "./libs/lwip/src/core/ipv6/mld6.c", - "./libs/lwip/src/core/ipv6/nd6.c", - "./libs/lwip/src/core/mem.c", - "./libs/lwip/src/core/memp.c", - "./libs/lwip/src/core/netif.c", - "./libs/lwip/src/core/pbuf.c", - "./libs/lwip/src/core/raw.c", - "./libs/lwip/src/core/stats.c", - "./libs/lwip/src/core/sys.c", - "./libs/lwip/src/core/tcp.c", - "./libs/lwip/src/core/tcp_in.c", - "./libs/lwip/src/core/tcp_out.c", - "./libs/lwip/src/core/timeouts.c", - "./libs/lwip/src/core/udp.c", - "./libs/lwip/src/netif/bridgeif.c", - "./libs/lwip/src/netif/bridgeif_fdb.c", - "./libs/lwip/src/netif/ethernet.c", - "./libs/lwip/src/netif/zepif.c", - "./libs/mbedtls/library/aes.c", - "./libs/mbedtls/library/aesni.c", - "./libs/mbedtls/library/arc4.c", - "./libs/mbedtls/library/aria.c", - "./libs/mbedtls/library/asn1parse.c", - "./libs/mbedtls/library/asn1write.c", - "./libs/mbedtls/library/base64.c", - "./libs/mbedtls/library/bignum.c", - "./libs/mbedtls/library/blowfish.c", - "./libs/mbedtls/library/camellia.c", - "./libs/mbedtls/library/ccm.c", - "./libs/mbedtls/library/certs.c", - "./libs/mbedtls/library/chacha20.c", - "./libs/mbedtls/library/chachapoly.c", - "./libs/mbedtls/library/cipher.c", - "./libs/mbedtls/library/cipher_wrap.c", - "./libs/mbedtls/library/cmac.c", - "./libs/mbedtls/library/ctr_drbg.c", - "./libs/mbedtls/library/debug.c", - "./libs/mbedtls/library/des.c", - "./libs/mbedtls/library/dhm.c", - "./libs/mbedtls/library/ecdh.c", - "./libs/mbedtls/library/ecdsa.c", - "./libs/mbedtls/library/ecjpake.c", - "./libs/mbedtls/library/ecp.c", - "./libs/mbedtls/library/ecp_curves.c", - "./libs/mbedtls/library/entropy.c", - "./libs/mbedtls/library/entropy_poll.c", - "./libs/mbedtls/library/error.c", - "./libs/mbedtls/library/gcm.c", - "./libs/mbedtls/library/havege.c", - "./libs/mbedtls/library/hkdf.c", - "./libs/mbedtls/library/hmac_drbg.c", - "./libs/mbedtls/library/md.c", - "./libs/mbedtls/library/md2.c", - "./libs/mbedtls/library/md4.c", - "./libs/mbedtls/library/md5.c", - "./libs/mbedtls/library/memory_buffer_alloc.c", - "./libs/mbedtls/library/nist_kw.c", - "./libs/mbedtls/library/oid.c", - "./libs/mbedtls/library/padlock.c", - "./libs/mbedtls/library/pem.c", - "./libs/mbedtls/library/pk.c", - "./libs/mbedtls/library/pk_wrap.c", - "./libs/mbedtls/library/pkcs11.c", - "./libs/mbedtls/library/pkcs12.c", - "./libs/mbedtls/library/pkcs5.c", - "./libs/mbedtls/library/pkparse.c", - "./libs/mbedtls/library/pkwrite.c", - "./libs/mbedtls/library/platform.c", - "./libs/mbedtls/library/platform_util.c", - "./libs/mbedtls/library/poly1305.c", - "./libs/mbedtls/library/psa_crypto.c", - "./libs/mbedtls/library/psa_crypto_se.c", - "./libs/mbedtls/library/psa_crypto_slot_management.c", - "./libs/mbedtls/library/psa_crypto_storage.c", - "./libs/mbedtls/library/psa_its_file.c", - "./libs/mbedtls/library/ripemd160.c", - "./libs/mbedtls/library/rsa.c", - "./libs/mbedtls/library/rsa_internal.c", - "./libs/mbedtls/library/sha1.c", - "./libs/mbedtls/library/sha256.c", - "./libs/mbedtls/library/sha512.c", - "./libs/mbedtls/library/ssl_cache.c", - "./libs/mbedtls/library/ssl_ciphersuites.c", - "./libs/mbedtls/library/ssl_cli.c", - "./libs/mbedtls/library/ssl_cookie.c", - "./libs/mbedtls/library/ssl_msg.c", - "./libs/mbedtls/library/ssl_srv.c", - "./libs/mbedtls/library/ssl_ticket.c", - "./libs/mbedtls/library/ssl_tls.c", - "./libs/mbedtls/library/ssl_tls13_keys.c", - "./libs/mbedtls/library/threading.c", - "./libs/mbedtls/library/timing.c", - "./libs/mbedtls/library/version.c", - "./libs/mbedtls/library/version_features.c", - "./libs/mbedtls/library/x509.c", - "./libs/mbedtls/library/x509_create.c", - "./libs/mbedtls/library/x509_crl.c", - "./libs/mbedtls/library/x509_crt.c", - "./libs/mbedtls/library/x509_csr.c", - "./libs/mbedtls/library/x509write_crt.c", - "./libs/mbedtls/library/x509write_csr.c", - "./libs/mbedtls/library/xtea.c", - "./libs/mtb-hal-cat1/source/cyhal_adc_mic.c", - "./libs/mtb-hal-cat1/source/cyhal_adc_sar.c", - "./libs/mtb-hal-cat1/source/cyhal_analog_common.c", - "./libs/mtb-hal-cat1/source/cyhal_audio_common.c", - "./libs/mtb-hal-cat1/source/cyhal_clock.c", - "./libs/mtb-hal-cat1/source/cyhal_comp.c", - "./libs/mtb-hal-cat1/source/cyhal_comp_ctb.c", - "./libs/mtb-hal-cat1/source/cyhal_comp_lp.c", - "./libs/mtb-hal-cat1/source/cyhal_crc.c", - "./libs/mtb-hal-cat1/source/cyhal_crypto_common.c", - "./libs/mtb-hal-cat1/source/cyhal_dac.c", - "./libs/mtb-hal-cat1/source/cyhal_dma.c", - "./libs/mtb-hal-cat1/source/cyhal_dma_dmac.c", - "./libs/mtb-hal-cat1/source/cyhal_dma_dw.c", - "./libs/mtb-hal-cat1/source/cyhal_ezi2c.c", - "./libs/mtb-hal-cat1/source/cyhal_flash.c", - "./libs/mtb-hal-cat1/source/cyhal_gpio.c", - "./libs/mtb-hal-cat1/source/cyhal_hwmgr.c", - "./libs/mtb-hal-cat1/source/cyhal_i2c.c", - "./libs/mtb-hal-cat1/source/cyhal_i2s.c", - "./libs/mtb-hal-cat1/source/cyhal_interconnect.c", - "./libs/mtb-hal-cat1/source/cyhal_irq_psoc.c", - "./libs/mtb-hal-cat1/source/cyhal_keyscan.c", - "./libs/mtb-hal-cat1/source/cyhal_lptimer.c", - "./libs/mtb-hal-cat1/source/cyhal_opamp.c", - "./libs/mtb-hal-cat1/source/cyhal_pdmpcm.c", - "./libs/mtb-hal-cat1/source/cyhal_pwm.c", - "./libs/mtb-hal-cat1/source/cyhal_qspi.c", - "./libs/mtb-hal-cat1/source/cyhal_quaddec.c", - "./libs/mtb-hal-cat1/source/cyhal_rtc.c", - "./libs/mtb-hal-cat1/source/cyhal_scb_common.c", - "./libs/mtb-hal-cat1/source/cyhal_sdhc.c", - "./libs/mtb-hal-cat1/source/cyhal_spi.c", - "./libs/mtb-hal-cat1/source/cyhal_syspm.c", - "./libs/mtb-hal-cat1/source/cyhal_system.c", - "./libs/mtb-hal-cat1/source/cyhal_tcpwm_common.c", - "./libs/mtb-hal-cat1/source/cyhal_tdm.c", - "./libs/mtb-hal-cat1/source/cyhal_timer.c", - "./libs/mtb-hal-cat1/source/cyhal_trng.c", - "./libs/mtb-hal-cat1/source/cyhal_uart.c", - "./libs/mtb-hal-cat1/source/cyhal_udb_sdio.c", - "./libs/mtb-hal-cat1/source/cyhal_usb_dev.c", - "./libs/mtb-hal-cat1/source/cyhal_utils.c", - "./libs/mtb-hal-cat1/source/cyhal_utils_psoc.c", - "./libs/mtb-hal-cat1/source/cyhal_wdt.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_adcmic.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ble_clk.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_btss.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_canfd.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_aes_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_aes_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_cmac_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_cmac_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_crc_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_crc_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_des_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_des_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_ecc_domain_params.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_ecc_ecdsa.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_ecc_key_gen.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_ecc_nist_p.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_hmac_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_hmac_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_hw.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_hw_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_mem_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_mem_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_prng_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_prng_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_rsa.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_sha_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_sha_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_trng_v1.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_trng_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_core_vu.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_crypto_server.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_cryptolite.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_csd.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ctb.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ctdac.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_dma.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_dmac.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_efuse.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_efuse_v3.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_flash.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_gpio.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_i2s.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ipc_bt.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ipc_drv.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ipc_pipe.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_ipc_sema.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_keyscan.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_lin.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_lpcomp.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_lvd.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_mcwdt.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pd_pdcm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pd_ppu.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pdm_pcm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pdm_pcm_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pra.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_pra_cfg.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_profile.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_prot.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_rtc.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sar.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_scb_common.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_scb_ezi2c.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_scb_i2c.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_scb_spi.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_scb_uart.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sd_host.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_seglcd.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_smartio.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_smif.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_smif_memslot.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_smif_sfdp.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sysanalog.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sysclk.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sysclk_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sysint.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_sysint_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_syslib.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_syspm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_syspm_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_systick.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_systick_v2.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_tcpwm_counter.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_tcpwm_pwm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_tcpwm_quaddec.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_tcpwm_shiftreg.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_tdm.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_trigmux.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_usbfs_dev_drv.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_usbfs_dev_drv_io.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_usbfs_dev_drv_io_dma.c", - "./libs/mtb-pdl-cat1/drivers/source/cy_wdt.c", - "./libs/mtb-pdl-cat1/drivers/source/ppu_v1.c", - "./libs/retarget-io/cy_retarget_io.c", - "./libs/secure-sockets/source/cy_pkcs_psa_logging.c", - "./libs/secure-sockets/source/cy_tls_weak.c", - "./libs/serial-flash/cy_serial_flash_prog.c", - "./libs/serial-flash/cy_serial_flash_qspi.c", - "./libs/whd-bsp-integration/cybsp_wifi.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/resource_imp/whd_resources.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols/whd_bus.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols/whd_bus_common.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols/whd_bus_m2m_protocol.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols/whd_bus_sdio_protocol.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/bus_protocols/whd_bus_spi_protocol.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_ap.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_buffer_api.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_cdc_bdc.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_chip.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_chip_constants.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_clm.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_debug.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_events.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_logging.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_management.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_network_if.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_resource_if.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_sdpcm.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_thread.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_utils.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi_api.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/src/whd_wifi_p2p.c", - "./libs/lwip-network-interface-integration/source/cy_network_mw_core.c", - "./libs/lwip-network-interface-integration/source/cy_lwip_dhcp_server.c", - "./libs/clib-support/TOOLCHAIN_GCC_ARM/cy_clib_support_newlib.c", - "./libs/TARGET_CY8CKIT-062S2-43012/bluetooth/cybsp_bt_config.c", - "./libs/TARGET_CY8CKIT-062S2-43012/cybsp.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_clocks.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_connectivity_bt.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_qspi_memslot.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/system_psoc6_cm4.c", - "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_freertos_helpers.c", - "./libs/abstraction-rtos/source/COMPONENT_FREERTOS/cyabs_rtos_freertos.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/bootutil/src/bootutil_misc.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/cy_flash_map.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/cy_flash_psoc6.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/flash_qspi/flash_qspi.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/mem_config/mem_config_sfdp.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/ota_flash_map.c", - "./libs/anycloud-ota/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/cy_flash_pal/ota_flash_xip_map.c", - "./libs/bluetooth-freertos/firmware/COMPONENT_43012/COMPONENT_MURATA-1LV/COMPONENT_HCI-UART/w_bt_firmware_controller.c", - "./libs/clib-support/COMPONENT_FREERTOS/cy_mutex_pool.c", - "./libs/connectivity-utilities/network/COMPONENT_LWIP/cy_nw_helper.c", - "./libs/freertos/Source/portable/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/port.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_104_m_csp_ble_usb.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_116_bga_ble.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_116_bga_usb.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_124_bga.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_124_bga_sip.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_43_smt.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_68_qfn_ble.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_01_80_wlcsp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_02_100_wlcsp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_02_124_bga.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_02_128_tqfp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_02_68_qfn.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_03_100_tqfp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_03_49_wlcsp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_03_68_qfn.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_04_64_tqfp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_04_68_qfn.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/pin_packages/cyhal_psoc6_04_80_tqfp.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_01.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_02.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_03.c", - "./libs/mtb-hal-cat1/COMPONENT_CAT1A/source/triggers/cyhal_triggers_psoc6_04.c", - "./libs/mtb-pdl-cat1/devices/COMPONENT_CAT1A/source/cy_device.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_01_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_02_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_03_cm0p_sleep.c", - "./libs/psoc6cm0p/COMPONENT_CM0P_SLEEP/psoc6_04_cm0p_sleep.c", - "./libs/secure-sockets/source/COMPONENT_LWIP/cy_secure_sockets.c", - "./libs/secure-sockets/source/COMPONENT_MBEDTLS/cy_tls.c", - "./libs/secure-sockets/source/COMPONENT_MBEDTLS/iot_crypto.c", - "./libs/whd-bsp-integration/COMPONENT_LWIP/cy_network_buffer_lwip.c", - "./libs/wifi-connection-manager/source/cy_wcm.c", - "./libs/wifi-connection-manager/source/COMPONENT_MBEDTLS/cy_wps_aes_ctr_ccm.c", - "./libs/wifi-connection-manager/source/COMPONENT_MBEDTLS/cy_wps_crypto.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm/COMPONENT_43012/43012C0-mfgtest_clm_blob.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/clm/COMPONENT_43012/43012C0_clm_blob.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012/43012C0-mfgtest_bin.c", - "./libs/wifi-host-driver/WiFi_Host_Driver/resources/firmware/COMPONENT_43012/43012C0_bin.c", - "./arch/sys_arch.c" - ], - "cxx_source": [], - "asm_source": [ - "./libs/mtb-pdl-cat1/drivers/source/TOOLCHAIN_GCC_ARM/cy_syslib_gcc.S", - "./libs/TARGET_CY8CKIT-062S2-43012/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/startup_psoc6_02_cm4.S" - ], - "libs": [ - "./libs/btstack/stack/COMPONENT_WICED_BLE/COMPONENT_CM4/COMPONENT_SOFTFP/TOOLCHAIN_GCC_ARM/libbtstack.a" - ], - "objs": [] -} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.c new file mode 100644 index 00000000000000..ee208401b46edc --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.c @@ -0,0 +1,50 @@ +/******************************************************************************* + * File Name: cycfg.c + * + * Description: + * Wrapper function to initialize all generated code. + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg.h" + +/* This function is provided for compatibility with older 2.X style projects. */ +void init_cycfg_all(void) +{ + cycfg_config_init(); + cycfg_config_reservations(); +} +void cycfg_config_init(void) +{ + init_cycfg_system(); + init_cycfg_clocks(); + init_cycfg_routing(); + init_cycfg_peripherals(); + init_cycfg_pins(); +} +void cycfg_config_reservations(void) +{ + reserve_cycfg_system(); + reserve_cycfg_clocks(); + reserve_cycfg_pins(); +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.h new file mode 100644 index 00000000000000..14fd49c29027d6 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.h @@ -0,0 +1,52 @@ +/******************************************************************************* + * File Name: cycfg.h + * + * Description: + * Simple wrapper header containing all generated files. + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_H) +#define CYCFG_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "cycfg_clocks.h" +#include "cycfg_connectivity_bt.h" +#include "cycfg_notices.h" +#include "cycfg_peripherals.h" +#include "cycfg_pins.h" +#include "cycfg_routing.h" +#include "cycfg_system.h" + +void init_cycfg_all(void); +void cycfg_config_init(void); +void cycfg_config_reservations(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.timestamp b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.timestamp new file mode 100644 index 00000000000000..ef0be7a1d73ca9 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg.timestamp @@ -0,0 +1,28 @@ +/******************************************************************************* +* File Name: cycfg.timestamp +* +* Description: +* Sentinel file for determining if generated source is up to date. +* This file was automatically generated and should not be modified. +* Configurator Backend 3.10.0 +* device-db 4.100.0.4304 +* mtb-pdl-cat1 3.9.0.29592 +* +******************************************************************************** +* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or +* an affiliate of Cypress Semiconductor Corporation. +* SPDX-License-Identifier: Apache-2.0 +* +* 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. +********************************************************************************/ + diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.c new file mode 100644 index 00000000000000..aad075c61d2607 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.c @@ -0,0 +1,920 @@ +/******************************************************************************* + * File Name: cycfg_capsense.c + * + * Description: + * CAPSENSE Middleware configuration + * This file should not be modified. It was automatically generated by + * CAPSENSE Configurator 6.10.0.3796 + * + ******************************************************************************** + * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) + * or an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + *******************************************************************************/ + +#include "cycfg_capsense.h" + +/* This enables code only when the CAPSENSE(TM) Middleware is present in the project + * or the information about the Middleware presence cannot be obtained. + */ +#if (defined(COMPONENT_MW_CAPSENSE) || !defined(COMPONENT_MW_CORE_MAKE)) + +#if !defined(CY_DISABLE_CAPSENSE) + +#if (CY_CAPSENSE_CORE == __CORTEX_M) + +#ifndef CSD_CMODPADS_PORT +#define CSD_CMODPADS_PORT 0xFF +#endif +#ifndef CSD_CMODPADS_PIN +#define CSD_CMODPADS_PIN 0xFF +#endif +#ifndef CSD_CSH_TANKPADS_PORT +#define CSD_CSH_TANKPADS_PORT 0xFF +#endif +#ifndef CSD_CSH_TANKPADS_PIN +#define CSD_CSH_TANKPADS_PIN 0xFF +#endif +#ifndef CSD_CSHIELDPADS_PORT +#define CSD_CSHIELDPADS_PORT 0xFF +#endif +#ifndef CSD_CSHIELDPADS_PIN +#define CSD_CSHIELDPADS_PIN 0xFF +#endif +#ifndef CSD_VREF_EXT_PORT +#define CSD_VREF_EXT_PORT 0xFF +#endif +#ifndef CSD_VREF_EXT_PIN +#define CSD_VREF_EXT_PIN 0xFF +#endif + +static cy_stc_capsense_internal_context_t cy_capsense_internalContext; + +#if (CY_CAPSENSE_MW_VERSION >= 400) +static cy_stc_capsense_active_scan_sns_t cy_capsense_activeScanSns; +#else +static cy_stc_active_scan_sns_t cy_capsense_activeScanSns; +#endif + +#if (CY_CAPSENSE_DEBOUNCE_SIZE > 0) +static uint8_t cy_capsense_debounce[CY_CAPSENSE_DEBOUNCE_SIZE] = { 0 }; +#endif + +#if (CY_CAPSENSE_NOISE_ENVELOPE_SIZE > 0) +static cy_stc_capsense_smartsense_csd_noise_envelope_t cy_capsense_noiseEnvelope[CY_CAPSENSE_NOISE_ENVELOPE_SIZE]; +#endif + +#if (CY_CAPSENSE_RAW_HISTORY_SIZE > 0) +static uint16_t cy_capsense_rawFilterHistory[CY_CAPSENSE_RAW_HISTORY_SIZE] = { 0 }; +#endif + +#if (CY_CAPSENSE_RAW_ALP_HISTORY_SIZE > 0) +static uint16_t cy_capsense_rawAlpFilterHistory[CY_CAPSENSE_RAW_ALP_HISTORY_SIZE] = { 0 }; +#endif + +#if (CY_CAPSENSE_IIR_HISTORY_LOW_SIZE > 0) +static uint8_t cy_capsense_iirHistoryLow[CY_CAPSENSE_IIR_HISTORY_LOW_SIZE] = { 0 }; +#endif + +#if (CY_CAPSENSE_POSITION_FILTER_HISTORY_SIZE > 0) +static cy_stc_capsense_position_t cy_capsense_positionFilterHistory[CY_CAPSENSE_POSITION_FILTER_HISTORY_SIZE]; +#endif + +#if (CY_CAPSENSE_TOUCH_FILTER_HISTORY_SIZE > 0) +static cy_stc_capsense_touch_t cy_capsense_touchFilterHistory[CY_CAPSENSE_TOUCH_FILTER_HISTORY_SIZE] = {}; +#endif + +#if (CY_CAPSENSE_DIPLEX_SIZE > 0) +static const uint8_t cy_capsense_diplexTable[CY_CAPSENSE_DIPLEX_SIZE] = {}; +#endif + +#if (CY_CAPSENSE_CSD_TOUCHPAD_MAX_SENSORS_SIZE > 0) +static uint16_t cy_capsense_csdTouchBuffer[CY_CAPSENSE_CSD_TOUCHPAD_MAX_SENSORS_SIZE] = { 0 }; +#endif + +#if (CY_CAPSENSE_CSX_TOUCH_BUFFER_ENABLE > 0) +static cy_stc_capsense_csx_touch_buffer_t cy_capsense_csxTouchBuffer; +#endif + +#if (CY_CAPSENSE_CSX_TOUCH_HISTORY_SIZE > 0) +static cy_stc_capsense_csx_touch_history_t cy_capsense_csxTouchHistory[CY_CAPSENSE_CSX_TOUCH_HISTORY_SIZE] = {}; +#endif + +#if (CY_CAPSENSE_BALLISTIC_WIDGET_COUNT > 0) +static cy_stc_capsense_ballistic_context_t cy_capsense_ballisticContext[CY_CAPSENSE_BALLISTIC_WIDGET_COUNT]; +#endif + +#if (CY_CAPSENSE_GESTURE_WIDGET_COUNT > 0) +static cy_stc_capsense_gesture_context_t cy_capsense_gestureContext[CY_CAPSENSE_GESTURE_WIDGET_COUNT]; +#endif + +#if (CY_CAPSENSE_BIST_SUPPORTED) +#if (CY_CAPSENSE_BIST_EN != 0) +static uint16_t cy_capsense_bslnInv[CY_CAPSENSE_SENSOR_COUNT * CY_CAPSENSE_MFS_CH_NUMBER]; +static uint32_t cy_capsense_eltdCap[CY_CAPSENSE_ELTD_COUNT]; +static uint16_t cy_capsense_wdgtCrc[CY_CAPSENSE_WIDGET_COUNT]; +#endif +#endif + +static const cy_stc_capsense_common_config_t cy_capsense_commonConfig = +{ + .cpuClkHz = CY_CAPSENSE_CPU_CLK, + .periClkHz = CY_CAPSENSE_PERI_CLK, + .vdda = CY_CAPSENSE_VDDA_MV, + .numPin = CY_CAPSENSE_PIN_COUNT, + .numSns = CY_CAPSENSE_SENSOR_COUNT, + .numWd = CY_CAPSENSE_TOTAL_WIDGET_COUNT, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdEn = CY_CAPSENSE_ENABLE, + .csxEn = CY_CAPSENSE_ENABLE, +#if (CY_CAPSENSE_MW_VERSION < 300) + .mfsEn = CY_CAPSENSE_DISABLE, +#endif +#if (CY_CAPSENSE_BIST_SUPPORTED) + .bistEn = CY_CAPSENSE_DISABLE, +#endif + .positionFilterEn = CY_CAPSENSE_DISABLE, +#endif + .periDividerType = (uint8_t)CY_CAPSENSE_PERI_DIV_TYPE, + .periDividerIndex = CY_CAPSENSE_PERI_DIV_INDEX, + .analogWakeupDelay = 25u, + .ssIrefSource = CY_CAPSENSE_IREF_SRSS, + .ssVrefSource = CY_CAPSENSE_VREF_SRSS, + .proxTouchCoeff = 300u, + .swSensorAutoResetEn = CY_CAPSENSE_DISABLE, + .portCmodPadNum = CSD_CMODPADS_PORT, + .pinCmodPad = CSD_CMODPADS_PIN, + .portCshPadNum = CSD_CSH_TANKPADS_PORT, + .pinCshPad = CSD_CSH_TANKPADS_PIN, + .portShieldPadNum = CSD_CSHIELDPADS_PORT, + .pinShieldPad = CSD_CSHIELDPADS_PIN, + .portVrefExtPadNum = CSD_VREF_EXT_PORT, + .pinVrefExtPad = CSD_VREF_EXT_PIN, + .portCmodNum = Cmod_PORT_NUM, + .idacGainTable = { + {0x01000000u, 37500u}, + {0x03000000u, 75000u}, + {0x01400000u, 300000u}, + {0x03400000u, 600000u}, + {0x01800000u, 2400000u}, + {0x03800000u, 4800000u}, + }, + .ptrCsdBase = CSD0, + .ptrCsdContext = &cy_csd_0_context, + .portCmod = Cmod_PORT, + .portCsh = NULL, + .portCintA = CintA_PORT, + .portCintB = CintB_PORT, + .pinCmod = Cmod_PIN, + .portCshNum = 0u, + .pinCsh = 0u, + .pinCintA = CintA_PIN, + .pinCintB = CintB_PIN, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdShieldEn = CY_CAPSENSE_DISABLE, +#endif + .csdInactiveSnsConnection = CY_CAPSENSE_SNS_CONNECTION_GROUND, +#if (CY_CAPSENSE_MW_VERSION >= 300) + .csxInactiveSnsConnection = CY_CAPSENSE_SNS_CONNECTION_GROUND, +#endif + .csdShieldDelay = CY_CAPSENSE_SH_DELAY_0NS, + .csdVref = 0u, + .csdRConst = 1000u, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdCTankShieldEn = CY_CAPSENSE_DISABLE, +#endif + .csdShieldNumPin = 0u, + .csdShieldSwRes = CY_CAPSENSE_SHIELD_SW_RES_MEDIUM, + .csdInitSwRes = CY_CAPSENSE_INIT_SW_RES_MEDIUM, + .csdChargeTransfer = CY_CAPSENSE_IDAC_SOURCING, + .csdRawTarget = 85u, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdAutotuneEn = CY_CAPSENSE_CSD_SS_HWTH_EN, + .csdIdacAutocalEn = CY_CAPSENSE_ENABLE, + .csdIdacAutoGainEn = CY_CAPSENSE_ENABLE, +#endif + .csdCalibrationError = 10u, + .csdIdacGainInitIndex = 4u, + .csdIdacMin = 20u, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdIdacCompEn = CY_CAPSENSE_ENABLE, +#endif + .csdFineInitTime = 10u, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csdIdacRowColAlignEn = CY_CAPSENSE_ENABLE, +#endif + .csdMfsDividerOffsetF1 = 1u, + .csdMfsDividerOffsetF2 = 2u, + .csxRawTarget = 40u, +#if (CY_CAPSENSE_MW_VERSION < 400) + .csxIdacGainInitIndex = 2u, + .csxIdacAutocalEn = CY_CAPSENSE_ENABLE, +#endif + .csxCalibrationError = 20u, + .csxFineInitTime = 10u, + .csxInitSwRes = CY_CAPSENSE_INIT_SW_RES_MEDIUM, + .csxScanSwRes = CY_CAPSENSE_INIT_SW_RES_LOW, + .csxInitShieldSwRes = CY_CAPSENSE_SHIELD_SW_RES_MEDIUM, + .csxScanShieldSwRes = CY_CAPSENSE_SHIELD_SW_RES_LOW, + .csxMfsDividerOffsetF1 = 1u, + .csxMfsDividerOffsetF2 = 2u, +}; + +#if (CY_CAPSENSE_MW_VERSION < 300) +static const cy_stc_capsense_fptr_config_t cy_capsense_fptrConfig = { +#if (CY_CAPSENSE_CSD_EN == 0) + .fptrCSDSetupWidget = NULL, + .fptrCSDScan = NULL, + .fptrDpProcessCsdWidgetRawCounts = NULL, + .fptrDpProcessCsdWidgetStatus = NULL, + .fptrCSDDisableMode = NULL, + .fptrCSDInitialize = NULL, + .fptrCSDScanISR = NULL, +#else + .fptrCSDSetupWidget = &Cy_CapSense_CSDSetupWidget, + .fptrCSDScan = &Cy_CapSense_CSDScan, + .fptrDpProcessCsdWidgetRawCounts = &Cy_CapSense_DpProcessCsdWidgetRawCounts, + .fptrDpProcessCsdWidgetStatus = &Cy_CapSense_DpProcessCsdWidgetStatus, + .fptrCSDDisableMode = &Cy_CapSense_CSDDisableMode, + .fptrCSDInitialize = &Cy_CapSense_CSDInitialize, + .fptrCSDScanISR = &Cy_CapSense_CSDScanISR, +#endif + +#if (CY_CAPSENSE_CSX_EN == 0) + .fptrCSXSetupWidget = NULL, + .fptrCSXScan = NULL, + .fptrDpProcessCsxWidgetRawCounts = NULL, + .fptrDpProcessCsxWidgetStatus = NULL, + .fptrCSXInitialize = NULL, + .fptrCSXDisableMode = NULL, + .fptrCSXScanISR = NULL, +#else + .fptrCSXSetupWidget = &Cy_CapSense_CSXSetupWidget, + .fptrCSXScan = &Cy_CapSense_CSXScan, + .fptrDpProcessCsxWidgetRawCounts = &Cy_CapSense_DpProcessCsxWidgetRawCounts, + .fptrDpProcessCsxWidgetStatus = &Cy_CapSense_DpProcessCsxWidgetStatus, + .fptrCSXInitialize = &Cy_CapSense_CSXInitialize, + .fptrCSXDisableMode = &Cy_CapSense_CSXDisableMode, + .fptrCSXScanISR = &Cy_CapSense_CSXScanISR, +#endif + +#if (CY_CAPSENSE_ADAPTIVE_FILTER_EN == 0) + .fptrAdaptiveFilterInitializeLib = NULL, + .fptrAdaptiveFilterRunLib = NULL, +#else + .fptrAdaptiveFilterInitializeLib = &Cy_CapSense_AdaptiveFilterInitialize_Lib, + .fptrAdaptiveFilterRunLib = &Cy_CapSense_AdaptiveFilterRun_Lib, +#endif + +#if (CY_CAPSENSE_BALLISTIC_MULTIPLIER_EN == 0) + .fptrBallisticMultiplierLib = NULL, +#else + .fptrBallisticMultiplierLib = &Cy_CapSense_BallisticMultiplier_Lib, +#endif + +#if (CY_CAPSENSE_RAWCOUNT_FILTER_EN == 0) + .fptrInitializeAllFilters = NULL, + .fptrFtRunEnabledFiltersInternal = NULL, +#else + .fptrInitializeAllFilters = &Cy_CapSense_InitializeAllFilters, + .fptrFtRunEnabledFiltersInternal = &Cy_CapSense_FtRunEnabledFiltersInternal, +#endif + +#if (CY_CAPSENSE_CSD_POSITION_FILTER_EN == 0) + .fptrProcessPositionFilters = NULL, +#else + .fptrProcessPositionFilters = &Cy_CapSense_ProcessPositionFilters, +#endif + +#if ((CY_CAPSENSE_CSX_POSITION_FILTER_EN == 0) && (CY_CAPSENSE_CSD_POSITION_FILTER_EN == 0)) + .fptrRunPositionFilters = NULL, + .fptrInitPositionFilters = NULL, +#else + .fptrRunPositionFilters = &Cy_CapSense_RunPositionFilters, + .fptrInitPositionFilters = &Cy_CapSense_InitPositionFilters, +#endif + +#if ((CY_CAPSENSE_CSD_BUTTON_EN == 0) && (CY_CAPSENSE_CSX_BUTTON_EN == 0) && (CY_CAPSENSE_CSX_MATRIX_EN == 0)) + .fptrDpProcessButton = NULL, +#else + .fptrDpProcessButton = &Cy_CapSense_DpProcessButton, +#endif + +#if ((CY_CAPSENSE_CSD_SLIDER_EN == 0) && (CY_CAPSENSE_CSX_SLIDER_EN == 0)) + .fptrDpProcessSlider = NULL, +#else + .fptrDpProcessSlider = &Cy_CapSense_DpProcessSlider, +#endif + +#if (CY_CAPSENSE_CSD_MATRIX_EN == 0) + .fptrDpProcessCsdMatrix = NULL, +#else + .fptrDpProcessCsdMatrix = &Cy_CapSense_DpProcessCsdMatrix, +#endif + +#if (CY_CAPSENSE_CSD_TOUCHPAD_EN == 0) + .fptrDpProcessCsdTouchpad = NULL, +#else + .fptrDpProcessCsdTouchpad = &Cy_CapSense_DpProcessCsdTouchpad, +#endif + +#if (CY_CAPSENSE_CSD_PROXIMITY_EN == 0) + .fptrDpProcessProximity = NULL, +#else + .fptrDpProcessProximity = &Cy_CapSense_DpProcessProximity, +#endif + +#if (CY_CAPSENSE_CSX_TOUCHPAD_EN == 0) + .fptrDpProcessCsxTouchpad = NULL, +#else + .fptrDpProcessCsxTouchpad = &Cy_CapSense_DpProcessCsxTouchpad, +#endif + +#if (CY_CAPSENSE_ADVANCED_CENTROID_5X5_EN == 0) + .fptrDpAdvancedCentroidTouchpad = NULL, +#else + .fptrDpAdvancedCentroidTouchpad = &Cy_CapSense_DpAdvancedCentroidTouchpad, +#endif + +#if ((CY_CAPSENSE_CSD_CALIBRATION_EN == 0) && (CY_CAPSENSE_SMARTSENSE_FULL_EN == 0)) + .fptrCSDCalibrateWidget = NULL, + .fptrCalibrateAllCsdWidgets = NULL, +#else + .fptrCSDCalibrateWidget = &Cy_CapSense_CSDCalibrateWidget, + .fptrCalibrateAllCsdWidgets = &Cy_CapSense_CalibrateAllCsdWidgets, +#endif + +#if (CY_CAPSENSE_CSX_CALIBRATION_EN == 0) + .fptrCalibrateAllCsxWidgets = NULL, +#else + .fptrCalibrateAllCsxWidgets = &Cy_CapSense_CalibrateAllCsxWidgets, +#endif + +#if (CY_CAPSENSE_SMARTSENSE_FULL_EN == 0) + .fptrRunNoiseEnvelopeLib = NULL, + .fptrDpUpdateThresholds = NULL, + .fptrInitializeNoiseEnvelopeLib = NULL, +#else + .fptrRunNoiseEnvelopeLib = &Cy_CapSense_RunNoiseEnvelope_Lib, + .fptrDpUpdateThresholds = &Cy_CapSense_DpUpdateThresholds, + .fptrInitializeNoiseEnvelopeLib = &Cy_CapSense_InitializeNoiseEnvelope_Lib, +#endif + +#if ((CY_CAPSENSE_SMARTSENSE_HW_EN == 0) && (CY_CAPSENSE_SMARTSENSE_FULL_EN == 0)) + .fptrSsAutoTune = NULL, +#else + .fptrSsAutoTune = &Cy_CapSense_SsAutoTune, +#endif + +#if (CY_CAPSENSE_BIST_SUPPORTED) +#if (CY_CAPSENSE_BIST_EN == 0) + .fptrBistInitialize = NULL, + .fptrBistDisableMode = NULL, + .fptrBistDsInitialize = NULL, +#else + .fptrBistInitialize = &Cy_CapSense_BistInitialize, + .fptrBistDisableMode = &Cy_CapSense_BistDisableMode, + .fptrBistDsInitialize = &Cy_CapSense_BistDsInitialize, +#endif +#endif +}; +#endif + +static const cy_stc_capsense_pin_config_t cy_capsense_pinConfig[CY_CAPSENSE_PIN_COUNT] = { + { + /* Button0_Rx0 */ + Button0_Rx0_PORT, + Button0_Rx0_PIN, + }, + { + /* Button0_Tx */ + Button0_Tx_PORT, + Button0_Tx_PIN, + }, + { + /* Button1_Rx0 */ + Button1_Rx0_PORT, + Button1_Rx0_PIN, + }, + { + /* Button1_Tx */ + Button1_Tx_PORT, + Button1_Tx_PIN, + }, + { + /* LinearSlider0_Sns0 */ + LinearSlider0_Sns0_PORT, + LinearSlider0_Sns0_PIN, + }, + { + /* LinearSlider0_Sns1 */ + LinearSlider0_Sns1_PORT, + LinearSlider0_Sns1_PIN, + }, + { + /* LinearSlider0_Sns2 */ + LinearSlider0_Sns2_PORT, + LinearSlider0_Sns2_PIN, + }, + { + /* LinearSlider0_Sns3 */ + LinearSlider0_Sns3_PORT, + LinearSlider0_Sns3_PIN, + }, + { + /* LinearSlider0_Sns4 */ + LinearSlider0_Sns4_PORT, + LinearSlider0_Sns4_PIN, + }, +}; + +#if (CY_CAPSENSE_SHIELD_PIN_COUNT > 0) +static const cy_stc_capsense_pin_config_t cy_capsense_shieldPinConfig[CY_CAPSENSE_SHIELD_PIN_COUNT] = {}; +#endif + +#if (CY_CAPSENSE_ELTD_COUNT > 0) +static const cy_stc_capsense_electrode_config_t cy_capsense_electrodeConfig[CY_CAPSENSE_ELTD_COUNT] = { + { + /* Button0_Rx0 */ + .ptrPin = &cy_capsense_pinConfig[0u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_MUT_RX_E, + .numPins = 1u, + }, + { + /* Button0_Tx */ + .ptrPin = &cy_capsense_pinConfig[1u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_MUT_TX_E, + .numPins = 1u, + }, + { + /* Button1_Rx0 */ + .ptrPin = &cy_capsense_pinConfig[2u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_MUT_RX_E, + .numPins = 1u, + }, + { + /* Button1_Tx */ + .ptrPin = &cy_capsense_pinConfig[3u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_MUT_TX_E, + .numPins = 1u, + }, + { + /* LinearSlider0_Sns0 */ + .ptrPin = &cy_capsense_pinConfig[4u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_SELF_E, + .numPins = 1u, + }, + { + /* LinearSlider0_Sns1 */ + .ptrPin = &cy_capsense_pinConfig[5u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_SELF_E, + .numPins = 1u, + }, + { + /* LinearSlider0_Sns2 */ + .ptrPin = &cy_capsense_pinConfig[6u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_SELF_E, + .numPins = 1u, + }, + { + /* LinearSlider0_Sns3 */ + .ptrPin = &cy_capsense_pinConfig[7u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_SELF_E, + .numPins = 1u, + }, + { + /* LinearSlider0_Sns4 */ + .ptrPin = &cy_capsense_pinConfig[8u], + .type = (uint8_t) CY_CAPSENSE_ELTD_TYPE_SELF_E, + .numPins = 1u, + }, +}; +#endif + +static const cy_stc_capsense_widget_config_t cy_capsense_widgetConfig[CY_CAPSENSE_WIDGET_COUNT] = +{ + { /* Button0 */ + .ptrWdContext = &cy_capsense_tuner.widgetContext[0u], + .ptrSnsContext = &cy_capsense_tuner.sensorContext[0u], + .ptrEltdConfig = &cy_capsense_electrodeConfig[0u], +#if (CY_CAPSENSE_BIST_SUPPORTED) + .ptrEltdCapacitance = NULL, + .ptrBslnInv = NULL, +#endif + .ptrNoiseEnvelope = NULL, + .ptrRawFilterHistory = NULL, + .ptrRawFilterHistoryLow = NULL, + .iirCoeff = 128u, + .ptrDebounceArr = &cy_capsense_debounce[0u], + .ptrDiplexTable = NULL, + .centroidConfig = 0u, + .xResolution = 0u, + .yResolution = 0u, + .numSns = 1u, + .numCols = 1u, + .numRows = 1u, + .ptrPosFilterHistory = NULL, + .ptrCsxTouchHistory = NULL, + .ptrCsxTouchBuffer = NULL, + .ptrCsdTouchBuffer = NULL, + .ptrGestureConfig = NULL, + .ptrGestureContext = NULL, + .ballisticConfig = { + .accelCoeff = 9u, + .speedCoeff = 2u, + .divisorValue = 4u, + .speedThresholdX = 3u, + .speedThresholdY = 4u, + }, + .ptrBallisticContext = NULL, + .aiirConfig = { + .maxK = 60u, + .minK = 1u, + .noMovTh = 3u, + .littleMovTh = 7u, + .largeMovTh = 12u, + .divVal = 64u, + }, + .advConfig = { + .penultimateTh = 100u, + .virtualSnsTh = 100u, + .crossCouplingTh = 5u, + }, + .posFilterConfig = 0u, + .rawFilterConfig = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 400) + .alpOnThreshold = 15u, + .alpOffThreshold = 5u, +#endif +#if (CY_CAPSENSE_MW_VERSION >= 300) + .senseMethod = CY_CAPSENSE_CSX_GROUP, +#else + .senseMethod = CY_CAPSENSE_SENSE_METHOD_CSX_E, +#endif + .wdType = (uint8_t)CY_CAPSENSE_WD_BUTTON_E, + }, + { /* Button1 */ + .ptrWdContext = &cy_capsense_tuner.widgetContext[1u], + .ptrSnsContext = &cy_capsense_tuner.sensorContext[1u], + .ptrEltdConfig = &cy_capsense_electrodeConfig[2u], +#if (CY_CAPSENSE_BIST_SUPPORTED) + .ptrEltdCapacitance = NULL, + .ptrBslnInv = NULL, +#endif + .ptrNoiseEnvelope = NULL, + .ptrRawFilterHistory = NULL, + .ptrRawFilterHistoryLow = NULL, + .iirCoeff = 128u, + .ptrDebounceArr = &cy_capsense_debounce[1u], + .ptrDiplexTable = NULL, + .centroidConfig = 0u, + .xResolution = 0u, + .yResolution = 0u, + .numSns = 1u, + .numCols = 1u, + .numRows = 1u, + .ptrPosFilterHistory = NULL, + .ptrCsxTouchHistory = NULL, + .ptrCsxTouchBuffer = NULL, + .ptrCsdTouchBuffer = NULL, + .ptrGestureConfig = NULL, + .ptrGestureContext = NULL, + .ballisticConfig = { + .accelCoeff = 9u, + .speedCoeff = 2u, + .divisorValue = 4u, + .speedThresholdX = 3u, + .speedThresholdY = 4u, + }, + .ptrBallisticContext = NULL, + .aiirConfig = { + .maxK = 60u, + .minK = 1u, + .noMovTh = 3u, + .littleMovTh = 7u, + .largeMovTh = 12u, + .divVal = 64u, + }, + .advConfig = { + .penultimateTh = 100u, + .virtualSnsTh = 100u, + .crossCouplingTh = 5u, + }, + .posFilterConfig = 0u, + .rawFilterConfig = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 400) + .alpOnThreshold = 15u, + .alpOffThreshold = 5u, +#endif +#if (CY_CAPSENSE_MW_VERSION >= 300) + .senseMethod = CY_CAPSENSE_CSX_GROUP, +#else + .senseMethod = CY_CAPSENSE_SENSE_METHOD_CSX_E, +#endif + .wdType = (uint8_t)CY_CAPSENSE_WD_BUTTON_E, + }, + { /* LinearSlider0 */ + .ptrWdContext = &cy_capsense_tuner.widgetContext[2u], + .ptrSnsContext = &cy_capsense_tuner.sensorContext[2u], + .ptrEltdConfig = &cy_capsense_electrodeConfig[4u], +#if (CY_CAPSENSE_BIST_SUPPORTED) + .ptrEltdCapacitance = NULL, + .ptrBslnInv = NULL, +#endif + .ptrNoiseEnvelope = &cy_capsense_noiseEnvelope[0u], + .ptrRawFilterHistory = NULL, + .ptrRawFilterHistoryLow = NULL, + .iirCoeff = 128u, + .ptrDebounceArr = &cy_capsense_debounce[2u], + .ptrDiplexTable = NULL, + .centroidConfig = 1u, + .xResolution = 300u, + .yResolution = 0u, + .numSns = 5u, + .numCols = 5u, + .numRows = 0u, + .ptrPosFilterHistory = NULL, + .ptrCsxTouchHistory = NULL, + .ptrCsxTouchBuffer = NULL, + .ptrCsdTouchBuffer = NULL, + .ptrGestureConfig = NULL, + .ptrGestureContext = NULL, + .ballisticConfig = { + .accelCoeff = 9u, + .speedCoeff = 2u, + .divisorValue = 4u, + .speedThresholdX = 3u, + .speedThresholdY = 4u, + }, + .ptrBallisticContext = NULL, + .aiirConfig = { + .maxK = 60u, + .minK = 1u, + .noMovTh = 3u, + .littleMovTh = 7u, + .largeMovTh = 12u, + .divVal = 64u, + }, + .advConfig = { + .penultimateTh = 100u, + .virtualSnsTh = 100u, + .crossCouplingTh = 5u, + }, + .posFilterConfig = 0u, + .rawFilterConfig = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 400) + .alpOnThreshold = 15u, + .alpOffThreshold = 5u, +#endif +#if (CY_CAPSENSE_MW_VERSION >= 300) + .senseMethod = CY_CAPSENSE_CSD_GROUP, +#else + .senseMethod = CY_CAPSENSE_SENSE_METHOD_CSD_E, +#endif + .wdType = (uint8_t)CY_CAPSENSE_WD_LINEAR_SLIDER_E, + }, +}; + +cy_stc_capsense_tuner_t cy_capsense_tuner = +{ + .commonContext = { +#if (CY_CAPSENSE_MW_VERSION < 300) + .configId = 0x0990, +#elif (CY_CAPSENSE_MW_VERSION < 400) + .configId = 0x0991, +#else + .configId = 0x0992, +#endif + + .tunerCmd = 0u, + .scanCounter = 0u, + .tunerSt = 0u, + .initDone = 0u, +#if (CY_CAPSENSE_MW_VERSION < 300) + .ptrSSCallback = NULL, + .ptrEOSCallback = NULL, + .ptrTunerSendCallback = NULL, + .ptrTunerReceiveCallback = NULL, +#endif + .status = 0u, + .timestampInterval = 1u, + .timestamp = 0u, + .modCsdClk = 2u, + .modCsxClk = 2u, + .tunerCnt = 0u, + }, + .widgetContext = { + { /* Button0 */ + .fingerCap = 160u, + .sigPFC = 0u, + .resolution = 100u, + .maxRawCount = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 300) + .maxRawCountRow = 0u, +#endif + .fingerTh = 100u, + .proxTh = 200u, + .lowBslnRst = 30u, + .snsClk = 32u, + .rowSnsClk = 16u, + .gestureDetected = 0u, + .gestureDirection = 0u, + .xDelta = 0, + .yDelta = 0, + .noiseTh = 40u, + .nNoiseTh = 40u, + .hysteresis = 10u, + .onDebounce = 3u, + .snsClkSource = CY_CAPSENSE_CLK_SOURCE_AUTO_MASK, + .idacMod = { 32u, 32u, 32u, }, + .idacGainIndex = 2u, + .rowIdacMod = { 32u, 32u, 32u, }, + .bslnCoeff = 1u, + .status = 0u, + .wdTouch = { + .ptrPosition = NULL, + .numPosition = 0, + }, + }, + { /* Button1 */ + .fingerCap = 160u, + .sigPFC = 0u, + .resolution = 100u, + .maxRawCount = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 300) + .maxRawCountRow = 0u, +#endif + .fingerTh = 100u, + .proxTh = 200u, + .lowBslnRst = 30u, + .snsClk = 32u, + .rowSnsClk = 16u, + .gestureDetected = 0u, + .gestureDirection = 0u, + .xDelta = 0, + .yDelta = 0, + .noiseTh = 40u, + .nNoiseTh = 40u, + .hysteresis = 10u, + .onDebounce = 3u, + .snsClkSource = CY_CAPSENSE_CLK_SOURCE_AUTO_MASK, + .idacMod = { 32u, 32u, 32u, }, + .idacGainIndex = 2u, + .rowIdacMod = { 32u, 32u, 32u, }, + .bslnCoeff = 1u, + .status = 0u, + .wdTouch = { + .ptrPosition = NULL, + .numPosition = 0, + }, + }, + { /* LinearSlider0 */ + .fingerCap = 160u, + .sigPFC = 0u, + .resolution = 12u, + .maxRawCount = 0u, +#if (CY_CAPSENSE_MW_VERSION >= 300) + .maxRawCountRow = 0u, +#endif + .fingerTh = 100u, + .proxTh = 200u, + .lowBslnRst = 30u, + .snsClk = 16u, + .rowSnsClk = 16u, + .gestureDetected = 0u, + .gestureDirection = 0u, + .xDelta = 0, + .yDelta = 0, + .noiseTh = 40u, + .nNoiseTh = 40u, + .hysteresis = 10u, + .onDebounce = 3u, + .snsClkSource = CY_CAPSENSE_CLK_SOURCE_AUTO_MASK, + .idacMod = { 32u, 32u, 32u, }, + .idacGainIndex = 4u, + .rowIdacMod = { 32u, 32u, 32u, }, + .bslnCoeff = 1u, + .status = 0u, + .wdTouch = { + .ptrPosition = &cy_capsense_tuner.position[0u], + .numPosition = 1, + }, + }, + }, + .sensorContext = { + { /* Button0_Rx0 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* Button1_Rx0 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* LinearSlider0_Sns0 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* LinearSlider0_Sns1 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* LinearSlider0_Sns2 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* LinearSlider0_Sns3 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + { /* LinearSlider0_Sns4 */ + .raw = 0u, + .bsln = 0u, + .diff = 0u, + .status = 0u, + .negBslnRstCnt = 0u, + .idacComp = 32u, + .bslnExt = 0u, + }, + }, + .position = { + { /* LinearSlider0 */ + .x = 0u, + .y = 0u, + .z = 0u, + .id = 0u, + }, + }, +}; + +#if (CY_CAPSENSE_BIST_SUPPORTED) +#if (CY_CAPSENSE_BIST_EN != 0) +static cy_stc_capsense_bist_context_t cy_capsense_bist_context = {}; +#endif +#endif + +cy_stc_capsense_context_t cy_capsense_context = { + .ptrCommonConfig = &cy_capsense_commonConfig, + .ptrCommonContext = &cy_capsense_tuner.commonContext, + .ptrInternalContext = &cy_capsense_internalContext, + .ptrWdConfig = &cy_capsense_widgetConfig[0u], + .ptrWdContext = &cy_capsense_tuner.widgetContext[0u], + .ptrPinConfig = &cy_capsense_pinConfig[0u], + .ptrShieldPinConfig = NULL, + .ptrActiveScanSns = &cy_capsense_activeScanSns, +#if (CY_CAPSENSE_MW_VERSION < 300) + .ptrFptrConfig = (const void *) &cy_capsense_fptrConfig, +#endif +#if (CY_CAPSENSE_BIST_SUPPORTED) + .ptrBistContext = NULL, +#endif +}; + +#endif /* CY_CAPSENSE_CORE == __CORTEX_M */ + +#endif /* !defined(CY_DISABLE_CAPSENSE) */ + +#endif /* (defined(COMPONENT_MW_CAPSENSE) || !defined(COMPONENT_MW_CORE_MAKE)) */ + +/* [] END OF FILE */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.h new file mode 100644 index 00000000000000..8654b3c71e2ac8 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.h @@ -0,0 +1,2334 @@ +/******************************************************************************* + * File Name: cycfg_capsense.h + * + * Description: + * CAPSENSE Middleware configuration + * This file should not be modified. It was automatically generated by + * CAPSENSE Configurator 6.10.0.3796 + * + ******************************************************************************** + * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) + * or an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + *******************************************************************************/ + +#if !defined(CYCFG_CAPSENSE_H) +#define CYCFG_CAPSENSE_H + +/* This enables code only when the CAPSENSE(TM) Middleware is present in the project + * or the information about the Middleware presence cannot be obtained. + */ +#if (defined(COMPONENT_MW_CAPSENSE) || !defined(COMPONENT_MW_CORE_MAKE)) + +#include "cy_device_headers.h" +#include "cycfg_capsense_defines.h" +#include "cycfg_peripherals.h" +#include + +#define CY_CAPSENSE_CFG_TOOL_VERSION (610) + +#if !defined(CY_DISABLE_CAPSENSE) + +#if (CY_CAPSENSE_CORE == __CORTEX_M) + +#if !defined(Cmod_PORT) || !defined(Cmod_PIN) || !defined(Cmod_PORT_NUM) +#error Cmod Capacitor is not assigned: missing #define Cmod_PORT, #define Cmod_PIN, #define Cmod_PORT_NUM +#endif + +#if !defined(CintA_PORT) || !defined(CintA_PIN) || !defined(CintA_PORT_NUM) +#error CintA Capacitor is not assigned: missing #define CintA_PORT, #define CintA_PIN, #define CintA_PORT_NUM +#endif + +#if !defined(CintB_PORT) || !defined(CintB_PIN) || !defined(CintB_PORT_NUM) +#error CintB Capacitor is not assigned: missing #define CintB_PORT, #define CintB_PIN, #define CintB_PORT_NUM +#endif + +#if !defined(Button0_Rx0_PORT) || !defined(Button0_Rx0_PIN) +#error Button0_Rx0 Sensor is not assigned: missing #define Button0_Rx0_PORT, #define Button0_Rx0_PIN +#endif + +#if !defined(Button0_Tx_PORT) || !defined(Button0_Tx_PIN) +#error Button0_Tx Sensor is not assigned: missing #define Button0_Tx_PORT, #define Button0_Tx_PIN +#endif + +#if !defined(Button1_Rx0_PORT) || !defined(Button1_Rx0_PIN) +#error Button1_Rx0 Sensor is not assigned: missing #define Button1_Rx0_PORT, #define Button1_Rx0_PIN +#endif + +#if !defined(Button1_Tx_PORT) || !defined(Button1_Tx_PIN) +#error Button1_Tx Sensor is not assigned: missing #define Button1_Tx_PORT, #define Button1_Tx_PIN +#endif + +#if !defined(LinearSlider0_Sns0_PORT) || !defined(LinearSlider0_Sns0_PIN) +#error LinearSlider0_Sns0 Sensor is not assigned: missing #define LinearSlider0_Sns0_PORT, #define LinearSlider0_Sns0_PIN +#endif + +#if !defined(LinearSlider0_Sns1_PORT) || !defined(LinearSlider0_Sns1_PIN) +#error LinearSlider0_Sns1 Sensor is not assigned: missing #define LinearSlider0_Sns1_PORT, #define LinearSlider0_Sns1_PIN +#endif + +#if !defined(LinearSlider0_Sns2_PORT) || !defined(LinearSlider0_Sns2_PIN) +#error LinearSlider0_Sns2 Sensor is not assigned: missing #define LinearSlider0_Sns2_PORT, #define LinearSlider0_Sns2_PIN +#endif + +#if !defined(LinearSlider0_Sns3_PORT) || !defined(LinearSlider0_Sns3_PIN) +#error LinearSlider0_Sns3 Sensor is not assigned: missing #define LinearSlider0_Sns3_PORT, #define LinearSlider0_Sns3_PIN +#endif + +#if !defined(LinearSlider0_Sns4_PORT) || !defined(LinearSlider0_Sns4_PIN) +#error LinearSlider0_Sns4 Sensor is not assigned: missing #define LinearSlider0_Sns4_PORT, #define LinearSlider0_Sns4_PIN +#endif + +#if !defined(CY_CAPSENSE_CPU_CLK) +#error CPU clock frequency is not set: missing #define CY_CAPSENSE_CPU_CLK +#endif + +#if !defined(CY_CAPSENSE_PERI_CLK) +#error Peripheral clock core is not set: missing #define CY_CAPSENSE_PERI_CLK +#endif + +#if !defined(CY_CAPSENSE_VDDA_MV) +#error VDDA voltage is not set: missing #define CY_CAPSENSE_VDDA_MV +#endif + +#if !defined(CY_CAPSENSE_PERI_DIV_TYPE) +#error Peripheral clock divider type is not set: missing #define CY_CAPSENSE_PERI_DIV_TYPE +#endif + +#if !defined(CY_CAPSENSE_PERI_DIV_INDEX) +#error Peripheral clock divider index is not set: missing #define CY_CAPSENSE_PERI_DIV_INDEX +#endif + +#include "cy_capsense.h" + +/* Supported CapSense Middleware version */ +#define CY_CAPSENSE_MW_VERSION_REQUIRED (200) + +#if !defined(CY_CAPSENSE_MW_VERSION) +#if (CY_CAPSENSE_MW_VERSION_MAJOR == 2) +#define CY_CAPSENSE_MW_VERSION (200) +#elif (CY_CAPSENSE_MW_VERSION_MAJOR == 1) +#define CY_CAPSENSE_MW_VERSION (100) +#else +#define CY_CAPSENSE_MW_VERSION (100) +#endif +#endif + +/* Check the used Middleware version */ +#if (CY_CAPSENSE_MW_VERSION_REQUIRED > CY_CAPSENSE_MW_VERSION) +#error The CapSense Configurator requires a newer version of the CapSense Middleware. Update the CapSense Middleware in your project. +#endif + +#define CY_CAPSENSE_BIST_SUPPORTED (CY_CAPSENSE_MW_VERSION >= 210) + +#if defined(__cplusplus) +extern "C" { +#endif + +/* Widget names */ +#define CY_CAPSENSE_BUTTON0_WDGT_ID (0u) +#define CY_CAPSENSE_BUTTON1_WDGT_ID (1u) +#define CY_CAPSENSE_LINEARSLIDER0_WDGT_ID (2u) + +/* Button0 sensor names */ +#define CY_CAPSENSE_BUTTON0_SNS0_ID (0u) + +/* Button0 node names */ +#define CY_CAPSENSE_BUTTON0_RX0_TX0_ID (0u) + +/* Button0 sensor element IDs */ +#define CY_CAPSENSE_BUTTON0_RX0_ID (0u) +#define CY_CAPSENSE_BUTTON0_TX0_ID (1u) + +/* Button1 sensor names */ +#define CY_CAPSENSE_BUTTON1_SNS0_ID (0u) + +/* Button1 node names */ +#define CY_CAPSENSE_BUTTON1_RX0_TX0_ID (0u) + +/* Button1 sensor element IDs */ +#define CY_CAPSENSE_BUTTON1_RX0_ID (0u) +#define CY_CAPSENSE_BUTTON1_TX0_ID (1u) + +/* LinearSlider0 sensor names */ +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_ID (0u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_ID (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_ID (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_ID (3u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_ID (4u) + +typedef struct +{ + cy_stc_capsense_common_context_t commonContext; + cy_stc_capsense_widget_context_t widgetContext[3]; + cy_stc_capsense_sensor_context_t sensorContext[7]; + cy_stc_capsense_position_t position[1]; +} cy_stc_capsense_tuner_t; + +extern cy_stc_capsense_tuner_t cy_capsense_tuner; + +extern cy_stc_capsense_context_t cy_capsense_context; + +/* RAM Data structure register definitions */ +#if (CY_CAPSENSE_MW_VERSION < 300) +#define CY_CAPSENSE_CONFIG_ID_VALUE (cy_capsense_tuner.commonContext.configId) +#define CY_CAPSENSE_CONFIG_ID_OFFSET (0u) +#define CY_CAPSENSE_CONFIG_ID_SIZE (2u) +#define CY_CAPSENSE_CONFIG_ID_PARAM_ID (0x02000000u) + +#define CY_CAPSENSE_TUNER_CMD_VALUE (cy_capsense_tuner.commonContext.tunerCmd) +#define CY_CAPSENSE_TUNER_CMD_OFFSET (2u) +#define CY_CAPSENSE_TUNER_CMD_SIZE (2u) +#define CY_CAPSENSE_TUNER_CMD_PARAM_ID (0x02000002u) + +#define CY_CAPSENSE_SCAN_COUNTER_VALUE (cy_capsense_tuner.commonContext.scanCounter) +#define CY_CAPSENSE_SCAN_COUNTER_OFFSET (4u) +#define CY_CAPSENSE_SCAN_COUNTER_SIZE (2u) +#define CY_CAPSENSE_SCAN_COUNTER_PARAM_ID (0x02000004u) + +#define CY_CAPSENSE_TUNER_ST_VALUE (cy_capsense_tuner.commonContext.tunerSt) +#define CY_CAPSENSE_TUNER_ST_OFFSET (6u) +#define CY_CAPSENSE_TUNER_ST_SIZE (1u) +#define CY_CAPSENSE_TUNER_ST_PARAM_ID (0x01000006u) + +#define CY_CAPSENSE_INITDONE_VALUE (cy_capsense_tuner.commonContext.initDone) +#define CY_CAPSENSE_INITDONE_OFFSET (7u) +#define CY_CAPSENSE_INITDONE_SIZE (1u) +#define CY_CAPSENSE_INITDONE_PARAM_ID (0x01000007u) + +#define CY_CAPSENSE_PTRSSCALLBACK_VALUE (cy_capsense_tuner.commonContext.ptrSSCallback) +#define CY_CAPSENSE_PTRSSCALLBACK_OFFSET (8u) +#define CY_CAPSENSE_PTRSSCALLBACK_SIZE (4u) +#define CY_CAPSENSE_PTRSSCALLBACK_PARAM_ID (0x03000008u) + +#define CY_CAPSENSE_PTREOSCALLBACK_VALUE (cy_capsense_tuner.commonContext.ptrEOSCallback) +#define CY_CAPSENSE_PTREOSCALLBACK_OFFSET (12u) +#define CY_CAPSENSE_PTREOSCALLBACK_SIZE (4u) +#define CY_CAPSENSE_PTREOSCALLBACK_PARAM_ID (0x0300000cu) + +#define CY_CAPSENSE_PTRTUNERSENDCALLBACK_VALUE (cy_capsense_tuner.commonContext.ptrTunerSendCallback) +#define CY_CAPSENSE_PTRTUNERSENDCALLBACK_OFFSET (16u) +#define CY_CAPSENSE_PTRTUNERSENDCALLBACK_SIZE (4u) +#define CY_CAPSENSE_PTRTUNERSENDCALLBACK_PARAM_ID (0x03000010u) + +#define CY_CAPSENSE_PTRTUNERRECEIVECALLBACK_VALUE (cy_capsense_tuner.commonContext.ptrTunerReceiveCallback) +#define CY_CAPSENSE_PTRTUNERRECEIVECALLBACK_OFFSET (20u) +#define CY_CAPSENSE_PTRTUNERRECEIVECALLBACK_SIZE (4u) +#define CY_CAPSENSE_PTRTUNERRECEIVECALLBACK_PARAM_ID (0x03000014u) + +#define CY_CAPSENSE_STATUS_VALUE (cy_capsense_tuner.commonContext.status) +#define CY_CAPSENSE_STATUS_OFFSET (24u) +#define CY_CAPSENSE_STATUS_SIZE (4u) +#define CY_CAPSENSE_STATUS_PARAM_ID (0x03000018u) + +#define CY_CAPSENSE_TIMESTAMPINTERVAL_VALUE (cy_capsense_tuner.commonContext.timestampInterval) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_OFFSET (28u) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_SIZE (4u) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_PARAM_ID (0x0300001cu) + +#define CY_CAPSENSE_TIMESTAMP_VALUE (cy_capsense_tuner.commonContext.timestamp) +#define CY_CAPSENSE_TIMESTAMP_OFFSET (32u) +#define CY_CAPSENSE_TIMESTAMP_SIZE (4u) +#define CY_CAPSENSE_TIMESTAMP_PARAM_ID (0x03000020u) + +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_VALUE (cy_capsense_tuner.commonContext.modCsdClk) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_OFFSET (36u) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_SIZE (1u) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_PARAM_ID (0x01000024u) + +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_VALUE (cy_capsense_tuner.commonContext.modCsxClk) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_OFFSET (37u) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_SIZE (1u) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_PARAM_ID (0x01000025u) + +#define CY_CAPSENSE_TUNER_CNT_VALUE (cy_capsense_tuner.commonContext.tunerCnt) +#define CY_CAPSENSE_TUNER_CNT_OFFSET (38u) +#define CY_CAPSENSE_TUNER_CNT_SIZE (1u) +#define CY_CAPSENSE_TUNER_CNT_PARAM_ID (0x01000026u) + +#define CY_CAPSENSE_BUTTON0_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[0].fingerCap) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_OFFSET (40u) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_PARAM_ID (0x06000028u) + +#define CY_CAPSENSE_BUTTON0_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[0].sigPFC) +#define CY_CAPSENSE_BUTTON0_SIGPFC_OFFSET (42u) +#define CY_CAPSENSE_BUTTON0_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_SIGPFC_PARAM_ID (0x0600002au) + +#define CY_CAPSENSE_BUTTON0_NUM_CONV_VALUE (cy_capsense_tuner.widgetContext[0].resolution) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_OFFSET (44u) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_PARAM_ID (0x0600002cu) + +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[0].maxRawCount) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_OFFSET (46u) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_PARAM_ID (0x0600002eu) + +#define CY_CAPSENSE_BUTTON0_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[0].fingerTh) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_OFFSET (48u) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_PARAM_ID (0x06000030u) + +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[0].proxTh) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_OFFSET (50u) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_PARAM_ID (0x06000032u) + +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[0].lowBslnRst) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_OFFSET (52u) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_PARAM_ID (0x06000034u) + +#define CY_CAPSENSE_BUTTON0_TX_CLK_VALUE (cy_capsense_tuner.widgetContext[0].snsClk) +#define CY_CAPSENSE_BUTTON0_TX_CLK_OFFSET (54u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_PARAM_ID (0x06000036u) + +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[0].rowSnsClk) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_OFFSET (56u) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_PARAM_ID (0x06000038u) + +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[0].gestureDetected) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_OFFSET (58u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_PARAM_ID (0x0200003au) + +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[0].gestureDirection) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_OFFSET (60u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_PARAM_ID (0x0200003cu) + +#define CY_CAPSENSE_BUTTON0_XDELTA_VALUE (cy_capsense_tuner.widgetContext[0].xDelta) +#define CY_CAPSENSE_BUTTON0_XDELTA_OFFSET (62u) +#define CY_CAPSENSE_BUTTON0_XDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_XDELTA_PARAM_ID (0x0200003eu) + +#define CY_CAPSENSE_BUTTON0_YDELTA_VALUE (cy_capsense_tuner.widgetContext[0].yDelta) +#define CY_CAPSENSE_BUTTON0_YDELTA_OFFSET (64u) +#define CY_CAPSENSE_BUTTON0_YDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_YDELTA_PARAM_ID (0x02000040u) + +#define CY_CAPSENSE_BUTTON0_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[0].noiseTh) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_OFFSET (66u) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_PARAM_ID (0x05000042u) + +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[0].nNoiseTh) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_OFFSET (67u) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_PARAM_ID (0x05000043u) + +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[0].hysteresis) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_OFFSET (68u) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_PARAM_ID (0x05000044u) + +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[0].onDebounce) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_OFFSET (69u) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_PARAM_ID (0x05000045u) + +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[0].snsClkSource) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_OFFSET (70u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_PARAM_ID (0x05000046u) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[0]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_OFFSET (71u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_PARAM_ID (0x05000047u) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[1]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_OFFSET (72u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_PARAM_ID (0x05000048u) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[2]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_OFFSET (73u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_PARAM_ID (0x05000049u) + +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[0].idacGainIndex) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_OFFSET (74u) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_PARAM_ID (0x0500004au) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[0]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_OFFSET (75u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_PARAM_ID (0x0500004bu) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[1]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_OFFSET (76u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_PARAM_ID (0x0500004cu) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[2]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_OFFSET (77u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_PARAM_ID (0x0500004du) + +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[0].bslnCoeff) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_OFFSET (78u) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_PARAM_ID (0x0500004eu) + +#define CY_CAPSENSE_BUTTON0_STATUS_VALUE (cy_capsense_tuner.widgetContext[0].status) +#define CY_CAPSENSE_BUTTON0_STATUS_OFFSET (79u) +#define CY_CAPSENSE_BUTTON0_STATUS_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_STATUS_PARAM_ID (0x0100004fu) + +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[0].wdTouch.ptrPosition) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_OFFSET (80u) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_PARAM_ID (0x03000050u) + +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[0].wdTouch.numPosition) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_OFFSET (84u) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_PARAM_ID (0x01000054u) + +#define CY_CAPSENSE_BUTTON1_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[1].fingerCap) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_OFFSET (88u) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_PARAM_ID (0x06010058u) + +#define CY_CAPSENSE_BUTTON1_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[1].sigPFC) +#define CY_CAPSENSE_BUTTON1_SIGPFC_OFFSET (90u) +#define CY_CAPSENSE_BUTTON1_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_SIGPFC_PARAM_ID (0x0601005au) + +#define CY_CAPSENSE_BUTTON1_NUM_CONV_VALUE (cy_capsense_tuner.widgetContext[1].resolution) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_OFFSET (92u) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_PARAM_ID (0x0601005cu) + +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[1].maxRawCount) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_OFFSET (94u) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_PARAM_ID (0x0601005eu) + +#define CY_CAPSENSE_BUTTON1_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[1].fingerTh) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_OFFSET (96u) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_PARAM_ID (0x06010060u) + +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[1].proxTh) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_OFFSET (98u) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_PARAM_ID (0x06010062u) + +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[1].lowBslnRst) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_OFFSET (100u) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_PARAM_ID (0x06010064u) + +#define CY_CAPSENSE_BUTTON1_TX_CLK_VALUE (cy_capsense_tuner.widgetContext[1].snsClk) +#define CY_CAPSENSE_BUTTON1_TX_CLK_OFFSET (102u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_PARAM_ID (0x06010066u) + +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[1].rowSnsClk) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_OFFSET (104u) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_PARAM_ID (0x06010068u) + +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[1].gestureDetected) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_OFFSET (106u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_PARAM_ID (0x0201006au) + +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[1].gestureDirection) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_OFFSET (108u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_PARAM_ID (0x0201006cu) + +#define CY_CAPSENSE_BUTTON1_XDELTA_VALUE (cy_capsense_tuner.widgetContext[1].xDelta) +#define CY_CAPSENSE_BUTTON1_XDELTA_OFFSET (110u) +#define CY_CAPSENSE_BUTTON1_XDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_XDELTA_PARAM_ID (0x0201006eu) + +#define CY_CAPSENSE_BUTTON1_YDELTA_VALUE (cy_capsense_tuner.widgetContext[1].yDelta) +#define CY_CAPSENSE_BUTTON1_YDELTA_OFFSET (112u) +#define CY_CAPSENSE_BUTTON1_YDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_YDELTA_PARAM_ID (0x02010070u) + +#define CY_CAPSENSE_BUTTON1_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[1].noiseTh) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_OFFSET (114u) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_PARAM_ID (0x05010072u) + +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[1].nNoiseTh) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_OFFSET (115u) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_PARAM_ID (0x05010073u) + +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[1].hysteresis) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_OFFSET (116u) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_PARAM_ID (0x05010074u) + +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[1].onDebounce) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_OFFSET (117u) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_PARAM_ID (0x05010075u) + +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[1].snsClkSource) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_OFFSET (118u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_PARAM_ID (0x05010076u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[0]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_OFFSET (119u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_PARAM_ID (0x05010077u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[1]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_OFFSET (120u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_PARAM_ID (0x05010078u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[2]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_OFFSET (121u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_PARAM_ID (0x05010079u) + +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[1].idacGainIndex) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_OFFSET (122u) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_PARAM_ID (0x0501007au) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[0]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_OFFSET (123u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_PARAM_ID (0x0501007bu) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[1]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_OFFSET (124u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_PARAM_ID (0x0501007cu) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[2]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_OFFSET (125u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_PARAM_ID (0x0501007du) + +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[1].bslnCoeff) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_OFFSET (126u) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_PARAM_ID (0x0501007eu) + +#define CY_CAPSENSE_BUTTON1_STATUS_VALUE (cy_capsense_tuner.widgetContext[1].status) +#define CY_CAPSENSE_BUTTON1_STATUS_OFFSET (127u) +#define CY_CAPSENSE_BUTTON1_STATUS_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_STATUS_PARAM_ID (0x0101007fu) + +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[1].wdTouch.ptrPosition) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_OFFSET (128u) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_PARAM_ID (0x03010080u) + +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[1].wdTouch.numPosition) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_OFFSET (132u) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_PARAM_ID (0x01010084u) + +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[2].fingerCap) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_OFFSET (136u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_PARAM_ID (0x06020088u) + +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[2].sigPFC) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_OFFSET (138u) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_PARAM_ID (0x0602008au) + +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_VALUE (cy_capsense_tuner.widgetContext[2].resolution) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_OFFSET (140u) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_PARAM_ID (0x0602008cu) + +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[2].maxRawCount) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_OFFSET (142u) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_PARAM_ID (0x0602008eu) + +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[2].fingerTh) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_OFFSET (144u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_PARAM_ID (0x02020090u) + +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[2].proxTh) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_OFFSET (146u) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_PARAM_ID (0x02020092u) + +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[2].lowBslnRst) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_OFFSET (148u) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_PARAM_ID (0x06020094u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[2].snsClk) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_OFFSET (150u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_PARAM_ID (0x06020096u) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[2].rowSnsClk) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_OFFSET (152u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_PARAM_ID (0x06020098u) + +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[2].gestureDetected) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_OFFSET (154u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_PARAM_ID (0x0202009au) + +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[2].gestureDirection) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_OFFSET (156u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_PARAM_ID (0x0202009cu) + +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_VALUE (cy_capsense_tuner.widgetContext[2].xDelta) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_OFFSET (158u) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_PARAM_ID (0x0202009eu) + +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_VALUE (cy_capsense_tuner.widgetContext[2].yDelta) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_OFFSET (160u) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_PARAM_ID (0x020200a0u) + +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[2].noiseTh) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_OFFSET (162u) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_PARAM_ID (0x010200a2u) + +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[2].nNoiseTh) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_OFFSET (163u) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_PARAM_ID (0x010200a3u) + +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[2].hysteresis) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_OFFSET (164u) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_PARAM_ID (0x010200a4u) + +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[2].onDebounce) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_OFFSET (165u) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_PARAM_ID (0x050200a5u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[2].snsClkSource) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_OFFSET (166u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_PARAM_ID (0x050200a6u) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[0]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_OFFSET (167u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_PARAM_ID (0x050200a7u) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[1]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_OFFSET (168u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_PARAM_ID (0x050200a8u) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[2]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_OFFSET (169u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_PARAM_ID (0x050200a9u) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[2].idacGainIndex) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_OFFSET (170u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_PARAM_ID (0x050200aau) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[0]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_OFFSET (171u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_PARAM_ID (0x050200abu) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[1]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_OFFSET (172u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_PARAM_ID (0x050200acu) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[2]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_OFFSET (173u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_PARAM_ID (0x050200adu) + +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[2].bslnCoeff) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_OFFSET (174u) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_PARAM_ID (0x050200aeu) + +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_VALUE (cy_capsense_tuner.widgetContext[2].status) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_OFFSET (175u) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_PARAM_ID (0x010200afu) + +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[2].wdTouch.ptrPosition) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_OFFSET (176u) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_PARAM_ID (0x030200b0u) + +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[2].wdTouch.numPosition) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_OFFSET (180u) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_PARAM_ID (0x010200b4u) + +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_VALUE (cy_capsense_tuner.sensorContext[0].raw) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_OFFSET (184u) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_PARAM_ID (0x020000b8u) + +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[0].bsln) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_OFFSET (186u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_PARAM_ID (0x020000bau) + +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[0].diff) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_OFFSET (188u) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_PARAM_ID (0x020000bcu) + +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[0].status) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_OFFSET (190u) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_PARAM_ID (0x010000beu) + +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[0].negBslnRstCnt) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_OFFSET (191u) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010000bfu) + +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[0].idacComp) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_OFFSET (192u) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_PARAM_ID (0x010000c0u) + +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[0].bslnExt) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_OFFSET (193u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_PARAM_ID (0x010000c1u) + +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_VALUE (cy_capsense_tuner.sensorContext[1].raw) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_OFFSET (194u) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_PARAM_ID (0x020100c2u) + +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[1].bsln) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_OFFSET (196u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_PARAM_ID (0x020100c4u) + +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[1].diff) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_OFFSET (198u) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_PARAM_ID (0x020100c6u) + +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[1].status) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_OFFSET (200u) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_PARAM_ID (0x010100c8u) + +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[1].negBslnRstCnt) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_OFFSET (201u) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010100c9u) + +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[1].idacComp) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_OFFSET (202u) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_PARAM_ID (0x010100cau) + +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[1].bslnExt) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_OFFSET (203u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_PARAM_ID (0x010100cbu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_VALUE (cy_capsense_tuner.sensorContext[2].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_OFFSET (204u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_PARAM_ID (0x020200ccu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[2].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_OFFSET (206u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_PARAM_ID (0x020200ceu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[2].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_OFFSET (208u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_PARAM_ID (0x020200d0u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[2].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_OFFSET (210u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_PARAM_ID (0x010200d2u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[2].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_OFFSET (211u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200d3u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[2].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_OFFSET (212u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_PARAM_ID (0x010200d4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[2].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_OFFSET (213u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_PARAM_ID (0x010200d5u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_VALUE (cy_capsense_tuner.sensorContext[3].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_OFFSET (214u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_PARAM_ID (0x020200d6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_VALUE (cy_capsense_tuner.sensorContext[3].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_OFFSET (216u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_PARAM_ID (0x020200d8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_VALUE (cy_capsense_tuner.sensorContext[3].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_OFFSET (218u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_PARAM_ID (0x020200dau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_VALUE (cy_capsense_tuner.sensorContext[3].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_OFFSET (220u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_PARAM_ID (0x010200dcu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[3].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_OFFSET (221u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200ddu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_VALUE (cy_capsense_tuner.sensorContext[3].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_OFFSET (222u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_PARAM_ID (0x010200deu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[3].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_OFFSET (223u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_PARAM_ID (0x010200dfu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_VALUE (cy_capsense_tuner.sensorContext[4].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_OFFSET (224u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_PARAM_ID (0x020200e0u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_VALUE (cy_capsense_tuner.sensorContext[4].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_OFFSET (226u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_PARAM_ID (0x020200e2u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_VALUE (cy_capsense_tuner.sensorContext[4].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_OFFSET (228u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_PARAM_ID (0x020200e4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_VALUE (cy_capsense_tuner.sensorContext[4].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_OFFSET (230u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_PARAM_ID (0x010200e6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[4].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_OFFSET (231u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200e7u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_VALUE (cy_capsense_tuner.sensorContext[4].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_OFFSET (232u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_PARAM_ID (0x010200e8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[4].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_OFFSET (233u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_PARAM_ID (0x010200e9u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_VALUE (cy_capsense_tuner.sensorContext[5].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_OFFSET (234u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_PARAM_ID (0x020200eau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_VALUE (cy_capsense_tuner.sensorContext[5].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_OFFSET (236u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_PARAM_ID (0x020200ecu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_VALUE (cy_capsense_tuner.sensorContext[5].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_OFFSET (238u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_PARAM_ID (0x020200eeu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_VALUE (cy_capsense_tuner.sensorContext[5].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_OFFSET (240u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_PARAM_ID (0x010200f0u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[5].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_OFFSET (241u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200f1u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_VALUE (cy_capsense_tuner.sensorContext[5].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_OFFSET (242u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_PARAM_ID (0x010200f2u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[5].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_OFFSET (243u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_PARAM_ID (0x010200f3u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_VALUE (cy_capsense_tuner.sensorContext[6].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_OFFSET (244u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_PARAM_ID (0x020200f4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_VALUE (cy_capsense_tuner.sensorContext[6].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_OFFSET (246u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_PARAM_ID (0x020200f6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_VALUE (cy_capsense_tuner.sensorContext[6].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_OFFSET (248u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_PARAM_ID (0x020200f8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_VALUE (cy_capsense_tuner.sensorContext[6].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_OFFSET (250u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_PARAM_ID (0x010200fau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[6].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_OFFSET (251u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200fbu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_VALUE (cy_capsense_tuner.sensorContext[6].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_OFFSET (252u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_PARAM_ID (0x010200fcu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[6].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_OFFSET (253u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_PARAM_ID (0x010200fdu) + +#define CY_CAPSENSE_LINEARSLIDER0_X0_VALUE (cy_capsense_tuner.position[0].x) +#define CY_CAPSENSE_LINEARSLIDER0_X0_OFFSET (254u) +#define CY_CAPSENSE_LINEARSLIDER0_X0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_X0_PARAM_ID (0x020200feu) + +#define CY_CAPSENSE_LINEARSLIDER0_Y0_VALUE (cy_capsense_tuner.position[0].y) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_OFFSET (256u) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_PARAM_ID (0x02020100u) + +#define CY_CAPSENSE_LINEARSLIDER0_Z0_VALUE (cy_capsense_tuner.position[0].z) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_OFFSET (258u) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_PARAM_ID (0x02020102u) + +#define CY_CAPSENSE_LINEARSLIDER0_ID0_VALUE (cy_capsense_tuner.position[0].id) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_OFFSET (260u) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_PARAM_ID (0x02020104u) + +#else /* CY_CAPSENSE_MW_VERSION >= 300 */ +#define CY_CAPSENSE_CONFIG_ID_VALUE (cy_capsense_tuner.commonContext.configId) +#define CY_CAPSENSE_CONFIG_ID_OFFSET (0u) +#define CY_CAPSENSE_CONFIG_ID_SIZE (2u) +#define CY_CAPSENSE_CONFIG_ID_PARAM_ID (0x02000000u) + +#define CY_CAPSENSE_TUNER_CMD_VALUE (cy_capsense_tuner.commonContext.tunerCmd) +#define CY_CAPSENSE_TUNER_CMD_OFFSET (2u) +#define CY_CAPSENSE_TUNER_CMD_SIZE (2u) +#define CY_CAPSENSE_TUNER_CMD_PARAM_ID (0x02000002u) + +#define CY_CAPSENSE_SCAN_COUNTER_VALUE (cy_capsense_tuner.commonContext.scanCounter) +#define CY_CAPSENSE_SCAN_COUNTER_OFFSET (4u) +#define CY_CAPSENSE_SCAN_COUNTER_SIZE (2u) +#define CY_CAPSENSE_SCAN_COUNTER_PARAM_ID (0x02000004u) + +#define CY_CAPSENSE_TUNER_ST_VALUE (cy_capsense_tuner.commonContext.tunerSt) +#define CY_CAPSENSE_TUNER_ST_OFFSET (6u) +#define CY_CAPSENSE_TUNER_ST_SIZE (1u) +#define CY_CAPSENSE_TUNER_ST_PARAM_ID (0x01000006u) + +#define CY_CAPSENSE_INITDONE_VALUE (cy_capsense_tuner.commonContext.initDone) +#define CY_CAPSENSE_INITDONE_OFFSET (7u) +#define CY_CAPSENSE_INITDONE_SIZE (1u) +#define CY_CAPSENSE_INITDONE_PARAM_ID (0x01000007u) + +#define CY_CAPSENSE_STATUS_VALUE (cy_capsense_tuner.commonContext.status) +#define CY_CAPSENSE_STATUS_OFFSET (8u) +#define CY_CAPSENSE_STATUS_SIZE (4u) +#define CY_CAPSENSE_STATUS_PARAM_ID (0x03000008u) + +#define CY_CAPSENSE_TIMESTAMPINTERVAL_VALUE (cy_capsense_tuner.commonContext.timestampInterval) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_OFFSET (12u) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_SIZE (4u) +#define CY_CAPSENSE_TIMESTAMPINTERVAL_PARAM_ID (0x0300000cu) + +#define CY_CAPSENSE_TIMESTAMP_VALUE (cy_capsense_tuner.commonContext.timestamp) +#define CY_CAPSENSE_TIMESTAMP_OFFSET (16u) +#define CY_CAPSENSE_TIMESTAMP_SIZE (4u) +#define CY_CAPSENSE_TIMESTAMP_PARAM_ID (0x03000010u) + +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_VALUE (cy_capsense_tuner.commonContext.modCsdClk) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_OFFSET (20u) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_SIZE (1u) +#define CY_CAPSENSE_CSD_MOD_CLK_DIVIDER_PARAM_ID (0x01000014u) + +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_VALUE (cy_capsense_tuner.commonContext.modCsxClk) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_OFFSET (21u) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_SIZE (1u) +#define CY_CAPSENSE_CSX_MOD_CLK_DIVIDER_PARAM_ID (0x01000015u) + +#define CY_CAPSENSE_TUNER_CNT_VALUE (cy_capsense_tuner.commonContext.tunerCnt) +#define CY_CAPSENSE_TUNER_CNT_OFFSET (22u) +#define CY_CAPSENSE_TUNER_CNT_SIZE (1u) +#define CY_CAPSENSE_TUNER_CNT_PARAM_ID (0x01000016u) + +#define CY_CAPSENSE_BUTTON0_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[0].fingerCap) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_OFFSET (24u) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_FINGER_CP_PARAM_ID (0x06000018u) + +#define CY_CAPSENSE_BUTTON0_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[0].sigPFC) +#define CY_CAPSENSE_BUTTON0_SIGPFC_OFFSET (26u) +#define CY_CAPSENSE_BUTTON0_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_SIGPFC_PARAM_ID (0x0600001au) + +#define CY_CAPSENSE_BUTTON0_NUM_CONV_VALUE (cy_capsense_tuner.widgetContext[0].resolution) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_OFFSET (28u) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_NUM_CONV_PARAM_ID (0x0600001cu) + +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[0].maxRawCount) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_OFFSET (30u) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_MAX_RAW_COUNT_PARAM_ID (0x0600001eu) + +#define CY_CAPSENSE_BUTTON0_ROW_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[0].maxRawCountRow) +#define CY_CAPSENSE_BUTTON0_ROW_MAX_RAW_COUNT_OFFSET (32u) +#define CY_CAPSENSE_BUTTON0_ROW_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_ROW_MAX_RAW_COUNT_PARAM_ID (0x06000020u) + +#define CY_CAPSENSE_BUTTON0_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[0].fingerTh) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_OFFSET (34u) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_FINGER_TH_PARAM_ID (0x06000022u) + +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[0].proxTh) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_OFFSET (36u) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_PROX_TOUCH_TH_PARAM_ID (0x06000024u) + +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[0].lowBslnRst) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_OFFSET (38u) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_LOW_BSLN_RST_PARAM_ID (0x06000026u) + +#define CY_CAPSENSE_BUTTON0_TX_CLK_VALUE (cy_capsense_tuner.widgetContext[0].snsClk) +#define CY_CAPSENSE_BUTTON0_TX_CLK_OFFSET (40u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_PARAM_ID (0x06000028u) + +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[0].rowSnsClk) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_OFFSET (42u) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_ROW_SNS_CLK_PARAM_ID (0x0600002au) + +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[0].gestureDetected) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_OFFSET (44u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DETECTED_PARAM_ID (0x0200002cu) + +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[0].gestureDirection) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_OFFSET (46u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_GESTURE_DIRECTION_PARAM_ID (0x0200002eu) + +#define CY_CAPSENSE_BUTTON0_XDELTA_VALUE (cy_capsense_tuner.widgetContext[0].xDelta) +#define CY_CAPSENSE_BUTTON0_XDELTA_OFFSET (48u) +#define CY_CAPSENSE_BUTTON0_XDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_XDELTA_PARAM_ID (0x02000030u) + +#define CY_CAPSENSE_BUTTON0_YDELTA_VALUE (cy_capsense_tuner.widgetContext[0].yDelta) +#define CY_CAPSENSE_BUTTON0_YDELTA_OFFSET (50u) +#define CY_CAPSENSE_BUTTON0_YDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_YDELTA_PARAM_ID (0x02000032u) + +#define CY_CAPSENSE_BUTTON0_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[0].noiseTh) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_OFFSET (52u) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_NOISE_TH_PARAM_ID (0x06000034u) + +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[0].nNoiseTh) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_OFFSET (54u) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_NNOISE_TH_PARAM_ID (0x06000036u) + +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[0].hysteresis) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_OFFSET (56u) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_HYSTERESIS_PARAM_ID (0x06000038u) + +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[0].onDebounce) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_OFFSET (58u) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ON_DEBOUNCE_PARAM_ID (0x0500003au) + +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[0].snsClkSource) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_OFFSET (59u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_TX_CLK_SOURCE_PARAM_ID (0x0500003bu) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[0]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_OFFSET (60u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD0_PARAM_ID (0x0500003cu) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[1]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_OFFSET (61u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD1_PARAM_ID (0x0500003du) + +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[0].idacMod[2]) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_OFFSET (62u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_MOD2_PARAM_ID (0x0500003eu) + +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[0].idacGainIndex) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_OFFSET (63u) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_IDAC_GAIN_INDEX_PARAM_ID (0x0500003fu) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[0]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_OFFSET (64u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD0_PARAM_ID (0x05000040u) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[1]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_OFFSET (65u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD1_PARAM_ID (0x05000041u) + +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[0].rowIdacMod[2]) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_OFFSET (66u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_ROW_IDAC_MOD2_PARAM_ID (0x05000042u) + +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[0].bslnCoeff) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_OFFSET (67u) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_REGULAR_IIR_BL_N_PARAM_ID (0x05000043u) + +#define CY_CAPSENSE_BUTTON0_STATUS_VALUE (cy_capsense_tuner.widgetContext[0].status) +#define CY_CAPSENSE_BUTTON0_STATUS_OFFSET (68u) +#define CY_CAPSENSE_BUTTON0_STATUS_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_STATUS_PARAM_ID (0x01000044u) + +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[0].wdTouch.ptrPosition) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_OFFSET (72u) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_BUTTON0_PTRPOSITION_PARAM_ID (0x03000048u) + +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[0].wdTouch.numPosition) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_OFFSET (76u) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_NUM_POSITIONS_PARAM_ID (0x0100004cu) + +#define CY_CAPSENSE_BUTTON1_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[1].fingerCap) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_OFFSET (80u) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_FINGER_CP_PARAM_ID (0x06010050u) + +#define CY_CAPSENSE_BUTTON1_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[1].sigPFC) +#define CY_CAPSENSE_BUTTON1_SIGPFC_OFFSET (82u) +#define CY_CAPSENSE_BUTTON1_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_SIGPFC_PARAM_ID (0x06010052u) + +#define CY_CAPSENSE_BUTTON1_NUM_CONV_VALUE (cy_capsense_tuner.widgetContext[1].resolution) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_OFFSET (84u) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_NUM_CONV_PARAM_ID (0x06010054u) + +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[1].maxRawCount) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_OFFSET (86u) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_MAX_RAW_COUNT_PARAM_ID (0x06010056u) + +#define CY_CAPSENSE_BUTTON1_ROW_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[1].maxRawCountRow) +#define CY_CAPSENSE_BUTTON1_ROW_MAX_RAW_COUNT_OFFSET (88u) +#define CY_CAPSENSE_BUTTON1_ROW_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_ROW_MAX_RAW_COUNT_PARAM_ID (0x06010058u) + +#define CY_CAPSENSE_BUTTON1_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[1].fingerTh) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_OFFSET (90u) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_FINGER_TH_PARAM_ID (0x0601005au) + +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[1].proxTh) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_OFFSET (92u) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_PROX_TOUCH_TH_PARAM_ID (0x0601005cu) + +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[1].lowBslnRst) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_OFFSET (94u) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_LOW_BSLN_RST_PARAM_ID (0x0601005eu) + +#define CY_CAPSENSE_BUTTON1_TX_CLK_VALUE (cy_capsense_tuner.widgetContext[1].snsClk) +#define CY_CAPSENSE_BUTTON1_TX_CLK_OFFSET (96u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_PARAM_ID (0x06010060u) + +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[1].rowSnsClk) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_OFFSET (98u) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_ROW_SNS_CLK_PARAM_ID (0x06010062u) + +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[1].gestureDetected) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_OFFSET (100u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DETECTED_PARAM_ID (0x02010064u) + +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[1].gestureDirection) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_OFFSET (102u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_GESTURE_DIRECTION_PARAM_ID (0x02010066u) + +#define CY_CAPSENSE_BUTTON1_XDELTA_VALUE (cy_capsense_tuner.widgetContext[1].xDelta) +#define CY_CAPSENSE_BUTTON1_XDELTA_OFFSET (104u) +#define CY_CAPSENSE_BUTTON1_XDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_XDELTA_PARAM_ID (0x02010068u) + +#define CY_CAPSENSE_BUTTON1_YDELTA_VALUE (cy_capsense_tuner.widgetContext[1].yDelta) +#define CY_CAPSENSE_BUTTON1_YDELTA_OFFSET (106u) +#define CY_CAPSENSE_BUTTON1_YDELTA_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_YDELTA_PARAM_ID (0x0201006au) + +#define CY_CAPSENSE_BUTTON1_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[1].noiseTh) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_OFFSET (108u) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_NOISE_TH_PARAM_ID (0x0601006cu) + +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[1].nNoiseTh) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_OFFSET (110u) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_NNOISE_TH_PARAM_ID (0x0601006eu) + +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[1].hysteresis) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_OFFSET (112u) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_HYSTERESIS_PARAM_ID (0x06010070u) + +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[1].onDebounce) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_OFFSET (114u) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ON_DEBOUNCE_PARAM_ID (0x05010072u) + +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[1].snsClkSource) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_OFFSET (115u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_TX_CLK_SOURCE_PARAM_ID (0x05010073u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[0]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_OFFSET (116u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD0_PARAM_ID (0x05010074u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[1]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_OFFSET (117u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD1_PARAM_ID (0x05010075u) + +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[1].idacMod[2]) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_OFFSET (118u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_MOD2_PARAM_ID (0x05010076u) + +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[1].idacGainIndex) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_OFFSET (119u) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_IDAC_GAIN_INDEX_PARAM_ID (0x05010077u) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[0]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_OFFSET (120u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD0_PARAM_ID (0x05010078u) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[1]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_OFFSET (121u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD1_PARAM_ID (0x05010079u) + +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[1].rowIdacMod[2]) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_OFFSET (122u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_ROW_IDAC_MOD2_PARAM_ID (0x0501007au) + +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[1].bslnCoeff) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_OFFSET (123u) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_REGULAR_IIR_BL_N_PARAM_ID (0x0501007bu) + +#define CY_CAPSENSE_BUTTON1_STATUS_VALUE (cy_capsense_tuner.widgetContext[1].status) +#define CY_CAPSENSE_BUTTON1_STATUS_OFFSET (124u) +#define CY_CAPSENSE_BUTTON1_STATUS_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_STATUS_PARAM_ID (0x0101007cu) + +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[1].wdTouch.ptrPosition) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_OFFSET (128u) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_BUTTON1_PTRPOSITION_PARAM_ID (0x03010080u) + +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[1].wdTouch.numPosition) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_OFFSET (132u) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_NUM_POSITIONS_PARAM_ID (0x01010084u) + +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_VALUE (cy_capsense_tuner.widgetContext[2].fingerCap) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_OFFSET (136u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_CP_PARAM_ID (0x06020088u) + +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_VALUE (cy_capsense_tuner.widgetContext[2].sigPFC) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_OFFSET (138u) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SIGPFC_PARAM_ID (0x0602008au) + +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_VALUE (cy_capsense_tuner.widgetContext[2].resolution) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_OFFSET (140u) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_RESOLUTION_PARAM_ID (0x0602008cu) + +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[2].maxRawCount) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_OFFSET (142u) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_MAX_RAW_COUNT_PARAM_ID (0x0602008eu) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_MAX_RAW_COUNT_VALUE (cy_capsense_tuner.widgetContext[2].maxRawCountRow) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_MAX_RAW_COUNT_OFFSET (144u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_MAX_RAW_COUNT_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_MAX_RAW_COUNT_PARAM_ID (0x06020090u) + +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_VALUE (cy_capsense_tuner.widgetContext[2].fingerTh) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_OFFSET (146u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_FINGER_TH_PARAM_ID (0x02020092u) + +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_VALUE (cy_capsense_tuner.widgetContext[2].proxTh) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_OFFSET (148u) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_PROX_TOUCH_TH_PARAM_ID (0x02020094u) + +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_VALUE (cy_capsense_tuner.widgetContext[2].lowBslnRst) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_OFFSET (150u) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_LOW_BSLN_RST_PARAM_ID (0x06020096u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[2].snsClk) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_OFFSET (152u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_PARAM_ID (0x06020098u) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_VALUE (cy_capsense_tuner.widgetContext[2].rowSnsClk) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_OFFSET (154u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_SNS_CLK_PARAM_ID (0x0602009au) + +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_VALUE (cy_capsense_tuner.widgetContext[2].gestureDetected) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_OFFSET (156u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DETECTED_PARAM_ID (0x0202009cu) + +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_VALUE (cy_capsense_tuner.widgetContext[2].gestureDirection) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_OFFSET (158u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_GESTURE_DIRECTION_PARAM_ID (0x0202009eu) + +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_VALUE (cy_capsense_tuner.widgetContext[2].xDelta) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_OFFSET (160u) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_XDELTA_PARAM_ID (0x020200a0u) + +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_VALUE (cy_capsense_tuner.widgetContext[2].yDelta) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_OFFSET (162u) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_YDELTA_PARAM_ID (0x020200a2u) + +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_VALUE (cy_capsense_tuner.widgetContext[2].noiseTh) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_OFFSET (164u) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_NOISE_TH_PARAM_ID (0x020200a4u) + +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_VALUE (cy_capsense_tuner.widgetContext[2].nNoiseTh) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_OFFSET (166u) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_NNOISE_TH_PARAM_ID (0x020200a6u) + +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_VALUE (cy_capsense_tuner.widgetContext[2].hysteresis) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_OFFSET (168u) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_HYSTERESIS_PARAM_ID (0x020200a8u) + +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_VALUE (cy_capsense_tuner.widgetContext[2].onDebounce) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_OFFSET (170u) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ON_DEBOUNCE_PARAM_ID (0x050200aau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_VALUE (cy_capsense_tuner.widgetContext[2].snsClkSource) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_OFFSET (171u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS_CLK_SOURCE_PARAM_ID (0x050200abu) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[0]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_OFFSET (172u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD0_PARAM_ID (0x050200acu) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[1]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_OFFSET (173u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD1_PARAM_ID (0x050200adu) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[2].idacMod[2]) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_OFFSET (174u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_MOD2_PARAM_ID (0x050200aeu) + +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_VALUE (cy_capsense_tuner.widgetContext[2].idacGainIndex) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_OFFSET (175u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_IDAC_GAIN_INDEX_PARAM_ID (0x050200afu) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[0]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_OFFSET (176u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD0_PARAM_ID (0x050200b0u) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[1]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_OFFSET (177u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD1_PARAM_ID (0x050200b1u) + +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_VALUE (cy_capsense_tuner.widgetContext[2].rowIdacMod[2]) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_OFFSET (178u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_ROW_IDAC_MOD2_PARAM_ID (0x050200b2u) + +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_VALUE (cy_capsense_tuner.widgetContext[2].bslnCoeff) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_OFFSET (179u) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_REGULAR_IIR_BL_N_PARAM_ID (0x050200b3u) + +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_VALUE (cy_capsense_tuner.widgetContext[2].status) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_OFFSET (180u) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_STATUS_PARAM_ID (0x010200b4u) + +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_VALUE (cy_capsense_tuner.widgetContext[2].wdTouch.ptrPosition) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_OFFSET (184u) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_SIZE (4u) +#define CY_CAPSENSE_LINEARSLIDER0_PTRPOSITION_PARAM_ID (0x030200b8u) + +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_VALUE (cy_capsense_tuner.widgetContext[2].wdTouch.numPosition) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_OFFSET (188u) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_POSITIONS_PARAM_ID (0x010200bcu) + +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_VALUE (cy_capsense_tuner.sensorContext[0].raw) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_OFFSET (192u) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_RAW0_PARAM_ID (0x020000c0u) + +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[0].bsln) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_OFFSET (194u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN0_PARAM_ID (0x020000c2u) + +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[0].diff) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_OFFSET (196u) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_BUTTON0_RX0_DIFF0_PARAM_ID (0x020000c4u) + +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[0].status) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_OFFSET (198u) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_STATUS0_PARAM_ID (0x010000c6u) + +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[0].negBslnRstCnt) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_OFFSET (199u) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010000c7u) + +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[0].idacComp) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_OFFSET (200u) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_IDAC0_PARAM_ID (0x010000c8u) + +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[0].bslnExt) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_OFFSET (201u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON0_RX0_BSLN_EXT0_PARAM_ID (0x010000c9u) + +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_VALUE (cy_capsense_tuner.sensorContext[1].raw) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_OFFSET (202u) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_RAW0_PARAM_ID (0x020100cau) + +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[1].bsln) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_OFFSET (204u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN0_PARAM_ID (0x020100ccu) + +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[1].diff) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_OFFSET (206u) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_BUTTON1_RX0_DIFF0_PARAM_ID (0x020100ceu) + +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[1].status) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_OFFSET (208u) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_STATUS0_PARAM_ID (0x010100d0u) + +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[1].negBslnRstCnt) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_OFFSET (209u) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010100d1u) + +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[1].idacComp) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_OFFSET (210u) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_IDAC0_PARAM_ID (0x010100d2u) + +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[1].bslnExt) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_OFFSET (211u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_BUTTON1_RX0_BSLN_EXT0_PARAM_ID (0x010100d3u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_VALUE (cy_capsense_tuner.sensorContext[2].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_OFFSET (212u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_RAW0_PARAM_ID (0x020200d4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_VALUE (cy_capsense_tuner.sensorContext[2].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_OFFSET (214u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN0_PARAM_ID (0x020200d6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_VALUE (cy_capsense_tuner.sensorContext[2].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_OFFSET (216u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_DIFF0_PARAM_ID (0x020200d8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_VALUE (cy_capsense_tuner.sensorContext[2].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_OFFSET (218u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_STATUS0_PARAM_ID (0x010200dau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[2].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_OFFSET (219u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200dbu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_VALUE (cy_capsense_tuner.sensorContext[2].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_OFFSET (220u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_IDAC0_PARAM_ID (0x010200dcu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[2].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_OFFSET (221u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_BSLN_EXT0_PARAM_ID (0x010200ddu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_VALUE (cy_capsense_tuner.sensorContext[3].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_OFFSET (222u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_RAW0_PARAM_ID (0x020200deu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_VALUE (cy_capsense_tuner.sensorContext[3].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_OFFSET (224u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN0_PARAM_ID (0x020200e0u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_VALUE (cy_capsense_tuner.sensorContext[3].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_OFFSET (226u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_DIFF0_PARAM_ID (0x020200e2u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_VALUE (cy_capsense_tuner.sensorContext[3].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_OFFSET (228u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_STATUS0_PARAM_ID (0x010200e4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[3].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_OFFSET (229u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200e5u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_VALUE (cy_capsense_tuner.sensorContext[3].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_OFFSET (230u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_IDAC0_PARAM_ID (0x010200e6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[3].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_OFFSET (231u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_BSLN_EXT0_PARAM_ID (0x010200e7u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_VALUE (cy_capsense_tuner.sensorContext[4].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_OFFSET (232u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_RAW0_PARAM_ID (0x020200e8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_VALUE (cy_capsense_tuner.sensorContext[4].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_OFFSET (234u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN0_PARAM_ID (0x020200eau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_VALUE (cy_capsense_tuner.sensorContext[4].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_OFFSET (236u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_DIFF0_PARAM_ID (0x020200ecu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_VALUE (cy_capsense_tuner.sensorContext[4].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_OFFSET (238u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_STATUS0_PARAM_ID (0x010200eeu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[4].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_OFFSET (239u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200efu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_VALUE (cy_capsense_tuner.sensorContext[4].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_OFFSET (240u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_IDAC0_PARAM_ID (0x010200f0u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[4].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_OFFSET (241u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_BSLN_EXT0_PARAM_ID (0x010200f1u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_VALUE (cy_capsense_tuner.sensorContext[5].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_OFFSET (242u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_RAW0_PARAM_ID (0x020200f2u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_VALUE (cy_capsense_tuner.sensorContext[5].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_OFFSET (244u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN0_PARAM_ID (0x020200f4u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_VALUE (cy_capsense_tuner.sensorContext[5].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_OFFSET (246u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_DIFF0_PARAM_ID (0x020200f6u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_VALUE (cy_capsense_tuner.sensorContext[5].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_OFFSET (248u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_STATUS0_PARAM_ID (0x010200f8u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[5].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_OFFSET (249u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_PARAM_ID (0x010200f9u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_VALUE (cy_capsense_tuner.sensorContext[5].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_OFFSET (250u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_IDAC0_PARAM_ID (0x010200fau) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[5].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_OFFSET (251u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_BSLN_EXT0_PARAM_ID (0x010200fbu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_VALUE (cy_capsense_tuner.sensorContext[6].raw) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_OFFSET (252u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_RAW0_PARAM_ID (0x020200fcu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_VALUE (cy_capsense_tuner.sensorContext[6].bsln) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_OFFSET (254u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN0_PARAM_ID (0x020200feu) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_VALUE (cy_capsense_tuner.sensorContext[6].diff) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_OFFSET (256u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_DIFF0_PARAM_ID (0x02020100u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_VALUE (cy_capsense_tuner.sensorContext[6].status) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_OFFSET (258u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_STATUS0_PARAM_ID (0x01020102u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_VALUE (cy_capsense_tuner.sensorContext[6].negBslnRstCnt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_OFFSET (259u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_PARAM_ID (0x01020103u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_VALUE (cy_capsense_tuner.sensorContext[6].idacComp) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_OFFSET (260u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_IDAC0_PARAM_ID (0x01020104u) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_VALUE (cy_capsense_tuner.sensorContext[6].bslnExt) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_OFFSET (261u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_SIZE (1u) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_BSLN_EXT0_PARAM_ID (0x01020105u) + +#define CY_CAPSENSE_LINEARSLIDER0_X0_VALUE (cy_capsense_tuner.position[0].x) +#define CY_CAPSENSE_LINEARSLIDER0_X0_OFFSET (262u) +#define CY_CAPSENSE_LINEARSLIDER0_X0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_X0_PARAM_ID (0x02020106u) + +#define CY_CAPSENSE_LINEARSLIDER0_Y0_VALUE (cy_capsense_tuner.position[0].y) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_OFFSET (264u) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_Y0_PARAM_ID (0x02020108u) + +#define CY_CAPSENSE_LINEARSLIDER0_Z0_VALUE (cy_capsense_tuner.position[0].z) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_OFFSET (266u) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_Z0_PARAM_ID (0x0202010au) + +#define CY_CAPSENSE_LINEARSLIDER0_ID0_VALUE (cy_capsense_tuner.position[0].id) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_OFFSET (268u) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_SIZE (2u) +#define CY_CAPSENSE_LINEARSLIDER0_ID0_PARAM_ID (0x0202010cu) + +#endif +/* cy_capsense_context */ +#define CY_CAPSENSE_COMMON_CONFIG_PTR_VALUE (cy_capsense_context.ptrCommonConfig) +#define CY_CAPSENSE_COMMON_CONFIG_PTR_SIZE (sizeof(cy_capsense_context.ptrCommonConfig)) + +#define CY_CAPSENSE_COMMON_CONTEXT_PTR_VALUE (cy_capsense_context.ptrCommonContext) +#define CY_CAPSENSE_COMMON_CONTEXT_PTR_SIZE (sizeof(cy_capsense_context.ptrCommonContext)) + +#define CY_CAPSENSE_INTERNAL_CONTEXT_PTR_VALUE (cy_capsense_context.ptrInternalContext) +#define CY_CAPSENSE_INTERNAL_CONTEXT_PTR_SIZE (sizeof(cy_capsense_context.ptrInternalContext)) + +#define CY_CAPSENSE_WD_CONFIG_PTR_VALUE (cy_capsense_context.ptrWdConfig) +#define CY_CAPSENSE_WD_CONFIG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig)) + +#define CY_CAPSENSE_WD_CONTEXT_PTR_VALUE (cy_capsense_context.ptrWdContext) +#define CY_CAPSENSE_WD_CONTEXT_PTR_SIZE (sizeof(cy_capsense_context.ptrWdContext)) + +#define CY_CAPSENSE_PIN_CONFIG_PTR_VALUE (cy_capsense_context.ptrPinConfig) +#define CY_CAPSENSE_PIN_CONFIG_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig)) + +#define CY_CAPSENSE_SHIELD_PIN_CONFIG_PTR_VALUE (cy_capsense_context.ptrShieldPinConfig) +#define CY_CAPSENSE_SHIELD_PIN_CONFIG_PTR_SIZE (sizeof(cy_capsense_context.ptrShieldPinConfig)) + +#define CY_CAPSENSE_ACTIVE_SCAN_SNS_PTR_VALUE (cy_capsense_context.ptrActiveScanSns) +#define CY_CAPSENSE_ACTIVE_SCAN_SNS_PTR_SIZE (sizeof(cy_capsense_context.ptrActiveScanSns)) + +#if (CY_CAPSENSE_MW_VERSION < 300) +#define CY_CAPSENSE_FPTR_CONFIG_PTR_VALUE (cy_capsense_context.ptrFptrConfig) +#define CY_CAPSENSE_FPTR_CONFIG_PTR_SIZE (sizeof(cy_capsense_context.ptrFptrConfig)) +#endif + +#define CY_CAPSENSE_BIST_CONTEXT_PTR_VALUE (cy_capsense_context.ptrBistContext) +#define CY_CAPSENSE_BIST_CONTEXT_PTR_SIZE (sizeof(cy_capsense_context.ptrBistContext)) + +/* cy_capsense_commonConfig */ +#define CY_CAPSENSE_CPU_CLK_HZ_VALUE (cy_capsense_context.ptrCommonConfig->cpuClkHz) +#define CY_CAPSENSE_CPU_CLK_HZ_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->cpuClkHz)) + +#define CY_CAPSENSE_PERI_CLK_HZ_VALUE (cy_capsense_context.ptrCommonConfig->periClkHz) +#define CY_CAPSENSE_PERI_CLK_HZ_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->periClkHz)) + +#define CY_CAPSENSE_VDDA_VALUE (cy_capsense_context.ptrCommonConfig->vdda) +#define CY_CAPSENSE_VDDA_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->vdda)) + +#define CY_CAPSENSE_NUM_PIN_VALUE (cy_capsense_context.ptrCommonConfig->numPin) +#define CY_CAPSENSE_NUM_PIN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->numPin)) + +#define CY_CAPSENSE_NUM_SNS_VALUE (cy_capsense_context.ptrCommonConfig->numSns) +#define CY_CAPSENSE_NUM_SNS_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->numSns)) + +#define CY_CAPSENSE_NUM_WD_VALUE (cy_capsense_context.ptrCommonConfig->numWd) +#define CY_CAPSENSE_NUM_WD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->numWd)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSD_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdEn) +#define CY_CAPSENSE_CSD_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdEn)) + +#define CY_CAPSENSE_CSX_EN_VALUE (cy_capsense_context.ptrCommonConfig->csxEn) +#define CY_CAPSENSE_CSX_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxEn)) + +#if (CY_CAPSENSE_MW_VERSION < 300) +#define CY_CAPSENSE_MFS_EN_VALUE (cy_capsense_context.ptrCommonConfig->mfsEn) +#define CY_CAPSENSE_MFS_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->mfsEn)) +#endif + +#define CY_CAPSENSE_BIST_EN_VALUE (cy_capsense_context.ptrCommonConfig->bistEn) +#define CY_CAPSENSE_BIST_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->bistEn)) + +#define CY_CAPSENSE_POSITION_FILTER_EN_VALUE (cy_capsense_context.ptrCommonConfig->positionFilterEn) +#define CY_CAPSENSE_POSITION_FILTER_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->positionFilterEn)) +#endif + +#define CY_CAPSENSE_PERI_DIVIDER_TYPE_VALUE (cy_capsense_context.ptrCommonConfig->periDividerType) +#define CY_CAPSENSE_PERI_DIVIDER_TYPE_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->periDividerType)) + +#define CY_CAPSENSE_PERI_DIVIDER_INDEX_VALUE (cy_capsense_context.ptrCommonConfig->periDividerIndex) +#define CY_CAPSENSE_PERI_DIVIDER_INDEX_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->periDividerIndex)) + +#define CY_CAPSENSE_ANALOG_WAKEUP_DELAY_VALUE (cy_capsense_context.ptrCommonConfig->analogWakeupDelay) +#define CY_CAPSENSE_ANALOG_WAKEUP_DELAY_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->analogWakeupDelay)) + +#define CY_CAPSENSE_SS_IREF_SOURCE_VALUE (cy_capsense_context.ptrCommonConfig->ssIrefSource) +#define CY_CAPSENSE_SS_IREF_SOURCE_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->ssIrefSource)) + +#define CY_CAPSENSE_SS_VREF_SOURCE_VALUE (cy_capsense_context.ptrCommonConfig->ssVrefSource) +#define CY_CAPSENSE_SS_VREF_SOURCE_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->ssVrefSource)) + +#define CY_CAPSENSE_PROX_TOUCH_COEFF_VALUE (cy_capsense_context.ptrCommonConfig->proxTouchCoeff) +#define CY_CAPSENSE_PROX_TOUCH_COEFF_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->proxTouchCoeff)) + +#define CY_CAPSENSE_SW_SENSOR_AUTO_RESET_EN_VALUE (cy_capsense_context.ptrCommonConfig->swSensorAutoResetEn) +#define CY_CAPSENSE_SW_SENSOR_AUTO_RESET_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->swSensorAutoResetEn)) + +#define CY_CAPSENSE_PORT_CMOD_PAD_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portCmodPadNum) +#define CY_CAPSENSE_PORT_CMOD_PAD_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCmodPadNum)) + +#define CY_CAPSENSE_PIN_CMOD_PAD_VALUE (cy_capsense_context.ptrCommonConfig->pinCmodPad) +#define CY_CAPSENSE_PIN_CMOD_PAD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCmodPad)) + +#define CY_CAPSENSE_PORT_CSH_PAD_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portCshPadNum) +#define CY_CAPSENSE_PORT_CSH_PAD_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCshPadNum)) + +#define CY_CAPSENSE_PIN_CSH_PAD_VALUE (cy_capsense_context.ptrCommonConfig->pinCshPad) +#define CY_CAPSENSE_PIN_CSH_PAD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCshPad)) + +#define CY_CAPSENSE_PORT_SHIELD_PAD_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portShieldPadNum) +#define CY_CAPSENSE_PORT_SHIELD_PAD_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portShieldPadNum)) + +#define CY_CAPSENSE_PIN_SHIELD_PAD_VALUE (cy_capsense_context.ptrCommonConfig->pinShieldPad) +#define CY_CAPSENSE_PIN_SHIELD_PAD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinShieldPad)) + +#define CY_CAPSENSE_PORT_VREF_EXT_PAD_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portVrefExtPadNum) +#define CY_CAPSENSE_PORT_VREF_EXT_PAD_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portVrefExtPadNum)) + +#define CY_CAPSENSE_PIN_VREF_EXT_PAD_VALUE (cy_capsense_context.ptrCommonConfig->pinVrefExtPad) +#define CY_CAPSENSE_PIN_VREF_EXT_PAD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinVrefExtPad)) + +#define CY_CAPSENSE_PORT_CMOD_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portCmodNum) +#define CY_CAPSENSE_PORT_CMOD_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCmodNum)) + +#define CY_CAPSENSE_IDAC_GAIN_TABLE_PTR_VALUE (&cy_capsense_context.ptrCommonConfig->idacGainTable[0u]) +#define CY_CAPSENSE_IDAC_GAIN_TABLE_PTR_SIZE (sizeof(&cy_capsense_context.ptrCommonConfig->idacGainTable[0u])) + +#define CY_CAPSENSE_PTR_CSD_BASE_VALUE (cy_capsense_context.ptrCommonConfig->ptrCsdBase) +#define CY_CAPSENSE_PTR_CSD_BASE_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->ptrCsdBase)) + +#define CY_CAPSENSE_PTR_CSD_CONTEXT_VALUE (cy_capsense_context.ptrCommonConfig->ptrCsdContext) +#define CY_CAPSENSE_PTR_CSD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->ptrCsdContext)) + +#define CY_CAPSENSE_PORT_CMOD_VALUE (cy_capsense_context.ptrCommonConfig->portCmod) +#define CY_CAPSENSE_PORT_CMOD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCmod)) + +#define CY_CAPSENSE_PORT_CSH_VALUE (cy_capsense_context.ptrCommonConfig->portCsh) +#define CY_CAPSENSE_PORT_CSH_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCsh)) + +#define CY_CAPSENSE_PORT_CINT_A_VALUE (cy_capsense_context.ptrCommonConfig->portCintA) +#define CY_CAPSENSE_PORT_CINT_A_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCintA)) + +#define CY_CAPSENSE_PORT_CINT_B_VALUE (cy_capsense_context.ptrCommonConfig->portCintB) +#define CY_CAPSENSE_PORT_CINT_B_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCintB)) + +#define CY_CAPSENSE_PIN_CMOD_VALUE (cy_capsense_context.ptrCommonConfig->pinCmod) +#define CY_CAPSENSE_PIN_CMOD_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCmod)) + +#define CY_CAPSENSE_PORT_CSH_NUM_VALUE (cy_capsense_context.ptrCommonConfig->portCshNum) +#define CY_CAPSENSE_PORT_CSH_NUM_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->portCshNum)) + +#define CY_CAPSENSE_PIN_CSH_VALUE (cy_capsense_context.ptrCommonConfig->pinCsh) +#define CY_CAPSENSE_PIN_CSH_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCsh)) + +#define CY_CAPSENSE_PIN_CINT_A_VALUE (cy_capsense_context.ptrCommonConfig->pinCintA) +#define CY_CAPSENSE_PIN_CINT_A_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCintA)) + +#define CY_CAPSENSE_PIN_CINT_B_VALUE (cy_capsense_context.ptrCommonConfig->pinCintB) +#define CY_CAPSENSE_PIN_CINT_B_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->pinCintB)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSD_SHIELD_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdShieldEn) +#define CY_CAPSENSE_CSD_SHIELD_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdShieldEn)) +#endif + +#define CY_CAPSENSE_CSD_INACTIVE_SNS_CONNECTION_VALUE (cy_capsense_context.ptrCommonConfig->csdInactiveSnsConnection) +#define CY_CAPSENSE_CSD_INACTIVE_SNS_CONNECTION_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdInactiveSnsConnection)) + +#if (CY_CAPSENSE_MW_VERSION >= 300) +#define CY_CAPSENSE_CSX_INACTIVE_SNS_CONNECTION_VALUE (cy_capsense_context.ptrCommonConfig->csxInactiveSnsConnection) +#define CY_CAPSENSE_CSX_INACTIVE_SNS_CONNECTION_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxInactiveSnsConnection)) +#endif + +#define CY_CAPSENSE_CSD_SHIELD_DELAY_VALUE (cy_capsense_context.ptrCommonConfig->csdShieldDelay) +#define CY_CAPSENSE_CSD_SHIELD_DELAY_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdShieldDelay)) + +#define CY_CAPSENSE_CSD_VREF_VALUE (cy_capsense_context.ptrCommonConfig->csdVref) +#define CY_CAPSENSE_CSD_VREF_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdVref)) + +#define CY_CAPSENSE_CSD_R_CONST_VALUE (cy_capsense_context.ptrCommonConfig->csdRConst) +#define CY_CAPSENSE_CSD_R_CONST_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdRConst)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSD_C_TANK_SHIELD_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdCTankShieldEn) +#define CY_CAPSENSE_CSD_C_TANK_SHIELD_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdCTankShieldEn)) +#endif + +#define CY_CAPSENSE_CSD_SHIELD_NUM_PIN_VALUE (cy_capsense_context.ptrCommonConfig->csdShieldNumPin) +#define CY_CAPSENSE_CSD_SHIELD_NUM_PIN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdShieldNumPin)) + +#define CY_CAPSENSE_CSD_SHIELD_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csdShieldSwRes) +#define CY_CAPSENSE_CSD_SHIELD_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdShieldSwRes)) + +#define CY_CAPSENSE_CSD_INIT_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csdInitSwRes) +#define CY_CAPSENSE_CSD_INIT_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdInitSwRes)) + +#define CY_CAPSENSE_CSD_CHARGE_TRANSFER_VALUE (cy_capsense_context.ptrCommonConfig->csdChargeTransfer) +#define CY_CAPSENSE_CSD_CHARGE_TRANSFER_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdChargeTransfer)) + +#define CY_CAPSENSE_CSD_RAW_TARGET_VALUE (cy_capsense_context.ptrCommonConfig->csdRawTarget) +#define CY_CAPSENSE_CSD_RAW_TARGET_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdRawTarget)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSD_AUTOTUNE_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdAutotuneEn) +#define CY_CAPSENSE_CSD_AUTOTUNE_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdAutotuneEn)) + +#define CY_CAPSENSE_CSD_IDAC_AUTOCAL_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacAutocalEn) +#define CY_CAPSENSE_CSD_IDAC_AUTOCAL_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacAutocalEn)) + +#define CY_CAPSENSE_CSD_IDAC_AUTO_GAIN_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacAutoGainEn) +#define CY_CAPSENSE_CSD_IDAC_AUTO_GAIN_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacAutoGainEn)) +#endif + +#define CY_CAPSENSE_CSD_CALIBRATION_ERROR_VALUE (cy_capsense_context.ptrCommonConfig->csdCalibrationError) +#define CY_CAPSENSE_CSD_CALIBRATION_ERROR_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdCalibrationError)) + +#define CY_CAPSENSE_CSD_IDAC_GAIN_INIT_INDEX_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacGainInitIndex) +#define CY_CAPSENSE_CSD_IDAC_GAIN_INIT_INDEX_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacGainInitIndex)) + +#define CY_CAPSENSE_CSD_IDAC_MIN_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacMin) +#define CY_CAPSENSE_CSD_IDAC_MIN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacMin)) + +#define CY_CAPSENSE_CSD_IDAC_COMP_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacCompEn) +#define CY_CAPSENSE_CSD_IDAC_COMP_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacCompEn)) + +#define CY_CAPSENSE_CSD_FINE_INIT_TIME_VALUE (cy_capsense_context.ptrCommonConfig->csdFineInitTime) +#define CY_CAPSENSE_CSD_FINE_INIT_TIME_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdFineInitTime)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSD_IDAC_ROW_COL_ALIGN_EN_VALUE (cy_capsense_context.ptrCommonConfig->csdIdacRowColAlignEn) +#define CY_CAPSENSE_CSD_IDAC_ROW_COL_ALIGN_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdIdacRowColAlignEn)) +#endif + +#define CY_CAPSENSE_CSD_MFS_DIVIDER_OFFSET_F1_VALUE (cy_capsense_context.ptrCommonConfig->csdMfsDividerOffsetF1) +#define CY_CAPSENSE_CSD_MFS_DIVIDER_OFFSET_F1_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdMfsDividerOffsetF1)) + +#define CY_CAPSENSE_CSD_MFS_DIVIDER_OFFSET_F2_VALUE (cy_capsense_context.ptrCommonConfig->csdMfsDividerOffsetF2) +#define CY_CAPSENSE_CSD_MFS_DIVIDER_OFFSET_F2_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csdMfsDividerOffsetF2)) + +#define CY_CAPSENSE_CSX_RAW_TARGET_VALUE (cy_capsense_context.ptrCommonConfig->csxRawTarget) +#define CY_CAPSENSE_CSX_RAW_TARGET_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxRawTarget)) + +#if (CY_CAPSENSE_MW_VERSION < 400) +#define CY_CAPSENSE_CSX_IDAC_GAIN_INIT_INDEX_VALUE (cy_capsense_context.ptrCommonConfig->csxIdacGainInitIndex) +#define CY_CAPSENSE_CSX_IDAC_GAIN_INIT_INDEX_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxIdacGainInitIndex)) + +#define CY_CAPSENSE_CSX_REF_GAIN_VALUE (cy_capsense_context.ptrCommonConfig->csxRefGain) +#define CY_CAPSENSE_CSX_REF_GAIN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxRefGain)) + +#define CY_CAPSENSE_CSX_IDAC_AUTOCAL_EN_VALUE (cy_capsense_context.ptrCommonConfig->csxIdacAutocalEn) +#define CY_CAPSENSE_CSX_IDAC_AUTOCAL_EN_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxIdacAutocalEn)) +#endif + +#define CY_CAPSENSE_CSX_CALIBRATION_ERROR_VALUE (cy_capsense_context.ptrCommonConfig->csxCalibrationError) +#define CY_CAPSENSE_CSX_CALIBRATION_ERROR_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxCalibrationError)) + +#define CY_CAPSENSE_CSX_FINE_INIT_TIME_VALUE (cy_capsense_context.ptrCommonConfig->csxFineInitTime) +#define CY_CAPSENSE_CSX_FINE_INIT_TIME_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxFineInitTime)) + +#define CY_CAPSENSE_CSX_INIT_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csxInitSwRes) +#define CY_CAPSENSE_CSX_INIT_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxInitSwRes)) + +#define CY_CAPSENSE_CSX_SCAN_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csxScanSwRes) +#define CY_CAPSENSE_CSX_SCAN_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxScanSwRes)) + +#define CY_CAPSENSE_CSX_INIT_SHIELD_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csxInitShieldSwRes) +#define CY_CAPSENSE_CSX_INIT_SHIELD_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxInitShieldSwRes)) + +#define CY_CAPSENSE_CSX_SCAN_SHIELD_SW_RES_VALUE (cy_capsense_context.ptrCommonConfig->csxScanShieldSwRes) +#define CY_CAPSENSE_CSX_SCAN_SHIELD_SW_RES_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxScanShieldSwRes)) + +#define CY_CAPSENSE_CSX_MFS_DIVIDER_OFFSET_F1_VALUE (cy_capsense_context.ptrCommonConfig->csxMfsDividerOffsetF1) +#define CY_CAPSENSE_CSX_MFS_DIVIDER_OFFSET_F1_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxMfsDividerOffsetF1)) + +#define CY_CAPSENSE_CSX_MFS_DIVIDER_OFFSET_F2_VALUE (cy_capsense_context.ptrCommonConfig->csxMfsDividerOffsetF2) +#define CY_CAPSENSE_CSX_MFS_DIVIDER_OFFSET_F2_SIZE (sizeof(cy_capsense_context.ptrCommonConfig->csxMfsDividerOffsetF2)) + +/* cy_capsense_widgetConfig */ +#define CY_CAPSENSE_BUTTON0_PTR_WD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrWdContext) +#define CY_CAPSENSE_BUTTON0_PTR_WD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrWdContext)) +#define CY_CAPSENSE_BUTTON0_PTR_SNS_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrSnsContext) +#define CY_CAPSENSE_BUTTON0_PTR_SNS_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrSnsContext)) +#define CY_CAPSENSE_BUTTON0_PTR_ELTD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrEltdConfig) +#define CY_CAPSENSE_BUTTON0_PTR_ELTD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrEltdConfig)) +#define CY_CAPSENSE_BUTTON0_PTR_ELTD_CAPACITANCE_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrEltdCapacitance) +#define CY_CAPSENSE_BUTTON0_PTR_ELTD_CAPACITANCE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrEltdCapacitance)) +#define CY_CAPSENSE_BUTTON0_PTR_BSLN_INV_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrBslnInv) +#define CY_CAPSENSE_BUTTON0_PTR_BSLN_INV_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrBslnInv)) +#define CY_CAPSENSE_BUTTON0_PTR_NOISE_ENVELOPE_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrNoiseEnvelope) +#define CY_CAPSENSE_BUTTON0_PTR_NOISE_ENVELOPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrNoiseEnvelope)) +#define CY_CAPSENSE_BUTTON0_PTR_RAW_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrRawFilterHistory) +#define CY_CAPSENSE_BUTTON0_PTR_RAW_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrRawFilterHistory)) +#define CY_CAPSENSE_BUTTON0_PTR_RAW_FILTER_HISTORY_LOW_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrRawFilterHistoryLow) +#define CY_CAPSENSE_BUTTON0_PTR_RAW_FILTER_HISTORY_LOW_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrRawFilterHistoryLow)) +#define CY_CAPSENSE_BUTTON0_IIR_COEFF_VALUE (cy_capsense_context.ptrWdConfig[0u].iirCoeff) +#define CY_CAPSENSE_BUTTON0_IIR_COEFF_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].iirCoeff)) +#define CY_CAPSENSE_BUTTON0_PTR_DEBOUNCE_ARR_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrDebounceArr) +#define CY_CAPSENSE_BUTTON0_PTR_DEBOUNCE_ARR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrDebounceArr)) +#define CY_CAPSENSE_BUTTON0_PTR_DIPLEX_TABLE_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrDiplexTable) +#define CY_CAPSENSE_BUTTON0_PTR_DIPLEX_TABLE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrDiplexTable)) +#define CY_CAPSENSE_BUTTON0_CENTROID_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].centroidConfig) +#define CY_CAPSENSE_BUTTON0_CENTROID_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].centroidConfig)) +#define CY_CAPSENSE_BUTTON0_X_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[0u].xResolution) +#define CY_CAPSENSE_BUTTON0_X_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].xResolution)) +#define CY_CAPSENSE_BUTTON0_Y_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[0u].yResolution) +#define CY_CAPSENSE_BUTTON0_Y_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].yResolution)) +#define CY_CAPSENSE_BUTTON0_NUM_SNS_VALUE (cy_capsense_context.ptrWdConfig[0u].numSns) +#define CY_CAPSENSE_BUTTON0_NUM_SNS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].numSns)) +#define CY_CAPSENSE_BUTTON0_NUM_COLS_VALUE (cy_capsense_context.ptrWdConfig[0u].numCols) +#define CY_CAPSENSE_BUTTON0_NUM_COLS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].numCols)) +#define CY_CAPSENSE_BUTTON0_NUM_ROWS_VALUE (cy_capsense_context.ptrWdConfig[0u].numRows) +#define CY_CAPSENSE_BUTTON0_NUM_ROWS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].numRows)) +#define CY_CAPSENSE_BUTTON0_PTR_POS_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrPosFilterHistory) +#define CY_CAPSENSE_BUTTON0_PTR_POS_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrPosFilterHistory)) +#define CY_CAPSENSE_BUTTON0_PTR_CSX_TOUCH_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrCsxTouchHistory) +#define CY_CAPSENSE_BUTTON0_PTR_CSX_TOUCH_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrCsxTouchHistory)) +#define CY_CAPSENSE_BUTTON0_PTR_CSX_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrCsxTouchBuffer) +#define CY_CAPSENSE_BUTTON0_PTR_CSX_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrCsxTouchBuffer)) +#define CY_CAPSENSE_BUTTON0_PTR_CSD_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrCsdTouchBuffer) +#define CY_CAPSENSE_BUTTON0_PTR_CSD_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrCsdTouchBuffer)) +#define CY_CAPSENSE_BUTTON0_PTR_GESTURE_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrGestureConfig) +#define CY_CAPSENSE_BUTTON0_PTR_GESTURE_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrGestureConfig)) +#define CY_CAPSENSE_BUTTON0_PTR_GESTURE_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrGestureContext) +#define CY_CAPSENSE_BUTTON0_PTR_GESTURE_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrGestureContext)) +#define CY_CAPSENSE_BUTTON0_BALLISTIC_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].ballisticConfig) +#define CY_CAPSENSE_BUTTON0_BALLISTIC_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ballisticConfig)) +#define CY_CAPSENSE_BUTTON0_PTR_BALLISTIC_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[0u].ptrBallisticContext) +#define CY_CAPSENSE_BUTTON0_PTR_BALLISTIC_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].ptrBallisticContext)) +#define CY_CAPSENSE_BUTTON0_AIIR_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].aiirConfig) +#define CY_CAPSENSE_BUTTON0_AIIR_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].aiirConfig)) +#define CY_CAPSENSE_BUTTON0_ADV_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].advConfig) +#define CY_CAPSENSE_BUTTON0_ADV_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].advConfig)) +#define CY_CAPSENSE_BUTTON0_POS_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].posFilterConfig) +#define CY_CAPSENSE_BUTTON0_POS_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].posFilterConfig)) +#define CY_CAPSENSE_BUTTON0_RAW_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[0u].rawFilterConfig) +#define CY_CAPSENSE_BUTTON0_RAW_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].rawFilterConfig)) +#define CY_CAPSENSE_BUTTON0_SENSE_METHOD_VALUE (cy_capsense_context.ptrWdConfig[0u].senseMethod) +#define CY_CAPSENSE_BUTTON0_SENSE_METHOD_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].senseMethod)) +#define CY_CAPSENSE_BUTTON0_WD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[0u].wdType) +#define CY_CAPSENSE_BUTTON0_WD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0u].wdType)) + +#define CY_CAPSENSE_BUTTON1_PTR_WD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrWdContext) +#define CY_CAPSENSE_BUTTON1_PTR_WD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrWdContext)) +#define CY_CAPSENSE_BUTTON1_PTR_SNS_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrSnsContext) +#define CY_CAPSENSE_BUTTON1_PTR_SNS_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrSnsContext)) +#define CY_CAPSENSE_BUTTON1_PTR_ELTD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrEltdConfig) +#define CY_CAPSENSE_BUTTON1_PTR_ELTD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrEltdConfig)) +#define CY_CAPSENSE_BUTTON1_PTR_ELTD_CAPACITANCE_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrEltdCapacitance) +#define CY_CAPSENSE_BUTTON1_PTR_ELTD_CAPACITANCE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrEltdCapacitance)) +#define CY_CAPSENSE_BUTTON1_PTR_BSLN_INV_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrBslnInv) +#define CY_CAPSENSE_BUTTON1_PTR_BSLN_INV_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrBslnInv)) +#define CY_CAPSENSE_BUTTON1_PTR_NOISE_ENVELOPE_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrNoiseEnvelope) +#define CY_CAPSENSE_BUTTON1_PTR_NOISE_ENVELOPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrNoiseEnvelope)) +#define CY_CAPSENSE_BUTTON1_PTR_RAW_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrRawFilterHistory) +#define CY_CAPSENSE_BUTTON1_PTR_RAW_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrRawFilterHistory)) +#define CY_CAPSENSE_BUTTON1_PTR_RAW_FILTER_HISTORY_LOW_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrRawFilterHistoryLow) +#define CY_CAPSENSE_BUTTON1_PTR_RAW_FILTER_HISTORY_LOW_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrRawFilterHistoryLow)) +#define CY_CAPSENSE_BUTTON1_IIR_COEFF_VALUE (cy_capsense_context.ptrWdConfig[1u].iirCoeff) +#define CY_CAPSENSE_BUTTON1_IIR_COEFF_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].iirCoeff)) +#define CY_CAPSENSE_BUTTON1_PTR_DEBOUNCE_ARR_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrDebounceArr) +#define CY_CAPSENSE_BUTTON1_PTR_DEBOUNCE_ARR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrDebounceArr)) +#define CY_CAPSENSE_BUTTON1_PTR_DIPLEX_TABLE_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrDiplexTable) +#define CY_CAPSENSE_BUTTON1_PTR_DIPLEX_TABLE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrDiplexTable)) +#define CY_CAPSENSE_BUTTON1_CENTROID_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].centroidConfig) +#define CY_CAPSENSE_BUTTON1_CENTROID_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].centroidConfig)) +#define CY_CAPSENSE_BUTTON1_X_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[1u].xResolution) +#define CY_CAPSENSE_BUTTON1_X_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].xResolution)) +#define CY_CAPSENSE_BUTTON1_Y_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[1u].yResolution) +#define CY_CAPSENSE_BUTTON1_Y_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].yResolution)) +#define CY_CAPSENSE_BUTTON1_NUM_SNS_VALUE (cy_capsense_context.ptrWdConfig[1u].numSns) +#define CY_CAPSENSE_BUTTON1_NUM_SNS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].numSns)) +#define CY_CAPSENSE_BUTTON1_NUM_COLS_VALUE (cy_capsense_context.ptrWdConfig[1u].numCols) +#define CY_CAPSENSE_BUTTON1_NUM_COLS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].numCols)) +#define CY_CAPSENSE_BUTTON1_NUM_ROWS_VALUE (cy_capsense_context.ptrWdConfig[1u].numRows) +#define CY_CAPSENSE_BUTTON1_NUM_ROWS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].numRows)) +#define CY_CAPSENSE_BUTTON1_PTR_POS_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrPosFilterHistory) +#define CY_CAPSENSE_BUTTON1_PTR_POS_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrPosFilterHistory)) +#define CY_CAPSENSE_BUTTON1_PTR_CSX_TOUCH_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrCsxTouchHistory) +#define CY_CAPSENSE_BUTTON1_PTR_CSX_TOUCH_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrCsxTouchHistory)) +#define CY_CAPSENSE_BUTTON1_PTR_CSX_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrCsxTouchBuffer) +#define CY_CAPSENSE_BUTTON1_PTR_CSX_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrCsxTouchBuffer)) +#define CY_CAPSENSE_BUTTON1_PTR_CSD_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrCsdTouchBuffer) +#define CY_CAPSENSE_BUTTON1_PTR_CSD_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrCsdTouchBuffer)) +#define CY_CAPSENSE_BUTTON1_PTR_GESTURE_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrGestureConfig) +#define CY_CAPSENSE_BUTTON1_PTR_GESTURE_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrGestureConfig)) +#define CY_CAPSENSE_BUTTON1_PTR_GESTURE_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrGestureContext) +#define CY_CAPSENSE_BUTTON1_PTR_GESTURE_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrGestureContext)) +#define CY_CAPSENSE_BUTTON1_BALLISTIC_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].ballisticConfig) +#define CY_CAPSENSE_BUTTON1_BALLISTIC_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ballisticConfig)) +#define CY_CAPSENSE_BUTTON1_PTR_BALLISTIC_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[1u].ptrBallisticContext) +#define CY_CAPSENSE_BUTTON1_PTR_BALLISTIC_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].ptrBallisticContext)) +#define CY_CAPSENSE_BUTTON1_AIIR_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].aiirConfig) +#define CY_CAPSENSE_BUTTON1_AIIR_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].aiirConfig)) +#define CY_CAPSENSE_BUTTON1_ADV_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].advConfig) +#define CY_CAPSENSE_BUTTON1_ADV_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].advConfig)) +#define CY_CAPSENSE_BUTTON1_POS_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].posFilterConfig) +#define CY_CAPSENSE_BUTTON1_POS_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].posFilterConfig)) +#define CY_CAPSENSE_BUTTON1_RAW_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[1u].rawFilterConfig) +#define CY_CAPSENSE_BUTTON1_RAW_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].rawFilterConfig)) +#define CY_CAPSENSE_BUTTON1_SENSE_METHOD_VALUE (cy_capsense_context.ptrWdConfig[1u].senseMethod) +#define CY_CAPSENSE_BUTTON1_SENSE_METHOD_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].senseMethod)) +#define CY_CAPSENSE_BUTTON1_WD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[1u].wdType) +#define CY_CAPSENSE_BUTTON1_WD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1u].wdType)) + +#define CY_CAPSENSE_LINEARSLIDER0_PTR_WD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrWdContext) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_WD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrWdContext)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_SNS_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrSnsContext) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_SNS_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrSnsContext)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_ELTD_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrEltdConfig) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_ELTD_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrEltdConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_ELTD_CAPACITANCE_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrEltdCapacitance) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_ELTD_CAPACITANCE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrEltdCapacitance)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_BSLN_INV_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrBslnInv) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_BSLN_INV_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrBslnInv)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_NOISE_ENVELOPE_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrNoiseEnvelope) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_NOISE_ENVELOPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrNoiseEnvelope)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_RAW_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrRawFilterHistory) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_RAW_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrRawFilterHistory)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_RAW_FILTER_HISTORY_LOW_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrRawFilterHistoryLow) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_RAW_FILTER_HISTORY_LOW_SIZE \ + (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrRawFilterHistoryLow)) +#define CY_CAPSENSE_LINEARSLIDER0_IIR_COEFF_VALUE (cy_capsense_context.ptrWdConfig[2u].iirCoeff) +#define CY_CAPSENSE_LINEARSLIDER0_IIR_COEFF_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].iirCoeff)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_DEBOUNCE_ARR_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrDebounceArr) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_DEBOUNCE_ARR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrDebounceArr)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_DIPLEX_TABLE_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrDiplexTable) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_DIPLEX_TABLE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrDiplexTable)) +#define CY_CAPSENSE_LINEARSLIDER0_CENTROID_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].centroidConfig) +#define CY_CAPSENSE_LINEARSLIDER0_CENTROID_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].centroidConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_X_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[2u].xResolution) +#define CY_CAPSENSE_LINEARSLIDER0_X_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].xResolution)) +#define CY_CAPSENSE_LINEARSLIDER0_Y_RESOLUTION_VALUE (cy_capsense_context.ptrWdConfig[2u].yResolution) +#define CY_CAPSENSE_LINEARSLIDER0_Y_RESOLUTION_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].yResolution)) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_SNS_VALUE (cy_capsense_context.ptrWdConfig[2u].numSns) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_SNS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].numSns)) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_COLS_VALUE (cy_capsense_context.ptrWdConfig[2u].numCols) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_COLS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].numCols)) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_ROWS_VALUE (cy_capsense_context.ptrWdConfig[2u].numRows) +#define CY_CAPSENSE_LINEARSLIDER0_NUM_ROWS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].numRows)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_POS_FILTER_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrPosFilterHistory) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_POS_FILTER_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrPosFilterHistory)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSX_TOUCH_HISTORY_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrCsxTouchHistory) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSX_TOUCH_HISTORY_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrCsxTouchHistory)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSX_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrCsxTouchBuffer) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSX_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrCsxTouchBuffer)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSD_TOUCH_BUFFER_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrCsdTouchBuffer) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_CSD_TOUCH_BUFFER_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrCsdTouchBuffer)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_GESTURE_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrGestureConfig) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_GESTURE_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrGestureConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_GESTURE_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrGestureContext) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_GESTURE_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrGestureContext)) +#define CY_CAPSENSE_LINEARSLIDER0_BALLISTIC_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].ballisticConfig) +#define CY_CAPSENSE_LINEARSLIDER0_BALLISTIC_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ballisticConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_BALLISTIC_CONTEXT_VALUE (cy_capsense_context.ptrWdConfig[2u].ptrBallisticContext) +#define CY_CAPSENSE_LINEARSLIDER0_PTR_BALLISTIC_CONTEXT_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].ptrBallisticContext)) +#define CY_CAPSENSE_LINEARSLIDER0_AIIR_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].aiirConfig) +#define CY_CAPSENSE_LINEARSLIDER0_AIIR_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].aiirConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_ADV_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].advConfig) +#define CY_CAPSENSE_LINEARSLIDER0_ADV_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].advConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_POS_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].posFilterConfig) +#define CY_CAPSENSE_LINEARSLIDER0_POS_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].posFilterConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_RAW_FILTER_CONFIG_VALUE (cy_capsense_context.ptrWdConfig[2u].rawFilterConfig) +#define CY_CAPSENSE_LINEARSLIDER0_RAW_FILTER_CONFIG_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].rawFilterConfig)) +#define CY_CAPSENSE_LINEARSLIDER0_SENSE_METHOD_VALUE (cy_capsense_context.ptrWdConfig[2u].senseMethod) +#define CY_CAPSENSE_LINEARSLIDER0_SENSE_METHOD_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].senseMethod)) +#define CY_CAPSENSE_LINEARSLIDER0_WD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2u].wdType) +#define CY_CAPSENSE_LINEARSLIDER0_WD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2u].wdType)) + +/* cy_capsense_pinConfig */ +#define CY_CAPSENSE_BUTTON0_RX0_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[0].pcPtr) +#define CY_CAPSENSE_BUTTON0_RX0_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[0].pcPtr)) +#define CY_CAPSENSE_BUTTON0_RX0_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[0].pinNumber) +#define CY_CAPSENSE_BUTTON0_RX0_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[0].pinNumber)) + +#define CY_CAPSENSE_BUTTON0_TX_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[1].pcPtr) +#define CY_CAPSENSE_BUTTON0_TX_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[1].pcPtr)) +#define CY_CAPSENSE_BUTTON0_TX_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[1].pinNumber) +#define CY_CAPSENSE_BUTTON0_TX_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[1].pinNumber)) + +#define CY_CAPSENSE_BUTTON1_RX0_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[2].pcPtr) +#define CY_CAPSENSE_BUTTON1_RX0_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[2].pcPtr)) +#define CY_CAPSENSE_BUTTON1_RX0_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[2].pinNumber) +#define CY_CAPSENSE_BUTTON1_RX0_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[2].pinNumber)) + +#define CY_CAPSENSE_BUTTON1_TX_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[3].pcPtr) +#define CY_CAPSENSE_BUTTON1_TX_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[3].pcPtr)) +#define CY_CAPSENSE_BUTTON1_TX_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[3].pinNumber) +#define CY_CAPSENSE_BUTTON1_TX_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[3].pinNumber)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[4].pcPtr) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[4].pcPtr)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[4].pinNumber) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[4].pinNumber)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[5].pcPtr) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[5].pcPtr)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[5].pinNumber) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[5].pinNumber)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[6].pcPtr) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[6].pcPtr)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[6].pinNumber) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[6].pinNumber)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[7].pcPtr) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[7].pcPtr)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[7].pinNumber) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[7].pinNumber)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_PIN0_PC_PTR_VALUE (cy_capsense_context.ptrPinConfig[8].pcPtr) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_PIN0_PC_PTR_SIZE (sizeof(cy_capsense_context.ptrPinConfig[8].pcPtr)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_PIN0_NUMBER_VALUE (cy_capsense_context.ptrPinConfig[8].pinNumber) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_PIN0_NUMBER_SIZE (sizeof(cy_capsense_context.ptrPinConfig[8].pinNumber)) + +/* cy_capsense_electrodeConfig */ +#define CY_CAPSENSE_BUTTON0_RX0_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].ptrPin) +#define CY_CAPSENSE_BUTTON0_RX0_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].ptrPin)) +#define CY_CAPSENSE_BUTTON0_RX0_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].type) +#define CY_CAPSENSE_BUTTON0_RX0_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].type)) +#define CY_CAPSENSE_BUTTON0_RX0_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].numPins) +#define CY_CAPSENSE_BUTTON0_RX0_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[0].numPins)) + +#define CY_CAPSENSE_BUTTON0_TX_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].ptrPin) +#define CY_CAPSENSE_BUTTON0_TX_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].ptrPin)) +#define CY_CAPSENSE_BUTTON0_TX_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].type) +#define CY_CAPSENSE_BUTTON0_TX_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].type)) +#define CY_CAPSENSE_BUTTON0_TX_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].numPins) +#define CY_CAPSENSE_BUTTON0_TX_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[0].ptrEltdConfig[1].numPins)) + +#define CY_CAPSENSE_BUTTON1_RX0_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].ptrPin) +#define CY_CAPSENSE_BUTTON1_RX0_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].ptrPin)) +#define CY_CAPSENSE_BUTTON1_RX0_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].type) +#define CY_CAPSENSE_BUTTON1_RX0_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].type)) +#define CY_CAPSENSE_BUTTON1_RX0_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].numPins) +#define CY_CAPSENSE_BUTTON1_RX0_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[0].numPins)) + +#define CY_CAPSENSE_BUTTON1_TX_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].ptrPin) +#define CY_CAPSENSE_BUTTON1_TX_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].ptrPin)) +#define CY_CAPSENSE_BUTTON1_TX_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].type) +#define CY_CAPSENSE_BUTTON1_TX_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].type)) +#define CY_CAPSENSE_BUTTON1_TX_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].numPins) +#define CY_CAPSENSE_BUTTON1_TX_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[1].ptrEltdConfig[1].numPins)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].ptrPin) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].ptrPin)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].type) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].type)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].numPins) +#define CY_CAPSENSE_LINEARSLIDER0_SNS0_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[0].numPins)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].ptrPin) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].ptrPin)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].type) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].type)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].numPins) +#define CY_CAPSENSE_LINEARSLIDER0_SNS1_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[1].numPins)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].ptrPin) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].ptrPin)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].type) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].type)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].numPins) +#define CY_CAPSENSE_LINEARSLIDER0_SNS2_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[2].numPins)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].ptrPin) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].ptrPin)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].type) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].type)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].numPins) +#define CY_CAPSENSE_LINEARSLIDER0_SNS3_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[3].numPins)) + +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_CFG_PTR_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].ptrPin) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_CFG_PTR_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].ptrPin)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_ELTD_TYPE_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].type) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_ELTD_TYPE_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].type)) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NUM_PINS_VALUE (cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].numPins) +#define CY_CAPSENSE_LINEARSLIDER0_SNS4_NUM_PINS_SIZE (sizeof(cy_capsense_context.ptrWdConfig[2].ptrEltdConfig[4].numPins)) + +#if ((CY_CAPSENSE_PERI_CLK / 2) > 50000000) +#warning The maximum CSD modulator clock frequency is 50 MHz: increase CSD modulator clock divider to meet the valid operation conditions +#endif + +#if ((CY_CAPSENSE_PERI_CLK / 2) > 50000000) +#warning The maximum CSX modulator clock frequency is 50 MHz: increase CSX modulator clock divider to meet the valid operation conditions +#endif + +#if ((CY_CAPSENSE_PERI_CLK / 2 / 32) > 3000000) +#warning The maximum Tx clock frequency is 3 MHz: increase Tx clock divider for widget Button0 to meet the valid operation conditions +#endif + +#if ((CY_CAPSENSE_PERI_CLK / 2 / 32) > 3000000) +#warning The maximum Tx clock frequency is 3 MHz: increase Tx clock divider for widget Button1 to meet the valid operation conditions +#endif + +#if defined(__cplusplus) +} +#endif + +#endif /* CY_CAPSENSE_CORE == __CORTEX_M */ + +#endif /* !defined(CY_DISABLE_CAPSENSE) */ + +#endif /* (defined(COMPONENT_MW_CAPSENSE) || !defined(COMPONENT_MW_CORE_MAKE)) */ + +#endif /* CYCFG_CAPSENSE_H */ + +/* [] END OF FILE */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.timestamp b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.timestamp new file mode 100644 index 00000000000000..1f1e351cf22890 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense.timestamp @@ -0,0 +1,26 @@ +/******************************************************************************* +* File Name: cycfg_capsense.timestamp +* +* Description: +* Sentinel file for determining if generated source is up to date. +* This file was automatically generated and should not be modified. +* CAPSENSE Configurator 6.10.0.3796 +* +******************************************************************************** +* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or +* an affiliate of Cypress Semiconductor Corporation. +* SPDX-License-Identifier: Apache-2.0 +* +* 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. +********************************************************************************/ + diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_defines.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_defines.h new file mode 100644 index 00000000000000..570294dcd562e1 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_defines.h @@ -0,0 +1,159 @@ +/******************************************************************************* + * File Name: cycfg_capsense_defines.h + * + * Description: + * CAPSENSE configuration defines. + * + * Note: This file is required for the CAPSENSE Middleware Library to build + * successfully. + * + * This file should not be modified. It was automatically generated by + * CAPSENSE Configurator 6.10.0.3796 + * + ******************************************************************************** + * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) + * or an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + *******************************************************************************/ + +#if !defined(CYCFG_CAPSENSE_DEFINES_H) +#define CYCFG_CAPSENSE_DEFINES_H + +#include + +/* General */ +#define CY_CAPSENSE_WIDGET_COUNT (3u) +#define CY_CAPSENSE_ACTIVE_WIDGET_COUNT (CY_CAPSENSE_WIDGET_COUNT) +#define CY_CAPSENSE_LP_WIDGET_COUNT (0u) +#define CY_CAPSENSE_TOTAL_WIDGET_COUNT (CY_CAPSENSE_WIDGET_COUNT) +#define CY_CAPSENSE_SENSOR_COUNT (7u) +#define CY_CAPSENSE_ELTD_COUNT (9u) +#define CY_CAPSENSE_PIN_COUNT (9u) +#define CY_CAPSENSE_SHIELD_PIN_COUNT (0u) +#define CY_CAPSENSE_POSITION_SIZE (1u) +#define CY_CAPSENSE_DEBOUNCE_SIZE (3u) +#define CY_CAPSENSE_NOISE_ENVELOPE_SIZE (5u) +#define CY_CAPSENSE_MFS_CH_NUMBER (1u) +#define CY_CAPSENSE_RAW_HISTORY_SIZE (0u) +#define CY_CAPSENSE_IIR_HISTORY_LOW_SIZE (0u) +#define CY_CAPSENSE_RAW_ALP_HISTORY_SIZE (0u) +#define CY_CAPSENSE_POSITION_FILTER_HISTORY_SIZE (0u) +#define CY_CAPSENSE_TOUCH_FILTER_HISTORY_SIZE (0u) +#define CY_CAPSENSE_DIPLEX_SIZE (0u) +#define CY_CAPSENSE_CSD_TOUCHPAD_MAX_SENSORS_SIZE (0u) +#define CY_CAPSENSE_CSX_TOUCH_BUFFER_ENABLE (0u) +#define CY_CAPSENSE_CSX_TOUCH_HISTORY_SIZE (0u) +#define CY_CAPSENSE_BALLISTIC_WIDGET_COUNT (0u) +#define CY_CAPSENSE_GESTURE_WIDGET_COUNT (0u) + +/* Sensing Methods */ +#define CY_CAPSENSE_CSD_EN (1u) +#define CY_CAPSENSE_CSX_EN (1u) +#define CY_CAPSENSE_ISX_EN (0u) +#define CY_CAPSENSE_CSD_CALIBRATION_EN (1u) +#define CY_CAPSENSE_CSX_CALIBRATION_EN (1u) +#define CY_CAPSENSE_SMARTSENSE_FULL_EN (1u) +#define CY_CAPSENSE_SMARTSENSE_HW_EN (0u) +#define CY_CAPSENSE_SMARTSENSE_DISABLED (0u) +#define CY_CAPSENSE_CSD_AUTOTUNE_EN (CY_CAPSENSE_SMARTSENSE_FULL_EN | CY_CAPSENSE_SMARTSENSE_HW_EN) +#define CY_CAPSENSE_CSD_SHIELD_EN (0u) +#define CY_CAPSENSE_CSD_SHIELD_CAP_EN (0u) +#define CY_CAPSENSE_CSD_CHARGE_TRANSFER (0u) +#define CY_CAPSENSE_CSD_IDAC_COMP_EN (1u) +#define CY_CAPSENSE_CSD_IDAC_AUTO_GAIN_EN (1u) +#define CY_CAPSENSE_CSD_IDAC_ROW_COL_ALIGN_EN (1u) +#define CY_CAPSENSE_LFSR_EN (1u) +#define CY_CAPSENSE_LFSR_AUTO_EN (1u) +#define CY_CAPSENSE_CLOCK_SOURCE_AUTO_EN (1u) + +/* Filtering */ +#define CY_CAPSENSE_ADAPTIVE_FILTER_EN (0u) +#define CY_CAPSENSE_BALLISTIC_MULTIPLIER_EN (0u) +#define CY_CAPSENSE_RAWCOUNT_FILTER_EN (0u) +#define CY_CAPSENSE_RC_ALP_FILTER_EN (0u) +#define CY_CAPSENSE_REGULAR_RC_IIR_FILTER_EN (0u) +#define CY_CAPSENSE_REGULAR_RC_MEDIAN_FILTER_EN (0u) +#define CY_CAPSENSE_REGULAR_RC_AVERAGE_FILTER_EN (0u) +#define CY_CAPSENSE_REGULAR_RC_ALP_FILTER_EN (0u) +#define CY_CAPSENSE_REGULAR_RC_FILTER_EN \ + (CY_CAPSENSE_REGULAR_RC_IIR_FILTER_EN | CY_CAPSENSE_REGULAR_RC_MEDIAN_FILTER_EN | CY_CAPSENSE_REGULAR_RC_AVERAGE_FILTER_EN | \ + CY_CAPSENSE_REGULAR_RC_ALP_FILTER_EN) +#define CY_CAPSENSE_PROX_RC_IIR_FILTER_EN (0u) +#define CY_CAPSENSE_PROX_RC_MEDIAN_FILTER_EN (0u) +#define CY_CAPSENSE_PROX_RC_AVERAGE_FILTER_EN (0u) +#define CY_CAPSENSE_PROX_RC_ALP_FILTER_EN (0u) +#define CY_CAPSENSE_PROX_RC_FILTER_EN \ + (CY_CAPSENSE_PROX_RC_IIR_FILTER_EN | CY_CAPSENSE_PROX_RC_MEDIAN_FILTER_EN | CY_CAPSENSE_PROX_RC_AVERAGE_FILTER_EN | \ + CY_CAPSENSE_PROX_RC_ALP_FILTER_EN) +#define CY_CAPSENSE_POSITION_FILTER_EN (0u) +#define CY_CAPSENSE_CSD_POSITION_FILTER_EN (0u) +#define CY_CAPSENSE_CSX_POSITION_FILTER_EN (0u) +#define CY_CAPSENSE_POS_IIR_FILTER_EN (0u) +#define CY_CAPSENSE_POS_MEDIAN_FILTER_EN (0u) +#define CY_CAPSENSE_POS_AVERAGE_FILTER_EN (0u) +#define CY_CAPSENSE_POS_JITTER_FILTER_EN (0u) + +/* Widgets */ +#define CY_CAPSENSE_CSD_BUTTON_EN (0u) +#define CY_CAPSENSE_CSD_MATRIX_EN (0u) +#define CY_CAPSENSE_CSD_SLIDER_EN (1u) +#define CY_CAPSENSE_CSD_TOUCHPAD_EN (0u) +#define CY_CAPSENSE_CSD_PROXIMITY_EN (0u) +#define CY_CAPSENSE_CSX_BUTTON_EN (1u) +#define CY_CAPSENSE_CSX_SLIDER_EN (0u) +#define CY_CAPSENSE_CSX_MATRIX_EN (0u) +#define CY_CAPSENSE_CSX_TOUCHPAD_EN (0u) +#define CY_CAPSENSE_ISX_BUTTON_EN (0u) +#define CY_CAPSENSE_ISX_PROXIMITY_EN (0u) +#define CY_CAPSENSE_ISX_LINEAR_SLIDER_EN (0u) +#define CY_CAPSENSE_ISX_DIPLEX_SLIDER_EN (0u) +#define CY_CAPSENSE_ADVANCED_CENTROID_5X5_EN (0u) +#define CY_CAPSENSE_CSD_LINEAR_SLIDER_EN (1u) +#define CY_CAPSENSE_CSD_RADIAL_SLIDER_EN (0u) +#define CY_CAPSENSE_CSD_DIPLEX_SLIDER_EN (0u) +#define CY_CAPSENSE_CSX_LINEAR_SLIDER_EN (0u) +#define CY_CAPSENSE_CSX_DIPLEX_SLIDER_EN (0u) +#define CY_CAPSENSE_GANGED_SNS_EN (0u) +#define CY_CAPSENSE_CSD_GANGED_SNS_EN (0u) +#define CY_CAPSENSE_CSX_GANGED_SNS_EN (0u) +#define CY_CAPSENSE_BUTTON_EN (1u) +#define CY_CAPSENSE_MATRIX_EN (0u) +#define CY_CAPSENSE_SLIDER_EN (1u) +#define CY_CAPSENSE_LINEAR_SLIDER_EN (1u) +#define CY_CAPSENSE_RADIAL_SLIDER_EN (0u) +#define CY_CAPSENSE_DIPLEX_SLIDER_EN (0u) +#define CY_CAPSENSE_TOUCHPAD_EN (0u) +#define CY_CAPSENSE_PROXIMITY_EN (0u) + +/* Features */ +#define CY_CAPSENSE_GESTURE_EN (0u) +#define CY_CAPSENSE_MULTI_FREQUENCY_SCAN_EN (0u) +#define CY_CAPSENSE_MULTI_FREQUENCY_WIDGET_EN (0u) +#define CY_CAPSENSE_SNS_AUTO_RESET_EN (0u) + +/* Self-test */ +#define CY_CAPSENSE_BIST_EN (0u) +#define CY_CAPSENSE_TST_WDGT_CRC_EN (0u) +#define CY_CAPSENSE_TST_BSLN_INTEGRITY_EN (0u) +#define CY_CAPSENSE_TST_RAW_INTEGRITY_EN (0u) +#define CY_CAPSENSE_TST_SNS_SHORT_EN (0u) +#define CY_CAPSENSE_TST_SNS_CAP_EN (0u) +#define CY_CAPSENSE_TST_SH_CAP_EN (0u) +#define CY_CAPSENSE_TST_EXTERNAL_CAP_EN (0u) +#define CY_CAPSENSE_TST_VDDA_EN (0u) + +#endif /* CYCFG_CAPSENSE_DEFINES_H */ + +/* [] END OF FILE */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_tuner_regmap.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_tuner_regmap.h new file mode 100644 index 00000000000000..650ac462f4ee74 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_capsense_tuner_regmap.h @@ -0,0 +1,972 @@ +/******************************************************************************* + * File Name: cycfg_capsense_tuner_regmap.h + * + * Description: + * CAPSENSE Tuner register map configuration. + * This file should not be modified. It was automatically generated by + * CAPSENSE Configurator 6.10.0.3796 + * + ******************************************************************************** + * Copyright 2024, Cypress Semiconductor Corporation (an Infineon company) + * or an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + *******************************************************************************/ + +#if !defined(CYCFG_CAPSENSE_TUNER_REGMAP_H) +#define CYCFG_CAPSENSE_TUNER_REGMAP_H + +#include "cy_capsense_common.h" + +#if !defined(CY_CAPSENSE_MW_VERSION) +#define CY_CAPSENSE_TUNER_MW_VERSION (200) +#else +#define CY_CAPSENSE_TUNER_MW_VERSION (CY_CAPSENSE_MW_VERSION) +#endif + +/* RAM Data structure register definitions */ +#if (CY_CAPSENSE_TUNER_MW_VERSION < 300) +#define CY_CAPSENSE_TUNER_CONFIG_ID_OFFSET (0u) +#define CY_CAPSENSE_TUNER_CONFIG_ID_SIZE (2u) + +#define CY_CAPSENSE_TUNER_TUNER_CMD_OFFSET (2u) +#define CY_CAPSENSE_TUNER_TUNER_CMD_SIZE (2u) + +#define CY_CAPSENSE_TUNER_SCAN_COUNTER_OFFSET (4u) +#define CY_CAPSENSE_TUNER_SCAN_COUNTER_SIZE (2u) + +#define CY_CAPSENSE_TUNER_TUNER_ST_OFFSET (6u) +#define CY_CAPSENSE_TUNER_TUNER_ST_SIZE (1u) + +#define CY_CAPSENSE_TUNER_INITDONE_OFFSET (7u) +#define CY_CAPSENSE_TUNER_INITDONE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_PTRSSCALLBACK_OFFSET (8u) +#define CY_CAPSENSE_TUNER_PTRSSCALLBACK_SIZE (4u) + +#define CY_CAPSENSE_TUNER_PTREOSCALLBACK_OFFSET (12u) +#define CY_CAPSENSE_TUNER_PTREOSCALLBACK_SIZE (4u) + +#define CY_CAPSENSE_TUNER_PTRTUNERSENDCALLBACK_OFFSET (16u) +#define CY_CAPSENSE_TUNER_PTRTUNERSENDCALLBACK_SIZE (4u) + +#define CY_CAPSENSE_TUNER_PTRTUNERRECEIVECALLBACK_OFFSET (20u) +#define CY_CAPSENSE_TUNER_PTRTUNERRECEIVECALLBACK_SIZE (4u) + +#define CY_CAPSENSE_TUNER_STATUS_OFFSET (24u) +#define CY_CAPSENSE_TUNER_STATUS_SIZE (4u) + +#define CY_CAPSENSE_TUNER_TIMESTAMPINTERVAL_OFFSET (28u) +#define CY_CAPSENSE_TUNER_TIMESTAMPINTERVAL_SIZE (4u) + +#define CY_CAPSENSE_TUNER_TIMESTAMP_OFFSET (32u) +#define CY_CAPSENSE_TUNER_TIMESTAMP_SIZE (4u) + +#define CY_CAPSENSE_TUNER_CSD_MOD_CLK_DIVIDER_OFFSET (36u) +#define CY_CAPSENSE_TUNER_CSD_MOD_CLK_DIVIDER_SIZE (1u) + +#define CY_CAPSENSE_TUNER_CSX_MOD_CLK_DIVIDER_OFFSET (37u) +#define CY_CAPSENSE_TUNER_CSX_MOD_CLK_DIVIDER_SIZE (1u) + +#define CY_CAPSENSE_TUNER_TUNER_CNT_OFFSET (38u) +#define CY_CAPSENSE_TUNER_TUNER_CNT_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_CP_OFFSET (40u) +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_SIGPFC_OFFSET (42u) +#define CY_CAPSENSE_TUNER_BUTTON0_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_CONV_OFFSET (44u) +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_CONV_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_MAX_RAW_COUNT_OFFSET (46u) +#define CY_CAPSENSE_TUNER_BUTTON0_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_TH_OFFSET (48u) +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_PROX_TOUCH_TH_OFFSET (50u) +#define CY_CAPSENSE_TUNER_BUTTON0_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_LOW_BSLN_RST_OFFSET (52u) +#define CY_CAPSENSE_TUNER_BUTTON0_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_OFFSET (54u) +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_SNS_CLK_OFFSET (56u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DETECTED_OFFSET (58u) +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DIRECTION_OFFSET (60u) +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_XDELTA_OFFSET (62u) +#define CY_CAPSENSE_TUNER_BUTTON0_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_YDELTA_OFFSET (64u) +#define CY_CAPSENSE_TUNER_BUTTON0_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NOISE_TH_OFFSET (66u) +#define CY_CAPSENSE_TUNER_BUTTON0_NOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NNOISE_TH_OFFSET (67u) +#define CY_CAPSENSE_TUNER_BUTTON0_NNOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_HYSTERESIS_OFFSET (68u) +#define CY_CAPSENSE_TUNER_BUTTON0_HYSTERESIS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ON_DEBOUNCE_OFFSET (69u) +#define CY_CAPSENSE_TUNER_BUTTON0_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SOURCE_OFFSET (70u) +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD0_OFFSET (71u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD1_OFFSET (72u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD2_OFFSET (73u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_GAIN_INDEX_OFFSET (74u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD0_OFFSET (75u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD1_OFFSET (76u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD2_OFFSET (77u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_REGULAR_IIR_BL_N_OFFSET (78u) +#define CY_CAPSENSE_TUNER_BUTTON0_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_STATUS_OFFSET (79u) +#define CY_CAPSENSE_TUNER_BUTTON0_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_PTRPOSITION_OFFSET (80u) +#define CY_CAPSENSE_TUNER_BUTTON0_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_POSITIONS_OFFSET (84u) +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_CP_OFFSET (88u) +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_SIGPFC_OFFSET (90u) +#define CY_CAPSENSE_TUNER_BUTTON1_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_CONV_OFFSET (92u) +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_CONV_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_MAX_RAW_COUNT_OFFSET (94u) +#define CY_CAPSENSE_TUNER_BUTTON1_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_TH_OFFSET (96u) +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_PROX_TOUCH_TH_OFFSET (98u) +#define CY_CAPSENSE_TUNER_BUTTON1_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_LOW_BSLN_RST_OFFSET (100u) +#define CY_CAPSENSE_TUNER_BUTTON1_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_OFFSET (102u) +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_SNS_CLK_OFFSET (104u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DETECTED_OFFSET (106u) +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DIRECTION_OFFSET (108u) +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_XDELTA_OFFSET (110u) +#define CY_CAPSENSE_TUNER_BUTTON1_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_YDELTA_OFFSET (112u) +#define CY_CAPSENSE_TUNER_BUTTON1_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NOISE_TH_OFFSET (114u) +#define CY_CAPSENSE_TUNER_BUTTON1_NOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NNOISE_TH_OFFSET (115u) +#define CY_CAPSENSE_TUNER_BUTTON1_NNOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_HYSTERESIS_OFFSET (116u) +#define CY_CAPSENSE_TUNER_BUTTON1_HYSTERESIS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ON_DEBOUNCE_OFFSET (117u) +#define CY_CAPSENSE_TUNER_BUTTON1_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SOURCE_OFFSET (118u) +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD0_OFFSET (119u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD1_OFFSET (120u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD2_OFFSET (121u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_GAIN_INDEX_OFFSET (122u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD0_OFFSET (123u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD1_OFFSET (124u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD2_OFFSET (125u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_REGULAR_IIR_BL_N_OFFSET (126u) +#define CY_CAPSENSE_TUNER_BUTTON1_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_STATUS_OFFSET (127u) +#define CY_CAPSENSE_TUNER_BUTTON1_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_PTRPOSITION_OFFSET (128u) +#define CY_CAPSENSE_TUNER_BUTTON1_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_POSITIONS_OFFSET (132u) +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_CP_OFFSET (136u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SIGPFC_OFFSET (138u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_RESOLUTION_OFFSET (140u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_RESOLUTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_MAX_RAW_COUNT_OFFSET (142u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_TH_OFFSET (144u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PROX_TOUCH_TH_OFFSET (146u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_LOW_BSLN_RST_OFFSET (148u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_OFFSET (150u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_SNS_CLK_OFFSET (152u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DETECTED_OFFSET (154u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DIRECTION_OFFSET (156u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_XDELTA_OFFSET (158u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_YDELTA_OFFSET (160u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NOISE_TH_OFFSET (162u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NNOISE_TH_OFFSET (163u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NNOISE_TH_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_HYSTERESIS_OFFSET (164u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_HYSTERESIS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ON_DEBOUNCE_OFFSET (165u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SOURCE_OFFSET (166u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD0_OFFSET (167u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD1_OFFSET (168u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD2_OFFSET (169u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_GAIN_INDEX_OFFSET (170u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD0_OFFSET (171u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD1_OFFSET (172u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD2_OFFSET (173u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_REGULAR_IIR_BL_N_OFFSET (174u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_STATUS_OFFSET (175u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PTRPOSITION_OFFSET (176u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NUM_POSITIONS_OFFSET (180u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_RAW0_OFFSET (184u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN0_OFFSET (186u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_DIFF0_OFFSET (188u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_STATUS0_OFFSET (190u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_NEG_BSLN_RST_CNT0_OFFSET (191u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_IDAC0_OFFSET (192u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN_EXT0_OFFSET (193u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_RAW0_OFFSET (194u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN0_OFFSET (196u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_DIFF0_OFFSET (198u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_STATUS0_OFFSET (200u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_NEG_BSLN_RST_CNT0_OFFSET (201u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_IDAC0_OFFSET (202u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN_EXT0_OFFSET (203u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_RAW0_OFFSET (204u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN0_OFFSET (206u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_DIFF0_OFFSET (208u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_STATUS0_OFFSET (210u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_OFFSET (211u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_IDAC0_OFFSET (212u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN_EXT0_OFFSET (213u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_RAW0_OFFSET (214u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN0_OFFSET (216u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_DIFF0_OFFSET (218u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_STATUS0_OFFSET (220u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_OFFSET (221u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_IDAC0_OFFSET (222u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN_EXT0_OFFSET (223u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_RAW0_OFFSET (224u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN0_OFFSET (226u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_DIFF0_OFFSET (228u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_STATUS0_OFFSET (230u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_OFFSET (231u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_IDAC0_OFFSET (232u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN_EXT0_OFFSET (233u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_RAW0_OFFSET (234u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN0_OFFSET (236u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_DIFF0_OFFSET (238u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_STATUS0_OFFSET (240u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_OFFSET (241u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_IDAC0_OFFSET (242u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN_EXT0_OFFSET (243u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_RAW0_OFFSET (244u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN0_OFFSET (246u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_DIFF0_OFFSET (248u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_STATUS0_OFFSET (250u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_OFFSET (251u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_IDAC0_OFFSET (252u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN_EXT0_OFFSET (253u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_X0_OFFSET (254u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_X0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Y0_OFFSET (256u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Y0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Z0_OFFSET (258u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Z0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ID0_OFFSET (260u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ID0_SIZE (2u) + +#else /* CY_CAPSENSE_TUNER_MW_VERSION >= 300 */ +#define CY_CAPSENSE_TUNER_CONFIG_ID_OFFSET (0u) +#define CY_CAPSENSE_TUNER_CONFIG_ID_SIZE (2u) + +#define CY_CAPSENSE_TUNER_TUNER_CMD_OFFSET (2u) +#define CY_CAPSENSE_TUNER_TUNER_CMD_SIZE (2u) + +#define CY_CAPSENSE_TUNER_SCAN_COUNTER_OFFSET (4u) +#define CY_CAPSENSE_TUNER_SCAN_COUNTER_SIZE (2u) + +#define CY_CAPSENSE_TUNER_TUNER_ST_OFFSET (6u) +#define CY_CAPSENSE_TUNER_TUNER_ST_SIZE (1u) + +#define CY_CAPSENSE_TUNER_INITDONE_OFFSET (7u) +#define CY_CAPSENSE_TUNER_INITDONE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_STATUS_OFFSET (8u) +#define CY_CAPSENSE_TUNER_STATUS_SIZE (4u) + +#define CY_CAPSENSE_TUNER_TIMESTAMPINTERVAL_OFFSET (12u) +#define CY_CAPSENSE_TUNER_TIMESTAMPINTERVAL_SIZE (4u) + +#define CY_CAPSENSE_TUNER_TIMESTAMP_OFFSET (16u) +#define CY_CAPSENSE_TUNER_TIMESTAMP_SIZE (4u) + +#define CY_CAPSENSE_TUNER_CSD_MOD_CLK_DIVIDER_OFFSET (20u) +#define CY_CAPSENSE_TUNER_CSD_MOD_CLK_DIVIDER_SIZE (1u) + +#define CY_CAPSENSE_TUNER_CSX_MOD_CLK_DIVIDER_OFFSET (21u) +#define CY_CAPSENSE_TUNER_CSX_MOD_CLK_DIVIDER_SIZE (1u) + +#define CY_CAPSENSE_TUNER_TUNER_CNT_OFFSET (22u) +#define CY_CAPSENSE_TUNER_TUNER_CNT_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_CP_OFFSET (24u) +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_SIGPFC_OFFSET (26u) +#define CY_CAPSENSE_TUNER_BUTTON0_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_CONV_OFFSET (28u) +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_CONV_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_MAX_RAW_COUNT_OFFSET (30u) +#define CY_CAPSENSE_TUNER_BUTTON0_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_MAX_RAW_COUNT_OFFSET (32u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_TH_OFFSET (34u) +#define CY_CAPSENSE_TUNER_BUTTON0_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_PROX_TOUCH_TH_OFFSET (36u) +#define CY_CAPSENSE_TUNER_BUTTON0_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_LOW_BSLN_RST_OFFSET (38u) +#define CY_CAPSENSE_TUNER_BUTTON0_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_OFFSET (40u) +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_SNS_CLK_OFFSET (42u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DETECTED_OFFSET (44u) +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DIRECTION_OFFSET (46u) +#define CY_CAPSENSE_TUNER_BUTTON0_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_XDELTA_OFFSET (48u) +#define CY_CAPSENSE_TUNER_BUTTON0_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_YDELTA_OFFSET (50u) +#define CY_CAPSENSE_TUNER_BUTTON0_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NOISE_TH_OFFSET (52u) +#define CY_CAPSENSE_TUNER_BUTTON0_NOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NNOISE_TH_OFFSET (54u) +#define CY_CAPSENSE_TUNER_BUTTON0_NNOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_HYSTERESIS_OFFSET (56u) +#define CY_CAPSENSE_TUNER_BUTTON0_HYSTERESIS_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ON_DEBOUNCE_OFFSET (58u) +#define CY_CAPSENSE_TUNER_BUTTON0_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SOURCE_OFFSET (59u) +#define CY_CAPSENSE_TUNER_BUTTON0_TX_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD0_OFFSET (60u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD1_OFFSET (61u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD2_OFFSET (62u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_GAIN_INDEX_OFFSET (63u) +#define CY_CAPSENSE_TUNER_BUTTON0_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD0_OFFSET (64u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD1_OFFSET (65u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD2_OFFSET (66u) +#define CY_CAPSENSE_TUNER_BUTTON0_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_REGULAR_IIR_BL_N_OFFSET (67u) +#define CY_CAPSENSE_TUNER_BUTTON0_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_STATUS_OFFSET (68u) +#define CY_CAPSENSE_TUNER_BUTTON0_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_PTRPOSITION_OFFSET (72u) +#define CY_CAPSENSE_TUNER_BUTTON0_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_POSITIONS_OFFSET (76u) +#define CY_CAPSENSE_TUNER_BUTTON0_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_CP_OFFSET (80u) +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_SIGPFC_OFFSET (82u) +#define CY_CAPSENSE_TUNER_BUTTON1_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_CONV_OFFSET (84u) +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_CONV_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_MAX_RAW_COUNT_OFFSET (86u) +#define CY_CAPSENSE_TUNER_BUTTON1_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_MAX_RAW_COUNT_OFFSET (88u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_TH_OFFSET (90u) +#define CY_CAPSENSE_TUNER_BUTTON1_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_PROX_TOUCH_TH_OFFSET (92u) +#define CY_CAPSENSE_TUNER_BUTTON1_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_LOW_BSLN_RST_OFFSET (94u) +#define CY_CAPSENSE_TUNER_BUTTON1_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_OFFSET (96u) +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_SNS_CLK_OFFSET (98u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DETECTED_OFFSET (100u) +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DIRECTION_OFFSET (102u) +#define CY_CAPSENSE_TUNER_BUTTON1_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_XDELTA_OFFSET (104u) +#define CY_CAPSENSE_TUNER_BUTTON1_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_YDELTA_OFFSET (106u) +#define CY_CAPSENSE_TUNER_BUTTON1_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NOISE_TH_OFFSET (108u) +#define CY_CAPSENSE_TUNER_BUTTON1_NOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NNOISE_TH_OFFSET (110u) +#define CY_CAPSENSE_TUNER_BUTTON1_NNOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_HYSTERESIS_OFFSET (112u) +#define CY_CAPSENSE_TUNER_BUTTON1_HYSTERESIS_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ON_DEBOUNCE_OFFSET (114u) +#define CY_CAPSENSE_TUNER_BUTTON1_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SOURCE_OFFSET (115u) +#define CY_CAPSENSE_TUNER_BUTTON1_TX_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD0_OFFSET (116u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD1_OFFSET (117u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD2_OFFSET (118u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_GAIN_INDEX_OFFSET (119u) +#define CY_CAPSENSE_TUNER_BUTTON1_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD0_OFFSET (120u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD1_OFFSET (121u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD2_OFFSET (122u) +#define CY_CAPSENSE_TUNER_BUTTON1_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_REGULAR_IIR_BL_N_OFFSET (123u) +#define CY_CAPSENSE_TUNER_BUTTON1_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_STATUS_OFFSET (124u) +#define CY_CAPSENSE_TUNER_BUTTON1_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_PTRPOSITION_OFFSET (128u) +#define CY_CAPSENSE_TUNER_BUTTON1_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_POSITIONS_OFFSET (132u) +#define CY_CAPSENSE_TUNER_BUTTON1_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_CP_OFFSET (136u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_CP_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SIGPFC_OFFSET (138u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SIGPFC_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_RESOLUTION_OFFSET (140u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_RESOLUTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_MAX_RAW_COUNT_OFFSET (142u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_MAX_RAW_COUNT_OFFSET (144u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_MAX_RAW_COUNT_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_TH_OFFSET (146u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_FINGER_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PROX_TOUCH_TH_OFFSET (148u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PROX_TOUCH_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_LOW_BSLN_RST_OFFSET (150u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_LOW_BSLN_RST_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_OFFSET (152u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_SNS_CLK_OFFSET (154u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_SNS_CLK_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DETECTED_OFFSET (156u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DETECTED_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DIRECTION_OFFSET (158u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_GESTURE_DIRECTION_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_XDELTA_OFFSET (160u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_XDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_YDELTA_OFFSET (162u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_YDELTA_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NOISE_TH_OFFSET (164u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NNOISE_TH_OFFSET (166u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NNOISE_TH_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_HYSTERESIS_OFFSET (168u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_HYSTERESIS_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ON_DEBOUNCE_OFFSET (170u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ON_DEBOUNCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SOURCE_OFFSET (171u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS_CLK_SOURCE_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD0_OFFSET (172u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD1_OFFSET (173u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD2_OFFSET (174u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_GAIN_INDEX_OFFSET (175u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_IDAC_GAIN_INDEX_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD0_OFFSET (176u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD1_OFFSET (177u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD1_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD2_OFFSET (178u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ROW_IDAC_MOD2_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_REGULAR_IIR_BL_N_OFFSET (179u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_REGULAR_IIR_BL_N_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_STATUS_OFFSET (180u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_STATUS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PTRPOSITION_OFFSET (184u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_PTRPOSITION_SIZE (4u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NUM_POSITIONS_OFFSET (188u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_NUM_POSITIONS_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_RAW0_OFFSET (192u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN0_OFFSET (194u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_DIFF0_OFFSET (196u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_STATUS0_OFFSET (198u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_NEG_BSLN_RST_CNT0_OFFSET (199u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_IDAC0_OFFSET (200u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN_EXT0_OFFSET (201u) +#define CY_CAPSENSE_TUNER_BUTTON0_RX0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_RAW0_OFFSET (202u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN0_OFFSET (204u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_DIFF0_OFFSET (206u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_STATUS0_OFFSET (208u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_NEG_BSLN_RST_CNT0_OFFSET (209u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_IDAC0_OFFSET (210u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN_EXT0_OFFSET (211u) +#define CY_CAPSENSE_TUNER_BUTTON1_RX0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_RAW0_OFFSET (212u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN0_OFFSET (214u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_DIFF0_OFFSET (216u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_STATUS0_OFFSET (218u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_OFFSET (219u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_IDAC0_OFFSET (220u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN_EXT0_OFFSET (221u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS0_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_RAW0_OFFSET (222u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN0_OFFSET (224u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_DIFF0_OFFSET (226u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_STATUS0_OFFSET (228u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_OFFSET (229u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_IDAC0_OFFSET (230u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN_EXT0_OFFSET (231u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS1_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_RAW0_OFFSET (232u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN0_OFFSET (234u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_DIFF0_OFFSET (236u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_STATUS0_OFFSET (238u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_OFFSET (239u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_IDAC0_OFFSET (240u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN_EXT0_OFFSET (241u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS2_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_RAW0_OFFSET (242u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN0_OFFSET (244u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_DIFF0_OFFSET (246u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_STATUS0_OFFSET (248u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_OFFSET (249u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_IDAC0_OFFSET (250u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN_EXT0_OFFSET (251u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS3_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_RAW0_OFFSET (252u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_RAW0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN0_OFFSET (254u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_DIFF0_OFFSET (256u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_DIFF0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_STATUS0_OFFSET (258u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_STATUS0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_OFFSET (259u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_NEG_BSLN_RST_CNT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_IDAC0_OFFSET (260u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_IDAC0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN_EXT0_OFFSET (261u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_SNS4_BSLN_EXT0_SIZE (1u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_X0_OFFSET (262u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_X0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Y0_OFFSET (264u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Y0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Z0_OFFSET (266u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_Z0_SIZE (2u) + +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ID0_OFFSET (268u) +#define CY_CAPSENSE_TUNER_LINEARSLIDER0_ID0_SIZE (2u) + +#endif + +#endif /* CYCFG_CAPSENSE_TUNER_REGMAP_H */ + +/* [] END OF FILE */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.c new file mode 100644 index 00000000000000..d8298c696d8dde --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.c @@ -0,0 +1,69 @@ +/******************************************************************************* + * File Name: cycfg_clocks.c + * + * Description: + * Clock configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_clocks.h" + +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t peri_0_div_16_15_obj = { + .type = CYHAL_RSC_CLOCK, + .block_num = peri_0_div_16_15_HW, + .channel_num = peri_0_div_16_15_NUM, +}; +const cyhal_resource_inst_t CYBSP_CSD_CLK_DIV_obj = { + .type = CYHAL_RSC_CLOCK, + .block_num = CYBSP_CSD_CLK_DIV_HW, + .channel_num = CYBSP_CSD_CLK_DIV_NUM, +}; +const cyhal_resource_inst_t CYBSP_TRACE_CLK_DIV_obj = { + .type = CYHAL_RSC_CLOCK, + .block_num = CYBSP_TRACE_CLK_DIV_HW, + .channel_num = CYBSP_TRACE_CLK_DIV_NUM, +}; +#endif // defined (CY_USING_HAL) + +void init_cycfg_clocks(void) +{ + Cy_SysClk_PeriphDisableDivider(CY_SYSCLK_DIV_16_BIT, 15U); + Cy_SysClk_PeriphSetDivider(CY_SYSCLK_DIV_16_BIT, 15U, 0U); + Cy_SysClk_PeriphEnableDivider(CY_SYSCLK_DIV_16_BIT, 15U); + Cy_SysClk_PeriphDisableDivider(CY_SYSCLK_DIV_8_BIT, 0U); + Cy_SysClk_PeriphSetDivider(CY_SYSCLK_DIV_8_BIT, 0U, 0U); + Cy_SysClk_PeriphEnableDivider(CY_SYSCLK_DIV_8_BIT, 0U); + Cy_SysClk_PeriphDisableDivider(CY_SYSCLK_DIV_8_BIT, 7U); + Cy_SysClk_PeriphSetDivider(CY_SYSCLK_DIV_8_BIT, 7U, 0U); + Cy_SysClk_PeriphEnableDivider(CY_SYSCLK_DIV_8_BIT, 7U); +} + +void reserve_cycfg_clocks(void) +{ +#if defined(CY_USING_HAL) + cyhal_hwmgr_reserve(&peri_0_div_16_15_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_CLK_DIV_obj); + cyhal_hwmgr_reserve(&CYBSP_TRACE_CLK_DIV_obj); +#endif // defined (CY_USING_HAL) +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.h new file mode 100644 index 00000000000000..8d5d6cf34f40b6 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_clocks.h @@ -0,0 +1,69 @@ +/******************************************************************************* + * File Name: cycfg_clocks.h + * + * Description: + * Clock configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_CLOCKS_H) +#define CYCFG_CLOCKS_H + +#include "cy_sysclk.h" +#include "cycfg_notices.h" +#if defined(CY_USING_HAL) +#include "cyhal_hwmgr.h" +#endif // defined (CY_USING_HAL) + +#if defined(__cplusplus) +extern "C" { +#endif + +#define peri_0_div_16_15_ENABLED 1U +#define peri_0_div_16_15_HW CY_SYSCLK_DIV_16_BIT +#define peri_0_div_16_15_NUM 15U +#define CYBSP_CSD_CLK_DIV_ENABLED 1U +#define CYBSP_CS_CLK_DIV_ENABLED CYBSP_CSD_CLK_DIV_ENABLED +#define CYBSP_CSD_CLK_DIV_HW CY_SYSCLK_DIV_8_BIT +#define CYBSP_CS_CLK_DIV_HW CYBSP_CSD_CLK_DIV_HW +#define CYBSP_CSD_CLK_DIV_NUM 0U +#define CYBSP_CS_CLK_DIV_NUM CYBSP_CSD_CLK_DIV_NUM +#define CYBSP_TRACE_CLK_DIV_ENABLED 1U +#define CYBSP_TRACE_CLK_DIV_HW CY_SYSCLK_DIV_8_BIT +#define CYBSP_TRACE_CLK_DIV_NUM 7U + +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t peri_0_div_16_15_obj; +extern const cyhal_resource_inst_t CYBSP_CSD_CLK_DIV_obj; +#define CYBSP_CS_CLK_DIV_obj CYBSP_CSD_CLK_DIV_obj +extern const cyhal_resource_inst_t CYBSP_TRACE_CLK_DIV_obj; +#endif // defined (CY_USING_HAL) + +void init_cycfg_clocks(void); +void reserve_cycfg_clocks(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_CLOCKS_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.c new file mode 100644 index 00000000000000..8c6062f3adaccf --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.c @@ -0,0 +1,29 @@ +/******************************************************************************* + * File Name: cycfg_connectivity_bt.c + * + * Description: + * Connectivity BT configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_connectivity_bt.h" diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.h new file mode 100644 index 00000000000000..24fbaed1013b81 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_connectivity_bt.h @@ -0,0 +1,52 @@ +/******************************************************************************* + * File Name: cycfg_connectivity_bt.h + * + * Description: + * Connectivity BT configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_CONNECTIVITY_BT_H) +#define CYCFG_CONNECTIVITY_BT_H + +#include "cycfg_notices.h" +#include "cycfg_pins.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#define bt_0_power_0_ENABLED 1U +#define CYCFG_BT_LP_ENABLED (1u) +#define CYCFG_BT_WAKE_EVENT_ACTIVE_LOW (0) +#define CYCFG_BT_WAKE_EVENT_ACTIVE_HIGH (1) +#define CYCFG_BT_HOST_WAKE_GPIO CYBSP_BT_HOST_WAKE +#define CYCFG_BT_HOST_WAKE_IRQ_EVENT CYBT_WAKE_ACTIVE_LOW +#define CYCFG_BT_DEV_WAKE_GPIO CYBSP_BT_DEVICE_WAKE +#define CYCFG_BT_DEV_WAKE_POLARITY CYBT_WAKE_ACTIVE_LOW + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_CONNECTIVITY_BT_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_notices.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_notices.h new file mode 100644 index 00000000000000..ac7067c526b175 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_notices.h @@ -0,0 +1,51 @@ +/******************************************************************************* + * File Name: cycfg_notices.h + * + * Description: + * Contains warnings and errors that occurred while generating code for the + * design. + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_NOTICES_H) +#define CYCFG_NOTICES_H + +#ifdef CY_SUPPORTS_DEVICE_VALIDATION +#ifndef CY8C624ABZI_S2D44 +#error \ + "Unexpected MPN; expected DEVICE:=CY8C624ABZI-S2D44. There may be an inconsistency between the *.modus file and the makefile target configuration device sets." +#endif +#endif + +#ifdef CY_SUPPORTS_COMPLETE_DEVICE_VALIDATION +#ifndef CY8C624ABZI_S2D44 +#error \ + "Unexpected MPN; expected DEVICE:=CY8C624ABZI-S2D44, ADDITIONAL_DEVICES:=CYW43012C0WKWBG. There may be an inconsistency between the *.modus file and the makefile target configuration device sets." +#endif +#ifndef CYW43012C0WKWBG +#error \ + "Unexpected MPN; expected DEVICE:=CY8C624ABZI-S2D44, ADDITIONAL_DEVICES:=CYW43012C0WKWBG. There may be an inconsistency between the *.modus file and the makefile target configuration device sets." +#endif +#endif + +#endif /* CYCFG_NOTICES_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.c new file mode 100644 index 00000000000000..f46d17a4dffcad --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.c @@ -0,0 +1,38 @@ +/******************************************************************************* + * File Name: cycfg_peripherals.c + * + * Description: + * Peripheral Hardware Block configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_peripherals.h" + +cy_stc_csd_context_t cy_csd_0_context = { + .lockKey = CY_CSD_NONE_KEY, +}; + +void init_cycfg_peripherals(void) +{ + Cy_SysClk_PeriphAssignDivider(PCLK_CSD_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.h new file mode 100644 index 00000000000000..19c98a592ca11e --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_peripherals.h @@ -0,0 +1,85 @@ +/******************************************************************************* + * File Name: cycfg_peripherals.h + * + * Description: + * Peripheral Hardware Block configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_PERIPHERALS_H) +#define CYCFG_PERIPHERALS_H + +#include "cy_csd.h" +#include "cy_sysclk.h" +#include "cycfg_notices.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#define CYBSP_CSD_ENABLED 1U +#define CY_CAPSENSE_CORE 4u +#define CY_CAPSENSE_CPU_CLK 100000000u +#define CY_CAPSENSE_PERI_CLK 100000000u +#define CY_CAPSENSE_VDDA_MV 3300u +#define CY_CAPSENSE_PERI_DIV_TYPE CY_SYSCLK_DIV_8_BIT +#define CY_CAPSENSE_PERI_DIV_INDEX 0u +#define Cmod_PORT GPIO_PRT7 +#define CintA_PORT GPIO_PRT7 +#define CintB_PORT GPIO_PRT7 +#define Button0_Rx0_PORT GPIO_PRT1 +#define Button0_Tx_PORT GPIO_PRT8 +#define Button1_Rx0_PORT GPIO_PRT1 +#define Button1_Tx_PORT GPIO_PRT8 +#define LinearSlider0_Sns0_PORT GPIO_PRT8 +#define LinearSlider0_Sns1_PORT GPIO_PRT8 +#define LinearSlider0_Sns2_PORT GPIO_PRT8 +#define LinearSlider0_Sns3_PORT GPIO_PRT8 +#define LinearSlider0_Sns4_PORT GPIO_PRT8 +#define Cmod_PIN 7u +#define CintA_PIN 1u +#define CintB_PIN 2u +#define Button0_Rx0_PIN 0u +#define Button0_Tx_PIN 1u +#define Button1_Rx0_PIN 0u +#define Button1_Tx_PIN 2u +#define LinearSlider0_Sns0_PIN 3u +#define LinearSlider0_Sns1_PIN 4u +#define LinearSlider0_Sns2_PIN 5u +#define LinearSlider0_Sns3_PIN 6u +#define LinearSlider0_Sns4_PIN 7u +#define Cmod_PORT_NUM 7u +#define CintA_PORT_NUM 7u +#define CintB_PORT_NUM 7u +#define CYBSP_CSD_HW CSD0 +#define CYBSP_CSD_IRQ csd_interrupt_IRQn + +extern cy_stc_csd_context_t cy_csd_0_context; + +void init_cycfg_peripherals(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_PERIPHERALS_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.c new file mode 100644 index 00000000000000..10c5ff5a8414e4 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.c @@ -0,0 +1,411 @@ +/******************************************************************************* + * File Name: cycfg_pins.c + * + * Description: + * Pin configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_pins.h" + +const cy_stc_gpio_pin_config_t CYBSP_WCO_IN_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_WCO_IN_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_WCO_IN_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_WCO_IN_PORT_NUM, + .channel_num = CYBSP_WCO_IN_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_WCO_OUT_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_WCO_OUT_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_WCO_OUT_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_WCO_OUT_PORT_NUM, + .channel_num = CYBSP_WCO_OUT_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_RX_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_RX_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_RX_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_RX_PORT_NUM, + .channel_num = CYBSP_CSD_RX_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_SWO_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_STRONG_IN_OFF, + .hsiom = CYBSP_SWO_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_SWO_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_SWO_PORT_NUM, + .channel_num = CYBSP_SWO_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_SWDIO_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_PULLUP, + .hsiom = CYBSP_SWDIO_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_SWDIO_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_SWDIO_PORT_NUM, + .channel_num = CYBSP_SWDIO_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_SWDCK_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_PULLDOWN, + .hsiom = CYBSP_SWDCK_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_SWDCK_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_SWDCK_PORT_NUM, + .channel_num = CYBSP_SWDCK_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CINA_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CINA_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CINA_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CINA_PORT_NUM, + .channel_num = CYBSP_CINA_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CINB_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CINB_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CINB_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CINB_PORT_NUM, + .channel_num = CYBSP_CINB_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CMOD_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CMOD_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CMOD_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CMOD_PORT_NUM, + .channel_num = CYBSP_CMOD_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_BTN0_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_BTN0_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_BTN0_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_BTN0_PORT_NUM, + .channel_num = CYBSP_CSD_BTN0_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_BTN1_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_BTN1_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_BTN1_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_BTN1_PORT_NUM, + .channel_num = CYBSP_CSD_BTN1_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD0_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_SLD0_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_SLD0_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_SLD0_PORT_NUM, + .channel_num = CYBSP_CSD_SLD0_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD1_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_SLD1_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_SLD1_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_SLD1_PORT_NUM, + .channel_num = CYBSP_CSD_SLD1_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD2_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_SLD2_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_SLD2_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_SLD2_PORT_NUM, + .channel_num = CYBSP_CSD_SLD2_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD3_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_SLD3_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_SLD3_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_SLD3_PORT_NUM, + .channel_num = CYBSP_CSD_SLD3_PIN, +}; +#endif // defined (CY_USING_HAL) +const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD4_config = { + .outVal = 1, + .driveMode = CY_GPIO_DM_ANALOG, + .hsiom = CYBSP_CSD_SLD4_HSIOM, + .intEdge = CY_GPIO_INTR_DISABLE, + .intMask = 0UL, + .vtrip = CY_GPIO_VTRIP_CMOS, + .slewRate = CY_GPIO_SLEW_FAST, + .driveSel = CY_GPIO_DRIVE_1_2, + .vregEn = 0UL, + .ibufMode = 0UL, + .vtripSel = 0UL, + .vrefSel = 0UL, + .vohSel = 0UL, +}; +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t CYBSP_CSD_SLD4_obj = { + .type = CYHAL_RSC_GPIO, + .block_num = CYBSP_CSD_SLD4_PORT_NUM, + .channel_num = CYBSP_CSD_SLD4_PIN, +}; +#endif // defined (CY_USING_HAL) + +void init_cycfg_pins(void) +{ + Cy_GPIO_Pin_Init(CYBSP_SWO_PORT, CYBSP_SWO_PIN, &CYBSP_SWO_config); + Cy_GPIO_Pin_Init(CYBSP_SWDIO_PORT, CYBSP_SWDIO_PIN, &CYBSP_SWDIO_config); + Cy_GPIO_Pin_Init(CYBSP_SWDCK_PORT, CYBSP_SWDCK_PIN, &CYBSP_SWDCK_config); +} + +void reserve_cycfg_pins(void) +{ +#if defined(CY_USING_HAL) + cyhal_hwmgr_reserve(&CYBSP_WCO_IN_obj); + cyhal_hwmgr_reserve(&CYBSP_WCO_OUT_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_RX_obj); + cyhal_hwmgr_reserve(&CYBSP_SWO_obj); + cyhal_hwmgr_reserve(&CYBSP_SWDIO_obj); + cyhal_hwmgr_reserve(&CYBSP_SWDCK_obj); + cyhal_hwmgr_reserve(&CYBSP_CINA_obj); + cyhal_hwmgr_reserve(&CYBSP_CINB_obj); + cyhal_hwmgr_reserve(&CYBSP_CMOD_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_BTN0_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_BTN1_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_SLD0_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_SLD1_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_SLD2_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_SLD3_obj); + cyhal_hwmgr_reserve(&CYBSP_CSD_SLD4_obj); +#endif // defined (CY_USING_HAL) +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.h new file mode 100644 index 00000000000000..6614740f3e5646 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_pins.h @@ -0,0 +1,674 @@ +/******************************************************************************* + * File Name: cycfg_pins.h + * + * Description: + * Pin configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_PINS_H) +#define CYCFG_PINS_H + +#include "cy_gpio.h" +#include "cycfg_notices.h" +#include "cycfg_routing.h" +#if defined(CY_USING_HAL) +#include "cyhal_hwmgr.h" +#endif // defined (CY_USING_HAL) + +#if defined(__cplusplus) +extern "C" { +#endif + +#define CYBSP_WCO_IN_ENABLED 1U +#define CYBSP_WCO_IN_PORT GPIO_PRT0 +#define CYBSP_WCO_IN_PORT_NUM 0U +#define CYBSP_WCO_IN_PIN 0U +#define CYBSP_WCO_IN_NUM 0U +#define CYBSP_WCO_IN_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_WCO_IN_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_0_pin_0_HSIOM +#define ioss_0_port_0_pin_0_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_WCO_IN_HSIOM ioss_0_port_0_pin_0_HSIOM +#define CYBSP_WCO_IN_IRQ ioss_interrupts_gpio_0_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_WCO_IN_HAL_PORT_PIN P0_0 +#define CYBSP_WCO_IN P0_0 +#define CYBSP_WCO_IN_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_WCO_IN_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_WCO_IN_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#endif // defined (CY_USING_HAL) +#define CYBSP_WCO_OUT_ENABLED 1U +#define CYBSP_WCO_OUT_PORT GPIO_PRT0 +#define CYBSP_WCO_OUT_PORT_NUM 0U +#define CYBSP_WCO_OUT_PIN 1U +#define CYBSP_WCO_OUT_NUM 1U +#define CYBSP_WCO_OUT_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_WCO_OUT_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_0_pin_1_HSIOM +#define ioss_0_port_0_pin_1_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_WCO_OUT_HSIOM ioss_0_port_0_pin_1_HSIOM +#define CYBSP_WCO_OUT_IRQ ioss_interrupts_gpio_0_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_WCO_OUT_HAL_PORT_PIN P0_1 +#define CYBSP_WCO_OUT P0_1 +#define CYBSP_WCO_OUT_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_WCO_OUT_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_WCO_OUT_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_SW2 (P0_4) +#define CYBSP_USER_BTN1 CYBSP_SW2 +#define CYBSP_USER_BTN CYBSP_SW2 +#define CYBSP_LED_RGB_GREEN (P0_5) +#define CYBSP_USER_LED4 CYBSP_LED_RGB_GREEN +#define CYBSP_A0 (P10_0) +#define CYBSP_J2_1 CYBSP_A0 +#define CYBSP_A1 (P10_1) +#define CYBSP_J2_3 CYBSP_A1 +#define CYBSP_A2 (P10_2) +#define CYBSP_J2_5 CYBSP_A2 +#define CYBSP_A3 (P10_3) +#define CYBSP_J2_7 CYBSP_A3 +#define CYBSP_A4 (P10_4) +#define CYBSP_J2_9 CYBSP_A4 +#define CYBSP_A5 (P10_5) +#define CYBSP_J2_11 CYBSP_A5 +#define CYBSP_A6 (P10_6) +#define CYBSP_J2_13 CYBSP_A6 +#define CYBSP_POT CYBSP_A6 +#define CYBSP_A7 (P10_7) +#define CYBSP_J2_15 CYBSP_A7 +#define CYBSP_QSPI_FRAM_SSEL (P11_0) +#define CYBSP_LED9 (P11_1) +#define CYBSP_USER_LED2 CYBSP_LED9 +#define CYBSP_QSPI_SS (P11_2) +#define CYBSP_QSPI_FLASH_SSEL CYBSP_QSPI_SS +#define CYBSP_QSPI_D3 (P11_3) +#define CYBSP_QSPI_D2 (P11_4) +#define CYBSP_QSPI_D1 (P11_5) +#define CYBSP_QSPI_D0 (P11_6) +#define CYBSP_QSPI_SCK (P11_7) +#define CYBSP_SPI_MOSI (P12_0) +#define CYBSP_D11 CYBSP_SPI_MOSI +#define CYBSP_SPI_MISO (P12_1) +#define CYBSP_D12 CYBSP_SPI_MISO +#define CYBSP_SPI_CLK (P12_2) +#define CYBSP_D13 CYBSP_SPI_CLK +#define CYBSP_SPI_CS (P12_3) +#define CYBSP_D10 CYBSP_SPI_CS +#define CYBSP_SDHC_CMD (P12_4) +#define CYBSP_SDHC_CLK (P12_5) +#define CYBSP_SDHC_IO0 (P13_0) +#define CYBSP_SDHC_IO1 (P13_1) +#define CYBSP_SDHC_IO2 (P13_2) +#define CYBSP_SDHC_IO3 (P13_3) +#define CYBSP_SDHC_DETECT (P13_7) +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_RX_ENABLED 1U +#define CYBSP_CS_RX_ENABLED CYBSP_CSD_RX_ENABLED +#define CYBSP_CS_TX_RX_ENABLED CYBSP_CSD_RX_ENABLED +#define CYBSP_CSD_RX_PORT GPIO_PRT1 +#define CYBSP_CS_RX_PORT CYBSP_CSD_RX_PORT +#define CYBSP_CS_TX_RX_PORT CYBSP_CSD_RX_PORT +#define CYBSP_CSD_RX_PORT_NUM 1U +#define CYBSP_CS_RX_PORT_NUM CYBSP_CSD_RX_PORT_NUM +#define CYBSP_CS_TX_RX_PORT_NUM CYBSP_CSD_RX_PORT_NUM +#define CYBSP_CSD_RX_PIN 0U +#define CYBSP_CS_RX_PIN CYBSP_CSD_RX_PIN +#define CYBSP_CS_TX_RX_PIN CYBSP_CSD_RX_PIN +#define CYBSP_CSD_RX_NUM 0U +#define CYBSP_CS_RX_NUM CYBSP_CSD_RX_NUM +#define CYBSP_CS_TX_RX_NUM CYBSP_CSD_RX_NUM +#define CYBSP_CSD_RX_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_RX_DRIVEMODE CYBSP_CSD_RX_DRIVEMODE +#define CYBSP_CS_TX_RX_DRIVEMODE CYBSP_CSD_RX_DRIVEMODE +#define CYBSP_CSD_RX_INIT_DRIVESTATE 1 +#define CYBSP_CS_RX_INIT_DRIVESTATE CYBSP_CSD_RX_INIT_DRIVESTATE +#define CYBSP_CS_TX_RX_INIT_DRIVESTATE CYBSP_CSD_RX_INIT_DRIVESTATE +#ifndef ioss_0_port_1_pin_0_HSIOM +#define ioss_0_port_1_pin_0_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_RX_HSIOM ioss_0_port_1_pin_0_HSIOM +#define CYBSP_CS_RX_HSIOM CYBSP_CSD_RX_HSIOM +#define CYBSP_CS_TX_RX_HSIOM CYBSP_CSD_RX_HSIOM +#define CYBSP_CSD_RX_IRQ ioss_interrupts_gpio_1_IRQn +#define CYBSP_CS_RX_IRQ CYBSP_CSD_RX_IRQ +#define CYBSP_CS_TX_RX_IRQ CYBSP_CSD_RX_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_RX_HAL_PORT_PIN P1_0 +#define CYBSP_CS_RX_HAL_PORT_PIN CYBSP_CSD_RX_HAL_PORT_PIN +#define CYBSP_CS_TX_RX_HAL_PORT_PIN CYBSP_CSD_RX_HAL_PORT_PIN +#define CYBSP_CSD_RX P1_0 +#define CYBSP_CS_RX CYBSP_CSD_RX +#define CYBSP_CS_TX_RX CYBSP_CSD_RX +#define CYBSP_CSD_RX_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_RX_HAL_IRQ CYBSP_CSD_RX_HAL_IRQ +#define CYBSP_CS_TX_RX_HAL_IRQ CYBSP_CSD_RX_HAL_IRQ +#define CYBSP_CSD_RX_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_RX_HAL_DIR CYBSP_CSD_RX_HAL_DIR +#define CYBSP_CS_TX_RX_HAL_DIR CYBSP_CSD_RX_HAL_DIR +#define CYBSP_CSD_RX_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_RX_HAL_DRIVEMODE CYBSP_CSD_RX_HAL_DRIVEMODE +#define CYBSP_CS_TX_RX_HAL_DRIVEMODE CYBSP_CSD_RX_HAL_DRIVEMODE +#define CYBSP_LED_RGB_RED (P1_1) +#define CYBSP_USER_LED3 CYBSP_LED_RGB_RED +#define CYBSP_SW4 (P1_4) +#define CYBSP_USER_BTN2 CYBSP_SW4 +#define CYBSP_LED8 (P1_5) +#define CYBSP_USER_LED1 CYBSP_LED8 +#define CYBSP_USER_LED CYBSP_LED8 +#define CYBSP_WIFI_SDIO_D0 (P2_0) +#define CYBSP_WIFI_SDIO_D1 (P2_1) +#define CYBSP_WIFI_SDIO_D2 (P2_2) +#define CYBSP_WIFI_SDIO_D3 (P2_3) +#define CYBSP_WIFI_SDIO_CMD (P2_4) +#define CYBSP_WIFI_SDIO_CLK (P2_5) +#define CYBSP_WIFI_WL_REG_ON (P2_6) +#define CYBSP_BT_UART_RX (P3_0) +#define CYBSP_BT_UART_TX (P3_1) +#define CYBSP_BT_UART_RTS (P3_2) +#define CYBSP_BT_UART_CTS (P3_3) +#define CYBSP_BT_POWER (P3_4) +#define CYBSP_BT_DEVICE_WAKE (P3_5) +#define CYBSP_BT_HOST_WAKE (P4_0) +#define CYBSP_WIFI_HOST_WAKE (P4_1) +#define CYBSP_DEBUG_UART_RX (P5_0) +#define CYBSP_D0 CYBSP_DEBUG_UART_RX +#define CYBSP_DEBUG_UART_TX (P5_1) +#define CYBSP_D1 CYBSP_DEBUG_UART_TX +#define CYBSP_DEBUG_UART_RTS (P5_2) +#define CYBSP_D2 CYBSP_DEBUG_UART_RTS +#define CYBSP_DEBUG_UART_CTS (P5_3) +#define CYBSP_D3 CYBSP_DEBUG_UART_CTS +#define CYBSP_D4 (P5_4) +#define CYBSP_D5 (P5_5) +#define CYBSP_D6 (P5_6) +#define CYBSP_D7 (P5_7) +#define CYBSP_I2C_SCL (P6_0) +#define CYBSP_D15 CYBSP_I2C_SCL +#define CYBSP_I2C_SDA (P6_1) +#define CYBSP_D14 CYBSP_I2C_SDA +#endif // defined (CY_USING_HAL) +#define CYBSP_SWO_ENABLED 1U +#define CYBSP_SWO_PORT GPIO_PRT6 +#define CYBSP_SWO_PORT_NUM 6U +#define CYBSP_SWO_PIN 4U +#define CYBSP_SWO_NUM 4U +#define CYBSP_SWO_DRIVEMODE CY_GPIO_DM_STRONG_IN_OFF +#define CYBSP_SWO_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_6_pin_4_HSIOM +#define ioss_0_port_6_pin_4_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_SWO_HSIOM ioss_0_port_6_pin_4_HSIOM +#define CYBSP_SWO_IRQ ioss_interrupts_gpio_6_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_SWO_HAL_PORT_PIN P6_4 +#define CYBSP_SWO P6_4 +#define CYBSP_SWO_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_SWO_HAL_DIR CYHAL_GPIO_DIR_OUTPUT +#define CYBSP_SWO_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_STRONG +#endif // defined (CY_USING_HAL) +#define CYBSP_SWDIO_ENABLED 1U +#define CYBSP_SWDIO_PORT GPIO_PRT6 +#define CYBSP_SWDIO_PORT_NUM 6U +#define CYBSP_SWDIO_PIN 6U +#define CYBSP_SWDIO_NUM 6U +#define CYBSP_SWDIO_DRIVEMODE CY_GPIO_DM_PULLUP +#define CYBSP_SWDIO_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_6_pin_6_HSIOM +#define ioss_0_port_6_pin_6_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_SWDIO_HSIOM ioss_0_port_6_pin_6_HSIOM +#define CYBSP_SWDIO_IRQ ioss_interrupts_gpio_6_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_SWDIO_HAL_PORT_PIN P6_6 +#define CYBSP_SWDIO P6_6 +#define CYBSP_SWDIO_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_SWDIO_HAL_DIR CYHAL_GPIO_DIR_BIDIRECTIONAL +#define CYBSP_SWDIO_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_PULLUP +#endif // defined (CY_USING_HAL) +#define CYBSP_SWDCK_ENABLED 1U +#define CYBSP_SWDCK_PORT GPIO_PRT6 +#define CYBSP_SWDCK_PORT_NUM 6U +#define CYBSP_SWDCK_PIN 7U +#define CYBSP_SWDCK_NUM 7U +#define CYBSP_SWDCK_DRIVEMODE CY_GPIO_DM_PULLDOWN +#define CYBSP_SWDCK_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_6_pin_7_HSIOM +#define ioss_0_port_6_pin_7_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_SWDCK_HSIOM ioss_0_port_6_pin_7_HSIOM +#define CYBSP_SWDCK_IRQ ioss_interrupts_gpio_6_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_SWDCK_HAL_PORT_PIN P6_7 +#define CYBSP_SWDCK P6_7 +#define CYBSP_SWDCK_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_SWDCK_HAL_DIR CYHAL_GPIO_DIR_BIDIRECTIONAL +#define CYBSP_SWDCK_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_PULLDOWN +#define CYBSP_TRACE_CLK (P7_0) +#endif // defined (CY_USING_HAL) +#define CYBSP_CINA_ENABLED 1U +#define CYBSP_CINA_PORT GPIO_PRT7 +#define CYBSP_CINA_PORT_NUM 7U +#define CYBSP_CINA_PIN 1U +#define CYBSP_CINA_NUM 1U +#define CYBSP_CINA_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CINA_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_7_pin_1_HSIOM +#define ioss_0_port_7_pin_1_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CINA_HSIOM ioss_0_port_7_pin_1_HSIOM +#define CYBSP_CINA_IRQ ioss_interrupts_gpio_7_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_CINA_HAL_PORT_PIN P7_1 +#define CYBSP_CINA P7_1 +#define CYBSP_CINA_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CINA_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CINA_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#endif // defined (CY_USING_HAL) +#define CYBSP_CINB_ENABLED 1U +#define CYBSP_CINB_PORT GPIO_PRT7 +#define CYBSP_CINB_PORT_NUM 7U +#define CYBSP_CINB_PIN 2U +#define CYBSP_CINB_NUM 2U +#define CYBSP_CINB_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CINB_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_7_pin_2_HSIOM +#define ioss_0_port_7_pin_2_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CINB_HSIOM ioss_0_port_7_pin_2_HSIOM +#define CYBSP_CINB_IRQ ioss_interrupts_gpio_7_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_CINB_HAL_PORT_PIN P7_2 +#define CYBSP_CINB P7_2 +#define CYBSP_CINB_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CINB_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CINB_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_LED_RGB_BLUE (P7_3) +#define CYBSP_USER_LED5 CYBSP_LED_RGB_BLUE +#define CYBSP_TRACE_DATA3 (P7_4) +#define CYBSP_D8 (P7_5) +#define CYBSP_TRACE_DATA2 CYBSP_D8 +#define CYBSP_D9 (P7_6) +#define CYBSP_TRACE_DATA1 CYBSP_D9 +#endif // defined (CY_USING_HAL) +#define CYBSP_CMOD_ENABLED 1U +#define CYBSP_CMOD_PORT GPIO_PRT7 +#define CYBSP_CMOD_PORT_NUM 7U +#define CYBSP_CMOD_PIN 7U +#define CYBSP_CMOD_NUM 7U +#define CYBSP_CMOD_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CMOD_INIT_DRIVESTATE 1 +#ifndef ioss_0_port_7_pin_7_HSIOM +#define ioss_0_port_7_pin_7_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CMOD_HSIOM ioss_0_port_7_pin_7_HSIOM +#define CYBSP_CMOD_IRQ ioss_interrupts_gpio_7_IRQn +#if defined(CY_USING_HAL) +#define CYBSP_CMOD_HAL_PORT_PIN P7_7 +#define CYBSP_CMOD P7_7 +#define CYBSP_CMOD_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CMOD_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CMOD_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_BTN0_ENABLED 1U +#define CYBSP_CS_BTN0_ENABLED CYBSP_CSD_BTN0_ENABLED +#define CYBSP_CSD_BTN0_PORT GPIO_PRT8 +#define CYBSP_CS_BTN0_PORT CYBSP_CSD_BTN0_PORT +#define CYBSP_CSD_BTN0_PORT_NUM 8U +#define CYBSP_CS_BTN0_PORT_NUM CYBSP_CSD_BTN0_PORT_NUM +#define CYBSP_CSD_BTN0_PIN 1U +#define CYBSP_CS_BTN0_PIN CYBSP_CSD_BTN0_PIN +#define CYBSP_CSD_BTN0_NUM 1U +#define CYBSP_CS_BTN0_NUM CYBSP_CSD_BTN0_NUM +#define CYBSP_CSD_BTN0_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_BTN0_DRIVEMODE CYBSP_CSD_BTN0_DRIVEMODE +#define CYBSP_CSD_BTN0_INIT_DRIVESTATE 1 +#define CYBSP_CS_BTN0_INIT_DRIVESTATE CYBSP_CSD_BTN0_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_1_HSIOM +#define ioss_0_port_8_pin_1_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_BTN0_HSIOM ioss_0_port_8_pin_1_HSIOM +#define CYBSP_CS_BTN0_HSIOM CYBSP_CSD_BTN0_HSIOM +#define CYBSP_CSD_BTN0_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_BTN0_IRQ CYBSP_CSD_BTN0_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_BTN0_HAL_PORT_PIN P8_1 +#define CYBSP_CS_BTN0_HAL_PORT_PIN CYBSP_CSD_BTN0_HAL_PORT_PIN +#define CYBSP_CSD_BTN0 P8_1 +#define CYBSP_CS_BTN0 CYBSP_CSD_BTN0 +#define CYBSP_CSD_BTN0_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_BTN0_HAL_IRQ CYBSP_CSD_BTN0_HAL_IRQ +#define CYBSP_CSD_BTN0_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_BTN0_HAL_DIR CYBSP_CSD_BTN0_HAL_DIR +#define CYBSP_CSD_BTN0_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_BTN0_HAL_DRIVEMODE CYBSP_CSD_BTN0_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_BTN1_ENABLED 1U +#define CYBSP_CS_BTN1_ENABLED CYBSP_CSD_BTN1_ENABLED +#define CYBSP_CSD_BTN1_PORT GPIO_PRT8 +#define CYBSP_CS_BTN1_PORT CYBSP_CSD_BTN1_PORT +#define CYBSP_CSD_BTN1_PORT_NUM 8U +#define CYBSP_CS_BTN1_PORT_NUM CYBSP_CSD_BTN1_PORT_NUM +#define CYBSP_CSD_BTN1_PIN 2U +#define CYBSP_CS_BTN1_PIN CYBSP_CSD_BTN1_PIN +#define CYBSP_CSD_BTN1_NUM 2U +#define CYBSP_CS_BTN1_NUM CYBSP_CSD_BTN1_NUM +#define CYBSP_CSD_BTN1_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_BTN1_DRIVEMODE CYBSP_CSD_BTN1_DRIVEMODE +#define CYBSP_CSD_BTN1_INIT_DRIVESTATE 1 +#define CYBSP_CS_BTN1_INIT_DRIVESTATE CYBSP_CSD_BTN1_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_2_HSIOM +#define ioss_0_port_8_pin_2_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_BTN1_HSIOM ioss_0_port_8_pin_2_HSIOM +#define CYBSP_CS_BTN1_HSIOM CYBSP_CSD_BTN1_HSIOM +#define CYBSP_CSD_BTN1_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_BTN1_IRQ CYBSP_CSD_BTN1_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_BTN1_HAL_PORT_PIN P8_2 +#define CYBSP_CS_BTN1_HAL_PORT_PIN CYBSP_CSD_BTN1_HAL_PORT_PIN +#define CYBSP_CSD_BTN1 P8_2 +#define CYBSP_CS_BTN1 CYBSP_CSD_BTN1 +#define CYBSP_CSD_BTN1_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_BTN1_HAL_IRQ CYBSP_CSD_BTN1_HAL_IRQ +#define CYBSP_CSD_BTN1_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_BTN1_HAL_DIR CYBSP_CSD_BTN1_HAL_DIR +#define CYBSP_CSD_BTN1_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_BTN1_HAL_DRIVEMODE CYBSP_CSD_BTN1_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_SLD0_ENABLED 1U +#define CYBSP_CS_SLD0_ENABLED CYBSP_CSD_SLD0_ENABLED +#define CYBSP_CSD_SLD0_PORT GPIO_PRT8 +#define CYBSP_CS_SLD0_PORT CYBSP_CSD_SLD0_PORT +#define CYBSP_CSD_SLD0_PORT_NUM 8U +#define CYBSP_CS_SLD0_PORT_NUM CYBSP_CSD_SLD0_PORT_NUM +#define CYBSP_CSD_SLD0_PIN 3U +#define CYBSP_CS_SLD0_PIN CYBSP_CSD_SLD0_PIN +#define CYBSP_CSD_SLD0_NUM 3U +#define CYBSP_CS_SLD0_NUM CYBSP_CSD_SLD0_NUM +#define CYBSP_CSD_SLD0_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_SLD0_DRIVEMODE CYBSP_CSD_SLD0_DRIVEMODE +#define CYBSP_CSD_SLD0_INIT_DRIVESTATE 1 +#define CYBSP_CS_SLD0_INIT_DRIVESTATE CYBSP_CSD_SLD0_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_3_HSIOM +#define ioss_0_port_8_pin_3_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_SLD0_HSIOM ioss_0_port_8_pin_3_HSIOM +#define CYBSP_CS_SLD0_HSIOM CYBSP_CSD_SLD0_HSIOM +#define CYBSP_CSD_SLD0_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_SLD0_IRQ CYBSP_CSD_SLD0_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_SLD0_HAL_PORT_PIN P8_3 +#define CYBSP_CS_SLD0_HAL_PORT_PIN CYBSP_CSD_SLD0_HAL_PORT_PIN +#define CYBSP_CSD_SLD0 P8_3 +#define CYBSP_CS_SLD0 CYBSP_CSD_SLD0 +#define CYBSP_CSD_SLD0_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_SLD0_HAL_IRQ CYBSP_CSD_SLD0_HAL_IRQ +#define CYBSP_CSD_SLD0_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_SLD0_HAL_DIR CYBSP_CSD_SLD0_HAL_DIR +#define CYBSP_CSD_SLD0_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_SLD0_HAL_DRIVEMODE CYBSP_CSD_SLD0_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_SLD1_ENABLED 1U +#define CYBSP_CS_SLD1_ENABLED CYBSP_CSD_SLD1_ENABLED +#define CYBSP_CSD_SLD1_PORT GPIO_PRT8 +#define CYBSP_CS_SLD1_PORT CYBSP_CSD_SLD1_PORT +#define CYBSP_CSD_SLD1_PORT_NUM 8U +#define CYBSP_CS_SLD1_PORT_NUM CYBSP_CSD_SLD1_PORT_NUM +#define CYBSP_CSD_SLD1_PIN 4U +#define CYBSP_CS_SLD1_PIN CYBSP_CSD_SLD1_PIN +#define CYBSP_CSD_SLD1_NUM 4U +#define CYBSP_CS_SLD1_NUM CYBSP_CSD_SLD1_NUM +#define CYBSP_CSD_SLD1_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_SLD1_DRIVEMODE CYBSP_CSD_SLD1_DRIVEMODE +#define CYBSP_CSD_SLD1_INIT_DRIVESTATE 1 +#define CYBSP_CS_SLD1_INIT_DRIVESTATE CYBSP_CSD_SLD1_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_4_HSIOM +#define ioss_0_port_8_pin_4_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_SLD1_HSIOM ioss_0_port_8_pin_4_HSIOM +#define CYBSP_CS_SLD1_HSIOM CYBSP_CSD_SLD1_HSIOM +#define CYBSP_CSD_SLD1_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_SLD1_IRQ CYBSP_CSD_SLD1_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_SLD1_HAL_PORT_PIN P8_4 +#define CYBSP_CS_SLD1_HAL_PORT_PIN CYBSP_CSD_SLD1_HAL_PORT_PIN +#define CYBSP_CSD_SLD1 P8_4 +#define CYBSP_CS_SLD1 CYBSP_CSD_SLD1 +#define CYBSP_CSD_SLD1_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_SLD1_HAL_IRQ CYBSP_CSD_SLD1_HAL_IRQ +#define CYBSP_CSD_SLD1_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_SLD1_HAL_DIR CYBSP_CSD_SLD1_HAL_DIR +#define CYBSP_CSD_SLD1_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_SLD1_HAL_DRIVEMODE CYBSP_CSD_SLD1_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_SLD2_ENABLED 1U +#define CYBSP_CS_SLD2_ENABLED CYBSP_CSD_SLD2_ENABLED +#define CYBSP_CSD_SLD2_PORT GPIO_PRT8 +#define CYBSP_CS_SLD2_PORT CYBSP_CSD_SLD2_PORT +#define CYBSP_CSD_SLD2_PORT_NUM 8U +#define CYBSP_CS_SLD2_PORT_NUM CYBSP_CSD_SLD2_PORT_NUM +#define CYBSP_CSD_SLD2_PIN 5U +#define CYBSP_CS_SLD2_PIN CYBSP_CSD_SLD2_PIN +#define CYBSP_CSD_SLD2_NUM 5U +#define CYBSP_CS_SLD2_NUM CYBSP_CSD_SLD2_NUM +#define CYBSP_CSD_SLD2_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_SLD2_DRIVEMODE CYBSP_CSD_SLD2_DRIVEMODE +#define CYBSP_CSD_SLD2_INIT_DRIVESTATE 1 +#define CYBSP_CS_SLD2_INIT_DRIVESTATE CYBSP_CSD_SLD2_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_5_HSIOM +#define ioss_0_port_8_pin_5_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_SLD2_HSIOM ioss_0_port_8_pin_5_HSIOM +#define CYBSP_CS_SLD2_HSIOM CYBSP_CSD_SLD2_HSIOM +#define CYBSP_CSD_SLD2_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_SLD2_IRQ CYBSP_CSD_SLD2_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_SLD2_HAL_PORT_PIN P8_5 +#define CYBSP_CS_SLD2_HAL_PORT_PIN CYBSP_CSD_SLD2_HAL_PORT_PIN +#define CYBSP_CSD_SLD2 P8_5 +#define CYBSP_CS_SLD2 CYBSP_CSD_SLD2 +#define CYBSP_CSD_SLD2_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_SLD2_HAL_IRQ CYBSP_CSD_SLD2_HAL_IRQ +#define CYBSP_CSD_SLD2_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_SLD2_HAL_DIR CYBSP_CSD_SLD2_HAL_DIR +#define CYBSP_CSD_SLD2_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_SLD2_HAL_DRIVEMODE CYBSP_CSD_SLD2_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_SLD3_ENABLED 1U +#define CYBSP_CS_SLD3_ENABLED CYBSP_CSD_SLD3_ENABLED +#define CYBSP_CSD_SLD3_PORT GPIO_PRT8 +#define CYBSP_CS_SLD3_PORT CYBSP_CSD_SLD3_PORT +#define CYBSP_CSD_SLD3_PORT_NUM 8U +#define CYBSP_CS_SLD3_PORT_NUM CYBSP_CSD_SLD3_PORT_NUM +#define CYBSP_CSD_SLD3_PIN 6U +#define CYBSP_CS_SLD3_PIN CYBSP_CSD_SLD3_PIN +#define CYBSP_CSD_SLD3_NUM 6U +#define CYBSP_CS_SLD3_NUM CYBSP_CSD_SLD3_NUM +#define CYBSP_CSD_SLD3_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_SLD3_DRIVEMODE CYBSP_CSD_SLD3_DRIVEMODE +#define CYBSP_CSD_SLD3_INIT_DRIVESTATE 1 +#define CYBSP_CS_SLD3_INIT_DRIVESTATE CYBSP_CSD_SLD3_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_6_HSIOM +#define ioss_0_port_8_pin_6_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_SLD3_HSIOM ioss_0_port_8_pin_6_HSIOM +#define CYBSP_CS_SLD3_HSIOM CYBSP_CSD_SLD3_HSIOM +#define CYBSP_CSD_SLD3_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_SLD3_IRQ CYBSP_CSD_SLD3_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_SLD3_HAL_PORT_PIN P8_6 +#define CYBSP_CS_SLD3_HAL_PORT_PIN CYBSP_CSD_SLD3_HAL_PORT_PIN +#define CYBSP_CSD_SLD3 P8_6 +#define CYBSP_CS_SLD3 CYBSP_CSD_SLD3 +#define CYBSP_CSD_SLD3_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_SLD3_HAL_IRQ CYBSP_CSD_SLD3_HAL_IRQ +#define CYBSP_CSD_SLD3_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_SLD3_HAL_DIR CYBSP_CSD_SLD3_HAL_DIR +#define CYBSP_CSD_SLD3_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_SLD3_HAL_DRIVEMODE CYBSP_CSD_SLD3_HAL_DRIVEMODE +#endif // defined (CY_USING_HAL) +#define CYBSP_CSD_SLD4_ENABLED 1U +#define CYBSP_CS_SLD4_ENABLED CYBSP_CSD_SLD4_ENABLED +#define CYBSP_CSD_SLD4_PORT GPIO_PRT8 +#define CYBSP_CS_SLD4_PORT CYBSP_CSD_SLD4_PORT +#define CYBSP_CSD_SLD4_PORT_NUM 8U +#define CYBSP_CS_SLD4_PORT_NUM CYBSP_CSD_SLD4_PORT_NUM +#define CYBSP_CSD_SLD4_PIN 7U +#define CYBSP_CS_SLD4_PIN CYBSP_CSD_SLD4_PIN +#define CYBSP_CSD_SLD4_NUM 7U +#define CYBSP_CS_SLD4_NUM CYBSP_CSD_SLD4_NUM +#define CYBSP_CSD_SLD4_DRIVEMODE CY_GPIO_DM_ANALOG +#define CYBSP_CS_SLD4_DRIVEMODE CYBSP_CSD_SLD4_DRIVEMODE +#define CYBSP_CSD_SLD4_INIT_DRIVESTATE 1 +#define CYBSP_CS_SLD4_INIT_DRIVESTATE CYBSP_CSD_SLD4_INIT_DRIVESTATE +#ifndef ioss_0_port_8_pin_7_HSIOM +#define ioss_0_port_8_pin_7_HSIOM HSIOM_SEL_GPIO +#endif +#define CYBSP_CSD_SLD4_HSIOM ioss_0_port_8_pin_7_HSIOM +#define CYBSP_CS_SLD4_HSIOM CYBSP_CSD_SLD4_HSIOM +#define CYBSP_CSD_SLD4_IRQ ioss_interrupts_gpio_8_IRQn +#define CYBSP_CS_SLD4_IRQ CYBSP_CSD_SLD4_IRQ +#if defined(CY_USING_HAL) +#define CYBSP_CSD_SLD4_HAL_PORT_PIN P8_7 +#define CYBSP_CS_SLD4_HAL_PORT_PIN CYBSP_CSD_SLD4_HAL_PORT_PIN +#define CYBSP_CSD_SLD4 P8_7 +#define CYBSP_CS_SLD4 CYBSP_CSD_SLD4 +#define CYBSP_CSD_SLD4_HAL_IRQ CYHAL_GPIO_IRQ_NONE +#define CYBSP_CS_SLD4_HAL_IRQ CYBSP_CSD_SLD4_HAL_IRQ +#define CYBSP_CSD_SLD4_HAL_DIR CYHAL_GPIO_DIR_INPUT +#define CYBSP_CS_SLD4_HAL_DIR CYBSP_CSD_SLD4_HAL_DIR +#define CYBSP_CSD_SLD4_HAL_DRIVEMODE CYHAL_GPIO_DRIVE_ANALOG +#define CYBSP_CS_SLD4_HAL_DRIVEMODE CYBSP_CSD_SLD4_HAL_DRIVEMODE +#define CYBSP_A8 (P9_0) +#define CYBSP_J2_2 CYBSP_A8 +#define CYBSP_A9 (P9_1) +#define CYBSP_J2_4 CYBSP_A9 +#define CYBSP_A10 (P9_2) +#define CYBSP_J2_6 CYBSP_A10 +#define CYBSP_A11 (P9_3) +#define CYBSP_J2_8 CYBSP_A11 +#define CYBSP_TRACE_DATA0 CYBSP_A11 +#define CYBSP_A12 (P9_4) +#define CYBSP_J2_10 CYBSP_A12 +#define CYBSP_A13 (P9_5) +#define CYBSP_J2_12 CYBSP_A13 +#define CYBSP_A14 (P9_6) +#define CYBSP_J2_14 CYBSP_A14 +#define CYBSP_A15 (P9_7) +#define CYBSP_J2_16 CYBSP_A15 +#endif // defined (CY_USING_HAL) + +extern const cy_stc_gpio_pin_config_t CYBSP_WCO_IN_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_WCO_IN_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_WCO_OUT_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_WCO_OUT_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_RX_config; +#define CYBSP_CS_RX_config CYBSP_CSD_RX_config +#define CYBSP_CS_TX_RX_config CYBSP_CSD_RX_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_RX_obj; +#define CYBSP_CS_RX_obj CYBSP_CSD_RX_obj +#define CYBSP_CS_TX_RX_obj CYBSP_CSD_RX_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_SWO_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_SWO_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_SWDIO_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_SWDIO_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_SWDCK_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_SWDCK_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CINA_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CINA_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CINB_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CINB_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CMOD_config; +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CMOD_obj; +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_BTN0_config; +#define CYBSP_CS_BTN0_config CYBSP_CSD_BTN0_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_BTN0_obj; +#define CYBSP_CS_BTN0_obj CYBSP_CSD_BTN0_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_BTN1_config; +#define CYBSP_CS_BTN1_config CYBSP_CSD_BTN1_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_BTN1_obj; +#define CYBSP_CS_BTN1_obj CYBSP_CSD_BTN1_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD0_config; +#define CYBSP_CS_SLD0_config CYBSP_CSD_SLD0_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_SLD0_obj; +#define CYBSP_CS_SLD0_obj CYBSP_CSD_SLD0_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD1_config; +#define CYBSP_CS_SLD1_config CYBSP_CSD_SLD1_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_SLD1_obj; +#define CYBSP_CS_SLD1_obj CYBSP_CSD_SLD1_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD2_config; +#define CYBSP_CS_SLD2_config CYBSP_CSD_SLD2_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_SLD2_obj; +#define CYBSP_CS_SLD2_obj CYBSP_CSD_SLD2_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD3_config; +#define CYBSP_CS_SLD3_config CYBSP_CSD_SLD3_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_SLD3_obj; +#define CYBSP_CS_SLD3_obj CYBSP_CSD_SLD3_obj +#endif // defined (CY_USING_HAL) +extern const cy_stc_gpio_pin_config_t CYBSP_CSD_SLD4_config; +#define CYBSP_CS_SLD4_config CYBSP_CSD_SLD4_config +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t CYBSP_CSD_SLD4_obj; +#define CYBSP_CS_SLD4_obj CYBSP_CSD_SLD4_obj +#endif // defined (CY_USING_HAL) + +void init_cycfg_pins(void); +void reserve_cycfg_pins(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_PINS_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.c new file mode 100644 index 00000000000000..7f954aca038238 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.c @@ -0,0 +1,472 @@ +/******************************************************************************* + * File Name: cycfg_qspi_memslot.c + * + * Description: + * Provides definitions of the SMIF-driver memory configuration. + * This file was automatically generated and should not be modified. + * QSPI Configurator 4.10.0.1343 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_qspi_memslot.h" + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0xECU, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_QUAD, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0x01U, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_QUAD, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 4U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_QUAD, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_PRESENT_1BYTE, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeEnCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x06U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeDisCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x04U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_eraseCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0xDCU, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_chipEraseCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x60U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_programCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x34U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_QUAD, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_QUAD, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readStsRegQeCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x35U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readStsRegWipCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x05U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeStsRegQeCmd = { + /* The 8-bit command. 1 x I/O read command. */ + .command = 0x01U, + /* The width of the command transfer. */ + .cmdWidth = CY_SMIF_WIDTH_SINGLE, + /* The width of the address transfer. */ + .addrWidth = CY_SMIF_WIDTH_SINGLE, + /* The 8-bit mode byte. This value is 0xFFFFFFFF when there is no mode present. */ + .mode = 0xFFFFFFFFU, + /* The width of the mode command transfer. */ + .modeWidth = CY_SMIF_WIDTH_SINGLE, + /* The number of dummy cycles. A zero value suggests no dummy cycles. */ + .dummyCycles = 0U, + /* The width of the data transfer. */ + .dataWidth = CY_SMIF_WIDTH_SINGLE, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* The Data rate of data */ + .dataRate = CY_SMIF_SDR, + /* This specifies the presence of the dummy field */ + .dummyCyclesPresence = CY_SMIF_NOT_PRESENT, + /* This specifies the presence of the mode field */ + .modePresence = CY_SMIF_NOT_PRESENT, + /* The high byte of a 16-bit mode. This value is 0x0 when there is no higher byte mode present */ + .modeH = 0x00, + /* The Data rate of mode */ + .modeRate = CY_SMIF_SDR, + /* The Data rate of address */ + .addrRate = CY_SMIF_SDR, + /* This specifies the width of the command field */ + .cmdPresence = CY_SMIF_PRESENT_1BYTE, + /* The high byte of a 16-bit command. This value is 0x0 when there is no higher byte command present */ + .commandH = 0x00, + /* The Data rate of command */ + .cmdRate = CY_SMIF_SDR, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_device_cfg_t deviceCfg_S25FL512S_SlaveSlot_0 = { + /* Specifies the number of address bytes used by the memory slave device. */ + .numOfAddrBytes = 0x04U, + /* The size of the memory. */ + .memSize = 0x04000000U, + /* Specifies the Read command. */ + .readCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_readCmd, + /* Specifies the Write Enable command. */ + .writeEnCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_writeEnCmd, + /* Specifies the Write Disable command. */ + .writeDisCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_writeDisCmd, + /* Specifies the Erase command. */ + .eraseCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_eraseCmd, + /* Specifies the sector size of each erase. */ + .eraseSize = 0x00040000U, + /* Specifies the Chip Erase command. */ + .chipEraseCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_chipEraseCmd, + /* Specifies the Program command. */ + .programCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_programCmd, + /* Specifies the page size for programming. */ + .programSize = 0x00000200U, + /* Specifies the command to read the QE-containing status register. */ + .readStsRegQeCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_readStsRegQeCmd, + /* Specifies the command to read the WIP-containing status register. */ + .readStsRegWipCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_readStsRegWipCmd, + /* Specifies the command to write into the QE-containing status register. */ + .writeStsRegQeCmd = (cy_stc_smif_mem_cmd_t *) &S25FL512S_SlaveSlot_0_writeStsRegQeCmd, + /* The mask for the status register. */ + .stsRegBusyMask = 0x01U, + /* The mask for the status register. */ + .stsRegQuadEnableMask = 0x02U, + /* The max time for the erase type-1 cycle-time in ms. */ + .eraseTime = 2600U, + /* The max time for the chip-erase cycle-time in ms. */ + .chipEraseTime = 460000U, + /* The max time for the page-program cycle-time in us. */ + .programTime = 1300U, +#if (CY_SMIF_DRV_VERSION_MAJOR > 1) || (CY_SMIF_DRV_VERSION_MINOR >= 50) + /* Points to NULL or to structure with info about sectors for hybrid memory. */ + .hybridRegionCount = 0U, + .hybridRegionInfo = 0, +#endif + /* Specifies the command to read variable latency cycles configuration register */ + .readLatencyCmd = 0, + /* Specifies the command to write variable latency cycles configuration register */ + .writeLatencyCmd = 0, + /* Specifies the address for variable latency cycle address */ + .latencyCyclesRegAddr = 0x00U, + /* Specifies variable latency cycles Mask */ + .latencyCyclesMask = 0x00U, +#if (CY_IP_MXSMIF_VERSION >= 2) + /* Specifies data for memory with hybrid sectors */ + .octalDDREnableSeq = 0, + /* Specifies the command to read the OE-containing status register. */ + .readStsRegOeCmd = 0, + /* Specifies the command to write the OE-containing status register. */ + .writeStsRegOeCmd = 0, + /* QE mask for the status registers */ + .stsRegOctalEnableMask = 0x00U, + /* Octal enable register address */ + .octalEnableRegAddr = 0x00U, + /* Frequency of operation used in Octal mode */ + .freq_of_operation = CY_SMIF_100MHZ_OPERATION, +#endif +}; + +const cy_stc_smif_mem_config_t S25FL512S_SlaveSlot_0 = { + /* Determines the slot number where the memory device is placed. */ + .slaveSelect = CY_SMIF_SLAVE_SELECT_0, +/* Flags. */ +#if (CY_IP_MXSMIF_VERSION >= 2) + .flags = CY_SMIF_FLAG_SMIF_REV_3 | CY_SMIF_FLAG_MEMORY_MAPPED | CY_SMIF_FLAG_WR_EN, +#else + .flags = CY_SMIF_FLAG_MEMORY_MAPPED | CY_SMIF_FLAG_WR_EN, +#endif /* CY_IP_MXSMIF_VERSION */ + /* The data-line selection options for a slave device. */ + .dataSelect = CY_SMIF_DATA_SEL0, + /* The base address the memory slave is mapped to in the PSoC memory map. + Valid when the memory-mapped mode is enabled. */ + .baseAddress = 0x18000000U, + /* The size allocated in the PSoC memory map, for the memory slave device. + The size is allocated from the base address. Valid when the memory mapped mode is enabled. */ + .memMappedSize = 0x4000000U, + /* If this memory device is one of the devices in the dual quad SPI configuration. + Valid when the memory mapped mode is enabled. */ + .dualQuadSlots = 0, + /* The configuration of the device. */ + .deviceCfg = (cy_stc_smif_mem_device_cfg_t *) &deviceCfg_S25FL512S_SlaveSlot_0, +#if (CY_IP_MXSMIF_VERSION >= 2) + /** Continous transfer merge timeout. + * After this period the memory device is deselected. A later transfer, even from a + * continuous address, starts with the overhead phases (command, address, mode, dummy cycles). + * This configuration parameter is available for CAT1B devices. */ + .mergeTimeout = CY_SMIF_MERGE_TIMEOUT_1_CYCLE, +#endif /* CY_IP_MXSMIF_VERSION */ +}; + +const cy_stc_smif_mem_config_t * const smifMemConfigs[CY_SMIF_DEVICE_NUM] = { + &S25FL512S_SlaveSlot_0, +}; + +const cy_stc_smif_block_config_t smifBlockConfig = { + /* The number of SMIF memories defined. */ + .memCount = CY_SMIF_DEVICE_NUM, + /* The pointer to the array of memory config structures of size memCount. */ + .memConfig = (cy_stc_smif_mem_config_t **) smifMemConfigs, + /* The version of the SMIF driver. */ + .majorVersion = CY_SMIF_DRV_VERSION_MAJOR, + /* The version of the SMIF driver. */ + .minorVersion = CY_SMIF_DRV_VERSION_MINOR, +}; diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.h new file mode 100644 index 00000000000000..48b280a91b4b7d --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.h @@ -0,0 +1,68 @@ +/******************************************************************************* + * File Name: cycfg_qspi_memslot.h + * + * Description: + * Provides declarations of the SMIF-driver memory configuration. + * This file was automatically generated and should not be modified. + * QSPI Configurator 4.10.0.1343 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#ifndef CYCFG_QSPI_MEMSLOT_H +#define CYCFG_QSPI_MEMSLOT_H +#include "cy_smif_memslot.h" + +#define CY_SMIF_CFG_TOOL_VERSION (410) + +/* Supported QSPI Driver version */ +#define CY_SMIF_DRV_VERSION_REQUIRED (100) + +#if !defined(CY_SMIF_DRV_VERSION) +#define CY_SMIF_DRV_VERSION (100) +#endif + +/* Check the used Driver version */ +#if (CY_SMIF_DRV_VERSION_REQUIRED > CY_SMIF_DRV_VERSION) +#error The QSPI Configurator requires a newer version of the PDL. Update the PDL in your project. +#endif + +typedef cy_stc_smif_mem_config_t cy_serial_flash_mem_config_t; +typedef cy_stc_smif_block_config_t cy_serial_flash_block_config_t; + +#define CY_SMIF_DEVICE_NUM 1 + +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeEnCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeDisCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_eraseCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_chipEraseCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_programCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readStsRegQeCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_readStsRegWipCmd; +extern const cy_stc_smif_mem_cmd_t S25FL512S_SlaveSlot_0_writeStsRegQeCmd; + +extern const cy_stc_smif_mem_device_cfg_t deviceCfg_S25FL512S_SlaveSlot_0; + +extern const cy_stc_smif_mem_config_t S25FL512S_SlaveSlot_0; + +extern const cy_stc_smif_mem_config_t * const smifMemConfigs[CY_SMIF_DEVICE_NUM]; + +extern const cy_stc_smif_block_config_t smifBlockConfig; + +#endif /*CYCFG_QSPI_MEMSLOT_H*/ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.timestamp b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.timestamp new file mode 100644 index 00000000000000..b58d184ac8c9e0 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_qspi_memslot.timestamp @@ -0,0 +1,26 @@ +/******************************************************************************* +* File Name: cycfg_qspi_memslot.timestamp +* +* Description: +* Sentinel file for determining if generated source is up to date. +* This file was automatically generated and should not be modified. +* QSPI Configurator 4.10.0.1343 +* +******************************************************************************** +* Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or +* an affiliate of Cypress Semiconductor Corporation. +* SPDX-License-Identifier: Apache-2.0 +* +* 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. +********************************************************************************/ + diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.c new file mode 100644 index 00000000000000..b7f613092bdbe6 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.c @@ -0,0 +1,40 @@ +/******************************************************************************* + * File Name: cycfg_routing.c + * + * Description: + * Establishes all necessary connections between hardware elements. + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_routing.h" +#include "cy_device_headers.h" +#include "cy_trigmux.h" +#include "stdbool.h" + +void init_cycfg_routing(void) +{ + HSIOM->AMUX_SPLIT_CTL[2] = HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_AA_SL_Msk | HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_AA_SR_Msk | + HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_BB_SL_Msk | HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_BB_SR_Msk; + HSIOM->AMUX_SPLIT_CTL[4] = HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_AA_SL_Msk | HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_AA_SR_Msk | + HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_BB_SL_Msk | HSIOM_V2_AMUX_SPLIT_CTL_SWITCH_BB_SR_Msk; +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.h new file mode 100644 index 00000000000000..f6bae4541ba221 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_routing.h @@ -0,0 +1,61 @@ +/******************************************************************************* + * File Name: cycfg_routing.h + * + * Description: + * Establishes all necessary connections between hardware elements. + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_ROUTING_H) +#define CYCFG_ROUTING_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "cycfg_notices.h" + +void init_cycfg_routing(void); + +#define ioss_0_port_0_pin_0_ANALOG P0_0_SRSS_WCO_IN +#define ioss_0_port_0_pin_1_ANALOG P0_1_SRSS_WCO_OUT +#define ioss_0_port_1_pin_0_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_6_pin_4_HSIOM P6_4_CPUSS_SWJ_SWO_TDO +#define ioss_0_port_6_pin_6_HSIOM P6_6_CPUSS_SWJ_SWDIO_TMS +#define ioss_0_port_6_pin_7_HSIOM P6_7_CPUSS_SWJ_SWCLK_TCLK +#define ioss_0_port_7_pin_1_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_7_pin_2_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_7_pin_7_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_1_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_2_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_3_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_4_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_5_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_6_HSIOM HSIOM_SEL_AMUXA +#define ioss_0_port_8_pin_7_HSIOM HSIOM_SEL_AMUXA + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_ROUTING_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.c b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.c new file mode 100644 index 00000000000000..7c180a8e0812aa --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.c @@ -0,0 +1,1160 @@ +/******************************************************************************* + * File Name: cycfg_system.c + * + * Description: + * System configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#include "cycfg_system.h" + +#define CY_CFG_SYSCLK_ECO_ERROR 1 +#define CY_CFG_SYSCLK_ALTHF_ERROR 2 +#define CY_CFG_SYSCLK_PLL_ERROR 3 +#define CY_CFG_SYSCLK_FLL_ERROR 4 +#define CY_CFG_SYSCLK_WCO_ERROR 5 +#define CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED 1 +#define CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE CY_SYSTICK_CLOCK_SOURCE_CLK_LF +#define CY_CFG_SYSCLK_CLKALTSYSTICK_INTERVAL 0 +#define CY_CFG_SYSCLK_CLKALTSYSTICK_FREQUENCY 32768 +#define CY_CFG_SYSCLK_CLKALTSYSTICK_TICKS ((0) / 1000000.0) * 32768 +#define CY_CFG_SYSCLK_CLKBAK_ENABLED 1 +#define CY_CFG_SYSCLK_CLKBAK_SOURCE CY_SYSCLK_BAK_IN_CLKLF +#define CY_CFG_SYSCLK_CLKFAST_ENABLED 1 +#define CY_CFG_SYSCLK_CLKFAST_DIVIDER 0 +#define CY_CFG_SYSCLK_FLL_ENABLED 1 +#define CY_CFG_SYSCLK_FLL_MULT 500U +#define CY_CFG_SYSCLK_FLL_REFDIV 20U +#define CY_CFG_SYSCLK_FLL_CCO_RANGE CY_SYSCLK_FLL_CCO_RANGE4 +#define CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV true +#define CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE 10U +#define CY_CFG_SYSCLK_FLL_IGAIN 9U +#define CY_CFG_SYSCLK_FLL_PGAIN 5U +#define CY_CFG_SYSCLK_FLL_SETTLING_COUNT 8U +#define CY_CFG_SYSCLK_FLL_OUTPUT_MODE CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT +#define CY_CFG_SYSCLK_FLL_CCO_FREQ 355U +#define CY_CFG_SYSCLK_FLL_OUT_FREQ 100000000 +#define CY_CFG_SYSCLK_CLKHF0_ENABLED 1 +#define CY_CFG_SYSCLK_CLKHF0_DIVIDER CY_SYSCLK_CLKHF_NO_DIVIDE +#define CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ 100UL +#define CY_CFG_SYSCLK_CLKHF0_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0 +#define CY_CFG_SYSCLK_ILO_ENABLED 1 +#define CY_CFG_SYSCLK_ILO_HIBERNATE true +#define CY_CFG_SYSCLK_IMO_ENABLED 1 +#define CY_CFG_SYSCLK_CLKLF_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH0_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH0_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPATH1_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH1_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPATH2_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH2_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPATH3_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH3_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPATH4_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH4_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPATH5_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPATH5_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM 0UL +#define CY_CFG_SYSCLK_CLKPERI_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPERI_DIVIDER 0 +#define CY_CFG_SYSCLK_PLL0_ENABLED 1 +#define CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV 30 +#define CY_CFG_SYSCLK_PLL0_REFERENCE_DIV 1 +#define CY_CFG_SYSCLK_PLL0_OUTPUT_DIV 5 +#define CY_CFG_SYSCLK_PLL0_LF_MODE false +#define CY_CFG_SYSCLK_PLL0_OUTPUT_MODE CY_SYSCLK_FLLPLL_OUTPUT_AUTO +#define CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ 48000000 +#define CY_CFG_SYSCLK_CLKSLOW_ENABLED 1 +#define CY_CFG_SYSCLK_CLKSLOW_DIVIDER 0 +#define CY_CFG_SYSCLK_CLKTIMER_ENABLED 1 +#define CY_CFG_SYSCLK_CLKTIMER_SOURCE CY_SYSCLK_CLKTIMER_IN_IMO +#define CY_CFG_SYSCLK_CLKTIMER_DIVIDER 0U +#define CY_CFG_SYSCLK_WCO_ENABLED 1 +#define CY_CFG_SYSCLK_WCO_IN_PRT GPIO_PRT0 +#define CY_CFG_SYSCLK_WCO_IN_PIN 0U +#define CY_CFG_SYSCLK_WCO_OUT_PRT GPIO_PRT0 +#define CY_CFG_SYSCLK_WCO_OUT_PIN 1U +#define CY_CFG_SYSCLK_WCO_BYPASS CY_SYSCLK_WCO_NOT_BYPASSED +#define CY_CFG_PWR_ENABLED 1 +#define CY_CFG_PWR_INIT 1 +#define CY_CFG_PWR_USING_PMIC 0 +#define CY_CFG_PWR_VBACKUP_USING_VDDD 1 +#define CY_CFG_PWR_LDO_VOLTAGE CY_SYSPM_LDO_VOLTAGE_LP +#define CY_CFG_PWR_USING_ULP 0 +#define CY_CFG_PWR_REGULATOR_MODE_MIN false +#define CY_CFG_PWR_BKP_ERROR 6 + +#if defined(CY_DEVICE_SECURE) +static cy_stc_pra_system_config_t srss_0_clock_0_secureConfig; +#endif // defined (CY_DEVICE_SECURE) +#if (!defined(CY_DEVICE_SECURE)) +static const cy_stc_fll_manual_config_t srss_0_clock_0_fll_0_fllConfig = { + .fllMult = 500U, + .refDiv = 20U, + .ccoRange = CY_SYSCLK_FLL_CCO_RANGE4, + .enableOutputDiv = true, + .lockTolerance = 10U, + .igain = 9U, + .pgain = 5U, + .settlingCount = 8U, + .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT, + .cco_Freq = 355U, +}; +#endif //(!defined(CY_DEVICE_SECURE)) +#if defined(CY_USING_HAL) +const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 0U, + .channel_num = 0U, +}; +const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 1U, + .channel_num = 0U, +}; +const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 2U, + .channel_num = 0U, +}; +const cyhal_resource_inst_t srss_0_clock_0_pathmux_3_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 3U, + .channel_num = 0U, +}; +const cyhal_resource_inst_t srss_0_clock_0_pathmux_4_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 4U, + .channel_num = 0U, +}; +const cyhal_resource_inst_t srss_0_clock_0_pathmux_5_obj = { + .type = CYHAL_RSC_CLKPATH, + .block_num = 5U, + .channel_num = 0U, +}; +#endif // defined (CY_USING_HAL) +#if (!defined(CY_DEVICE_SECURE)) +static const cy_stc_pll_manual_config_t srss_0_clock_0_pll_0_pllConfig = { + .feedbackDiv = 30, + .referenceDiv = 1, + .outputDiv = 5, + .lfMode = false, + .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_AUTO, +}; +#endif //(!defined(CY_DEVICE_SECURE)) + +__WEAK void __NO_RETURN cycfg_ClockStartupError(uint32_t error) +{ + (void) error; /* Suppress the compiler warning */ + while (1) + ; +} +#if (!defined(CY_DEVICE_SECURE)) +__STATIC_INLINE void Cy_SysClk_FllDeInit() +{ + Cy_SysClk_FllDisable(); +} +#endif //(!defined(CY_DEVICE_SECURE)) +#if defined(CY_DEVICE_SECURE) +void init_cycfg_secure_struct(cy_stc_pra_system_config_t * secure_config) +{ +#ifdef CY_CFG_PWR_ENABLED + secure_config->powerEnable = CY_CFG_PWR_ENABLED; +#endif /* CY_CFG_PWR_ENABLED */ + +#ifdef CY_CFG_PWR_USING_LDO + secure_config->ldoEnable = CY_CFG_PWR_USING_LDO; +#endif /* CY_CFG_PWR_USING_LDO */ + +#ifdef CY_CFG_PWR_USING_PMIC + secure_config->pmicEnable = CY_CFG_PWR_USING_PMIC; +#endif /* CY_CFG_PWR_USING_PMIC */ + +#ifdef CY_CFG_PWR_VBACKUP_USING_VDDD + secure_config->vBackupVDDDEnable = CY_CFG_PWR_VBACKUP_USING_VDDD; +#endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */ + +#ifdef CY_CFG_PWR_USING_ULP + secure_config->ulpEnable = CY_CFG_PWR_USING_ULP; +#endif /* CY_CFG_PWR_USING_ULP */ + +#ifdef CY_CFG_SYSCLK_ECO_ENABLED + secure_config->ecoEnable = CY_CFG_SYSCLK_ECO_ENABLED; +#endif /* CY_CFG_SYSCLK_ECO_ENABLED */ + +#ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED + secure_config->extClkEnable = CY_CFG_SYSCLK_EXTCLK_ENABLED; +#endif /* CY_CFG_SYSCLK_EXTCLK_ENABLED */ + +#ifdef CY_CFG_SYSCLK_ILO_ENABLED + secure_config->iloEnable = CY_CFG_SYSCLK_ILO_ENABLED; +#endif /* CY_CFG_SYSCLK_ILO_ENABLED */ + +#ifdef CY_CFG_SYSCLK_WCO_ENABLED + secure_config->wcoEnable = CY_CFG_SYSCLK_WCO_ENABLED; +#endif /* CY_CFG_SYSCLK_WCO_ENABLED */ + +#ifdef CY_CFG_SYSCLK_FLL_ENABLED + secure_config->fllEnable = CY_CFG_SYSCLK_FLL_ENABLED; +#endif /* CY_CFG_SYSCLK_FLL_ENABLED */ + +#ifdef CY_CFG_SYSCLK_PLL0_ENABLED + secure_config->pll0Enable = CY_CFG_SYSCLK_PLL0_ENABLED; +#endif /* CY_CFG_SYSCLK_PLL0_ENABLED */ + +#ifdef CY_CFG_SYSCLK_PLL1_ENABLED + secure_config->pll1Enable = CY_CFG_SYSCLK_PLL1_ENABLED; +#endif /* CY_CFG_SYSCLK_PLL1_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED + secure_config->path0Enable = CY_CFG_SYSCLK_CLKPATH0_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH0_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + secure_config->path1Enable = CY_CFG_SYSCLK_CLKPATH1_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH1_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED + secure_config->path2Enable = CY_CFG_SYSCLK_CLKPATH2_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH2_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED + secure_config->path3Enable = CY_CFG_SYSCLK_CLKPATH3_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH3_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED + secure_config->path4Enable = CY_CFG_SYSCLK_CLKPATH4_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH4_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED + secure_config->path5Enable = CY_CFG_SYSCLK_CLKPATH5_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPATH5_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED + secure_config->clkFastEnable = CY_CFG_SYSCLK_CLKFAST_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKFAST_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED + secure_config->clkPeriEnable = CY_CFG_SYSCLK_CLKPERI_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPERI_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED + secure_config->clkSlowEnable = CY_CFG_SYSCLK_CLKSLOW_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKSLOW_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF0_ENABLED + secure_config->clkHF0Enable = CY_CFG_SYSCLK_CLKHF0_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF0_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED + secure_config->clkHF1Enable = CY_CFG_SYSCLK_CLKHF1_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF1_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED + secure_config->clkHF2Enable = CY_CFG_SYSCLK_CLKHF2_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF2_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED + secure_config->clkHF3Enable = CY_CFG_SYSCLK_CLKHF3_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF3_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED + secure_config->clkHF4Enable = CY_CFG_SYSCLK_CLKHF4_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF4_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED + secure_config->clkHF5Enable = CY_CFG_SYSCLK_CLKHF5_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKHF5_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED + secure_config->clkPumpEnable = CY_CFG_SYSCLK_CLKPUMP_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKPUMP_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + secure_config->clkLFEnable = CY_CFG_SYSCLK_CLKLF_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKLF_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED + secure_config->clkBakEnable = CY_CFG_SYSCLK_CLKBAK_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKBAK_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED + secure_config->clkTimerEnable = CY_CFG_SYSCLK_CLKTIMER_ENABLED; +#endif /* CY_CFG_SYSCLK_CLKTIMER_ENABLED */ + +#ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED +#error Configuration Error : ALT SYSTICK cannot be enabled for Secure devices. +#endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED */ + +#ifdef CY_CFG_SYSCLK_PILO_ENABLED + secure_config->piloEnable = CY_CFG_SYSCLK_PILO_ENABLED; +#endif /* CY_CFG_SYSCLK_PILO_ENABLED */ + +#ifdef CY_CFG_SYSCLK_ALTHF_ENABLED + secure_config->clkAltHfEnable = CY_CFG_SYSCLK_ALTHF_ENABLED; +#endif /* CY_CFG_SYSCLK_ALTHF_ENABLED */ + +#ifdef CY_CFG_PWR_LDO_VOLTAGE + secure_config->ldoVoltage = CY_CFG_PWR_LDO_VOLTAGE; +#endif /* CY_CFG_PWR_LDO_VOLTAGE */ + +#ifdef CY_CFG_PWR_REGULATOR_MODE_MIN + secure_config->pwrCurrentModeMin = CY_CFG_PWR_REGULATOR_MODE_MIN; +#endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */ + +#ifdef CY_CFG_PWR_BUCK_VOLTAGE + secure_config->buckVoltage = CY_CFG_PWR_BUCK_VOLTAGE; +#endif /* CY_CFG_PWR_BUCK_VOLTAGE */ + +#ifdef CY_CFG_SYSCLK_ECO_FREQ + secure_config->ecoFreqHz = CY_CFG_SYSCLK_ECO_FREQ; +#endif /* CY_CFG_SYSCLK_ECO_FREQ */ + +#ifdef CY_CFG_SYSCLK_ECO_CLOAD + secure_config->ecoLoad = CY_CFG_SYSCLK_ECO_CLOAD; +#endif /* CY_CFG_SYSCLK_ECO_CLOAD */ + +#ifdef CY_CFG_SYSCLK_ECO_ESR + secure_config->ecoEsr = CY_CFG_SYSCLK_ECO_ESR; +#endif /* CY_CFG_SYSCLK_ECO_ESR */ + +#ifdef CY_CFG_SYSCLK_ECO_DRIVE_LEVEL + secure_config->ecoDriveLevel = CY_CFG_SYSCLK_ECO_DRIVE_LEVEL; +#endif /* CY_CFG_SYSCLK_ECO_DRIVE_LEVEL */ + +#ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PRT + secure_config->ecoInPort = CY_CFG_SYSCLK_ECO_GPIO_IN_PRT; +#endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PRT */ + +#ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT + secure_config->ecoOutPort = CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT; +#endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT */ + +#ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PIN + secure_config->ecoInPinNum = CY_CFG_SYSCLK_ECO_GPIO_IN_PIN; +#endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PIN */ + +#ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN + secure_config->ecoOutPinNum = CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN; +#endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN */ + +#ifdef CY_CFG_SYSCLK_EXTCLK_FREQ + secure_config->extClkFreqHz = CY_CFG_SYSCLK_EXTCLK_FREQ; +#endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */ + +#ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PRT + secure_config->extClkPort = CY_CFG_SYSCLK_EXTCLK_GPIO_PRT; +#endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PRT */ + +#ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PIN + secure_config->extClkPinNum = CY_CFG_SYSCLK_EXTCLK_GPIO_PIN; +#endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PIN */ + +#ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM + secure_config->extClkHsiom = CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM; +#endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM */ + +#ifdef CY_CFG_SYSCLK_ILO_HIBERNATE + secure_config->iloHibernateON = CY_CFG_SYSCLK_ILO_HIBERNATE; +#endif /* CY_CFG_SYSCLK_ILO_HIBERNATE */ + +#ifdef CY_CFG_SYSCLK_WCO_BYPASS + secure_config->bypassEnable = CY_CFG_SYSCLK_WCO_BYPASS; +#endif /* CY_CFG_SYSCLK_WCO_BYPASS */ + +#ifdef CY_CFG_SYSCLK_WCO_IN_PRT + secure_config->wcoInPort = CY_CFG_SYSCLK_WCO_IN_PRT; +#endif /* CY_CFG_SYSCLK_WCO_IN_PRT */ + +#ifdef CY_CFG_SYSCLK_WCO_OUT_PRT + secure_config->wcoOutPort = CY_CFG_SYSCLK_WCO_OUT_PRT; +#endif /* CY_CFG_SYSCLK_WCO_OUT_PRT */ + +#ifdef CY_CFG_SYSCLK_WCO_IN_PIN + secure_config->wcoInPinNum = CY_CFG_SYSCLK_WCO_IN_PIN; +#endif /* CY_CFG_SYSCLK_WCO_IN_PIN */ + +#ifdef CY_CFG_SYSCLK_WCO_OUT_PIN + secure_config->wcoOutPinNum = CY_CFG_SYSCLK_WCO_OUT_PIN; +#endif /* CY_CFG_SYSCLK_WCO_OUT_PIN */ + +#ifdef CY_CFG_SYSCLK_FLL_OUT_FREQ + secure_config->fllOutFreqHz = CY_CFG_SYSCLK_FLL_OUT_FREQ; +#endif /* CY_CFG_SYSCLK_FLL_OUT_FREQ */ + +#ifdef CY_CFG_SYSCLK_FLL_MULT + secure_config->fllMult = CY_CFG_SYSCLK_FLL_MULT; +#endif /* CY_CFG_SYSCLK_FLL_MULT */ + +#ifdef CY_CFG_SYSCLK_FLL_REFDIV + secure_config->fllRefDiv = CY_CFG_SYSCLK_FLL_REFDIV; +#endif /* CY_CFG_SYSCLK_FLL_REFDIV */ + +#ifdef CY_CFG_SYSCLK_FLL_CCO_RANGE + secure_config->fllCcoRange = CY_CFG_SYSCLK_FLL_CCO_RANGE; +#endif /* CY_CFG_SYSCLK_FLL_CCO_RANGE */ + +#ifdef CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV + secure_config->enableOutputDiv = CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV; +#endif /* CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV */ + +#ifdef CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE + secure_config->lockTolerance = CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE; +#endif /* CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE */ + +#ifdef CY_CFG_SYSCLK_FLL_IGAIN + secure_config->igain = CY_CFG_SYSCLK_FLL_IGAIN; +#endif /* CY_CFG_SYSCLK_FLL_IGAIN */ + +#ifdef CY_CFG_SYSCLK_FLL_PGAIN + secure_config->pgain = CY_CFG_SYSCLK_FLL_PGAIN; +#endif /* CY_CFG_SYSCLK_FLL_PGAIN */ + +#ifdef CY_CFG_SYSCLK_FLL_SETTLING_COUNT + secure_config->settlingCount = CY_CFG_SYSCLK_FLL_SETTLING_COUNT; +#endif /* CY_CFG_SYSCLK_FLL_SETTLING_COUNT */ + +#ifdef CY_CFG_SYSCLK_FLL_OUTPUT_MODE + secure_config->outputMode = CY_CFG_SYSCLK_FLL_OUTPUT_MODE; +#endif /* CY_CFG_SYSCLK_FLL_OUTPUT_MODE */ + +#ifdef CY_CFG_SYSCLK_FLL_CCO_FREQ + secure_config->ccoFreq = CY_CFG_SYSCLK_FLL_CCO_FREQ; +#endif /* CY_CFG_SYSCLK_FLL_CCO_FREQ */ + +#ifdef CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV + secure_config->pll0FeedbackDiv = CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV; +#endif /* CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL0_REFERENCE_DIV + secure_config->pll0ReferenceDiv = CY_CFG_SYSCLK_PLL0_REFERENCE_DIV; +#endif /* CY_CFG_SYSCLK_PLL0_REFERENCE_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_DIV + secure_config->pll0OutputDiv = CY_CFG_SYSCLK_PLL0_OUTPUT_DIV; +#endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL0_LF_MODE + secure_config->pll0LfMode = CY_CFG_SYSCLK_PLL0_LF_MODE; +#endif /* CY_CFG_SYSCLK_PLL0_LF_MODE */ + +#ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_MODE + secure_config->pll0OutputMode = CY_CFG_SYSCLK_PLL0_OUTPUT_MODE; +#endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_MODE */ + +#ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ + secure_config->pll0OutFreqHz = CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ; +#endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ */ + +#ifdef CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV + secure_config->pll1FeedbackDiv = CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV; +#endif /* CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL1_REFERENCE_DIV + secure_config->pll1ReferenceDiv = CY_CFG_SYSCLK_PLL1_REFERENCE_DIV; +#endif /* CY_CFG_SYSCLK_PLL1_REFERENCE_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_DIV + secure_config->pll1OutputDiv = CY_CFG_SYSCLK_PLL1_OUTPUT_DIV; +#endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_DIV */ + +#ifdef CY_CFG_SYSCLK_PLL1_LF_MODE + secure_config->pll1LfMode = CY_CFG_SYSCLK_PLL1_LF_MODE; +#endif /* CY_CFG_SYSCLK_PLL1_LF_MODE */ + +#ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_MODE + secure_config->pll1OutputMode = CY_CFG_SYSCLK_PLL1_OUTPUT_MODE; +#endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_MODE */ + +#ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ + secure_config->pll1OutFreqHz = CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ; +#endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ */ + +#ifdef CY_CFG_SYSCLK_CLKPATH0_SOURCE + secure_config->path0Src = CY_CFG_SYSCLK_CLKPATH0_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH0_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPATH1_SOURCE + secure_config->path1Src = CY_CFG_SYSCLK_CLKPATH1_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH1_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPATH2_SOURCE + secure_config->path2Src = CY_CFG_SYSCLK_CLKPATH2_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH2_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPATH3_SOURCE + secure_config->path3Src = CY_CFG_SYSCLK_CLKPATH3_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH3_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPATH4_SOURCE + secure_config->path4Src = CY_CFG_SYSCLK_CLKPATH4_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH4_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPATH5_SOURCE + secure_config->path5Src = CY_CFG_SYSCLK_CLKPATH5_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPATH5_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKFAST_DIVIDER + secure_config->clkFastDiv = CY_CFG_SYSCLK_CLKFAST_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKFAST_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKPERI_DIVIDER + secure_config->clkPeriDiv = CY_CFG_SYSCLK_CLKPERI_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKPERI_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKSLOW_DIVIDER + secure_config->clkSlowDiv = CY_CFG_SYSCLK_CLKSLOW_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKSLOW_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF0_CLKPATH + secure_config->hf0Source = CY_CFG_SYSCLK_CLKHF0_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF0_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF0_DIVIDER + secure_config->hf0Divider = CY_CFG_SYSCLK_CLKHF0_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF0_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ + secure_config->hf0OutFreqMHz = CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKHF1_CLKPATH + secure_config->hf1Source = CY_CFG_SYSCLK_CLKHF1_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF1_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF1_DIVIDER + secure_config->hf1Divider = CY_CFG_SYSCLK_CLKHF1_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF1_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ + secure_config->hf1OutFreqMHz = CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKHF2_CLKPATH + secure_config->hf2Source = CY_CFG_SYSCLK_CLKHF2_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF2_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF2_DIVIDER + secure_config->hf2Divider = CY_CFG_SYSCLK_CLKHF2_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF2_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ + secure_config->hf2OutFreqMHz = CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKHF3_CLKPATH + secure_config->hf3Source = CY_CFG_SYSCLK_CLKHF3_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF3_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF3_DIVIDER + secure_config->hf3Divider = CY_CFG_SYSCLK_CLKHF3_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF3_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ + secure_config->hf3OutFreqMHz = CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKHF4_CLKPATH + secure_config->hf4Source = CY_CFG_SYSCLK_CLKHF4_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF4_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF4_DIVIDER + secure_config->hf4Divider = CY_CFG_SYSCLK_CLKHF4_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF4_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ + secure_config->hf4OutFreqMHz = CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKHF5_CLKPATH + secure_config->hf5Source = CY_CFG_SYSCLK_CLKHF5_CLKPATH; +#endif /* CY_CFG_SYSCLK_CLKHF5_CLKPATH */ + +#ifdef CY_CFG_SYSCLK_CLKHF5_DIVIDER + secure_config->hf5Divider = CY_CFG_SYSCLK_CLKHF5_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKHF5_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ + secure_config->hf5OutFreqMHz = CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ; +#endif /* CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ */ + +#ifdef CY_CFG_SYSCLK_CLKPUMP_SOURCE + secure_config->pumpSource = CY_CFG_SYSCLK_CLKPUMP_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKPUMP_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKPUMP_DIVIDER + secure_config->pumpDivider = CY_CFG_SYSCLK_CLKPUMP_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKPUMP_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKLF_SOURCE + secure_config->clkLfSource = CY_CFG_SYSCLK_CLKLF_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKLF_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKBAK_SOURCE + secure_config->clkBakSource = CY_CFG_SYSCLK_CLKBAK_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKBAK_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKTIMER_SOURCE + secure_config->clkTimerSource = CY_CFG_SYSCLK_CLKTIMER_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKTIMER_SOURCE */ + +#ifdef CY_CFG_SYSCLK_CLKTIMER_DIVIDER + secure_config->clkTimerDivider = CY_CFG_SYSCLK_CLKTIMER_DIVIDER; +#endif /* CY_CFG_SYSCLK_CLKTIMER_DIVIDER */ + +#ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE + secure_config->clkSrcAltSysTick = CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE; +#endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE */ + +#ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD + secure_config->altHFcLoad = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD; +#endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD */ + +#ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME + secure_config->altHFxtalStartUpTime = CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME; +#endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME */ + +#ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ + secure_config->altHFclkFreq = CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ; +#endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ */ + +#ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV + secure_config->altHFsysClkDiv = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV; +#endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV */ + +#ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR + secure_config->altHFvoltageReg = CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR; +#endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR */ +} +#endif // defined (CY_DEVICE_SECURE) +__STATIC_INLINE void Cy_SysClk_ClkAltSysTickInit() +{ + Cy_SysTick_Init(CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE, CY_CFG_SYSCLK_CLKALTSYSTICK_TICKS); +} +#if (!defined(CY_DEVICE_SECURE)) +__STATIC_INLINE void Cy_SysClk_ClkBakInit() +{ + Cy_SysClk_ClkBakSetSource(CY_SYSCLK_BAK_IN_CLKLF); +} +__STATIC_INLINE void Cy_SysClk_ClkFastInit() +{ + Cy_SysClk_ClkFastSetDivider(0U); +} +__STATIC_INLINE void Cy_SysClk_FllInit() +{ + if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllManualConfigure(&srss_0_clock_0_fll_0_fllConfig)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); + } + if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllEnable(200000UL)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); + } +} +__STATIC_INLINE void Cy_SysClk_ClkHf0Init() +{ + Cy_SysClk_ClkHfSetSource(0U, CY_CFG_SYSCLK_CLKHF0_CLKPATH); + Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); +} +__STATIC_INLINE void Cy_SysClk_IloInit() +{ + /* The WDT is unlocked in the default startup code */ + Cy_SysClk_IloEnable(); + Cy_SysClk_IloHibernateOn(true); +} +__STATIC_INLINE void Cy_SysClk_ClkLfInit() +{ + /* The WDT is unlocked in the default startup code */ + Cy_SysClk_ClkLfSetSource(CY_SYSCLK_CLKLF_IN_WCO); +} +__STATIC_INLINE void Cy_SysClk_ClkPath0Init() +{ + Cy_SysClk_ClkPathSetSource(0U, CY_CFG_SYSCLK_CLKPATH0_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPath1Init() +{ + Cy_SysClk_ClkPathSetSource(1U, CY_CFG_SYSCLK_CLKPATH1_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPath2Init() +{ + Cy_SysClk_ClkPathSetSource(2U, CY_CFG_SYSCLK_CLKPATH2_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPath3Init() +{ + Cy_SysClk_ClkPathSetSource(3U, CY_CFG_SYSCLK_CLKPATH3_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPath4Init() +{ + Cy_SysClk_ClkPathSetSource(4U, CY_CFG_SYSCLK_CLKPATH4_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPath5Init() +{ + Cy_SysClk_ClkPathSetSource(5U, CY_CFG_SYSCLK_CLKPATH5_SOURCE); +} +__STATIC_INLINE void Cy_SysClk_ClkPeriInit() +{ + Cy_SysClk_ClkPeriSetDivider(0U); +} +__STATIC_INLINE void Cy_SysClk_Pll0Init() +{ + if (CY_SYSCLK_SUCCESS != Cy_SysClk_PllManualConfigure(1U, &srss_0_clock_0_pll_0_pllConfig)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_PLL_ERROR); + } + if (CY_SYSCLK_SUCCESS != Cy_SysClk_PllEnable(1U, 10000u)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_PLL_ERROR); + } +} +__STATIC_INLINE void Cy_SysClk_ClkSlowInit() +{ + Cy_SysClk_ClkSlowSetDivider(0U); +} +__STATIC_INLINE void Cy_SysClk_ClkTimerInit() +{ + Cy_SysClk_ClkTimerDisable(); + Cy_SysClk_ClkTimerSetSource(CY_SYSCLK_CLKTIMER_IN_IMO); + Cy_SysClk_ClkTimerSetDivider(0U); + Cy_SysClk_ClkTimerEnable(); +} +__STATIC_INLINE void Cy_SysClk_WcoInit() +{ + (void) Cy_GPIO_Pin_FastInit(GPIO_PRT0, 0U, 0x00U, 0x00U, HSIOM_SEL_GPIO); + (void) Cy_GPIO_Pin_FastInit(GPIO_PRT0, 1U, 0x00U, 0x00U, HSIOM_SEL_GPIO); + if (CY_SYSCLK_SUCCESS != Cy_SysClk_WcoEnable(1000000UL)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_WCO_ERROR); + } +} +__STATIC_INLINE void init_cycfg_power(void) +{ + /* Reset the Backup domain on POR, XRES, BOD only if Backup domain is supplied by VDDD */ +#if (CY_CFG_PWR_VBACKUP_USING_VDDD) +#ifdef CY_CFG_SYSCLK_ILO_ENABLED + if (0u == Cy_SysLib_GetResetReason() /* POR, XRES, or BOD */) + { +#if CY_CFG_SYSCLK_WCO_ENABLED + uint32_t wcoTrim = Cy_SysLib_GetWcoTrim(); + if (CY_SYSLIB_SUCCESS != Cy_SysLib_ResetBackupDomain()) + { + Cy_SysLib_DelayUs(1U); + if (CY_SYSLIB_SUCCESS != Cy_SysLib_GetResetStatus()) + { + cycfg_ClockStartupError(CY_CFG_PWR_BKP_ERROR); + } + } + Cy_SysLib_SetWcoTrim(wcoTrim); +#else /* CY_CFG_SYSCLK_WCO_ENABLED */ + (void) Cy_SysLib_ResetBackupDomain(); +#endif /* CY_CFG_SYSCLK_WCO_ENABLED */ + Cy_SysClk_IloDisable(); + Cy_SysClk_IloInit(); + } +#endif /* CY_CFG_SYSCLK_ILO_ENABLED */ +#endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */ +/* Configure core regulator */ +#if !(defined(CY_DEVICE_SECURE)) +#if defined(CY_IP_M4CPUSS) +#if CY_CFG_PWR_USING_LDO + Cy_SysPm_LdoSetVoltage(CY_SYSPM_LDO_VOLTAGE_LP); +#else + Cy_SysPm_BuckEnable(CY_SYSPM_BUCK_OUT1_VOLTAGE_LP); +#endif /* CY_CFG_PWR_USING_LDO */ +#endif /* defined (CY_IP_M4CPUSS) */ +#if CY_CFG_PWR_REGULATOR_MODE_MIN + Cy_SysPm_SystemSetMinRegulatorCurrent(); +#else + Cy_SysPm_SystemSetNormalRegulatorCurrent(); +#endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */ +#endif /* !(defined(CY_DEVICE_SECURE)) */ + /* Configure PMIC */ + Cy_SysPm_UnlockPmic(); +#if CY_CFG_PWR_USING_PMIC + Cy_SysPm_PmicEnableOutput(); +#else + Cy_SysPm_PmicDisableOutput(); +#endif /* CY_CFG_PWR_USING_PMIC */ +} +#endif //(!defined(CY_DEVICE_SECURE)) + +void init_cycfg_system(void) +{ + Cy_SysClk_PeriphAssignDivider(PCLK_CPUSS_CLOCK_TRACE_IN, CY_SYSCLK_DIV_8_BIT, 7U); +#if defined(CY_DEVICE_SECURE) + cy_en_pra_status_t configStatus; + init_cycfg_secure_struct(&srss_0_clock_0_secureConfig); +#if (((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif +#if (((CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 1UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif +#if (((CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 2UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif +#if (((CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 3UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif +#if (((CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 4UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif +#if (((CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM >= 3UL) && (CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM <= 5UL)) && \ + (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 5UL)) +#error Configuration Error : ALTHF, ILO, PILO cannot drive HF0. +#endif + + configStatus = CY_PRA_FUNCTION_CALL_RETURN_PARAM(CY_PRA_MSG_TYPE_SYS_CFG_FUNC, CY_PRA_FUNC_INIT_CYCFG_DEVICE, + &srss_0_clock_0_secureConfig); + if (configStatus != CY_PRA_STATUS_SUCCESS) + { + cycfg_ClockStartupError(configStatus); + } +#ifdef CY_CFG_SYSCLK_EXTCLK_FREQ + Cy_SysClk_ExtClkSetFrequency(CY_CFG_SYSCLK_EXTCLK_FREQ); +#endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */ +#else /* defined(CY_DEVICE_SECURE) */ + + /* Set worst case memory wait states (! ultra low power, 150 MHz), will update at the end */ + Cy_SysLib_SetWaitStates(false, 150UL); +#ifdef CY_CFG_PWR_ENABLED +#ifdef CY_CFG_PWR_INIT + init_cycfg_power(); +#else +#warning Power system will not be configured. Update power personality to v1.20 or later. +#endif /* CY_CFG_PWR_INIT */ +#endif /* CY_CFG_PWR_ENABLED */ + + /* Disable FLL */ + Cy_SysClk_FllDeInit(); + + /* Reset the core clock path to default and disable all the FLLs/PLLs */ + Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); + Cy_SysClk_ClkFastSetDivider(0U); + Cy_SysClk_ClkPeriSetDivider(1U); + Cy_SysClk_ClkSlowSetDivider(0U); + for (uint32_t pll = CY_SRSS_NUM_PLL; pll > 0UL; --pll) /* PLL 1 is the first PLL. 0 is invalid. */ + { + (void) Cy_SysClk_PllDisable(pll); + } + Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH1, CY_SYSCLK_CLKPATH_IN_IMO); + + if ((CY_SYSCLK_CLKHF_IN_CLKPATH0 == Cy_SysClk_ClkHfGetSource(0UL)) && + (CY_SYSCLK_CLKPATH_IN_WCO == Cy_SysClk_ClkPathGetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0))) + { + Cy_SysClk_ClkHfSetSource(0U, CY_SYSCLK_CLKHF_IN_CLKPATH1); + } + + Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0, CY_SYSCLK_CLKPATH_IN_IMO); + Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH0); +#ifdef CY_IP_MXBLESS + (void) Cy_BLE_EcoReset(); +#endif + +/* Enable all source clocks */ +#ifdef CY_CFG_SYSCLK_PILO_ENABLED + Cy_SysClk_PiloInit(); +#endif + +#ifdef CY_CFG_SYSCLK_WCO_ENABLED + Cy_SysClk_WcoInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + Cy_SysClk_ClkLfInit(); +#endif + +#if (defined(CY_IP_M4CPUSS) && CY_CFG_SYSCLK_ALTHF_ENABLED) + Cy_SysClk_AltHfInit(); +#endif /* (defined(CY_IP_M4CPUSS) && CY_CFG_SYSCLK_ALTHF_ENABLED */ + +#ifdef CY_CFG_SYSCLK_ECO_ENABLED + Cy_SysClk_EcoInit(); +#endif + +#ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED + Cy_SysClk_ExtClkInit(); +#endif + +/* Configure CPU clock dividers */ +#ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED + Cy_SysClk_ClkFastInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED + Cy_SysClk_ClkPeriInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED + Cy_SysClk_ClkSlowInit(); +#endif + +#if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U)) + /* Configure HFCLK0 to temporarily run from IMO to initialize other clocks */ + Cy_SysClk_ClkPathSetSource(1UL, CY_SYSCLK_CLKPATH_IN_IMO); + Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH1); +#else +#ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + Cy_SysClk_ClkPath1Init(); +#endif +#endif + +/* Configure Path Clocks */ +#ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED + Cy_SysClk_ClkPath0Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED + Cy_SysClk_ClkPath2Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED + Cy_SysClk_ClkPath3Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED + Cy_SysClk_ClkPath4Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED + Cy_SysClk_ClkPath5Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH6_ENABLED + Cy_SysClk_ClkPath6Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH7_ENABLED + Cy_SysClk_ClkPath7Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH8_ENABLED + Cy_SysClk_ClkPath8Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH9_ENABLED + Cy_SysClk_ClkPath9Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH10_ENABLED + Cy_SysClk_ClkPath10Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH11_ENABLED + Cy_SysClk_ClkPath11Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH12_ENABLED + Cy_SysClk_ClkPath12Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH13_ENABLED + Cy_SysClk_ClkPath13Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH14_ENABLED + Cy_SysClk_ClkPath14Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKPATH15_ENABLED + Cy_SysClk_ClkPath15Init(); +#endif + +/* Configure and enable FLL */ +#ifdef CY_CFG_SYSCLK_FLL_ENABLED + Cy_SysClk_FllInit(); +#endif + + Cy_SysClk_ClkHf0Init(); + +#if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U)) +#ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + /* Apply the ClkPath1 user setting */ + Cy_SysClk_ClkPath1Init(); +#endif +#endif + +/* Configure and enable PLLs */ +#ifdef CY_CFG_SYSCLK_PLL0_ENABLED + Cy_SysClk_Pll0Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL1_ENABLED + Cy_SysClk_Pll1Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL2_ENABLED + Cy_SysClk_Pll2Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL3_ENABLED + Cy_SysClk_Pll3Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL4_ENABLED + Cy_SysClk_Pll4Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL5_ENABLED + Cy_SysClk_Pll5Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL6_ENABLED + Cy_SysClk_Pll6Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL7_ENABLED + Cy_SysClk_Pll7Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL8_ENABLED + Cy_SysClk_Pll8Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL9_ENABLED + Cy_SysClk_Pll9Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL10_ENABLED + Cy_SysClk_Pll10Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL11_ENABLED + Cy_SysClk_Pll11Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL12_ENABLED + Cy_SysClk_Pll12Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL13_ENABLED + Cy_SysClk_Pll13Init(); +#endif +#ifdef CY_CFG_SYSCLK_PLL14_ENABLED + Cy_SysClk_Pll14Init(); +#endif + +/* Configure HF clocks */ +#ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED + Cy_SysClk_ClkHf1Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED + Cy_SysClk_ClkHf2Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED + Cy_SysClk_ClkHf3Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED + Cy_SysClk_ClkHf4Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED + Cy_SysClk_ClkHf5Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF6_ENABLED + Cy_SysClk_ClkHf6Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF7_ENABLED + Cy_SysClk_ClkHf7Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF8_ENABLED + Cy_SysClk_ClkHf8Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF9_ENABLED + Cy_SysClk_ClkHf9Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF10_ENABLED + Cy_SysClk_ClkHf10Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF11_ENABLED + Cy_SysClk_ClkHf11Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF12_ENABLED + Cy_SysClk_ClkHf12Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF13_ENABLED + Cy_SysClk_ClkHf13Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF14_ENABLED + Cy_SysClk_ClkHf14Init(); +#endif +#ifdef CY_CFG_SYSCLK_CLKHF15_ENABLED + Cy_SysClk_ClkHf15Init(); +#endif + + /* Configure miscellaneous clocks */ +#ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED + Cy_SysClk_ClkTimerInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED + Cy_SysClk_ClkAltSysTickInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED + Cy_SysClk_ClkPumpInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED + Cy_SysClk_ClkBakInit(); +#endif + +/* Configure default enabled clocks */ +#ifdef CY_CFG_SYSCLK_ILO_ENABLED + Cy_SysClk_IloInit(); +#endif + +#ifndef CY_CFG_SYSCLK_IMO_ENABLED +#error the IMO must be enabled for proper chip operation +#endif + +#ifndef CY_CFG_SYSCLK_CLKHF0_ENABLED +#error the CLKHF0 must be enabled for proper chip operation +#endif + +#endif /* defined(CY_DEVICE_SECURE) */ + +#ifdef CY_CFG_SYSCLK_MFO_ENABLED + Cy_SysClk_MfoInit(); +#endif + +#ifdef CY_CFG_SYSCLK_CLKMF_ENABLED + Cy_SysClk_ClkMfInit(); +#endif + +#if (!defined(CY_DEVICE_SECURE)) +/* Set accurate flash wait states */ +#if (defined(CY_CFG_PWR_ENABLED) && defined(CY_CFG_SYSCLK_CLKHF0_ENABLED)) + Cy_SysLib_SetWaitStates(CY_CFG_PWR_USING_ULP != 0, CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ); +#endif + + /* Update System Core Clock values for correct Cy_SysLib_Delay functioning */ + SystemCoreClockUpdate(); +#ifndef CY_CFG_SYSCLK_ILO_ENABLED +#ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + /* Wait 4 ILO cycles in case of unfinished CLKLF clock source transition */ + Cy_SysLib_DelayUs(200U); +#endif + Cy_SysClk_IloDisable(); + Cy_SysClk_IloHibernateOn(false); +#endif + +#endif /* (!defined(CY_DEVICE_SECURE)) */ + +#if defined(CY_CFG_SYSCLK_ECO_PRESCALER_ENABLED) + Cy_SysClk_EcoPrescalerInit(); +#endif // defined(CY_CFG_SYSCLK_ECO_PRESCALER_ENABLED) +} + +void reserve_cycfg_system(void) +{ +#if defined(CY_USING_HAL) + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_0_obj); + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_1_obj); + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_2_obj); + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_3_obj); + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_4_obj); + cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_5_obj); +#endif // defined (CY_USING_HAL) +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.h b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.h new file mode 100644 index 00000000000000..0bc3082fa297da --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/cycfg_system.h @@ -0,0 +1,105 @@ +/******************************************************************************* + * File Name: cycfg_system.h + * + * Description: + * System configuration + * This file was automatically generated and should not be modified. + * Configurator Backend 3.10.0 + * device-db 4.100.0.4304 + * mtb-pdl-cat1 3.9.0.29592 + * + ******************************************************************************** + * Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + ********************************************************************************/ + +#if !defined(CYCFG_SYSTEM_H) +#define CYCFG_SYSTEM_H + +#include "cy_pra.h" +#include "cy_pra_cfg.h" +#include "cy_sysclk.h" +#include "cy_systick.h" +#include "cycfg_notices.h" +#if defined(CY_USING_HAL) +#include "cyhal_hwmgr.h" +#endif // defined (CY_USING_HAL) +#include "cy_gpio.h" +#include "cy_syspm.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +#define cpuss_0_dap_0_ENABLED 1U +#define srss_0_clock_0_ENABLED 1U +#define srss_0_clock_0_altsystickclk_0_ENABLED 1U +#define srss_0_clock_0_bakclk_0_ENABLED 1U +#define srss_0_clock_0_fastclk_0_ENABLED 1U +#define srss_0_clock_0_fll_0_ENABLED 1U +#define srss_0_clock_0_hfclk_0_ENABLED 1U +#define CY_CFG_SYSCLK_CLKHF0 0UL +#define CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM 0UL +#define srss_0_clock_0_ilo_0_ENABLED 1U +#define srss_0_clock_0_imo_0_ENABLED 1U +#define srss_0_clock_0_lfclk_0_ENABLED 1U +#define CY_CFG_SYSCLK_CLKLF_FREQ_HZ 32768 +#define CY_CFG_SYSCLK_CLKLF_SOURCE CY_SYSCLK_CLKLF_IN_WCO +#define srss_0_clock_0_pathmux_0_ENABLED 1U +#define srss_0_clock_0_pathmux_1_ENABLED 1U +#define srss_0_clock_0_pathmux_2_ENABLED 1U +#define srss_0_clock_0_pathmux_3_ENABLED 1U +#define srss_0_clock_0_pathmux_4_ENABLED 1U +#define srss_0_clock_0_pathmux_5_ENABLED 1U +#define srss_0_clock_0_periclk_0_ENABLED 1U +#define srss_0_clock_0_pll_0_ENABLED 1U +#define srss_0_clock_0_slowclk_0_ENABLED 1U +#define srss_0_clock_0_timerclk_0_ENABLED 1U +#define srss_0_clock_0_wco_0_ENABLED 1U +#define srss_0_power_0_ENABLED 1U +#define CY_CFG_PWR_MODE_LP 0x01UL +#define CY_CFG_PWR_MODE_ULP 0x02UL +#define CY_CFG_PWR_MODE_ACTIVE 0x04UL +#define CY_CFG_PWR_MODE_SLEEP 0x08UL +#define CY_CFG_PWR_MODE_DEEPSLEEP 0x10UL +#define CY_CFG_PWR_SYS_IDLE_MODE CY_CFG_PWR_MODE_DEEPSLEEP +#define CY_CFG_PWR_SYS_ACTIVE_MODE CY_CFG_PWR_MODE_LP +#define CY_CFG_PWR_DEEPSLEEP_LATENCY 0UL +#define CY_CFG_PWR_USING_LDO 1 +#define CY_CFG_PWR_VDDA_MV 3300 +#define CY_CFG_PWR_VDDD_MV 3300 +#define CY_CFG_PWR_VBACKUP_MV 3300 +#define CY_CFG_PWR_VDD_NS_MV 3300 +#define CY_CFG_PWR_VDDIO0_MV 3300 +#define CY_CFG_PWR_VDDIO1_MV 3300 + +#if defined(CY_USING_HAL) +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj; +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_1_obj; +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_2_obj; +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_3_obj; +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_4_obj; +extern const cyhal_resource_inst_t srss_0_clock_0_pathmux_5_obj; +#endif // defined (CY_USING_HAL) + +void init_cycfg_system(void); +void reserve_cycfg_system(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* CYCFG_SYSTEM_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/qspi_config.cfg b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/qspi_config.cfg new file mode 100644 index 00000000000000..b751dcd0f17ff5 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/GeneratedSource/qspi_config.cfg @@ -0,0 +1,29 @@ +################################################################################ +# File Name: qspi_config.cfg +# +# Description: +# This file contains a SMIF Bank layout for use with OpenOCD. +# This file was automatically generated and should not be modified. +# QSPI Configurator: 4.10.0.1343 +# +################################################################################ +# Copyright 2024 Cypress Semiconductor Corporation (an Infineon company) or +# an affiliate of Cypress Semiconductor Corporation. +# SPDX-License-Identifier: Apache-2.0 +# +# 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. +################################################################################ + +set SMIF_BANKS { + 0 {addr 0x18000000 size 0x4000000 psize 0x00000200 esize 0x00040000} +} diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/cy_flash_map.h b/third_party/infineon/psoc6/psoc6_sdk/configs/cy_flash_map.h new file mode 100644 index 00000000000000..89031c0bb4e151 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/cy_flash_map.h @@ -0,0 +1,22 @@ +/* AUTO-GENERATED FILE, DO NOT EDIT. ALL CHANGES WILL BE LOST! */ +/* Platform: PSOC_062_2M */ +#ifndef CY_FLASH_MAP_H +#define CY_FLASH_MAP_H + +static struct flash_area flash_areas[] = { + { .fa_id = FLASH_AREA_BOOTLOADER, .fa_device_id = FLASH_DEVICE_INTERNAL_FLASH, .fa_off = 0x0U, .fa_size = 0x28000U }, + { .fa_id = FLASH_AREA_IMG_1_PRIMARY, .fa_device_id = FLASH_DEVICE_INTERNAL_FLASH, .fa_off = 0x28000U, .fa_size = 0x1c0000U }, + { .fa_id = FLASH_AREA_IMG_1_SECONDARY, + .fa_device_id = FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX), + .fa_off = 0x200U, + .fa_size = 0x1c0000U }, + { .fa_id = FLASH_AREA_IMAGE_SWAP_STATUS, .fa_device_id = FLASH_DEVICE_INTERNAL_FLASH, .fa_off = 0x1e8000U, .fa_size = 0x6c00U }, + { .fa_id = FLASH_AREA_IMAGE_SCRATCH, + .fa_device_id = FLASH_DEVICE_EXTERNAL_FLASH(CY_BOOT_EXTERNAL_DEVICE_INDEX), + .fa_off = 0x440000U, + .fa_size = 0x80000U } +}; + +struct flash_area * boot_area_descs[] = { &flash_areas[0U], &flash_areas[1U], &flash_areas[2U], + &flash_areas[3U], &flash_areas[4U], NULL }; +#endif /* CY_FLASH_MAP_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/configs/lwipopts.h b/third_party/infineon/psoc6/psoc6_sdk/configs/lwipopts.h index e0701a2cd268ac..5a10a49ce2ef67 100644 --- a/third_party/infineon/psoc6/psoc6_sdk/configs/lwipopts.h +++ b/third_party/infineon/psoc6/psoc6_sdk/configs/lwipopts.h @@ -18,8 +18,8 @@ /** * @file - * Compile-time configuration for LwIP on P6 platforms using the - * P6 SDK. + * Compile-time configuration for LwIP on PSOC6 platforms using the + * PSOC6 SDK. * */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/TARGET_CY8CKIT-062S2-43012 b/third_party/infineon/psoc6/psoc6_sdk/libs/TARGET_CY8CKIT-062S2-43012 index 7f3840aab53ff7..a085cc64ea8edc 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/TARGET_CY8CKIT-062S2-43012 +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/TARGET_CY8CKIT-062S2-43012 @@ -1 +1 @@ -Subproject commit 7f3840aab53ff773c5d95eaedb5aaaae9dd2af45 +Subproject commit a085cc64ea8edc368423b515cecb6787a48e2392 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/abstraction-rtos b/third_party/infineon/psoc6/psoc6_sdk/libs/abstraction-rtos index 23800dd03bf460..ccca0f72d96ef6 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/abstraction-rtos +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/abstraction-rtos @@ -1 +1 @@ -Subproject commit 23800dd03bf46064930127b22f915807cacbc1e7 +Subproject commit ccca0f72d96ef6dcdfe11402b244fdd420ae4792 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota b/third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota deleted file mode 160000 index adc942bb85aa6e..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota +++ /dev/null @@ -1 +0,0 @@ -Subproject commit adc942bb85aa6e43021cbf31454314dbe6038e25 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/bluetooth-freertos b/third_party/infineon/psoc6/psoc6_sdk/libs/bluetooth-freertos deleted file mode 160000 index e0d13d8e1f49f5..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/bluetooth-freertos +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e0d13d8e1f49f5522043133856fa268d1a279b32 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/btstack b/third_party/infineon/psoc6/psoc6_sdk/libs/btstack index 205412d987da3f..d8f0984529fd9c 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/btstack +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/btstack @@ -1 +1 @@ -Subproject commit 205412d987da3f397201580ac2f98918d1bb0d57 +Subproject commit d8f0984529fd9cbc84bfbda62eb0f4d25063d630 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/btstack-integration b/third_party/infineon/psoc6/psoc6_sdk/libs/btstack-integration new file mode 160000 index 00000000000000..5e47501ee097ad --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/btstack-integration @@ -0,0 +1 @@ +Subproject commit 5e47501ee097add323be53bc7032fb50e110ad3e diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/cat1cm0p b/third_party/infineon/psoc6/psoc6_sdk/libs/cat1cm0p new file mode 160000 index 00000000000000..ddcdedbccd69b3 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/cat1cm0p @@ -0,0 +1 @@ +Subproject commit ddcdedbccd69b360da108328e689af2b4d6ac8cb diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/clib-support b/third_party/infineon/psoc6/psoc6_sdk/libs/clib-support index 8be98e6512bb03..97cf620d8cde5d 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/clib-support +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/clib-support @@ -1 +1 @@ -Subproject commit 8be98e6512bb03d11780530c35e23cd723a1cd72 +Subproject commit 97cf620d8cde5ded9844f7a2f8e0fe2f0ea65891 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/cmsis b/third_party/infineon/psoc6/psoc6_sdk/libs/cmsis new file mode 160000 index 00000000000000..ce02f641ebc221 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/cmsis @@ -0,0 +1 @@ +Subproject commit ce02f641ebc22103402260f9bb95698fd14086f1 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/connectivity-utilities b/third_party/infineon/psoc6/psoc6_sdk/libs/connectivity-utilities index 25d71a735e2165..3f6ae38680bb85 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/connectivity-utilities +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/connectivity-utilities @@ -1 +1 @@ -Subproject commit 25d71a735e2165e777948469cd68c419fd75b3a5 +Subproject commit 3f6ae38680bb85061829733c8f1037a6299ce6c5 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/core-lib b/third_party/infineon/psoc6/psoc6_sdk/libs/core-lib index 7e6892ee1eeabc..a74be8b06601cb 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/core-lib +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/core-lib @@ -1 +1 @@ -Subproject commit 7e6892ee1eeabc8f6c25fbf02cb00ff43bd3ac73 +Subproject commit a74be8b06601cbd698dc80b1cdad772412c12d04 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/core-make b/third_party/infineon/psoc6/psoc6_sdk/libs/core-make index 251ade90cd5600..b962a1ed157c34 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/core-make +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/core-make @@ -1 +1 @@ -Subproject commit 251ade90cd56005369ced67cf0583171783b1cd1 +Subproject commit b962a1ed157c34ee24ab7002dadcc39276dd5218 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/freertos b/third_party/infineon/psoc6/psoc6_sdk/libs/freertos index eec60193e7f5d4..c2c8a9b26fd8b3 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/freertos +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/freertos @@ -1 +1 @@ -Subproject commit eec60193e7f5d4e239bc9c8e6c0c6e88eb3ecdb4 +Subproject commit c2c8a9b26fd8b33d9f08e66c85dd3cae4610acef diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/kv-store b/third_party/infineon/psoc6/psoc6_sdk/libs/kv-store index c81d0a32cb8301..9a75a83d22583c 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/kv-store +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/kv-store @@ -1 +1 @@ -Subproject commit c81d0a32cb8301b307b9e32c126bf1a1f6465fbb +Subproject commit 9a75a83d22583c83b862b4118ee13a20e38af8ac diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/lwip b/third_party/infineon/psoc6/psoc6_sdk/libs/lwip index bef26c44236a07..159e31b689577d 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/lwip +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/lwip @@ -1 +1 @@ -Subproject commit bef26c44236a078d4352e76392ef16f019bea501 +Subproject commit 159e31b689577dbf69cf0683bbaffbd71fa5ee10 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration b/third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration index 9e1660130f6113..683110fbb75965 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/lwip-network-interface-integration @@ -1 +1 @@ -Subproject commit 9e1660130f611364c8772bc01147ddb2916c8d8d +Subproject commit 683110fbb7596507e9b61fd1c83510cb3b35d805 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-hal-cat1 b/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-hal-cat1 index 708a6b2542f0d8..4090e1aec69137 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-hal-cat1 +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-hal-cat1 @@ -1 +1 @@ -Subproject commit 708a6b2542f0d8814c129a3141e78fd265826a0b +Subproject commit 4090e1aec69137fe80423eabe4558d9291dbe9d2 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-pdl-cat1 b/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-pdl-cat1 index 3c6aebd2f3238b..96bbf1928e6b99 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-pdl-cat1 +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/mtb-pdl-cat1 @@ -1 +1 @@ -Subproject commit 3c6aebd2f3238b578329bfb8a6c5a0e138bd5c7b +Subproject commit 96bbf1928e6b99feec4451c6011403aaabf4c08d diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/ota-bootloader-abstraction b/third_party/infineon/psoc6/psoc6_sdk/libs/ota-bootloader-abstraction new file mode 160000 index 00000000000000..472c6455f74a64 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/ota-bootloader-abstraction @@ -0,0 +1 @@ +Subproject commit 472c6455f74a643f1894fc5d111cf7838c89ad2d diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/ota-update b/third_party/infineon/psoc6/psoc6_sdk/libs/ota-update new file mode 160000 index 00000000000000..d7da5cc50fc31d --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/ota-update @@ -0,0 +1 @@ +Subproject commit d7da5cc50fc31d525b9bc7324989b5cbb330644c diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/psoc6cm0p b/third_party/infineon/psoc6/psoc6_sdk/libs/psoc6cm0p deleted file mode 160000 index 65569574830d3e..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/psoc6cm0p +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 65569574830d3eef29fb9a0f1060eb0885063b56 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/recipe-make-cat1a b/third_party/infineon/psoc6/psoc6_sdk/libs/recipe-make-cat1a index 656d8c5b4fbd1e..0446103a230b44 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/recipe-make-cat1a +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/recipe-make-cat1a @@ -1 +1 @@ -Subproject commit 656d8c5b4fbd1e20190315ffb6a64ae151f627c9 +Subproject commit 0446103a230b44aa972a028bbe31591c4744e85f diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/retarget-io b/third_party/infineon/psoc6/psoc6_sdk/libs/retarget-io index a61cd7c5f4b280..db7f9627c81f3d 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/retarget-io +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/retarget-io @@ -1 +1 @@ -Subproject commit a61cd7c5f4b2808c949248f05287c09e6578abfc +Subproject commit db7f9627c81f3d54401cf4aaf7f5ddf21ceda326 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/secure-sockets b/third_party/infineon/psoc6/psoc6_sdk/libs/secure-sockets index f7508f942e1c25..3627168abbed91 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/secure-sockets +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/secure-sockets @@ -1 +1 @@ -Subproject commit f7508f942e1c25f74f5317422ed8289b2b930cb1 +Subproject commit 3627168abbed91f8df3f1d6e41a37ad918fffdfc diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/serial-flash b/third_party/infineon/psoc6/psoc6_sdk/libs/serial-flash index c7b55aa5406e6d..9830481016731e 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/serial-flash +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/serial-flash @@ -1 +1 @@ -Subproject commit c7b55aa5406e6da9954f60e5f5460b71cd220ef2 +Subproject commit 9830481016731e3953996a7b118c84f7f46baa1e diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/whd-bsp-integration b/third_party/infineon/psoc6/psoc6_sdk/libs/whd-bsp-integration index c180a141838d02..0bdf13bafdcd19 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/whd-bsp-integration +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/whd-bsp-integration @@ -1 +1 @@ -Subproject commit c180a141838d02aea52f86967772f8216fc15a18 +Subproject commit 0bdf13bafdcd190c8eade52e03af676b163ac6d0 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-connection-manager b/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-connection-manager index 2567493ff15459..8602aabdfff9ed 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-connection-manager +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-connection-manager @@ -1 +1 @@ -Subproject commit 2567493ff1545989e24f6415254a70d24b7a76e6 +Subproject commit 8602aabdfff9edbaeacfd8ee09461ff81e363064 diff --git a/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-host-driver b/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-host-driver index 919d9213128860..04ee318cc96bff 160000 --- a/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-host-driver +++ b/third_party/infineon/psoc6/psoc6_sdk/libs/wifi-host-driver @@ -1 +1 @@ -Subproject commit 919d921312886057411efcf2271c99296f87afb8 +Subproject commit 04ee318cc96bffa7d69a1e076c008e2364453f82 diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil.h b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil.h new file mode 100644 index 00000000000000..ff94964158ef3d --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil.h @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +#ifndef H_BOOTUTIL_ +#define H_BOOTUTIL_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** Attempt to boot the contents of the primary slot. */ +#define BOOT_SWAP_TYPE_NONE 1 + +/** + * Swap to the secondary slot. + * Absent a confirm command, revert back on next boot. + */ +#define BOOT_SWAP_TYPE_TEST 2 + +/** + * Swap to the secondary slot, + * and permanently switch to booting its contents. + */ +#define BOOT_SWAP_TYPE_PERM 3 + +/** Swap back to alternate slot. A confirm changes this state to NONE. */ +#define BOOT_SWAP_TYPE_REVERT 4 + +/** Swap failed because image to be run is not valid */ +#define BOOT_SWAP_TYPE_FAIL 5 + +/** Swapping encountered an unrecoverable error */ +#define BOOT_SWAP_TYPE_PANIC 0xff + +#define BOOT_MAX_ALIGN 8 + +/* This is not actually used by mcuboot's code but can be used by apps + * when attempting to read/write a trailer. + */ +struct image_trailer +{ + uint8_t swap_type; + uint8_t pad1[BOOT_MAX_ALIGN - 1]; + uint8_t copy_done; + uint8_t pad2[BOOT_MAX_ALIGN - 1]; + uint8_t image_ok; + uint8_t pad3[BOOT_MAX_ALIGN - 1]; + uint8_t magic[16]; +}; + +int boot_swap_type_multi(int image_index); +int boot_swap_type(void); + +int boot_set_pending(int image, int permanent); +int boot_set_confirmed(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil_log.h b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil_log.h new file mode 100644 index 00000000000000..02f15f063949b9 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/bootutil_log.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Linaro Limited + * + * 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. + */ + +#ifndef H_BOOTUTIL_LOG_H_ +#define H_BOOTUTIL_LOG_H_ + +#include "ignore.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#if 1 // def MCUBOOT_HAVE_LOGGING + +#define BOOT_LOG_ERR(...) MCUBOOT_LOG_ERR(__VA_ARGS__) +#define BOOT_LOG_WRN(...) MCUBOOT_LOG_WRN(__VA_ARGS__) +#define BOOT_LOG_INF(...) MCUBOOT_LOG_INF(__VA_ARGS__) +#define BOOT_LOG_DBG(...) MCUBOOT_LOG_DBG(__VA_ARGS__) + +#else + +#define BOOT_LOG_ERR(...) IGNORE(__VA_ARGS__) +#define BOOT_LOG_WRN(...) IGNORE(__VA_ARGS__) +#define BOOT_LOG_INF(...) IGNORE(__VA_ARGS__) +#define BOOT_LOG_DBG(...) IGNORE(__VA_ARGS__) + +#endif /* MCUBOOT_HAVE_LOGGING */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/ignore.h b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/ignore.h new file mode 100644 index 00000000000000..64d519e7baa770 --- /dev/null +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/bootutil/ignore.h @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +#ifndef H_IGNORE_ +#define H_IGNORE_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * These macros prevent the "set but not used" warnings for log writes below + * the log level. + */ + +#define IGN_1(X) ((void) (X)) +#define IGN_2(X, ...) \ + ((void) (X)); \ + IGN_1(__VA_ARGS__) +#define IGN_3(X, ...) \ + ((void) (X)); \ + IGN_2(__VA_ARGS__) +#define IGN_4(X, ...) \ + ((void) (X)); \ + IGN_3(__VA_ARGS__) +#define IGN_5(X, ...) \ + ((void) (X)); \ + IGN_4(__VA_ARGS__) +#define IGN_6(X, ...) \ + ((void) (X)); \ + IGN_5(__VA_ARGS__) +#define IGN_7(X, ...) \ + ((void) (X)); \ + IGN_6(__VA_ARGS__) +#define IGN_8(X, ...) \ + ((void) (X)); \ + IGN_7(__VA_ARGS__) +#define IGN_9(X, ...) \ + ((void) (X)); \ + IGN_8(__VA_ARGS__) +#define IGN_10(X, ...) \ + ((void) (X)); \ + IGN_9(__VA_ARGS__) +#define IGN_11(X, ...) \ + ((void) (X)); \ + IGN_10(__VA_ARGS__) +#define IGN_12(X, ...) \ + ((void) (X)); \ + IGN_11(__VA_ARGS__) +#define IGN_13(X, ...) \ + ((void) (X)); \ + IGN_12(__VA_ARGS__) +#define IGN_14(X, ...) \ + ((void) (X)); \ + IGN_13(__VA_ARGS__) +#define IGN_15(X, ...) \ + ((void) (X)); \ + IGN_14(__VA_ARGS__) +#define IGN_16(X, ...) \ + ((void) (X)); \ + IGN_15(__VA_ARGS__) +#define IGN_17(X, ...) \ + ((void) (X)); \ + IGN_16(__VA_ARGS__) +#define IGN_18(X, ...) \ + ((void) (X)); \ + IGN_17(__VA_ARGS__) +#define IGN_19(X, ...) \ + ((void) (X)); \ + IGN_18(__VA_ARGS__) +#define IGN_20(X, ...) \ + ((void) (X)); \ + IGN_19(__VA_ARGS__) + +#define GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, NAME, ...) NAME +#define IGNORE(...) \ + GET_MACRO(__VA_ARGS__, IGN_20, IGN_19, IGN_18, IGN_17, IGN_16, IGN_15, IGN_14, IGN_13, IGN_12, IGN_11, IGN_10, IGN_9, IGN_8, \ + IGN_7, IGN_6, IGN_5, IGN_4, IGN_3, IGN_2, IGN_1) \ + (__VA_ARGS__) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_assert.h b/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_assert.h deleted file mode 100644 index 15a69555516030..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_assert.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * mcuboot_assert.h - * - * Cypress-specific assert() macro redefinition - * - */ - -#ifndef MCUBOOT_ASSERT_H -#define MCUBOOT_ASSERT_H - -#define CYBL_ASSERT(...) Cy_BLServ_Assert(__VA_ARGS__) - -#if !defined(NDEBUG) -#undef assert -#define assert(...) CYBL_ASSERT(__VA_ARGS__) -#else -#define assert -#endif - -#endif /* MCUBOOT_ASSERT_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_config.h b/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_config.h deleted file mode 100644 index 6b11d855ca1d04..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_config.h +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright 2019 Cypress Semiconductor Corporation - * - * Copyright (c) 2018 Open Source Foundries Limited - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef MCUBOOT_CONFIG_H -#define MCUBOOT_CONFIG_H - -/* - * Template configuration file for MCUboot. - * - * When porting MCUboot to a new target, copy it somewhere that your - * include path can find it as mcuboot_config/mcuboot_config.h, and - * make adjustments to suit your platform. - * - * For examples, see: - * - * boot/zephyr/include/mcuboot_config/mcuboot_config.h - * boot/mynewt/mcuboot_config/include/mcuboot_config/mcuboot_config.h - */ -/* Default maximum number of flash sectors per image slot; change - * as desirable. */ -#ifndef MCUBOOT_MAX_IMG_SECTORS -#define MCUBOOT_MAX_IMG_SECTORS 128 -#endif - -/* - * Signature types - * - * You must choose exactly one signature type. - */ - -/* Uncomment for RSA signature support */ -//#define MCUBOOT_SIGN_RSA - -/* Uncomment for ECDSA signatures using curve P-256. */ -//#define MCUBOOT_SIGN_EC256 -//#define NUM_ECC_BYTES (256 / 8) // P-256 curve size in bytes, rnok: to make compilable - -// #define MCUBOOT_SIGN_EC - -/* - * Upgrade mode - * - * The default is to support A/B image swapping with rollback. A - * simpler code path, which only supports overwriting the - * existing image with the update image, is also available. - */ -#ifdef MCUBOOT_OVERWRITE_ONLY -/* Uncomment to only erase and overwrite those slot 0 sectors needed - * to install the new image, rather than the entire image slot. */ -/* #define MCUBOOT_OVERWRITE_ONLY_FAST */ -#else -/* Using SWAP w Scratch by default. - * Comment/Uncomment which is needed. */ -/* #define MCUBOOT_SWAP_USING_SCRATCH 1 */ -/* #define MCUBOOT_SWAP_USING_MOVE 1 */ -#define MCUBOOT_SWAP_USING_STATUS 1 -#endif - -/* - * Cryptographic settings - * - * You must choose between mbedTLS and Tinycrypt as source of - * cryptographic primitives. Other cryptographic settings are also - * available. - */ - -/* Uncomment to use ARM's mbedTLS cryptographic primitives */ -#define MCUBOOT_USE_MBED_TLS -/* Uncomment to use Tinycrypt's. */ -/* #define MCUBOOT_USE_TINYCRYPT */ - -/* - * Always check the signature of the image in slot 0 before booting, - * even if no upgrade was performed. This is recommended if the boot - * time penalty is acceptable. - */ -//#define MCUBOOT_VALIDATE_PRIMARY_SLOT - -/* - * Flash abstraction - */ - -/* Uncomment if your flash map API supports flash_area_get_sectors(). - * See the flash APIs for more details. */ -// TODO: FWSECURITY-755 -#define MCUBOOT_USE_FLASH_AREA_GET_SECTORS - -/* Default number of separately updateable images; change in case of - * multiple images. */ -#ifndef MCUBOOT_IMAGE_NUMBER -#define MCUBOOT_IMAGE_NUMBER 1 -#endif - -/* - * Logging - */ - -/* - * If logging is enabled the following functions must be defined by the - * platform: - * - * MCUBOOT_LOG_ERR(...) - * MCUBOOT_LOG_WRN(...) - * MCUBOOT_LOG_INF(...) - * MCUBOOT_LOG_DBG(...) - * - * The following global logging level configuration macros must also be - * defined, each with a unique value. Those will be used to define a global - * configuration and will allow any source files to override the global - * configuration: - * - * MCUBOOT_LOG_LEVEL_OFF - * MCUBOOT_LOG_LEVEL_ERROR - * MCUBOOT_LOG_LEVEL_WARNING - * MCUBOOT_LOG_LEVEL_INFO - * MCUBOOT_LOG_LEVEL_DEBUG - * - * The global logging level must be defined, with one of the previously defined - * logging levels: - * - * #define MCUBOOT_LOG_LEVEL MCUBOOT_LOG_LEVEL_(OFF|ERROR|WARNING|INFO|DEBUG) - * - * MCUBOOT_LOG_LEVEL sets the minimum level that will be logged. The function - * priority is: - * - * MCUBOOT_LOG_ERR > MCUBOOT_LOG_WRN > MCUBOOT_LOG_INF > MCUBOOT_LOG_DBG - * - * NOTE: Each source file is still able to request its own logging level by - * defining BOOT_LOG_LEVEL before #including `bootutil_log.h` - */ -#define MCUBOOT_HAVE_LOGGING 1 - -/* - * Assertions - */ - -/* Uncomment if your platform has its own mcuboot_config/mcuboot_assert.h. - * If so, it must provide an ASSERT macro for use by bootutil. Otherwise, - * "assert" is used. */ -//#define MCUBOOT_HAVE_ASSERT_H - -#define MCUBOOT_WATCHDOG_FEED() \ - do \ - { \ - /* TODO: to be implemented */ \ - } while (0) - -#endif /* MCUBOOT_CONFIG_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_logging.h b/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_logging.h deleted file mode 100644 index 35424b4c5ad96d..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_config/mcuboot_logging.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2018 Nordic Semiconductor ASA - * Copyright (c) 2015 Runtime Inc - * Copyright (c) 2020 Cypress Semiconductor Corporation - * - * SPDX-License-Identifier: Apache-2.0 - */ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -/*******************************************************************************/ - -#ifndef MCUBOOT_LOGGING_H -#define MCUBOOT_LOGGING_H - -#include - -#define MCUBOOT_LOG_LEVEL_OFF 0 -#define MCUBOOT_LOG_LEVEL_ERROR 1 -#define MCUBOOT_LOG_LEVEL_WARNING 2 -#define MCUBOOT_LOG_LEVEL_INFO 3 -#define MCUBOOT_LOG_LEVEL_DEBUG 4 - -/* - * The compiled log level determines the maximum level that can be - * printed. Messages at or below this level can be printed, provided - * they are also enabled through the Rust logging system, such as by - * setting RUST_LOG to bootsim::api=info. - */ -#ifndef MCUBOOT_LOG_LEVEL -#define MCUBOOT_LOG_LEVEL MCUBOOT_LOG_LEVEL_INFO -#endif - -int sim_log_enabled(int level); - -#define sim_log_enabled(x) 1 - -#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_ERROR -#define MCUBOOT_LOG_ERR(_fmt, ...) \ - do \ - { \ - if (sim_log_enabled(MCUBOOT_LOG_LEVEL_ERROR)) \ - { \ - fprintf(stderr, "[ERR] " _fmt "\n\r", ##__VA_ARGS__); \ - } \ - } while (0) -#else -#define MCUBOOT_LOG_ERR(...) IGNORE(__VA_ARGS__) -#endif - -#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_WARNING -#define MCUBOOT_LOG_WRN(_fmt, ...) \ - do \ - { \ - if (sim_log_enabled(MCUBOOT_LOG_LEVEL_WARNING)) \ - { \ - fprintf(stderr, "[WRN] " _fmt "\n\r", ##__VA_ARGS__); \ - } \ - } while (0) -#else -#define MCUBOOT_LOG_WRN(...) IGNORE(__VA_ARGS__) -#endif - -#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_INFO -#define MCUBOOT_LOG_INF(_fmt, ...) \ - do \ - { \ - if (sim_log_enabled(MCUBOOT_LOG_LEVEL_INFO)) \ - { \ - fprintf(stderr, "[INF] " _fmt "\n\r", ##__VA_ARGS__); \ - } \ - } while (0) -#else -#define MCUBOOT_LOG_INF(...) IGNORE(__VA_ARGS__) -#endif - -#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_DEBUG -#define MCUBOOT_LOG_DBG(_fmt, ...) \ - do \ - { \ - if (sim_log_enabled(MCUBOOT_LOG_LEVEL_DEBUG)) \ - { \ - fprintf(stderr, "[DBG] " _fmt "\n\r", ##__VA_ARGS__); \ - } \ - } while (0) -#else -#define MCUBOOT_LOG_DBG(...) IGNORE(__VA_ARGS__) -#endif - -#define MCUBOOT_LOG_MODULE_DECLARE(...) - -#endif /* MCUBOOT_LOGGING_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_acc_config.h b/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_acc_config.h deleted file mode 100644 index 2bf440a549bc49..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_acc_config.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * mbed Microcontroller Library - * Copyright (c) 2019 Cypress Semiconductor Corporation - * - * 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 mcuboot_crypto_acc_config.h - * \version 1.1 - */ - -#ifndef MCUBOOT_MBEDTLS_DEVICE_H -#define MCUBOOT_MBEDTLS_DEVICE_H - -/* Currently this target supports SHA1 */ -// #define MBEDTLS_SHA1_C - -#define MBEDTLS_SHA1_ALT -#define MBEDTLS_SHA256_ALT -#define MBEDTLS_SHA512_ALT - -/* Currently this target supports CBC, CFB, OFB, CTR and XTS cipher modes */ -#define MBEDTLS_AES_ALT -// #define MBEDTLS_CIPHER_MODE_CBC -// #define MBEDTLS_CIPHER_MODE_CFB -// #define MBEDTLS_CIPHER_MODE_OFB -// #define MBEDTLS_CIPHER_MODE_CTR -// #define MBEDTLS_CIPHER_MODE_XTS - -/* Only NIST-P curves are currently supported */ -#define MBEDTLS_ECP_ALT -// #define MBEDTLS_ECP_DP_SECP192R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP224R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP256R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP384R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP521R1_ENABLED - -#define MBEDTLS_ECDSA_SIGN_ALT -#define MBEDTLS_ECDSA_VERIFY_ALT - -#endif /* MCUBOOT_MBEDTLS_DEVICE_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_config.h b/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_config.h deleted file mode 100644 index 4f0f7d383b4bc4..00000000000000 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/config/mcuboot_crypto_config.h +++ /dev/null @@ -1,3606 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -/* - * Copyright (C) 2006-2018, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * 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. - * - * This file is part of mbed TLS (https://tls.mbed.org) - */ - -#ifndef MBEDTLS_CONFIG_H -#define MBEDTLS_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ - -/** - * \def MBEDTLS_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/aria.c - * library/timing.c - * include/mbedtls/bn_mul.h - * - * Required by: - * MBEDTLS_AESNI_C - * MBEDTLS_PADLOCK_C - * - * Comment to disable the use of assembly code. - */ -#define MBEDTLS_HAVE_ASM - -/** - * \def MBEDTLS_NO_UDBL_DIVISION - * - * The platform lacks support for double-width integer division (64-bit - * division on a 32-bit platform, 128-bit division on a 64-bit platform). - * - * Used in: - * include/mbedtls/bignum.h - * library/bignum.c - * - * The bignum code uses double-width division to speed up some operations. - * Double-width division is often implemented in software that needs to - * be linked with the program. The presence of a double-width integer - * type is usually detected automatically through preprocessor macros, - * but the automatic detection cannot know whether the code needs to - * and can be linked with an implementation of division for that type. - * By default division is assumed to be usable if the type is present. - * Uncomment this option to prevent the use of double-width division. - * - * Note that division for the native integer type is always required. - * Furthermore, a 64-bit type is always required even on a 32-bit - * platform, but it need not support multiplication or division. In some - * cases it is also desirable to disable some double-width operations. For - * example, if double-width division is implemented in software, disabling - * it can reduce code size in some embedded targets. - */ -//#define MBEDTLS_NO_UDBL_DIVISION - -/** - * \def MBEDTLS_NO_64BIT_MULTIPLICATION - * - * The platform lacks support for 32x32 -> 64-bit multiplication. - * - * Used in: - * library/poly1305.c - * - * Some parts of the library may use multiplication of two unsigned 32-bit - * operands with a 64-bit result in order to speed up computations. On some - * platforms, this is not available in hardware and has to be implemented in - * software, usually in a library provided by the toolchain. - * - * Sometimes it is not desirable to have to link to that library. This option - * removes the dependency of that library on platforms that lack a hardware - * 64-bit multiplier by embedding a software implementation in Mbed TLS. - * - * Note that depending on the compiler, this may decrease performance compared - * to using the library function provided by the toolchain. - */ -//#define MBEDTLS_NO_64BIT_MULTIPLICATION - -/** - * \def MBEDTLS_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ -//#define MBEDTLS_HAVE_SSE2 - -/** - * \def MBEDTLS_HAVE_TIME - * - * System has time.h and time(). - * The time does not need to be correct, only time differences are used, - * by contrast with MBEDTLS_HAVE_TIME_DATE - * - * Defining MBEDTLS_HAVE_TIME allows you to specify MBEDTLS_PLATFORM_TIME_ALT, - * MBEDTLS_PLATFORM_TIME_MACRO, MBEDTLS_PLATFORM_TIME_TYPE_MACRO and - * MBEDTLS_PLATFORM_STD_TIME. - * - * Comment if your system does not support time functions - */ -#define MBEDTLS_HAVE_TIME - -/** - * \def MBEDTLS_HAVE_TIME_DATE - * - * System has time.h, time(), and an implementation for - * mbedtls_platform_gmtime_r() (see below). - * The time needs to be correct (not necessarily very accurate, but at least - * the date should be correct). This is used to verify the validity period of - * X.509 certificates. - * - * Comment if your system does not have a correct clock. - * - * \note mbedtls_platform_gmtime_r() is an abstraction in platform_util.h that - * behaves similarly to the gmtime_r() function from the C standard. Refer to - * the documentation for mbedtls_platform_gmtime_r() for more information. - * - * \note It is possible to configure an implementation for - * mbedtls_platform_gmtime_r() at compile-time by using the macro - * MBEDTLS_PLATFORM_GMTIME_R_ALT. - */ -#define MBEDTLS_HAVE_TIME_DATE - -/** - * \def MBEDTLS_PLATFORM_MEMORY - * - * Enable the memory allocation layer. - * - * By default mbed TLS uses the system-provided calloc() and free(). - * This allows different allocators (self-implemented or provided) to be - * provided to the platform abstraction layer. - * - * Enabling MBEDTLS_PLATFORM_MEMORY without the - * MBEDTLS_PLATFORM_{FREE,CALLOC}_MACROs will provide - * "mbedtls_platform_set_calloc_free()" allowing you to set an alternative calloc() and - * free() function pointer at runtime. - * - * Enabling MBEDTLS_PLATFORM_MEMORY and specifying - * MBEDTLS_PLATFORM_{CALLOC,FREE}_MACROs will allow you to specify the - * alternate function at compile time. - * - * Requires: MBEDTLS_PLATFORM_C - * - * Enable this layer to allow use of alternative memory allocators. - */ -//#define MBEDTLS_PLATFORM_MEMORY - -/** - * \def MBEDTLS_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. calloc() to - * MBEDTLS_PLATFORM_STD_CALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the MBEDTLS_PLATFORM_STD_XXX defines, or enabling a - * MBEDTLS_PLATFORM_XXX_MACRO. - * - * Requires: MBEDTLS_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -//#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def MBEDTLS_PLATFORM_EXIT_ALT - * - * MBEDTLS_PLATFORM_XXX_ALT: Uncomment a macro to let mbed TLS support the - * function in the platform abstraction layer. - * - * Example: In case you uncomment MBEDTLS_PLATFORM_PRINTF_ALT, mbed TLS will - * provide a function "mbedtls_platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require MBEDTLS_PLATFORM_C to be defined! - * - * \note MBEDTLS_PLATFORM_SNPRINTF_ALT is required on Windows; - * it will be enabled automatically by check_config.h - * - * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as - * MBEDTLS_PLATFORM_XXX_MACRO! - * - * Requires: MBEDTLS_PLATFORM_TIME_ALT requires MBEDTLS_HAVE_TIME - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define MBEDTLS_PLATFORM_EXIT_ALT -//#define MBEDTLS_PLATFORM_TIME_ALT -//#define MBEDTLS_PLATFORM_FPRINTF_ALT -//#define MBEDTLS_PLATFORM_PRINTF_ALT -//#define MBEDTLS_PLATFORM_SNPRINTF_ALT -//#define MBEDTLS_PLATFORM_VSNPRINTF_ALT -//#define MBEDTLS_PLATFORM_NV_SEED_ALT -//#define MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT - -/** - * \def MBEDTLS_DEPRECATED_WARNING - * - * Mark deprecated functions so that they generate a warning if used. - * Functions deprecated in one version will usually be removed in the next - * version. You can enable this to help you prepare the transition to a new - * major version by making sure your code is not using these functions. - * - * This only works with GCC and Clang. With other compilers, you may want to - * use MBEDTLS_DEPRECATED_REMOVED - * - * Uncomment to get warnings on using deprecated functions. - */ -//#define MBEDTLS_DEPRECATED_WARNING - -/** - * \def MBEDTLS_DEPRECATED_REMOVED - * - * Remove deprecated functions so that they generate an error if used. - * Functions deprecated in one version will usually be removed in the next - * version. You can enable this to help you prepare the transition to a new - * major version by making sure your code is not using these functions. - * - * Uncomment to get errors on using deprecated functions. - */ -//#define MBEDTLS_DEPRECATED_REMOVED - -/** - * \def MBEDTLS_CHECK_PARAMS - * - * This configuration option controls whether the library validates more of - * the parameters passed to it. - * - * When this flag is not defined, the library only attempts to validate an - * input parameter if: (1) they may come from the outside world (such as the - * network, the filesystem, etc.) or (2) not validating them could result in - * internal memory errors such as overflowing a buffer controlled by the - * library. On the other hand, it doesn't attempt to validate parameters whose - * values are fully controlled by the application (such as pointers). - * - * When this flag is defined, the library additionally attempts to validate - * parameters that are fully controlled by the application, and should always - * be valid if the application code is fully correct and trusted. - * - * For example, when a function accepts as input a pointer to a buffer that may - * contain untrusted data, and its documentation mentions that this pointer - * must not be NULL: - * - The pointer is checked to be non-NULL only if this option is enabled. - * - The content of the buffer is always validated. - * - * When this flag is defined, if a library function receives a parameter that - * is invalid: - * 1. The function will invoke the macro MBEDTLS_PARAM_FAILED(). - * 2. If MBEDTLS_PARAM_FAILED() did not terminate the program, the function - * will immediately return. If the function returns an Mbed TLS error code, - * the error code in this case is MBEDTLS_ERR_xxx_BAD_INPUT_DATA. - * - * When defining this flag, you also need to arrange a definition for - * MBEDTLS_PARAM_FAILED(). You can do this by any of the following methods: - * - By default, the library defines MBEDTLS_PARAM_FAILED() to call a - * function mbedtls_param_failed(), but the library does not define this - * function. If you do not make any other arrangements, you must provide - * the function mbedtls_param_failed() in your application. - * See `platform_util.h` for its prototype. - * - If you enable the macro #MBEDTLS_CHECK_PARAMS_ASSERT, then the - * library defines MBEDTLS_PARAM_FAILED(\c cond) to be `assert(cond)`. - * You can still supply an alternative definition of - * MBEDTLS_PARAM_FAILED(), which may call `assert`. - * - If you define a macro MBEDTLS_PARAM_FAILED() before including `config.h` - * or you uncomment the definition of MBEDTLS_PARAM_FAILED() in `config.h`, - * the library will call the macro that you defined and will not supply - * its own version. Note that if MBEDTLS_PARAM_FAILED() calls `assert`, - * you need to enable #MBEDTLS_CHECK_PARAMS_ASSERT so that library source - * files include ``. - * - * Uncomment to enable validation of application-controlled parameters. - */ -//#define MBEDTLS_CHECK_PARAMS - -/** - * \def MBEDTLS_CHECK_PARAMS_ASSERT - * - * Allow MBEDTLS_PARAM_FAILED() to call `assert`, and make it default to - * `assert`. This macro is only used if #MBEDTLS_CHECK_PARAMS is defined. - * - * If this macro is not defined, then MBEDTLS_PARAM_FAILED() defaults to - * calling a function mbedtls_param_failed(). See the documentation of - * #MBEDTLS_CHECK_PARAMS for details. - * - * Uncomment to allow MBEDTLS_PARAM_FAILED() to call `assert`. - */ -//#define MBEDTLS_CHECK_PARAMS_ASSERT - -/* \} name SECTION: System support */ - -/** - * \name SECTION: mbed TLS feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def MBEDTLS_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for mbedtls_timing_hardclock(), - * mbedtls_timing_get_timer(), mbedtls_set_alarm(), mbedtls_set/get_delay() - * - * Only works if you have MBEDTLS_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define MBEDTLS_TIMING_ALT - -/** - * \def MBEDTLS_AES_ALT - * - * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternate core implementation of a symmetric crypto, an arithmetic or hash - * module (e.g. platform specific assembly optimized implementations). Keep - * in mind that the function prototypes should remain the same. - * - * This replaces the whole module. If you only want to replace one of the - * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. - * - * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer - * provide the "struct mbedtls_aes_context" definition and omit the base - * function declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * module. - * - * \warning MD2, MD4, MD5, ARC4, DES and SHA-1 are considered weak and their - * use constitutes a security risk. If possible, we recommend - * avoiding dependencies on them, and considering stronger message - * digests and ciphers instead. - * - */ -//#define MBEDTLS_AES_ALT -//#define MBEDTLS_ARC4_ALT -//#define MBEDTLS_ARIA_ALT -//#define MBEDTLS_BLOWFISH_ALT -//#define MBEDTLS_CAMELLIA_ALT -//#define MBEDTLS_CCM_ALT -//#define MBEDTLS_CHACHA20_ALT -//#define MBEDTLS_CHACHAPOLY_ALT -//#define MBEDTLS_CMAC_ALT -//#define MBEDTLS_DES_ALT -//#define MBEDTLS_DHM_ALT -//#define MBEDTLS_ECJPAKE_ALT -//#define MBEDTLS_GCM_ALT -//#define MBEDTLS_NIST_KW_ALT -//#define MBEDTLS_MD2_ALT -//#define MBEDTLS_MD4_ALT -//#define MBEDTLS_MD5_ALT -//#define MBEDTLS_POLY1305_ALT -//#define MBEDTLS_RIPEMD160_ALT -//#define MBEDTLS_RSA_ALT -//#define MBEDTLS_SHA1_ALT -//#define MBEDTLS_SHA256_ALT -//#define MBEDTLS_SHA512_ALT -//#define MBEDTLS_XTEA_ALT - -/* - * When replacing the elliptic curve module, pleace consider, that it is - * implemented with two .c files: - * - ecp.c - * - ecp_curves.c - * You can replace them very much like all the other MBEDTLS__MODULE_NAME__ALT - * macros as described above. The only difference is that you have to make sure - * that you provide functionality for both .c files. - */ -//#define MBEDTLS_ECP_ALT - -/** - * \def MBEDTLS_MD2_PROCESS_ALT - * - * MBEDTLS__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use you - * alternate core implementation of symmetric crypto or hash function. Keep in - * mind that function prototypes should remain the same. - * - * This replaces only one function. The header file from mbed TLS is still - * used, in contrast to the MBEDTLS__MODULE_NAME__ALT flags. - * - * Example: In case you uncomment MBEDTLS_SHA256_PROCESS_ALT, mbed TLS will - * no longer provide the mbedtls_sha1_process() function, but it will still provide - * the other function (using your mbedtls_sha1_process() function) and the definition - * of mbedtls_sha1_context, so your implementation of mbedtls_sha1_process must be compatible - * with this definition. - * - * \note Because of a signature change, the core AES encryption and decryption routines are - * currently named mbedtls_aes_internal_encrypt and mbedtls_aes_internal_decrypt, - * respectively. When setting up alternative implementations, these functions should - * be overridden, but the wrapper functions mbedtls_aes_decrypt and mbedtls_aes_encrypt - * must stay untouched. - * - * \note If you use the AES_xxx_ALT macros, then is is recommended to also set - * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES - * tables. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * function. - * - * \warning MD2, MD4, MD5, DES and SHA-1 are considered weak and their use - * constitutes a security risk. If possible, we recommend avoiding - * dependencies on them, and considering stronger message digests - * and ciphers instead. - * - */ -//#define MBEDTLS_MD2_PROCESS_ALT -//#define MBEDTLS_MD4_PROCESS_ALT -//#define MBEDTLS_MD5_PROCESS_ALT -//#define MBEDTLS_RIPEMD160_PROCESS_ALT -//#define MBEDTLS_SHA1_PROCESS_ALT -//#define MBEDTLS_SHA256_PROCESS_ALT -//#define MBEDTLS_SHA512_PROCESS_ALT -//#define MBEDTLS_DES_SETKEY_ALT -//#define MBEDTLS_DES_CRYPT_ECB_ALT -//#define MBEDTLS_DES3_CRYPT_ECB_ALT -//#define MBEDTLS_AES_SETKEY_ENC_ALT -//#define MBEDTLS_AES_SETKEY_DEC_ALT -//#define MBEDTLS_AES_ENCRYPT_ALT -//#define MBEDTLS_AES_DECRYPT_ALT -//#define MBEDTLS_ECDH_GEN_PUBLIC_ALT -//#define MBEDTLS_ECDH_COMPUTE_SHARED_ALT -//#define MBEDTLS_ECDSA_VERIFY_ALT -//#define MBEDTLS_ECDSA_SIGN_ALT -//#define MBEDTLS_ECDSA_GENKEY_ALT - -/** - * \def MBEDTLS_ECP_INTERNAL_ALT - * - * Expose a part of the internal interface of the Elliptic Curve Point module. - * - * MBEDTLS_ECP__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternative core implementation of elliptic curve arithmetic. Keep in mind - * that function prototypes should remain the same. - * - * This partially replaces one function. The header file from mbed TLS is still - * used, in contrast to the MBEDTLS_ECP_ALT flag. The original implementation - * is still present and it is used for group structures not supported by the - * alternative. - * - * Any of these options become available by defining MBEDTLS_ECP_INTERNAL_ALT - * and implementing the following functions: - * unsigned char mbedtls_internal_ecp_grp_capable( - * const mbedtls_ecp_group *grp ) - * int mbedtls_internal_ecp_init( const mbedtls_ecp_group *grp ) - * void mbedtls_internal_ecp_free( const mbedtls_ecp_group *grp ) - * The mbedtls_internal_ecp_grp_capable function should return 1 if the - * replacement functions implement arithmetic for the given group and 0 - * otherwise. - * The functions mbedtls_internal_ecp_init and mbedtls_internal_ecp_free are - * called before and after each point operation and provide an opportunity to - * implement optimized set up and tear down instructions. - * - * Example: In case you uncomment MBEDTLS_ECP_INTERNAL_ALT and - * MBEDTLS_ECP_DOUBLE_JAC_ALT, mbed TLS will still provide the ecp_double_jac - * function, but will use your mbedtls_internal_ecp_double_jac if the group is - * supported (your mbedtls_internal_ecp_grp_capable function returns 1 when - * receives it as an argument). If the group is not supported then the original - * implementation is used. The other functions and the definition of - * mbedtls_ecp_group and mbedtls_ecp_point will not change, so your - * implementation of mbedtls_internal_ecp_double_jac and - * mbedtls_internal_ecp_grp_capable must be compatible with this definition. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * function. - */ -/* Required for all the functions in this section */ -//#define MBEDTLS_ECP_INTERNAL_ALT -/* Support for Weierstrass curves with Jacobi representation */ -//#define MBEDTLS_ECP_RANDOMIZE_JAC_ALT -//#define MBEDTLS_ECP_ADD_MIXED_ALT -//#define MBEDTLS_ECP_DOUBLE_JAC_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_ALT -/* Support for curves with Montgomery arithmetic */ -//#define MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT -//#define MBEDTLS_ECP_RANDOMIZE_MXZ_ALT -//#define MBEDTLS_ECP_NORMALIZE_MXZ_ALT - -/** - * \def MBEDTLS_TEST_NULL_ENTROPY - * - * Enables testing and use of mbed TLS without any configured entropy sources. - * This permits use of the library on platforms before an entropy source has - * been integrated (see for example the MBEDTLS_ENTROPY_HARDWARE_ALT or the - * MBEDTLS_ENTROPY_NV_SEED switches). - * - * WARNING! This switch MUST be disabled in production builds, and is suitable - * only for development. - * Enabling the switch negates any security provided by the library. - * - * Requires MBEDTLS_ENTROPY_C, MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - * - */ -//#define MBEDTLS_TEST_NULL_ENTROPY - -/** - * \def MBEDTLS_ENTROPY_HARDWARE_ALT - * - * Uncomment this macro to let mbed TLS use your own implementation of a - * hardware entropy collector. - * - * Your function must be called \c mbedtls_hardware_poll(), have the same - * prototype as declared in entropy_poll.h, and accept NULL as first argument. - * - * Uncomment to use your own hardware entropy collector. - */ -//#define MBEDTLS_ENTROPY_HARDWARE_ALT - -/** - * \def MBEDTLS_AES_ROM_TABLES - * - * Use precomputed AES tables stored in ROM. - * - * Uncomment this macro to use precomputed AES tables stored in ROM. - * Comment this macro to generate AES tables in RAM at runtime. - * - * Tradeoff: Using precomputed ROM tables reduces RAM usage by ~8kb - * (or ~2kb if \c MBEDTLS_AES_FEWER_TABLES is used) and reduces the - * initialization time before the first AES operation can be performed. - * It comes at the cost of additional ~8kb ROM use (resp. ~2kb if \c - * MBEDTLS_AES_FEWER_TABLES below is used), and potentially degraded - * performance if ROM access is slower than RAM access. - * - * This option is independent of \c MBEDTLS_AES_FEWER_TABLES. - * - */ -//#define MBEDTLS_AES_ROM_TABLES - -/** - * \def MBEDTLS_AES_FEWER_TABLES - * - * Use less ROM/RAM for AES tables. - * - * Uncommenting this macro omits 75% of the AES tables from - * ROM / RAM (depending on the value of \c MBEDTLS_AES_ROM_TABLES) - * by computing their values on the fly during operations - * (the tables are entry-wise rotations of one another). - * - * Tradeoff: Uncommenting this reduces the RAM / ROM footprint - * by ~6kb but at the cost of more arithmetic operations during - * runtime. Specifically, one has to compare 4 accesses within - * different tables to 4 accesses with additional arithmetic - * operations within the same table. The performance gain/loss - * depends on the system and memory details. - * - * This option is independent of \c MBEDTLS_AES_ROM_TABLES. - * - */ -//#define MBEDTLS_AES_FEWER_TABLES - -/** - * \def MBEDTLS_CAMELLIA_SMALL_MEMORY - * - * Use less ROM for the Camellia implementation (saves about 768 bytes). - * - * Uncomment this macro to use less memory for Camellia. - */ -//#define MBEDTLS_CAMELLIA_SMALL_MEMORY - -/** - * \def MBEDTLS_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define MBEDTLS_CIPHER_MODE_CBC - -/** - * \def MBEDTLS_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -#define MBEDTLS_CIPHER_MODE_CFB - -/** - * \def MBEDTLS_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -#define MBEDTLS_CIPHER_MODE_CTR - -/** - * \def MBEDTLS_CIPHER_MODE_OFB - * - * Enable Output Feedback mode (OFB) for symmetric ciphers. - */ -#define MBEDTLS_CIPHER_MODE_OFB - -/** - * \def MBEDTLS_CIPHER_MODE_XTS - * - * Enable Xor-encrypt-xor with ciphertext stealing mode (XTS) for AES. - */ -#define MBEDTLS_CIPHER_MODE_XTS - -/** - * \def MBEDTLS_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires MBEDTLS_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_RSA_WITH_NULL_SHA256 - * MBEDTLS_TLS_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_RSA_WITH_NULL_MD5 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define MBEDTLS_CIPHER_NULL_CIPHER - -/** - * \def MBEDTLS_CIPHER_PADDING_PKCS7 - * - * MBEDTLS_CIPHER_PADDING_XXX: Uncomment or comment macros to add support for - * specific padding modes in the cipher layer with cipher modes that support - * padding (e.g. CBC) - * - * If you disable all padding modes, only full blocks can be used with CBC. - * - * Enable padding modes in the cipher layer. - */ -#define MBEDTLS_CIPHER_PADDING_PKCS7 -#define MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS -#define MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN -#define MBEDTLS_CIPHER_PADDING_ZEROS - -/** - * \def MBEDTLS_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - * - * \warning DES is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - */ -//#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES - -/** - * \def MBEDTLS_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES - -/** - * \def MBEDTLS_REMOVE_3DES_CIPHERSUITES - * - * Remove 3DES ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on 3DES from the default list as - * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible - * to enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including - * them explicitly. - * - * A man-in-the-browser attacker can recover authentication tokens sent through - * a TLS connection using a 3DES based cipher suite (see "On the Practical - * (In-)Security of 64-bit Block Ciphers" by Karthikeyan Bhargavan and Gaëtan - * Leurent, see https://sweet32.info/SWEET32_CCS16.pdf). If this attack falls - * in your threat model or you are unsure, then you should keep this option - * enabled to remove 3DES based cipher suites. - * - * Comment this macro to keep 3DES in the default ciphersuite list. - */ -#define MBEDTLS_REMOVE_3DES_CIPHERSUITES - -/** - * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED - * - * MBEDTLS_ECP_XXXX_ENABLED: Enables specific curves within the Elliptic Curve - * module. By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -// #define MBEDTLS_ECP_DP_SECP192R1_ENABLED -#define MBEDTLS_ECP_DP_SECP224R1_ENABLED -#define MBEDTLS_ECP_DP_SECP256R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP384R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP521R1_ENABLED -// #define MBEDTLS_ECP_DP_SECP192K1_ENABLED -// #define MBEDTLS_ECP_DP_SECP224K1_ENABLED -// #define MBEDTLS_ECP_DP_SECP256K1_ENABLED -// #define MBEDTLS_ECP_DP_BP256R1_ENABLED -// #define MBEDTLS_ECP_DP_BP384R1_ENABLED -// #define MBEDTLS_ECP_DP_BP512R1_ENABLED -// #define MBEDTLS_ECP_DP_CURVE25519_ENABLED -// #define MBEDTLS_ECP_DP_CURVE448_ENABLED - -/** - * \def MBEDTLS_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define MBEDTLS_ECP_NIST_OPTIM - -/** - * \def MBEDTLS_ECP_RESTARTABLE - * - * Enable "non-blocking" ECC operations that can return early and be resumed. - * - * This allows various functions to pause by returning - * #MBEDTLS_ERR_ECP_IN_PROGRESS (or, for functions in the SSL module, - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) and then be called later again in - * order to further progress and eventually complete their operation. This is - * controlled through mbedtls_ecp_set_max_ops() which limits the maximum - * number of ECC operations a function may perform before pausing; see - * mbedtls_ecp_set_max_ops() for more information. - * - * This is useful in non-threaded environments if you want to avoid blocking - * for too long on ECC (and, hence, X.509 or SSL/TLS) operations. - * - * Uncomment this macro to enable restartable ECC computations. - * - * \note This option only works with the default software implementation of - * elliptic curve functionality. It is incompatible with - * MBEDTLS_ECP_ALT, MBEDTLS_ECDH_XXX_ALT, MBEDTLS_ECDSA_XXX_ALT - * and MBEDTLS_ECDH_LEGACY_CONTEXT. - */ -//#define MBEDTLS_ECP_RESTARTABLE - -/** - * \def MBEDTLS_ECDH_LEGACY_CONTEXT - * - * Use a backward compatible ECDH context. - * - * Mbed TLS supports two formats for ECDH contexts (#mbedtls_ecdh_context - * defined in `ecdh.h`). For most applications, the choice of format makes - * no difference, since all library functions can work with either format, - * except that the new format is incompatible with MBEDTLS_ECP_RESTARTABLE. - - * The new format used when this option is disabled is smaller - * (56 bytes on a 32-bit platform). In future versions of the library, it - * will support alternative implementations of ECDH operations. - * The new format is incompatible with applications that access - * context fields directly and with restartable ECP operations. - * - * Define this macro if you enable MBEDTLS_ECP_RESTARTABLE or if you - * want to access ECDH context fields directly. Otherwise you should - * comment out this macro definition. - * - * This option has no effect if #MBEDTLS_ECDH_C is not enabled. - * - * \note This configuration option is experimental. Future versions of the - * library may modify the way the ECDH context layout is configured - * and may modify the layout of the new context type. - */ -#define MBEDTLS_ECDH_LEGACY_CONTEXT - -/** - * \def MBEDTLS_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: MBEDTLS_HMAC_DRBG_C - * - * Comment this macro to disable deterministic ECDSA. - */ -#define MBEDTLS_ECDSA_DETERMINISTIC - -/** - * \def MBEDTLS_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 - */ -#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_DHM_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C, MBEDTLS_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED - * - * Enable the ECJPAKE based ciphersuite modes in SSL / TLS. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Requires: MBEDTLS_ECJPAKE_C - * MBEDTLS_SHA256_C - * MBEDTLS_ECP_DP_SECP256R1_ENABLED - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 - */ -//#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED - -/** - * \def MBEDTLS_PK_PARSE_EC_EXTENDED - * - * Enhance support for reading EC keys using variants of SEC1 not allowed by - * RFC 5915 and RFC 5480. - * - * Currently this means parsing the SpecifiedECDomain choice of EC - * parameters (only known groups are supported, not arbitrary domains, to - * avoid validation issues). - * - * Disable if you only need to support RFC 5915 + 5480 key formats. - */ -#define MBEDTLS_PK_PARSE_EC_EXTENDED - -/** - * \def MBEDTLS_ERROR_STRERROR_DUMMY - * - * Enable a dummy error function to make use of mbedtls_strerror() in - * third party libraries easier when MBEDTLS_ERROR_C is disabled - * (no effect when MBEDTLS_ERROR_C is enabled). - * - * You can safely disable this if MBEDTLS_ERROR_C is enabled, or if you're - * not using mbedtls_strerror() or error_strerror() in your application. - * - * Disable if you run into name conflicts and want to really remove the - * mbedtls_strerror() - */ -// #define MBEDTLS_ERROR_STRERROR_DUMMY - -/** - * \def MBEDTLS_GENPRIME - * - * Enable the prime-number generation code. - * - * Requires: MBEDTLS_BIGNUM_C - */ -#define MBEDTLS_GENPRIME - -/** - * \def MBEDTLS_FS_IO - * - * Enable functions that use the filesystem. - */ -// #define MBEDTLS_FS_IO - -/** - * \def MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * mbedtls_timing_hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def MBEDTLS_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -#define MBEDTLS_NO_PLATFORM_ENTROPY - -/** - * \def MBEDTLS_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: MBEDTLS_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both MBEDTLS_SHA256_C and - * MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define MBEDTLS_ENTROPY_FORCE_SHA256 - -/** - * \def MBEDTLS_ENTROPY_NV_SEED - * - * Enable the non-volatile (NV) seed file-based entropy source. - * (Also enables the NV seed read/write functions in the platform layer) - * - * This is crucial (if not required) on systems that do not have a - * cryptographic entropy source (in hardware or kernel) available. - * - * Requires: MBEDTLS_ENTROPY_C, MBEDTLS_PLATFORM_C - * - * \note The read/write functions that are used by the entropy source are - * determined in the platform layer, and can be modified at runtime and/or - * compile-time depending on the flags (MBEDTLS_PLATFORM_NV_SEED_*) used. - * - * \note If you use the default implementation functions that read a seedfile - * with regular fopen(), please make sure you make a seedfile with the - * proper name (defined in MBEDTLS_PLATFORM_STD_NV_SEED_FILE) and at - * least MBEDTLS_ENTROPY_BLOCK_SIZE bytes in size that can be read from - * and written to or you will get an entropy source error! The default - * implementation will only use the first MBEDTLS_ENTROPY_BLOCK_SIZE - * bytes from the file. - * - * \note The entropy collector will write to the seed file before entropy is - * given to an external source, to update it. - */ -//#define MBEDTLS_ENTROPY_NV_SEED - -/** - * \def MBEDTLS_MEMORY_DEBUG - * - * Enable debugging of buffer allocator memory issues. Automatically prints - * (to stderr) all (fatal) messages on memory allocation issues. Enables - * function for 'debug output' of allocated memory. - * - * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C - * - * Uncomment this macro to let the buffer allocator print out error messages. - */ -//#define MBEDTLS_MEMORY_DEBUG - -/** - * \def MBEDTLS_MEMORY_BACKTRACE - * - * Include backtrace information with each allocated block. - * - * Requires: MBEDTLS_MEMORY_BUFFER_ALLOC_C - * GLIBC-compatible backtrace() an backtrace_symbols() support - * - * Uncomment this macro to include backtrace information - */ -//#define MBEDTLS_MEMORY_BACKTRACE - -/** - * \def MBEDTLS_PK_RSA_ALT_SUPPORT - * - * Support external private RSA keys (eg from a HSM) in the PK layer. - * - * Comment this macro to disable support for external private RSA keys. - */ -// #define MBEDTLS_PK_RSA_ALT_SUPPORT - -/** - * \def MBEDTLS_PKCS1_V15 - * - * Enable support for PKCS#1 v1.5 encoding. - * - * Requires: MBEDTLS_RSA_C - * - * This enables support for PKCS#1 v1.5 operations. - */ -#define MBEDTLS_PKCS1_V15 - -/** - * \def MBEDTLS_PKCS1_V21 - * - * Enable support for PKCS#1 v2.1 encoding. - * - * Requires: MBEDTLS_MD_C, MBEDTLS_RSA_C - * - * This enables support for RSAES-OAEP and RSASSA-PSS operations. - */ -#define MBEDTLS_PKCS1_V21 - -/** - * \def MBEDTLS_PSA_CRYPTO_SPM - * - * When MBEDTLS_PSA_CRYPTO_SPM is defined, the code is built for SPM (Secure - * Partition Manager) integration which separates the code into two parts: a - * NSPE (Non-Secure Process Environment) and an SPE (Secure Process - * Environment). - * - * Module: library/psa_crypto.c - * Requires: MBEDTLS_PSA_CRYPTO_C - * - */ -//#define MBEDTLS_PSA_CRYPTO_SPM - -/** - * \def MBEDTLS_PSA_INJECT_ENTROPY - * - * Enable support for entropy injection at first boot. This feature is - * required on systems that do not have a built-in entropy source (TRNG). - * This feature is currently not supported on systems that have a built-in - * entropy source. - * - * Requires: MBEDTLS_PSA_CRYPTO_STORAGE_C, MBEDTLS_ENTROPY_NV_SEED - * - */ -//#define MBEDTLS_PSA_INJECT_ENTROPY - -/** - * \def MBEDTLS_RSA_NO_CRT - * - * Do not use the Chinese Remainder Theorem - * for the RSA private operation. - * - * Uncomment this macro to disable the use of CRT in RSA. - * - */ -//#define MBEDTLS_RSA_NO_CRT - -/** - * \def MBEDTLS_SELF_TEST - * - * Enable the checkup functions (*_self_test). - */ -#define MBEDTLS_SELF_TEST - -/** - * \def MBEDTLS_SHA256_SMALLER - * - * Enable an implementation of SHA-256 that has lower ROM footprint but also - * lower performance. - * - * The default implementation is meant to be a reasonnable compromise between - * performance and size. This version optimizes more aggressively for size at - * the expense of performance. Eg on Cortex-M4 it reduces the size of - * mbedtls_sha256_process() from ~2KB to ~0.5KB for a performance hit of about - * 30%. - * - * Uncomment to enable the smaller implementation of SHA256. - */ -//#define MBEDTLS_SHA256_SMALLER - -/** - * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES - * - * Enable sending of alert messages in case of encountered errors as per RFC. - * If you choose not to send the alert messages, mbed TLS can still communicate - * with other servers, only debugging of failures is harder. - * - * The advantage of not sending alert messages, is that no information is given - * about reasons for failures thus preventing adversaries of gaining intel. - * - * Enable sending of all alert messages - */ -#define MBEDTLS_SSL_ALL_ALERT_MESSAGES - -/** - * \def MBEDTLS_SSL_RECORD_CHECKING - * - * Enable the function mbedtls_ssl_check_record() which can be used to check - * the validity and authenticity of an incoming record, to verify that it has - * not been seen before. These checks are performed without modifying the - * externally visible state of the SSL context. - * - * See mbedtls_ssl_check_record() for more information. - * - * Uncomment to enable support for record checking. - */ -#define MBEDTLS_SSL_RECORD_CHECKING - -/** - * \def MBEDTLS_SSL_DTLS_CONNECTION_ID - * - * Enable support for the DTLS Connection ID extension - * (version draft-ietf-tls-dtls-connection-id-05, - * https://tools.ietf.org/html/draft-ietf-tls-dtls-connection-id-05) - * which allows to identify DTLS connections across changes - * in the underlying transport. - * - * Setting this option enables the SSL APIs `mbedtls_ssl_set_cid()`, - * `mbedtls_ssl_get_peer_cid()` and `mbedtls_ssl_conf_cid()`. - * See the corresponding documentation for more information. - * - * \warning The Connection ID extension is still in draft state. - * We make no stability promises for the availability - * or the shape of the API controlled by this option. - * - * The maximum lengths of outgoing and incoming CIDs can be configured - * through the options - * - MBEDTLS_SSL_CID_OUT_LEN_MAX - * - MBEDTLS_SSL_CID_IN_LEN_MAX. - * - * Requires: MBEDTLS_SSL_PROTO_DTLS - * - * Uncomment to enable the Connection ID extension. - */ -//#define MBEDTLS_SSL_DTLS_CONNECTION_ID - -/** - * \def MBEDTLS_SSL_ASYNC_PRIVATE - * - * Enable asynchronous external private key operations in SSL. This allows - * you to configure an SSL connection to call an external cryptographic - * module to perform private key operations instead of performing the - * operation inside the library. - * - */ -//#define MBEDTLS_SSL_ASYNC_PRIVATE - -/** - * \def MBEDTLS_SSL_CONTEXT_SERIALIZATION - * - * Enable serialization of the TLS context structures, through use of the - * functions mbedtls_ssl_context_save() and mbedtls_ssl_context_load(). - * - * This pair of functions allows one side of a connection to serialize the - * context associated with the connection, then free or re-use that context - * while the serialized state is persisted elsewhere, and finally deserialize - * that state to a live context for resuming read/write operations on the - * connection. From a protocol perspective, the state of the connection is - * unaffected, in particular this is entirely transparent to the peer. - * - * Note: this is distinct from TLS session resumption, which is part of the - * protocol and fully visible by the peer. TLS session resumption enables - * establishing new connections associated to a saved session with shorter, - * lighter handshakes, while context serialization is a local optimization in - * handling a single, potentially long-lived connection. - * - * Enabling these APIs makes some SSL structures larger, as 64 extra bytes are - * saved after the handshake to allow for more efficient serialization, so if - * you don't need this feature you'll save RAM by disabling it. - * - * Comment to disable the context serialization APIs. - */ -#define MBEDTLS_SSL_CONTEXT_SERIALIZATION - -/** - * \def MBEDTLS_SSL_DEBUG_ALL - * - * Enable the debug messages in SSL module for all issues. - * Debug messages have been disabled in some places to prevent timing - * attacks due to (unbalanced) debugging function calls. - * - * If you need all error reporting you should enable this during debugging, - * but remove this for production servers that should log as well. - * - * Uncomment this macro to report all debug messages on errors introducing - * a timing side-channel. - * - */ -//#define MBEDTLS_SSL_DEBUG_ALL - -/** \def MBEDTLS_SSL_ENCRYPT_THEN_MAC - * - * Enable support for Encrypt-then-MAC, RFC 7366. - * - * This allows peers that both support it to use a more robust protection for - * ciphersuites using CBC, providing deep resistance against timing attacks - * on the padding or underlying cipher. - * - * This only affects CBC ciphersuites, and is useless if none is defined. - * - * Requires: MBEDTLS_SSL_PROTO_TLS1 or - * MBEDTLS_SSL_PROTO_TLS1_1 or - * MBEDTLS_SSL_PROTO_TLS1_2 - * - * Comment this macro to disable support for Encrypt-then-MAC - */ -#define MBEDTLS_SSL_ENCRYPT_THEN_MAC - -/** \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET - * - * Enable support for Extended Master Secret, aka Session Hash - * (draft-ietf-tls-session-hash-02). - * - * This was introduced as "the proper fix" to the Triple Handshake familiy of - * attacks, but it is recommended to always use it (even if you disable - * renegotiation), since it actually fixes a more fundamental issue in the - * original SSL/TLS design, and has implications beyond Triple Handshake. - * - * Requires: MBEDTLS_SSL_PROTO_TLS1 or - * MBEDTLS_SSL_PROTO_TLS1_1 or - * MBEDTLS_SSL_PROTO_TLS1_2 - * - * Comment this macro to disable support for Extended Master Secret. - */ -#define MBEDTLS_SSL_EXTENDED_MASTER_SECRET - -/** - * \def MBEDTLS_SSL_FALLBACK_SCSV - * - * Enable support for FALLBACK_SCSV (draft-ietf-tls-downgrade-scsv-00). - * - * For servers, it is recommended to always enable this, unless you support - * only one version of TLS, or know for sure that none of your clients - * implements a fallback strategy. - * - * For clients, you only need this if you're using a fallback strategy, which - * is not recommended in the first place, unless you absolutely need it to - * interoperate with buggy (version-intolerant) servers. - * - * Comment this macro to disable support for FALLBACK_SCSV - */ -#define MBEDTLS_SSL_FALLBACK_SCSV - -/** - * \def MBEDTLS_SSL_KEEP_PEER_CERTIFICATE - * - * This option controls the availability of the API mbedtls_ssl_get_peer_cert() - * giving access to the peer's certificate after completion of the handshake. - * - * Unless you need mbedtls_ssl_peer_cert() in your application, it is - * recommended to disable this option for reduced RAM usage. - * - * \note If this option is disabled, mbedtls_ssl_get_peer_cert() is still - * defined, but always returns \c NULL. - * - * \note This option has no influence on the protection against the - * triple handshake attack. Even if it is disabled, Mbed TLS will - * still ensure that certificates do not change during renegotiation, - * for exaple by keeping a hash of the peer's certificate. - * - * Comment this macro to disable storing the peer's certificate - * after the handshake. - */ -#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE - -/** - * \def MBEDTLS_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * Uncomment this macro to enable hooking functions. - */ -//#define MBEDTLS_SSL_HW_RECORD_ACCEL - -/** - * \def MBEDTLS_SSL_CBC_RECORD_SPLITTING - * - * Enable 1/n-1 record splitting for CBC mode in SSLv3 and TLS 1.0. - * - * This is a countermeasure to the BEAST attack, which also minimizes the risk - * of interoperability issues compared to sending 0-length records. - * - * Comment this macro to disable 1/n-1 record splitting. - */ -#define MBEDTLS_SSL_CBC_RECORD_SPLITTING - -/** - * \def MBEDTLS_SSL_RENEGOTIATION - * - * Enable support for TLS renegotiation. - * - * The two main uses of renegotiation are (1) refresh keys on long-lived - * connections and (2) client authentication after the initial handshake. - * If you don't need renegotiation, it's probably better to disable it, since - * it has been associated with security issues in the past and is easy to - * misuse/misunderstand. - * - * Comment this to disable support for renegotiation. - * - * \note Even if this option is disabled, both client and server are aware - * of the Renegotiation Indication Extension (RFC 5746) used to - * prevent the SSL renegotiation attack (see RFC 5746 Sect. 1). - * (See \c mbedtls_ssl_conf_legacy_renegotiation for the - * configuration of this extension). - * - */ -#define MBEDTLS_SSL_RENEGOTIATION - -/** - * \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (MBEDTLS_SSL_SRV_C). - * - * Uncomment this macro to enable support for SSLv2 Client Hello messages. - */ -//#define MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - -/** - * \def MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE - * - * Pick the ciphersuite according to the client's preferences rather than ours - * in the SSL Server module (MBEDTLS_SSL_SRV_C). - * - * Uncomment this macro to respect client's ciphersuite order - */ -//#define MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE - -/** - * \def MBEDTLS_SSL_MAX_FRAGMENT_LENGTH - * - * Enable support for RFC 6066 max_fragment_length extension in SSL. - * - * Comment this macro to disable support for the max_fragment_length extension - */ -#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH - -/** - * \def MBEDTLS_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * Comment this macro to disable support for SSL 3.0 - */ -//#define MBEDTLS_SSL_PROTO_SSL3 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -#define MBEDTLS_SSL_PROTO_TLS1 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1 (and DTLS 1.0 if DTLS is enabled). - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 / DTLS 1.0 - */ -#define MBEDTLS_SSL_PROTO_TLS1_1 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2 (and DTLS 1.2 if DTLS is enabled). - * - * Requires: MBEDTLS_SHA1_C or MBEDTLS_SHA256_C or MBEDTLS_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 / DTLS 1.2 - */ -#define MBEDTLS_SSL_PROTO_TLS1_2 - -/** - * \def MBEDTLS_SSL_PROTO_DTLS - * - * Enable support for DTLS (all available versions). - * - * Enable this and MBEDTLS_SSL_PROTO_TLS1_1 to enable DTLS 1.0, - * and/or this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2. - * - * Requires: MBEDTLS_SSL_PROTO_TLS1_1 - * or MBEDTLS_SSL_PROTO_TLS1_2 - * - * Comment this macro to disable support for DTLS - */ -#define MBEDTLS_SSL_PROTO_DTLS - -/** - * \def MBEDTLS_SSL_ALPN - * - * Enable support for RFC 7301 Application Layer Protocol Negotiation. - * - * Comment this macro to disable support for ALPN. - */ -#define MBEDTLS_SSL_ALPN - -/** - * \def MBEDTLS_SSL_DTLS_ANTI_REPLAY - * - * Enable support for the anti-replay mechanism in DTLS. - * - * Requires: MBEDTLS_SSL_TLS_C - * MBEDTLS_SSL_PROTO_DTLS - * - * \warning Disabling this is often a security risk! - * See mbedtls_ssl_conf_dtls_anti_replay() for details. - * - * Comment this to disable anti-replay in DTLS. - */ -#define MBEDTLS_SSL_DTLS_ANTI_REPLAY - -/** - * \def MBEDTLS_SSL_DTLS_HELLO_VERIFY - * - * Enable support for HelloVerifyRequest on DTLS servers. - * - * This feature is highly recommended to prevent DTLS servers being used as - * amplifiers in DoS attacks against other hosts. It should always be enabled - * unless you know for sure amplification cannot be a problem in the - * environment in which your server operates. - * - * \warning Disabling this can ba a security risk! (see above) - * - * Requires: MBEDTLS_SSL_PROTO_DTLS - * - * Comment this to disable support for HelloVerifyRequest. - */ -#define MBEDTLS_SSL_DTLS_HELLO_VERIFY - -/** - * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE - * - * Enable server-side support for clients that reconnect from the same port. - * - * Some clients unexpectedly close the connection and try to reconnect using the - * same source port. This needs special support from the server to handle the - * new connection securely, as described in section 4.2.8 of RFC 6347. This - * flag enables that support. - * - * Requires: MBEDTLS_SSL_DTLS_HELLO_VERIFY - * - * Comment this to disable support for clients reusing the source port. - */ -#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE - -/** - * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT - * - * Enable support for a limit of records with bad MAC. - * - * See mbedtls_ssl_conf_dtls_badmac_limit(). - * - * Requires: MBEDTLS_SSL_PROTO_DTLS - */ -#define MBEDTLS_SSL_DTLS_BADMAC_LIMIT - -/** - * \def MBEDTLS_SSL_SESSION_TICKETS - * - * Enable support for RFC 5077 session tickets in SSL. - * Client-side, provides full support for session tickets (maintenance of a - * session store remains the responsibility of the application, though). - * Server-side, you also need to provide callbacks for writing and parsing - * tickets, including authenticated encryption and key management. Example - * callbacks are provided by MBEDTLS_SSL_TICKET_C. - * - * Comment this macro to disable support for SSL session tickets - */ -#define MBEDTLS_SSL_SESSION_TICKETS - -/** - * \def MBEDTLS_SSL_EXPORT_KEYS - * - * Enable support for exporting key block and master secret. - * This is required for certain users of TLS, e.g. EAP-TLS. - * - * Comment this macro to disable support for key export - */ -#define MBEDTLS_SSL_EXPORT_KEYS - -/** - * \def MBEDTLS_SSL_SERVER_NAME_INDICATION - * - * Enable support for RFC 6066 server name indication (SNI) in SSL. - * - * Requires: MBEDTLS_X509_CRT_PARSE_C - * - * Comment this macro to disable support for server name indication in SSL - */ -#define MBEDTLS_SSL_SERVER_NAME_INDICATION - -/** - * \def MBEDTLS_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define MBEDTLS_SSL_TRUNCATED_HMAC - -/** - * \def MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT - * - * Fallback to old (pre-2.7), non-conforming implementation of the truncated - * HMAC extension which also truncates the HMAC key. Note that this option is - * only meant for a transitory upgrade period and is likely to be removed in - * a future version of the library. - * - * \warning The old implementation is non-compliant and has a security weakness - * (2^80 brute force attack on the HMAC key used for a single, - * uninterrupted connection). This should only be enabled temporarily - * when (1) the use of truncated HMAC is essential in order to save - * bandwidth, and (2) the peer is an Mbed TLS stack that doesn't use - * the fixed implementation yet (pre-2.7). - * - * \deprecated This option is deprecated and will likely be removed in a - * future version of Mbed TLS. - * - * Uncomment to fallback to old, non-compliant truncated HMAC implementation. - * - * Requires: MBEDTLS_SSL_TRUNCATED_HMAC - */ -//#define MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT - -/** - * \def MBEDTLS_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: MBEDTLS_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define MBEDTLS_THREADING_ALT - -/** - * \def MBEDTLS_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: MBEDTLS_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define MBEDTLS_THREADING_PTHREAD - -/** - * \def MBEDTLS_USE_PSA_CRYPTO - * - * Make the X.509 and TLS library use PSA for cryptographic operations, and - * enable new APIs for using keys handled by PSA Crypto. - * - * \note Development of this option is currently in progress, and parts - * of the X.509 and TLS modules are not ported to PSA yet. However, these parts - * will still continue to work as usual, so enabling this option should not - * break backwards compatibility. - * - * \warning The PSA Crypto API is in beta stage. While you're welcome to - * experiment using it, incompatible API changes are still possible, and some - * parts may not have reached the same quality as the rest of Mbed TLS yet. - * - * \warning This option enables new Mbed TLS APIs that are dependent on the - * PSA Crypto API, so can't come with the same stability guarantees as the - * rest of the Mbed TLS APIs. You're welcome to experiment with them, but for - * now, access to these APIs is opt-in (via enabling the present option), in - * order to clearly differentiate them from the stable Mbed TLS APIs. - * - * Requires: MBEDTLS_PSA_CRYPTO_C. - * - * Uncomment this to enable internal use of PSA Crypto and new associated APIs. - */ -//#define MBEDTLS_USE_PSA_CRYPTO - -/** - * \def MBEDTLS_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via mbedtls_version_check_feature(). - * - * Requires: MBEDTLS_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -// #define MBEDTLS_VERSION_FEATURES - -/** - * \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * \warning Depending on your PKI use, enabling this can be a security risk! - * - * Uncomment to prevent an error. - */ -//#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - -/** - * \def MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK - * - * If set, this enables the X.509 API `mbedtls_x509_crt_verify_with_ca_cb()` - * and the SSL API `mbedtls_ssl_conf_ca_cb()` which allow users to configure - * the set of trusted certificates through a callback instead of a linked - * list. - * - * This is useful for example in environments where a large number of trusted - * certificates is present and storing them in a linked list isn't efficient - * enough, or when the set of trusted certificates changes frequently. - * - * See the documentation of `mbedtls_x509_crt_verify_with_ca_cb()` and - * `mbedtls_ssl_conf_ca_cb()` for more information. - * - * Uncomment to enable trusted certificate callbacks. - */ -//#define MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK - -/** - * \def MBEDTLS_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -#define MBEDTLS_X509_CHECK_KEY_USAGE - -/** - * \def MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def MBEDTLS_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -#define MBEDTLS_X509_RSASSA_PSS_SUPPORT - -/** - * \def MBEDTLS_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be applicable to your use case. - * - * \note Currently compression can't be used with DTLS. - * - * \deprecated This feature is deprecated and will be removed - * in the next major revision of the library. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define MBEDTLS_ZLIB_SUPPORT -/* \} name SECTION: mbed TLS feature support */ - -/** - * \name SECTION: mbed TLS modules - * - * This section enables or disables entire modules in mbed TLS - * \{ - */ - -/** - * \def MBEDTLS_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: MBEDTLS_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -#define MBEDTLS_AESNI_C - -/** - * \def MBEDTLS_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/cipher.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define MBEDTLS_AES_C - -/** - * \def MBEDTLS_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 - * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. If possible, we recommend avoidng dependencies on - * it, and considering stronger ciphers instead. - * - */ -#define MBEDTLS_ARC4_C - -/** - * \def MBEDTLS_ASN1_PARSE_C - * - * Enable the generic ASN1 parser. - * - * Module: library/asn1.c - * Caller: library/x509.c - * library/dhm.c - * library/pkcs12.c - * library/pkcs5.c - * library/pkparse.c - */ -#define MBEDTLS_ASN1_PARSE_C - -/** - * \def MBEDTLS_ASN1_WRITE_C - * - * Enable the generic ASN1 writer. - * - * Module: library/asn1write.c - * Caller: library/ecdsa.c - * library/pkwrite.c - * library/x509_create.c - * library/x509write_crt.c - * library/x509write_csr.c - */ -#define MBEDTLS_ASN1_WRITE_C - -/** - * \def MBEDTLS_BASE64_C - * - * Enable the Base64 module. - * - * Module: library/base64.c - * Caller: library/pem.c - * - * This module is required for PEM support (required by X.509). - */ -#define MBEDTLS_BASE64_C - -/** - * \def MBEDTLS_BIGNUM_C - * - * Enable the multi-precision integer library. - * - * Module: library/bignum.c - * Caller: library/dhm.c - * library/ecp.c - * library/ecdsa.c - * library/rsa.c - * library/rsa_internal.c - * library/ssl_tls.c - * - * This module is required for RSA, DHM and ECC (ECDH, ECDSA) support. - */ -#define MBEDTLS_BIGNUM_C - -/** - * \def MBEDTLS_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -#define MBEDTLS_BLOWFISH_C - -/** - * \def MBEDTLS_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -#define MBEDTLS_CAMELLIA_C - -/** - * \def MBEDTLS_ARIA_C - * - * Enable the ARIA block cipher. - * - * Module: library/aria.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * - * MBEDTLS_TLS_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 - */ -//#define MBEDTLS_ARIA_C - -/** - * \def MBEDTLS_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -#define MBEDTLS_CCM_C - -/** - * \def MBEDTLS_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * This module is used for testing (ssl_client/server). - */ -#define MBEDTLS_CERTS_C - -/** - * \def MBEDTLS_CHACHA20_C - * - * Enable the ChaCha20 stream cipher. - * - * Module: library/chacha20.c - */ -#define MBEDTLS_CHACHA20_C - -/** - * \def MBEDTLS_CHACHAPOLY_C - * - * Enable the ChaCha20-Poly1305 AEAD algorithm. - * - * Module: library/chachapoly.c - * - * This module requires: MBEDTLS_CHACHA20_C, MBEDTLS_POLY1305_C - */ -#define MBEDTLS_CHACHAPOLY_C - -/** - * \def MBEDTLS_CIPHER_C - * - * Enable the generic cipher layer. - * - * Module: library/cipher.c - * Caller: library/ssl_tls.c - * - * Uncomment to enable generic cipher wrappers. - */ -#define MBEDTLS_CIPHER_C - -/** - * \def MBEDTLS_CMAC_C - * - * Enable the CMAC (Cipher-based Message Authentication Code) mode for block - * ciphers. - * - * Module: library/cmac.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_DES_C - * - */ -//#define MBEDTLS_CMAC_C - -/** - * \def MBEDTLS_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-based random generator. - * The CTR_DRBG generator uses AES-256 by default. - * To use AES-128 instead, enable MBEDTLS_CTR_DRBG_USE_128_BIT_KEY below. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: MBEDTLS_AES_C - * - * This module provides the CTR_DRBG AES random number generator. - */ -#define MBEDTLS_CTR_DRBG_C - -/** - * \def MBEDTLS_DEBUG_C - * - * Enable the debug functions. - * - * Module: library/debug.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module provides debugging functions. - */ -#define MBEDTLS_DEBUG_C - -/** - * \def MBEDTLS_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - * - * \warning DES is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - */ -#define MBEDTLS_DES_C - -/** - * \def MBEDTLS_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -#define MBEDTLS_DHM_C - -/** - * \def MBEDTLS_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: MBEDTLS_ECP_C - */ -#define MBEDTLS_ECDH_C - -/** - * \def MBEDTLS_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: MBEDTLS_ECP_C, MBEDTLS_ASN1_WRITE_C, MBEDTLS_ASN1_PARSE_C - */ -#define MBEDTLS_ECDSA_C - -/** - * \def MBEDTLS_ECJPAKE_C - * - * Enable the elliptic curve J-PAKE library. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Module: library/ecjpake.c - * Caller: - * - * This module is used by the following key exchanges: - * ECJPAKE - * - * Requires: MBEDTLS_ECP_C, MBEDTLS_MD_C - */ -//#define MBEDTLS_ECJPAKE_C - -/** - * \def MBEDTLS_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * library/ecjpake.c - * - * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED - */ -#define MBEDTLS_ECP_C - -/** - * \def MBEDTLS_ENTROPY_C - * - * Enable the platform-specific entropy code. - * - * Module: library/entropy.c - * Caller: - * - * Requires: MBEDTLS_SHA512_C or MBEDTLS_SHA256_C - * - * This module provides a generic entropy pool - */ -#define MBEDTLS_ENTROPY_C - -/** - * \def MBEDTLS_ERROR_C - * - * Enable error code to error string conversion. - * - * Module: library/error.c - * Caller: - * - * This module enables mbedtls_strerror(). - */ -// #define MBEDTLS_ERROR_C - -/** - * \def MBEDTLS_GCM_C - * - * Enable the Galois/Counter Mode (GCM) for AES. - * - * Module: library/gcm.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -#define MBEDTLS_GCM_C - -/** - * \def MBEDTLS_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: MBEDTLS_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define MBEDTLS_HAVEGE_C - -/** - * \def MBEDTLS_HKDF_C - * - * Enable the HKDF algorithm (RFC 5869). - * - * Module: library/hkdf.c - * Caller: - * - * Requires: MBEDTLS_MD_C - * - * This module adds support for the Hashed Message Authentication Code - * (HMAC)-based key derivation function (HKDF). - */ -#define MBEDTLS_HKDF_C - -/** - * \def MBEDTLS_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: MBEDTLS_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -#define MBEDTLS_HMAC_DRBG_C - -/** - * \def MBEDTLS_NIST_KW_C - * - * Enable the Key Wrapping mode for 128-bit block ciphers, - * as defined in NIST SP 800-38F. Only KW and KWP modes - * are supported. At the moment, only AES is approved by NIST. - * - * Module: library/nist_kw.c - * - * Requires: MBEDTLS_AES_C and MBEDTLS_CIPHER_C - */ -//#define MBEDTLS_NIST_KW_C - -/** - * \def MBEDTLS_MD_C - * - * Enable the generic message digest layer. - * - * Module: library/md.c - * Caller: - * - * Uncomment to enable generic message digest wrappers. - */ -#define MBEDTLS_MD_C - -/** - * \def MBEDTLS_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - * - * \warning MD2 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_MD2_C - -/** - * \def MBEDTLS_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - * - * \warning MD4 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_MD4_C - -/** - * \def MBEDTLS_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS up to version 1.1, and for TLS 1.2 - * depending on the handshake parameters. Further, it is used for checking - * MD5-signed certificates, and for PBKDF1 when decrypting PEM-encoded - * encrypted keys. - * - * \warning MD5 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -#define MBEDTLS_MD5_C - -/** - * \def MBEDTLS_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces calloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: MBEDTLS_PLATFORM_C - * MBEDTLS_PLATFORM_MEMORY (to use it within mbed TLS) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define MBEDTLS_MEMORY_BUFFER_ALLOC_C - -/** - * \def MBEDTLS_NET_C - * - * Enable the TCP and UDP over IPv6/IPv4 networking routines. - * - * \note This module only works on POSIX/Unix (including Linux, BSD and OS X) - * and Windows. For other platforms, you'll want to disable it, and write your - * own networking callbacks to be passed to \c mbedtls_ssl_set_bio(). - * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS - * - * Module: library/net_sockets.c - * - * This module provides networking routines. - */ -// #define MBEDTLS_NET_C - -/** - * \def MBEDTLS_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ -#define MBEDTLS_OID_C - -/** - * \def MBEDTLS_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: MBEDTLS_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -#define MBEDTLS_PADLOCK_C - -/** - * \def MBEDTLS_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ -#define MBEDTLS_PEM_PARSE_C - -/** - * \def MBEDTLS_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: MBEDTLS_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ -#define MBEDTLS_PEM_WRITE_C - -/** - * \def MBEDTLS_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: MBEDTLS_RSA_C or MBEDTLS_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ -#define MBEDTLS_PK_C - -/** - * \def MBEDTLS_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_PK_C - * - * Uncomment to enable generic public key parse functions. - */ -#define MBEDTLS_PK_PARSE_C - -/** - * \def MBEDTLS_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: MBEDTLS_PK_C - * - * Uncomment to enable generic public key write functions. - */ -#define MBEDTLS_PK_WRITE_C - -/** - * \def MBEDTLS_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: MBEDTLS_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -#define MBEDTLS_PKCS5_C - -/** - * \def MBEDTLS_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: MBEDTLS_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define MBEDTLS_PKCS11_C - -/** - * \def MBEDTLS_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_CIPHER_C, MBEDTLS_MD_C - * Can use: MBEDTLS_ARC4_C - * - * This module enables PKCS#12 functions. - */ -#define MBEDTLS_PKCS12_C - -/** - * \def MBEDTLS_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like calloc(), free(), snprintf(), printf(), fprintf(), exit(). - * - * Enabling MBEDTLS_PLATFORM_C enables to use of MBEDTLS_PLATFORM_XXX_ALT - * or MBEDTLS_PLATFORM_XXX_MACRO directives, allowing the functions mentioned - * above to be specified at runtime or compile time respectively. - * - * \note This abstraction layer must be enabled on Windows (including MSYS2) - * as other module rely on it for a fixed snprintf implementation. - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define MBEDTLS_PLATFORM_C - -/** - * \def MBEDTLS_POLY1305_C - * - * Enable the Poly1305 MAC algorithm. - * - * Module: library/poly1305.c - * Caller: library/chachapoly.c - */ -#define MBEDTLS_POLY1305_C - -/** - * \def MBEDTLS_PSA_CRYPTO_C - * - * Enable the Platform Security Architecture cryptography API. - * - * \warning The PSA Crypto API is still beta status. While you're welcome to - * experiment using it, incompatible API changes are still possible, and some - * parts may not have reached the same quality as the rest of Mbed TLS yet. - * - * Module: crypto/library/psa_crypto.c - * - * Requires: MBEDTLS_CTR_DRBG_C, MBEDTLS_ENTROPY_C - * - */ -#define MBEDTLS_PSA_CRYPTO_C - -/** - * \def MBEDTLS_PSA_CRYPTO_STORAGE_C - * - * Enable the Platform Security Architecture persistent key storage. - * - * Module: crypto/library/psa_crypto_storage.c - * - * Requires: MBEDTLS_PSA_CRYPTO_C, - * either MBEDTLS_PSA_ITS_FILE_C or a native implementation of - * the PSA ITS interface - */ -//#define MBEDTLS_PSA_CRYPTO_STORAGE_C - -/** - * \def MBEDTLS_PSA_ITS_FILE_C - * - * Enable the emulation of the Platform Security Architecture - * Internal Trusted Storage (PSA ITS) over files. - * - * Module: crypto/library/psa_its_file.c - * - * Requires: MBEDTLS_FS_IO - * - */ -//#define MBEDTLS_PSA_ITS_FILE_C - -/** - * \def MBEDTLS_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -#define MBEDTLS_RIPEMD160_C - -/** - * \def MBEDTLS_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * library/rsa_internal.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C - */ -#define MBEDTLS_RSA_C - -/** - * \def MBEDTLS_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS up to version 1.1, for TLS 1.2 - * depending on the handshake parameters, and for SHA1-signed certificates. - * - * \warning SHA-1 is considered a weak message digest and its use constitutes - * a security risk. If possible, we recommend avoiding dependencies - * on it, and considering stronger message digests instead. - * - */ -#define MBEDTLS_SHA1_C - -/** - * \def MBEDTLS_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define MBEDTLS_SHA256_C - -/** - * \def MBEDTLS_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define MBEDTLS_SHA512_C - -/** - * \def MBEDTLS_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: MBEDTLS_SSL_CACHE_C - */ -#define MBEDTLS_SSL_CACHE_C - -/** - * \def MBEDTLS_SSL_COOKIE_C - * - * Enable basic implementation of DTLS cookies for hello verification. - * - * Module: library/ssl_cookie.c - * Caller: - */ -#define MBEDTLS_SSL_COOKIE_C - -/** - * \def MBEDTLS_SSL_TICKET_C - * - * Enable an implementation of TLS server-side callbacks for session tickets. - * - * Module: library/ssl_ticket.c - * Caller: - * - * Requires: MBEDTLS_CIPHER_C - */ -#define MBEDTLS_SSL_TICKET_C - -/** - * \def MBEDTLS_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: MBEDTLS_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define MBEDTLS_SSL_CLI_C - -/** - * \def MBEDTLS_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: MBEDTLS_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -#define MBEDTLS_SSL_SRV_C - -/** - * \def MBEDTLS_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: MBEDTLS_CIPHER_C, MBEDTLS_MD_C - * and at least one of the MBEDTLS_SSL_PROTO_XXX defines - * - * This module is required for SSL/TLS. - */ -#define MBEDTLS_SSL_TLS_C - -/** - * \def MBEDTLS_THREADING_C - * - * Enable the threading abstraction layer. - * By default mbed TLS assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. See also our Knowledge Base article about threading: - * https://tls.mbed.org/kb/development/thread-safety-and-multi-threading - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either MBEDTLS_THREADING_ALT or - * MBEDTLS_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within mbed TLS - */ -//#define MBEDTLS_THREADING_C - -/** - * \def MBEDTLS_TIMING_C - * - * Enable the semi-portable timing interface. - * - * \note The provided implementation only works on POSIX/Unix (including Linux, - * BSD and OS X) and Windows. On other platforms, you can either disable that - * module and provide your own implementations of the callbacks needed by - * \c mbedtls_ssl_set_timer_cb() for DTLS, or leave it enabled and provide - * your own implementation of the whole module by setting - * \c MBEDTLS_TIMING_ALT in the current file. - * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -// #define MBEDTLS_TIMING_C - -/** - * \def MBEDTLS_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -// #define MBEDTLS_VERSION_C - -/** - * \def MBEDTLS_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, - * MBEDTLS_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ -#define MBEDTLS_X509_USE_C - -/** - * \def MBEDTLS_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ -#define MBEDTLS_X509_CRT_PARSE_C - -/** - * \def MBEDTLS_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ -#define MBEDTLS_X509_CRL_PARSE_C - -/** - * \def MBEDTLS_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -#define MBEDTLS_X509_CSR_PARSE_C - -/** - * \def MBEDTLS_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, MBEDTLS_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -#define MBEDTLS_X509_CREATE_C - -/** - * \def MBEDTLS_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: MBEDTLS_X509_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -#define MBEDTLS_X509_CRT_WRITE_C - -/** - * \def MBEDTLS_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: MBEDTLS_X509_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -#define MBEDTLS_X509_CSR_WRITE_C - -/** - * \def MBEDTLS_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -#define MBEDTLS_XTEA_C - -/* \} name SECTION: mbed TLS modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define MBEDTLS_MPI_WINDOW_SIZE 6 /**< Maximum windows size used. */ -//#define MBEDTLS_MPI_MAX_SIZE 1024 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with -// SHA-256) */ #define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ #define -// MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ #define -// MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ #define -// MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ #define MBEDTLS_CTR_DRBG_USE_128_BIT_KEY -///**< Use 128-bit key for CTR_DRBG - may reduce security (see ctr_drbg.h) */ - -/* HMAC_DRBG options */ -//#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define MBEDTLS_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define MBEDTLS_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define MBEDTLS_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define MBEDTLS_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ -//#define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Default minimum number of bytes required for the hardware entropy -// source mbedtls_hardware_poll() before entropy is released */ - -/* Memory buffer allocator options */ -//#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define MBEDTLS_PLATFORM_STD_MEM_HDR /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't -// define if no header is needed. */ #define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be -// undefined */ #define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ #define -// MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_TIME time -///**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ #define MBEDTLS_PLATFORM_STD_FPRINTF fprintf -///**< Default fprintf to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can -// be undefined */ -/* Note: your snprintf must correctly zero-terminate the buffer! */ -//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be -// undefined */ #define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function -// to use, can be undefined */ #define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" /**< Seed file to read/write with default -// implementation */ - -/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */ -/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */ -//#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be -// enabled */ #define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined. -// MBEDTLS_HAVE_TIME must be enabled */ #define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can -// be undefined */ #define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ -/* Note: your snprintf must correctly zero-terminate the buffer! */ -//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_VSNPRINTF_MACRO vsnprintf /**< Default vsnprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be -// undefined */ #define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function -// to use, can be undefined */ - -/** - * \brief This macro is invoked by the library when an invalid parameter - * is detected that is only checked with #MBEDTLS_CHECK_PARAMS - * (see the documentation of that option for context). - * - * When you leave this undefined here, the library provides - * a default definition. If the macro #MBEDTLS_CHECK_PARAMS_ASSERT - * is defined, the default definition is `assert(cond)`, - * otherwise the default definition calls a function - * mbedtls_param_failed(). This function is declared in - * `platform_util.h` for the benefit of the library, but - * you need to define in your application. - * - * When you define this here, this replaces the default - * definition in platform_util.h (which no longer declares the - * function mbedtls_param_failed()) and it is your responsibility - * to make sure this macro expands to something suitable (in - * particular, that all the necessary declarations are visible - * from within the library - you can ensure that by providing - * them in this file next to the macro definition). - * If you define this macro to call `assert`, also define - * #MBEDTLS_CHECK_PARAMS_ASSERT so that library source files - * include ``. - * - * Note that you may define this macro to expand to nothing, in - * which case you don't have to worry about declarations or - * definitions. However, you will then be notified about invalid - * parameters only in non-void functions, and void function will - * just silently return early on invalid parameters, which - * partially negates the benefits of enabling - * #MBEDTLS_CHECK_PARAMS in the first place, so is discouraged. - * - * \param cond The expression that should evaluate to true, but doesn't. - */ -//#define MBEDTLS_PARAM_FAILED( cond ) assert( cond ) - -/* SSL Cache options */ -//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ - -/** \def MBEDTLS_SSL_MAX_CONTENT_LEN - * - * Maximum length (in bytes) of incoming and outgoing plaintext fragments. - * - * This determines the size of both the incoming and outgoing TLS I/O buffers - * in such a way that both are capable of holding the specified amount of - * plaintext data, regardless of the protection mechanism used. - * - * To configure incoming and outgoing I/O buffers separately, use - * #MBEDTLS_SSL_IN_CONTENT_LEN and #MBEDTLS_SSL_OUT_CONTENT_LEN, - * which overwrite the value set by this option. - * - * \note When using a value less than the default of 16KB on the client, it is - * recommended to use the Maximum Fragment Length (MFL) extension to - * inform the server about this limitation. On the server, there - * is no supported, standardized way of informing the client about - * restriction on the maximum size of incoming messages, and unless - * the limitation has been communicated by other means, it is recommended - * to only change the outgoing buffer size #MBEDTLS_SSL_OUT_CONTENT_LEN - * while keeping the default value of 16KB for the incoming buffer. - * - * Uncomment to set the maximum plaintext size of both - * incoming and outgoing I/O buffers. - */ -//#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384 - -/** \def MBEDTLS_SSL_IN_CONTENT_LEN - * - * Maximum length (in bytes) of incoming plaintext fragments. - * - * This determines the size of the incoming TLS I/O buffer in such a way - * that it is capable of holding the specified amount of plaintext data, - * regardless of the protection mechanism used. - * - * If this option is undefined, it inherits its value from - * #MBEDTLS_SSL_MAX_CONTENT_LEN. - * - * \note When using a value less than the default of 16KB on the client, it is - * recommended to use the Maximum Fragment Length (MFL) extension to - * inform the server about this limitation. On the server, there - * is no supported, standardized way of informing the client about - * restriction on the maximum size of incoming messages, and unless - * the limitation has been communicated by other means, it is recommended - * to only change the outgoing buffer size #MBEDTLS_SSL_OUT_CONTENT_LEN - * while keeping the default value of 16KB for the incoming buffer. - * - * Uncomment to set the maximum plaintext size of the incoming I/O buffer - * independently of the outgoing I/O buffer. - */ -//#define MBEDTLS_SSL_IN_CONTENT_LEN 16384 - -/** \def MBEDTLS_SSL_CID_IN_LEN_MAX - * - * The maximum length of CIDs used for incoming DTLS messages. - * - */ -//#define MBEDTLS_SSL_CID_IN_LEN_MAX 32 - -/** \def MBEDTLS_SSL_CID_OUT_LEN_MAX - * - * The maximum length of CIDs used for outgoing DTLS messages. - * - */ -//#define MBEDTLS_SSL_CID_OUT_LEN_MAX 32 - -/** \def MBEDTLS_SSL_CID_PADDING_GRANULARITY - * - * This option controls the use of record plaintext padding - * when using the Connection ID extension in DTLS 1.2. - * - * The padding will always be chosen so that the length of the - * padded plaintext is a multiple of the value of this option. - * - * Note: A value of \c 1 means that no padding will be used - * for outgoing records. - * - * Note: On systems lacking division instructions, - * a power of two should be preferred. - * - */ -//#define MBEDTLS_SSL_CID_PADDING_GRANULARITY 16 - -/** \def MBEDTLS_SSL_OUT_CONTENT_LEN - * - * Maximum length (in bytes) of outgoing plaintext fragments. - * - * This determines the size of the outgoing TLS I/O buffer in such a way - * that it is capable of holding the specified amount of plaintext data, - * regardless of the protection mechanism used. - * - * If this option undefined, it inherits its value from - * #MBEDTLS_SSL_MAX_CONTENT_LEN. - * - * It is possible to save RAM by setting a smaller outward buffer, while keeping - * the default inward 16384 byte buffer to conform to the TLS specification. - * - * The minimum required outward buffer size is determined by the handshake - * protocol's usage. Handshaking will fail if the outward buffer is too small. - * The specific size requirement depends on the configured ciphers and any - * certificate data which is sent during the handshake. - * - * Uncomment to set the maximum plaintext size of the outgoing I/O buffer - * independently of the incoming I/O buffer. - */ -//#define MBEDTLS_SSL_OUT_CONTENT_LEN 16384 - -/** \def MBEDTLS_SSL_DTLS_MAX_BUFFERING - * - * Maximum number of heap-allocated bytes for the purpose of - * DTLS handshake message reassembly and future message buffering. - * - * This should be at least 9/8 * MBEDTLSSL_IN_CONTENT_LEN - * to account for a reassembled handshake message of maximum size, - * together with its reassembly bitmap. - * - * A value of 2 * MBEDTLS_SSL_IN_CONTENT_LEN (32768 by default) - * should be sufficient for all practical situations as it allows - * to reassembly a large handshake message (such as a certificate) - * while buffering multiple smaller handshake messages. - * - */ -//#define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768 - -//#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define MBEDTLS_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ -//#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number -// of cookies issued */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* X509 options */ -//#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ -//#define MBEDTLS_X509_MAX_FILE_PATH_LEN 512 /**< Maximum length of a path/filename string in bytes including the null -// terminator character ('\0'). */ - -/** - * Allow SHA-1 in the default TLS configuration for certificate signing. - * Without this build-time option, SHA-1 support must be activated explicitly - * through mbedtls_ssl_conf_cert_profile. Turning on this option is not - * recommended because of it is possible to generate SHA-1 collisions, however - * this may be safe for legacy infrastructure where additional controls apply. - * - * \warning SHA-1 is considered a weak message digest and its use constitutes - * a security risk. If possible, we recommend avoiding dependencies - * on it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES - -/** - * Allow SHA-1 in the default TLS configuration for TLS 1.2 handshake - * signature and ciphersuite selection. Without this build-time option, SHA-1 - * support must be activated explicitly through mbedtls_ssl_conf_sig_hashes. - * The use of SHA-1 in TLS <= 1.1 and in HMAC-SHA-1 is always allowed by - * default. At the time of writing, there is no practical attack on the use - * of SHA-1 in handshake signatures, hence this option is turned on by default - * to preserve compatibility with existing peers, but the general - * warning applies nonetheless: - * - * \warning SHA-1 is considered a weak message digest and its use constitutes - * a security risk. If possible, we recommend avoiding dependencies - * on it, and considering stronger message digests instead. - * - */ -#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE - -/** - * Uncomment the macro to let mbed TLS use your alternate implementation of - * mbedtls_platform_zeroize(). This replaces the default implementation in - * platform_util.c. - * - * mbedtls_platform_zeroize() is a widely used function across the library to - * zero a block of memory. The implementation is expected to be secure in the - * sense that it has been written to prevent the compiler from removing calls - * to mbedtls_platform_zeroize() as part of redundant code elimination - * optimizations. However, it is difficult to guarantee that calls to - * mbedtls_platform_zeroize() will not be optimized by the compiler as older - * versions of the C language standards do not provide a secure implementation - * of memset(). Therefore, MBEDTLS_PLATFORM_ZEROIZE_ALT enables users to - * configure their own implementation of mbedtls_platform_zeroize(), for - * example by using directives specific to their compiler, features from newer - * C standards (e.g using memset_s() in C11) or calling a secure memset() from - * their system (e.g explicit_bzero() in BSD). - */ -//#define MBEDTLS_PLATFORM_ZEROIZE_ALT - -/** - * Uncomment the macro to let Mbed TLS use your alternate implementation of - * mbedtls_platform_gmtime_r(). This replaces the default implementation in - * platform_util.c. - * - * gmtime() is not a thread-safe function as defined in the C standard. The - * library will try to use safer implementations of this function, such as - * gmtime_r() when available. However, if Mbed TLS cannot identify the target - * system, the implementation of mbedtls_platform_gmtime_r() will default to - * using the standard gmtime(). In this case, calls from the library to - * gmtime() will be guarded by the global mutex mbedtls_threading_gmtime_mutex - * if MBEDTLS_THREADING_C is enabled. We recommend that calls from outside the - * library are also guarded with this mutex to avoid race conditions. However, - * if the macro MBEDTLS_PLATFORM_GMTIME_R_ALT is defined, Mbed TLS will - * unconditionally use the implementation for mbedtls_platform_gmtime_r() - * supplied at compile time. - */ -//#define MBEDTLS_PLATFORM_GMTIME_R_ALT - -/** - * Enable the verified implementations of ECDH primitives from Project Everest - * (currently only Curve25519). This feature changes the layout of ECDH - * contexts and therefore is a compatibility break for applications that access - * fields of a mbedtls_ecdh_context structure directly. See also - * MBEDTLS_ECDH_LEGACY_CONTEXT in include/mbedtls/ecdh.h. - */ -//#define MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED - -/* \} name SECTION: Customisation configuration options */ - -/* Target and application specific configurations - * - * Allow user to override any previous default. - * - */ -#if defined(MBEDTLS_USER_CONFIG_FILE) -#include MBEDTLS_USER_CONFIG_FILE -#endif - -#include "mbedtls/check_config.h" - -#endif /* MBEDTLS_CONFIG_H */ diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/cy8c6xxa_cm4_dual_ota_int.ld b/third_party/infineon/psoc6/psoc6_sdk/ota/cy8c6xxa_cm4_dual_ota_int.ld index d1717ff3e47ff0..7e8e34fa3239c4 100644 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/cy8c6xxa_cm4_dual_ota_int.ld +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/cy8c6xxa_cm4_dual_ota_int.ld @@ -43,15 +43,12 @@ ENTRY(Reset_Handler) /* Size of the stack section at the end of CM4 SRAM */ STACK_SIZE = 0x1000; -/* Size of the Cortex-M0+ application image at the start of FLASH - passed in as argument to ld.exe*/ -/* MCUBOOT_BOOTLOADER_SIZE = 0x12000; */ - -/* MCUBoot Header Size passed in as argument to ld.exe */ -/* MCUBOOT_HEADER_SIZE = 0x1000; */ - -/* CY_BOOT_PRIMARY_1_SIZE Slot 1 size passed in as argument to ld.exe */ -/* CY_BOOT_PRIMARY_1_SIZE = 0x0EE000 (Internal FLASH) */ -/* CY_BOOT_PRIMARY_1_SIZE = 0x10C000 (External FLASH) */ +/* + Arguments for OTA using MCUBoot -- will get from passed in Makefile: + --defsym,MCUBOOT_HEADER_SIZE=XXXX + --defsym,FLASH_AREA_IMG_1_PRIMARY_START=XXXX + --defsym,FLASH_AREA_IMG_1_PRIMARY_SIZE=XXXX +*/ /* Force symbol to be entered in the output file as an undefined symbol. Doing * this may, for example, trigger linking of additional modules from standard @@ -74,7 +71,7 @@ MEMORY * where 'xx' is the device group; for example, 'cy8c6xx7_cm0plus.ld'. */ ram (rwx) : ORIGIN = 0x08020800, LENGTH = 0xDF000 - flash (rx) : ORIGIN = 0x10000000 + MCUBOOT_BOOTLOADER_SIZE, LENGTH = CY_BOOT_PRIMARY_1_SIZE + flash (rx) : ORIGIN = 0x10000000 + FLASH_AREA_IMG_1_PRIMARY_START + MCUBOOT_HEADER_SIZE, LENGTH = FLASH_AREA_IMG_1_PRIMARY_SIZE - MCUBOOT_HEADER_SIZE /* This is a 32K flash region used for EEPROM emulation. This region can also be used as the general purpose flash. * You can assign sections to this memory region for only one of the cores. @@ -133,7 +130,7 @@ GROUP(libgcc.a libc.a libm.a libnosys.a) SECTIONS { /* Cortex-M4 application flash area */ - .text ORIGIN(flash) + MCUBOOT_HEADER_SIZE : + .text ORIGIN(flash) : { . = ALIGN(8); __cy_app_load_addr = . ; @@ -401,4 +398,4 @@ __cy_memory_4_start = 0x90700000; __cy_memory_4_length = 0x100000; __cy_memory_4_row_size = 1; -/* EOF */ +/* EOF */ \ No newline at end of file diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/matter-psoc6-mcuboot-bootloader.hex b/third_party/infineon/psoc6/psoc6_sdk/ota/matter-psoc6-mcuboot-bootloader.hex index a8ae0bf328eb65..ff4b8ae09aefb5 100644 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/matter-psoc6-mcuboot-bootloader.hex +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/matter-psoc6-mcuboot-bootloader.hex @@ -1,4099 +1,5769 @@ -:020000041000EA -:1000000000000208070500100D000000690500103F -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000006505001056 -:1000300000000000000000006505001065050010CC -:1000400065050010650500106505001065050010C8 -:1000500065050010650500106505001065050010B8 -:1000600065050010650500106505001065050010A8 -:100070006505001065050010650500106505001098 -:1000800010B5064C2378002B07D1054B002B02D06E -:10009000044800E000BF0123237010BD740700086E -:1000A00000000000DCF60010044B10B5002B03D05C -:1000B0000349044800E000BF10BDC0460000000036 -:1000C00078070008DCF6001010B500F07DF800F0AD -:1000D00007F800F069F800F01FF800F029F810BDEB -:1000E00010B50021012007F059F94D22002101200F -:1000F00007F092F80021012007F00EF900210020FE -:1001000007F04CF900220021002007F085F80021BB -:10011000002007F001F910BD10B5002200212F20AA -:1001200007F0C0F800220121052007F0BBF810BD40 -:1001300010B5134C134A0021200004F0AFFD124A01 -:100140000121200004F0AAFD104C114A00212000DA -:1001500004F0A4FD0F4A0121200004F09FFD0E4C85 -:100160000E4A0421200004F099FD0D4A06212000CA -:1001700004F094FD0B4A0721200004F08FFD10BD10 -:1001800000003140FCDF001030E000108002314000 -:1001900094DF0010C8DF00100003314060DF001062 -:1001A0002CDF0010F8DE0010034B332203495A50B5 -:1001B00003495A507047C0460000304008200000F4 -:1001C00010200000FEE7000030B583B0962100202B -:1001D00008F048F808F00CF800281BD1774AFF23F4 -:1001E0001B02D4583F231C4007F0F2FF002806D022 -:1001F000012007F0DBFF714B9B6C002B25DB6F4A66 -:10020000FF231B02D45007F07BFA07F06DFA0120A0 -:1002100007F08EFA012008F005FD08F0A1FC08F0B7 -:1002200087FD08F06FFD0021002007F0FFF9002096 -:1002300007F086F9012007F067F9002007F0E2F8DF -:100240005F4B1A683F23D45C06E00620FFF7BAFF35 -:10025000200007F0BBFC013C002CF9D1002101205B -:1002600007F09EFA002007F0CFF9002800D189E0BE -:1002700007F054FB0021002007F092FA0021002033 -:1002800007F0A4F94F4C002500950023002200211F -:10029000200004F055FC00950023002201212000DD -:1002A00004F04EFC484807F0FFF9002800D075E044 -:1002B000012007F017F9002007F042F9012007F0AC -:1002C00023F9002007F09EF80021012007F068FACA -:1002D0000021002007F064FA0021022007F060FAF4 -:1002E0000021032007F05CFA0021042007F058FAEF -:1002F0000021052007F054FA344807F02DFB0028B0 -:100300004FD1334807F0F6FB00284DD101210020E2 -:1003100007F05CF90021002007F088F92D49012041 -:1003200007F07AFC002842D12B49012007F00AFD92 -:1003300000283FD10021022007F048F901210220C6 -:1003400007F074F9022007F00DF907F0BFF800205C -:1003500007F088F8002007F09DF807F0ABF80020C0 -:1003600008F0F4FC012007F06BF807F0BDF901205C -:1003700007F0DEF99021002007F074FF00F01AF971 -:1003800003B030BD07F03AFA1223FF33984200D091 -:100390006EE70121002007F019F969E70520FFF752 -:1003A00011FF0420FFF70EFF0420FFF70BFF0320CF -:1003B000FFF708FF0320FFF705FFC04600002740B6 -:1003C000D45F01080000314040420F00C0E100103E -:1003D000400D0300D4E100101027000010B503F019 -:1003E00059F9054C200004F055FB200004F052FBA5 -:1003F000012002F04FFE10BD8002314010B584682C -:1004000003681B89E418094B1B68DB68382201214B -:1004100007480AF0B5F80A21064803F01DF9FFF76E -:10042000DDFF200000F082F910BDC046EC0100089D -:10043000DCE100100000654010B584B0FFF744FE19 -:1004400062B6E120400203F0E9F8264C2368DB683D -:100450001022012124480AF093F82368DB68222245 -:10046000012122480AF08CF8012002F0C1FD041E8F -:100470000DD11C4B1B68DB682E2201211C480AF0A1 -:100480007FF8002C0BD0002008F032FAFBE7154B68 -:100490001B68D8682200174909F0FEFFF1E701A8A0 -:1004A00000F086FF00280FD10E4B1B68DB682F225F -:1004B000012111480AF064F8FA20000102F0BAFFA5 -:1004C00001A8FFF79BFFDEE7064B1B68DB683222C3 -:1004D00001210A480AF054F80A21094803F0BCF83F -:1004E000D1E7C046EC01000818E200102CE2001031 -:1004F00050E2001080E20010C4E20010F4E20010AC -:10050000000065407047FFF7FDFF72B60F4C104DBD -:10051000AC4209DA21686268A368043B02DBC85870 -:10052000D050FAE70C34F3E70A490B4A0020521A7C -:1005300002DD043A8850FCDC084809490860BFF332 -:100540004F8F00F075F8FFF777FFFEE7E8F6001031 -:1005500000F70010740700087C6001080000000824 -:1005600008ED00E0FEE7FEE700B504207146084212 -:1005700002D0EFF3098001E0EFF30880043007F0C8 -:1005800059FEFEE7000000000230800803D0013071 -:100590000238FCD1C046C0467047EFF3108072B6F7 -:1005A000704780F31088704710B5002004F0C2FD3A -:1005B00010BD704710B5002007F0EAFC041E00D102 -:1005C00010BD144B186006F0AFFF411C200008F06E -:1005D00035FC0400104B186006F026FF411C20007B -:1005E00008F02CFC04000D4B1860013C0C49200065 -:1005F00008F024FC01300B4B1870FA218900200010 -:1006000008F01CFC0130084B1860C003074B186051 -:10061000D6E7C04684000008880000088000000873 -:1006200040420F0094000008900000088C00000871 -:1006300010B5234803F036F8224CB022D200A3585C -:100640005B005B08A350E02189006358302083439E -:10065000635080235B04A3501B4B1C4AE2500433BD -:10066000A0229201E2501A4BFF22E25008F098FBC0 -:10067000C0225200A35801218B43A350FFF799FFDA -:10068000FFF798FF134B1B68BA20195ACA00521A79 -:10069000196A8C4662440021D1601A6A185AC30054 -:1006A0001B1AD31859600C4A8031032004F09AFDBC -:1006B0000A4804F0F3FB0A4804F048FC10BDC046A9 -:1006C000F8ED001000002640840500000100020043 -:1006D0008C050000D45F010820070008900700087F -:1006E00028E30010034A90235B01D35803201840ED -:1006F0007047C0460000204010B5FFF74EFF084C81 -:10070000902149016358074A1A40074B134363502D -:10071000034B5B68DB06FBD5FFF743FF10BDC0460C -:1007200000002040FCFF00000100FA0570B5040045 -:10073000830500D001BEFFF730FF0500FFF7D2FFB1 -:10074000032813D00B4B802292009C509020400134 -:100750001A5809491140094A0A431A50054B5B6867 -:10076000DB06FBD52800FFF71CFF70BDFFF7C4FFB9 -:10077000E8E7C04600002040FCFF00000300FA0547 -:1007800000B583B0130001AA1370012301F055FADC -:1007900003B000BD10B509F00DFF10BD04280AD04C -:1007A000052804D101394B1E994108007047401AB1 -:1007B00043425841FAE70120F8E710B582B00C0037 -:1007C000C0B201A901F07EFF002803D0012420005F -:1007D00002B010BD2100019801F094FA04000198C4 -:1007E00001F084FFF3E710B5040001F015FA0100F1 -:1007F00001222000FFF7C4FF10BD10B5040001F076 -:1008000007FA010001222000FFF7BAFF10BD000027 -:1008100030B583B004000E2A10D80E2915D8120165 -:100820000A436B46DD1DDA7101F0FBF9010001237B -:100830002A00200001F001FA03B030BD9C21064BD4 -:10084000064A8900064809F009FE9C21054B034A27 -:100850008900034809F002FE5CE30010CCE40010BC -:1008600070E30010B8E3001010B582B004000191ED -:1008700001F0DCF90100042301AA200001F0DDF9F8 -:1008800002B010BD30B589B006A90120FFF795FF71 -:10089000002800D08CE004A90230FFF78EFF04008E -:1008A000444B1B68D86806AB1B78012B28D0032B60 -:1008B00024D0414B06AA51789578D27802920195BE -:1008C00000913E4A3E4909F0E7FD3A4B1B68D86863 -:1008D00004AB1B78012B17D0032B13D0364B04AA83 -:1008E00051789578D278029201950091354A344931 -:1008F00009F0D2FD002C11D0FF2057E0324BD9E790 -:10090000324BD7E7304BEAE7304BE8E72B79042B43 -:1009100028D006AA9278934224D00134022C3CD8E5 -:1009200063001B195B002A4AD51806A90978D05C18 -:10093000FFF734FF0028F0D004AB19786878FFF790 -:100940002DFF0028E9D0AB78042B03D006AAD2787B -:100950009342E2D1EB78042BD8D004AAD278934208 -:10096000DBD1D3E7134B1B68D8686B79022B07D018 -:10097000032B10D0042B01D0164A02E0164A00E0E7 -:10098000164A174909F088FD6879831EDBB2022BED -:100990000CD9FF200AE0134AF3E7064B1B68DB681B -:1009A00017220121104809F0EBFD012009B030BDEC -:1009B000FF20FBE7EC010008CCE300100CE4001082 -:1009C00030E4001074E40010D8E30010D0E300100D -:1009D000F4E40010F0E3001004E40010E0E3001081 -:1009E0009CE40010E8E30010B4E4001070B50500CA -:1009F000002915D001235B422878584004090F22B2 -:100A00001040094E80008359634018091A40920033 -:100A100093594340013901350029EDD1D84370BDC8 -:100A200001235B42FAE7C04608E50010F0B5CE4668 -:100A3000474680B5A7B0140099462E9F2F9B984635 -:100A4000684602F0B9FC0021684602F0BAFC319B0E -:100A5000002B02D0329B002B07DC2389E2689446EE -:100A600063446689F618002513E01A003199684638 -:100A700002F0B5FCF1E723003A002900484601F0F6 -:100A800037FE002811D122003900684602F0A7FC89 -:100A90002D19B54204D2741B4445ECD94446EAE70B -:100AA0003099684602F0A7FC002027B0C0BCB946C8 -:100AB000B046F0BDF0B59FB017001D002C4B1E686E -:100AC000279B0493269B039306AB0293259B0193DC -:100AD000249B00932B00FFF7A9FF041E3DD1289B08 -:100AE000002B04D0202206A9180009F071FD002374 -:100AF0000093204B2A00390016A801F00FFD041EB8 -:100B00002BD11CAB72226A441DA916A801F07CFDF2 -:100B1000002821DB1CDC1CA909881029F1D17223D3 -:100B20006B441B88202B20D10EAA1D99280001F0B0 -:100B3000DFFD071E17D120220EA906A8FFF72AFE07 -:100B400006000D4B1B6801248342DAD03C0004E010 -:100B500063425C41E4B200E00400002C00D13400A8 -:100B600020001FB0F0BD0400F7E701246442F7E75E -:100B700098000008FFFF00001009000810B50B4B9B -:100B800002689A420FD1C2680389D843824202D8D0 -:100B9000D418012000E00020002805D08B68A34273 -:100BA00002D8002000E0002010BDC0463DB8F396FA -:100BB000F0B585B005000C000192002001F098FE10 -:100BC000C0B203A901F07EFD002806D001270398DA -:100BD00001F08CFD380005B0F0BD2C236343EB1809 -:100BE0001A89DE689619042302AA3100039801F0DD -:100BF0007FFD071E26D12C214C432D196C8902AB99 -:100C00001A88134B9A420DD0002C1DD102AB1A88C2 -:100C1000104B9A421AD1331902AA52889B18019A92 -:100C20001360D4E702AB59888C4201D00327CEE78A -:100C30008919042302AA039801F05AFD0028E5D07F -:100C40000127C4E70127C2E70327C0E70327BEE760 -:100C5000086900000769000010B582B004000800B0 -:100C6000E02212010192012906D002290FD00729A2 -:100C700010D1E26D603401E0626A283401A901F00C -:100C800085FE002801D1019B236002B010BD226DBA -:100C90005434F3E70120F8E710B5006A01F018FEBC -:100CA00010BD70B504000121FFF7D6FF002802D067 -:100CB0000125280070BD02212000FFF7CDFF00288C -:100CC00001D00125F5E707212000FFF7C5FF051E2C -:100CD00001D00125EDE72000FFF7DEFFA066E8E781 -:100CE000F0B583B004000F00002001F001FEC0B297 -:100CF00001A901F0E7FC061E1AD1019801F008FED7 -:100D00000500019801F0F2FC2C21794361180023C1 -:100D1000032B05D8CA5C954208D10133DBB2F7E753 -:100D20000123002B07D0300003B0F0BD0023F8E70B -:100D300001267642F7E701267642F4E700B587B050 -:100D4000130000220492039202920132FF320192B8 -:100D5000044A00920A0000210020FFF7ABFE07B012 -:100D600000BDC046805D0108F0B585B005000C00EF -:100D70000192244B1F68002001F0BAFDC0B203A904 -:100D800001F0A0FC002802D0380005B0F0BD2C30E6 -:100D900060432E1821002800FFF7A2FF00282BD067 -:100DA0003369D90601D5012727E0019B039A310059 -:100DB0002800FFF7C3FF0700039D29003000FFF75D -:100DC000DDFE002803D0104B1B68BB4215D0002C61 -:100DD0000AD10E4B1B68D868002C0BD10C4A0D4968 -:100DE00009F05AFB012708E0AA680021280001F059 -:100DF00015FDEEE7084AF2E70127039801F076FCBB -:100E0000C2E7C0469800000810090008EC0100087D -:100E100054E500105CE5001048E5001070B50500D1 -:100E20000E000020FFF72EFD0400022805D0042844 -:100E300003D0032801D0200070BD3200012128001A -:100E4000FFF792FF044B1B688342F4D0012801D0C6 -:100E50000524F0E70400EEE710090008F8B50600E5 -:100E60000D0017000024012C11DC2C226243B21863 -:100E70003B002100300000F0D9FB002801D10134F3 -:100E8000F1E7002C04DD002D02D1002000E000205D -:100E9000F8BD002383718360C36001334371036035 -:100EA0000371C37170474379012B01D00020704753 -:100EB0000368012B01D00020F9E70379012B01D051 -:100EC0000020F4E70120F2E730B583B005000C0004 -:100ED0000023009301930800FFF7E5FF002830D0BE -:100EE000204B2A689A4212D01E4BEA6A9A421BD0C3 -:100EF000019B009A934200D90093009BA360009A43 -:100F00002100280000F0D2FD002003B030BD6A4669 -:100F100000212800FFF74CFE0028E5D0124B134AB1 -:100F20001349144809F09AFA01AA01212800FFF791 -:100F30003FFE0028DCD00C4B0C4A0F490D4809F04D -:100F40008DFA21000831002001F000F8002802D1BC -:100F5000A3680093D3E7044B044A0849054809F005 -:100F60007DFAC0463DB8F39688E50010C8E600104B -:100F70003604000090E500104D0400006D040000F0 -:100F800070B504000D00FFF79FFF002812D1EB7928 -:100F90006422A354033BDBB2012B11D9EB79022B62 -:100FA00017D0042B15D0032B13D06423E35CFF2B45 -:100FB00018D070BD124B134A1349144809F04EFA69 -:100FC000002000F011FA0028E8D06423FF22E25448 -:100FD000E4E7002000F0F4F90028E6D06423FF22C3 -:100FE000E254E2E70A4B1B68DB680E220121094844 -:100FF00009F0C6FA084B034A0849044809F02EFADA -:1010000088E50010D8E600109605000090E5001075 -:10101000EC010008D0E50010E0E50010AE0500008E -:1010200070B50400FFF750FF002814D16423E55C7D -:10103000EB1EDBB2012B14D9022D03D0042D01D0FD -:10104000032D07D1002000F0BBF9002802D0642353 -:10105000FF22E25470BD084B084A0949094809F0CB -:10106000FDF9002000F0C0F90028E5D06423FF223C -:10107000E254FF25E2E7C04688E50010B4E6001020 -:101080005305000090E5001070B504000D00FFF757 -:1010900008FE00280FD1002200212000FFF7DEFE0D -:1010A000002814D1200000F0CDFB00281AD16423C1 -:1010B0000122E2540AE0344B1B68D868E022120196 -:1010C000324909F0E9F964230122E25470BD2E4B44 -:1010D0001B68D86800222E4909F0DEF9642301223A -:1010E000E254F3E72800FFF7D4FE2900200001F0C6 -:1010F00001F8002814D12800FFF7D5FE00281AD0E7 -:10110000EB79012B34D02A0001212000FFF72CFEBF -:10111000204B1B68834232D064230522E254D5E77A -:10112000194B1B68D86800221B4909F0B5F96423E4 -:101130000122E254CAE729002000FFF721FF00281E -:101140000AD12A0000212000FFF788FE002809D1DB -:1011500064230122E254B9E7104B114A11491248A5 -:1011600009F07CF90D4B0E4A10490F4809F076F949 -:1011700029002000FFF752FE6423E054A6E7EA7935 -:101180006423E254A2E7C046EC010008E4E5001045 -:101190002CE60010100900085CE6001088E500103D -:1011A000F4E600105306000090E500105906000018 -:1011B00010B501F033FB10BDF8B5DE4657464E467C -:1011C0004546E0B58946924698460A9B9B460B9E4B -:1011D000002512E04346E9182300124A484601F070 -:1011E00087FA002819D15B46E91823000D4A5046BA -:1011F00001F0BEFA002812D12D19B54206D2741B97 -:101200008023DB009C42E5D91C00E3E70020F0BC12 -:10121000BB46B246A946A046F8BD0120F7E701202B -:10122000F5E7C04680090008F0B5C64600B584B0B1 -:1012300004000E004E4B1B6898466C22002109F0FA -:10124000D0F94C4B63624C4B23654C4BE365012753 -:101250007F420025012D14D82900002001F048FB11 -:101260002C21694320316118C0B201F02BFA071E0E -:1012700001D10135EEE7424B424A4349434809F068 -:10128000EDF869462000FFF7FFFE6423E35C6A4641 -:10129000D371042B18D8022B21D2012B2BD164231C -:1012A000E35CFF2B2BD0012B37D1394B22689A42BC -:1012B0003BD0384B1B68D86800232200364909F020 -:1012C000EBF80327002549E0052B14D1002000F09E -:1012D0008BF8071EE3D06423FF22E254DFE7694660 -:1012E0002000FFF79DFE071ED9D0254B254A2B492C -:1012F000264809F0B3F86423FF22E254CFE7254BD8 -:101300001B68DB680E220121254809F039F9254BBD -:101310001C4A25491D4809F0A1F86A460021200011 -:10132000FFF79CFD071EC0D0CCE7102200216846C5 -:1013300009F057F9236A5B783371236A5B68B360FD -:1013400034601A4B1B689846BCE70122521B2C23C1 -:101350005343E318186A01F0C9F90135012DF4D996 -:10136000002F00D14746380004B080BCB846F0BD1D -:1013700098000008800D0008807D000880ED0008BE -:1013800088E5001014E70010D406000090E5001076 -:101390003DB8F396EC0100088CE60010140700003D -:1013A000D0E50010E0E500102B0700001009000850 -:1013B00010B501000148FFF737FF10BD1409000800 -:1013C00010B582B001A9012001F07CF9002803D0FA -:1013D0000124200002B010BD0198FFF704FA0400B8 -:1013E000019801F083F9F4E710B584B003A9012056 -:1013F00001F068F9002803D00124200004B010BDDA -:1014000001A9039800F07EFC041E0CD101ABDB782F -:10141000032B03D0039801F069F9EEE70398FFF777 -:10142000ECF90400F6E70124F4E70000F0B5CE463D -:1014300000B582B00C0016001D00526AC300D758D8 -:101440001368FF1A0138C0001258D31A99462B6846 -:10145000012B15D1EB68022B0CD00899300000F05D -:101460008BFD00282AD12A000899300000F0EAFDFF -:1014700000282AD10999300000F07EFD00282BD1E8 -:10148000220039000898FFF793FE00282BD1019421 -:1014900000974B46089A11003000FFF78DFE002898 -:1014A00028D12900300000F0E9FB2B6801332B60C4 -:1014B000002826D102B080BCB946F0BD5421144B9F -:1014C000144AFF31144808F0C9FFAB21104B114AF0 -:1014D0004900114808F0C2FFAD210D4B0D4A4900EB -:1014E0000D4808F0BBFFAF21094B0A4A49000A48E2 -:1014F00008F0B4FF6221064B064AFF31064808F0A7 -:10150000ADFFB321024B034A4900034808F0A6FF90 -:1015100088E50010CCE8001024E70010F0B5CE46B6 -:10152000474680B583B00F0015001C00566AC30003 -:10153000F2583368D21A90460138C0003658F61A6D -:101540002A6D11581368CB1A99462279012A07D0BF -:101550002379022B32D003B0C0BCB946B046F0BDEF -:101560003A0031000A98FFF723FE002818D10197AE -:1015700000964B460A9A0B992800FFF71DFE00289B -:1015800015D12100280000F079FB022323710028E7 -:10159000DED08021224B234AFF31234808F05EFF32 -:1015A0007A211F4B1F4AFF311F4808F057FFBE2109 -:1015B0001B4B1C4A49001C4808F050FF3A004946A2 -:1015C0000B98FFF7F5FD00281CD101974B460093BF -:1015D00043460B9A0A992800FFF7EEFD002818D120 -:1015E0002100280000F04AFB236801332360012317 -:1015F00023710028AFD08C21094B0A4AFF310A48D9 -:1016000008F02CFFC221064B064A4900064808F0A4 -:1016100025FF8821024B034AFF31034808F01EFFD3 -:1016200088E50010B8E8001024E7001070B582B01B -:1016300016001C1E3AD0436A5D686379012B12D0F4 -:10164000022B19D00025002001F052F9C0B201A9E7 -:1016500001F038F8002830D00125019801F046F853 -:10166000280002B070BD002922D11D4B1B682268E2 -:101670009A42E8D80025E6E72368012B08D9184AE2 -:101680001268934204D8002914D100250131DAE709 -:10169000012B01D00025D6E7002900D00025012923 -:1016A000D1D12379022BCED10021CCE70025CAE786 -:1016B0000025C8E700250021C5E7202332002900C6 -:1016C000019801F015F8051E08D1002CC5D032682C -:1016D000044B9A42C1D001256D42BEE70125BCE70B -:1016E0009C0000083DB8F396F0B5DE4657464E46DE -:1016F0004546E0B589B006000591049200230393A6 -:101700000378032B00D182E000F095FAE0252D014B -:1017100000239A460133019300239B46013B9946DF -:101720000023029380464F460BE06B1E9B460292BD -:101730001AE0019BA34202D001239C46E244013DF2 -:101740000194002D1DDD30784346E918013901234D -:1017500006AA073200F086FE041E5ADB06ABDA79D1 -:10176000531EDBB2012BE0D9300001F0D1F806ABFB -:1017700007331B789842DCD07A1CE0D12F0003930A -:10178000DDE7B9465346012B24DC049908310020DB -:1017900000F0DCFB041E2BD1049B9E6805998F6E24 -:1017A0003900300007F04AFB05003900300007F02F -:1017B000CBFB4B1E99416918484601302AD0894518 -:1017C0001CDA0123049A537113004A461A60039AE3 -:1017D0001A711FE0134B1B68DB6825220121124898 -:1017E00008F0CEFE114B124AC221124808F036FE14 -:1017F000114B0F4AC8210F4808F030FE0223049A0B -:10180000537113005A461A60029A1A7102E00724B3 -:1018100000E00124200009B0F0BCBB46B246A94656 -:10182000A046F0BDEC0100086CE70010E0E50010F8 -:1018300010E9001024E7001088E500100068484314 -:101840007047000070B5856A446DAC4202D0631CDD -:10185000AB4213D1E0231B019D4219D80023002184 -:10186000A34229D2DA00416A89184968066DB44654 -:10187000624452688A4215D10133F1E7194B1B6863 -:10188000DB683A220121184808F07AFE002012E0B5 -:10189000144B1B68DB6831220121144808F070FEEC -:1018A000002008E00F4B1B68DB682E220121104846 -:1018B00008F066FE002070BDAC4211D2426ADB0027 -:1018C000D3185B68994201D10120F4E7054B1B68EE -:1018D000DB682E220121064808F052FE0020EAE7CC -:1018E0000120E8E7EC01000894E70010D0E70010C1 -:1018F00004E8001070B586B004A90120FEF75DFF72 -:10190000041E25D11D4B1B68D86804AB1B78012B26 -:1019100027D0032B23D01A4B04AD6A78A978EE7830 -:10192000029601910092174A174908F0B5FD2B78ED -:10193000012B02D1AB78032B15D0104B1B68DB6851 -:1019400019220121114808F01BFE200006B070BDCD -:1019500030210F4B0F4AFF310F4808F07FFD0F4B2E -:10196000DAE70F4BD8E7054B1B68DB682122012122 -:101970000C4808F005FE0224E7E7C046EC01000829 -:10198000CCE3001034E8001030E400107CE80010D4 -:1019900088E50010FCE8001024E70010D8E30010F0 -:1019A000D0E3001058E80010F0B589B005900C00A5 -:1019B0001500334962681140324A914202D12268CF -:1019C000012A01D009B0F0BD06A91800FEF7F5FE06 -:1019D000002834D12C4B1B68D86806AB1B78012B30 -:1019E00036D0032B32D0294B06AF7A78B978FE78FF -:1019F000029601910092264A264908F04DFD3B7857 -:101A0000032BDFD12900059800F0B6FA002821D178 -:101A10002800FEF7F2FE002823D1A1682800FEF777 -:101A200023FF002824D1280000F010F90028C9D095 -:101A3000B821194B194AFF31194808F00FFDD4217C -:101A4000154B164A4900164808F008FD154BCBE720 -:101A5000154BC9E7D721104B104A4900104808F030 -:101A6000FDFCB2210C4B0D4AFF310D4808F0F6FC8D -:101A7000DA21094B094A4900094808F0EFFCC04641 -:101A800000FF00FF00010004EC010008CCE300109F -:101A900098E8001030E4001088E50010ECE8001031 -:101AA00024E70010D8E30010D0E30010F0B5C646DC -:101AB00000B584B080460E00354B00211960436AA2 -:101AC0005F680023DB19324D29684C1C2C6093425F -:101AD000F8D303A9012000F0F5FD002812D102A9D6 -:101AE000022000F0EFFD002813D10223029A3100FA -:101AF0004046FFF759FF7379012B11D00223737110 -:101B0000012429E0D821234B234AFF31234808F040 -:101B1000A5FCED211F4B204A4900204808F09EFCFF -:101B20001B4B1C6800E0013C002C11D0184B1B68BB -:101B300032689B1A0133A342F5D3029B0193039BA6 -:101B400000933300424639002000FFF76FFCEAE7BC -:101B500001233360D2E701340D4B1B68A3420DD340 -:101B60003368A342F7D8029B0193039B0093330091 -:101B7000424639002000FFF7D1FCECE7039800F063 -:101B8000B5FD029800F0B2FD04B080BCB846F0BDCF -:101B90009C00000888E50010E0E8001024E7001031 -:101BA000012800D170470220FCE7000010B5102288 -:101BB000044908F0FFFC002801D0022010BD0120DC -:101BC000FCE7C046E4E4001030B585B00D0001200C -:101BD00000F078FD041E02D0200005B030BD1023B7 -:101BE0006A460949012000F03DFC041E07D110227D -:101BF0000649684608F0DEFC002800D10400286889 -:101C000000F074FDE8E7C04684110000E4E4001031 -:101C1000004870478311000010B5FFF7F9FF013845 -:101C200010BD10B5FFF7F8FF013810BD10B5FFF774 -:101C3000F8FF043810BD0020704710B5007800F0A0 -:101C40009FFB002800D110BD0120FCE710B50078F3 -:101C50001023044A044900F093FB002800D110BD72 -:101C60000120FCE7E4E400108411000010B5C36D0E -:101C700059689020800107F0E1F810BD30B583B0BD -:101C80000C0001A9012000F01DFD002806D0012450 -:101C9000019800F02BFD200003B030BD0198FFF744 -:101CA000CAFF050001212000FFF7C8FD291863794C -:101CB000012B0ED023790133DBB26A460332137055 -:101CC000019B1878012300F05BFB041EE0D0012487 -:101CD000DEE72379F1E7F0B5C64600B580460F0090 -:101CE0001600002400E00134B44207D23D5D4046B6 -:101CF00000F00EFE8542F6D0002000E0012080BCFE -:101D0000B846F0BDF0B5DE4657464E464546E0B50E -:101D100089B004000E0002A9072000F0D3FC051EC4 -:101D200008D00127380009B0F0BCBB46B246A9462E -:101D3000A046F0BD2078102304AA834900F092FB4E -:101D4000002800DAEEE0102204A90298FFF7C3FF92 -:101D5000071E00DAE8E001286FD004A8FFF726FF8D -:101D600030700023994698462000FFF75AFF010083 -:101D70002078012302AA073200F074FB002800DA61 -:101D8000D4E0012202ABD91D0298FFF7A4FF00287E -:101D900000DACDE002AB07331B780F221A407270D5 -:101DA0001B093371012801D0042A03D90123737060 -:101DB000002333712000FFF72FFF01002078B71CAC -:101DC00001233A0000F04EFB002800DAB2E00122C5 -:101DD00039000298FFF77FFF002800DAACE0012805 -:101DE00063D0B078FFF7DCFEB0702000FFF710FF83 -:101DF00082462078F31C9B4601235A46514600F048 -:101E000031FB002800DA99E0012259460298FFF7D9 -:101E100062FF071E00DA93E0012849D0F078FFF74F -:101E2000BFFEF0704B46002B00D18BE010224146E4 -:101E3000200000F0F3FC070074E7032333702378DD -:101E4000022B05D0062B03D00023994698468BE73A -:101E5000A36810225242944663449846102304AA71 -:101E60004146200000F06EFD8146031E00DA59E76E -:101E700001280DD004A8FFF799FEC0B230700128E8 -:101E80000BD04B46002B00DA4CE7012399466BE759 -:101E9000023333700023994666E72078102304AAA2 -:101EA000294900F06DFA8146EBE70323B3709CE704 -:101EB0000323F3702378052B25D021D8012B22D0C2 -:101EC000022B00D02EE7A3681822524294466344A6 -:101ED000984601235A464146200000F033FD031E78 -:101EE000019000DA1EE7012811D0F078FFF758FEC4 -:101EF000C0B2F07002280DD1019B002B96DA11E7D9 -:101F0000062BE0D00EE7B378012B8BD1DBE7023351 -:101F1000F37087E7207801235A46514600F030FAE3 -:101F20000190E9E70127FDE60127FBE60127F9E635 -:101F30000127F7E60127F5E60127F3E60127F1E699 -:101F40000127EFE62F00EDE68411000030B583B0E5 -:101F50000C0001A9FFF738FE002801D003B030BD06 -:101F6000019D2800FFF762FE01002878042322006B -:101F700000F078FAF2E70000F0B5CE46474680B5AB -:101F800083B007008946294B1B68D8680A7828491E -:101F900008F082FA01A9072000F094FB002806D07F -:101FA0000124200003B0C0BCB946B046F0BD0021FA -:101FB00000F09EFC04000121002000F099FC4B463B -:101FC0001B78A34201D083422ED1180000F048F9BB -:101FD00080463800FFF74AFE441E0025FA6DE300F4 -:101FE000D3185E6819681368C91A41443200019811 -:101FF000FFF7DEF8002811D1013CAD1990239B01B9 -:102000009D42EBD34B46996840394022484600F048 -:1020100005FC0400019800F069FBC2E7054B064A85 -:102020000649074808F01AFA0124BAE7EC0100084B -:1020300028E9001088E50010C0E90010190200002E -:102040004CE9001030B583B00C0015006946022041 -:10205000FEF7B3FB002814D1E979012917D16B46AB -:10206000DB78012B1FD0A9682000FEF7FDFB0028BC -:1020700024D12000FFF7EAFD002825D1002003B07D -:1020800030BD144B144A1549154808F0E7F90022F1 -:102090002000FEF7BDFB0028E1D00E4B0E4A11498F -:1020A0000F4808F0DBF92000FEF7A7FB0028DAD084 -:1020B000084B094A0C490A4808F0D0F9054B064A72 -:1020C0000A49074808F0CAF9024B034A084904487C -:1020D00008F0C4F988E50010ACE900103E020000E9 -:1020E0004CE9001042020000470200004B020000D1 -:1020F0005602000070B584B005000E00FFF7FAFB31 -:10210000041EF06008D0022809D103A9012000F0C4 -:10211000D9FA002809D00124200004B070BD1E4B5C -:102120001E4A1F491F4808F099F902A9072000F02C -:10213000C9FA002801D00124EEE7320029000398F3 -:10214000FFF7D2FA041E19D10398FFF76AFD0100C8 -:1021500001236A460732012000F084F901226B4610 -:10216000D91D0298FFF7B7FD002813DB01280CD01A -:102170006B46DA790F231340F3710400039800F0E3 -:10218000B5FA029800F0B2FAC6E76B460122DA719E -:102190002000EDE70124BFE7E0E5001098E900101A -:1021A0006F0200004CE9001010B5FA21490006F05A -:1021B00045FE10BD10B5FFF7F7FF400210BD10B58A -:1021C000FEF714FC10BD000070B5204CA5440400BF -:1021D0000E001D000132839201A9072000F072FA5F -:1021E000002805D00124200084239B009D4470BD5D -:1021F000FA225200290002A808F0EAF9839B809392 -:10220000134B1B687F93FE21490002A8FFF7D7FFFD -:1022100082908190012E10D00136F1008919490277 -:10222000091980239B0002AA019800F0A1FA041E5C -:1022300005D1019800F05AFAD5E70026EDE7054BE5 -:10224000054AE921054808F009F9C046F0FDFFFFFD -:10225000C4EA001088E500107CEA0010DCE90010F8 -:10226000012804D0022804D190208001704700206A -:10227000FCE701204042F9E7F0B5DE4657464E46FE -:102280004546E0B5394CA54481460191029205A925 -:10229000072000F017FA061E63D100250023984698 -:1022A00000279A4603930CE0859B9B46FE2149003C -:1022B00006A8FFF784FF584518D001239C46E24446 -:1022C0000135012D19D8EC00641964024C448023B7 -:1022D0009B0006AA2100059800F00AFA002842D1C6 -:1022E000234B839A9A42DFD00137E9E7849B9845D4 -:1022F000E6D82E0098460394E2E7022F11D0534609 -:10230000022B1CD101267642059800F0EFF930002F -:1023100087239B009D44F0BCBB46B246A946A0461D -:10232000F0BD0023029A1360059800F0F1FA010055 -:10233000FA225200019808F054F90126E4E7029BC2 -:1023400042461A60FA235B00019A0399059800F04F -:10235000CFF90028D8D0074B074AAB21074808F02F -:102360007DF80126D3E70126D1E7C046E4FDFFFF53 -:10237000AFBEADDE88E50010ACEA0010DCE900106D -:10238000F0B5CE46474680B5FFB007000C00914639 -:102390001E00FA214900200006F0D6FD0D0032197A -:1023A0002A4B9A420DD83800FFF75AFF071E0FDB61 -:1023B0002000FFF7FFFEC719002398460120404286 -:1023C00026E00E21224B234AFF31234808F046F82D -:1023D0001221224B1F4AFF311F4808F03FF85A1BB9 -:1023E000280068444946414408F0F2F86B467D9A5B -:1023F00021003800FFF7E8FE002818D1F53EFF3E27 -:1024000080239B009C4667440C3B9C46E04400258F -:10241000002E15DD7DAA69463800FFF72DFF041E4A -:102420000CDBFA235B009E42D9DC3200D8E72E2178 -:102430000B4B084AFF31084808F010F801204042D1 -:102440007FB0C0BCB946B046F0BDC0469411000094 -:1024500028EA001098EA0010DCE9001054EA0010A5 -:1024600088E50010F0B5C64600B5FEB005000E00C8 -:1024700090461C00FA214900300006F065FD0F006F -:10248000A219214B9A420AD82800FFF7E9FE051E3F -:102490000CDB3000FFF78EFE451900261DE0AA2157 -:1024A0001A4B1B4A49001B4807F0D8FFAC211A4BB6 -:1024B000174A4900174807F0D1FF22003900694444 -:1024C0004346981908F084F8F53CFF3C80239B00B4 -:1024D0009C466544F536FF360027002C0CDD7DAAAE -:1024E00069462800FFF7C8FE00280ADBFA235B00D4 -:1024F0009C42E2DDDA1BE1E700207EB080BCB846FA -:10250000F0BD01204042F8E79411000028EA0010D5 -:1025100064EA0010DCE9001054EA0010F0B5D64679 -:102520004F464646C0B582B004000D0017009946DC -:102530000AAA13789A46002845D0002947D0002FD0 -:1025400049D00E89CB689C466644042301AA310019 -:10255000380000F0CDF88046002840D101AB1A8841 -:10256000274B9A421FD06B89002B40D101AB1A88B0 -:10257000244B9A423FD1256067604B4623815346E6 -:10258000A3726B899B19E3606B899B1901AA52881E -:102590009B18636104362661404602B0E0BCBA462F -:1025A000B146A846F0BD6B8901AA51888B421AD169 -:1025B00089190423380000F09BF80028D6D00123A5 -:1025C0005B429846E8E701235B429846E4E7012333 -:1025D0005B429846E0E701235B429846DCE7012333 -:1025E0005B429846D8E701235B429846D4E7012333 -:1025F0005B429846D0E701235B429846CCE7C04651 -:102600000869000007690000F0B583B004000F00FE -:1026100016001D00002848D00368002B48D04368EE -:10262000002B20D1012040423BE0042301AA216974 -:10263000606800F05DF800283DD1A37A002B03D03C -:102640002369E268934239D223891D4A934218D004 -:1026500001AA1288934214D001AB5B882269944688 -:102660006344043323612369626993421BD2226865 -:102670005289002AD9D0E2689A42D6D10433236124 -:10268000D3E7002D02D001AB1B882B8023690433D4 -:102690003B6001AB5B88338022699446634404331A -:1026A000236103B0F0BD0120FBE701204042F8E7C1 -:1026B00001204042F5E701204042F2E70120F0E727 -:1026C000FFFF000010B5002200E001329300064C2D -:1026D0001B59002B05D01C788442F6D10B600020DA -:1026E00001E00120404210BDA0000008704700003A -:1026F00070B5150044688C4214D9CA18944218D990 -:10270000611842787F2A1BD052B2002A1EDB0124B6 -:102710006442114B1B68D8682200104907F0BCFEC8 -:10272000200070BD20210E4B0E4AFF310E4807F0ED -:1027300095FE90210D4B0B4A49000B4807F08EFE89 -:102740001A00280007F044FF0024E9E72A0000F0FF -:102750006FF9041EE4D0DCE7EC01000844EB001044 -:10276000C8EA001098EC0010DCEA00102CEB001016 -:10277000F8B5150044688C420CD9CA18944210D997 -:10278000641842787F2A13D052B2002A34DB012029 -:102790004042F8BDA3211B4B1B4A49001B4807F0D0 -:1027A0005DFE48211A4B184AFF31184807F056FEC3 -:1027B000DA0506D1E205D00D002A09D15F0A06002C -:1027C00017E0A921134B104A4900104807F046FEB4 -:1027D0005421114B0C4AFF310C4807F03FFE2900F1 -:1027E000200002F017F980239B009C466444654456 -:1027F0000136BE42F3D3CCE72A00210000F040F9B5 -:10280000C7E7C046C8EA001084EC0010DCEA0010FC -:102810002CEB00106CEB00108CEB001070B5836893 -:10282000934211D38B4216D9541845685B199C42C8 -:1028300018D26D18531941787F291AD049B200294E -:1028400034DB0120404270BDBC211B4B1B4A4900B8 -:102850001B4807F003FE7A211A4B184AFF3118482B -:1028600007F0FCFDBD21184B144A4900144807F03D -:10287000F5FD6D0A6D025B0A5B029D4212D05B1B87 -:102880005C0A0020002CDED0013C6002401902F0FE -:1028900087F80028F6D094210C4B084AFF310848ED -:1028A00007F0DCFD280002F07BF8CCE711002800DF -:1028B00000F00EF9C7E7C046B8EB001070EC00104E -:1028C000DCEA0010CCEB0010E0EB001008EC00108C -:1028D00010B543787F2B08D05BB2002B02DB0120C0 -:1028E000404210BD00F0C6FBFBE780208000F8E707 -:1028F000012908D0022908D0002902D00120404235 -:1029000070470120FCE70220FAE70320F8E7000007 -:1029100010B543787F2B0BD05BB2002B02DAFF207F -:10292000C0B210BD034B044A0449054807F096FDA8 -:102930000020F5E724EC001058EC00101F02000006 -:10294000DCEA0010F8B5CE46474680B50700904651 -:102950001E00FFF7CDFE814600280FD10024B442AF -:1029600009D243461D5D3800FFF7D2FF854208D1EA -:102970000134E4B2F3E70123994602E001235B420C -:1029800099464846C0BCB946B046F8BDF8B50E00F9 -:102990001500002200E00132930020495B58002B13 -:1029A00004D019788142F6D11C0000E01C00002BF5 -:1029B0002ED063787F2B11D05BB2002B2BDA00F086 -:1029C00061FB0700A368D8190138390006F036FA10 -:1029D000336883420BD36268002414E0072802D1D5 -:1029E0008027BF00EEE700F04DFB0700EAE70C4B45 -:1029F0000C4A0D490D4807F031FDE300EB185F600C -:102A00001A60D21901348442F7D330600020F8BD37 -:102A100001204042FBE701204042F8E7A000000807 -:102A20002CEC001040EC001072020000DCEA0010F8 -:102A3000F0B5C64600B582B00E0017001C00437802 -:102A40007F20184000F0AEFA0500E8231B069C46E4 -:102A5000664400F0AFFA804600F0B0FA01900094AE -:102A60003B0032002900404604F0F6F9002804D16A -:102A7000002002B080BCB846F0BD01204042F8E71B -:102A8000F0B5C64600B582B00E0017001C004378B2 -:102A90007F20184000F086FA0500E8231B069C46BC -:102AA000664400F087FA804600F088FA01900094AE -:102AB0003B0032002900404604F048FA002804D1C7 -:102AC000002002B080BCB846F0BD01204042F8E7CB -:102AD000F0B583B00500002000F064FA0400E8239C -:102AE0001B06E818A3699D696D42054000F062FA73 -:102AF0000600A3699F6900F061FA00903B002A007C -:102B00002100300004F0C0FA002802D1002003B0F8 -:102B1000F0BD01204042FAE7F0B5C64600B58C682A -:102B20000A688423C3580F252B40073DED1A230064 -:102B3000AC4226D92B0024E055782D021678354377 -:102B4000D678360697783F043E4335439827C551DB -:102B500055792D0216793543A846D67936069579EA -:102B60002D042E4345463543C551D218E41A84231B -:102B7000C3580F252B40073DED1A2300AC4200D966 -:102B80002B00002B00D183E0082BD5D0012B24D0C3 -:102B9000022B26D0032B2BD0042B33D0052B3ED079 -:102BA000062B4CD0072B5DD053781B0215782B4396 -:102BB000D5782D069678360435432B4398268351D5 -:102BC00053791B0215792B43D5792D0697793F044C -:102BD0003D432B4383510823C7E716789025465180 -:102BE000C3E755782D021678354394268551BCE706 -:102BF00055782D0216783543942685519678902580 -:102C00004651B2E755782D0216783543D678360608 -:102C100097783F043E43354398268551A5E755787C -:102C20002D0216783543D678360697783F043E4312 -:102C300035439826855116799025465195E7557864 -:102C40002D0216783543D678360697783F043E43F2 -:102C500035439826855155792D02167935439426AA -:102C6000855182E755782D0216783543D678360699 -:102C700097783F043E4335439826855155792D0278 -:102C800016793543942685519679902546516CE7FF -:102C90000A608C60002C0CD1F924E4000359012255 -:102CA000934303518A61CB69002B02D0CB69012089 -:102CB000984780BCB846F0BDF8B50E004C69CA68AC -:102CC000C423C3580F21194023008C421CD90B0088 -:102CD0001AE0D825415911700F0A57700F0C9770E0 -:102CE000090ED17045591571290A5171290C91713C -:102CF0002D0ED571D218E41AC423C3580F251D40D8 -:102D00002300AC4200D92B00002B6DD0082BE0D063 -:102D1000012B1ED0022B20D0032B24D0042B2BD030 -:102D2000052B33D0062B3ED0072B4BD0D821435850 -:102D300013701D0A55701D0C95701B0ED3704358EF -:102D40001371190A5171190C91711B0ED37108235B -:102D5000D0E7D02141581170CCE7D42141581170EF -:102D6000090A5170C6E7D42141581170090A5170FF -:102D7000D02141589170BDE7D821415811700D0AFA -:102D800055700D0C9570090ED170B3E7D8214158DC -:102D900011700D0A55700D0C9570090ED170D0216F -:102DA00041581171A6E7D821415811700D0A55708C -:102DB0000D0C9570090ED170D42141581171090A7A -:102DC000517197E7D821415811700D0A55700D0CBB -:102DD0009570090ED170D42141581171090A5171B1 -:102DE000D0214158917185E7F2607461002C0DD1BA -:102DF000F922D200835802218B4383500323B3610D -:102E0000336A002B02D0336A032098477461F8BDFF -:102E100010B5264A264BD358DA070DD49A0716D494 -:102E20005A071FD5234B05229A61204AF823DB005D -:102E30000421D150D35809E01C4C1E492000FFF753 -:102E40006BFEF823DB000122E250E35810BD174C63 -:102E500018492000FFF730FFF823DB000222E25080 -:102E6000E358F3E71A0709D5124B06229A610F4A75 -:102E7000F823DB000821D150D358E7E7DA0609D55B -:102E80000C4B07229A61094AF823DB001021D1502C -:102E9000D358DBE79B06D9D5064B08229A61034A33 -:102EA000F823DB002021D150D358CFE70000424067 -:102EB000CC070000805E010810B52E4C2E4A03217D -:102EC000200001F0EBFE11220321200001F00CFE96 -:102ED0002A4A0421200001F0E1FE112204212000F1 -:102EE00001F002FE264A0521200001F0D7FE112242 -:102EF0000521200001F0F8FD224A0621200001F002 -:102F0000CDFE11220621200001F0EEFD1E4A072110 -:102F1000200001F0C3FE11220721200001F0E4FD92 -:102F20000021022004F052FB0221022004F07EFB6B -:102F3000022004F017FB1549154805F0BBF8FA22EA -:102F4000144B92001449154802F040FD041E0FD1A5 -:102F50000F4B00229B5E002B06DB1F2213401E3A04 -:102F60009A4013000E4A13600A490C4802F00CFF05 -:102F7000200010BD8005314044ED001010ED001020 -:102F8000DCEC0010A8EC001078ED0010112E001001 -:102F9000E4010008805E0108ACED00100000424032 -:102FA00000E100E0024B1B685B688000C05870477E -:102FB000385F0108004870470000424000487047F1 -:102FC000805E010810B50400FFF776FF002800D0EE -:102FD00010BD044B1C60044A2100044803F02EFE7F -:102FE000F6E7C046385F0108805E010800004240F5 -:102FF00070B51D4B5B68032831D00AD8012811D069 -:10300000022803D11B6802221A700EE00120404200 -:1030100024E0042803D11B6808221A7005E001206F -:1030200040421BE01B6801221A7001380F4A43001E -:10303000191889008C581918890051184D680E7A92 -:103040000B4A16722900200001F028FE32002900E8 -:10305000200001F049FD0448FFF7B4FF70BD1B6874 -:1030600004221A70E1E7C046D40100088C01000870 -:10307000E4000008024B5B681B689B69586A704754 -:10308000D4010008024B5B681B689B699869704714 -:10309000D401000870B504001D4D280003F040FB6A -:1030A0002B685B005B082B60022004F073FA194B5D -:1030B00000229B5E002B0BDB1F2213401E3A9A401E -:1030C0001300154980228B50BFF34F8FBFF36F8FD2 -:1030D000104B59880020185E04F0BAFF013C6000D4 -:1030E000001980000D4BC05801F0D4FC0C4C20009E -:1030F00001F0D0FC200001F0CDFC200001F0CAFC62 -:10310000200001F0C7FC200001F0C4FC70BDC046E7 -:1031100000004240E401000800E100E08C010008EA -:1031200080053140074BC200D05A9B1859889A88B5 -:10313000DB88084310431843C0B2431E9841C0B215 -:103140007047C046845F010870B515000024002C4C -:1031500002D0124C200070BDA3005B195B00104A26 -:103160009A5A6B000F4E9B5B9A4201D30134EEE7F3 -:1031700000230B704C700C4B03602000FFF7D2FF54 -:10318000002807D00649A20055196D006B5A01337B -:103190006B52DFE7044800F0FDFBF3E7011000008D -:1031A000845F0108BCED00100000104070B50600FF -:1031B0000D004C78A3009B185B0010495B5A002B54 -:1031C00004D0A400A4186400013B63526878FFF7A0 -:1031D000A9FF002800D070BD094B1B68002B05D04B -:1031E0003368002B05DB01232B70F4E700F026FB8E -:1031F000F6E7300000F014FCF5E7C046845F0108F4 -:10320000D85F010870B504000D0000280BD0211D07 -:103210002A002000FFF798FF002800D1A571434243 -:103220005841C0B270BD01BEF1E710B5002803D00F -:103230000379002B02D010BD01BEF9E782790100AD -:1032400001C9FFF7B3FFF6E730B583B005000C0006 -:10325000002801D0002901D103B030BD0321684608 -:10326000FFF7D0FF002803D16846FFF7DEFFF3E742 -:103270000098A3B2074A11682D228A5C1F2A04D83D -:103280000022290000F07AFCEEE70022290000F07D -:1032900003FDE9E7D45F010810B5041E01D0002941 -:1032A00000D110BDFFF7D0FF03212000FFF7AAFFD8 -:1032B000F7E7000070B505000C1E22D0002B23D0CC -:1032C000006816490E682D21715C1F2911D8210054 -:1032D00000F05EFD00281AD12868104B1A682D23D3 -:1032E000D35C1F2B09D8210000F008FE002811D163 -:1032F00070BD210000F0D6FEECE7210000F060FF79 -:10330000F4E701204042F3E701204042F0E70120CA -:103310004042EDE701204042EAE7C046D45F0108A1 -:1033200070B5002913D0002A14D0CC68002C14D01A -:1033300000680D4C25682D242C5D1F2C04D800F04E -:10334000F3FD00280CD170BD00F050FFF9E701201B -:103350004042F8E701204042F5E701204042F2E711 -:1033600001204042EFE7C046D45F010810B50029B4 -:1033700013D0002A14D0CB68002B14D000680D4B5A -:103380001C682D23E35C1F2B04D800F019FE0028D5 -:103390000CD110BD01F0C6F8F9E701204042F8E772 -:1033A00001204042F5E701204042F2E7012040427F -:1033B000EFE7C046D45F010810B59821FFF76CFF16 -:1033C00010BD10B50B0001000831002B05D1022201 -:1033D00003003833FFF76EFF10BD0122F8E710B588 -:1033E0000C00131E01D1002010BD01000831220085 -:1033F000FFF796FFF8E710B50A0001000831FFF764 -:10340000B5FF10BD10B50549C02252008B580120F0 -:1034100003438B5005F008FD10BDC0460000264058 -:103420000349C02252008B58012083438B507047C0 -:103430000000264070B50400421E304B9A4256D818 -:103440002F4B1B78002B55D12D4B01221A702D4B81 -:103450001B78002B0ED0FFF7E3FF2B4B1C800023C3 -:103460000C2B1FD89900294A52185288A24212D90F -:103470000133F5E7264D8032FF32AB580126334346 -:10348000AB5005F0D1FCE122D200AB58B343AB50B6 -:103490001C4B1E70DFE70A001C49525AA24202D997 -:1034A000140000E00C231B4A1370FF251D40280068 -:1034B00005F0A0FC2004000C06F02CFE164A174B69 -:1034C00005F06AFF05F07EFE82B211235B1B01202E -:1034D0009840101A80B20E4AC2235B00D358C0181D -:1034E00080B205F06FFCFFF78DFF002070BD01205A -:1034F0004042FBE701204042F8E7C0466F1700005A -:10350000905F0108915F01088E5F0108C4ED001013 -:10351000000026408C5F010833DFC14F1C409F3FF5 -:10352000064AD0239B00D05803E0044AD0239B00D6 -:10353000D058431CF9D0C0B27047C0460000654067 -:1035400010B50400002003E02100034801F0E8FE6C -:103550000028F9D010BDC0460000654070B50600D7 -:103560000D00002102F0AAF80021012003F016FF4F -:10357000040004F01DFDE9004B08C01805F05EFCD6 -:10358000421E002C08D0002C0CD0326880231B0671 -:1035900013433360200070BD0021012003F03CFE86 -:1035A0000400F0E70021012003F0B6FE0400ECE780 -:1035B00070B50C001600002901D0002509E0002597 -:1035C000280070BD2078094B1870FFF7B9FF01344F -:1035D0000135B542F4DA23780A2BF3D1034B1B787B -:1035E0000D2BEFD00D20FFF7ABFFEBE7D05F01080D -:1035F00070B50C001600002901D0002503E000255D -:10360000280070BD0134B542FADAFFF789FF207057 -:1036100001350A28F4D00D28F4D1F1E710B50400E3 -:103620000A4A0B490B4801F08FFE002808D00028F9 -:1036300005D1084A116880231B060B43136010BD97 -:1036400021000448FFF78AFFF1E7C046945F0108B4 -:10365000B8DE00100000654070B505000C0007E002 -:103660000B4B1B689800C0184000FCF78DFF013C15 -:10367000002C0BD082229200AB58DB05DB0DA95841 -:10368000C90B01220A409B18002BE9D170BDC0462E -:103690009000000810B5024801F0DEFF10BDC046E2 -:1036A00000006540014B18607047C046D45F0108B8 -:1036B000F0B51F001D4B1E68002E2DD0B36B1B18DC -:1036C0001B68346D2418E41A631E9C41E3B29C46C7 -:1036D000B368C41825680F242C40062CF8D81306AC -:1036E000F26882183B43136063460B4313D00F4BC1 -:1036F0001B689B68C3181B68DB03F8D50C4B1A6862 -:103700002D23D35C1F2B09D8084B1B681B681B1883 -:103710001B681B06F8D4F0BD3300D2E7034B1B68CF -:103720001B681B181B68002BF8D1F4E7D85F010851 -:10373000D45F010810B50400E0239B05802200211E -:10374000FFF7B6FFD0239B05802200212000FFF762 -:10375000AFFFC0239B05802200212000FFF7A8FFB8 -:10376000B0239B05802200212000FFF7A1FFA023AA -:103770009B05802200212000FFF79AFF90239B05E4 -:10378000802200212000FFF793FF80239B058022E9 -:1037900000212000FFF78CFFE0235B058022002141 -:1037A0002000FFF785FFC0235B0580220021200059 -:1037B000FFF77EFFA0235B05802200212000FFF79A -:1037C00077FF80235B05802200212000FFF770FF38 -:1037D000C0231B05802200212000FFF769FF802302 -:1037E0001B05802200212000FFF762FF8023DB04FD -:1037F000802200212000FFF75BFF002380220021B0 -:103800002000FFF755FF0B4B1B689B080A4A116805 -:103810002D228A5C1F2A0AD80C229340F02292059E -:103820001343802200212000FFF742FF10BD0D222C -:10383000F3E7C046DC5F0108D45F0108054B1A6856 -:103840002D23D35C1F2B03D8034A044B1A60704707 -:10385000034AFAE7D45F0108B8EE0010D85F010808 -:103860000CEF0010F0B583B01400444B1B68002B24 -:1038700075D0002918D0002973D0002C73D0802275 -:103880001202944200D972E080225201944239D04F -:1038900021D88022D200944236D00ED98022120143 -:1038A000944216D1782225E0002AE4D11A6D11182D -:1038B000334A1268D46CA400DDE78022520094429F -:1038C00024D00132FF32944201D17E2212E02D4DEC -:1038D0004AE02C4D48E08022D201944218D0802248 -:1038E0001202944201D1002204E08022920194420B -:1038F0003FD16022224D2E682D25765D1F2E09D9DD -:10390000671E08E07022F5E77C22F3E77F22F1E7EB -:103910004022EFE71C4F01910D003D4039422AD172 -:103920001F2E02D91202194942509B6B1B18019A93 -:103930001A60A308124A11682D228A5C1F2A0CD82B -:103940000C2293401A00F0239B0513438022002190 -:10395000FFF7AEFE0E4B1C6006E00D22F1E7094DAD -:1039600002E0084D00E0074D280003B0F0BD054D12 -:10397000FAE7044DF8E7034DF6E7C046D85F0108C3 -:10398000D45F01080B003200FF3F000088140000E4 -:10399000DC5F010810B50400FFF750FF1A4B1A68EE -:1039A0002D23D35C1F2B10D8184B2360184B1B689A -:1039B0005B6B1B1901221A60164B1B68002B16D07B -:1039C0002000FFF7B7FE002010BD2368124A134005 -:1039D00023600F4B1B685B681B19104A1A60226832 -:1039E00080231B06134323600323A360DEE7084BF9 -:1039F0001B68196D6118044B1B68DA6C920020007B -:103A0000FFF730FFDCE7C046D45F01080300008009 -:103A1000D85F0108DC5F0108FFFFFE7F01000200A4 -:103A2000084B1A682D23D35C1F2B06D80023036094 -:103A3000054B00221A60002070470023036083605A -:103A4000F6E7C046D45F0108DC5F010870B50D4C95 -:103A50002568AC68241826680F243440042CF6D856 -:103A6000EC680419084D2560064C2568ED68451979 -:103A700029602168C96841180A602268D2688018E4 -:103A8000036070BDD85F01081002004270B50F4C92 -:103A90002568AC68241826680C242642F7D1EC6807 -:103AA00004190B4D2560094C2568ED6845192960FE -:103AB0002168C96841180A602268D26882181360B8 -:103AC0002368DB68C018049B036070BDD85F0108E1 -:103AD0001032004370B51D0004AB1E78084A14680C -:103AE000A3681A1812681307F8D409060223B34012 -:103AF00019430123AB40E26880181943016070BD8F -:103B0000D85F010830B51D000B4A1468A3681A1865 -:103B100012681307F8D409060323049A9340194343 -:103B20000223039A934019430123AB40E2688018B3 -:103B30001943016030BDC046D85F010810B582B09E -:103B4000040008001100002B01D102B010BD0200DA -:103B50002000FFF77BFF08230093043B0022502145 -:103B60002000FFF7B7FF044B1B681B681B191B687D -:103B7000DB06F8D4E9E7C046D85F010810B582B08B -:103B8000040010001A1E01D102B010BD0300200075 -:103B9000FFF75CFF0C230093043B0022512120001F -:103BA000FFF798FF034B1B681B681B191B68DB069C -:103BB000F8D4E9E7D85F0108F0B5002B00D1F0BDDB -:103BC0001E00314C2568AC68241827680F243C403F -:103BD000042CF6D8862464010459002CFADBEC6826 -:103BE00004192A4D2560284D2C68E46804192260C8 -:103BF0002A68D26882181660234A1468A2681218CC -:103C000015680F222A40042AF6D8E2688218204C50 -:103C100014601D4C2268D268821811602268D26834 -:103C2000821816600EE0184A11688A681218146823 -:103C30000F222240062AF6D8CA6882181549116058 -:103C4000103B9BB20F2BEED8002B07D10E4B1B68FD -:103C50001B681B181B68002BF8D1B0E70A4A1168D3 -:103C60008A68121814680F222240062AF6D81B040C -:103C7000C02212021343CA68821808210B43802114 -:103C8000C9050B431360E1E7D85F01080800007124 -:103C90000C00007008C01040F0B5002B00D1F0BD42 -:103CA0001F00264C2568AC68241826680F24344071 -:103CB000042CF6D8EC680419214D25601F4D2C68A2 -:103CC000E468041921602968C96841180F600F2B46 -:103CD00014D91A490C68A16809180D680F212940E8 -:103CE0000629F6D8E168411886256D03154384241A -:103CF000E4052C430C60103B9BB2E8E7002B07D196 -:103D00000E4B1B681B681B181B68002BF8D1C6E7FD -:103D10000A490C68A16809180D680F212940062975 -:103D2000F6D81B04C02109020B43E16841181A436D -:103D30008423DB051A430A60E2E7C046D85F010826 -:103D40000C00007010B582B004000B0011000722B7 -:103D500058680240C020800022501A699B69009276 -:103D60002000FFF793FE0C230193043B0093043BD8 -:103D700000224C212000FFF7C5FE044B1B681B6886 -:103D80001B191B685B07F8D402B010BDD85F01088F -:103D900010B5002B01D0002900D101BE062A00D9A0 -:103DA00098E090004C4C205887468B6018004030BB -:103DB000086154338B610A6000234B60474BCB6230 -:103DC0004023CB602C3B4B614B622D33FF33CB61E7 -:103DD000002010BD8B6018004030086160338B619B -:103DE0000A6001234B603E4BCB624023CB60203BFB -:103DF0004B61043B4B62E433CB610020E9E78B600D -:103E000018004030086160338B610A6001234B6009 -:103E1000344BCB624023CB60203B4B614B62E033A1 -:103E2000CB610020D5E78B60180080300861C0337B -:103E30008B610A6002234B602B4BCB628023CB60EB -:103E4000403B4B61103B4B62A0239B00CB610020A9 -:103E5000BFE78B60180080300861C0338B610A6057 -:103E600002234B60214BCB628023CB60403B4B61F4 -:103E70004B62A0239B00CB610020AAE78B60180057 -:103E800080300861C0338B610A6002234B60184B9D -:103E9000CB628023CB60403B4B61243B4B62A02331 -:103EA0009B00CB61002094E78B6018008030086194 -:103EB000C0338B610A6002234B600E4BCB628023C0 -:103EC000CB60403B4B61203B4B62A0239B00CB610E -:103ED00000207EE708487CE760EF00107CEF0010D0 -:103EE00090EF0010B0EF0010D0EF001010F00010B5 -:103EF00050F0001090F000100B00320010B50A1EB8 -:103F00000ED000238B620B624B69002B01D1054858 -:103F100010BD0969D26A9BB2FFF710FE0020F7E7D7 -:103F20000048F5E70B003200F0B5D6464F4646464E -:103F3000C0B581460E001700002931D0002A31D0CB -:103F4000CA689046002A2FD0002B34D00A6AD218B3 -:103F50000A628C6A1D0014E043461B1B9A46B36834 -:103F6000191953469BB23A004846FFF7E7FDB2687D -:103F700031004846FFF7E6FE4346E41A2D19574440 -:103F800000242B199845E7D9B362002D0DD0B168F4 -:103F90000919ABB23A004846FFF7D0FD002504E00E -:103FA000064D02E0054D00E0044D2800E0BCBA4695 -:103FB000B146A846F0BD1D00F7E7C0460B00320031 -:103FC000F0B5DE4657464E464546E0B583B0009014 -:103FD0000E00140000295FD0002A5FD00D698B68A5 -:103FE0009846CF688B6A9A460B6ADB009946802F09 -:103FF0002DD038230193802342465146535401313A -:104000004144BBB29B4652469B1A9BB2013B9BB2BA -:1040100000220098FFF7B2FD019B53451AD93B1FC0 -:104020004A46120E4146CA544B461A0CFB1ECA544D -:104030004B461A0ABB1ECA54013F4A46CA5542465D -:1040400031000098FFF77EFE706A80081BE0702345 -:104050000193D0E742463100009B9A461800FFF7D3 -:1040600071FE5B46002241465046FFF787FDD6E7CA -:10407000EB782370AB7863706B78A3702B78E37068 -:104080000434043501380028F2D103B0F0BCBB463B -:10409000B246A946A046F0BD0148F6E70048F4E75D -:1040A0000B00320010B5002B01D0002900D101BE59 -:1040B000062A00D970E09000384C205887468B6063 -:1040C00040330B610A6069234B60354BCB62402360 -:1040D000CB602C3B4B614B62002010BD8B604033AA -:1040E0000B610A606A234B602E4BCB624023CB608E -:1040F000203B4B614B620020EFE78B6040330B614C -:104100000A606A234B60284BCB624023CB60203B84 -:104110004B61043B4B620020DFE78B6080330B6117 -:104120000A606B234B60214BCB628023CB60403B0A -:104130004B614B620020D0E78B6080330B610A60DB -:104140006B234B601A4BCB628023CB60403B4B61AF -:10415000103B4B620020C0E78B6080330B610A602C -:104160006B234B60134BCB628023CB60403B4B6196 -:10417000203B4B620020B0E78B6080330B610A600C -:104180006B234B600C4BCB628023CB60403B4B617D -:10419000243B4B620020A0E708489EE7D0F00010C7 -:1041A000ECF0001020F1001000F1001080F1001080 -:1041B00040F1001000F20010C0F100100B003200BE -:1041C00010B50A1E0ED000238B620B624B69002BC8 -:1041D00001D1054810BD0969D26A9BB2FFF7ECFC1A -:1041E0000020F7E70048F5E70B003200F0B5D646AF -:1041F0004F464646C0B504009146002900D180E1F3 -:10420000002A00D17FE1CE68002E00D17DE1002B95 -:1042100005D11800E0BCBA46B146A846F0BD0A6A0E -:10422000D01808628D6ABA480768BA68101902681F -:104230000F2010400628F6D8F8682018C827FF0578 -:104240000760B34800680068001900680028F8D1CA -:104250000A6990464A699446AD480768BA681019D9 -:1042600002680F2010400428F6D8F8682018A94FDB -:104270000760A74F3868C068201842460260386857 -:10428000C0682018624602604A699446A0480768E0 -:10429000BA68101902680F2010400628F6D8F8688E -:1042A0002018CC27FF05624617430760984800682E -:1042B0000068201802689246002AF7D194480268E4 -:1042C0009068001907680F2038400628F6D8D06893 -:1042D0002018CA22D2050260002D48D18C480268FD -:1042E0009068001907680F2038400428F6D8862007 -:1042F000400120580028FADBD0682018864A026066 -:10430000834A94461068C06820184A460260624694 -:104310001268D268A21813605A19964257D8721BB5 -:1043200090467B4A10688268121917680F223A403B -:10433000062AF6D82A02C068201847461743CC221E -:10434000D2053A4302604A689046714A1068826812 -:10435000121917680F223A40062AF6D8C268A21826 -:10436000404600061060AD1B5B195546D4E78A68CD -:104370009046674802689068001907680F20384027 -:104380000428F6D8D0682018624A0260604A106893 -:10439000C0682018474607601068C068201805608C -:1043A0005B4802689068001907680F2038400628AB -:1043B000F6D8D0682018CC22D2052A43026054488F -:1043C00000680068201800680028F8D186E78A6233 -:1043D000002B4ED18D6A002D64D10E694D694C4B76 -:1043E0001A6893681B1918680F230340042BF6D82A -:1043F000D368E318494A1A60454A1368DB68E31832 -:104400001E601368DB68E3181D60414B1A689368EF -:104410001B1918680F230340062BF6D8D368E3183E -:10442000CA22D2051A604869394B1A6893681B1969 -:1044300019680F230B40062BF6D8D368E318CE2259 -:10444000D20502431A60324B1B681B68E3181868D8 -:104450000028F8D12E4B1A6893681B1919680F238E -:104460000B40062BF6D8D368E418CA23DB0523607B -:10447000D0E6274A10688268121916680F22324067 -:10448000062AF6D82D02C268A2182B43CC25ED05CA -:104490002B4313601E4B1B681B68E3181B68002B23 -:1044A000F8D197E78E681A4B1A6893681B19186839 -:1044B0000F230340042BF6D8D368E318174A1A6079 -:1044C000134A1368DB68E3181E601368DB68E3189F -:1044D0001D608D6A0E4B1A6893681B1918680F23AC -:1044E0000340062BF6D8D368E318CE22D2052A4320 -:1044F0001A60074B1B681B68E3181B68002BF8D178 -:104500006BE7074886E6064884E6054882E6C0462B -:10451000D85F010808000070080000710C000070EE -:104520000B003200F0B5DE4657464E464546E0B534 -:1045300083B003000192002900D198E1002A00D144 -:1045400097E1CC688E6A0D6A6A0F9346ED00802C65 -:1045500000D171E138229446C7480768BA68D0187C -:1045600002680F2010400628F6D8F8681818C827E7 -:10457000FF050760C04800680068C0180068002890 -:10458000F8D10A6991464A699046BB480768BA68FB -:10459000D01802680F2010400428F6D8F8681818C0 -:1045A000B64A0260B44A92461068C06818184A4673 -:1045B000026052461068C0681818424602604A6994 -:1045C0009146AD480768BA68D01802680F201040BD -:1045D0000628F6D8F8681818CC22D2054F4617439B -:1045E0000760A54800680068181800680028F8D11E -:1045F000A1480768BA68D01802680F201040062842 -:10460000F6D8F8681818CA27FF0507608A68904628 -:1046100099480768BA68D01802680F20104004282B -:10462000F6D8F8681818954F0760934F3868C06837 -:104630001818424602603868C068181806608E482C -:104640000768BA68D01802680F2010400628F6D80C -:10465000F8681818CC27FF053743076086480068BC -:104660000068181800680028F8D183480768BA68FD -:10467000D01802680F2010400628F6D83202914662 -:10468000F8681818802290464A4647463A439146B1 -:10469000D022D20590464A4647463A430260B44586 -:1046A00000D8CCE0621F94465A46D2B29046724877 -:1046B0000668B268D01807680F2038400628F6D878 -:1046C00062461702F068181842461743D026F605CE -:1046D00037430760221F90462A0E944666480668B4 -:1046E000B268D01807680F2038400628F6D842462E -:1046F0001002F6689E1962461043D027FF05384322 -:104700003060E21E9046280CC2B294465A480668B1 -:10471000B268D01807680F2038400628F6D84246FD -:104720001002F6689E1962461043D027FF053843F1 -:104730003060A21E9046280AC2B294464E480668CF -:10474000B268D01807680F2038400628F6D84246CD -:104750001002F6689E1962461043D027FF053843C1 -:104760003060013CEAB2944643480668B268D0180B -:1047700007680F2038400628F6D82502F068181878 -:1047800062461543D024E405254305604E683A4847 -:104790000468A268D01805680F2028400628F6D8BB -:1047A000E068181836060660334800680068181874 -:1047B00000680028F8D14F6A2F4C2568AA68D418E1 -:1047C00026680F243440042CF6D8EC681C192C4DB4 -:1047D0002560294D2C68E4681C19019A22602A681A -:1047E000D2689A181760244A1468A268D21815680B -:1047F0000F222A40062AF6D8E2689A18CA24E4054D -:1048000014604D6A1C4A11688A68D21814680F2215 -:104810002240062AF6D8CA689A18CE21C90529432B -:104820001160184A9A58002AFBDB03B0F0BCBB4663 -:10483000B246A946A046F0BD702294468CE64A686E -:1048400090460D480668B268D01807680F203840B7 -:104850000628F6D8F068181842461606066006487C -:1048600000680068181800680028F8D11AE70648A0 -:10487000DBE70548D9E7C046D85F010808000070AB -:104880000C000070F01000000B003200C005434225 -:104890005841C0B270470000A0231B0698422AD09E -:1048A00014D8802829D008D980235B0098422AD0C8 -:1048B0001B4B984209D01B4807E010281FD0402806 -:1048C00001D1194801E000281BD17047174B9842CD -:1048D0001BD007D9164B98421ED0164B98421DD1BB -:1048E0001548F2E7154B984211D0154B984211D15B -:1048F000A420C003E9E70020E7E71248E5E71248F3 -:10490000E3E70848E1E70648DFE71048DDE7A020D5 -:10491000C003DAE70348D8E70D48D6E70148D4E7F3 -:1049200006005200FF00520002005000030000F099 -:10493000040000F0050000F003005200090000A090 -:10494000010000F00500520001005000010052007B -:104950000200520010B50F4B1A683323D35C002BB2 -:1049600000D101BE0B4B1C68BC23E358226A94465D -:1049700063441B68002B0BDB074B1868FFF78CFFA9 -:10498000636801229A6063689B68002BFBD110BDAD -:104990000248FCE7D45F0108E05F01080200500014 -:1049A00010B50400FFF772FF002801D1134810BDB5 -:1049B000FBF700FE124B134A1A605C6000229A60FB -:1049C000DA60114B1A685423D35C002B10D003F02B -:1049D000FCFAFA21890004F031FA01000B4804F0D6 -:1049E0002DFA0B4BC1188020400009F05DFADEE77C -:1049F00080200021400009F057FAD8E70600520055 -:104A0000E05F01080001001CD45F010860F5900020 -:104A10009808000070B504000D00FFF737FF00286C -:104A200027D0002D27D0FBF7C5FD144B144A1A6080 -:104A300000225A609C60DD60124B1A685223D35CDE -:104A4000002B10D003F0C1FAFA21890004F0F6F926 -:104A500001000D4804F0F2F90C4BC1188020400011 -:104A600009F022FA06E080200021400009F01CFA3B -:104A700000E0074870BD0648FCE7C046E05F01085B -:104A800000010005D45F0108C0EA210148260000AA -:104A90000600520030B5134A11688B69C31ADB094E -:104AA00049691B01C91800230360812415682C5D26 -:104AB00004192360822415682C5D04192360832463 -:104AC00015682C5D04192360802415682C5D041979 -:104AD0002360836114688422A25C801803600B60E9 -:104AE0004B6030BDD45F010810B5072900D901BE65 -:104AF0001F2314009C4300D001BE104B1B689C690F -:104B0000001BC0095B690001181803290AD8046852 -:104B1000C9001F238B409C431F231A408A40224315 -:104B2000026010BD04394468C9001F238B409C43B8 -:104B30001F231A408A4022434260F2E7D45F0108F3 -:104B4000F8B506000C0015001F0006AB1A780729FF -:104B500000D901BE0F232900994303D1012D01D0B3 -:104B6000092D00D101BE012F00D901BE1F23110064 -:104B7000994300D001BE21003000FFF7B5FF336834 -:104B800001210A00A24093433940A14019433160FA -:104B9000074B1A688123D05C86193268A400723BE7 -:104BA0001900A1408A432B40A34013433360F8BD52 -:104BB000D45F0108072900D901BE012A00D901BE2E -:104BC00001238B40002A01D1436070478360FCE7DA -:104BD00030B50400072900D901BE0F231000984307 -:104BE00003D1012A01D0092A00D101BE8900074B57 -:104BF00018688123C05C00190468723B1D008D4059 -:104C0000AC4313408B402343036030BDD45F0108A5 -:104C100030B50300072900D901BE012A00D901BE21 -:104C2000074804688220205CC018046801231D0026 -:104C30008D40AC4313408B402343036030BDC046DE -:104C4000D45F010830B5082900D901BE012A00D976 -:104C500001BE846901231D008D40AC4313408B408D -:104C60002343836130BD000030B50300082900D91B -:104C700001BE032A00D901BE49000748046880200C -:104C8000205CC018046803231D008D40AC43134012 -:104C90008B402343036030BDD45F0108F8B5CE4696 -:104CA000474680B507000E001400002800D1B1E08F -:104CB000002A00D1B0E0072900D901BE2368012BEA -:104CC00000D901BE63680F221900914303D1012B63 -:104CD00001D0092B00D101BE237A1F22934300D0BB -:104CE00001BEE368032B00D901BE2369012B00D963 -:104CF00001BE6369012B00D901BE236A012B00D9D3 -:104D000001BE636A012B00D901BEA36A012B00D941 -:104D100001BEE36A032B00D901BE236B072B00D928 -:104D200001BEE369032B00D901BEA369012B00D9A1 -:104D300001BE01252B00B3407000103003229146C4 -:104D4000110081400B439C46344B984683234146D7 -:104D50000968C95CC9190B68624693439C46A369FC -:104D60002B40B340624613439C46E2694B461340D6 -:104D70001A008240634613430B60626831003800BA -:104D8000FFF726FF227A31003800FFF7ADFEE26818 -:104D900031003800FFF768FF226931003800FFF763 -:104DA00051FF626931003800FFF732FF43461A684D -:104DB0008423D25CBA1810687B3398469843236AE0 -:104DC0001D40636A5B009C46022361460B401D4305 -:104DD000A36A9B009C46042361460B402B43E16A77 -:104DE000C90018250D402B43216B4D014146294038 -:104DF0000B43B100FE25AD0029408B4003431360F7 -:104E0000226831003800FFF7D5FE0020C0BCB9464B -:104E1000B046F8BD0248F9E70148F7E7D45F01085A -:104E200001005A00084B1A68BC23D3581B181B6892 -:104E3000002B07DA0B0C00D001BE0904090C4160FD -:104E4000002070470148FCE7D45F010801008A0098 -:104E50000368002B08DAC2600B0C00D001BE090405 -:104E6000090C8160002070470048FCE701008A00BF -:104E700000290BD0074B1A68BC23D3581B181B689A -:104E8000002B05DAC3680B600020704701BEF1E714 -:104E90000148FAE7D45F010801008A00034B1B6850 -:104EA000002B00D07047014B1860FBE7046001083D -:104EB00070B5040023480068002840D021480568E8 -:104EC0002C2060432818FF2425001D4005601E0A81 -:104ED000344044601B0C83601B4B1C683323E35C31 -:104EE0009D4200D301BE184B1C68BA23E35A6B43A2 -:104EF000256AAC466344036143683425645DA3427C -:104F000000D301BE104C2468246A80335B01E4188E -:104F1000446183681D0C00D001BE1D0C00D001BE91 -:104F20001B041D0C2B43A360C2610162002383613B -:104F3000049B002B02D000229B5E838170BD01BECA -:104F4000BCE7C04604600108D45F0108F0B58FB02B -:104F5000041E44D06368032B00D901BEE36A002B12 -:104F60003FD0236B002B3ED007AA1300210061C95C -:104F700061C321C921C302AE230014333100A1CB88 -:104F8000A1C121CB21C10821535E0CAD2B80174B51 -:104F90001B681B8F079989B25B186B80089B0D9368 -:104FA0000B9B0A980095A26AE16AFFF781FF069BB6 -:104FB0000598002200920021FFF77AFF216B28005C -:104FC00003F078F80022AB5E002B06DB1F221340B3 -:104FD0001E3A9A401300064A13600FB0F0BD01BE9E -:104FE000B8E701BEBDE701BEBEE7C046D45F010819 -:104FF00000E100E0F0B504000800002A2DD01C49B3 -:10500000096800292BD01A4909682C256C430C1912 -:105010004543491901263500486885402D046068DC -:1050200086402769002F1CD0886900281BD13F6863 -:10503000002F1ADA17683F043F0C17603D431560D4 -:105040002569EA6001228A614B622369320C00D033 -:1050500001BE3604360C9E60F0BD01BECFE701BE36 -:10506000D1E70448F8E70448F6E70348F4E7C04608 -:105070000460010804028A0007028A0070B582B049 -:1050800004000023019300282BD02369002B2AD091 -:105090006369002B29D0236A002B28D06369DD685F -:1050A0002A0C0BD012041A601B682069204B1A6866 -:1050B000BC23D3581B181B68002B1ADB2D042A0CA9 -:1050C000002D0AD063691A601B68636A002B2AD01E -:1050D0009847002363620023A36163691B6802B0E1 -:1050E00070BD01BED1E701BED2E701BED3E701BE6C -:1050F000D4E701A9FFF7BCFE00280ED10198026891 -:10510000160CFF231340E2699A4207D99B00226ADA -:10511000D358002B02D0984700E0002631002069C8 -:10512000FFF780FECAE7A36A002BD4D09847D2E7E6 -:10513000D45F010810B50200064B1B68002B07D096 -:10514000044B18682C235343C018FFF797FF10BD7A -:1051500001BEF5E70460010870B50C001D4B1A682C -:105160003323D35C834230D9002930D00B68DB066F -:1051700001D019482AE03323D35C984200D301BE02 -:10518000144B1B681D6ABA229B5A58432D18134EA4 -:1051900035602368DA080021606805F022FA0021F2 -:1051A0002800FFF73FFE306822000021FFF750FE85 -:1051B000002801D00A4809E0084B18680021FFF7D1 -:1051C00031FE002802D0064800E0034870BD0248C6 -:1051D000FCE7C046D45F010803018A0008600108AB -:1051E00001018A0010B50B00002A05D0002A1DD04D -:1051F000002B15D10E4810BD0029F7D10D4A1168BA -:1052000033228A5C904200D301BE0A4A11680A6ABE -:10521000BA24095B4843121807490A601800EAE7F4 -:1052200006490B604A60FFF797FFE4E70048E2E7B2 -:1052300003018A00D45F01080860010830070008F4 -:10524000F0B5C64600B50C00194B1B68DE68336824 -:1052500083422BD947091F23184001258540002987 -:1052600018D000239846124B18680368002B17DAF1 -:105270007368BF00DF193B681D420FD0AB433B6032 -:1052800000250021FFF7CEFD002C0BD0280080BCAC -:10529000B846F0BDFBF781F98046E4E7054DF0E73D -:1052A000054DF1E74046FBF77CF9EFE7034DEDE7ED -:1052B00008600108020188000301880004018A00D7 -:1052C0000A4B1B68DB681A6882420BD941091F220E -:1052D00010401E3A8240586889000B581A4203D089 -:1052E000034800E0034870470348FCE708600108F2 -:1052F0000101880004018A0000018800074B1B6837 -:105300009B6CC340DB0700D401BE044B1B681B69C8 -:1053100010308002C3580F2018407047D45F010836 -:1053200003681B050CD5802282239B00C358DB0534 -:10533000DB0D934206D090239B00C15001207047A3 -:105340004022F1E70020FAE7F0B5002800D16CE137 -:10535000002900D16BE10B78022B00D901BE4B7BF9 -:10536000023BDBB2062B00D901BE8B7B002B04D0A5 -:10537000022B02D0032B00D001BE2123CB5C012BDA -:1053800000D901BE2823CB5C012B00D901BE0B78CC -:10539000012B07D98B7F002B09D04B68013B062BD3 -:1053A00005D903E04B68083B082B00D901BE8B6888 -:1053B000053B042B00D901BE4B69FF2B00D901BE70 -:1053C0008B69FF2B00D901BE8B7C002B06D00B789C -:1053D000002B02D18B68092B74D001BE964B4C6B0D -:1053E0001C4200D001BE954BCC6B1C4200D001BECC -:1053F0000B78022B6AD04B685D1E0B7F002B6AD0A6 -:1054000080235B028C68082C67D880242401234306 -:105410000F242C4023438024A404234303600C6BFB -:1054200003681B055BD580239C4200D301BE8C6BB7 -:1054300003681B0555D580239C4200D301BE4C6AEE -:1054400003681B054FD580239C4200D301BE0B7817 -:105450001B06C024A404234003644B7F002B44D0CC -:1054600040238C7C002C42D08024E40023430C7C1D -:10547000002C3ED08024640023434C7C002C3AD086 -:105480008024A4002343CC6A013C2404F0252D038E -:105490002C4023434D7B013D07242C4023438D7B2F -:1054A0002D0130242C40234383640B7B002B24D01C -:1054B00080246400CB7B002B21D10B78022B46D0BB -:1054C00000231EE08B7B002B88D086E78B7F002B90 -:1054D00091D1002591E7002394E7002497E740232A -:1054E000A2E74023A8E74023AEE70023B9E7002462 -:1054F000BCE70024C0E70024C4E70024DAE78023E7 -:105500009B001C438B685D1E0F231D402C43C0264F -:10551000B6008451FF244D692C408D692D04FF276E -:105520003F043D402C43C425AD004451CC6A85590D -:105530002B4003339C4201D3102C00D901BECB7FFA -:10554000002B07D00B78012B5FD0002503E08023D0 -:105550009B00D6E700254C7B013C072323402B43CF -:105560008D7B2D0130242C40234343640B7B002B87 -:105570004ED080256D008B685C1E0F2323402B438B -:105580000C78012C46D0002423438024A40003512E -:10559000FF230C6B2340C124A40003512023CB5CC8 -:1055A000002B3AD080239B0421240C5D012C36D0A3 -:1055B0000024234328240C5D012C33D000242343F2 -:1055C000FF244D6A25402B4303658B6B1C408123D0 -:1055D0009B00C4501A4B4C6B23401A4C03511A4B7E -:1055E000CC6B2340194C0351002A22D00023536076 -:1055F00013609360D3601362D3625363897F303347 -:10560000D154134B93630020F0BD80256D00A2E7B9 -:105610000025B0E780246402B6E70023C4E78024B5 -:105620006404C6E780246402C9E70A48ECE7094835 -:10563000EAE70020E8E7C04692F4FFFF8CF8FFFF9E -:105640006D0B0000C80F000073070000880F0000FA -:10565000EFCDAB000160AA00114B03600F3B036468 -:10566000002383640822FF32C021890042500431A4 -:1056700043500C31435043641139FF394250FD32DD -:1056800083500365074A8350074A8350074A835073 -:10569000074A8350074A8350074A83507047C046E1 -:1056A0000F000003C80E0000880E0000C80F0000A5 -:1056B000880F0000080F0000480F000003685B001F -:1056C0005B080360002904D000234B600B600B6271 -:1056D000CB627047F0B5C64600B58C680A68842373 -:1056E000C3580F252B40073DED1A2300AC4226D9A5 -:1056F0002B0024E055782D0216783543D6783606EF -:1057000097783F043E4335439827C55155792D027C -:1057100016793543A846D679360695792D042E4359 -:1057200045463543C551D218E41A8423C3580F2582 -:105730002B40073DED1A2300AC4200D92B00002B73 -:1057400000D183E0082BD5D0012B24D0022B26D00A -:10575000032B2BD0042B33D0052B3ED0062B4CD063 -:10576000072B5DD053781B0215782B43D5782D0677 -:105770009678360435432B439826835153791B0280 -:1057800015792B43D5792D0697793F043D432B435B -:1057900083510823C7E7167890254651C3E755780B -:1057A0002D021678354394268551BCE755782D0295 -:1057B0001678354394268551967890254651B2E760 -:1057C00055782D0216783543D678360697783F04FB -:1057D0003E43354398268551A5E755782D02167826 -:1057E0003543D678360697783F043E4335439826AE -:1057F000855116799025465195E755782D021678F2 -:105800003543D678360697783F043E43354398268D -:10581000855155792D02167935439426855182E7B5 -:1058200055782D0216783543D678360697783F049A -:105830003E4335439826855155792D0216793543D7 -:10584000942685519679902546516CE70A608C60C4 -:10585000002C0CD1F924E400035901229343035195 -:105860008A61CB69002B02D0CB690120984780BCAC -:10587000B846F0BDF8B50E004C69CA68C423C358D9 -:105880000F21194023008C421CD90B001AE0D825A7 -:10589000415911700F0A57700F0C9770090ED17093 -:1058A00045591571290A5171290C91712D0ED57127 -:1058B000D218E41AC423C3580F251D402300AC425C -:1058C00000D92B00002B6DD0082BE0D0012B1ED06F -:1058D000022B20D0032B24D0042B2BD0052B33D02C -:1058E000062B3ED0072B4BD0D821435813701D0AEE -:1058F00055701D0C95701B0ED37043581371190A07 -:105900005171190C91711B0ED3710823D0E7D0216E -:1059100041581170CCE7D42141581170090A5170D7 -:10592000C6E7D42141581170090A5170D02141585D -:105930009170BDE7D821415811700D0A55700D0CBA -:105940009570090ED170B3E7D821415811700D0A36 -:1059500055700D0C9570090ED170D0214158117100 -:10596000A6E7D821415811700D0A55700D0C95709D -:10597000090ED170D42141581171090A517197E76C -:10598000D821415811700D0A55700D0C9570090EF3 -:10599000D170D42141581171090A5171D021415857 -:1059A000917185E7F2607461002C0DD1F922D2006B -:1059B000835802218B4383500323B361336A002B46 -:1059C00002D0336A032098477461F8BD10B50028EF -:1059D00032D0002932D0002B32D05A62F922D200C4 -:1059E00083580324A34383500B78012B00D901BEB5 -:1059F0000B7A032B00D901BE4B68072B00D901BEDF -:105A00000B7B012B00D901BE01230A6813408A6871 -:105A10001203C024A401224013434A681204E02464 -:105A2000E40222401343CA681206802149040A4056 -:105A300013430360002010BD0248FCE70148FAE769 -:105A40000048F8E70400B2004B1EDBB2012B04D97A -:105A5000042902D0082900D001BE032A00D901BEC2 -:105A6000042920D008D801290DD002291AD1882371 -:105A70001B019C4660440AE0082913D198231B01AE -:105A80009C46604403E080231B019C466044002840 -:105A900008D0036806490B401204C02189020A405D -:105AA0001A430260704790231B019C466044EEE756 -:105AB000FFFFFCFFF8B5DE4657464E464546E0B5CB -:105AC000070008009A460AAB40CB1B789B460CABFC -:105AD0001B78111FC9B2FA2900D801BE59460439F2 -:105AE000C9B2FA2900D801BE591EC9B2012904D988 -:105AF000042B02D0082B00D001BE002E02D051464C -:105B000000291CD0002E02D05946FF2919D01B02B3 -:105B1000F02109010B4099460E9B5D6A1104C022D9 -:105B2000920211404B4619430143002E0BD10D9BAD -:105B3000DA07120C11433965002400200CE001BE85 -:105B4000E0E701BEE3E70022F4E703433B650134ED -:105B5000E4B2002D1FD128002100B44225D2164BFB -:105B6000984222D07B6C0422100018401A42F0D1D7 -:105B700053465B5C4A46134398465A461204C02378 -:105B80009B021A40434613430131B142DDD30D9AC3 -:105B9000D007000CD9E7012002F008FB013D002DE1 -:105BA00001D00020D8E70448D6E7F0BCBB46B24697 -:105BB000A946A046F8BDC0460200B20070B58AB042 -:105BC0000500181FC0B2FA2800D801BE002A34D040 -:105BD000686C042634000440064231D11B04C02006 -:105BE00080020340501E0004000C03438020C002CA -:105BF00003432B65002925D00E9B5E6A009102921B -:105C00000023079302330693200006E0012002F0F0 -:105C1000CDFA013E002E0ED02000069B022B0DD1A6 -:105C2000094B98420AD069462800FFF753FD002E21 -:105C3000ECD13000F1E70448EFE704480AB070BD4A -:105C40000348FBE72000F9E70200B2000400B200BD -:105C50000100B200F0B50400069D181FC0B2FA287A -:105C600000D801BE002A21D0666C042738003040DD -:105C700037421DD11B04C026B6023340561E3604DF -:105C8000360C3343802636033343236500290ED078 -:105C9000E9602A616A61059B2B620423AB61F922EA -:105CA000D200A35802210B43A35000E00148F0BDED -:105CB0000148FCE70400B2000100B20070B58AB0F0 -:105CC0000500181FC0B2FA2800D801BE002A34D03F -:105CD000686C042634000440064231D11B04C02005 -:105CE00080020340501E0004000C03438020000388 -:105CF00003432B65002925D00E9B5E6A0391059214 -:105D00000023089304330693200006E0012002F0EC -:105D10004DFA013E002E0ED02000069B042B0DD123 -:105D2000094B98420AD069462800FFF7A3FD002ED0 -:105D3000ECD13000F1E70448EFE704480AB070BD49 -:105D40000348FBE72000F9E70200B2000400B200BC -:105D50000100B20010B5030000290DD0426C0424EC -:105D600020001040144209D101390904090CC02255 -:105D700012031143196510BD0148FCE70148FAE719 -:105D80000400B2000100B20000230B604B608B6086 -:105D9000CB600B614B618B61026880231B06134350 -:105DA0000360704770B58D69AA682B6AFF26CC68BE -:105DB000B44384600C696442B443C4602D68013DFF -:105DC00003242C404969002901D080214900214346 -:105DD0000162002A33D01468611C67D0FF21214082 -:105DE00014792404C025AD022C40214380242406CC -:105DF0002143016451790904C024A4022140416473 -:105E00009468611C54D0FF212140147B2404C025D8 -:105E1000AD022C4021438024240621438164116972 -:105E2000002905D001391F240C4080210906214397 -:105E3000C164127D1204C02189020A400265002B50 -:105E400033D019684A1C35D0FF220A401979090459 -:105E5000C024A40221400A43802109060A430266A5 -:105E60005A791204C02189020A40426699684A1C84 -:105E700022D0FF220A40197B0904C024A402214039 -:105E80000A43802109060A4382661A69002A05D05E -:105E9000013A1F211140802212060A43C2661B7D6F -:105EA0001B04C02292021340036770BD0021A0E7CB -:105EB0000021B3E70022D2E70022E5E770B5050034 -:105EC00008220026002000E008328B790133DB0035 -:105ED000934216D3FF232B408C5CA342F4D12C0AAF -:105EE000FF2323408C18E479A342EDD18B185B7813 -:105EF000B342E9D38C18A478012CE5D11E00100020 -:105F0000E2E770BD70B50C0015001E00FFF7D6FF6C -:105F100000280BD021180B79AB704B796B708B7903 -:105F20002B70CB789B003360002070BD0048FCE7ED -:105F30008000B2008278520803231340012B07D05F -:105F4000022B07D0002B01D0002070470320FCE774 -:105F50000420FAE70420F8E70200407900021379F0 -:105F60001843D3791B069279120413431843002B6C -:105F700002DB0130C0087047033880231B0618433A -:105F8000F9E7437A0B6000230B7102334B71037AFC -:105F90005B0908D1013B8B60027A1F2313400B6120 -:105FA00002230B757047FF238B60FD3B0B73F3E7F8 -:105FB000C37A0B6000230B714B71837A5B0908D1A4 -:105FC000013B8B60827A1F2313400B6102230B7508 -:105FD0007047FF238B6000230B73F3E7C37B0B60D9 -:105FE00000230B7101334B71837B5B0908D1013BAB -:105FF0008B60827B1F2313400B6101230B7570475D -:10600000FF238B60FE3B0B73F3E7437B0B600023A6 -:106010000B714B71037B5B0908D1013B8B60027BE9 -:106020001F2313400B6101230B757047FF238B6007 -:1060300000230B73F3E703230B6000230B714B71F9 -:10604000012252428A600B610B75704710B50B003C -:106050001100012B0DD0032B09D00123002B12D0EE -:1060600083789A0607D45B0609D4FF2010BD00236D -:10607000F4E70023F2E7FFF784FF0520F6E7FFF7D8 -:1060800097FF0420F2E78378DA0605D4DB0707D40C -:10609000FFF7D1FF0120E9E7FFF7A0FF0320E5E7C5 -:1060A000FFF7B3FF0220E1E70068052907D8890060 -:1060B0000D4B5B589F46830601D5EC231360704758 -:1060C000C306FCD56C231360F9E70307F7D5BC239F -:1060D0001360F4E74307F2D53C231360EFE783072F -:1060E000EDD50C231360EAE740F200102823C35CCF -:1060F0001B09012098407047F0B5C64600B54F6AAD -:106100001B38430898460F263E400021002411E02A -:10611000012800D11024701C013363434D00AC46AC -:106120008C446546AD00AC46944443435B006046F6 -:1061300083600131032917D8CB005B1A3800D8409F -:106140000509430A032018401F232B40022809D0C9 -:1061500003D80028DCD10124DDE70328DBD1FA24B1 -:10616000A400D8E78024D6E7434658004044850081 -:106170000C3D5219906880BCB846F0BD10B5446A19 -:10618000816A4A0F032313400A0E1F2111400F2278 -:106190002240022B11D00BD8002B11D0012B11D192 -:1061A00080204000531C013148435843400010BD3B -:1061B000032B09D1FA200002F4E7FA200001F1E7ED -:1061C0001020EFE70020EDE70020EBE7836A190AD3 -:1061D0001F2001400F221A409B0406D408230132DD -:1061E000481C58435043400070474023F7E70623BC -:1061F00003600023037170470423036000230371CD -:10620000704702230360002303714371012252424D -:1062100082600373036103757047122303600023D8 -:10622000037143710122524282600373036103755B -:1062300070473423036000230371437101225242EB -:106240008260037303610233037570473E2303606A -:10625000002202713C3B437101214942816003737A -:1062600002610375704710B50368042922D009D86C -:106270000139C9B2022904D85B062BD51000FFF7FB -:10628000CCFF10BD0529FCD1D90507D4190609D4C6 -:106290005B060BD51000FFF7C0FFF2E71000FFF719 -:1062A000D5FFEEE71000FFF7C4FFEAE71000FFF7A5 -:1062B000A8FFE6E7190605D45B0607D51000FFF72F -:1062C000ACFFDEE71000FFF7B4FFDAE71000FFF7DE -:1062D00098FFD6E71000FFF794FFD2E7052303608D -:1062E0000023037170470000C36A002B10D0036BBA -:1062F000002B0FD00023026B13713A33CA5C1209D2 -:10630000333B1340052B0ED89B00154AD3589F46AC -:1063100001BEECE701BEEDE701235B42C363026B04 -:106320001360C26A136070470223C363036B0122C8 -:106330001A60C36A34321A60F5E74023C363036B03 -:1063400001221A60C36A04321A60ECE78023C36337 -:10635000036B3E221A60C36A01321A60E3E7C0464B -:1063600058F2001060230360002303717047F0B5FA -:1063700005000368042B07D01D200B5CFF2B2BD1DD -:10638000222828D80230F8E74369012040421860EB -:106390004B785B080F261E400023042B07D80124EE -:1063A0009C4030002040844201D00133F5E7032BAC -:1063B0001FD81F1D0020032807D8061D44002418DD -:1063C000A4008E5D16550130F5E76A69C95D11605C -:1063D00058001D3005E00020002802D06B690A5CDF -:1063E0001A60002806D000236A6913716A69537124 -:1063F00003E000206B69FF221A71F0BD70B5002226 -:1064000000240FE023001C33C65C53009B189B0044 -:10641000CB180125B5405D6025001D35455D1D701B -:1064200002340132032AEDD970BD10B5013B9C182E -:106430000855000A002BF9D110BD10B50400002347 -:10644000002003E00002E25C104301338B42F9D3E9 -:1064500010BD000030B587B004001D004B062AD4E3 -:106460001648CB0725D58B0710D5D368002B0DD048 -:106470001A7919780A9B0493012303930295FE333A -:106480000193002300932000FFF714FB0B4B98426D -:1064900001D000280DD10A9B049301230393029598 -:1064A000FE330193002300930022B7212000FFF761 -:1064B00001FB07B030BD0020D3E7C0468000B2002A -:1064C00030B587B004000800150019000C9B049338 -:1064D00000230393029001930B9B00930A9B0022DD -:1064E0002000FFF7E7FA002801D007B030BD0C9B71 -:1064F00000930023012229002000FFF7DFFBF4E7CF -:10650000F0B5DE4657464E464546E0B589B00590A3 -:106510000D0090469B4612AB1B789A4600230693CB -:106520005D4E002400273000139B99462DE0032088 -:1065300000E00420002108E00020FBE72218521AA6 -:10654000AA18D67806AA565401318842F6D84A4687 -:106550000292019006AA0092172202A98C46624478 -:1065600051460598FFF7ACFF00280BD17F00FBB226 -:10657000172202A98C4662441778049A17407A1EA3 -:1065800097411F430834444531D82B5D9B0716D4EF -:10659000631CEB5CE21CAA5C0492172202A98C46E5 -:1065A0006244002111702A1992789209012ABED002 -:1065B000022ABED0002ABFD05A461068BAE70600A9 -:1065C000002E16D0002E5CD12B199B780133DBB244 -:1065D00004935A46D364012B5BD93700B24600239B -:1065E00005961E00A8462500149B994617E02B4EE1 -:1065F000E6E742462B195B78BB42E3D02B199B7828 -:1066000002339B00E418A242F4D2244EDAE7E3609E -:106610005168380002F012FC60600136F6B2049B4B -:106620009E422DD2BA440435434658195B5D0F2172 -:10663000194001220023114207D15200D2B2013386 -:10664000DBB2042BF7D9154A059207683F0A0137D8 -:106650003F02B2005946096D8C58524622605A00DA -:10666000D3189B004A46D2184946CB5CA360936876 -:1066700023615368BB42CAD9E76001236360CCE75A -:10668000059E300009B0F0BCBB46B246A946A04604 -:10669000F0BD014EF5E7C0460600B2000700B200AB -:1066A000F0B587B006000D0010000E9C0A7909783D -:1066B00004940027039702936B79019303230093BB -:1066C00003003000FFF7F6F9002801D007B0F0BD55 -:1066D00029693000FFF73EFB0028F7D12B7D01949C -:1066E000002200920C9A0D993000FFF7B3FA061EB3 -:1066F000ECD1656A06E0012001F058FD013D002D56 -:106700000AD03000A369032BE0D0044B9842DDD0BF -:10671000002DF0D12800F5E70048F3E70200B200B1 -:1067200010B5002134E00B001033DB0100221A50B9 -:10673000CB01C318184C1C192260184C1C1922607C -:10674000822424011C192260842424011C19226043 -:10675000134C1C192260134C1C192260124C1C197A -:106760002260852424011C192260862424011C191E -:1067700022600E4C1C1922600D4C1C1922600D4C1D -:106780001C19226087242401A44663441A60013145 -:106790000329C8D910BDC046080800000C08000035 -:1067A00044080000480800004C080000640800008D -:1067B000680800006C08000010B586B00B001400DB -:1067C0008A69D16800290ED00A79097804940124D5 -:1067D00003941B780293FF23019300230093FFF798 -:1067E00069F906B010BD0148FBE7C0468000B20061 -:1067F00030B587B004000800150019000A9B049307 -:106800000023039302780292FF2201920093002258 -:106810002000FFF74FF9002801D007B030BD0A9BD8 -:1068200000930023012229002000FFF747FAF4E734 -:1068300010B584B00F236B4401241C708C69A36ACB -:10684000002B0DD01B7800920F226A44FFF7D0FF77 -:10685000002805D1A36B0F226A4411780B401370F6 -:106860000F236B441878431E9841C0B204B010BD8A -:10687000F0B5002808D085696B6893421DD92E6D4C -:10688000002E03D0002004E001BEF4E70C4813E022 -:106890000130EB6C83420ED98300F458E3686768DB -:1068A0007B432768BC466344BA42F1D39A42EFD295 -:1068B0000C60002000E00248F0BD0248FCE7C04642 -:1068C0000600B2000400B200F0B58BB006900C00D8 -:1068D00015000793002928D0002D30D0A6697769CC -:1068E0000023099331682800FFF7A7FD020009A9DA -:1068F0002000FFF7BDFF002F1BD03A79FF2A1AD0E6 -:10690000104B984219D0002811D1099B197A079B86 -:106910000493012303932378029301923368009335 -:106920002B000698FFF7C6F80AE001BED4E73978D5 -:10693000EDE7054804E0044802E0034800E00148B0 -:106940000BB0F0BD0400B2008000B200F0B5DE462E -:1069500057464E464546E0B5C9B005000C00160046 -:106960009946002913D02EAAAE4B19881180997828 -:1069700091702DAA19881180997891702CAA198884 -:1069800011809B789370636B9846002305E001BEED -:10699000E9E72FA90022CA540133632BF9D94A46EB -:1069A00031002800FFF750F84346002B13D0529BCC -:1069B00002932FAB01933823009333002EAA414654 -:1069C0002800FFF76DFE071E06D12FAB9B79062B23 -:1069D00002D9954F07E0944F002F04D12FAB1B78BD -:1069E000532B08D0904F380049B0F0BCBB46B2469C -:1069F000A946A046F0BD2FAB5B78462B01D08A4F4D -:106A0000F1E72FAB9B78442B01D0874FEBE72FABFF -:106A1000DB78502B01D0844FE5E72FAB1B79052B9A -:106A200000D8FCE02FAB5B79012B01D07E4FDAE779 -:106A3000049704AB2DAA2FA97C48FFF763FA0597AA -:106A400005AB2CAA2FA97A48FFF75CFA794B98423C -:106A500000D1A0E000230693FF2006AB2EAA2FA9A9 -:106A60000002FFF74FFA071EBDD1A368002B00D12B -:106A700095E0E368002B00D193E02369002B00D15F -:106A800091E06369002B00D18FE0E369002B00D116 -:106A90008DE0236A002B00D18BE0A36A002B00D18C -:106AA00089E0529B02932FAB9A460193069B009379 -:106AB00033002EAA41462800FFF7F2FD070020A967 -:106AC0005046FFF79BFC5046FFF734FA20605046D3 -:106AD000FFF742FA60605046FFF708FB6062E0682B -:106AE000FFF785FB2069FFF787FB0123A363A06AFB -:106AF000FFF7F4FB51462000FFF7F6FBE069FFF7D4 -:106B000031FC5046FFF73AFB60645046FFF75EFBEE -:106B1000A064A3689B461A0049465046FFF796FAC0 -:106B200081462368042B48D0206AFFF76AFB20AA1D -:106B30002FA92000FFF71BFC002809D0431E2FA916 -:106B4000CA5C01239340A36120AAFFF7D5FA206411 -:106B5000236D002B00D146E7529B02932FAB01938C -:106B6000059B009333002CAA41462800FFF798FDAF -:106B7000071E00D037E720AB0293529B019300968B -:106B80002300059A2FA92800FFF7BAFC2A4B984248 -:106B900041D0070027E70023E36423655AE701BEDD -:106BA00067E701BE69E701BE6BE701BE6DE701BEA5 -:106BB0006FE701BE71E701BE73E752463833D15C1F -:106BC000529B0093330022002800FFF743FC071E6E -:106BD00003D0002F0FD00120B0E7529B029307ABE8 -:106BE0000193049B009333002DAA41462800FFF730 -:106BF00057FD0700EDE75A46494607A8FFF754FA44 -:106C0000226A494607A8FFF72EFB20AA07A9200001 -:106C1000FFF7ADFB90E70023E3642365E3E6024F53 -:106C2000E1E6C04670F200100500B20084FF0000EB -:106C300081FF00008000B2000600B200F0B5DE4621 -:106C400057464E464546E0B583B0061E904600D1F5 -:106C5000ACE0002900D1B1E04F68002F00D1AFE0D7 -:106C6000002A00D1AEE00B689946002B03D0002526 -:106C700000239A465DE0544899E001BE70E0524816 -:106C800007E0082B04D198231B019B46B3440CE07A -:106C90004D485346002B00D189E0B2200004184330 -:106CA00085E080231B019B46B3445B46002B00D14B -:106CB0007AE01B68454A1340227A1204C0218902F7 -:106CC0000A4013435A4613606368042210001840B8 -:106CD0001A4257D1A3691B68013B032B00D901BE9F -:106CE000002825D163689B0722D52169E06802F05E -:106CF0002BF9002900D001BE236980225202934261 -:106D000002D35A1E1A4200D001BE21005846FFF796 -:106D100049F80223FF3362681340227A1204C0212B -:106D200089020A4013438022120613435A46136015 -:106D30000135A94536D9AB00FC58002CF8D0227893 -:106D4000531EDBB2012B04D9042A02D0082A00D03A -:106D500001BE237A032B00D901BEA369002B8CD07E -:106D60002378042B09D08CD8012B9AD0022B86D102 -:106D700088231B019B46B34497E790231B019B4646 -:106D8000B34492E7237A2278A1694046009030000C -:106D9000FFF7DCFD00289DD00823AB4052461A4384 -:106DA000924697E7002074E7074872E7064803B069 -:106DB000F0BCBB46B246A946A046F0BD0248F6E785 -:106DC0000148F4E70048F2E70400B200FFFFFCFFCF -:106DD000F0B5D6464F464646C0B507008846140073 -:106DE00099469608194B9A4203D8002E08D10126DD -:106DF00006E0174E04E0A41B00281CD0002C1AD07B -:106E0000FA218900300002F019F88246FA2189003F -:106E1000300002F099F88DB2504601F0D1F9280007 -:106E200001F0D2F94A4641463800FFF701FDB4426D -:106E3000E1D80024E0E7002805D10020E0BCBA46F4 -:106E4000B146A846F0BD0348F8E7C04603093D0037 -:106E500040420F000200B200F0B5DE4657464E46F3 -:106E60004546E0B589B082460F0090469946129C8F -:106E7000139B9B460023079300290BD04B46002B06 -:106E80000AD0BA69956843461B195268934205D8DF -:106E90002D4817E001BEF1E701BEF2E72A4809B02C -:106EA000F0BCBB46B246A946A046F0BD002802D1C0 -:106EB000296900293AD100283CD00028EFD1A41B31 -:106EC000B044B144002CEAD0260080235B029C42EF -:106ED00000D91E00BB691B68002207A94046FFF7C6 -:106EE000A4FABB692A7929785846049000200390B7 -:106EF00038780290687901901B68009307AB504680 -:106F0000FEF7D8FD0028D1D1A9684B1CCED02A7B32 -:106F1000C9B25B4604930023039338780290FF20A4 -:106F2000019000935046FEF7C5FDBFE75046FEF7BF -:106F300011FFC0E72B7D5A46009232004946504669 -:106F4000FEF7BCFEB9E7C0460400B200F0B5DE466D -:106F500057464E464546E0B589B082460F001600BA -:106F60009846129D00230793002910D04346002B1A -:106F70000FD0BA69536A9946136A9B4673195268CF -:106F8000934208D83F483B004F46994618E001BE5F -:106F9000ECE701BEEDE73B4809B0F0BCBB46B246AA -:106FA000A946A046F0BD2C00139A49465046FFF76B -:106FB00003FC00280FD00028EED1A04436192D1B69 -:106FC000002DE9D03900300001F0BEFF6B18BB4244 -:106FD000E9D37C1AE8E74B469B691B68002207A9A6 -:106FE0003000FFF722FA4B469B695A461279594600 -:106FF0000978139804900020039048460078029086 -:107000005846407901901B68009307AB5046FEF745 -:1070100051FD002803D15B4699684B1C12D1002812 -:1070200003D15B46196900291DD100281FD0002813 -:10703000C1D14B469B699A6C139B49465046FFF75A -:10704000C7FEB8E75B461A7BC9B2139B04930023C3 -:107050000393484600780290FF2001900093504629 -:10706000FEF728FDDBE75046FEF774FEDDE75B46E2 -:107070001B7D139A0092220041465046FEF79EFD6A -:10708000D5E7C0460400B200F0B5DE4657464E468E -:107090004546E0B587B007000E0015000093109A32 -:1070A0009046EB18013B01930023059304930029BC -:1070B00048D0B3699B469B699A465B461B6C02931A -:1070C0005B465B68019A93423ED80023994603933E -:1070D000504C504B9C4200D194E04B46E81A51462C -:1070E00001F032FF002900D08BE0039B019A93420C -:1070F00044D3484B9C4200D184E0019B4A46981AF5 -:107100000130514601F020FF002943D1009B002BA4 -:1071100078D02A0004A93000FFF7AAFB041E6AD128 -:10712000049A13690293D3689A46116853685246C9 -:1071300053435B18013B9946019B4B452ED2019B63 -:1071400099462BE001BEB4E72A0004A93000FFF7FE -:107150008FFB041E0AD1049B1A689146DA68924696 -:107160005B6853434B44013B039302E00023994681 -:107170000393009B9A45ACD9264CAAE704A930009A -:10718000FFF776FB041EB4D1049B1A689146DB68B6 -:107190009A46AEE71F4C35E0002CB7D14D45B5D22D -:1071A000424631003800FFF707FB041EF4D15B466E -:1071B0001B68002205A92800FFF737F9434605AAF6 -:1071C00031003800FFF780FB041EE5D1029B5A0115 -:1071D000D21A92009C466244D200434631003800E5 -:1071E000FFF7F6FD009B534508D9554452469B1ABC -:1071F00000930400D0E7019B9946CFE70094040078 -:1072000084E7044C200007B0F0BCBB46B246A94658 -:10721000A046F0BD0400B20010B5002814D1072923 -:107220002ED8FF2A2ED81A4B186883687824005B62 -:107230001B188900C9180B68164803401206120C67 -:107240001A430A60002002E0012801D0124810BD54 -:107250000F2919D880235B029A4217D20C4B186869 -:1072600083687A24005B1B188900C9180B680B48D7 -:10727000034012020A4802401A430A600020E6E76F -:107280000548E4E70448E2E70348E0E70248DEE7B0 -:10729000D45F0108FF00FFFF01004A00FF0000FF6C -:1072A00000FFFF0030B51A4B1B6842241C5D84426E -:1072B00028D9032928D8002901D1072A0FD9012963 -:1072C00005D0022906D0032907D012481BE00F2A57 -:1072D00005D9F6E7032A02D9F5E7002A16D1752465 -:1072E0001D5DA940723CAC40214074241C5D2240CD -:1072F0009B680A43C02189008C4660448000C250CC -:10730000002000E0034830BD0248FCE70148FAE7EE -:10731000D45F010801004A00F0B5032835D80028E1 -:1073200001D107290FD9012805D0022806D003284A -:1073300007D0184828E00F2905D9F6E7032902D914 -:10734000F5E7002923D1144B1C687723E35C032263 -:1073500015009D402B007425655D7626A65D2F00E7 -:10736000B7403B437526A65DB040B240104018437D -:10737000294008438021090608438023DB00A268D6 -:10738000D050A268D3580020F0BD0248FCE7014865 -:10739000FAE7C04601004A00D45F010810B503288F -:1073A00028D8002801D107290FD9012805D00228A3 -:1073B00006D0032807D011481BE00F2905D9F6E7AE -:1073C000032902D9F5E7002916D10D4B1A68752358 -:1073D000D45CA040723BA34018407423D35C194096 -:1073E000926801438020C00501438023DB00D15017 -:1073F000002010BD0148FCE70048FAE701004A0000 -:10740000D45F0108064B1B681A6888215B58D218A4 -:10741000136804490B400002034313607047C046E1 -:10742000D45F0108FF00FFFF044B1A68136888212E -:1074300052589B181868000AC0B27047D45F010800 -:10744000012800D901BE054A136805490B40000216 -:10745000C021890008401843106070470000274091 -:10746000FFFCFFFF10B5074B984200D901BE06494B -:10747000064A8B58064C2340024C20401843885043 -:1074800010BDC046010300000000264004050000B6 -:10749000FEFCFFFF10B50449044A8B58044C2340FE -:1074A000000403438B5010BD00002640040500007B -:1074B000FFFF00FF0349044A885880231B0603434B -:1074C0008B50704700002640040500000349044A21 -:1074D0008B585B005B088B507047C046000026400D -:1074E0000405000010B50300032800D901BE054CB7 -:1074F000A021C900605803229043134018436050F4 -:1075000010BDC04600002640064B1B681A68882143 -:107510005B58D21813681B021B0A00060343136052 -:107520007047C046D45F0108044B1A68136888216D -:1075300052589B181868000E7047C046D45F010867 -:10754000064B1B681A688C215B58D21813680449D3 -:107550000B400002034313607047C046D45F01082C -:10756000FF00FFFF084B1A684023D35C834209D910 -:10757000064AE0308000815880231B060B4383506D -:10758000002070470248FCE7D45F01080000264055 -:1075900001004A0000280ED0094B1A684023D35C32 -:1075A00083420AD9074AE030800083585B005B08B9 -:1075B0008350002070470448FCE70348FAE7C046C0 -:1075C000D45F01080000264001004A0010B50B4BB3 -:1075D0001A684023D35C83420CD90F290CD8084C7D -:1075E000E030800003590F229343114019430151A9 -:1075F000002010BD0348FCE70248FAE7D45F010809 -:107600000000264001004A00064B1A684023D35C64 -:10761000834200D801BEE0308000034BC3580F20E6 -:1076200018407047D45F01080000264010B50C4B8D -:107630001A684023D35C83420DD903290DD8094C25 -:10764000E03080000359302293430901114019436F -:107650000151002010BD0448FCE70348FAE7C0468A -:10766000D45F01080000264001004A00074B1A6859 -:107670004023D35C834200D801BEE0308000044B3D -:10768000C3581B09032018407047C046D45F010847 -:1076900000002640034B1B6904201840431E9841FC -:1076A000C0B270470000274010B504000A4A1368B2 -:1076B00008210B43136003E0012000F077FD013C3B -:1076C000FFF7E8FF002801D1002CF5D1002C01D0F4 -:1076D000002010BD0148FCE70000274002004A00DE -:1076E00000207047002070470349044A88588023CF -:1076F0001B0603438B507047000026400C0500001A -:10770000084AC0235B00D3580122100018401A42D7 -:1077100006D10449044A8B585B005B088B507047C4 -:107720000248FCE7000026400C05000003004A0068 -:10773000064A074BD35801229343002800D1002268 -:1077400013430249024A8B507047C046000026404E -:107750000C050000014B18687047C0460C6001081A -:10776000084AA623DB00D25803231340032B06D07C -:10777000044AA623DB00D35801201840704702209A -:10778000FCE7C0460000264010B5FFF7E9FF0228DD -:1077900001D0002010BD014B1868FBE71060010804 -:1077A000134B1A683E23D35C83421DD9042904D9A4 -:1077B0004B1EFF3B9BB2132B18D8FF290CD91F235C -:1077C00019400C4A0300C0339B009950D030800010 -:1077D00004238350002008E007231940D0308000A4 -:1077E000044BC150002000E0034870470248FCE70A -:1077F000D45F01080000264001004A0003000C4A43 -:1078000011683E228A5C824200D801BE1A00D03242 -:1078100092000849505807221040042800D07047B1 -:10782000C0339B005B581B300340E1301843F6E740 -:10783000D45F01080000264010B52A4B1A683E2389 -:10784000D35C834200D801BEFFF7D8FF88235B00DA -:10785000984231D012D802282BD004D903280BD15A -:10786000FFF73EFF3CE0002839D0012802D1FFF7A6 -:1078700071FF35E0002033E0002031E089235B0018 -:10788000984229D01423FF33984206D1164A174B49 -:10789000D358002B1DDB002022E01223FF33984237 -:1078A00005D1FFF7F7FE002810D1002018E00020D6 -:1078B00016E0FFF769FF13E00B4A0D4BD358002B7E -:1078C00001DB00200CE08020000209E080200002A3 -:1078D00006E08020000203E0FFF704FF00E0054817 -:1078E00010BDC046D45F0108000026403C050000E2 -:1078F0000C05000000127A00024AB023DB00D058C9 -:10790000C00F704700002640034AB223DB00D35863 -:10791000012018407047C046000026400B4BB120A4 -:10792000C0001A580A491140802292050A431A5091 -:10793000B021C9005A58520052085A5005495A58A5 -:10794000520052085A5000207047C046000026409E -:10795000FFFFFFCF8C05000070B5041E00D175E05D -:10796000FFF7CAFF002800D074E08023DB02226802 -:107970009A4200D301BE23689B039B0BE279002A45 -:1079800000D165E08022520413433349B022D20073 -:107990008B50A28880239B019A4200D301BE22898A -:1079A00080239B009A4200D301BEA388DB04DB0C3A -:1079B0002289120429490A4013432749284A8B5037 -:1079C000A37A0F2B00D901BEE37A0F2B00D901BE99 -:1079D000A28980239B019A4200D301BEA27A0F2381 -:1079E0001340E17A0901FF220A401343A2891202DF -:1079F0001C490A401343A27B1207C02189050A4093 -:107A000013431549B122D2008B50A379042B00D91E -:107A100001BE228A80239B009A4200D301BE0E48F9 -:107A200011494358114A1340A2791202E025ED0092 -:107A30002A401343435043580D4A1340228A1204EC -:107A4000064C224013434350002070BD01BE87E71F -:107A5000002299E70748F8E7000026400000FF01F0 -:107A60008405000000FF1F008C050000FFF8FFFFE9 -:107A7000FFFF00FE03004A0010B5002832D01A496B -:107A8000B023DB00CB589A03920B02608022520491 -:107A900013405A1E9341C371144BCB58DA04D20CD5 -:107AA00082801B0CDB05DB0D0381B123DB00CB588F -:107AB0000F2214001C4084721C092240C2721A0A50 -:107AC000D204D20C82811B0F032213408373084B14 -:107AD000CB58190A04320A4082711B0CDB05DB0DFE -:107AE000038210BD01BECAE70000264084050000E5 -:107AF0008C05000070B505002649274A8858802368 -:107B00001B0603438B502C0003E0012000F04EFBCA -:107B1000013C204AB223DB00D3585B0701D4002C80 -:107B2000F3D11C48B121C90043581C4A1A40802394 -:107B30009B0513434350002D01D0002C0CD0154958 -:107B4000B022D200885880231B0603438B5003E0E9 -:107B5000012000F02BFB013CFFF7D6FE002801D1ED -:107B6000002CF5D1002D01D0002C0ED00949B122F6 -:107B7000D2008858C0239B0503438B50002D02D0B0 -:107B8000002C05D00025280070BDFFF7C7FEF5E7E3 -:107B9000034DF8E7000026408C050000FFFFFFCFF3 -:107BA00002004A000138074B1A683F23D35C834226 -:107BB00000D801BE8130FF308000034BC058C00F99 -:107BC0007047C046D45F01080000264070B50138F8 -:107BD0000D4B1A683F23D35C834201D80B4870BD1C -:107BE0000B4D8130FF30840063590A4A1A408023CC -:107BF0009B0513436351012000F0D8FA63595B00E1 -:107C00005B0863510020EAE7D45F010801004A00E5 -:107C100000002640FFFFFFCFF8B504000D002F4BFA -:107C20001A683F23D35C834201D22D48F8BDFFF789 -:107C3000B9FF002845D1AA78931EDBB20E2B42D89B -:107C40006B78002B41D0122B41D82F783E00E97879 -:107C5000002932D0133086423BD300292FD0382060 -:107C6000864238D8013C2879022816D07F20384037 -:107C70001B02F8267601334003431204F820400328 -:107C800002401A43C90680231B05194011432300F3 -:107C90008133FF339B00134A995012498134FF34DA -:107CA000A4006358104A13402A791207C0208005A7 -:107CB0000240134363500020B8E71620CBE7702042 -:107CC000CEE70A48B2E70648B0E70548AEE7044801 -:107CD000ACE70348AAE70248A8E7C046D45F01081A -:107CE00001004A0000002640FFFFFFCF03004A00CA -:107CF0000138114B1A683F23D35C83421AD9813073 -:107D0000FF3080000D4BC3587F221A400A70180ABA -:107D10001F2210404870180C02408A708022120501 -:107D20001A40501E8241CA701B0F032213400B7170 -:107D3000002070470248FCE7D45F0108000026409D -:107D400001004A0070B50D00461E294B1A683F23FA -:107D5000D35CB34249D9274933008133FF339B00B9 -:107D600058588022120602435A502C0003E001208A -:107D700000F01CFA013C33009133FF339B001D4A95 -:107D80009B58DB0701D4002CF1D1002D01D0002C31 -:107D900017D033008133FF339B00164A9A58120FD5 -:107DA00003231340022B01D0002070BD114A8136FD -:107DB000FF36B600B158C0239B050B43B3500020DB -:107DC000F3E70C4C8136FF36B60033590A4A1A40A5 -:107DD00080239B0513433351012000F0E7F9335909 -:107DE0005B005B0833510548DFE70548DDE7C04627 -:107DF000D45F010800002640FFFFFFCF02004A00C9 -:107E000001004A00F0B587B01422002101A802F059 -:107E1000E8FB01A8FFF730FEFFF76EFD002807D052 -:107E200001AB9B7B022B01D0012302E0002300E089 -:107E3000002301AA019E94882000D279002A1FD035 -:107E40000225002B1ED000281DD00020FFF7F4FCD7 -:107E500032000023002101F087F906000F002A00FC -:107E600000232000002101F07FF902000B00CC0765 -:107E70004008204349088019794101F055F902E092 -:107E80000125DEE7002007B0F0BD0000F0B585B0A9 -:107E900004002E4B1B683F229A5C002A53D0002816 -:107EA00052D03E229B5C834200D801BE274B1A6809 -:107EB0003F23D35CA34201D2002045E005220021EC -:107EC00002A802F08EFB02A92000FFF711FF20009C -:107ED000FFF768FE002807D002AB1B79022B01D008 -:107EE000012302E0002300E0002302AA167857785D -:107EF00038009578002B24D0002F25D0002D01D1FB -:107F0000280021E02000FFF797FC32000023002129 -:107F100001F02AF9009001912A0000233800002185 -:107F200001F022F902000B00CC0740082043490869 -:107F3000009C019D24184D412000290001F0F4F817 -:107F400002E0002000E0002005B0F0BDD45F010891 -:107F500010B504000D4B1A683E23D35C834200D851 -:107F600001BE002C09D0094B1A683F23D35CA34201 -:107F700008D22000FFF760FC10BDFFF743FF002888 -:107F8000FAD1F6E72000FFF781FFF8E7D45F010898 -:107F900070B50600FFF76AFB05000124844030003D -:107FA000FFF732FBFFF7D4FF64082018E84070BDEC -:107FB00010B50020FFF7ECFF0400FFF7B5FA411CF5 -:107FC0004808001900F03AFF10BD10B5FFF7F0FFA8 -:107FD0000400FFF729FA411C4808001900F02EFFA1 -:107FE00010BD000030B5194B1B682C229A5C1F2A6B -:107FF00015D884080722250095432A1E22D1033272 -:108000001040C000FC3282401B682033A4001B19C2 -:108010001C688140614011406140196012E03C22BF -:108020009A5E0BB29A420ED007230340074A1268A9 -:10803000126880200006184380239B019C466144FF -:108040008900885030BD01BEEEE7C046D45F01080C -:1080500010B50A4B1B682C229A5C1F2A0AD91A6891 -:1080600080239B019C46614489008B585B005B0820 -:108070008B5010BD998FFFF7B5FFFAE7D45F010869 -:10808000094B9A68094B9A4204D010308000084B83 -:10809000C0587047002905D01030044A8300985812 -:1080A0009950F6E701BEF7E700ED00E00000000898 -:1080B00000000010F0B5C64600B582B0041E019164 -:1080C0004FD04368032B00D901BE0023E05E002897 -:1080D00025DA254E0023E25E6168002A24DB93083E -:1080E000224DC0339B005859804603273A40D200A6 -:1080F000FF208446070097404046B84307008901A7 -:1081000060460840904038435851194B9A68194BC3 -:108110009A4220D0300002B080BCB846F0BD6188E1 -:10812000FFF760FF0026D5E70F231340083B9B08AD -:1081300006339B000E48844663445F680320024078 -:10814000D200FC3005009540AF43890108409040C3 -:1081500038435860D9E70023E05E0199FFF790FFAC -:10816000D8E7014ED6E7C0460100560000E100E026 -:1081700000ED00E00000000810B5040006E0084B28 -:108180001868F8F701FA074B9C46644480231B02E9 -:108190009C42F4D8044B18686043F8F7F5F910BD19 -:1081A0008C0000080080FFFF9000000810B5034B12 -:1081B0001B785843F8F7E8F910BDC0469400000852 -:1081C00010B5FFF7D9FF10BD10B5FFF7EFFF10BDD9 -:1081D000054B802212069A649B6C002B01DB002069 -:1081E00070470248FCE7C0460000274003004600F5 -:1081F0000D4B8022120198585B68FF221A4202D070 -:108200008023DB021843084A084BD3581B0402D0D2 -:1082100080235B021843044A044BD3581B0C02D042 -:1082200080239B021843704700002640040800008A -:10823000FEE7000010B50A4B0268DA6142681A6274 -:1082400082685A62C2689A620269DA6242691A6393 -:1082500082695A63C2699A63FFF7EAFF10BDC0469C -:1082600038070008F0B5C64600B5002833D01923FA -:108270008B429B415B42314C22681668AC27D25B33 -:10828000B61832680325AA432B401A433260266889 -:108290003268F65B92191768294E374017602768D5 -:1082A0003A689046AE229446BF5A3A004244176854 -:1082B000AF433B431360226813686446125B9B180C -:1082C0001A6832401A60002807D010291DD92129C8 -:1082D00027D801221AE06423CAE7184B1B685522ED -:1082E0009A5C8A421FD256229A5C8A421DD2572239 -:1082F0009A5C8A421BD258229A5C8A4219D259222D -:108300009B5C8B4217D3553A00E000220B4B1B6855 -:1083100059680B680F20834313430B6080BCB84639 -:10832000F0BD0222F2E70022F0E70122EEE702228E -:10833000ECE70322EAE70522E8E7C046D45F01083C -:10834000FFFCFFFFB0235B055B78002B04D0B0235C -:108350005B055878C0B270472120FCE7B0235B056D -:108360009B899BB2002B04D0B0235B05988980B217 -:10837000704780204000FBE770B5FFF7EFFF8023D8 -:108380005B0098421AD0B0204005174BC358174ADB -:108390001340174C21680A689C25495952181168E6 -:1083A000C025AD0029400B43136022681368A0214B -:1083B00052589B180F4A82581A6070BD0C4B1A68AD -:1083C00011689C20125889180A680F24A2439A3811 -:1083D00002430A601B681A68A0215B58D218136810 -:1083E000A34303431360E8E748180000FFFCFFFFC6 -:1083F000D45F01084418000070B5FFF7AFFF802379 -:108400005B0098421AD0B0204005134BC358134A62 -:108410001340134C21680A689C2549595218116869 -:10842000C025AD0029400B43136022681368A021CA -:1084300052589B180B4A82581A6070BD084B1A6834 -:1084400013689C2152589B181A68074911408022D2 -:10845000D2010A431A60F0E750180000FFFCFFFF4A -:10846000D45F01084C180000FF8FFFFF10B5FFF725 -:1084700075FF80235B00984212D0B02252050F4B4B -:10848000D3580F4A13400F4A11680A689C200958B4 -:1084900052181168C020800001400B43136010BDCA -:1084A000084B1A6813689C2152589B181A68064991 -:1084B0001140C022D2010A431A60F0E71C180000E4 -:1084C000FFFCFFFFD45F0108FF8FFFFF70B5FFF7D0 -:1084D00045FF80235B0098421BD0B0204005184B1D -:1084E000C358184A1340184C21680A689C254959FA -:1084F00052181168C025AD0029400B431360226853 -:108500001368A02152589B18C122520182581A6048 -:1085100070BD0D4B1A6811689C20125889180A68A2 -:108520000F24A243993802430A601B681A68A021ED -:108530005B58D2181368A34303431360E8E7C046AF -:1085400024180000FFFCFFFFD45F010870B5204B2A -:108550001A6813689C2152589B181C68C02000019F -:108560000440FFF7FBFE80235B0098421FD01849B0 -:10857000086803689C2280581B181868154D28400D -:1085800018600868036880581B181D68C0263601EB -:108590003000A04305431D6009680B688A589B188A -:1085A00018683040001B431E9841C0B270BD0020C7 -:1085B000FCF7A4FE0400FFF7C5FE222803D8002C18 -:1085C00003D10120F2E70120F0E70020EEE7C046EA -:1085D000D45F0108FFF3FFFF70B584B006000D0003 -:1085E000022804D9042802D0032800D001BE6B1E43 -:1085F000DBB2012B04D9042D02D0082D00D001BE1E -:10860000B300294A9C58042D1FD0012D1FD0022DE4 -:1086100033D026006469002CFBD1002034E064696B -:10862000002C18D0214B984213D0A3682B42F6D1CE -:10863000E3681A6802925B6801930393290002A819 -:10864000236898471A4B1C60E9E70020E8E7002000 -:10865000E6E7012DE9D1012D01D004B070BD134B27 -:10866000984204D0B600134B0022F250F5E7B60052 -:108670000F4B1A680F4BF250EFE70D4B1E68002EA0 -:10868000CBD03669C9E73669002EE6D0B3682B42F5 -:10869000F9D1F3681A6802925B6801930393290089 -:1086A00002A833689847EEE754600108FF004200D3 -:1086B000506001083C600108F0B5C64600B50700EF -:1086C000012800D901BEFFF73DFE85B2FFF746FE47 -:1086D00006000020FCF712FE041E17D180235B0069 -:1086E0009E4201D02A4C12E0222D42D8294B1B6811 -:1086F000586829494358294A134098463A06802326 -:108700005B041A4043461343435000E0204C80234F -:108710005B009E422FD080235B009E4225D01D4BE4 -:108720001A683323D35C002B00D101BE194B1B68A0 -:108730001D6A80235B009E4220D0002F24D0184A5F -:1087400001212800FCF784FB00280ED1114B1A6888 -:10875000BC23D3585B191B68002BF7DBEB681B0E9F -:108760001B06A0221206934210D0200080BCB846FF -:10877000F0BD074CCBE7222DD1D8CCE7002F01D09C -:10878000084ADDE7084ADBE7084AD9E70400ECE7D6 -:1087900004004200D45F010818F00000FFFFFFFE54 -:1087A0000300000C01010030010000300100000C4A -:1087B00000283DD01F4B1B6888229A5819688C46A8 -:1087C0006244126802628C229A5819688C4662448C -:1087D0001268426246229A5C002A28D0E0229968F8 -:1087E0008A58D20623D5DA68F223DB01D358036016 -:1087F000104B1B68F022D201D9688A5842600E4A99 -:10880000D9688A5882600D4AD9688A58C2600C4A71 -:10881000D9688A5802610B4AD9688A5842610A4A63 -:10882000D9688A588261DA68084BD358C3617047A7 -:1088300001BEBFE7D45F010804780000087800009B -:108840000C78000010780000147800001878000000 -:1088500010B500283BD01F4B19680A6888240959B5 -:108860005218016A116019680A68043409595218CB -:10887000416A11601B6846229A5C002A26D0E022D9 -:1088800099688A58D20621D5F022D201D968446865 -:108890008C50114AD96884688C50104AD968C468D1 -:1088A0008C500F4AD96804698C500E4AD9684469C3 -:1088B0008C500D4AD96884698C500C4AD968C469B7 -:1088C0008C50DA680168F223DB01D15010BD01BE83 -:1088D000C1E7C046D45F01080478000008780000B2 -:1088E0000C78000010780000147800001878000060 -:1088F000F0B5C64600B50700FFF724FD0500012FBF -:1089000000D901BE7E4B5B68002B00D187E00121BE -:108910000120FFF761FE041E72D1F7F73EFE06004C -:10892000774B5B68002B03D004210120FFF754FE36 -:10893000744B1A68136ABA21515ACA00521A9B180A -:108940001A68002AF4DADB68DA0000D569E08020D2 -:10895000800518436B4B1B68BA215D5AEA00521B15 -:108960001D6AAC466244D060585AC200121A186A96 -:1089700084466244002050601A6A595ACB005B1A40 -:10898000D3185B68FFF7EAFC80235B00984200D1B4 -:108990007FE05C4B1A683323D35C002B00D101BE0F -:1089A000584B1A68116ABC23D3585B181B68002BFC -:1089B00000DB72E0544C534B1A68136ABA21515AC7 -:1089C000CA00521A9B181A68002AF4DADD68EB0014 -:1089D00000D581E04D4B1D404A4B1B68BA21585AC7 -:1089E000C200121A186A84466244D5601A6A595A3B -:1089F000CB005B1AD31800225A603000F7F7D1FD84 -:108A0000002C00D06DE03E4B5B68002B03D00821AA -:108A10000120FFF7E1FD200080BCB846F0BD002436 -:108A20007BE71B0F1B0798463948FFF7C1FE212D36 -:108A300018D0344D2B68196888229B58C9180B68C8 -:108A400034480340783213430B6029680B688C2547 -:108A500049595B18196801400A431A602C4B424679 -:108A6000134374E7274D2B68196888229B58C9184F -:108A70000B68284803409022120113430B602968B9 -:108A80000B688C2549595B18196801400A431A6024 -:108A9000E4E7380005F000FA8DE73323D35C012BBF -:108AA00000D801BE174B1968BA23CA5A0B6A9C46F4 -:108AB0006244BC23CB589B181B68002B0ADB164A68 -:108AC000136904210B431361012F01D030BF72E7FA -:108AD00020BF70E70C4C6EE728010009FFF7B8FED5 -:108AE00078E7074B5B68002B03D002210120FFF7DA -:108AF00073FD054B9C4200D18DE7084C8BE7C046C7 -:108B000054600108D45F010805004200FFFFFFDF49 -:108B100014600108FF00FFFF00ED00E0FF004200CD -:108B2000074A084BD3581F200340B0214905E822CB -:108B3000D200885CC01A431E9841C0B27047C0463C -:108B4000000026401CFF0000044B186880231B0413 -:108B5000184043425841C0B27047C046000026400A -:108B600010B5FFF7F1FF002810D01C4A13681C490C -:108B70000B4013600820FFF719FB6423174A1268A3 -:108B8000002A09DB002B07D0013BF7E7134A1368E3 -:108B900014490B401360EDE7002B01D1124810BDC2 -:108BA0000E4A136811490B4013600120FFF7FEFACB -:108BB000FFF7CAFF002801D10020F0E7FFF7B0FF60 -:108BC000012801D00020EAE7B0225205084BD15815 -:108BD000024A084BD1500020E1E7C0460000264081 -:108BE000FFFFFBACFFFFFBAD02004200FFFFFFFBFE -:108BF00010180000307F000010B5FFF7A5FF002817 -:108C000008D0054B054A10681840C01A4342584125 -:108C1000C0B210BD024BF5E700000453000026402F -:108C200000000452F8B50400012800D901BEFFF786 -:108C30008DFC002802D12D4D2800F8BDF7F7ADFCC2 -:108C40000600002C14D12A4A2A4B0021D150B02210 -:108C50005205E823DB00D75CFFB20120FFF72CFDB3 -:108C6000051E02D0002D2AD11DE0FFF785FBF9E794 -:108C7000FFF7C2FF002826D01D4A1E4B5021D150BD -:108C8000B02252051C4BD75CFFB219491B4A8B58C6 -:108C90001F208343143803438B500838FFF786FAAC -:108CA000FFF7AAFB00251248144943581F2293439B -:108CB0003A4013434350002C0DD1FFF7D7FB30004F -:108CC000F7F76FFCB8E7B02252050D4BD158084AB0 -:108CD000084BD150D4E70720FFF768FAFFF7F6FBFF -:108CE0000020FFF7E9FC0500E9E7C0460300420069 -:108CF00000002640307F0000410700001CFF0000FC -:108D000010180000084B5A6C120AFF2313403A2B2C -:108D100000D0704704494B6C044A1A40E8239B0179 -:108D200013434B64F5E7C04600002740FFC5FFDF53 -:108D300004494B6C044A1A40E8239B0113434B64DB -:108D40007047C04600002740FF00FFFF042810D0F6 -:108D500000060B4B1A681368A42152589B18C022B6 -:108D6000920410401860074A1368A0398B431360BF -:108D70007047044A136804210B431360F8E7C046A8 -:108D8000D45F010810E000E0044AC0235B00D05823 -:108D9000800F431E9841C0B27047C0460000264075 -:108DA0000749C02252008B589B009B088020C005B9 -:108DB00003438B50885880231B0603438B50704716 -:108DC0000000264010B5040080235B02984200D3C7 -:108DD00001BEFFF7D9FF002809D1054AC4235B0073 -:108DE000D058000C00042404240C0443D45010BDBB -:108DF0000000264010B504000F2800D901BEFFF77F -:108E0000C3FF00280BD10649C42252008B580548E5 -:108E100003402404F020000304401C438C5010BD88 -:108E200000002640FFFFF0FF034AE023DB000121A2 -:108E3000D150D3587047C046000026400022430856 -:108E40008B4274D303098B425FD3030A8B4244D312 -:108E5000030B8B4228D3030C8B420DD3FF22090254 -:108E600012BA030C8B4202D31212090265D0030B13 -:108E70008B4219D300E0090AC30B8B4201D3CB0309 -:108E8000C01A5241830B8B4201D38B03C01A52414B -:108E9000430B8B4201D34B03C01A5241030B8B424D -:108EA00001D30B03C01A5241C30A8B4201D3CB0238 -:108EB000C01A5241830A8B4201D38B02C01A52411D -:108EC000430A8B4201D34B02C01A5241030A8B4220 -:108ED00001D30B02C01A5241CDD2C3098B4201D338 -:108EE000CB01C01A524183098B4201D38B01C01AB6 -:108EF000524143098B4201D34B01C01A524103092D -:108F00008B4201D30B01C01A5241C3088B4201D3DB -:108F1000CB00C01A524183088B4201D38B00C01A88 -:108F2000524143088B4201D34B00C01A5241411AAF -:108F300000D20146524110467047FFE701B50020BC -:108F400000F0F0F802BDC0460029F7D076E7704780 -:108F500003460B437FD4002243088B4274D303099A -:108F60008B425FD3030A8B4244D3030B8B4228D33B -:108F7000030C8B420DD3FF22090212BA030C8B4261 -:108F800002D31212090265D0030B8B4219D300E001 -:108F9000090AC30B8B4201D3CB03C01A5241830B86 -:108FA0008B4201D38B03C01A5241430B8B4201D336 -:108FB0004B03C01A5241030B8B4201D30B03C01A5F -:108FC0005241C30A8B4201D3CB02C01A5241830AD9 -:108FD0008B4201D38B02C01A5241430A8B4201D308 -:108FE0004B02C01A5241030A8B4201D30B02C01A32 -:108FF0005241CDD2C3098B4201D3CB01C01A524199 -:1090000083098B4201D38B01C01A524143098B4221 -:1090100001D34B01C01A524103098B4201D30B010A -:10902000C01A5241C3088B4201D3CB00C01A52412F -:1090300083088B4201D38B00C01A524143088B42F4 -:1090400001D34B00C01A5241411A00D2014652418D -:10905000104670475DE0CA0F00D04942031000D3AC -:109060004042534000229C4603098B422DD3030A01 -:109070008B4212D3FC22890112BA030A8B420CD311 -:10908000890192118B4208D3890192118B4204D33A -:1090900089013AD0921100E08909C3098B4201D3BA -:1090A000CB01C01A524183098B4201D38B01C01AF4 -:1090B000524143098B4201D34B01C01A524103096B -:1090C0008B4201D30B01C01A5241C3088B4201D31A -:1090D000CB00C01A524183088B4201D38B00C01AC7 -:1090E0005241D9D243088B4201D34B00C01A52419E -:1090F000411A00D20146634652415B10104601D32B -:109100004042002B00D54942704763465B1000D3B4 -:10911000404201B5002000F005F802BD0029F8D05A -:1091200016E770477047C046002B11D1002A0FD1B7 -:10913000002900D1002802D00021C943080007B44B -:10914000024802A14018029003BDC046D9FFFFFFAC -:1091500003B4684601B5029800F052F8019B9E46A0 -:1091600002B00CBC7047C046F0B5CE46474680B54D -:10917000070099463B0C9C4613041B0C1D000E0077 -:1091800061460004140C000C45434B4360436143AB -:10919000C0182C0C20188C46834203D980235B0214 -:1091A0009846C444494679437243030C63442D04F2 -:1091B0002D0CC918000440198918C0BCB946B04626 -:1091C000F0BDC04670B500220C4B04000D0001F04C -:1091D00005F8002804D12000290000F065FF70BDCB -:1091E000064B00222000290000F0CCFB00F05CFFC1 -:1091F00080231B069C466044F1E7C0460000E04126 -:10920000F0B557464E464546DE46E0B504000D0033 -:109210009246994683B08B4230D82DD0494650466D -:1092200001F004F829000600200000F0FFFF331AC7 -:109230009846203B9B4633D45A4653469340424679 -:109240001F00534693401E00AF423AD8AF4200D1B0 -:1092500078E05B46A41BBD41002B00DA75E00022DC -:1092600000230092019301235A4693400193012366 -:1092700042469340009328E08242CFD90022002347 -:10928000009201930C9B002B01D01C605D60009844 -:10929000019903B0F0BCBB46B246A946A046F0BD5A -:1092A000424620239B1A5246DA40414613004A4662 -:1092B0008A40170042461F43534693401E00AF4268 -:1092C000C4D900220023009201934346002BD9D039 -:1092D000FB0772081A4346467B080EE0AB4201D1F9 -:1092E000A2420CD8A41A9D41012024196D410021ED -:1092F000013E24184D41002E06D0AB42EED9013E6E -:1093000024196D41002EF8D1009801995B4600198F -:109310006941002B24DB2B005A464446D3402A00E7 -:10932000E2401C005B461500002B2ADB26009E4015 -:10933000330026004746BE403200801A9941009013 -:1093400001919FE7A342BCD883E742462023002136 -:109350009B1A0022009101920122DA40019286E7D5 -:10936000424620239B1A2A0046469A402300F34097 -:10937000444613432A00E2401C005B461500002BC4 -:10938000D4DA42462F002023260097409B1ADE4065 -:109390003B003343CDE7C046F0B557464E46454601 -:1093A000DE46E0B5814605000C03480092461F00EA -:1093B00085B0240B400DCE0F002800D156E1D44BD0 -:1093C000984200D172E16B0FE4001C4380231B0420 -:1093D00023439846CF4BED009B4600239946834498 -:1093E00000933C037B005046240B5B0DFF0F002BCA -:1093F00000D11FE1C64A934200D162E1C549420F44 -:109400008C46E40059461443802263441204CB1A6C -:1094100014439B46C200002033007B409A464B46D3 -:109420000F2B27D8BC499B00CB589F46B246009BC8 -:10943000022B16D0032B00D18EE2012B00D0D9E0F5 -:1094400000230024002552461B052343D207134363 -:109450002800190005B0F0BCBB46B246A946A0469C -:10946000F0BD00240025AA4BEDE7BA46A046150042 -:109470000090DCE7444500D2C7E100D1C2E10123FE -:109480005B429C462E0040460025E3442302140E16 -:109490001C431B0C994623041F0C120249460092E0 -:1094A0000197FFF751FD02007A430B04310C80460F -:1094B00019438A4207D901235B429C460919E044BB -:1094C0008C4200D807E2881A4946FFF73DFD09049F -:1094D0008C4631046646019A090C4243030031432D -:1094E0008A4204D90919013B8C4200D8EDE1881A5F -:1094F000424612041A4390464146009B0E041B0C40 -:109500001F000293009B360C1B04190C0B007343C5 -:10951000120C7E43039151437A431F0CBC467618CC -:109520006644B14203D9802149028C466244310C21 -:109530008A1831041E04360C8E19904202D312D1BF -:10954000B54210D24346591E009B9C4665441F00FD -:109550009D429B415B421B19C018844200D2A0E18E -:1095600000D19BE18846AE1BB542AD41801A6D42E9 -:10957000401B844200D1D5E14946FFF7E5FC019A42 -:109580000B044243310C050019438A4200D96CE1B7 -:10959000881A4946FFF7D8FC019A36044243090469 -:1095A000360C03000E43B24200D953E10398B61AB9 -:1095B00002002D041D43029F2B041B0C5A437B43C6 -:1095C0009C46290C4843130C8444634479439842D5 -:1095D00003D98020400284466144180C12041B0405 -:1095E000120C41189B188E4200D2FFE000D1FAE025 -:1095F00001231D43494A5A44002A00DCAAE06B07B4 -:1096000000D03DE1ED084346DB0106D54246444B20 -:109610001A4090468022D2005A44424B9A4200DDC2 -:109620001FE743465B071D43434652055C02240B7C -:10963000530D08E75246224300D17BE0002C00D1B5 -:10964000FAE0200000F0D4FD02000B3A1D230100D7 -:109650009B1A52460839DA408C40144352468A40DD -:10966000314B58449B4683440020D5E64B46234368 -:10967000984644D0002C00D1CEE0200000F0B8FD88 -:10968000010002000B391D235B1A49461000D94026 -:10969000083884400B004D462343984685402348B4 -:1096A000831A9B460023994600939AE64B46234330 -:1096B00098461DD108239946063B00258346009312 -:1096C0008FE65246224309D1022349461943184BDB -:1096D00089469C4600240220E3449DE603234A4633 -:1096E0001A43134B91469C4652460320E34493E6AB -:1096F0000C239946093BA0468346009371E6042358 -:10970000994600239B4601330025009369E6C04635 -:10971000FF07000001FCFFFF74F20010FF030000D0 -:10972000FFFFFFFEFE070000F30300000DFCFFFF3C -:1097300001F8FFFF4946012319438946002401200F -:109740006AE6002380249A4600258A4B24037AE6A1 -:1097500001256D4201239B1A382B00DD70E61F2B7B -:1097600000DCBFE01F2149428A1A4146D1400A006D -:10977000202B04D04146804B5B4499400D436B1E27 -:109780009D4107232A431D0000241540134200D1A8 -:10979000D4E00F2100231140042900D1CBE0111D9A -:1097A0009142924152429B180A00190200D4C2E031 -:1097B00001230024002546E6802341461B0319426D -:1097C00008D01C4206D11C432403BA461500694B3D -:1097D000240B38E68024434624031C432403B2466A -:1097E000644B240B2FE6002B00D103E7A619681E5B -:1097F000A64200D28DE08E4200D2A3E000D1B3E0B9 -:109800000500F5E6AA4200D939E64346DE075808C6 -:109810006B081E43ED0739E6484600F0E9FC0100FD -:109820000200153120321C2900DC2CE74B46083899 -:1098300083400025984632E700F0DAFC03001A0066 -:10984000153220301C2A00DC00E75446083B002279 -:109850009C4005E73619013BB44200D9A6E6B24266 -:1098600000D8A3E6831E3619A0E60919013D8C42F3 -:1098700000D98DE68A4200D88AE6851E091987E656 -:109880000F232B40042B00D1BCE605235B42AB42E7 -:109890009B4104355B42ED089844B4E6AF4200D9E1 -:1098A00060E6824204D800D05CE6AE4200D859E6B9 -:1098B00002235B429C46009BE0449C4665449D42DB -:1098C0009B415B421B19C0184DE68A4200D80EE648 -:1098D000831E09190BE68A4200D8F4E5831E9846D8 -:1098E0000919F0E52549280059448D4042468A402F -:1098F000691E8D414146D840D94002432A430B009E -:10990000510700D151E70F211140042900D046E74B -:109910004BE705008E4200D06AE6009A934200D0E1 -:1099200066E667E6164A5A44002A00DC10E701237F -:109930000025984467E65D075B021C0BD2080023F4 -:10994000154380E50098023D42008242BF417F42BC -:109950003C1936190092DDE78024434624031C435A -:109960002403044B240B6EE5009A9A42EAD30500C7 -:10997000D3E7C046FF0700003E0400001E040000BD -:10998000FF030000F8B557464E464546DE46E0B5B3 -:109990001E0017004A000B03520D5B0A9046420F4F -:1099A0001A43CD0FCD4C3103C300944670007A0F9B -:1099B000490AFF009A46B946400DF60F1143A042EE -:1099C00000D1B1E001225640B346B54200D188E053 -:1099D0004246121A002A00DCAEE0002800D1C1E0A5 -:1099E000BE48804500D151E1802000040143382A5F -:1099F00000DD7BE11F2A00DDEEE120203E00801A21 -:109A00000C00D640D140874062468440521A781EEE -:109A10008741944634432743DC1BA3429B41624663 -:109A20005B42D31A99464B461B0200D418E14B46C1 -:109A30005802430A99464B46002B00D137E148466D -:109A400000F0D6FB010008392023220048465B1AAB -:109A5000DA4088408C4043461043884500DD36E1BB -:109A6000C91A4B1C1F2B00DDEAE020222600D21A67 -:109A700001009440DE40D84000239140621E944192 -:109A80008146984631430C43630709D00F23234096 -:109A9000042B05D0231DA342A4416442A1441C0011 -:109AA0004B461B0200D4DEE041468C4B013199420B -:109AB00000D1E7E04B468A48E40803401800490516 -:109AC0005B07400223434A0D040B1205ED072243B6 -:109AD0002A4318001100F0BCBB46B246A946A04676 -:109AE000F8BD4246121A002A52DD002800D19CE03F -:109AF000A04500D1CAE0802000040143382A00DDDF -:109B000049E11F2A00DC97E110000E002038C64012 -:109B1000202A04D04020821A91400F43B9464C4677 -:109B2000621E944134433AE10A003A4328D0B346D6 -:109B3000B5422BD06B4A4244002A5DD0424644468F -:109B4000821A002C00D0F5E065461D4300D19CE14F -:109B5000551E012A00D1FBE1604CA24200D1BDE1BB -:109B60002A00F0E00800384300D1C3E0501E012A6B -:109B700000D1A8E1594CA24200D187E0020036E7AB -:109B800001225640B346B54200D021E7554A42442F -:109B9000002A00D1B5E042464446821A002C00D18A -:109BA00038E14E4EB04200D1DEE1802664463604F4 -:109BB0003443A446382A00DD96E11F2A00DD24E262 -:109BC0002026B41AA24664465646B440A1461C005C -:109BD0004E46D440264334005646B3405E1EB34141 -:109BE0001C436346D340C918E419BC42BF417F42BD -:109BF000B94680468944D8E040463B4C013020427B -:109C000000D0B4E04046002800D044E1604618434C -:109C100000D190E10800384300D0AAE16146DB089A -:109C200049070B436146CC0827E00800384361D060 -:109C3000501E012A00D139E1A24227D002005DE77F -:109C400002001F39CA401100202B03D04022D31A32 -:109C500098400443631E9C410023994698460C4358 -:109C6000630700D012E74B464A46E4085B072343EC -:109C7000D408424619498A420ED024035205240BC7 -:109C8000520D22E70A00002400231EE7DB0862468B -:109C9000520713436246D4081A00224300D1FCE164 -:109CA00080221203144324030C4A240B0DE72000E6 -:109CB00000F09EFA010018311F2900DCC4E60838C4 -:109CC0008440434620000024884500DCC8E6044A5E -:109CD0005B1A104098468146D6E6C046FF07000052 -:109CE000FFFF7FFF01F8FFFFFE0700000F437A1E12 -:109CF000974191E66146DB0849070B436146CC0872 -:109D0000B8E74046D34C0130204200D0A2E04046A4 -:109D1000002800D001E16046184300D15EE1080050 -:109D2000384300D05FE16146DB0849070B436146D9 -:109D3000CC08A2E7C84DA84200D1CFE080256446F8 -:109D40002D042C43A446382A56DC1F2A00DDD1E01E -:109D500020251E00AD1A6446AB40AC40D6405D1EC7 -:109D6000AB41344323436446D440091B49E0604679 -:109D7000DC1B461AA34280414042814630004E46D9 -:109D8000801B8146000276D44B46234300D052E626 -:109D90000024002571E739430C00621E9441E41849 -:109DA0009C429B415B42634499464B461B0200D454 -:109DB00056E701239C46A84BE044984538D04B46D3 -:109DC000A648012203401800630814401C43C3073F -:109DD0001C434308994657E610000E002038C64041 -:109DE000202A04D04020821A91400F43B9464F46A2 -:109DF0007A1E974137430FE662461A4313005A1EF4 -:109E00009341FC1AA742BF417F42CB1B99465D4656 -:109E1000804608E666461E4300D1BEE0561E012A73 -:109E200000D109E18C4CA24200D119E13200C1E617 -:109E300042460024002348E620200C00801A3E0001 -:109E400087408440D640781E8741D14034433C430C -:109E50008C44A4E7804A904200D1E9E0DF199F4298 -:109E60009B4161445B42C918CC077F084B08994667 -:109E700080463C43F4E6FC1AA742BF4163467F425A -:109E8000C91ACB1B99465D46D5E5FF084B075D46D1 -:109E90003B43CC08EEE662461A4300D082E00B005A -:109EA0003B431BD1802400252403F9E6DC199C42A6 -:109EB0009B41614489465B4299444B461B0244D412 -:109EC00001239846CCE6DC1B6246A3429B41511A13 -:109ED0005B42CB1A994601239846A4E5FF084B073D -:109EE0005D463B43CC08D7E662461A431400631E26 -:109EF0009C4179E615006446203DEC40A046202AAE -:109F000005D040256446AA1A944023439A465446F5 -:109F1000631E9C414346234373E762461A4323D0A2 -:109F20000A003A4300D0A0E06246DB085207134320 -:109F30006246D408B0E60B003B4300D128E7FF0897 -:109F40004B075D463B43CC0897E60223984636E72D -:109F5000FC1AA742BF4163467F42C91ACB1B9946F0 -:109F600001235D4698465EE54B07FF083B43CC085E -:109F700092E6DC1B6046A342B641401A7642801B43 -:109F80008146000260D5FC1AA742BF4163467F426A -:109F9000C91ACB1B99465D4676E5FF084B073B4344 -:109FA000CC0867E60A00DB083A4300D16FE6624658 -:109FB000520713436246D40880221203144207D08A -:109FC000C808104204D15D460400FB0849070B4352 -:109FD0005A0FDB00DB08520713435DE64B07FF080F -:109FE0003B43CC0849E6DC199C429B4161448946CD -:109FF0005B4299444B461B0200D431E64A46174B5C -:10A000001A400123914698462AE616006446203EEF -:10A01000F440A046202A05D040266446B21A944057 -:10A0200023439A465446631E9C4143461C43DBE54A -:10A0300002000024002348E5DC19BC42BF41614412 -:10A0400089467F42B94438E74B46234300D19FE617 -:10A0500006E6C046FE070000FF070000FFFF7FFF87 -:10A06000FF084B073B43CC0816E66246DB08520765 -:10A0700013436246D40880221203144207D0C80852 -:10A08000104204D15D460400FB0849070B435A0FF8 -:10A09000DB005207DB081343FEE50023014A1C00E6 -:10A0A00013E5C046FF0700000A0030B5134C53000B -:10A0B00009030500090B00205B0DD20FA34204DD4C -:10A0C0000F48834202DD0F4BD01830BD8020400383 -:10A0D00001430D48C01A1F2808DD0C48C31AD94097 -:10A0E0000B005842002AF0D11800EEE7084CC5409A -:10A0F000A446634499400B002B43F2E7FE030000A3 -:10A100001D040000FFFFFF7F330400001304000064 -:10A11000EDFBFFFF70B5002816D0C317C5185D40D2 -:10A12000C40F280000F064F8114A121A0A2816DC3D -:10A1300003002E0015339E400B23181AC54052050C -:10A140002D032D0B530D03E00024002300250026D2 -:10A150001B052B43E40723433000190070BD0B3867 -:10A16000854052052D0300262D0B530DF0E7C04608 -:10A170001E0400008446100062468C4619006346A7 -:10A1800000E0C0461FB500F005F9002801D4002109 -:10A19000C8421FBD10B500F055F84042013010BD57 -:10A1A00010B500F0F7F8002801DB002010BD0120F9 -:10A1B00010BDC04610B500F0EDF8002801DD00200C -:10A1C00010BD012010BDC04610B500F07DF800287C -:10A1D00001DC002010BD012010BDC04610B500F00C -:10A1E00073F8002801DA002010BD012010BDC04620 -:10A1F0001C2101231B04984201D3000C10391B0AB7 -:10A20000984201D3000A08391B09984201D300097A -:10A21000043902A2105C40187047C04604030202D1 -:10A2200001010101000000000000000010B500293C -:10A2300003D1FFF7DDFF203002E00800FFF7D8FF71 -:10A2400010BDC046F0B54E464546DE4657469046E0 -:10A25000E0B517001A03120B0500844619480E03D7 -:10A260004C0091465A00DB0F9B46360B640DC90F1C -:10A27000520D844219D0824210D0012094420ED156 -:10A280004E450CD10120C44509D1594517D0002CA9 -:10A2900005D130002843431E984100E00120F0BC66 -:10A2A000BB46B246A946A046F0BD330001202B4371 -:10A2B000F5D1A242F3D14B463B43F0D1E2E7002077 -:10A2C000EDE7C046FF070000F0B54746CE46040064 -:10A2D000180016001B031B0B2D4D4A00994680B534 -:10A2E00043000F03A446B0463F0B520DC90F5B0D50 -:10A2F000C00FAA4221D0AB4213D0002A22D13C4346 -:10A30000002B02D14D462E4322D0002C10D081428A -:10A3100022D00220013908400138C0BCB946B046FD -:10A32000F0BD4D462E4329D1002AF0D13C43EED159 -:10A330000028F2D101204042EFE73D0025431DD126 -:10A340009342EED0002BE2D14C462643DFD1E0E72A -:10A350000020002CE1D0DCE79A420ADCE8DB4F4524 -:10A36000D7D80ED000204F45D7D20029E2D0080020 -:10A37000D3E74342584140000138CEE70220404233 -:10A38000CBE7C445C5D80020C445C6D2EDE7C046DA -:10A39000FF070000F0B54746CE460400180016003F -:10A3A0001B031B0B2C4D4A00994680B543000F033D -:10A3B000A446B0463F0B520DC90F5B0DC00FAA4219 -:10A3C0000DD0AB4210D0002A27D13C43002B11D135 -:10A3D0004D462E430ED10020002C15D00EE03D003E -:10A3E000254310D1934218D14D462E430BD1002A5C -:10A3F00002D13C43002C0BD0814214D00220013901 -:10A400000840013800E00220C0BCB946B046F0BDAB -:10A410000028F9D101204042F6E7002BECD14C4650 -:10A420002643E9D1EAE79A4204DD4342584140001D -:10A430000138E9E79A42EBDB4F45DFD806D0002030 -:10A440004F45E1D20029E5D00800DDE7C445D5D865 -:10A450000020C445D8D2F5E7FF07000030B514004E -:10A460001A00094B05001B6885B0D868074B002C03 -:10A4700001D1074B1C00019300912B000549029468 -:10A4800000F00AF801F07CF8EC010008B4F20010CA -:10A49000EFF20010C1F200100EB403B5010003ABDF -:10A4A000044804CB0068019300F0DAF902B008BC5C -:10A4B00003B01847EC010008F7B553430500170037 -:10A4C000089C01910093002804D08369002B01D1DE -:10A4D00002F030F8274B9C4225D16C68636EDB0795 -:10A4E00005D4A3899B0502D4A06D00F057F8A38979 -:10A4F0001B0722D52369002B1FD00026009B9E42FC -:10A5000022D0019B995DA368013BA360002B04DA74 -:10A51000A269934226DB0A2924D023685A1C2260B0 -:10A5200019700136EAE7144B9C4201D1AC68D5E7BB -:10A53000124B9C42D2D1EC68D0E72100280000F0F9 -:10A54000A7FF0026B042D8D0636EDB0705D4A389ED -:10A550009B0502D4A06D00F022F839003000FEF710 -:10A560006DFCFEBD2200280000F03CFF431CD8D14A -:10A57000EAE7C046F0F4001010F50010D0F4001027 -:10A5800007B5009313000A00010002480068FFF7B6 -:10A5900093FF0EBDEC01000870477047704770478D -:10A5A00010B5034B0100186800F0BCF810BDC046A0 -:10A5B000EC01000830B500240139A24201D100208D -:10A5C00005E0035D01340D5DAB42F6D0581B30BD94 -:10A5D000002310B59A4200D110BDCC5CC4540133A5 -:10A5E000F8E703008218934200D1704719700133D5 -:10A5F000F9E770B5130C0D0C1ED1002B0CD189B2EC -:10A6000094B24C43210000F08DF8051E1BD02200AF -:10A610000021FFF7E6FF16E01D1C0B1C92B289B269 -:10A620009CB25143ABB263430C0C1C19220C07D1F2 -:10A63000240489B20C43E5E7002B01D1131CEDE79C -:10A640000C2300250360280070BD000070B50500D4 -:10A65000002910D00C1F2368002B00DAE418280012 -:10A6600002F096F81D4A1368002B05D16360146050 -:10A67000280002F095F870BDA34208D9216860183F -:10A680008342F3D118685B6841182160EEE71A0035 -:10A690005B68002B01D0A342F9D911685018A04281 -:10A6A0000BD120680918501811608342E0D1186856 -:10A6B0005B68411811605360DAE7A04202D90C23AD -:10A6C0002B60D5E721686018834203D118685B6866 -:10A6D0004118216063605460CAE7C0466C6001089D -:10A6E00070B50F4E0D0031680400002902D100F052 -:10A6F0005FFE30602900200000F05AFE431C0AD0A3 -:10A700000323C51C9D43A84207D0291A200000F04E -:10A710004FFE431C01D101256D42280070BDC0468B -:10A7200070600108F7B50322CB1C93430833060081 -:10A730001F000C2B32D20C27B94231D8300002F066 -:10A7400027F8324D2B681C00002C2ED13900300028 -:10A75000FFF7C6FF0400431C1ED12C682500002D06 -:10A760004AD123682900E3183000019300F020FE4D -:10A77000019B834243D123680337FF1A03239F437E -:10A7800008370C2F00D20C2739003000FFF7A8FF44 -:10A79000431C34D02368DF19276013E0002BCBDA89 -:10A7A0000C23002533602800FEBD2268D11B20D475 -:10A7B0000B2917D9E2192760A34211D12A606368D7 -:10A7C000116053603000250001F0EAFF07220B35CD -:10A7D000231D9543EA1A9D42E5D05B1BA350E2E797 -:10A7E0005A60ECE76268A34201D12A60EAE75A6046 -:10A7F000E8E723006468A7E72C006D68AFE70C2347 -:10A800003000336001F0CCFFCDE7C0466C6001083A -:10A81000936810B5013B9360002B04DA9469A3425E -:10A8200007DB0A2905D01368581C1060197008004E -:10A8300010BD00F0D7FD0100F9E7F8B506000F00E4 -:10A840001400D518AC4201D1002007E021783A006D -:10A850003000FFF7DDFF0134431CF3D1F8BD0000E9 -:10A86000F0B5A1B006000C001F000392002804D030 -:10A870008369002B01D101F05DFE8E4B9C421CD1FF -:10A880007468636EDB0705D4A3899B0502D4A06DB1 -:10A89000FFF784FEA3891B0702D52369002B1DD176 -:10A8A0002100300000F0F4FD002817D0636EDB07B4 -:10A8B0000DD50120404221B0F0BD7F4B9C4201D11B -:10A8C000B468DEE77D4B9C42DBD1F468D9E7A3890D -:10A8D0009B05EED4A06DFFF762FEEAE7002308AD0A -:10A8E0006B6120336B761033AB760797039F3B7811 -:10A8F000002B01D0252B4ED1039BFB1A0593039B04 -:10A900009F420DD0059B21003000039AFFF795FF71 -:10A91000431C00D1B5E06A69059B944663446B61B2 -:10A920003B78002B00D1ACE001227B1C0393002379 -:10A9300052426A6004A9543252182B60EB60AB603B -:10A940001370AB65039B052219785D4801F014FF75 -:10A95000039B5F1C002820D12A68D30604D553230B -:10A9600004A95B1820211970130704D5532304A9E7 -:10A970005B182B211970039B1B782A2B16D0002102 -:10A98000EB68039F3A78781C303A8446092A4FD9FD -:10A99000002911D117E00137A9E7494B2A68C01AED -:10A9A0000123834013432B600397CBE7079B191DBB -:10A9B0001B680791002B01DB0B9304E05B42EB600B -:10A9C000022313432B603B782E2B0AD17B782A2B52 -:10A9D00037D1079B02371A1D1B680792002B2DDB0E -:10A9E000099303223978374801F0C6FE002807D0C2 -:10A9F000344B2A68C01A40238340134301372B602D -:10AA000039787B1C062230480393297601F0B4FE86 -:10AA1000002845D02D4B002B27D10722079B073359 -:10AA20009343083307936B69049A9B186B615DE746 -:10AA30000A214B4367469B180939A3E701235B4270 -:10AA4000CEE700231A0001376B603978781C303963 -:10AA50008446092903D9002BC3D00992C1E70A23F0 -:10AA60005A4367465218093BEFE707AB00932200B1 -:10AA700029003000164B00F0D7F80490049B0133F6 -:10AA8000D1D1636EDB0705D4A3899B0502D4A06DE9 -:10AA9000FFF785FDA3895B0600D50AE70D980AE755 -:10AAA00007AB0093220029003000094B00F06EFB39 -:10AAB000E3E7C046F0F4001010F50010D0F40010E9 -:10AAC000F4F20010FAF20010FEF2001029AC0010AF -:10AAD0003BA80010F0B51E00002314008BB09E426E -:10AAE00004DA8021090673181E002D23129A149F80 -:10AAF0001370202303229F43462F07D03B00453B82 -:10AB000059424B411099013ACB18109309AB049369 -:10AB100008AB0393139B00920293109B22000193B6 -:10AB2000330000F0BFFD0500472F02D1119BDB076A -:10AB300028D5109BEB180793462F14D12B78302B78 -:10AB40000CD10022002320003100FFF723FB002856 -:10AB500004D10123109A9B1A139A1360139B079A2E -:10AB60001B68D31807930022002320003100FFF751 -:10AB700011FB002801D0079B09933022099B0799FC -:10AB80008B4206D32800099B159A5B1B13600BB000 -:10AB9000F0BD591C09911A70F0E7F0B5831C87B01D -:10ABA000039305000C002B230270002901DA4C42AC -:10ABB00002336B70092C31DD0A2704ABDE1D200047 -:10ABC00039000196FEF7AAFA013E303120003170BB -:10ABD00039000294FEF7BCF9029B0400632BEEDC03 -:10ABE000019B30349A1E13000399147004A8073097 -:10ABF00098420ED804AB073300209A4204D804AB25 -:10AC00000930C018019BC01A039B1818401B07B0DD -:10AC1000F0BD1878013308700131E7E73023E418FC -:10AC2000AB70281DEC70F1E7F0B595B00C000992FF -:10AC30001E001A9D070001F01DFD036818000C930B -:10AC400000F0C8FB00231293237E07220A93236897 -:10AC50000E900D930D992B68C90547D59B1893430A -:10AC60001A0008322A601A685B68A264E364012251 -:10AC7000A36CE56C0B936B005B080F930B98A74BD1 -:10AC80000F99524203F076F8002831D10122A34BEC -:10AC90000B980F995242FFF78DFA002828D1002215 -:10ACA000002329000B98FFF77BFA002803D023002C -:10ACB0002D2243331A700A9B994D472B00D9994D89 -:10ACC00003230D9A236101339A43002322600B93DF -:10ACD000099B21003800009613AA00F0E7F9431CF5 -:10ACE00000D0A2E00120404215B0F0BD0733B6E726 -:10ACF0000B9A2B001000290003F03CF800280BD021 -:10AD0000002D03DA23002D2243331A700A9B864D4F -:10AD1000472BD5D9854DD3E720220A996368914303 -:10AD20000F915A1C49D10733636080230D9ADB00D1 -:10AD300013430022069212AA05920A9A08A90492C5 -:10AD400011AA03922322236001936368521802928E -:10AD5000009338002B000B9AFFF7BCFE0F9B0500F9 -:10AD60001199472B08D1CB1C02DB6368994248DD5F -:10AD70000A9B023BDBB20A930A9B652B24D8200076 -:10AD80001A00013950301191FFF707FF129A0B900A -:10AD900013182361012A02DC2268D20701D501338E -:10ADA0002361232308AA9B181B78002B00D18FE76F -:10ADB00023002D2243331A708AE70F9A472AB4D111 -:10ADC000002BB2D10133AFE70A9B662B1BD163681E -:10ADD00000290DDD2161002B02D12268D20702D5A6 -:10ADE000013359182161119BA36500230B93D8E708 -:10ADF000002B03D101222168114200D09A1C22614C -:10AE0000F1E767230A93119B129A934206DB2268AB -:10AE10002361D207E7D501332361E4E70121002B49 -:10AE200001DC4918C91A5218E9E72268530507D40A -:10AE300023692A0038000999B047431C28D151E7FB -:10AE40000A9B652B00D8E1E0A06CE16C0022002396 -:10AE5000FFF7A0F9002831D001233800344A0999BE -:10AE6000B047431C00D13DE7119B129A934202DB8D -:10AE70002368DB070CD538000E9B0C9A0999B04764 -:10AE80000025431C00D12DE7129B013BAB420ADC9D -:10AE900023689B0700D506E1139BE068984200DB1E -:10AEA00022E7180020E722000123380009991A320E -:10AEB000B047431C00D115E70135E5E7119B002B96 -:10AEC00038DC012338001A4A0999B047431C00D1E5 -:10AED00008E7119B129A134302D12368DB07D7D5E9 -:10AEE0000E9B38000C9A0999B047431C00D1F9E633 -:10AEF00000230A93119B0A9A5B42934201DC129B46 -:10AF000097E722000123380009991A32B047431C01 -:10AF100000D1E7E60A9B0133EBE7C046FFFFEF7F76 -:10AF200005F3001009F300100DF3001011F30010E9 -:10AF300015F30010129AA36D0A929A4200DD0A934B -:10AF40000A9B002B3CDC00230D930A9BDB43DB17A1 -:10AF50000F93A36D0F9A0B930A9B13400B9AD31A6E -:10AF60000D9A934234DC119B129A93423DDB236885 -:10AF7000DB073AD4129A0B9B1199D31A521A0A92F0 -:10AF80009A4200DD0A930A9B002B36DC0A9B0025BF -:10AF9000DB43DB170B93119A129B0B999B1A0A9AAE -:10AFA0000A409B1AAB4200DC72E722000123380002 -:10AFB00009991A32B047431C00D193E60135EAE7FC -:10AFC0000A9B2A0038000999B047431CBBD189E687 -:10AFD00022000123380009991A32B047431C00D1DE -:10AFE00080E60D9B01330D93B3E70E9B38000C9A5E -:10AFF0000999B047431CBDD174E60B9B3800EA1891 -:10B0000009990A9BB047431CC0D16BE6129B012BE8 -:10B0100002DC01231A4234D001232A0038000999A6 -:10B02000B047431C00D15DE60E9B38000C9A09998D -:10B03000B047431C00D155E6A06CE16C0022002310 -:10B04000FFF7A8F800281AD1129B6A1C013B3800B0 -:10B050000999B047431C0ED144E622000123380071 -:10B0600009991A32B047431C00D13BE60135129BC7 -:10B07000013BAB42F1DC22000B9B5032DAE60025AB -:10B08000F5E72A00E3E72200012338000999193285 -:10B09000B047431C00D125E60135E368139A9B1A9B -:10B0A000AB42F0DCF8E60025F7E7C046F7B515003F -:10B0B00001938A680B690C000090934200DA130038 -:10B0C00022002B6043321278002A01D001332B601A -:10B0D00023689B0602D52B6802332B602268062367 -:10B0E00017001F401A4227D0230043331B785A1EF3 -:10B0F00093412268920630D4220001990098089E5C -:10B100004332B047431C25D0062320682A68E168F3 -:10B1100000250340042B03D18D1AEB43DB171D40A0 -:10B12000A3682269934201DD9B1AED180027BD42F6 -:10B1300020D1002010E00137E3682A689B1ABB4247 -:10B14000D2DD2200012301990098089E1932B047F0 -:10B15000431CF0D101204042FEBD3020E1184331B4 -:10B16000087021005A1C45310978A2184332023375 -:10B170001170C1E72200012301990098089E1A323C -:10B18000B047431CE6D00137D1E70000F0B58BB0E3 -:10B1900006920A0043320793059004920A7E0C003F -:10B1A000109B782A07D8622A09D8002A00D1C1E06A -:10B1B000582A00D18CE026004236327022E010007E -:10B1C00063381528F7D802F023F816001F00F6FFA1 -:10B1D000F6FFF6FFF6FF1F00F6FFF6FFF6FFF6FF9D -:10B1E000A80036009A00F6FFF6FFB900F6FF360019 -:10B1F000F6FFF6FF9E0026001A684236111D196000 -:10B20000136833700123A7E0086819680A1D050652 -:10B210000BD50D681A60002D03DA2D23049A6D42B8 -:10B220001370614B0A2703931BE00D681A604106F7 -:10B23000F1D52DB2EFE70D681968081D18602E06CC -:10B2400001D50D6803E06D06FBD50D68ADB2564B18 -:10B25000082703936F2A00D00237230000224333CC -:10B260001A706368A360002B03DB042221689143FA -:10B270002160002D02D1049E002B0CD0049E2800DA -:10B280003900FDF761FE039B013E5B5C33702B00D0 -:10B2900005009F42F3D9082F09D12368DB0706D5A3 -:10B2A00063682269934202DC3023013E3370049BC1 -:10B2B0009B1B2361079B210000930598069B09AA0D -:10B2C000FFF7F4FE431C4CD1012040420BB0F0BD0F -:10B2D00045310A70344A03921A68216820CA1A60FC -:10B2E000080616D5CB0702D5202319432160102765 -:10B2F000002DB2D1202322689A432260ADE720229C -:10B3000009680A4322602200782145321170274AD9 -:10B31000E1E74806E6D5ADB2E4E71A680D68101D0E -:10B320004969186013682E0601D5196002E06D06A0 -:10B33000FBD519800023049E2361BBE71A68111D09 -:10B340001960166800213000626801F015FA0028C3 -:10B3500001D0801B6060636823610023049A13702E -:10B36000A8E72369320006990598079DA847431C62 -:10B37000AAD023689B0715D4099BE0689842A5DAF8 -:10B380001800A3E72200012306990598079E1932A9 -:10B39000B047431C98D00135E368099A9B1AAB4229 -:10B3A000F0DCE9E70025F7E717F3001028F30010B9 -:10B3B000002370B5064D040008002B6002F04EFD1E -:10B3C000431C03D12B68002B00D0236070BDC04606 -:10B3D000746001080023C25C0133002AFBD1581EAF -:10B3E00070470000F8B505000E001400002804D0D6 -:10B3F0008369002B01D101F09DF8224B9C422ED194 -:10B400006C68A369A360A3891B0732D52369002B4D -:10B410002FD023682269F7B2981A6369F6B2834283 -:10B4200005DC2100280000F0E3FF002827D1A368F5 -:10B430000130013BA36023685A1C22601F706369BE -:10B44000834204D0A389DB0707D50A2E05D121004A -:10B45000280000F0CDFF002811D13000F8BD0A4BC4 -:10B460009C4201D1AC68CCE7084B9C42C9D1EC6846 -:10B47000C7E72100280000F00BF80028C9D00126FA -:10B480007642EAE7F0F4001010F50010D0F4001056 -:10B49000374B70B51D6806000C00002D05D0AB6958 -:10B4A000002B02D1280001F045F8324B9C420FD10D -:10B4B0006C680C23E25E93B211072DD4D90611D427 -:10B4C00009230120336037331343A381404270BD09 -:10B4D000294B9C4201D1AC68EBE7284B9C42E8D158 -:10B4E000EC68E6E75B0713D5616B002908D0230001 -:10B4F0004433994202D03000FFF7A8F80023636379 -:10B500002422A3899343A3810023636023692360DA -:10B510000823A2891343A3812369002B0BD1A02107 -:10B520008022A389890092000B40934203D021001E -:10B53000300001F0CBF80C22A35E01201A0099B272 -:10B54000024003420FD00022A26062695242A2610F -:10B55000002022698242BAD10A06B8D5402213439C -:10B56000A3810138B3E7880700D46269A260EFE7DE -:10B57000EC010008F0F4001010F50010D0F40010F9 -:10B58000062010B501F0DAFC012002F075FCF0B5E0 -:10B5900006000B69326987B0002003919A4265DB8F -:10B5A000013B9C0000930B00143305931B1904937B -:10B5B0003300143302931C19049B27681B6838005E -:10B5C0005D1C29000193FDF739FC0190AF4224D3A3 -:10B5D0000025AC460298059F08CF019A99B25143C5 -:10B5E0001B0C534349190A0C9B18026889B292B28A -:10B5F0006244521A01681D0C090C9BB2CB1A11143B -:10B600005B18191492B21B041A43049B8C4604C0A5 -:10B61000BB42E1D22368002B30D03000039901F007 -:10B620004BFB002821DB30000024019B03990133F0 -:10B63000019314301431036820C99AB21419AAB2C4 -:10B64000A21A1B0C2D0C14145B1B1B191C1492B298 -:10B650001B04134308C0049B8B42ECD2009B029A4C -:10B660009B00D3181A68002A15D0019807B0F0BDC6 -:10B670002368002B06D1009B013B0093029B043CF6 -:10B68000A342F5D3009B3361C7E71A68002A06D1AD -:10B69000009A013A0092029A043B9A42F5D3009B29 -:10B6A0003361E2E7F0B59DB002920393029B039CE5 -:10B6B00008930994446A0700259D002C0ED11020A0 -:10B6C000FEF76EFF021E786204D1EA21C74BC8481C -:10B6D000FEF7C4FE446084600460C4607B6A19683D -:10B6E00000290AD05A68012393404A608B603800D1 -:10B6F00001F0A2F800227B6A1A60039B002B20DA7B -:10B7000001232B60039B5B005B080993099DB94BE8 -:10B71000B84A2B40934217D1B74B249A28031360A1 -:10B72000029B000B184301D100F0BFFDB348269BDC -:10B730000690002B02D0B24B269A136006981DB0DB -:10B74000F0BD00232B60E1E7089B099C1293139442 -:10B750001298139900220023FEF71CFD041E09D045 -:10B760000123249A1360A74B0693269B002BE5D058 -:10B77000A54BE1E71AAB01931BAB00933800129A7B -:10B78000139B01F04DFB6E000590760D00D17CE01F -:10B7900012981399139B9D4A1B031B0B1A4311000C -:10B7A0009B4B1894F61800229A4BFEF7EBF89A4A36 -:10B7B0009A4B02F073F89A4A9A4B01F033FD040059 -:10B7C00030000D00FEF7A6FC974A984B02F066F891 -:10B7D00002000B002000290001F024FD04000D00F0 -:10B7E000FEF762FC00220290002320002900FEF7F1 -:10B7F000D7FC00280BD00298FEF78CFC2B0022000F -:10B80000FEF7C8FC43425841029B1B1A02930123D6 -:10B810001693029B162B0FD812981399DA00844BBB -:10B820009B181A685B68FEF7BBFC002849D0029B96 -:10B83000013B0293002316931A9B9E1B00230A933D -:10B840003300013B0D9304D501239B1B0A93002376 -:10B850000D93029B002B36DB029A0D9B94466344AA -:10B860000D93002315920E93229B0124092B64D87B -:10B87000052B02DD0024043B2293229B981E032803 -:10B8800064D801F0BBFC293836581A9B1B9A9E18C5 -:10B89000684BF218202A0FDD40239B1A9D40664B0F -:10B8A0000298F318D840284302F082FA0123634C2F -:10B8B000013E0919189376E7202302989B1A9840B5 -:10B8C000F2E71690B8E70A9B029A9B1A0A93534232 -:10B8D0000E9300231593C7E700230F93239B0C932C -:10B8E0000793002B13DC01231A000C930793239278 -:10B8F0000DE00123F1E70023239A0F939446029B66 -:10B9000063440C9301330793002B00DC01230022D6 -:10B91000786A426004321500143541689D4219D995 -:10B92000380000F045FF0690002817D1D52102000D -:10B93000434B4900CBE60123DEE700230F9422931B -:10B94000013B0C93079300221333D0E701230F939D -:10B95000023BF6E7013141605200DCE77B6A069A60 -:10B960001A60079B0E2B00D9EBE0002C00D1E8E019 -:10B97000029B002B68DD1A000F212D4B0A40D200DC -:10B980009B181D685E68029B1C1102231093029B8A -:10B99000DB050BD52B4B0C401A6A5B6A1298139986 -:10B9A000FDF7FAFC0323089009911093254B14939B -:10B9B000002C08D1089809992A003300FDF7ECFC07 -:10B9C000089009915CE001231C420BD0109B2800D9 -:10B9D00001331093149B31001A685B6801F05EFF1D -:10B9E00005000E00149B64100833E0E747F40010D4 -:10B9F0005EF400100000F07F0F27000043F40010F9 -:10BA000046F4001015F3001016F300100000F03F8C -:10BA100001FCFFFF0000F83F61436F63A787D23F3F -:10BA2000B3C8608B288AC63FFB799F501344D33F2D -:10BA3000C8F500103204000012040000000010FEDF -:10BA4000BCF40010A0F5001002231093029B002B01 -:10BA500016D0129813995C420F23B64A2340DB009C -:10BA6000D3181A685B6801F019FF012600230890BB -:10BA70000991B14D2411002C00D094E0002B9FD1EE -:10BA8000169B002B00D19BE0089C099D0022200002 -:10BA90002900AA4BFEF784FB002800D190E0079B09 -:10BAA000002B00D18CE00C9B002B46DD029B00227A -:10BAB000200029005E1EA24B01F0F0FE109B0890B2 -:10BAC0000991013310930C9B1098089C099D1493C5 -:10BAD000FEF720FB22002B0001F0E0FE0022994B34 -:10BAE00001F0A0FB10901191109A119B08920993FC -:10BAF000954A119B9446634417930993149B002B1A -:10BB000061D1002220002900904BFDF73BFF089AED -:10BB1000179B04000D00FEF757FB002800D0AFE292 -:10BB20008B481199844661440B0020002900089A33 -:10BB3000FEF736FB002800D09FE2129B139C08936F -:10BB400009941B9B002B00DA72E1029A0E2A00DD99 -:10BB50006EE1784BD2009B185C681B680A930B94CB -:10BB6000239B002B00DBF7E0079B002B00DDF3E0BD -:10BB700000D082E20A980B990022744B01F08EFEED -:10BB8000089A099BFEF72AFB079E3500002800D083 -:10BB900059E2069B069A0133089331231370029BE6 -:10BBA0000133029354E2344207D0109B01331093C7 -:10BBB0002A686B6801F072FE3300641008355AE79A -:10BBC000029E079B80E7149B0F995A1E594BD20087 -:10BBD0009B181A685B68002951D000205D49FDF769 -:10BBE000DBFB089A099BFDF7CDFE069A069B94465F -:10BBF0001793149B1090119163441993290020000E -:10BC0000FEF752FA1490FEF785FA02000B002000AE -:10BC10002900FDF7B7FE179B179A01330893149B71 -:10BC2000040030331370109A119B0D00FEF7B8FA20 -:10BC3000002875D122002B0000204049FDF7A2FE0C -:10BC4000109A119BFEF7ACFA002800D0D2E0199BA5 -:10BC5000089A934200D170E7109811990022384B4E -:10BC600001F01CFE364B109011910022200029009B -:10BC700001F014FE089B04000D001793BEE708981E -:10BC8000099901F00BFE069A069B94460893149BB3 -:10BC9000109011916344199329002000FEF704FAD3 -:10BCA0001790FEF737FA02000B0020002900FDF77D -:10BCB00069FE179B089A303313701300199A0133E9 -:10BCC00004000D00089393422CD110981199069A04 -:10BCD000149B94466344002208931E4B01F0A2FA81 -:10BCE00002000B0020002900FEF76EFA002800D0A9 -:10BCF00080E0109A119B00201649FDF743FE0200D8 -:10BD00000B0020002900FEF74BFA002800D114E7B1 -:10BD1000089B1A00013A08921278302AF8D008934A -:10BD2000029655E00022064B01F0B8FD04000D001C -:10BD3000B2E7C046C8F50010A0F500100000F03FC3 -:10BD40000000244000001C400000C0FC0000144023 -:10BD50000000C07C0000E03F079B069E013B9B1952 -:10BD60000C93089C099D0A9A0B9B20002900FDF763 -:10BD700013FBFEF799F90790FEF7CCF90A9A0B9B93 -:10BD800001F08CFD02000B0020002900FDF7FAFDF8 -:10BD90003300079A013630321A700C9A08969A428C -:10BDA00039D102000B0001F03DFA0A9A0B9B040006 -:10BDB0000D00FEF709FA00281BD10A9A0B9B200000 -:10BDC0002900FEF7E7F9002802D0079BDB0710D413 -:10BDD0003800059900F030FD0023089A029813708E -:10BDE000249B01301860269B002B00D1A6E41A602A -:10BDF000A4E4029E089B0893013B1A78392A06D1D5 -:10BE0000069A9A42F7D13022069901360A701A78BA -:10BE100001321A7084E70022AA4B01F03FFD002294 -:10BE2000002304000D00FEF7B5F900289BD0CFE7F2 -:10BE30000F9D0E9E0A9C002D12D0229A012A66DCCC -:10BE4000189A002A5DD0A04A9B180A9A0121D2189C -:10BE50000A920D9A3800D3180D9300F09DFD05004D -:10BE6000002C0EDD0D9B002B0BDD0D9A2300944260 -:10BE700000DD13000A9AE41AD21A0A920D9AD31A14 -:10BE80000D930E9B002B1FD00F9B002B54D0002E28 -:10BE900011DD29003200380000F044FE059A01004F -:10BEA0000500380000F08EFD05991490380000F070 -:10BEB000C3FC149B05930E9B9A1BB34204D038001D -:10BEC000059900F02FFE05900121380000F064FD77 -:10BED000159B0600002B31DD1A000100380000F030 -:10BEE00021FE229B0600012B2DDD00230E933369DA -:10BEF00003339B00F318586800F006FD2023181A3E -:10BF000039E036231A9A0E9E0A9C9B1A9DE7079BDE -:10BF10005E1E0E9BB34207DB9E1B079B0A9C002BF9 -:10BF200093DAE41A002390E70E9B159AF31AD318BC -:10BF30000E9615930026F0E70E9AC0E700230E93A5 -:10BF4000229B012B13DC00230E93089B002B0ED1A8 -:10BF5000099B1B030BD15D4B099A134207D00A9B27 -:10BF600001330A930D9B01330D9301230E93159B0F -:10BF70000120002BBBD10D9B1F221818030013407A -:10BF8000104246D00132D21A042A3FDD1C22D31AB5 -:10BF90000A9AE418D2180A920D9AD3180D930A9BA4 -:10BFA000002B05DD1A003800059900F017FE0590FA -:10BFB0000D9B002B05DD31001A00380000F00EFE4D -:10BFC0000600169B002B26D03100059800F074FE69 -:10BFD000002820DA029B0A22013B0293380000234A -:10BFE000059900F04DFC0F9B0590002B00D166E1F8 -:10BFF000002329000A22380000F042FC0C9B0500B7 -:10C00000002B47DC229B022B0DDC43E0042AC6D028 -:10C0100013001C33BCE7079B002B35DC229B022B53 -:10C0200032DD079B0C930C9B002B0CD131000522B9 -:10C03000380000F025FC06000100059800F03CFEE9 -:10C04000002800DDA5E5239BDB430293069B0893B4 -:10C0500000243100380000F0EFFB002D00D1B7E6DE -:10C06000002C05D0AC4203D02100380000F0E4FBE6 -:10C070002900380000F0E0FBAAE600263500E2E7E0 -:10C080000296149E350084E50F9B002B00D1CEE074 -:10C09000079B0C93002C05DD29002200380000F0DE -:10C0A0009DFD05000E9B2800002B22D038006968FA -:10C0B00000F07EFB041E0FD10200054B0549FFF77F -:10C0C00006FBC04600002440330400000000F07F5F -:10C0D000BCF40010EA02000029002B690C319A1C04 -:10C0E00092000C30FEF774FA01222100380000F0B3 -:10C0F00075FD069B0C9A0A93013B9B1801222C00AC -:10C1000005001493089B13400F9331000598FFF727 -:10C110003EFA0300210030330D900598079300F09C -:10C12000CBFD2A000E903100380000F0E1FDC3681D -:10C130000890109301230C93109B002B04D1010055 -:10C14000059800F0B9FD0C903800089900F074FBD8 -:10C150000A9B0C9A01330893229B13430F9A1343B3 -:10C160000CD1079B392B26D00E9B002B02DD0D9B9B -:10C17000313307930A9B079A1A706AE70E9B002BCC -:10C1800004DB229A13430F9A13431FD10C9B002BFD -:10C19000F0DD05990122380000F020FD3100059006 -:10C1A00000F08AFD002803DCE4D1079BDB07E1D522 -:10C1B000079B392BDBD139230A9A1370089B08930C -:10C1C000013B1A78392A68D00132D5E70C9B002B45 -:10C1D00007DD079B392BEED0079B0A9A01331370BA -:10C1E00037E70A9B079A1A70149B0A9A93423ED02B -:10C1F00000230A220599380000F042FB0023059035 -:10C200000A2221003800AC4206D100F039FB0400BC -:10C210000500089B0A9378E700F032FB2900040030 -:10C2200000230A22380000F02BFB0500F1E7079BF2 -:10C230000C93002431000598FFF7A9F9069B3030D4 -:10C2400018550C9B01340790A34207DD00230A22F6 -:10C250003800059900F014FB0590EBE70C9B0120DA -:10C26000002B00DD18000024069B1B18089305997D -:10C270000122380000F0B2FC3100059000F01CFDF6 -:10C2800000289BDC02D1079BDB0797D4089B08930F -:10C29000013B1A78302AFAD0DBE6069A9A428ED110 -:10C2A000029B01330293312399E7094B269A0693A7 -:10C2B000084B002A01D0FFF73FFAFFF73FFA0C9B2B -:10C2C000002BB6DC229B022B00DDACE6B1E7C046BA -:10C2D0003AF4001042F40010F7B58B8905000C0009 -:10C2E0001A075FD44A68002A04DC0A6C002A01DCC1 -:10C2F0000020FEBDE76A002FFAD0002280212E68C0 -:10C300002A601A0049010A400B4234D0606DA389AB -:10C310005B0706D56368C01A636B002B01D0236CE2 -:10C32000C01A0200216A00232800E76AB847A189E1 -:10C33000431C06D12B681D2B31D82C4ADA40D30779 -:10C340002DD50023636023692360CB0405D5431CEE -:10C3500002D12B68002B00D16065616B2E60002933 -:10C36000C6D023004433994202D02800FEF76EF96C -:10C3700000206063BDE701232800216AB847431C01 -:10C38000C5D12B68002BC2D01D2B01D0162B01D19B -:10C390002E60ADE74023A2891343A381A9E7402380 -:10C3A0000B43FAE70F69002FA2D00A680F60D21B77 -:10C3B000019200229B0700D14A69A260019B002BD9 -:10C3C00000DC95E73A002800019B216AA66AB04785 -:10C3D000002806DC40230120A28940421343A381A8 -:10C3E00087E7019B3F181B1A0193E7E701004020F4 -:10C3F0000B6970B505000C00002B02D10025280048 -:10C4000070BD002804D08369002B01D100F092F8A0 -:10C41000144B9C421BD16C680C22A35E002BEDD008 -:10C42000626ED20704D49B0502D4A06DFEF7B6F865 -:10C4300028002100FFF750FF636E0500DB07DED404 -:10C44000A3899B05DBD4A06DFEF7A9F8D7E7064BBF -:10C450009C4201D1AC68DFE7044B9C42DCD1EC6824 -:10C46000DAE7C046F0F4001010F50010D0F4001028 -:10C47000002310B50400036043608360818143663C -:10C480001900C28103614361836108225C30FEF7B9 -:10C49000A8F8054B24626362044BA362044BE36279 -:10C4A000044B236310BDC0467DCF0010A5CF001004 -:10C4B000DDCF001009D0001010B5024900F0BAF825 -:10C4C00010BDC0467DD0001070B568254A1E55438A -:10C4D0000E0029007431FEF725F9041E08D0002152 -:10C4E0002A00016046600C30A0606832FEF779F8DF -:10C4F000200070BD10B50248FEF750F810BDC046D0 -:10C500006960010810B50248FEF749F810BDC04641 -:10C510006960010810B50248FEF740F810BDC0463A -:10C520006A60010810B50248FEF739F810BDC04630 -:10C530006A60010813B50400FFF7ECFFA369002B44 -:10C5400002D0FFF7EFFF13BDA364E3642365134B31 -:10C55000134A1B68A2620193A34201D10123A36184 -:10C56000200000F01FF86060200000F01BF8A060C1 -:10C57000200000F017F800220421E0606068FFF757 -:10C5800077FF01220921A068FFF772FF0222122122 -:10C59000E068FFF76DFF0123A361D2E7F0F200101E -:10C5A000B9C40010F8B50700FFF7A4FF1F4B1868C7 -:10C5B0008369002B01D1FFF7BDFF3E004836B46808 -:10C5C0007368013B04D53368002B22D03668F6E748 -:10C5D0000C22A55E002D1AD12000154B5830E360C7 -:10C5E0006566FDF7D9FFFFF78DFF200008222900BF -:10C5F0002560A560656025616561A5615C30FDF71A -:10C60000F0FF6563A563A564E5642000F8BD6834A8 -:10C61000D7E704213800FFF757FF041E3060D5D15B -:10C62000FFF770FF0C233B60EFE7C046F0F200100D -:10C630000100FFFFF7B50400060000270191483410 -:10C640006368A5680093009B013B009304D52468B0 -:10C65000002CF5D13800FEBDAB89012B08D90E2284 -:10C66000AB5E013304D029003000019B984707439B -:10C670006835E8E7004870474003000870B50E00D1 -:10C680001D000E23C95E140096B0002908DA0C22A2 -:10C69000B35E00222A601B0611D48023DB000FE06A -:10C6A0006A4600F05FFD0028F1DBF02301991B02D0 -:10C6B0001940054BC9184B4259412960EDE7402309 -:10C6C0000020236016B070BD00E0FFFFF7B5022622 -:10C6D0008B8905000C00334206D0230047332360CA -:10C6E000236101236361F7BD6A4601ABFFF7C6FF13 -:10C6F000009907002800FEF715F8002808D10C2241 -:10C70000A35E9A05EFD4032293431E43A681E4E778 -:10C710000F4BAB628023A28920601343A381009B4F -:10C7200020616361019B002B0DD028000E23E15E88 -:10C7300000F02AFD002806D00322A38993431A00A3 -:10C7400001231343A381A0890743A781CBE7C046F8 -:10C75000B9C4001082B0002900D101A9101E06D072 -:10C76000002B06D013780B601078431E984102B05E -:10C77000704702204042FAE7C9B28218904201D1C4 -:10C780000020704703788B42FBD00130F6E70000B1 -:10C7900010B50248FDF702FF10BDC04668600108F1 -:10C7A00010B50248FDF7FBFE10BDC04668600108E9 -:10C7B00070B5456A06000C00002D0ED11020FDF763 -:10C7C000EFFE021E706204D16621194B1948FDF775 -:10C7D00045FE456085600560C560756AEB68002BA5 -:10C7E00013D0736AA200DB689B181868002818D160 -:10C7F00001210D00A5406A1D30009200FDF7F9FEF1 -:10C8000000280CD0446085600DE021220421300016 -:10C81000FDF7EFFE736AE860DB68002BE1D10020D2 -:10C8200070BD02681A6000230361C360F8E7C04668 -:10C8300047F400103AF5001070B5466A05000C0088 -:10C84000002E0ED11020FDF7ABFE021E686204D14F -:10C850008A21094B0948FDF701FE466086600660A3 -:10C86000C660002C07D06B6A6268DB6892009B1878 -:10C870001A6822601C6070BD47F400103AF5001081 -:10C88000F7B50E0001900C001D0000200F69143652 -:10C890003368013099B251431B0C534349190D0CB5 -:10C8A0005B191D0C89B21B045B1808C68742EFDCBC -:10C8B000002D22D0A368BB4219DC63680198591C83 -:10C8C000FFF776FF061E05D10200B5210C4B0D487F -:10C8D000FDF7C4FD210023690C319A1C92000C3035 -:10C8E000FDF776FE21000198FFF7A6FF34003B1DFF -:10C8F0009B00E3185D607B1C23612000FEBDC046E9 -:10C90000BCF400103AF500100300020C0020824233 -:10C9100001D11B0410301A0E01D108301B021A0F6E -:10C9200001D104301B019A0F01D102309B00002B72 -:10C9300003DB01305B0000D4202070470368020055 -:10C940000721180008400B420DD0063900200B4289 -:10C9500005D10230034203D0CB400800136070477A -:10C960009B081360FBE799B2002901D110201B0C32 -:10C97000D9B2002901D108301B0A190701D10430AE -:10C980001B09990701D102309B08D907E9D401306E -:10C990005B08E6D12020E2E710B50C000121FFF78B -:10C9A00007FF002806D1A0210200044B04484900DB -:10C9B000FDF754FD01234461036110BDBCF4001078 -:10C9C0003AF50010F0B50B69140012690D0089B03A -:10C9D000934201DA25000C002F6926696968BB19AA -:10C9E0000293AB68BA19934200DA0131FFF7E0FE17 -:10C9F0000190002806D15E210200484B4848FF31D3 -:10CA0000FDF72CFD019B002214339C46BB199B00B3 -:10CA100063440393634603998B422CD32B0022007B -:10CA20001433BF0014320693B600DB190493931934 -:10CA30000793042305932B00049915330092994220 -:10CA400005D34B1B153B9B0801339B000593079BAC -:10CA5000009A9A4211D3029B002B06DD039B043BF4 -:10CA600003931B680093002B53D0019B029A18007C -:10CA70001A6109B0F0BD04C3CDE7009B1B6898B2F2 -:10CA800000281BD067460024069E02CE3A688BB26F -:10CA9000434392B29B181B190C0C44433A68110C87 -:10CAA00061181C0C09190C0C9BB209040B4308C734 -:10CAB000049BB342E9D86346059A9C50009B1B68CF -:10CAC0001E0C20D063462C00604600271B681434DF -:10CAD00022689BB291B271430268120C8918CF1977 -:10CAE00039040B43036002CC4368090C71439BB2C9 -:10CAF0003F0CCB18049ADB191F0C0430A242E7D874 -:10CB0000624605995350009B0433009304239C44D0 -:10CB10009DE7029B013B02939DE7C046BCF40010D9 -:10CB20003AF50010F7B50323150007000E001A4070 -:10CB30001D4208D02549013A920052580023310085 -:10CB4000FFF79EFE0600AD103DD07C6A002C0FD191 -:10CB50001020FDF725FD021E786205D1D7211C4B60 -:10CB60001C484900FDF77AFC446084600460C4609E -:10CB70007B6A9C680193002C08D138001649FFF7A6 -:10CB80000BFF019B040098600023036001231D42FA -:10CB90000AD0310022003800FFF714FF3100019065 -:10CBA0003800FFF749FE019E6D100CD02068002868 -:10CBB00007D1220021003800FFF704FF0023206086 -:10CBC00003600400E2E73000FEBDC04690F60010AE -:10CBD00047F400103AF5001071020000F0B50C00A7 -:10CBE00017002369551187B0EB18029301330193A5 -:10CBF0004968A3680490019A934210DB0498FFF7F8 -:10CC0000D7FD0023020006001900143298420CD10F -:10CC1000DA210200264B2748FF31FDF71FFC0131C6 -:10CC20005B00E8E7980011500133AB42FADBEB43BD -:10CC3000DB171D401F2123003800AD005519226964 -:10CC400014339200084084469A180F422AD00131CA -:10CC5000091A05910021039567461868B8400143F9 -:10CC6000039802C002CB03900598C1409A42F3D8C2 -:10CC7000200015300423824204D3131B153B9B086C -:10CC800001339B00E950002902D0029B023301933B -:10CC9000019B0498013B21003361FFF7CDFD30007B -:10CCA00007B0F0BD02CB02C59A42FBD8F0E7C04600 -:10CCB000BCF400103AF5001002690B6930B50400AD -:10CCC000D01A9A420DD19B0014341431E218C918BD -:10CCD000043A043915680B689D4203D001209D4237 -:10CCE00003D330BD9442F3D3FBE74042F9E70000A1 -:10CCF000F0B50E0007001100300087B01400FFF7F8 -:10CD0000DBFF051E10D101003800FFF751FD021EA8 -:10CD100004D1404B40494148FDF7A0FB0123456148 -:10CD20000361100007B0F0BD01230193002804DB6C -:10CD3000230034001E000023019338006168FFF7D0 -:10CD400037FD021E03D19021324B8900E3E7019B9E -:10CD50000027C360206914340194019B84001B19CF -:10CD60003400029333691434990063180393130059 -:10CD700014339C460593019B0493049B02CC20CB67 -:10CD80000493ABB2DF198BB2FB1A090C2D0C6D1A90 -:10CD900019146D1861462F149BB22D042B4308C142 -:10CDA000039B8C46A342E8D83100039C1531042331 -:10CDB0008C4204D3A31B153B9B0801339B000199B4 -:10CDC000CC1805992600CB189C4602998E4210D3A8 -:10CDD000029EE11E00258E4204D3310003310C1B5C -:10CDE000A408A5005B19043B196800290FD0106145 -:10CDF00097E702CE8DB2ED190F0C291479180F1494 -:10CE0000ADB209040D43614620C18C46DDE701380F -:10CE1000E9E7C046BCF40010320200003AF5001009 -:10CE2000F7B5012114001E00089FFFF7C1FC051E85 -:10CE300005D10200264B27492748FDF70FFB330396 -:10CE400076001B0B760D24D10193002C27D0684669 -:10CE50000094FFF773FD009C00281ED0019B202149 -:10CE60001A00091A8A40C34022436A610193019C57 -:10CE7000AC61631E9C4101342C61002E18D0174B0D -:10CE8000F61835233618181A099B3E6018602800DA -:10CE9000FEBD802252031343D6E76C61E7E701A889 -:10CEA000FFF74CFD0124019B2C616B612030E4E70E -:10CEB0000B4BC0180B4B3860E3189B00EB185869FC -:10CEC000FFF722FD6401099B241A1C60DFE7C046BE -:10CED000BCF400100A0300003AF50010CDFBFFFF80 -:10CEE000CEFBFFFFFFFFFF3F70B504000D001F29C1 -:10CEF00004D9162303600120404270BD436C002B0F -:10CF000004D08A009B181A68002A08D1200000F07B -:10CF100031F82A000100200000F01AF8EDE70020A7 -:10CF2000012AEAD0511C03D1162301302360E4E723 -:10CF3000002428001C6090472000DEE710B5034B5A -:10CF400001001868FFF7D0FF10BDC046EC010008D3 -:10CF5000002370B5064D0400080011002B6000F09E -:10CF60006DFF431C03D12B68002B00D0236070BDE4 -:10CF70007460010810B500F051FF10BD70B50C00D1 -:10CF80000E25495F00F026F9002803DB636D1B18AE -:10CF9000636570BDA389024A1340A381F9E7C046C7 -:10CFA000FFEFFFFFF8B51F008B8905000C0016008E -:10CFB000DB0505D50E23C95E0022022300F0F6F83A -:10CFC000A389054A28001340A38132000E23E15EA5 -:10CFD0003B0000F02DF8F8BDFFEFFFFF70B50C002F -:10CFE0000E25495F00F0E2F8A389421C03D1054AEF -:10CFF0001340A38170BD802252011343A381606559 -:10D00000F8E7C046FFEFFFFF10B50E23C95E00F042 -:10D0100023F810BD0300081E05D0FF2A04D98A2278 -:10D0200001201A604042704701200A70FBE70000AF -:10D0300070B50400080011001A000023054D2B6094 -:10D04000F6F7B6FA431C03D12B68002B00D02360FF -:10D0500070BDC04674600108002370B5064D040021 -:10D0600008002B6000F0CAFE431C03D12B68002B84 -:10D0700000D0236070BDC0467460010870B5050023 -:10D080000C1E02D10026300070BD002804D0836938 -:10D09000002B01D1FFF74EFA2F4B9C4217D16C6841 -:10D0A000636EDB0705D4A3899B0502D4A06DFDF751 -:10D0B00075FA0C22A35E002B13D1626E01331600A9 -:10D0C0001E401A42DED1A06DFDF769FADBE7234B63 -:10D0D0009C4201D1AC68E3E7214B9C42E0D1EC6873 -:10D0E000DEE721002800FFF7F7F8236B0600002B8E -:10D0F00006D02800216A9847002801DA01267642E6 -:10D10000A3891B0603D528002169FDF79FFA616BEF -:10D11000002908D023004433994202D02800FDF7AB -:10D1200095FA00236363A16C002904D02800FDF761 -:10D130008DFA0023A364FFF7DDF90023A381636E5A -:10D14000DB0702D4A06DFDF72AFAA06DFDF725FAE2 -:10D15000FFF7D8F997E7C046F0F4001010F500107B -:10D16000D0F40010002370B5064D04000800110033 -:10D170002B6000F04BFE431C03D12B68002B00D02A -:10D18000236070BD74600108002370B5064D040073 -:10D1900008002B6000F04AFE431C03D12B68002BD3 -:10D1A00000D0236070BDC0467460010870B50400F3 -:10D1B000080011001A000023054D2B6000F046FE08 -:10D1C000431C03D12B68002B00D0236070BDC046E8 -:10D1D0007460010870B50400080011001A000023F3 -:10D1E000054D2B60F6F704FA431C03D12B68002B86 -:10D1F00000D0236070BDC0467460010802B471465F -:10D2000049084900095C49008E4402BC7047C04689 -:10D2100003B47146490840004900095E49008E4444 -:10D2200003BC7047F0B54F464646D6460D00040095 -:10D23000C0B51F0011002803620F400A10437A0096 -:10D24000520DE3003C039146640AFA0F4F0F6E0043 -:10D2500027439246B846760DED0FC900954200D19E -:10D2600099E04C46341BA446002C00DC7CE04A4686 -:10D27000002A00D1B8E0C54A964200D11CE18022C4 -:10D280003C0012041443A0466246382A00DD61E1E6 -:10D290001F2A00DDCCE164462022121B4446944044 -:10D2A0000F00A14664469140E7404C464A1E91411A -:10D2B0003C43424621436446E240801A5C1AA34242 -:10D2C0009B415F42C71B3B0200D4D0E07F027F0A34 -:10D2D000002F00D1FFE03800FCF78AFF0100083979 -:10D2E000202322005B1A8F40DA408C401743B14262 -:10D2F00000DAFFE0891B4B1C1F2B00DDA8E0202279 -:10D300003900D21A200094409140D840621E9441C6 -:10D31000DF40002601430C43630709D00F2323405D -:10D32000042B05D0231DA342A44164423F191C00D5 -:10D330003B0200D49EE0954B01369E4200D1B7E0FF -:10D34000934AE40817407B0771057F0223433F0B94 -:10D350004A0D12053A43ED072A4318001100E0BCBC -:10D36000BA46B146A846F0BD002C4BD04C46A41B93 -:10D37000A446002E00D023E104001C4300D1AFE1FD -:10D380006246541E012A00D115E2804DAC4500D101 -:10D39000C8E1A4461BE14A46B21A9446002A00DCC2 -:10D3A000ACE04A46002A43D0784A964200D1AFE129 -:10D3B00080223C0012041443A0466246382A67DCEF -:10D3C0001F2A00DC5FE14746203AD7406246202A08 -:10D3D00005D064464022121B4446944021434A1E15 -:10D3E00091410C003C4357E03A000A4300D105E16B -:10D3F0002200013A012C00D182E1644CA4455BD0AB -:10D40000944641E7634C771C274200D0C4E00400F7 -:10D410001C43002E00D069E1002C00D1BFE144463E -:10D420000C4300D0D0E14207DB081343C00829E0D9 -:10D430003A000A4300D170E162466446013A012C89 -:10D4400000D1E0E0514CA44500D161E19446B4E73D -:10D450003A001F39CA401100202B03D04022D31AB2 -:10D460009F403C43631E9C41002700260C436307FA -:10D4700000D053E7B446E4087B072343F808434A47 -:10D4800094451DD06246070352053F0B520D60E7DD -:10D4900044460C43621E9441E4189C429B415F4207 -:10D4A0003F183B02E3D5394B01369E4200D0B5E030 -:10D4B0003200002700234CE74207DB081343C00873 -:10D4C0001A00024300D1E1E180273F0307433F03F5 -:10D4D0002E4A3F0B3DE72000FCF78AFE0100183181 -:10D4E0001F2900DCFCE60838844027000024B142F4 -:10D4F00000DBFFE6264A761A17400DE7002A2FD0F8 -:10D500004A46921B9446002E00D1ADE01F4A914539 -:10D5100000D10FE18022120410436246382A00DD58 -:10D520000FE11F2A00DD80E1644620221E00121B4D -:10D530006746040093409440FE405A1E9341F840D1 -:10D5400034431C43804464188C42BF417F424E46A2 -:10D550004744A6E742460A4311004A1E9141ADE600 -:10D560000C4C721C224200D0A1E002001A43002E93 -:10D5700000D0FAE0002A00D145E13A000A4300D089 -:10D5800046E14207DB081343C0087BE7FF070000C2 -:10D59000FFFF7FFFFE07000047465C1AC21BA34245 -:10D5A000BF417F42B94617004A46BF1A3A0200D52A -:10D5B0008DE023003B4300D08AE60020002561E790 -:10D5C000B44CA14500D1ADE080242404204364463E -:10D5D000382C3DDC62461F2C00DDB7E020251E0004 -:10D5E0002D1B0400AB40AC40D640D04042465D1EEF -:10D5F000AB413443121A904623432CE04207DB0828 -:10D600001343C0083BE75C189C429B4140445B428B -:10D61000C71801263B0200D429E702269E4A630868 -:10D620001740012214401C43FB071C437F0873E68C -:10D630004446203AD4406246202A05D0674640221C -:10D64000D21B4746974039434A1E9141214335E654 -:10D650000343581E8341CC1AA142BF4143467F4237 -:10D6600055464E46DF1B2EE602001A4300D1BDE0B0 -:10D6700062466446013A012C00D1E5E0854CA445A0 -:10D6800058D0944649E764462022121B44469440F1 -:10D690000F00A14664469140E7404C464A1E914126 -:10D6A0003C4342460C436146CA408018F4E6794C3C -:10D6B000A24200D1FDE6591899429B4140445F4285 -:10D6C000C719FC07490816000C437F08CFE6CC1A9F -:10D6D000A142BF4143467F42181A5546C71BF7E592 -:10D6E000C9087B0755460B43F808C8E6002C00D054 -:10D6F00081E043460B4315D1802000250003E3E67B -:10D700005C1AA3429B41C71B5B420126FF1ADAE564 -:10D710004207DB081343C008D2E64207DB08134385 -:10D72000C008ACE643464246C9085B0755460B4372 -:10D73000D008C5E6434642465B07C9080B43D008FC -:10D74000BEE603431C00631E9C41FCE60200203C35 -:10D75000E24014006246202A03D04025AD1AA840BA -:10D760000343581E8341234375E7002AE2D03A0061 -:10D770000A43CDD04207DB0813438022C0081203BE -:10D78000104206D0FC08144203D12000CB087A07CF -:10D7900013435A0FDB005207DB08134390E643465E -:10D7A0000B4300D109E743464246C9085B0755468B -:10D7B0000B43D00866E6CC1AA14289413F1A494280 -:10D7C000554601267F1A7EE542465C1A871AA34217 -:10D7D00092415242BF1A3A023DD5CC1AA142894128 -:10D7E000434649421F1A55467F1A95E57B07C908EB -:10D7F0000B43F80843E64446DB080C4330D14207AC -:10D800001343C0085CE67B07C9080B43F80839E6F8 -:10D810005C189C429B4140445B42C7183B0200D4C9 -:10D8200025E61D4B01261F4021E60400203AD44086 -:10D830006246202A04D040226646921B9040034351 -:10D840005A1E93411C437EE65C188C428941404439 -:10D8500049424718DDE623003B4300D1ADE606E62A -:10D86000440723438024C0082403204208D04246B2 -:10D87000D608264204D155463000CB0851070B4349 -:10D880005A0FDB00DB085207134319E60023014A55 -:10D890001F005EE5FF070000FFFF7FFFF0B5574662 -:10D8A0004E464546DE46E0B598460C034B00060062 -:10D8B000924687B0240B5B0DCF0F002B00D15CE1AB -:10D8C000D94A934200D175E1420FE400144380220B -:10D8D00012041443D54AC5009446634400930023C0 -:10D8E00099469B46434642461E03D20F5B00504674 -:10D8F0009046360B5B0D00D120E1CB4A934200D11C -:10D9000062E1CA49420F8C4600996344F6008C4696 -:10D91000164380229C44120463461643C200002032 -:10D9200000930099434601318C4649467B40019360 -:10D930000F2926D8BE4B890059588F46434601937C -:10D940003400150083465B46022B16D0032B00D112 -:10D9500003E2012B00D0CDE0002200240025019B32 -:10D9600012052243DB071A432800110007B0F0BC60 -:10D97000BB46B246A946A046F0BD00240025AA4AEF -:10D98000EDE7280C2D042D0C2B00110C1204120CA9 -:10D990005343984613002F00434399464F434F4447 -:10D9A000BB4647460B003F0CBA464343DA4402935A -:10D9B000D14504D980277F02B9464B440293534690 -:10D9C0001B0C9B4653461F0443461B041B0C9846E6 -:10D9D0003B0043440493330C3604360C9846330022 -:10D9E00043439946434643432F009A464346774371 -:10D9F0005D43380C4D444519A94503D980235B028A -:10DA00009946CA443F04280C3F0C2D04ED19270CFD -:10DA10002404240C0300200050437A4391463A002A -:10DA200053440593030C9A464A4361434944514485 -:10DA3000AB44894503D980235B0299464A440004DC -:10DA40000B0C000C0904091820009946434670434A -:10DA50005C437E435F43030C9846A41944444A4404 -:10DA60000397A64204D980235B0298464744039754 -:10DA70002304029E9A46059B5E449846AE42AD4101 -:10DA800076188E4289410004000C504440446D4297 -:10DA90004719B846934649428946C344D9449842F7 -:10DAA0008041A845AD4193459241894589416D42E8 -:10DAB00040422843240C524249420A43039B001926 -:10DAC0008018C7184B46DC0D049B75021D436A1E67 -:10DAD00095414B46F60D7F0235435A023C431543B0 -:10DAE000FB0100D41CE101216A080D401543E20747 -:10DAF000154364084F496144002900DCB0E06B071E -:10DB000009D00F222A40042A05D02A1DAA42AD417D -:10DB10006D4264191500E30104D58021464AC9000D -:10DB200014406144454A914200DD26E76207ED0852 -:10DB3000640249051543240B4A0D10E7524632434F -:10DB400000D17FE0002E00D1DCE03000FCF750FB7C -:10DB500002000B3A1D2301009B1A52460839DA4095 -:10DB60008E40164352468A40009B3549181A0300DE -:10DB70008C46634400200093D3E6250005434AD039 -:10DB8000002C00D1B0E02000FCF732FB01000200C5 -:10DB90000B391D2310005B1A310035000838844012 -:10DBA000D94085400C432648831A009300239946A8 -:10DBB0009B4697E60500254326D1082200930223C1 -:10DBC000002491469B468DE65246009B324310D17D -:10DBD000154900268C4663444946009302231943A5 -:10DBE000894602209DE65B460197022B00D0ADE6F8 -:10DBF000C3E60D4A0320944663444A460093032338 -:10DC00001A43914652468CE60C22009303230500EA -:10DC100091469B4666E60423994600230093013310 -:10DC200000249B465EE6C046FF07000001FCFFFFA4 -:10DC30009CF60010FF030000FFFFFFFEFE07000040 -:10DC40000DFCFFFF494601231943894600260120A8 -:10DC500067E6002380240025434A019324037EE6DF -:10DC60000120401A382800DD76E61F285BDD1F22E0 -:10DC700023005242511ACB401900202803D03B4ABE -:10DC80006244944025436A1E95412A000A430721B5 -:10DC90000D000024154011425BD00F2100241140DB -:10DCA000042953D0111D914292415242A4180A00F6 -:10DCB00023024BD501220024002550E680231B03BC -:10DCC0001C4209D01E4207D133431C0343461500B2 -:10DCD000240B254A019342E68022120314432403B5 -:10DCE000214A240B01973AE6FCF782FA0100020070 -:10DCF000153120321C2900DC4BE7340008380025A0 -:10DD0000844050E7FCF774FA03001A001532203003 -:10DD10001C2A00DC1EE75646083B00229E4023E7F3 -:10DD2000009B9C46E6E61249220061442E008D408D -:10DD30008A40C640691E8D4132432A43C44053077E -:10DD4000B6D00F2111400429ACD1B1E765076402B8 -:10DD5000240BD2081543002201E68022120314434B -:10DD60002403014A240BFAE5FF0700003E040000EB -:10DD70001E04000070B505000C481C0316005B0073 -:10DD80000A034900120B490D240B5B0D814208D098 -:10DD9000064A0020934203D120003043431E98419D -:10DDA00070BD01202A43FBD1F2E7C046FF07000007 -:10DDB00010B5041E10D0FCF71BFA0F4B1B1A0A28D3 -:10DDC00011DC0B222100121AD14015300A035B0529 -:10DDD0008440120B5B0D01E0002300221B0513435E -:10DDE0002000190010BD22000B3882405B05120391 -:10DDF0000024120B5B0DF1E71E04000058220120E5 -:10DE0000014B40421A60704774600108582201209B -:10DE1000014B40421A60704774600108582201208B -:10DE2000014B40421A607047746001085822024B4F -:10DE300000201A607047C046746001085822012013 -:10DE4000014B40421A60704774600108582201205B -:10DE5000014B40421A60704774600108044A030095 -:10DE60001068002802D0C318136070470148FAE711 -:10DE70007860010880600108FEE7C046F8B5C0463A -:10DE8000F8BC08BC9E467047F8B5C046F8BC08BC54 -:10DE90009E4670470000000001B40248844601BC61 -:10DEA000604700BF0906000801B40248844601BC6F -:10DEB000604700BFA5040008000000000800000043 -:10DEC0000800000000020000000000000000000048 -:10DED0000000000000000000000000000000000042 -:10DEE000000000000B0000003F00000000000000E8 -:10DEF0003F00000000000000010000000B000000D7 -:10DF00001D000000000000000000000000000000F4 -:10DF10000000000001000000000000000000000000 -:10DF200000000000000000000000000001000000F0 -:10DF30000A0000001D0000000000000000000000BA -:10DF400000000000000000000100000000000000D0 -:10DF500000000000000000000000000000000000C1 -:10DF600001000000060000001D000000000000008D -:10DF700000000000000000000000000001000000A0 -:10DF80000000000000000000000000000000000091 -:10DF90000000000001000000080000001200000066 -:10DFA0000000000000000000000000000000000071 -:10DFB0000100000000000000000000000000000060 -:10DFC000000000000000000001000000060000004A -:10DFD000120000000000000000000000000000002F -:10DFE0000000000001000000000000000000000030 -:10DFF0000000000000000000000000000100000020 -:10E000000000000000000000000000000000000010 -:10E0100000000000000000000100000000000000FF -:10E0200000000000000000000000000000000000F0 -:10E0300001000000000000000000000000000000DF -:10E0400000000000000000000000000001000000CF -:10E0500000000000000000000000000000000000C0 -:10E0600000000000010000000300000000000000AC -:10E0700000000018000000040000000058E100103B -:10E080006000000000000000FFFFFFFF0000000034 -:10E090000000000000000000DC00000000000000A4 -:10E0A000FFFFFFFF00000000000000000000000074 -:10E0B0003400000000000000FFFFFFFF020000002E -:10E0C0000000000002000000EC0000000002000060 -:10E0D0000100000002000000040000000200000037 -:10E0E0003500000000000000FFFFFFFF00000000FF -:10E0F000000000000000000005000000000000001B -:10E10000FFFFFFFF00000000000000000000000013 -:10E110000400000000000000FFFFFFFF00000000FF -:10E1200000000000000000000600000000000000E9 -:10E13000FFFFFFFF000000000000000000000000E3 -:10E140000100000000000000FFFFFFFF00000000D2 -:10E1500000000000000000000400000000000004B7 -:10E16000C8E0001028E1001010E1001098E0001055 -:10E170000000040080E00010B0E000100002000089 -:10E18000F8E00010E0E0001040E1001000000000A6 -:10E190000100000002000000280A0000E00407005F -:10E1A0001405000000000000000000000100000055 -:10E1B000BCE10010020000001400000064E0001048 -:10E1C000F4010000140004010A000905080003001E -:10E1D0006301000024010200000000005B494E467C -:10E1E0005D205374617274696E6720557365722087 -:10E1F0004170706C69636174696F6E206F6E20434B -:10E200004D342E20506C6561736520776169742EE2 -:10E210002E2E0A0D000000005B494E465D201B5B60 -:10E22000324A1B5B3B480A0D000000005B494E462A -:10E230005D204D4355626F6F7420426F6F746C6F39 -:10E240006164657220537461727465640A0D000024 -:10E250005B494E465D2045787465726E616C204D59 -:10E26000656D6F727920696E697469616C697A6530 -:10E2700064207573696E6720534644500A0D000090 -:10E280005B4552525D2045787465726E616C204D1D -:10E29000656D6F727920696E697469616C697A6104 -:10E2A00074696F6E207573696E6720534644502001 -:10E2B0004641494C45443A203078253032780A0DA1 -:10E2C000000000005B494E465D2055736572204199 -:10E2D00070706C69636174696F6E2076616C6964DB -:10E2E00061746564207375636365737366756C6CC4 -:10E2F000790A0D005B494E465D204D4355626F6FB4 -:10E300007420426F6F746C6F6164657220666F7504 -:10E310006E64206E6F20626F6F7461626C6520693D -:10E320006D6167650A0D0000030000000100000038 -:10E330000100000000000000050360000400000070 -:10E340000100000000000000010000000604600061 -:10E3500008000000F0080008A905001028696D6198 -:10E3600067655F6E756D29203C203078460000009F -:10E370002E2E2F6D74625F7368617265642F6D63FA -:10E3800075626F6F742F76312E372E302D63797052 -:10E39000726573732F626F6F742F626F6F74757411 -:10E3A000696C2F7372632F626F6F747574696C5F21 -:10E3B0006D6973632E63000028737761705F7479F1 -:10E3C000706529203C2030784600000062616400BE -:10E3D000676F6F6400000000756E73657400000065 -:10E3E00074657374000000007065726D00000000B9 -:10E3F0004255473B2063616E2774206861707065E9 -:10E400006E0000007265766572740000626F6F7452 -:10E410005F737761705F747970655F6D756C746937 -:10E420003A205072696D61727920696D616765008B -:10E430005B494E465D2025733A206D616769633DF7 -:10E4400025732C20737761705F747970653D307827 -:10E4500025782C20636F70795F646F6E653D30782E -:10E4600025782C20696D6167655F6F6B3D3078257D -:10E47000780A0D00626F6F745F737761705F7479F3 -:10E4800070655F6D756C74693A205365636F6E6477 -:10E4900061727920696D6167650000005B494E46D5 -:10E4A0005D205377617020747970653A2025730A76 -:10E4B0000D0000005B494E465D205377617020746B -:10E4C0007970653A206E6F6E650A0D00626F6F7429 -:10E4D0005F77726974655F737761705F696E666F8D -:10E4E0000000000077C295F360D2EF7F3552500FE5 -:10E4F0002CB679800401040304020401040104031E -:10E500000103030401040000000000006FC75E1057 -:10E51000DE8EBD20B149E330BC1D7B41D3DA2551ED -:10E520006293C6610D549871783BF68217FCA892ED -:10E53000A6B54BA2C97215B2C4268DC3ABE1D3D325 -:10E540001AA830E3756F6EF37365636F6E64617262 -:10E55000790000007072696D617279005B455252FA -:10E560005D20496D61676520696E207468652025AE -:10E570007320736C6F74206973206E6F74207661E2 -:10E580006C6964210A0D00007263203D3D2030005B -:10E590002E2E2F6D74625F7368617265642F6D63D8 -:10E5A00075626F6F742F76312E372E302D63797030 -:10E5B000726573732F626F6F742F626F6F747574EF -:10E5C000696C2F7372632F6C6F616465722E6300C8 -:10E5D0005B4552525D2070616E6963210A0D000037 -:10E5E000300000005B57524E5D204661696C6564E7 -:10E5F0002072656164696E6720736563746F7273FE -:10E600003B20424F4F545F4D41585F494D475F5348 -:10E610004543544F52533D2564202D20746F6F2085 -:10E62000736D616C6C3F0A0D000000005B57524E29 -:10E630005D204661696C65642072656164696E671E -:10E6400020696D61676520686561646572733B2050 -:10E65000496D6167653D25750A0D00005B57524E97 -:10E660005D204661696C65642072656164696E67EE -:10E6700020626F6F74207374617475733B20496DF1 -:10E680006167653D25750A0D000000005B4552522B -:10E690005D2062616420696D616765206D616769F5 -:10E6A00063203078256C783B20496D6167653D2596 -:10E6B000750A0D00626F6F745F706572666F726DC0 -:10E6C0005F75706461746500626F6F745F7377610A -:10E6D000705F696D61676500626F6F745F636F6D16 -:10E6E000706C6574655F7061727469616C5F73777B -:10E6F00061700000626F6F745F7072657061726547 -:10E700005F696D6167655F666F725F757064617484 -:10E7100065000000636F6E746578745F626F6F747C -:10E720005F676F002E2E2F6D74625F736861726574 -:10E73000642F6D6375626F6F742F76312E372E30B4 -:10E740002D637970726573732F626F6F742F626FB0 -:10E750006F747574696C2F7372632F737761705F58 -:10E760007374617475732E63000000005B45525230 -:10E770005D20446574656374656420696E636F6EC3 -:10E7800073697374656E7420737461747573210A90 -:10E790000D0000005B57524E5D2043616E6E6F743A -:10E7A00020757067726164653A206E6F7420612015 -:10E7B000636F6D70617469626C6520616D6F756EF9 -:10E7C00074206F6620736563746F72730A0D0000A6 -:10E7D0005B57524E5D2043616E6E6F74207570679B -:10E7E000726164653A206D6F726520736563746F42 -:10E7F0007273207468616E20616C6C6F7765640A57 -:10E800000D0000005B57524E5D2043616E6E6F74C9 -:10E8100020757067726164653A206E6F7420736151 -:10E820006D6520736563746F72206C61796F7574A8 -:10E830000A0D0000737761705F7374617475735FA4 -:10E84000736F757263653A205072696D61727920D9 -:10E85000696D6167650000005B494E465D20426F4F -:10E860006F7420736F757263653A207072696D61A1 -:10E87000727920736C6F740A0D0000005B494E467C -:10E880005D20426F6F7420736F757263653A206EFE -:10E890006F6E650A0D00000066697875705F7265BD -:10E8A000766572743A205365636F6E646172792085 -:10E8B000696D616765000000626F6F745F737761F7 -:10E8C000705F736563746F7273000000626F6F74C2 -:10E8D0005F6D6F76655F736563746F725F757000EF -:10E8E000737761705F72756E0000000066697875FD -:10E8F000705F7265766572740000000073776170F6 -:10E900005F7374617475735F736F75726365000014 -:10E91000737761705F726561645F7374617475733E -:10E920005F627974657300005B494E465D204572F5 -:10E930006173696E6720747261696C65723B2066F1 -:10E94000615F69643D25640A0D0000002E2E2F6D65 -:10E9500074625F7368617265642F6D6375626F6F57 -:10E96000742F76312E372E302D6379707265737364 -:10E970002F626F6F742F626F6F747574696C2F7371 -:10E9800072632F737761705F7374617475735F6DF9 -:10E990006973632E63000000737761705F72656155 -:10E9A000645F737461747573000000007377617045 -:10E9B0005F7374617475735F696E69740000000041 -:10E9C000737761705F65726173655F747261696CA2 -:10E9D00065725F736563746F727300002E2E2F6D06 -:10E9E00074625F7368617265642F6D6375626F6FC7 -:10E9F000742F76312E372E302D63797072657373D4 -:10EA00002F626F6F742F626F6F747574696C2F73E0 -:10EA100072632F737761705F7374617475735F7065 -:10EA20006172742E63000000286F666673202B20CD -:10EA30006C656E29203C3D20424F4F545F53574137 -:10EA4000505F5354415455535F445F53495A455F97 -:10EA500052415700696E69745F6F666673203E3D70 -:10EA600020300000737761705F7374617475735F39 -:10EA70007265747269657665000000007377617075 -:10EA80005F7374617475735F77726974655F7265C3 -:10EA9000636F726400000000737761705F7374616C -:10EAA0007475735F7570646174650000737761706D -:10EAB0005F7374617475735F726561645F726563BF -:10EAC0006F726400AFBEADDE6F6666203C2066618B -:10EAD0002D3E66615F6F6666000000002E2E2F6D72 -:10EAE00074625F7368617265642F6D6375626F6FC6 -:10EAF000742F76312E372E302D63797072657373D3 -:10EB00002F626F6F742F637970726573732F6379DF -:10EB10005F666C6173685F70616C2F63795F666CB0 -:10EB20006173685F6D61702E630000006F66662020 -:10EB30002B206C656E203C2066612D3E66615F6F08 -:10EB4000666600005B4552525D20466C617368202A -:10EB5000617265612072656164206572726F722CEA -:10EB6000207263203D2025640A0D000021286C6579 -:10EB70006E20252043595F464C4153485F53495A04 -:10EB8000454F465F524F57290000000021287772F9 -:10EB90006974655F73746172745F61646472202567 -:10EBA0002043595F464C4153485F53495A454F46AD -:10EBB0005F524F57290000006C656E203C3D206677 -:10EBC000612D3E66615F73697A6500006F6666203D -:10EBD0003C2066612D3E66615F73697A65000000C6 -:10EBE0006F6666202B206C656E203C2066612D3E92 -:10EBF00066615F6F6666202B2066612D3E66615FF1 -:10EC000073697A65000000007263203D3D2043591E -:10EC10005F464C4153485F4452565F53554343450A -:10EC20005353000066616C73650000007365637484 -:10EC30006F72735F6E203C3D202A636E740000008B -:10EC4000666C6173685F617265615F6765745F734D -:10EC50006563746F72730000666C6173685F6172E4 -:10EC600065615F6572617365645F76616C00000069 -:10EC7000666C6173685F617265615F65726173651F -:10EC800000000000666C6173685F617265615F77A8 -:10EC90007269746500000000666C6173685F617280 -:10ECA00065615F7265616400010000000E00000094 -:10ECB0001100000000000000000000000000000043 -:10ECC0000000000001000000000000000000000043 -:10ECD0000000000000000000000000000100000033 -:10ECE0000E00000011000000000000000000000005 -:10ECF0000000000000000000010000000000000013 -:10ED00000000000000000000000000000000000003 -:10ED1000010000000E0000001100000000000000D3 -:10ED200000000000000000000000000001000000E2 -:10ED300000000000000000000000000000000000D3 -:10ED400000000000010000000E00000011000000A3 -:10ED500000000000000000000000000000000000B3 -:10ED600001000000000000000000000000000000A2 -:10ED7000000000000000000001000000060000008C -:10ED80001100000000000000000000000000000072 -:10ED90000000000001000000000000000000000072 -:10EDA0000000000000000000000000000000000063 -:10EDB000010000000100000000000000010001004F -:10EDC00000010001A10FB90BD107DC05E903EE0238 -:10EDD000F5017701FB00BC007E005E003F002F00C4 -:10EDE0002000180010000C000800060004000300BA -:10EDF0000200020001000100000020400000244049 -:10EE000000000040000000000000234000003040EF -:10EE10000000314000009F400000224000001040F0 -:10EE200000009D402020202020101010101D1D806B -:10EE300017007500FF0306020600360410200000CC -:10EE40007FC0000000040000000000000019324BE9 -:10EE5000647D0000000000804000080B10000000EE -:10EE60000000FF012002001F00800004FF081018AE -:10EE7000001000140018001C4044484C50000000D2 -:10EE8000081000000800000004000000041000004A -:10EE90000012000004210000002100000016000004 -:10EEA00040114002C41300138013A01340138813B1 -:10EEB000A81320001C000000040000004000000017 -:10EEC0004400000048000000800000000001000035 -:10EED000100200008802000000040000100400007E -:10EEE00020040000400400004804000080040000EA -:10EEF0008404000090040000C0070000C407000064 -:10EF0000C8070000CC07000000400000041000000B -:10EF1000401000004410000048100000C014000021 -:10EF20000011000018020000980200000014000008 -:10EF300010140000201400004014000048140000C9 -:10EF400080140000841400009014000000010000F0 -:10EF500004010000080100000C0100000080000016 -:10EF6000AA3D0010D43D0010FE3D0010263E0010CA -:10EF7000523E0010A83E00107C3E00100123456761 -:10EF800089ABCDEFFEDCBA9876543210F0E1D2C3F3 -:10EF9000D89E05C107D57C3617DD703039590EF77C -:10EFA000310BC0FF11155868A78FF964A44FFABE42 -:10EFB00067E6096A85AE67BB72F36E3C3AF54FA50A -:10EFC0007F520E518C68059BABD9831F19CDE05B36 -:10EFD0005D9DBBCBD89E05C12A299A6207D57C3698 -:10EFE0005A01599117DD7030D8EC2F1539590EF7A9 -:10EFF00067263367310BC0FF874AB48E11155868F6 -:10F000000D2E0CDBA78FF9641D48B547A44FFABE3F -:10F0100067E6096A08C9BCF385AE67BB3BA7CA842B -:10F0200072F36E3C2BF894FE3AF54FA5F1361D5F56 -:10F030007F520E51D182E6AD8C68059B1F6C3E2B32 -:10F04000ABD9831F6BBD41FB19CDE05B79217E13EA -:10F05000C8373D8CA24D54196699E173D6D4DC892A -:10F06000AEB7FA1D829CFF3214D59D67CF9F2F58F3 -:10F07000692B6D0FA84DD47B736FE3774289C4046D -:10F08000A8859D3FC8361D6AADE61211A192D691A2 -:10F09000942131222CF72BFCA35F559FC2644CC8EE -:10F0A0006BB8932351B1536F19773896BDEA405925 -:10F0B000E23E2896E3FF8EA8251E5EBE9239865357 -:10F0C000FC99012BAAB8852CDC2DB70EA22CC5818A -:10F0D000BE400010FA400010DC4000103841001023 -:10F0E0001A41001058410010784100106745230173 -:10F0F000EFCDAB8998BADCFE10325476C3D2E1F082 -:10F10000C1059ED8367CD5073070DD17F70E59390A -:10F11000FFC00B316858151164F98FA7BEFA4FA4D0 -:10F120006A09E667BB67AE853C6EF372A54FF53A98 -:10F13000510E527F9B05688C1F83D9AB5BE0CD19C4 -:10F14000CBBB9D5DC1059ED8629A292A367CD50726 -:10F150009159015A3070DD17152FECD8F70E593937 -:10F1600067332667FFC00B318EB44A876858151184 -:10F17000DB0C2E0D64F98FA747B5481DBEFA4FA4CE -:10F180006A09E667F3BCC908BB67AE8584CAA73BBA -:10F190003C6EF372FE94F82BA54FF53A5F1D36F1E5 -:10F1A000510E527FADE682D19B05688C2B3E6C1FC1 -:10F1B0001F83D9ABFB41BD6B5BE0CD19137E217979 -:10F1C0008C3D37C819544DA273E1996689DCD4D6B9 -:10F1D0001DFAB7AE32FF9C82679DD514582F9FCF82 -:10F1E0000F6D2B697BD44DA877E36F7304C48942FC -:10F1F0003F9D85A86A1D36C81112E6AD91D692A131 -:10F2000022312194FC2BF72C9F555FA3C84C64C27C -:10F210002393B86B6F53B151963877195940EABDB3 -:10F2200096283EE2A88EFFE3BE5E1E2553863992E5 -:10F230002B0199FC2C85B8AA0EB72DDC81C52CA218 -:10F24000BE600010DE600010D4600010CA600010C4 -:10F25000C0600010B6600010186300102863001032 -:10F260003A6300104C6300102863001028630010FC -:10F27000000000007494001062940010409400108C -:10F280006A940010409400104297001040940010BF -:10F290006A9400106294001062940010429700106B -:10F2A0006A9400102C9400102C9400102C940010E0 -:10F2B000B89700102C2066756E6374696F6E3A20E3 -:10F2C00000617373657274696F6E2022257322204A -:10F2D0006661696C65643A2066696C6520222573F5 -:10F2E000222C206C696E65202564257325730A0025 -:10F2F000F0010008232D302B2000686C4C0065665F -:10F300006745464700494E4600696E66004E414ECD -:10F31000006E616E003000303132333435363738AC -:10F320003941424344454600303132333435363773 -:10F330003839616263646566000020202020202047 -:10F340002020202828282828202020202020202095 -:10F350002020202020202020202088101010101095 -:10F3600010101010101010101010040404040404E5 -:10F3700004040404101010101010104141414141C8 -:10F38000410101010101010101010101010101012D -:10F3900001010101011010101010104242424242BE -:10F3A00042020202020202020202020202020202FD -:10F3B00002020202021010101020000000000000E3 -:10F3C000000000000000000000000000000000003D -:10F3D000000000000000000000000000000000002D -:10F3E000000000000000000000000000000000001D -:10F3F000000000000000000000000000000000000D -:10F4000000000000000000000000000000000000FC -:10F4100000000000000000000000000000000000EC -:10F4200000000000000000000000000000000000DC -:10F4300000000000000000000000496E66696E696F -:10F440007479004E614E005245454E54206D616CFA -:10F450006C6F6320737563636565646564002F6812 -:10F460006F6D652F706172616C6C656C732F746F5A -:10F470006F6C636861696E2F6763632D61726D2DB8 -:10F480006E6F6E652D656162692D31302E332D32C0 -:10F490003032312E30372F7372632F6E65776C697F -:10F4A000622F6E65776C69622F6C6962632F73746B -:10F4B000646C69622F64746F612E630042616C6CCE -:10F4C0006F632073756363656564656400000000A5 -:10F4D000000000000000000000000000000000002C -:10F4E000000000000000000000000000000000001C -:10F4F000000000000000000000000000000000000C -:10F5000000000000000000000000000000000000FB -:10F5100000000000000000000000000000000000EB -:10F5200000000000000000000000000000000000DB -:10F530004300504F534958002E002F686F6D652FC0 -:10F54000706172616C6C656C732F746F6F6C636843 -:10F5500061696E2F6763632D61726D2D6E6F6E65CD -:10F560002D656162692D31302E332D323032312ECE -:10F5700030372F7372632F6E65776C69622F6E65FB -:10F58000776C69622F6C6962632F7374646C696253 -:10F590002F6D707265632E63000000000000000094 -:10F5A0000080E03779C34143176E05B5B5B893467F -:10F5B000F5F93FE9034F384D321D30F94877825A4B -:10F5C0003CBF737FDD4F1575000000000000F03F69 -:10F5D000000000000000244000000000000059402E -:10F5E0000000000000408F40000000000088C34081 -:10F5F00000000000006AF8400000000080842E41F6 -:10F6000000000000D01263410000000084D7974141 -:10F610000000000065CDCD41000000205FA0024247 -:10F62000000000E876483742000000A2941A6D42BC -:10F63000000040E59C30A2420000901EC4BCD642AF -:10F6400000003426F56B0C430080E03779C341435A -:10F6500000A0D8855734764300C84E676DC1AB43D0 -:10F66000003D9160E458E143408CB5781DAF1544EE -:10F6700050EFE2D6E41A4B4492D54D06CFF08044C9 -:10F68000F64AE1C7022DB544B49DD9794378EA44DE -:10F6900005000000190000007D00000082D9001064 -:10F6A00040D9001040D900103CD9001046D90010B4 -:10F6B00046D9001052DC00103CD9001046D9001089 -:10F6C00052DC001046D900103CD90010E6DB0010D7 -:10F6D000E6DB0010E6DB0010BCDC001000000000E0 -:08F6E000209BFF7F01000000E8 -:10F6E80000000010000000088000000008F700106B -:08F6F80080000008A0060000DC -:08F7000074070008085901001C -:10F7080000093D0000127A0000093D000000D00702 -:10F71800A00F000004000000FFFFFFFFFFFFFFFF36 -:10F72800B4000008C0000008CC000008D800000899 -:10F7380000000000007F00000000001000800100B1 -:10F74800017F00000080011000001C000280000002 -:10F758000000001800001C00077F000000801D103A -:10F768000048000001000000060000001100000031 -:10F778000000000000000000000000000000000081 -:10F788000100000000000000000000000000000070 -:10F79800000000000000000004000000000000005D -:10F7A800F05E0108545F01083C5F0108C05E010873 -:10F7B80000000000A85E0108D85E010800000000F3 -:10F7C800085F0108205F01086C5F0108BC010008A0 -:10F7D8000000000000000000000000000000000021 -:10F7E8000000000000000000000000000100000010 -:10F7F80004000000000000000000001800000000E5 -:10F8080000000000180100086C0100088005314064 -:10F8180002000000110000008005314001000000D6 -:10F8280011000000800531400000000011000000B8 -:10F838000006314004000000110000005A000000DA -:10F8480000000000FFFFFFFF0000000008000000AC -:10F85800000000000100000088010008000000000E -:10F86800000000000700A00001000000F0010008EF -:10F8780000000000F0F4001010F50010D0F40010A3 -:10F888000000000000000000000000000000000070 -:10F898000000000000000000000000000000000060 -:10F8A8000000000000000000000000000000000050 -:10F8B8000000000000000000000000000000000040 -:10F8C8000000000000000000000000000000000030 -:10F8D80043000000000000000000000000000000DD -:10F8E8000000000000000000000000000000000010 -:10F8F80043000000000000000000000000000000BD -:10F9080000000000000000000000000000000000EF -:10F91800430000000000000000000000000000009C -:10F9280000000000000000000000000000000000CF -:10F93800430000000000000000000000000000007C -:10F9480000000000000000000000000000000000AF -:10F95800430000000000000000000000000000005C -:10F96800000000000000000000000000000000008F -:10F97800430000000000000000000000000000003C -:10F98800000000000000000000000000000000006F -:10F99800430000000000000000000000000000001C -:10F9A800000000000000000000000000000000004F -:10F9B80015D0001055C700100000000039F30010E2 -:10F9C80038F50010EFF20010EFF20010EFF200101F -:10F9D800EFF20010EFF20010EFF20010EFF200105B -:10F9E800EFF20010EFF20010FFFFFFFFFFFFFFFF35 -:10F9F800FFFFFFFFFFFF000001004153434949009B -:10FA080000000000000000000000000000000000EE -:10FA18000000000000000000000041534349490075 -:10FA280000000000000000000000000000000000CE -:10FA3800000000000000000000000000A900001005 -:10FA48008100001010B50004440B002827D0144B87 -:10FA58001A68136ABA21515ACA00521A9B181B68AD -:10FA6800002BF4DA0F4B3E221A600F4B0F4A1A6034 -:10FA78000F4BA322D200062199500E4A9C509B5846 -:10FA8800074B1A68136AB431515ACA00521A9B18A4 -:10FA980000225A60064A074BD358002BFADA10BDE9 -:10FAA800D45F010804012640080126401E1F0000FB -:10FAB800000026401C05000010B54378FF2B00D03D -:10FAC80010BD00F035F9124B1A683323D35C032BB1 -:10FAD80000D801BE0E4B1A68136ABA21515A4A005F -:10FAE80052189B18DB680B4A13600B4A00211160FF -:10FAF80001310A4A11605A68094B1A6013680B43AE -:10FB080013601368DB07FCD400F03AF9D8E7C04665 -:10FB1800D45F010800600108F45F0108F85F01087C -:10FB2800FC5F0108F0B583B0009001914D4B1A6855 -:10FB38003323D35C002B00D101BE4A4B1B681F6ADC -:10FB4800BC229C58E4196C3A9B5C002B69D000F0ED -:10FB5800E7F8060003280ED000F0EAF80500424A4C -:10FB6800424BD358002B3DDB414C032E52D028008A -:10FB780000F006F96DE03B4B1A683323D35C062B83 -:10FB880000D801BE374B1968BA23CA5A53009A18CD -:10FB980052000B6A9C466244BC23CB589B181B68D6 -:10FBA800002B5BDB002000F0DBF8324B984257D08B -:10FBB800314B1A6800230021012000F0D9F8051EF6 -:10FBC80002D02B4C45E00135002000F0C9F8294B44 -:10FBD800984202D0294B9D42F5D9284B9D42BBD96A -:10FBE800234C36E0264A0121380000F0A9F8002805 -:10FBF80001D01F4CB9E70198FFF724FF009B002BA9 -:10FC080006D02368002BFCDB00F0C2F80400ACE748 -:10FC18001C4CAAE70121002000F09AF80028F9D12D -:10FC2800A5E700F085F80600154A0121380000F024 -:10FC380087F8002809D1009B002B0DD02368002BE2 -:10FC4800FCDB00F0A5F8040000E0094C300000F0EF -:10FC580097F8200003B0F0BD0A4CF7E7044CF8E72A -:10FC6800034CF6E7D45F0108000026401C0500009D -:10FC78000500520001018800F05F0108EF49020009 -:10FC8800E05F010801005000F0B5C64600B51C4B06 -:10FC98001B6859681B4A136904242343136101280C -:10FCA8002CD030BF86235B00CB58002B23D1164CB9 -:10FCB8002768164BA320C0001E58154A90461568A1 -:10FCC800144A226006241C503E2042461060124A04 -:10FCD800063098500D4A104BD358002BFADA862379 -:10FCE8005B000E4ACA50084B1F60084AA323DB007A -:10FCF800D650074B1D6080BCB846F0BD20BFD1E789 -:10FD0800D45F010800ED00E008012640000026400D -:10FD1800040126401E1F00001C050000AAAAAAAA6A -:10FD280001B40248844601BC604700BFE5060010E4 -:10FD380001B40248844601BC604700BF9B0500101F -:10FD480001B40248844601BC604700BF514E001010 -:10FD580001B40248844601BC604700BF415200100C -:10FD680001B40248844601BC604700BFC15200107C -:10FD780001B40248844601BC604700BFF54F00103B -:10FD880001B40248844601BC604700BFA3050010C7 -:10FD980001B40248844601BC604700BF55490010C1 -:10FDA800000000000000000000000000000000004B -:08FDB800000000000000000043 -:020000041600E4 -:08080000ACE100100000000053 -:107C0000FC01000020122101000000000008001605 -:107C10000000001000000000000000000000000054 -:107C20000000000000000000000000000000000054 -:107C30000000000000000000000000000000000044 -:107C40000000000000000000000000000000000034 -:107C50000000000000000000000000000000000024 -:107C60000000000000000000000000000000000014 -:107C70000000000000000000000000000000000004 -:107C800000000000000000000000000000000000F4 -:107C900000000000000000000000000000000000E4 -:107CA00000000000000000000000000000000000D4 -:107CB00000000000000000000000000000000000C4 -:107CC00000000000000000000000000000000000B4 -:107CD00000000000000000000000000000000000A4 -:107CE0000000000000000000000000000000000094 -:107CF0000000000000000000000000000000000084 -:107D00000000000000000000000000000000000073 -:107D10000000000000000000000000000000000063 -:107D20000000000000000000000000000000000053 -:107D30000000000000000000000000000000000043 -:107D40000000000000000000000000000000000033 -:107D50000000000000000000000000000000000023 -:107D60000000000000000000000000000000000013 -:107D70000000000000000000000000000000000003 -:107D800000000000000000000000000000000000F3 -:107D900000000000000000000000000000000000E3 -:107DA00000000000000000000000000000000000D3 -:107DB00000000000000000000000000000000000C3 -:107DC00000000000000000000000000000000000B3 -:107DD00000000000000000000000000000000000A3 -:107DE0000000000000000000000000000000000093 -:107DF0000000000000000000C20200000000B33BD1 -:0400000510000507DB -:00000001FF +:020000041000EA +:10000000000002081B0500100D0000007D05001017 +:1000100000000000000000000000000000000000E0 +:100020000000000000000000000000007905001042 +:1000300000000000000000007905001079050010A4 +:100040007905001079050010790500107905001078 +:100050007905001079050010790500107905001068 +:100060007905001079050010790500107905001058 +:100070007905001079050010790500107905001048 +:100080000448054B10B5834203D0044B002B00D02D +:10009000984710BD80060008800600080000000098 +:1000A00006480749091A8B10C90FC91810B549101D +:1000B00003D0044B002B00D0984710BD80060008E9 +:1000C000800600080000000010B5074C2378002BC4 +:1000D00009D1FFF7D5FF054B002B02D0044800E003 +:1000E00000BF0123237010BD24070008000000009A +:1000F000CC5F0110054B10B5002B03D00449054817 +:1001000000E000BFFFF7CCFF10BDC04600000000BC +:1001100028070008CC5F011010B5012004F0E6FAB2 +:1001200004F038F80028FBD104F03CF810BD0000C2 +:100130000FB400B583B004AA02CA0192044B1B6835 +:10014000D86812F03FFA03B008BC04B01847C046A4 +:1001500014030008F0B58DB00400002309930028B3 +:1001600000D1A7E00368002B00D1A5E0007909A920 +:1001700004F080FB002800D097E0099AA368D21809 +:1001800023681B899B1807AD07934D4F7B4008934D +:1001900001AE33002A0003CA03C34A48FFF7C8FF71 +:1001A00005AB1A0003CE03C203CB03C2089A079B18 +:1001B0005740BB424BD105994348FFF7B9FF20791F +:1001C00009A904F057FB00283FD1099AA368D21867 +:1001D00023681B89D21807AB07923948424008921E +:1001E0000AA90A001C0060CC60C203AA140060C9FE +:1001F00060C401A9C0C9C0C434490091190030CA03 +:1002000030C1089A079B5040834222D107AB05AA10 +:10021000190011CA11C10899079A294B4B409A42FB +:1002200019D1059A039B9A4217D0069A049B9A42C9 +:1002300016D0059A039B9A4203D0009A244B9A4207 +:1002400014D0009A224B9A4212D0002035E000F0E0 +:100250009FFB00F09DFB00F09BFB1E4B0093E4E72F +:10026000009AC5231B0113430093E2E700F090FBC3 +:100270001948FFF75DFF1948FFF75AFFFFF74CFFDA +:1002800005AB01AA190011CA11C10A0011CB11C195 +:100290005168079A0A4B4B409A4204D1059811F0D5 +:1002A000E3FB012009E000F073FB0D48FFF740FF7E +:1002B000002002E0002000E000200DB0F0BDC046AC +:1002C0001CA379B7503301107C330110C3A5000083 +:1002D0005A3C00000A300000A0330110C433011062 +:1002E0000834011010B5084B1968084A116018331A +:1002F0005360074810F024FD002800D010BD0548C9 +:10030000FFF716FF01BEF9E7B860010840070008D3 +:10031000800000082C34011070B592B00C2200212E +:100320000DA812F06DFD09AB624A0992624A0A9269 +:100330000BAA11CB11C211F0BFFD002802D001BEE3 +:1003400030BFFDE762B6E1235B020093FF231A0092 +:100350002821292003F0F4FE002802D001BE30BF7E +:10036000FDE75648FFF7E4FE5548FFF7E1FE0120A0 +:1003700004F064F9011E65D15248FFF7D9FE01214E +:1003800007A800F00FFB09AE4A4B09934A4B0A93AA +:100390000BAC2300320003CA03C302AD19002800CE +:1003A00002F0E2F9230006CD06C30798089900F091 +:1003B00059FB330006CC06C30A99099A424B4B40BD +:1003C0009A4246D109AB414A0992414A0A9210A980 +:1003D0000A00180030C830C205AA140060C860C402 +:1003E000200060C960C03B490491190011CA11C1C5 +:1003F0000A99099A344B4B4093422CD109AB07AA76 +:10040000190011CA11C10A99099A2F4B4B409A42FF +:1004100023D1079A059B9A4221D0089A069B9A42BB +:1004200020D0079A059B9A4203D0049A2A4B9A42FD +:100430001ED0049A284B9A421CD02848FFF778FE19 +:10044000002403E02648FFF773FE0024FFF74AFF6D +:1004500029E000F09DFA00F09BFA00F099FA214B98 +:100460000493DAE7049AC5231B0113430493D8E7E6 +:1004700000F08EFA1C48FFF75BFEFA21090100200C +:100480000BF0DCFD002808D10DA8FFF763FE041E69 +:10049000DCD11648FFF74CFED8E71548FFF748FEB9 +:1004A0000024D3E730BF002CFCD0002010F02CFE3D +:1004B000F9E7C0465555AAAA690F690F64340110BF +:1004C000783401109C3401103C5AC3A5AAAA555592 +:1004D00096F096F0C3A500005A3C00007835011054 +:1004E000CC3401100A3000000C3501103C350110ED +:1004F0005C350110000000000230800803D001309C +:100500000238FCD1C046C0467047EFF3108072B687 +:10051000704780F3108870477047FFF7FDFF72B691 +:100520000F4C104DAC4209DA21686268A368043BA5 +:1005300002DBC858D050FAE70C34F3E70A490B4AFB +:100540000020521A02DD043A8850FCDC08480949B0 +:100550000860BFF34F8F11F00BFAFFF7DDFEFEE7E7 +:10056000D85F0110F05F01102407000878690108C6 +:100570000000000808ED00E0FEE7FEE700B50420FB +:100580007146084202D0EFF3098002E0EFF30880E1 +:10059000043010F003FAFEE7F0B583B007006846B8 +:1005A000114C0094114C44603C0060C860C40024AD +:1005B00000E001349C420CD20D192E78F6B21519C8 +:1005C0002D78EDB2AE42F4D000F0A2FA380003B0BC +:1005D000F0BD9C42F8D16B46054A0092054A5A602C +:1005E0003A0003CB03C2EFE75555AAAA690F690F7A +:1005F000AAAA555596F096F043001B18D800C01AC9 +:100600004002704710B5FFF7F7FF303010BD10B54E +:10061000040002F073FE01000122200000F06DF8DA +:1006200010BD10B582B00400019102F071FE01000E +:10063000042301AA200002F073FE02B010BD0000E6 +:100640000FB400B583B004AA02CA0192044B1B6820 +:10065000D86811F0B7FF03B008BC04B01847C04613 +:100660001403000804280BD0052804D101394B1EBF +:100670009941C8B27047401A43425841C0B2F9E7A5 +:100680000120F7E700280FD0002A03D1002070478F +:1006900001301A00531E002A04D002788A42F7D093 +:1006A0000020F4E70120F2E70020F0E770B50C002D +:1006B0001500002807D004F0CDFA01002A00200020 +:1006C000FFF7E0FF70BD0020FCE710B582B00C0022 +:1006D00000230193C0B201A904F0F4F8002803D06C +:1006E0000124200002B010BD0198210002F084FE18 +:1006F0000400019804F01CF9F3E700B583B013007F +:1007000001AA1370012302F00BFE03B000BD10B567 +:10071000040002F0EFFD010001222000FFF7EDFFD1 +:1007200010BD000010B582B004000E2A12D80E29A8 +:1007300017D81201D2B26B46DA710A43DA7102F0AD +:10074000E2FD010001236A460732200002F0E8FDC5 +:1007500002B010BD064B074ADD210748490011F0E1 +:1007600099FD064B034ADD210348490011F092FD33 +:10077000B435011078370110C83501101436011056 +:1007800030B587B004000522002104A812F038FB20 +:100790000522002102A812F033FB251E0CD0012CEB +:1007A00005D1601C4000FF2807D9FF2005E0002C80 +:1007B00015D1A01C4000F6E70120C0B204A9FFF744 +:1007C00084FF002800D0A2E0002D10D0012D08D118 +:1007D000601C40000130FF280AD9FF2008E0FF20FC +:1007E000EBE7002D31D1601C40000330F3E702201D +:1007F000C0B202A9FFF769FF012828D0002800D065 +:1008000087E004AB1B78012B31D0032B2DD0424A5B +:1008100004A94B788C78CD784049414801950094E3 +:10082000FFF70EFF02AB1B78012B24D0032B20D047 +:10083000394A02A94B788C78CD783A4938480195E5 +:100840000094FFF7FDFE00241FE0FF20D0E73648AC +:100850002100FFF7F5FE02AB03221A700121597047 +:100860009A70DA7000221A71CBE7304AD0E7304A2A +:10087000CEE72E4ADDE72E4ADBE72B79042B28D082 +:1008800004AA9278934224D00134022C39D8630010 +:100890001B195B00274AD518D05C04AB1978FFF709 +:1008A000E1FE0028F0D0687802AB1978FFF7DAFE95 +:1008B0000028E9D0AB78042B03D004AAD278934265 +:1008C000E2D1EB78042BD8D002AAD2789342DBD1C4 +:1008D000D3E76B79022B07D0032B10D0042B01D068 +:1008E000154902E0154900E015491648FFF7A8FE32 +:1008F0006879831EDBB2022B07D9FF2005E012497D +:10090000F3E71248FFF79CFE012007B030BDFF203F +:10091000FBE7FF20F9E7C04628360110B836011082 +:10092000DC36011020370110683601103436011012 +:100930002C360110A03701104C3601106036011022 +:1009400044360110483701103C3601106037011061 +:1009500070B50600002915D001204042337843408D +:100960001D090F221340094C9B001B596B401809AD +:100970001A40920013595840013901360029EDD12F +:10098000C04370BD01204042FAE7C046B4370110B1 +:10099000FEE7FCE7FAE7F8E7F6E7F4E7F2E7F0E767 +:1009A000EEE7FEE7F0B587B004000D002B4B020028 +:1009B000190041C941C269460A0041CB41C208221F +:1009C00002A812F068FA0399029A254B4B409A420A +:1009D00039D1009BEA439A4237D369461F4B0A003C +:1009E00041CB41C2082202A812F055FA0399029A9B +:1009F0001B4B4B409A422AD1009BED1802AE029548 +:100A0000174F7D40039504AD08223100280012F0F5 +:100A100042FA124B1A0003CD03C2320003CB03C2C9 +:100A2000039A029B5740BB4213D102AB1A0021002C +:100A300021C921C20399029A094B4B409A420AD11B +:100A4000200007B0F0BDFFF7A3FFFFF7A1FFFFF7FE +:100A50009FFFFFF79DFFFFF79BFFC046F0000008D8 +:100A60001CA379B770B58AB06A46009051602348DC +:100A7000099003AB190030CA30C1214A60CA60C175 +:100A800002900A0011CB11C15168079A1D4B4B40CF +:100A90009A4222D107AB05AA190011CA11C10899BF +:100AA000079A184B4B409A4219D1059A039B9A42D8 +:100AB00017D0069A049B9A4216D0059A039B9A4235 +:100AC00003D0029A104B9A4214D0029B0993099AC0 +:100AD0000D4B9A4210D10AB070BDFFF759FFFFF7D6 +:100AE00057FF0A4B0293E4E7029AC5231B01134305 +:100AF0000293E2E7FFF74CFFFFF74AFFC3A50000B0 +:100B0000F00000081CA379B75A3C00000A3000002E +:100B100070B586B06946214B0A0011CB11C208227C +:100B200002A812F0B8F90399029A1D4B4B409A4261 +:100B30002CD1009B002B2BD06946184B0A0011CBFF +:100B400011C2082202A812F0A6F90399029A144BC6 +:100B50004B409A421ED1009B013B02AC0293104EC7 +:100B60007340039304AD08222100280012F093F98A +:100B70000A4B1A0003CD03C2220003CB03C2039A1F +:100B8000029B5640B34207D106B070BDFFF700FF8D +:100B9000FFF7FEFEFFF7FCFEFFF7FAFEF00000088D +:100BA0001CA379B730B589B00400302307AA04F03C +:100BB000FEF900282ED12568079BED1801AB04AA89 +:100BC0002900200004F036FA002826D1059B072BC7 +:100BD00026D106981D49072212F004F9002822D1D7 +:100BE000029B082B22D103981949082212F0FAF827 +:100BF00000281ED107AA2900200004F001FA0028CD +:100C00001AD12368079A9B18AB4218D1412A19D1EF +:100C100009B030BD01204042FAE702204042F7E728 +:100C200003204042F4E703204042F1E70420404221 +:100C3000EEE704204042EBE706204042E8E70720C9 +:100C40004042E5E708204042E2E7C046F4370110A1 +:100C5000FC370110F0B5B3B0060002911500039304 +:100C600038AB80CB1A78354CD20013590693A418B0 +:100C7000626814681C19210006A8FFF793FF00287A +:100C80000CD1202D13D004AB2D4A04922D4A05928D +:100C9000320003CB03C2300033B0F0BD04AB284AAE +:100CA0000492284A0592320003CB03C2F3E707A857 +:100CB00006F07CF8069D641B032107A808F03EF8A7 +:100CC000002826D123002A0029A907A807F0ACFB99 +:100CD000002821D129A907A807F0EEFB00281ED182 +:100CE0000097039B2022029907A806F055F8041EDE +:100CF00018D107A806F05EF8FFF70AFF002C14D001 +:100D000004AB0F4A04920F4A0592320003CB03C290 +:100D1000C1E701246442ECE701246442E9E70124CD +:100D20006442E6E701246442E3E704AB064A049226 +:100D3000064A0592320003CB03C2ACE7503E0110D5 +:100D40005555AAAA690F690FAAAA555596F096F0AB +:100D5000F0B5CE46474680B59DB014009946249F15 +:100D6000259B984601A808F053F8002101A808F037 +:100D700055F8279B002B02D0289B002B06DC2289EC +:100D8000E3689B186689F618002513E01A00279976 +:100D900001A808F037FFF2E723003A00290048468F +:100DA00003F0E8FD002811D12200390001A808F065 +:100DB00029FF2D19B54204D2741B4445ECD9444691 +:100DC000EAE7269901A808F067FF00201DB0C0BC23 +:100DD000B946B046F0BD0000F0B5A5B007000E0062 +:100DE000202926D10024144B1B68A3421CDD09A82E +:100DF00008F00EF8002109A808F010F80F4BE500E4 +:100E0000E9585B195B681A6809A808F0FBFE01A99C +:100E100009A808F041FF3200390001A811F0E2FFF3 +:100E2000002803D00134DEE701246442200025B00D +:100E3000F0BD01246442F9E74C3E0110503E011020 +:100E4000F0B5DE4657464E464546E0B5C7B004000D +:100E50008A4691469B46509B98460EADD04E0E96C4 +:100E6000D04F0F97082229003EA812F014F80E96D2 +:100E70000F97230006CD06C3549B0493539B039303 +:100E80000295529B0193519B009343465A46494613 +:100E90005046FFF75DFF051E00D096E1559B002BE5 +:100EA00004D0202210A9180011F0F5FF00230093B0 +:100EB000BD4B4246594638A803F02EF8051E00D017 +:100EC00083E101277F427CE001277F4279E001270F +:100ED0007F4276E06B460333FF331B88202B00D024 +:100EE0008DE1419918AA404603F044FD051E00D04B +:100EF0006BE101210CA8FFF755FD0EAEA84B0E9338 +:100F0000A84B73602300320003CA03C3202318AA2E +:100F100010A906A8FFF740FB06AB220003CB03C2D3 +:100F20000C980D99FFF79EFD3300220003CA03C3FE +:100F300071680E9A9D4B4B409A4200D09FE09C4BAB +:100F40000E939C4B0F9308220EA942A811F0A3FF09 +:100F50000AAE3300220003CA03C3082242A91800C4 +:100F600011F099FF944B0893082231000EA811F05C +:100F700092FF0F990E9A8D4B4B409A4200D080E021 +:100F800008220CA90EA811F086FF0F990E9A874B24 +:100F90004B409A4277D10C9A0A9B9A4275D00D9A8F +:100FA0000B9B9A4274D00C9A0A9B9A4203D0089ADF +:100FB000824B9A4272D0089A804B9A4200D004E148 +:100FC000012540AB6A460332FF3241A938A803F03D +:100FD00017F8002800DAF7E000DD7BE040AB1B8863 +:100FE000102B00D176E7012B5AD0222BE9D1002F0C +:100FF00000DA69E7724B1B68BB4200DC67E76B46AF +:101000000333FF331B88802B00D9FEE0419918AAD7 +:10101000404603F0AFFC002800D0ECE001210CA812 +:10102000FFF7C0FC5E4B0E935E4B0F933EAE082263 +:101030000EA9300011F02FFFFFB201976B4603336A +:10104000FF331B88009318AB202210A906A8FFF7D6 +:1010500001FE06AB320003CB03C20C980D99FFF7DB +:1010600001FD082231000EA811F015FF0F990E9A0C +:101070004E4B4B409A422BD101277F42A1E7FFF70D +:1010800087FCFFF785FCFFF783FC4E4B089386E750 +:10109000089AC5231B011343089384E7FFF778FCE4 +:1010A0006B460333FF331B88202B00D0AAE0419905 +:1010B00018AA404603F05EFC002800D099E06B4679 +:1010C0000333FF33197818A8FFF786FE070078E787 +:1010D000FFF75EFC6E426E41F6B2002D00D18CE04F +:1010E0000EAD2F4B0E932F4B6B6023002A0003CACB +:1010F00003C32F4B0E932F4B6B600822290044A88B +:1011000011F0C9FE08223EA90AA811F0C4FE082267 +:1011100044A90CA811F0BFFE274B099308220AA985 +:10112000280011F0B8FE69680E9A204B4B409A4295 +:1011300020D108220CA90EA811F0ADFE0F990E9A2D +:101140001A4B4B409A4217D10C9A0A9B9A4215D0DF +:101150000D9A0B9B9A4214D00C9A0A9B9A4203D088 +:10116000099A164B9A4212D0099A144B9A4210D0FF +:1011700035002AE0FFF70CFCFFF70AFC114B09933E +:10118000E6E7099AC5231B0113430993E4E7FFF738 +:10119000FFFB3EAB220003CB03C2350015E0C04687 +:1011A0005555AAAA690F690FFFFF00003C5AC3A555 +:1011B000AAAA555596F096F0C3A500005A3C000027 +:1011C0004C3E01100A3000000500002D07D00EAB88 +:1011D0000E950F4A6A400F92220003CB03C2FFF71D +:1011E00097FC200047B0F0BCBB46B246A946A046DB +:1011F000F0BD0500E9E70500E7E73500E5E7012573 +:101200006D42E4E701256D42E1E701256D42DEE72D +:101210003C5AC3A500207047036A5B780B71036AD0 +:101220005B688B600860704710B502680A4B9A4291 +:101230000FD1C2680389D843824202D8D418012052 +:1012400000E00020002805D08B68A34202D80020CF +:1012500000E0002010BDC0463DB8F3960020704766 +:1012600010B582B004000800E022120101920129A9 +:1012700008D0022911D0032912D0072913D1A26E58 +:101280006C3401E0626A283401A903F009FD0028EA +:1012900001D1019B236002B010BD226D5434F3E7ED +:1012A000E26D6034F0E70120F5E7000070B505005D +:1012B000006A03F06FFC041E08D0A86D03F06AFCFE +:1012C00000280AD0844200D3200070BD064B074A94 +:1012D0009E210748490010F0DDFF064B034AA0217C +:1012E0000348490010F0D6FF08380110043B0110F4 +:1012F000183801105C380110F0B585B005000C00FD +:10130000019200230393002003F06AFCC0B203A9FA +:1013100003F0D8FA002806D00127039803F008FB51 +:10132000380005B0F0BD2C236343EB181A89DE6842 +:1013300096190398042302AA310003F01BFB071E31 +:1013400026D12C236343ED186C8902AB1A88134B0A +:101350009A420DD0002C1DD102AB1A88104B9A4234 +:101360001AD1331902AA52889B18019A1360D4E744 +:1013700002AB59888C4201D00327CEE78919039824 +:10138000042302AA03F0F6FA0028E5D00127C4E7F7 +:101390000127C2E70327C0E70327BEE7086900006B +:1013A0000769000070B505000026002E00DD70BD45 +:1013B000A86D03F0BDFA002408E00122121B2C23C3 +:1013C0005343EB18186A03F0B3FA0134012CF4D933 +:1013D0000136EAE7F0B583B004000F000023019363 +:1013E000002003F0FDFBC0B201A903F06BFA061E5A +:1013F0001AD1019803F02EFC0500019803F098FA29 +:101400002C237B43E4180023032B05D8E25C954290 +:1014100008D10133DBB2F7E70123002B07D03000FE +:1014200003B0F0BD0023F8E701267642F7E7012676 +:101430007642F4E70FB400B583B004AA02CA019261 +:10144000044B1B68D86811F0BDF803B008BC04B0A9 +:101450001847C04614030008F8B506000D00170031 +:101460000024012C11DC2C226243B2183B00210025 +:10147000300001F03DFC002801D10134F1E7002CDF +:1014800004DD002D02D1002000E00020F8BD0000A6 +:10149000F0B5CE46474680B58DB0040091469846DB +:1014A0000AAD1F4F0A971F4E6E6003002A0003CA41 +:1014B00003C3012108A8FFF775FA0A976E6023009D +:1014C0002A0003CA03C306AE0023059304930393C3 +:1014D0000133FF330293144B0193434600934B4671 +:1014E000002200213000FFF7ABFC230006CE06C32C +:1014F00008980999FFF7B6FA2B00220003CA03C324 +:1015000069680A9A094B4B409A4207D1FFF700FBE2 +:1015100020000DB0C0BCB946B046F0BDFFF738FAA8 +:101520005555AAAA690F690FC05B01083C5AC3A5AB +:10153000F0B5D6464F464646C0B594B004000F00FD +:101540001500039300230F930DAA9B4B0D939B4B08 +:101550000E93030003CA03C32900002003F040FBDD +:10156000C0B20FA903F0AEF9002800D0B6E02C20DD +:1015700068438046B84429003800FFF72BFF002855 +:1015800000D1AEE043461B69DB0600D5A9E00DABF8 +:10159000012294460D928A4A91460E9220001A002A +:1015A00042CA42C062460D924A460E9210AA944622 +:1015B000180042C842C209AA91461000260006CE71 +:1015C00006C0614644C944C07E49079119004A4695 +:1015D00041CA41C10E990D9A7B4B4B409A4200D0B3 +:1015E00096E00DAB0BAA190041CA41C10E990D9AA4 +:1015F000754B4B409A4200D08CE00B9A099B9A4263 +:1016000000D189E00C9A0A9B9A4200D187E00B9A9C +:10161000099B9A4204D0079A6C4B9A4200D184E00D +:10162000079A6A4B9A4200D181E00F9E31004046F2 +:10163000FFF7FAFD002842D00DAB654A0D92654ACE +:101640000E9212AA9446180082C882C209AA904635 +:101650001000270006CF06C0614684C984C05949DE +:1016600008911900424681CA81C10E990D9A564BC4 +:101670004B409A4200D088E00DAB0BAA190081CAFA +:1016800081C10E990D9A504B4B409A4200D07EE09A +:101690000B9A099B9A4200D17BE00C9A0A9B9A42D2 +:1016A00000D179E00B9A099B9A4204D0089A474BE3 +:1016B0009A4200D176E0089A444B9A4217D0002D06 +:1016C00000D071E0002D00D074E043494348FFF79B +:1016D000B1FE434B220003CB03C208E0FFF718FA28 +:1016E0000AE0002D0FD13E4B220003CB03C20F981E +:1016F00003F01EF9FFF70CFA200014B0E0BCBA4664 +:10170000B146A846F0BD0F99380001F0FDFFEAE7A9 +:10171000FFF73EF9FFF73CF9324B079372E7079A60 +:10172000C5231B011343079371E7FFF731F901212B +:101730000BA8FFF737F90DAB99461F4B0D931F4BC5 +:101740004A465360230003CA03C304AB9A460F9B67 +:10175000039A0092424639005046FFF799FE230053 +:10176000524603CA03C30B980C99FFF77BF94B460B +:10177000220003CA03C34B4659680D9A124B4B40D3 +:101780009A4200D151E7FFF703F9FFF701F9FFF79C +:10179000FFF8144B089380E7089AC5231B011343F5 +:1017A00008937FE7FFF7F4F8B2680021300003F0F8 +:1017B00097F987E70C4989E75555AAAA690F690F78 +:1017C0003D5AC3A5C3A500003C5AC3A55A3C00001E +:1017D000AAAA555596F096F0683801107C38011089 +:1017E000AC3A01100A30000070380110F0B591B029 +:1017F00001900F006A4B0A936A4B0B9308220AA9C7 +:101800000CA811F048FB0020FEF7BAFF04000228E4 +:1018100006D0042804D0032802D0200011B0F0BD67 +:10182000012108A8FFF7BEF85D4B0A935D4B0B93AF +:101830000CAD08220AA9280011F02DFB02AE3B00D6 +:10184000012201993000FFF773FE2B0003CE03C382 +:1018500008980999FFF706F9082229000AA811F04B +:101860001AFB0B990A9A504B4B409A4276D14F4B38 +:101870000A934F4B0B9308220AA90EA811F00BFBF9 +:1018800008220CA906A811F006FB08220EA908A838 +:1018900011F001FB474B0493082206A90AA811F096 +:1018A000FAFA0B990A9A404B4B409A4258D10822B7 +:1018B00008A90AA811F0EFFA0B990A9A3A4B4B4083 +:1018C0009A424FD1089A069B9A424DD0099A079B9B +:1018D0009A424CD0089A069B9A4203D0049A364BFF +:1018E0009A424AD0049A344B9A4200D195E7082292 +:1018F0000CA906A811F0CFFA08AA304B11CB11C2DF +:101900002C4B0593082206A90AA811F0C4FA0B99DA +:101910000A9A254B4B409A4231D1082208A90AA8BD +:1019200011F0B9FA0B990A9A1F4B4B409A4228D1F1 +:10193000089A069B9A4226D0099A079B9A4225D07C +:10194000089A069B9A4203D0059A1B4B9A4223D0D1 +:10195000059A194B9A4221D005245EE7FFF718F843 +:10196000FFF716F8FFF714F8154B0493AEE7049A47 +:10197000C5231B0113430493ACE7FFF709F8FFF7F6 +:1019800007F8FFF705F80E4B0593D5E7059AC52331 +:101990001B0113430593D3E7FEF7FAFF01243CE74D +:1019A0005555AAAA690F690F3C5AC3A5AAAA55554D +:1019B00096F096F0C3A500005A3C0000AC3A011026 +:1019C0000A30000070B504000121FFF749FC00282F +:1019D00002D00125280070BD02212000FFF740FC45 +:1019E000002814D107212000FFF73AFC002801D07D +:1019F0000125EFE703212000FFF732FC051E01D08F +:101A00000125E7E72000FFF751FC6067E2E70925C1 +:101A1000E0E7002383718360C36001334371036097 +:101A20000371C37170474379012B01D000207047C7 +:101A30000368012B01D00020F9E70379012B01D0C5 +:101A40000020F4E70120F2E770B582B005000C0039 +:101A50000023009301930800FFF7E5FF002836D02C +:101A60002A68254B9A4218D001267642EA6A224B10 +:101A70009A421FD0019B009A934200D90093009B89 +:101A8000A360009A2100280001F0DAFA1B4B1968C4 +:101A900000292CDC300002B070BD6A46002128000D +:101AA000FFF72AFC061EE1D0154B164A16481749C7 +:101AB00010F0F0FB01AA01212800FFF71DFC061E13 +:101AC000D8D00F4B0F4A1048114910F0E3FB21000A +:101AD0000831002001F002FE061E02D1A368009327 +:101AE000CFE7074B074A08480A4910F0D3FB0A48DA +:101AF000FFF7A0FCCEE7C0463DB8F396C05C0108F6 +:101B0000A8380110D83A0110183801103405000027 +:101B10004C0500006D050000B038011070B50400E0 +:101B20000D00FFF791FF002812D1EB797022A3542A +:101B3000033BDBB2012B11D9EB79022B17D0042B1D +:101B400015D0032B13D07023E35CFF2B18D070BD8E +:101B5000104B114A1148124910F09CFB002000F074 +:101B60006FFE0028E8D07023FF22E254E4E7002053 +:101B700000F03EFE0028E6D07023FF22E254E2E7A8 +:101B80000848FFF757FC084B034A0448074910F080 +:101B900081FBC046A8380110E83A0110183801103E +:101BA000B2060000E4380110F4380110CA06000043 +:101BB000F0B5C64600B594B004000E002E4B0A9353 +:101BC0002E4B0B9308220AA90CA811F064F92000EF +:101BD000FFF7F8FE051E09D0E02129480901FFF7AB +:101BE00029FC70230122E254012D0ED00022002195 +:101BF0002000FFF731FC00280BD1200001F0E4F8B1 +:101C000000280ED170230122E25414B080BCB846E3 +:101C1000F0BD1C480021FFF70DFC70230122E254A7 +:101C2000F3E73000FFF7F5FE00230293002500E004 +:101C30000135012D2AD802AA29002000FFF75CFBFC +:101C40000028F5D12C236B43E3181F6A002FEFD037 +:101C50002C236B43E3189A6A013A636F5343029A49 +:101C60009A42E5D908482900FFF7E4FBBA68002149 +:101C7000380002F035FFDBE75555AAAA690F690F56 +:101C8000F83801104039011070390110310020007E +:101C900001F0EAFD002800D077E13000FFF7C3FE35 +:101CA00001235840C1B232002000FFF7D5FB0028C5 +:101CB00000D072E13000FFF7B6FE002800D17BE1D2 +:101CC000F379012B00D195E1012108A8FEF76AFE06 +:101CD000E14B0A93E14B0B930CAD08220AA92800B3 +:101CE00011F0D9F86F463300012221003800FFF7C8 +:101CF0001FFC2B0006CF06C308980999FEF7B2FE19 +:101D0000082229000AA811F0C6F80B990A9AD44BA8 +:101D10004B409A4200D074E1D24B0A93D24B0B93C2 +:101D200008220AA90EA811F0B6F808220CA906A8E4 +:101D300011F0B1F808220EA908A811F0ACF8CB4BAD +:101D40000393082206A90AA811F0A5F80B990A9A8C +:101D5000C34B4B409A4200D055E1082208A90AA87B +:101D600011F099F80B990A9ABD4B4B409A4200D05A +:101D70004BE1089A069B9A4200D148E1099A079BD9 +:101D80009A4200D146E1089A069B9A4204D0039AEF +:101D9000B74B9A4200D143E1039AB54B9A4200D126 +:101DA00040E170230522E2547023E35C012B00D054 +:101DB0002BE700212000FFF70DFB8046012108A83A +:101DC000FEF7F0FDA44B0A93A44B0B930CAD082235 +:101DD0000AA9280011F05FF86F46330000222100A5 +:101DE0003800FFF7A5FB2B0006CF06C3089809991A +:101DF000FEF738FE082229000AA811F04CF80B99CA +:101E00000A9A974B4B409A4200D00FE14346002B71 +:101E100044D0944B0A93944B0B9308220AA910A820 +:101E200011F039F808220CA906A811F034F808229C +:101E300010A908A811F02FF88C4B0493082206A9CA +:101E40000AA811F028F80B990A9A854B4B409A4240 +:101E500000D0EDE0082208A90AA811F01CF80B999F +:101E60000A9A7F4B4B409A4200D0E3E0089A069BC7 +:101E70009A4200D1E0E0099A079B9A4200D1DEE045 +:101E8000089A069B9A4204D0049A794B9A4200D150 +:101E9000DBE0049A764B9A4200D1B6E6E36A9846B4 +:101EA000012108A8FEF77EFD6B4B0A936B4B0B9349 +:101EB0000CAD08220AA9280010F0EDFF6F46330090 +:101EC000012221003800FFF733FB2B0006CF06C3A9 +:101ED00008980999FEF7C6FD082229000AA810F003 +:101EE000DAFF0B990A9A5E4B4B409A4200D0AEE063 +:101EF000604B984500D088E65A4B0A935A4B0B9397 +:101F000008220AA912A810F0C6FF08220CA906A8E8 +:101F100010F0C1FF082212A908A810F0BCFF534B13 +:101F20000593082206A90AA810F0B5FF0B990A9A92 +:101F30004B4B4B409A4200D08BE0082208A90AA8DC +:101F400010F0A9FF0B990A9A454B4B409A4200D0DA +:101F5000A0E0089A069B9A4200D19DE0099A079B4F +:101F60009A4200D19BE0089A069B9A4204D0059AB7 +:101F70003F4B9A4200D198E0059A3D4B9A4200D0DF +:101F800043E670230422E2543FE63B480021FFF77A +:101F900051FA70230122E25437E600212000FFF7B6 +:101FA00019FA002800D185E634480021FFF742FAEB +:101FB00070230122E25428E631002000FFF7AEFD35 +:101FC00000280AD1320000212000FFF745FA00283E +:101FD0000AD170230122E25417E6294B294AF42141 +:101FE0002948C90010F056F9254B264A26482749AA +:101FF00010F050F931002000FFF7F8FB7023E05497 +:10200000D2E6FEF7C5FCFEF7C3FCFEF7C1FC204B91 +:102010000393B3E6039AC5231B0113430393B2E66C +:10202000FEF7B6FCF2797023E254BDE6FEF7B0FC91 +:10203000FEF7AEFCFEF7ACFC154B04931BE7049ACD +:10204000C5231B01134304931AE7FEF7A1FCFEF717 +:102050009FFCFEF79DFCC0465555AAAA690F690F63 +:102060003C5AC3A5AAAA555596F096F0C3A5000000 +:102070005A3C00003DB8F396DC390110403901109C +:10208000A8380110143B011018380110A6070000F1 +:102090000A300000FEF77CFC054B05935EE7059ACD +:1020A000C5231B01134305935DE7FEF771FCC04692 +:1020B0000A30000010B502F013FD10BDF8B5DE4681 +:1020C00057464E464546E0B58946924698460A9B95 +:1020D0009B460B9E002512E0134A4346E918230055 +:1020E000484602F047FC002819D10F4A5B46E91820 +:1020F0002300504602F09AFC002812D12D19B54257 +:1021000006D2741B80239B009C42E5D91C00E3E7A8 +:102110000020F0BCBB46B246A946A046F8BD01204F +:10212000F7E70120F5E7C046C0070008F0B5C6464E +:1021300000B584B007000023039302933948FFF7EA +:1021400079F93948FFF776F903A9012002F0BAFBC3 +:10215000002819D102A9022002F0B4FB002819D1ED +:10216000BB6A98460025002444451FD27B6AE200E2 +:102170009B185E68039832002900FFF79BFF002838 +:102180000ED1AD190134EFE7284B294A29482A49D5 +:1021900010F080F8254B264A2648284910F07AF896 +:1021A000224B234A2348264910F074F82548290079 +:1021B000FFF740F9039A0299019500230093380034 +:1021C000FFF77CFF041E04D0200004B080BCB8469A +:1021D000F0BD3B6D5A6802980021FFF76BFF0028A5 +:1021E00014D17B6D013B3A6DDB00D318196812687E +:1021F000891A5A680298FFF75DFF041E0CD10398F4 +:1022000002F096FB029802F093FBDDE7074B084AC9 +:1022100008480D4910F03EF8044B054A05480B49A3 +:1022200010F038F80C3A0110443A0110A8380110A7 +:10223000B43A0110183801109B0400009F040000FC +:10224000A6040000683A0110FA040000020500002C +:10225000F0B5CE46474680B58FB004000F006D4BF9 +:10226000994608936C4E09960AAD082208A92800E1 +:1022700010F011FE00212000FFF7ACF8804601218C +:1022800006A8FEF78FFB4B4608930996082208A97B +:10229000280010F000FE6E463B00002221003000B6 +:1022A000FFF746F92B0006CE06C306980799FEF7FE +:1022B000D9FB0822290008A810F0EDFD0999089A19 +:1022C000564B4B409A4200D072E04346002B3ED022 +:1022D000534B0893534B0993082208A90CA810F0FC +:1022E000DAFD08220AA904A810F0D5FD08220CA9DD +:1022F00006A810F0D0FD4C4B0393082204A908A8AF +:1023000010F0C9FD0999089A444B4B409A4251D1AB +:10231000082206A908A810F0BEFD0999089A3F4BAB +:102320004B409A4248D1069A049B9A4246D0079A5B +:10233000059B9A4245D0069A049B9A4203D0039A81 +:102340003A4B9A4243D0039A384B9A424DD00023DD +:10235000089308A9012002F0B5FA002839D108999C +:102360003A00200001F026FA002838D1089802F03F +:10237000DFFA39002000FFF7D9FE00283AD1702398 +:10238000E55CEB1EDBB2012B3AD9022D03D0042D04 +:1023900001D0032D07D1002000F02AFA002802D036 +:1023A0007023FF22E2540FB0C0BCB946B046F0BD66 +:1023B000FEF7EEFAFEF7ECFAFEF7EAFA1C4B03938F +:1023C000B5E7039AC5231B0113430393B3E7FEF755 +:1023D000DFFA184B184A194819490FF05BFF154BE3 +:1023E000154A164817490FF055FF39002000FFF72E +:1023F0002BFBC2E70F4B104A104813490FF04AFF5E +:10240000002000F01DFA0028BFD07023FF22E25404 +:10241000FF25BCE75555AAAA690F690F3C5AC3A509 +:10242000AAAA555596F096F0C3A500005A3C0000A4 +:102430000A300000A8380110C43A01101838011001 +:1024400061060000640600006F060000F0B5D64685 +:102450004F464646C0B590B005000C00170010224C +:1024600000210AA810F0CCFC08ABA34A0892A34AAA +:1024700009922A0003CB03C2002398460126764224 +:102480004346002B02DD002398463FE09C4B6362ED +:102490009C4B23659C4BE3659C4BA3660026012E59 +:1024A00014D83100002002F09BFB2C217143203115 +:1024B0006118C0B202F006FA002801D10136EEE739 +:1024C000934B944A944895490FF0E4FE210058310B +:1024D000032002F0F7F9061E07D10AA92000FFF732 +:1024E00067FB01239C46E044CAE7894B894A8A4836 +:1024F0008B490FF0CFFE022B1CD2012B27D170236A +:10250000E35CFF2B27D001239C46E0444346002B8D +:102510002ADC7023E35C0AAAD371042BEBD9052BC8 +:1025200015D1002000F08CF9061EE8D07023FF22A0 +:10253000E254E4E70AA92000FFF78AFE061EDED077 +:10254000734B744A8A21744809010FF0A3FE70236B +:10255000FF22E254D3E77348FEF76CFF724B6D4ADB +:102560006D4872490FF096FE00239A465346002BA1 +:102570002DDD236A5B783B71236A5B68BB603C603E +:10258000102200210AA810F03BFC39002000FEF7C1 +:1025900043FE08AB664A0892664A09922A0003CBBA +:1025A00003C22000FEF7FEFE002E07D008AB0896FF +:1025B000614A724009922A0003CB03C2FEF7A8FACF +:1025C000280010B0E0BCBA46B146A846F0BD702362 +:1025D000E35C012B06D00AAA00212000FEF73CFF95 +:1025E000061EDED1012106A8FEF7DCF908AB9846ED +:1025F000414B0893414B424653602B0003CA03C32F +:10260000E9461300002221004846FEF791FF2B0007 +:102610004A4603CA03C306980799FEF723FA4346BE +:102620002A0003CA03C343465968089A424B4B40E9 +:102630009A4250D13E4B08933E4B0993082208A979 +:102640000EA810F028FC04AB98462A0003CA03C366 +:1026500008220EA9180010F01EFC384B0393082224 +:10266000414608A810F017FC0999089A324B4B40D4 +:102670009A4232D1082206A908A810F00CFC099948 +:10268000089A2D4B4B409A4229D1069A049B9A42B4 +:1026900027D0079A059B9A4226D0069A049B9A4215 +:1026A00003D0039A264B9A4224D0039A244B9A4291 +:1026B00000D076E72000FEF7D1FD061E00D070E7BF +:1026C00000212000FEF7A6FD061E00D069E70123C9 +:1026D0009C46E2444AE7FEF75BF9FEF759F9FEF73C +:1026E00057F9184B0393D4E7039AC5231B011343EF +:1026F0000393D2E7FEF74CF95555AAAA690F690F63 +:10270000C0090008C0E90008C0790008C0590108E4 +:10271000A8380110343B011018380110530800008C +:1027200058080000E4380110F4380110B90800001E +:10273000AAAA555596F096F03C5AC3A5C3A5000029 +:102740005A3C00000A30000010B5002804D078225E +:10275000002110F055FB10BD02487822002110F036 +:102760004FFBF8E748070008F0B5C64600B586B04D +:102770000400884604AD1A4F04971A4E6E60030099 +:102780002A0003CA03C30020FFF7DEFF012102A8CD +:10279000FEF708F904976E6023002A0003CA03C3FA +:1027A0006E46114942463000FFF750FE230006CE28 +:1027B00006C302980399FEF755F92B00220003CABD +:1027C00003C36968049A094B4B409A4206D1FEF74D +:1027D0009FF9200006B080BCB846F0BDFEF7D8F8DF +:1027E0005555AAAA690F690F480700083C5AC3A5A6 +:1027F00010B582B00023019300280CD0012805D128 +:1028000001304000FF2807D9FF2005E000280DD146 +:1028100002304000F6E70120C0B201A902F052F8F0 +:10282000002805D00124200002B010BDFF20F3E7EE +:102830000198FDF7ECFE0400019802F079F8F2E748 +:1028400010B584B00400002303930522002101A8E1 +:1028500010F0D6FA002C0CD0012C05D10134600008 +:10286000FF2807D9FF2005E0002C0DD102346000BD +:10287000F6E70120C0B203A902F024F8002805D031 +:102880000124200004B010BDFF20F3E7039801A944 +:1028900000F0B2FD041E0CD101ABDB78032B03D09A +:1028A000039802F045F8ECE70398FDF730FF0400C9 +:1028B000F6E70124F4E770B50500836D9E680020FB +:1028C00001E001391800002906DB6B6ACC001B19F6 +:1028D0005B68C3189E42F4D20131116070BD0000E4 +:1028E0000FB400B583B004AA02CA0192044B1B685E +:1028F000D8680FF067FE03B008BC04B01847C046A4 +:1029000014030008F0B5CE46474680B589B00400F0 +:10291000884617001E00002307930693059305229F +:10292000002103A810F06CFA796AE4000B590868DA +:102930001B1A99467A6F80239B009A4200D91A008D +:10294000BC6A013CE300CB185B689A423DD8434621 +:102950004B44E4000959091A8B4239D943469C1A61 +:102960003368012B36D00023B37107A9012001F091 +:10297000A9FF002834D106A9022001F0A3FF0028F6 +:1029800034D105A9032001F09DFF002834D133790B +:10299000012B37D03379022B00D196E03379032B0A +:1029A00000D1CFE0079801F0C3FF069801F0C0FF07 +:1029B000059801F0BDFF09B0C0BCB946B046F0BDF6 +:1029C000013CE5004D196D685B199A42F8D8BEE7E5 +:1029D0004446C5E7444501D00123C5E70023C3E7CA +:1029E000AC4BAD4AAD48AE490FF054FCA94BAA4AD6 +:1029F000AA48AC490FF04EFCA64BA74AA748AA49E3 +:102A00000FF048FC059882680021FFF753FB00286F +:102A10001AD13368012B1DD0059A06990194002321 +:102A200000934B463800FFF749FB002847D131009F +:102A3000380000F0AFFC022333710028AAD09B4A73 +:102A4000136801331360A5E7924B934A9348984962 +:102A50000FF020FC05993200380000F0ABFE002892 +:102A60001BD1B379002BD7D10799380000F04CFE69 +:102A7000002818D107993200380000F09BFE00288A +:102A800017D10599380000F03FFE0028C4D0814BD3 +:102A9000814A824887490FF0FDFB7E4B7E4A7F4882 +:102AA00085490FF0F7FB7B4B7B4A7C4883490FF04D +:102AB000F1FB784B784A794881490FF0EBFB754B75 +:102AC000754A76487F490FF0E5FB0698424649462D +:102AD000FFF7F0FA00281DD1069A079901944B469A +:102AE00000933800FFF7EAFA002819D13368012B68 +:102AF00002D1B379002B19D03100380000F04AFC24 +:102B000003233371002800D148E7684A1368013372 +:102B1000136043E75F4B604A60486B490FF0BAFBB4 +:102B20005C4B5D4A5D4869490FF0B4FB069938007B +:102B300000F0EAFD0028DFD0564B574A5748644959 +:102B40000FF0A8FB079842464946FFF7B3FA002862 +:102B500069D1079A059901944B46009300233800E8 +:102B6000FFF7ACFA002865D1B379002B32D0059875 +:102B700000F0D3FB0300786F079A0599400001909D +:102B80004C4400943800FFF799FA002803D0474AD4 +:102B9000136801331360059803A900F02DFC002889 +:102BA0004ED103ABDB78012B50D003AB5978012910 +:102BB00005D007980022FDF7B5FD002851D1B16876 +:102BC0000798FDF72EFD002851D1079800F0D0FBA3 +:102BD000002852D1B4790023B3713100380000F0DD +:102BE000D9FB33680133336001233371002803D0EC +:102BF0002E4A136801331360002C00D1D2E60599E8 +:102C0000380000F081FD00283DD10699380000F021 +:102C10007BFD002800D1C5E61E4B1F4AC4211F487A +:102C200089000FF037FB1B4B1B4AB3211B4889005F +:102C30000FF030FB174B184A184826490FF02AFBB3 +:102C4000144B154A154824490FF024FB0798FDF74B +:102C50005EFD0028A9D00F4B0F4A10481F490FF006 +:102C600019FB0C4B0C4A0D481D490FF013FB094B87 +:102C7000094A0A481B490FF00DFB064B064A074854 +:102C800019490FF007FB034B034A044817490FF09B +:102C900001FBC046A83801103C3D01104C3B01101F +:102CA0007F0200008302000086020000C05C010871 +:102CB0008B020000A7020000930200009B020000AC +:102CC0009E020000AE020000B7020000BB0200003E +:102CD000C2020000D3020000DF020000E302000095 +:102CE000E9020000ED020000F70200000D03000001 +:102CF000F0B583B00D0017001E0000230193002ED5 +:102D000004D03379022B11D0032B13D0002001F013 +:102D100067FFC0B201A901F0D5FD041E1FD0012438 +:102D2000019801F005FE200003B0F0BD0129EDD1AE +:102D30000221EBE700290CD1836D9B683268534375 +:102D4000C168826B914206D8521A9A4205D3022179 +:102D5000DCE70221DAE70221D8E70121D6E7019872 +:102D600020233A00002101F005FE002826DB002E7A +:102D7000D6D03A68134B9A42D2D03379012BCFD0B8 +:102D8000019801F0D5FD2900002001F029FFC0B213 +:102D900001A901F097FD041E01D00124C0E70198AC +:102DA00020233A00002101F0E5FD002808DB3A6805 +:102DB000044B9A42B4D001246442B1E70124AFE746 +:102DC0000124ADE73DB8F396F0B5DE4657464E46D2 +:102DD0004546E0B583B0836A0193436D9C46002B62 +:102DE00011D0E0231B01019A9A4212D89C4510D8B9 +:102DF000836D9B689A460025002400210023984695 +:102E00009946002220E032480021FFF769FD0020AA +:102E100003E03048FFF764FD002003B0F0BCBB4680 +:102E2000B246A946A046F0BD466ACF00BB465E4406 +:102E300076689B19066DE700BB465E44766892197A +:102E400001310134934227D0019EB14201D3644540 +:102E500031D29342E8D00FD2466ACF00BB465E44DF +:102E600076689B19022D02D001310125EAE71A4844 +:102E7000FFF736FD0020D0E7066DE700BB465E4455 +:102E800076689219012D02D001340225DAE7124842 +:102E9000FFF726FD0020C0E799449044534505D82C +:102EA000524503D8002500220023CDE70B48FFF749 +:102EB00017FD0020B1E7B14203D1644501D1C145FE +:102EC00004D00748FFF70CFD0020A6E70120A4E787 +:102ED000983B0110C03B0110F43B0110303C011045 +:102EE0006C3C011070B586B00522002104A80FF0DB +:102EF00087FF0522002102A80FF082FF02A901200E +:102F0000FDF7E3FB002829D104A90320FDF7DDFB31 +:102F1000051E2AD102AB1B78012B2FD0032B2BD0FF +:102F2000374A02A94B788C78CE78364936480196D4 +:102F30000094FFF7D5FC04AB1B78012B22D0032BA8 +:102F40001ED02F4A04A94B788C78CE782F492E4872 +:102F500001960094FFF7C4FC00241FE02C4B2D4A7F +:102F6000E3212D4849000FF095F9294B294AE52125 +:102F7000294849000FF08EF9284AD2E7284AD0E7BD +:102F8000264ADFE7264ADDE7264900E026492748AA +:102F9000FFF7A6FC30E02649F9E70134032C28D8D6 +:102FA000244BA200D05C02AB1978FDF75BFB002834 +:102FB000F3D0204BA2009B18587804AB1978FDF78A +:102FC00051FB0028E9D01B4BA2009B189B78042BD7 +:102FD00003D002AA92789342DFD1164BA4001B19AA +:102FE000DD78002DD2D0012DD5D0022DCCD01249C4 +:102FF000CDE71248FFF774FC280006B070BDC0464C +:1030000028360110C03C0110DC360110D03C011004 +:10301000A8380110503D01104C3B0110343601100E +:103020002C360110B03C0110A83C0110D83C011016 +:10303000A03C0110643D01104C360110F03C011021 +:10304000F0B5C64600B582B0060088461500204897 +:10305000FFF746FC002400230020002101E001319D +:103060000130AB4201D3A34204D2726ACF00D2191D +:1030700052689B18AC4201D3A34204D9326DC700F9 +:10308000D2195268A418AB42E9D3AC42E7D3A342A9 +:10309000E5D1022342465371002402E0019901392F +:1030A000013400290FDB01AA3000FFF704FC010006 +:1030B00043461B68013BA342F0D8019843463200C7 +:1030C000FFF720FCEAE702B080BCB846F0BDC0467E +:1030D0000C3D01100FB400B583B004AA02CA0192DE +:1030E000044B1B68D8680FF06DFA03B008BC04B03D +:1030F0001847C04614030008F0B5DE4657464E4652 +:103100004546E0B585B0060092460023039302AA27 +:10311000D37003A9072001F0D5FB0190002800D04F +:1031200078E03378032B15D0E0231B0198460398F1 +:1031300001F090FD04008146300000F0EEF8070039 +:1031400000940024002501235B429B463300464641 +:10315000984613E0023B9846E9E7039801F0E8FB44 +:1031600001235B42019340E0002D06D05B46013312 +:1031700003D1A34601E0009301250134A64215D9ED +:1031800043461878E119012302AA033200F066FDD4 +:103190000028E2DB02AB03331B784B45E4D0002D63 +:1031A000E9D05A46002A28DC0093E6E70025002DE6 +:1031B00025D15B46013315D051460831002000F07F +:1031C0008DFA00281FDB009B0133DBB2032B02D9F1 +:1031D00001239C46E344022251464A715246594615 +:1031E00011601371039801F0A3FB019805B0F0BCC6 +:1031F000BB46B246A946A046F0BD0093D7E70748B4 +:10320000FFF768FFD5E7039801F092FB01235B42CB +:103210000193EAE701235B420193E6E7743D011065 +:103220000368013B594308007047012800D17047EB +:103230000220FCE70FB400B583B004AA02CA0192D1 +:10324000044B1B68D8680FF0BDF903B008BC04B08C +:103250001847C0461403000810B5054910220FF0A6 +:10326000C1FD002801D0022010BD0120FCE7C046AE +:103270009037011070B584B004000E0010220021B8 +:1032800068460FF0BDFD002C2CD10CD0012C05D1CF +:1032900001346400FF2C07D9FF2405E0002C0DD178 +:1032A00002346400F6E70124E4B23100200001F0AA +:1032B00009FB051E04D0280004B070BDFF24F3E70D +:1032C00010236A460949200000F0C8FC051E05D1FC +:1032D0000749102268460FF085FD0500306801F0AF +:1032E00027FBE8E701256D42E5E7C04684110000B1 +:1032F00090370110004870478311000010B5FFF7A8 +:10330000F9FF013810BD10B5FFF7F8FF013810BD07 +:1033100010B5FFF7F8FF043810BD0020704700001B +:10332000F8B504000D0017001E00FFF7E7FFA842E4 +:1033300002D12378012B08D0207833003A002900ED +:1033400000F020FC00280DD1F8BD012EF4D12000A2 +:1033500000F0E8FC0028EFD00448FFF76BFF0120E5 +:103360004042F1E701204042EEE7C0469C3D01109B +:1033700010B50078054A1023054900F003FC002829 +:1033800000D110BD01204042FBE7C046903701103C +:103390008411000030B583B00C00002301930B684A +:1033A000002B27D08B79002B0CD0032001A901F032 +:1033B00089FA002808D00124019801F0B9FA200008 +:1033C00003B030BD0120F1E70198FFF7A6FF05002B +:1033D00001212000FFF724FF291823796A460332D0 +:1033E0001370019B1878012300F0CCFB041EE3D07E +:1033F0000124E1E70124E2E7F0B5DE4657464E46F8 +:103400004546E0B589B004000D001022002104A853 +:103410000FF0F6FC002302AAD371029302A9072041 +:1034200001F050FA002800D03AE12078102304AAD5 +:10343000A94900F013FC002800DA34E10023002B36 +:1034400012D000239B469A460298102204A9FDF749 +:103450002DF900286ED003232B705B46002B3CD146 +:103460000027002399466CE02178002B0CD0012B1B +:1034700005D15A1C5200FF2A07D9FF2205E0002B74 +:1034800011D19A1C5200F6E70122D2B291421AD011 +:10349000002B10D0012B08D15A1C52000132FF2AF8 +:1034A0000AD9FF2208E0FF22EFE7002B09D15A1CBE +:1034B00052000332F3E70222D2B2914208D0013324 +:1034C000BDE7FF22F8E700239B4601339A46BBE79E +:1034D00001239B4600239A46B6E7A3681022524276 +:1034E00091469944102304AA4946200001F042FA6B +:1034F000061E00D0DAE0102204A92000FDF7D6F85D +:10350000002803D003232B7000271AE004A8FFF73C +:10351000A3FEC0B22870012804D0002E00DAC8E053 +:1035200001270EE02078102304AA6B4900F02AFB43 +:103530000600F2E704A8FFF78FFE2870002700239B +:1035400099462000FFF7DFFE01002078012302AA40 +:10355000073200F083FB002800DAADE00298012278 +:1035600002ABD91DFDF7A2F8002802D16B78042B1D +:1035700058D901236B7000232B712000FFF7BEFE8A +:1035800001002078AE1C0123320000F067FB002808 +:1035900000DA94E0029801223100FDF787F8002854 +:1035A00049D00323AB702000FFF7A4FE0100019077 +:1035B0002078EB1C98460123424600F04FFB061E84 +:1035C00000DA7FE0029801224146FDF76FF80028FB +:1035D00049D00323EB70AB78013B5A425341DBB235 +:1035E0002278032A05D05A46002A04D15246002ADE +:1035F0004CD0002B3BD0A3681822524291469944EC +:10360000012342464946200001F0B4F9061E5CD170 +:10361000012241462000FDF749F8002810D003237D +:10362000EB7024E002AB07331B780F221A406A705C +:103630001B092B71A1E7A878FFF7F7FDA870B2E787 +:10364000E878FFF7F2FDC0B2E870022803D1002E3F +:103650003EDB00270BE0207801234246019900F071 +:1036600091FA0600F3E7E878FFF7DFFDE870002F36 +:1036700004D02378032B01D0002E0AD0300009B0EB +:10368000F0BCBB46B246A946A046F0BD0126764234 +:10369000EDE710224946200001F022FA0600EDE78E +:1036A00001267642EAE701267642E7E701267642DE +:1036B000E4E701267642E1E701267642DEE70126CD +:1036C0007642DBE701267642D8E701267642D5E747 +:1036D00001267642D2E7C0468411000030B583B09F +:1036E0000C0001A9FFF7C6FD002801D003B030BDD2 +:1036F000019D2800FFF70CFE01002878042322001A +:1037000000F0ACFAF2E7000030B583B00C000978A5 +:103710002748FFF78FFD0023019301A9072001F03F +:10372000D1F8002831D12378032B11D0002101F0EA +:1037300057FA00282CDBC5B20121002001F050FA15 +:10374000002828DBC0B22378AB4201D0834225D1C8 +:10375000207800F0FBF9011E23DB902201989201F2 +:1037600001F0BEF9051E1FD12378032B05D1019866 +:1037700001F0DEF8280003B030BDA16840394022D6 +:10378000200001F0ADF90500F1E701256D42F1E7F8 +:1037900001256D42EEE701256D42EBE701256D4203 +:1037A000E8E701256D42E5E701256D42E2E7C04605 +:1037B000B83D011030B583B00C0015000522002182 +:1037C00068460FF01DFB69460220FCF77EFF0028CB +:1037D00013D1E979012916D16B46DB78012B1ED074 +:1037E000A9682000FCF71DFF002824D12000FFF766 +:1037F000BFFD002826D103B030BD154B154A164831 +:1038000016490EF047FD00222000FCF78BFF002830 +:10381000E2D00F4B0F4A104811490EF03BFD20003B +:10382000FCF775FF0028DBD0094B0A4A9F210A48A4 +:1038300089000EF02FFD064B064AA021064889009C +:103840000EF028FD024B034A034806490EF022FD04 +:10385000DC3D0110343E0110E43D01107302000014 +:10386000770200008B020000F0B585B006000D0065 +:103870000023039302936A46D371FFF733FB041EC0 +:10388000E8603BD002283CD001283CD1032703A9A3 +:10389000380001F017F8002838D102A9073001F0EC +:1038A00011F8002835D103982A003100FFF724FCD5 +:1038B000041E1DD10398FFF726FD010001236A466F +:1038C0000732380000F0CAF9061E25DB02980122F3 +:1038D0006B46D91DFCF7EAFE002803D06B46012297 +:1038E000DA7126006B46DA790F231340EB7134004E +:1038F000039801F01DF8029801F01AF8200005B0B5 +:10390000F0BD0127C3E701246442F7E701246442C4 +:10391000F4E701246442F1E701246442EEE7000089 +:10392000F0B5DE4657464E464546E0B587B0804680 +:103930000091914603930023059305A9072000F009 +:10394000C1FF051E00D093E000260023019300274D +:103950009B46029319E04948494BC35C1B06FF2272 +:103960005200825C12041343FE22FF32825C120278 +:1039700013430831425C13439A46FCF7E9FF504574 +:103980002AD001239C46E3440136012E3FD8F4009F +:10399000A419640244448023384A05989B002100FE +:1039A00000F0E8FF051E66D1344AF823FF33D35CEC +:1039B0001B06FB214900515C09040B43F621FF3132 +:1039C000515C09020B43FA214900525C13432D4A12 +:1039D0009342C0D00137D7E7284AFC23FF33D35C9A +:1039E0001B06FD214900515C09040B43FA21FF31FC +:1039F000515C09020B43FC214900525C1343019ABC +:103A00009A42C1D8039A166001930294BCE7022F30 +:103A10000FD05B46022B1CD101256D42059800F0AA +:103A200087FF280007B0F0BCBB46B246A946A046B7 +:103A3000F0BD0123039A136000234A4613600598E2 +:103A400001F008F90100FA22520000980FF0D8F9AD +:103A5000E4E74B46019A1A60FA2305985B00009A46 +:103A6000029900F087FF051ED8D001256D42D5E7E9 +:103A700001256D42D5E701256D42D2E7C45C0108FE +:103A8000FF010000EFBEADDEF0B5CE46474680B583 +:103A900083B006000D009846531C99460020019003 +:103AA00001A9073000F00EFF002836D11E4CFA277E +:103AB0007F003A00414620000FF0EDF9FC235B0047 +:103AC0004A46E250194B1B68E35108373900200081 +:103AD000FCF73EFFE051012D1DD00135EC006419CB +:103AE0006402A419802201989200210000F0F8FFDE +:103AF000002815D180230C4A01989B00210000F07A +:103B000095FF0400019800F013FF200003B0C0BC33 +:103B1000B946B046F0BD0025E0E701246442F4E771 +:103B200001246442F1E7C046C45C0108483E01102C +:103B300010B5054910220FF055F9002801D00220D8 +:103B400010BD0120FCE7C0469037011082B0020092 +:103B500001AB0121197001315970013199700023B5 +:103B6000002004E0902189018C4660440133022B3F +:103B700004D801A9C95C9142F4D101E0012040427E +:103B800002B07047F0B5CE46474680B583B0060018 +:103B90000F0090461C00002301930093FA21490076 +:103BA00038000EF02DFA0D00FB43A34242D33B191F +:103BB000284A934241D83000FFF7C8FF061E3FDB7A +:103BC000FA21490038000EF095F940023618002716 +:103BD0000120404203E0220010E000240025002CD8 +:103BE00033D01D4901AB6A463000FFF799FE00282B +:103BF00029DBFA235B009C42EDD95A1B164B9946F0 +:103C0000280048444346D9190FF045F9009A019914 +:103C10004B463000FFF738FF002816D1FA235B002F +:103C20009C42DAD3F53CFF3C0C339C466644F537A6 +:103C3000FF37D3E70120404207E00120404204E083 +:103C40000120404201E00120404203B0C0BCB9461F +:103C5000B046F0BD94110000C45E0108F0B5CE4638 +:103C6000474680B583B007000D0091461C00002335 +:103C700001930093FA21490028000EF0C1F90E00CB +:103C8000EB43A34239D32B19244A934238D8380046 +:103C9000FFF75CFF071E36DBFA21490028000EF013 +:103CA00029F940023F1800239846002515E022001C +:103CB000484640441A4971180FF0EDF8FA235B00AA +:103CC0009C4208D3F53CFF3C0C339C4667440C3BBC +:103CD0009C46E04400E000240026002C18D0104947 +:103CE00001AB6A463800FFF71BFE051E0EDBFA2308 +:103CF0005B009C42DBD99A1BDAE701256D4207E0A5 +:103D000001256D4204E001256D4201E001256D426F +:103D1000280003B0C0BCB946B046F0BD9411000005 +:103D2000C45E0108F0B5CE46474680B5764CA54442 +:103D300006000023829382A9072000F0C3FD00281B +:103D400006D08B239B009D44C0BCB946B046F0BD55 +:103D5000829800F07FFF01900700829800F0E8FD54 +:103D60001722002184A80FF04BF834783000FFF7B9 +:103D7000CFFA0100172384AA2000FFF76FFF002865 +:103D8000DFD1624802AB9C466044FFF7D1FE0128B8 +:103D900000D0B0E00020FCF735FC0500300000F05A +:103DA000F9FE80239B00984200D91800431E802210 +:103DB0009200934200D3A1E0040000E02418AC423A +:103DC000FCD380239B009C4200D99AE0B168091B78 +:103DD0002200300000F084FE0028B2D1300000F054 +:103DE00039FF81464A4B02AA944663441870601B0F +:103DF00060442A0049460FF003F810235B429846BE +:103E0000A044B94509D010220199404802AB9C4614 +:103E10006044FCF737FC002846D1404602AB9C4684 +:103E200060441022394961440FF035F82200183AF5 +:103E3000374B02A98C4663441B78BB423FD084A910 +:103E40008979B94240D033496144097802A8815444 +:103E500001212200203A8154083ABB4239D084A97A +:103E60000979B94237D085A9097802A8815430224E +:103E700052429046A044BB4206D03432019984A8F5 +:103E8000FCF700FC00282BD1404602AB9C46604466 +:103E9000042284A90EF0FFFFB168091B230002AAC7 +:103EA000300000F0C3FD4CE7404602AB9C46604446 +:103EB000174B6344197810220EF0A2FFB6E715499C +:103EC00002A884466144C0E7114902A884466144BF +:103ED000BBE785A9C8E70E4902A884466144C3E749 +:103EE000404602AB9C466044094B63441978042267 +:103EF0000EF086FFD0E70120404222E70120404239 +:103F00001FE7012040421CE7D4FDFFFF0F02000025 +:103F1000070200000E020000F0B5D6464F464646A6 +:103F2000C0B582B004000D00170099460AAA1378A4 +:103F30009A46002844D0002946D0002F48D00E8948 +:103F4000CB68F618042301AA3100380000F012FDF6 +:103F50008046002840D101AB1A88274B9A421FD0D7 +:103F60006B89002B40D101AB1A88244B9A423FD178 +:103F7000256067604B4623815346A3726B899B196A +:103F8000E3606B899B1901AA52889B186361043610 +:103F90002661404602B0E0BCBA46B146A846F0BD34 +:103FA0006B8901AA51888B421AD1891904233800E0 +:103FB00000F0E0FC0028D6D001235B429846E8E7F9 +:103FC00001235B429846E4E701235B429846E0E721 +:103FD00001235B429846DCE701235B429846D8E721 +:103FE00001235B429846D4E701235B429846D0E721 +:103FF00001235B429846CCE708690000076900008E +:10400000F0B583B004000F0015001E00002849D051 +:104010000368002B4AD04368002B4AD000294BD0BC +:10402000002A1FD1012040423EE02169606804233C +:1040300001AA00F09FFC002841D1A37A002B03D0F5 +:104040002269E3689A423DD223891F4A934217D0DE +:1040500001AA1288934213D001AB58882369C01873 +:104060000430206123696269934219D2226852891F +:10407000002ADAD0E2689A42D7D104332361D4E728 +:10408000002E02D001AB1B883380236904333B60D0 +:1040900001AB5B882B8022699B180433236103E00A +:1040A000012001E00120404203B0F0BD0120404268 +:1040B000FAE701204042F7E701204042F4E70120FF +:1040C0004042F1E70120EFE7FFFF000070B50D006F +:1040D0001600002902D00020002406E00024200061 +:1040E00070BD0028FBD101350134B442F7DA002855 +:1040F000F7D12978014807F0C3FDF2E7B86001085D +:1041000070B50C001600002914D0002503E000282B +:1041100011D1B5420FDA09480022210007F084FDD1 +:104120000028F4D1013523780A2B04D00D2B02D0BE +:104130000134ECE70025280070BDC046B8600108D6 +:10414000F0B5C64600B58AB007009446984605AD5E +:104150000E4C2E000DCC0DC609CC09C60C4802959C +:10416000002401944346009363460A00390007F097 +:10417000D1FD002803D00AB080BCB846F0BD044889 +:104180000022109907F074FBF5E7C046B83E011015 +:10419000B860010810B5024807F086FD10BDC046A2 +:1041A000B860010810B5FA24A400002C08DDFFF760 +:1041B000F1FF002804D0012007F030F8013CF4E7BB +:1041C000002C00D101BE024807F08EFA10BDC04697 +:1041D000B8600108F0B5C64600B58C680A6884234B +:1041E000C558753B2B400825ED1A2300AC4226D953 +:1041F0002B0024E055782D0216783543D678360604 +:1042000097783F043E4335439827C55155792D0291 +:1042100016793543A846D679360695792D042E436E +:1042200045463543C551D218E41A8423C558753B19 +:104230002B400825ED1A2300AC4200D92B00002B9F +:104240004CD0082B31D89D002E4E7559AF461678AC +:1042500090254651E7E753781B0215782B439425A8 +:1042600043510223DFE753781B0215782B43D5789F +:104270002D069678360435432B4398254351042365 +:10428000D1E753781B0215782B43D5782D06967805 +:10429000360435432B439825435153791B02157936 +:1042A0002B43942543510623BDE753781B02157811 +:1042B0002B43D5782D069678360435432B43982624 +:1042C000835153791B0215792B43D5792D069779A4 +:1042D0003F043D432B4383510823A4E70A608C60CD +:1042E000002C0CD1F924E40003590122934303511B +:1042F0008A61CB69002B02D0CB690120984780BC32 +:10430000B846F0BDCC3E0110F8B50E004C69CB6844 +:10431000C42282580F21114022008C421CD90A006D +:104320001AE0D825415919700F0A5F700F0C9F7061 +:10433000090ED970415919710D0A5D710D0C9D71ED +:10434000090ED9719B18A41AC42282580F25154052 +:104350002200AC4200D92A00002A63D0082A4ED895 +:1043600095003A4949598F46D02141581970E9E7DB +:10437000D42141581970090A5970E3E7D4214158F2 +:104380001970090A5970D02141589970DAE7D8217B +:10439000415819700D0A5D700D0C9D70090ED97091 +:1043A000D0E7D821415819700D0A5D700D0C9D7031 +:1043B000090ED970D02141581971C3E7D82141584D +:1043C00019700D0A5D700D0C9D70090ED970D42105 +:1043D00041581971090A5971B4E7D8214158197027 +:1043E0000D0A5D700D0C9D70090ED970D4214158D5 +:1043F0001971090A5971D02141589971A2E7D82140 +:1044000042581A70150A5D70150C9D70120EDA7004 +:1044100042581A71110A5971110C9971120EDA7100 +:1044200008228FE7F3607461002C0DD1F922D200CD +:10443000835802218B4383500323B361336A002BDB +:1044400002D0336A032098477461F8BDF03E011032 +:1044500010B5264A264BD358DA070DD49A0716D43E +:104460005A071FD5234B05229A61204AF823DB0007 +:104470000421D150D35809E01E491C4C2000FFF7FD +:10448000A9FEF823DB000122E250E35810BD1949D0 +:10449000164C2000FFF738FFF823DB000222E25021 +:1044A000E358F3E71A0709D5124B06229A610F4A1F +:1044B000F823DB000821D150D358E7E7DA0609D505 +:1044C0000C4B07229A61094AF823DB001021D150D6 +:1044D000D358DBE79B06D9D5064B08229A61034ADD +:1044E000F823DB002021D150D358CFE70000424011 +:1044F000CC0700007462010810B5314A314C032129 +:10450000200008F09BF811220321200007F096FFFD +:104510002D4A0421200008F091F8112204212000E6 +:1045200007F08CFF294A0521200008F087F81122A6 +:104530000521200007F082FF254A0621200008F00F +:104540007DF811220621200007F078FF214A07217B +:10455000200008F073F811220721200007F06EFFF9 +:10456000002102200BF04EFA012102200BF07AFA12 +:1045700002200BF001FA184918480CF021F9184BE9 +:10458000FA2218499200184809F0B6F9041E01D021 +:10459000200010BD1249FA20800009F0EBFD0F4BFE +:1045A00000229B5E002B06DB1F2213401E3A9A401E +:1045B00013000E4A13600A490B4809F04FFBE7E766 +:1045C000B03F0110800531407C3F0110483F011091 +:1045D000143F0110E43F011051440010D8010008BD +:1045E00074620108184001100000424000E100E040 +:1045F000024B1B685B688000C0587047306301083D +:10460000004870470000424000487047746201084B +:1046100010B50400FFF770FF002800D010BD044B58 +:104620001C60044A2100044809F0B2FBF6E7C046CA +:1046300030630108746201080000424070B5234BEA +:104640005B6803282ED009D8012810D0022803D196 +:104650001B6802221A700DE01D4C06E0042803D1ED +:104660001B6808221A7005E0194C200070BD1B68F9 +:1046700001221A700138174B420011188900CC58DA +:104680001118890059184D680E7A134A16722900BC +:10469000200007F0D3FF32002900200007F0CEFEF3 +:1046A0000A2507E01B6804221A70E3E7002CDCD01F +:1046B000002DDAD00548FFF7ABFF0400013D0028CC +:1046C000F4D0FA2040000CF00FF9EFE7C801000821 +:1046D0000400B2002C400110F8000008024B5B6897 +:1046E0001B689B6998697047C801000870B5040091 +:1046F0001D4D280009F020FC2B685B005B082B6037 +:1047000002200BF063F9194B00229B5E002B0BDBA0 +:104710001F2213401E3A9A401300154980228B50E5 +:10472000BFF34F8FBFF36F8F104B59880020185E77 +:104730000BF0E2FF013C0F4A600000198000805836 +:1047400007F052FE0C4C200007F04EFE200007F050 +:104750004BFE200007F048FE200007F045FE200039 +:1047600007F042FE70BDC04600004240D80100087C +:1047700000E100E02C400110800531407F2807D087 +:1047800040B2002801DB00207047C0204005FBE755 +:1047900080204005F8E780208000704700207047A7 +:1047A00000207047704770B58A18490A4D02540AB4 +:1047B0006402A54210D0641B640A01235B42002CF2 +:1047C00008D0013C6002401907F094FD0023002846 +:1047D000F5D00123180070BD280007F08BFD0028DC +:1047E00001D00123F6E70023F4E7F8B50D00141E0D +:1047F00016D0DA0516D1CA05D60D002A14D15F0AE3 +:104800000120BE420DD22100280007F0ADFD002896 +:104810000CD180239B009C46654464440136F0E73C +:104820000120F8BD0720FCE70720FAE70120F8E7A0 +:1048300010B514001A0020000EF02DFB844201D1A7 +:10484000002010BD01204042FBE7000010B500220F +:1048500000E00132064B9400E358002B05D01C7891 +:104860008442F6D10B60002001E00120404210BDDF +:104870009C00000810B50C1E14D07F2810D043B245 +:10488000002B07DA0A4B002B0FD0DB69984720601A +:10489000002010BD074B084A084856210DF0FAFCCD +:1048A000074BF0E701204042F3E701204042F0E7E8 +:1048B000044101107C400110F040011084400110BF +:1048C0005C40011010B5002901D000220CE001204D +:1048D000404220E0104B114A114856210DF0DAFCFD +:1048E000104C002C11D101320F4B9400E358002BD7 +:1048F0000FD01C788442F6D10B605B787F2BEFD011 +:104900005CB2002CE6DA094CEBE72268180090470D +:1049100001E00120404210BD7C400110F040011038 +:10492000844001105C4001109C000008044101100B +:1049300010B500280AD040787F280ED043B2002B53 +:1049400005DA074B002B01D05B68984710BD054B7B +:10495000054A064856210DF09DFC054BF2E7C0467E +:10496000044101107C400110F0400110844001100E +:104970005C400110F0B583B004000D0016001F006C +:1049800000230193002844D083688B4207D3BB42A5 +:104990001FD3CA1993421ED30120404200E00720D2 +:1049A00063787F2B1FD05AB2002A16DA1A4A002ADF +:1049B0000DD001A91800FFF75DFF002807D101996C +:1049C000002904D06368C918491900290DD103B022 +:1049D000F0BD0720E4E70720E2E7104B104A11483A +:1049E00056210DF057FC104AE1E760787F280ED081 +:1049F00043B2002B05DA084B9C683B003200A0470D +:104A0000E5E7064B064A074856210DF043FC064BE6 +:104A1000F2E701204042DAE7044101107C40011036 +:104A2000F0400110844001105C400110F0B583B0EB +:104A300004000D0017001E0000230193002841D040 +:104A400083688B4206D3B34228D38A19934227D373 +:104A5000012000E0072063787F2B29D05AB2002A7A +:104A600020DA1A4A002A2ED001A91800FFF702FF07 +:104A7000002828D10199002925D06368C91849194F +:104A8000002920D060787F281AD043B2002B11DA99 +:104A90000E4BDC6833003A00A04714E00720DAE749 +:104AA0000720D8E70A4B0B4A0B4856210DF0F2FBC2 +:104AB0000A4AD7E7064B074A074856210DF0EAFB9A +:104AC000064BE6E7012003B0F0BDC04604410110EB +:104AD0007C400110F0400110844001105C40011046 +:104AE00070B582B004000D00160000230193002869 +:104AF00043D083688B4207D393421FD38A189342D3 +:104B00001ED30120404200E0072063787F2B1FD096 +:104B10005AB2002A16DA1A4A002A0DD001A9180042 +:104B2000FFF7A8FE002807D10199002904D0636887 +:104B3000C918491900290DD102B070BD0720E4E75A +:104B40000720E2E70F4B104A104856210DF0A2FB58 +:104B50000F4AE1E760787F280DD043B2002B04DADA +:104B6000074B1B6932009847E6E7064B064A0748A1 +:104B700056210DF08FFB064BF3E701204042DBE7A7 +:104B8000044101107C400110F040011084400110EC +:104B90005C40011010B5002813D040787F280ED05B +:104BA00043B2002B05DA094B002B0CD09B699847C8 +:104BB00008E0074B074A084856210DF06BFB074BEE +:104BC000F2E7002010BD0020FCE7C04604410110C0 +:104BD0007C400110F0400110844001105C40011045 +:104BE000002832D101291AD0022931D0002902D05F +:104BF00001204042704700280CD0012805D1013027 +:104C00004000FF2807D9FF2005E0002805D1023029 +:104C10004000F6E70120C0B2ECE7FF20FBE70028E8 +:104C20000ED0012806D1013040000130FF2808D9FC +:104C3000FF2006E0002806D1013040000330F5E7F0 +:104C40000220C0B2D6E7FF20FBE701204042D1E7B7 +:104C50000320CFE710B5002813D040787F280ED06E +:104C600043B2002B05DA094B002B0CD05B69984747 +:104C700010BD074B074A084856210DF00BFB074BA8 +:104C8000F2E70020F4E70020F2E7C04604410110FB +:104C90007C400110F0400110844001105C40011084 +:104CA000F0B5D6464F464646C0B582B089469046D6 +:104CB0000023019301A9FFF7C9FD8246019B002B48 +:104CC00051D04A46002A52D04246002A53D00028EA +:104CD00055D158787F281DD043B2002B14DA2E4BC3 +:104CE000002B50D09B6998470700019DAC680019C4 +:104CF000013839000DF0FEF8E0231B01984200D97D +:104D00007F006D68002614E0244B254A2548562173 +:104D10000DF0C0FA244BE3E73900A14200D921008D +:104D2000F300434459601D606D18A1420BD8641A0A +:104D30000136002C0AD0390028000DF061F9002955 +:104D4000EAD0791AE9E701360024F2E74B461B68FE +:104D5000B3421CD34B461E60504602B0E0BCBA467C +:104D6000B146A846F0BD01235B429A46F4E7012311 +:104D70005B429A46F0E701235B429A46ECE7012347 +:104D80005B429A46E8E701235B429A46E4E7012347 +:104D90005B429A46E0E7C046044101107C400110A6 +:104DA000F0400110844001105C40011040B2002826 +:104DB00001DB00207047C0204005FBE7FF20704763 +:104DC00000207047704710B5FFF788FC10BDF0B5A4 +:104DD000C64600B582B00D00141E2FD00020FFF78C +:104DE00007FC8046FFF77AFC0600E8231B069C467A +:104DF000654447422F40002001E0E41ABF19002C0F +:104E000012D0002810D1FFF7FBFB0500FFF7FCFBD9 +:104E1000009033003A004146280009F087FB230048 +:104E2000B442EAD93300E8E7002804D1002002B0F8 +:104E300080BCB846F0BD01204042F8E70120404266 +:104E4000F5E7F0B5C64600B582B00C0017001D00AE +:104E50000020FFF7CDFB0600E8231B069C466444B8 +:104E6000FFF7CEFB8046FFF7CFFB019000953B009C +:104E700022003100404609F09BFA002804D10020AE +:104E800002B080BCB846F0BD01204042F8E7F0B562 +:104E9000C64600B582B00C0017001D000020FFF7C9 +:104EA000A7FB0600E8231B069C466444FFF7A8FB0B +:104EB0008046FFF7A9FB019000953B0022003100DE +:104EC000404609F0DDF9002804D1002002B080BC82 +:104ED000B846F0BD01204042F8E770B50368CD1A2E +:104EE000002D52DD1E7800241C57002C0ADB5C1CB0 +:104EF00004601B78136013680268891A8B4253D8C8 +:104F0000002070BD7F243440032C30D011D8012CF8 +:104F100025D0022C0AD1022D3DDD5C7824029B783D +:104F200023431360036803330360E4E764204042D3 +:104F3000E7E7042C10D1042D33DD5C7824069D783E +:104F40002D042C43DD782D022C431B792343136061 +:104F5000036805330360CEE764204042D1E7012DAA +:104F600016DD5B781360036802330360C3E7032D2B +:104F700014DD5C7824049D782D022C43DB782343D8 +:104F80001360036804330360B5E760204042B8E76C +:104F900060204042B5E760204042B2E760204042D6 +:104FA000AFE760204042ACE760204042A9E770B51F +:104FB00004680D1B002D07DD25789D4207D10134C3 +:104FC0000460FFF78AFF70BD60204042FBE762206B +:104FD0004042F8E730B583B004001500022301AA6F +:104FE000FFF7E5FF002801D003B030BD019A21682A +:104FF000280000F0CCFD2368019A9B182360F3E79A +:1050000070B5050014000323FFF7D1FF00280AD173 +:105010002368002B08D0013B23602B681A78002AF4 +:1050200005D101332B6070BD68204042FBE768204A +:105030004042F8E7F0B5C64600B582B005008846A4 +:1050400017001E00302301AAFFF7B1FF041E2CD168 +:105050002B684246D11A002931DD1B783A0008C27C +:105060002968019B88469844062341462800FFF79B +:105070009EFF041E19D12A68BA607B68D2182A6084 +:10508000424517D01378320008C22B6801332B60D9 +:1050900041462800FFF721FF041E06D12B68B360AC +:1050A00072689B182B6043450CD1200002B080BC75 +:1050B000B846F0BD0C21300003F0A0FEF5E76024F7 +:1050C0006442F2E766246442EFE7431C013150007A +:1050D00059400840584001387047F0B5CE46474621 +:1050E00080B591465A42944600260DE0B4004A46E7 +:1050F000155967463D400C192768B8465F1E424661 +:1051000017403D43256001368642EFD3C0BCB94607 +:10511000B046F0BD020080231B0600201F2804D8E3 +:105120001A4202D15B080130F8E77047030048409B +:105130005B1A594008405840C00F7047F0B5C6464A +:1051400000B584469846002000250EE0AE00945934 +:105150008442BF417F42241A43469B599C4280416E +:105160004042C019E41A8C5101356545EED380BC2C +:10517000B846F0BDF0B5CE46474680B587B0844608 +:1051800003910292019300230593DFE103980299B2 +:10519000059A019B1F0CB9461F043F0CB84640C836 +:1051A000370C3604360C444674434B465E434D463A +:1051B0007D4343465F43330CED183B0CED18A418B8 +:1051C000002255413304E41855413B04E41855418D +:1051D0000B68E4186A4110C140C8370C3604360C1D +:1051E000444674434B465E434D467D4343465F43CE +:1051F000330CED183B0CED18A41800225541330474 +:10520000E41855413B04E41855410B68E4186A4121 +:1052100010C140C8370C3604360C444674434B4624 +:105220005E434D467D4343465F43330CED183B0CD4 +:10523000ED18A418002255413304E41855413B04ED +:10524000E41855410B68E4186A4110C140C8370C96 +:105250003604360C444674434B465E434D467D430C +:1052600043465F43330CED183B0CED18A4180022A5 +:1052700055413304E41855413B04E41855410B688B +:10528000E4186A4110C140C8370C3604360C444655 +:1052900074434B465E434D467D4343465F43330C68 +:1052A000ED183B0CED18A418002255413304E41806 +:1052B00055413B04E41855410B68E4186A4110C19C +:1052C00040C8370C3604360C444674434B465E43A4 +:1052D0004D467D4343465F43330CED183B0CED18C0 +:1052E000A418002255413304E41855413B04E41846 +:1052F00055410B68E4186A4110C140C8370C3604A8 +:10530000360C444674434B465E434D467D4343460C +:105310005F43330CED183B0CED18A41800225541E7 +:105320003304E41855413B04E41855410B68E41874 +:105330006A4110C140C8370C3604360C44467443E9 +:105340004B465E434D467D4343465F43330CED1869 +:105350003B0CED18A418002255413304E4185541C4 +:105360003B04E41855410B68E4186A4110C140C879 +:10537000370C3604360C444674434B465E434D4668 +:105380007D4343465F43330CED183B0CED18A418E6 +:10539000002255413304E41855413B04E4185541BB +:1053A0000B68E4186A4110C140C8370C3604360C4B +:1053B000444674434B465E434D467D4343465F43FC +:1053C000330CED183B0CED18A418002255413304A2 +:1053D000E41855413B04E41855410B68E4186A4150 +:1053E00010C140C8370C3604360C444674434B4653 +:1053F0005E434D467D4343465F43330CED183B0C03 +:10540000ED18A418002255413304E41855413B041B +:10541000E41855410B68E4186A4110C140C8370CC4 +:105420003604360C444674434B465E434D467D433A +:1054300043465F43330CED183B0CED18A4180022D3 +:1054400055413304E41855413B04E41855410B68B9 +:10545000E4186A4110C140C8370C3604360C444683 +:1054600074434B465E434D467D4343465F43330C96 +:10547000ED183B0CED18A418002255413304E41834 +:1054800055413B04E41855410B68E4186A4110C1CA +:1054900040C8370C3604360C444674434B465E43D2 +:1054A0004D467D4343465F43330CED183B0CED18EE +:1054B000A418002255413304E41855413B04E41874 +:1054C00055410B68E4186A4110C140C8370C3604D6 +:1054D000360C444674434B465E434D467D4343463B +:1054E0005F43330CED183B0CED18A4180022554116 +:1054F0003304E41855413B04E41855410B68E418A3 +:105500006A4110C140C8370C3604360C4446744317 +:105510004B465E434D467D4343465F43330CED1897 +:105520003B0CED18A418002255413304E4185541F2 +:105530003B04E41855410B68E4186A4110C1059218 +:105540000291039010235B429846C44463460F2B9C +:1055500000D91BE66346072B00D825E10398029982 +:10556000059A019B1F0CB9461F043F0CB84640C862 +:10557000370C3604360C444674434B465E434D4666 +:105580007D4343465F43330CED183B0CED18A418E4 +:10559000002255413304E41855413B04E4185541B9 +:1055A0000B68E4186A4110C140C8370C3604360C49 +:1055B000444674434B465E434D467D4343465F43FA +:1055C000330CED183B0CED18A418002255413304A0 +:1055D000E41855413B04E41855410B68E4186A414E +:1055E00010C140C8370C3604360C444674434B4651 +:1055F0005E434D467D4343465F43330CED183B0C01 +:10560000ED18A418002255413304E41855413B0419 +:10561000E41855410B68E4186A4110C140C8370CC2 +:105620003604360C444674434B465E434D467D4338 +:1056300043465F43330CED183B0CED18A4180022D1 +:1056400055413304E41855413B04E41855410B68B7 +:10565000E4186A4110C140C8370C3604360C444681 +:1056600074434B465E434D467D4343465F43330C94 +:10567000ED183B0CED18A418002255413304E41832 +:1056800055413B04E41855410B68E4186A4110C1C8 +:1056900040C8370C3604360C444674434B465E43D0 +:1056A0004D467D4343465F43330CED183B0CED18EC +:1056B000A418002255413304E41855413B04E41872 +:1056C00055410B68E4186A4110C140C8370C3604D4 +:1056D000360C444674434B465E434D467D43434639 +:1056E0005F43330CED183B0CED18A4180022554114 +:1056F0003304E41855413B04E41855410B68E418A1 +:105700006A4110C140C8370C3604360C4446744315 +:105710004B465E434D467D4343465F43330CED1895 +:105720003B0CED18A418002255413304E4185541F0 +:105730003B04E41855410B68E4186A4110C1059216 +:105740000291039008235B429846C44402E7039801 +:105750000299059A019B1F0CB9461F043F0CB846DD +:1057600040C8370C3604360C444674434B465E43FF +:105770004D467D4343465F43330CED183B0CED181B +:10578000A418002255413304E41855413B04E418A1 +:1057900055410B68E4186A4110C1059202910390CB +:1057A00001235B429846C4446346002BCFD10BE0F3 +:1057B00002990B689B180B60029A08CA05998B42E4 +:1057C0009B415B4205930292059A002AF0D107B0F3 +:1057D000C0BCB946B046F0BDF8B507000D001400D6 +:1057E0001E00002A10D082420ED900230800390082 +:1057F0000CF02AFC002901D001204042002E02D0EA +:1058000044432D1B3560F8BD002E02D001235B42BE +:10581000336001204042F6E710B5890003F0EEFA4C +:1058200010BD00BA7047000070B50500002911D006 +:10583000094B9C4661448C00041909E02868FFF775 +:10584000F0FF06002068FFF7ECFF01C52660043C6E +:10585000A542F3D970BDC046FFFFFF3FF0B5D64665 +:105860004F464646C0B504000D00924698468E0845 +:10587000032129404B1E99417618B30099465F1BBE +:105880004368B3421ED380683A0000210DF0B8FA95 +:10589000A0686268921B9200484400210DF0B0FAA3 +:1058A000A168C9192A004046D047051E05D0280026 +:1058B000E0BCBA46B146A846F0BDA0683100FFF78B +:1058C000B3FFF4E704256D42F1E7012303600023F1 +:1058D00043608360704710B5041E0DD080680028B7 +:1058E00005D06168FFF798FFA0680CF077FE0123F0 +:1058F000236000236360A36010BD0000F8B50600BC +:105900000C00124B99421BD845688D4201D30020F0 +:10591000F8BD042120000CF0DBFC071E13D0B16899 +:10592000002909D0AA000DF0B6FA7168B068FFF737 +:1059300073FFB0680CF052FE7460B7600020E7E7B8 +:1059400010204042E4E710204042E1E71027000029 +:1059500070B505000C1E09D043688B420AD0FFF7D2 +:10596000BAFF21002800FFF7C9FF70BDFFF7B3FFA2 +:105970000020FAE780688A0000210DF041FA012337 +:105980002B600020F1E7000070B504000D001A4BF9 +:1059900099422AD843688B4209D9013B002B09D090 +:1059A000A26898008258002A04D1013BF6E7FFF76D +:1059B000A5FF19E001339D4200D81D0004212800F5 +:1059C0000CF086FC061E13D0A168002909D0AA009D +:1059D0000DF061FA6168A068FFF71EFFA0680CF087 +:1059E000FDFD6560A660002070BD10204042FBE711 +:1059F00010204042F8E7C04610270000F8B5060026 +:105A00000D00884236D04A68002A01D0013A0DE0E4 +:105A10004268002A01D100272AE001230360806840 +:105A2000920000210DF0ECF9F5E7013A002A04D0CC +:105A3000AB689400E358002BF7D0541C2B683360FC +:105A40007268A24206D221003000FFF757FF071EFE +:105A500009D00DE0B068A300C018121B920000210D +:105A60000DF0CEF90027B068A968A2000DF013FA76 +:105A70003800F8BD0027FBE7F8B504000F005542D9 +:105A8000EDB21543ED094968FFF738FF061E01D056 +:105A90003000F8BD396820682A00FFF716FB206047 +:105AA0007868BA68A1682B00FFF717FB7A6807E0EF +:105AB000A1689300C9186B1E086803400B6001328F +:105AC00063689342F4D8E3E770B504000E00012147 +:105AD000FFF714FF051E01D0280070BDA0686268A2 +:105AE000920000210DF08CF9A368F11772184A405A +:105AF0001A60002E02DB01232360EDE701235B42E5 +:105B0000FAE743685B018B4209D982684B099B0025 +:105B10009B581F220A40D3400120184070470020A4 +:105B2000FCE730B50400002000256368AB420DD9C6 +:105B300000221F2A08D8A368A900CB58D340DB074E +:105B400005D401320130F4E70135EEE7002030BD25 +:105B500010B501004068002812D0441E002C06D069 +:105B60008B68A200D358002B01D1013CF6E78A686C +:105B7000A300D058FFF7CEFA2023181A640120188A +:105B800010BD10B5FFF7E4FF0730C00810BDF0B539 +:105B9000CE4600B582B0050001911400960803239B +:105BA00013405A1E9341F618B000031B994631006A +:105BB0002800FFF7CDFE071E01D1002C04D13800CC +:105BC00002B080BCB946F0BDA868484422000199E3 +:105BD0000DF061F9A8683100FFF726FEEFE700003D +:105BE000F0B5C64600B504000F004D091F260E4053 +:105BF000FFF7AEFFC01963685B01834203D31F2F19 +:105C000026D9636817E041091F2303405A1E9341B8 +:105C1000C9182000FFF772FE0028F0D01BE0A06832 +:105C20005A1B1B4959188900194FBC4662449200FF +:105C300012584250013BAB42F1D807E0A268144928 +:105C400059188900521800211160013B002BF5D131 +:105C5000002E1BD1002080BCB846F0BDA368A9006F +:105C60005B1818682022921B90460200B2401A600E +:105C7000A3685B1819683943196001354346D84059 +:105C800007006368AB42E9D80020E4E70027F8E7A3 +:105C9000FFFFFF3FF0B5C64600B54C091F250D407C +:105CA0004368A34209D306D01F2916D8002D3BD044 +:105CB0004168002632E0002DF6D00021FFF704FFF6 +:105CC0002FE081681A199E00920052588A510133C0 +:105CD0004268121B9A42F4D807E00023F8E7826872 +:105CE0009900521800211160013342689A42F6D897 +:105CF000DCE783680D4A8A1892009B181F682024ED +:105D0000641BA0463C00EC401C6083689B181A682A +:105D100032431A6001393E0043469E400029E8D1D3 +:105D2000002080BCB846F0BD0020FAE7FFFFFF3F2F +:105D300030B54368002B08D084681B4A9A1892003B +:105D40001259002A01D1013BF4E74A68002A08D021 +:105D50008D68154C1419A4006459002C01D1013A26 +:105D6000F4E71C00144312D0934212D813D3002B33 +:105D70000BD084680C4A9A189200A4588D68AA58CF +:105D800094420BD80CD3013BF1E7002000E0002047 +:105D900030BD0120FCE701204042F9E70120F7E790 +:105DA00001204042F4E7C046FFFFFF3F70B5060008 +:105DB0004368002B08D0B468214A9A1892001259FF +:105DC000002A01D1013BF4E74A68002A08D08D6817 +:105DD0001B481418A4006459002C01D1013AF4E7BF +:105DE0001800104324D0934219D81AD330680028E1 +:105DF00002DD0A68002A1DDB0A68002A01DD00288E +:105E00001ADB002B12D0B4680D4A9A189200A458DD +:105E10008D68AA5894420CD806D3013BF1E730684C +:105E200007E00868404204E0404202E0002000E051 +:105E3000002070BD0120FCE701204042F9E7C04688 +:105E4000FFFFFF3FF0B5DE4657464E464546E0B5FC +:105E500083B082468B46914642684B689A4246D14F +:105E600003685B1001252900194001915A46126808 +:105E7000521053401D400B002B404A4613604368AC +:105E8000984629E05B469B681A4F4744BF0052463C +:105E90009268D159D859FFF749F90126741B04407B +:105EA000019B1C4049460B681C430C60054351464E +:105EB0008B6859468A68D159D859FFF737F9731B4F +:105EC0000340019AB61A1E4034434B461C600543FA +:105ED00001235B429C46E0444346002BD2D1002084 +:105EE00003B0F0BCBB46B246A946A046F0BD0420B4 +:105EF0004042F5E7FFFFFF3F00B585B0CA178B189A +:105F00005340009300290ADB0123019301230293EC +:105F10006B46039301A9FFF749FF05B000BD0123BC +:105F20005B42F2E7F8B507001400904214D0B94282 +:105F300004D03800FFF762FD002843D101233B6005 +:105F40006668002E0BD0A1681F4BF3189B005B58AE +:105F5000002B04D1013EF4E70C000100E7E731001B +:105F60003800FFF7CBFC00282CD1A168BA680024C8 +:105F700000250EE008C99C461368E3181360A3428D +:105F8000A4416442634408C263459B415B421C19BF +:105F90000135B542EED306E01368E31808C2A34208 +:105FA000A44164420135002C0CD07B68AB42F3D88D +:105FB000691C3800FFF7A2FC002803D1BA68AB00C7 +:105FC000D218E9E7F8BDC046FFFFFF3FF0B5C6466F +:105FD00000B5060088461700546800E0013C002C1C +:105FE00006D0BD682B4BE3189B005B59002BF5D006 +:105FF00043465968A14247D33000FFF77FFC051E96 +:1060000013D143465B68A34213D873684246526873 +:1060100093421AD843469A68BB68B1682000FFF7DC +:106020008DF800281AD101233360280080BCB846BF +:10603000F0BDB068A20094466044424691681B1BC4 +:106040009A0061440CF027FFDFE7B0689100401828 +:106050009A1A920000210CF0D3FEDBE77168A1428E +:1060600009D9B368A2009B181A68002A03D1013A23 +:106070001A600134F2E7A14209D0B368A4001B19E9 +:106080001A68013A1A60CEE70A256D42CDE70A2563 +:106090006D42CAE7FFFFFF3FF8B506000C00150090 +:1060A0000F6813687B43002B18DA11002000FFF7FC +:1060B0003FFE002808DB2A0021003000FFF786FFA2 +:1060C000002810D137600EE0220029003000FFF7D1 +:1060D0007DFF002807D17F42376004E0FFF722FFF1 +:1060E000002800D13760F8BDF8B506000C00150097 +:1060F0000F6813687B43002B18DD11002000FFF7A9 +:1061000017FE002808DB2A0021003000FFF75EFFA1 +:10611000002800D13760F8BD220029003000FFF7C9 +:1061200055FF0028F7D17F423760F4E7FFF7FAFE0A +:106130000028F0D13760EEE710B584B0D4171319FA +:1061400063400093002A0ADB012301930123029399 +:106150006B46039301AAFFF7C7FF04B010BD0123EC +:106160005B42F2E7F0B5D6464F464646C0B586B02C +:1061700080460E00170003A8FFF7A7FB6846FFF74D +:10618000A4FBB0450DD0B84514D07568002D1AD0C9 +:10619000B268344BEB189B009B58002B13D1013D88 +:1061A000F4E7310003A8FFF729FC8246002828D134 +:1061B00003AEE8E739006846FFF720FC8246002876 +:1061C0001FD16F46E1E7002D0DD0002399467C6872 +:1061D000002C0BD0BA68234BE3189B009B58002B74 +:1061E00004D1013CF4E701239946F0E7002C01D1EA +:1061F0000123994629194046FFF780FB8246002873 +:106200000CD06846FFF767FB03A8FFF764FB504616 +:1062100006B0E0BCBA46B146A846F0BD00214046F3 +:10622000FFF752FC824600280DD0EAE7B1684346EA +:106230009A680C4BE0188000BB681B5812182800A5 +:10624000FEF798FF013C002CF0D14B46002B03D009 +:10625000012342461360D4E732683B685343424609 +:106260001360CEE7FFFFFF3FF0B5C64600B580469E +:106270000E0017004C6800E0013C002C06D0B56809 +:10628000134BE3189B005B59002BF5D0002F01D076 +:10629000002C08D100214046FFF716FC050028001D +:1062A00080BCB846F0BD611C4046FFF727FB051EC9 +:1062B000F5D131004046FFF7A1FB051EEFD1B168D3 +:1062C0007B1E424692682000FEF754FFE7E7C04677 +:1062D000FFFFFF3FF0B5DE4657464E464546E0B568 +:1062E00099B00700884616001D0000211800FFF72E +:1062F00003FE002800D1A7E115A8FFF7E6FA12A8CF +:10630000FFF7E3FA0FA8FFF7E0FA0CA8FFF7DDFAB2 +:106310000123099302330A9306AB0B932900300043 +:10632000FFF706FD002812DA002F05D00021380003 +:10633000FFF7CAFB041E10D14346002B05D03100E5 +:106340004046FFF75BFB041E07D1002415E0310037 +:1063500015A8FFF753FB041E17D015A8FFF7BBFACB +:1063600012A8FFF7B8FA0FA8FFF7B5FA0CA8FFF7C5 +:10637000B2FA0C2106A802F041FD200019B0F0BCD1 +:10638000BB46B246A946A046F0BD290012A8FFF7B9 +:1063900035FB041EE1D1012312931593716802317C +:1063A0000FA8FFF7ABFA041ED7D100210FA8FFF703 +:1063B0008BFB041ED1D1716802310CA8FFF79EFA45 +:1063C000041ECAD112A8FFF7C3FB1F2318401E28C2 +:1063D0000FD81B1A02939946190015A8FFF700FC65 +:1063E000041EBAD1494612A8FFF7FAFB041E02D0D8 +:1063F000B3E700230293169B5A1E0192139A934609 +:10640000013A03925A469B1A99465B019A46190033 +:1064100012A8FFF7E5FB041E9FD14C4612A915A850 +:10642000FFF7C4FC00280EDB119BA2009B181A6822 +:1064300001321A6012AA15A90800FFF755FE0028BC +:10644000ECD0040089E7514612A8FFF723FC041E94 +:1064500000D082E7B946039F0496AA46019BBB423F +:1064600000D8BEE0179B01998C001859149ABD0002 +:106470005259904230D3119ACB1B75498C466344D4 +:106480009B0001214942D150019B012B39D9179A18 +:1064900070498C4663449B00D2580B9B1A60019B49 +:1064A000002B30D0179A6A498C4663449B00D2581F +:1064B0000B9B5A60179A0B9B12599A60119B019A79 +:1064C000D21B0392624E94466644B6009B191A682A +:1064D00001321A605C462EE001995D4EB44661447B +:1064E0008E000596119E0199C91B03910399614481 +:1064F00089007618059959580023FFF76DF9306027 +:10650000C2E70022C9E7019AD2E73A000E9B1A605F +:10651000149A0E9B52595A60119B9A590CA9080063 +:10652000FFF7A2FE002800D08CE009A90CA8FFF715 +:106530003DFC002813DD119B9B191A68013A1A6073 +:1065400000210CA8FFF7C0FA002800D078E0002F47 +:10655000DBD0149A3F4BE3189B00D258D6E7A346F2 +:10656000119B9A5912A90CA8FFF77EFE041E00D0B9 +:10657000F3E6039D013D6D0129000CA8FFF730FBF8 +:10658000041E00D0E9E60CAA15A90800FFF7ACFD2F +:10659000041E00D0E1E6002115A8FFF7ADFC00289D +:1065A00003DB019B013B019358E712A90CA8FFF7FD +:1065B00025FA041E00D0D0E629000CA8FFF710FB36 +:1065C000041E00D0C9E60CAA15A90800FFF764FD57 +:1065D000041E00D0C1E6119B9B191A68013A1A608B +:1065E000DFE74F46049E5546002F0AD00FA94846C4 +:1065F000FFF704FA041E00D0AFE632682B6853435D +:106600003B604346002B00D1A7E6029915A8FFF78F +:1066100041FB041E00D0A0E63368159315A940463F +:10662000FFF7ECF9041E00D097E600214046FFF783 +:1066300063FC002800D090E60123424613608CE6FC +:1066400004008AE6040088E60C24644295E6C0460D +:10665000FFFFFF3FFEFFFF3F70B505000C00160077 +:1066600000211000FFF748FC002824DB3300220043 +:1066700029000020FFF72EFE041E0CD10021280067 +:10668000FFF73AFC002808DA320029002800FFF75B +:1066900003FD041EF2D0200070BD31002800FFF77A +:1066A00085FB0028F7DB320029002800FFF71CFDDE +:1066B000041EF2D0EFE70A246442ECE7F0B587B09D +:1066C00005000F00160003A8FFF7FFF86846FFF764 +:1066D000FCF8390003A8FFF791F9041E08D003A8BD +:1066E000FFF7F9F86846FFF7F6F8200007B0F0BDAD +:1066F00031006846FFF782F9041EF0D103A8FFF7C6 +:1067000010FA04006846FFF70CFA061E05D10021B6 +:106710006846FFF7F6F9002806D0B44200D82600F4 +:1067200001230093039312E039002800FFF766F974 +:106730000400D4E703AA69466846FFF747FC041E35 +:10674000CDD101216846FFF7A5FA041EC7D100216B +:1067500003A8FFF7D1FB002825D003A8FFF7E1F934 +:10676000010003A8FFF796FA041EB8D16846FFF7A8 +:10677000D8F901006846FFF78DFA041EAFD16946CB +:1067800003A8FFF713FB0028D4DB6A4603A908001F +:10679000FFF71CFC041EA2D1012103A8FFF77AFA1F +:1067A000041ED4D09BE731006846FFF719FA041E97 +:1067B00000D094E769462800FFF720F904008EE72F +:1067C000F0B5DE4657464E464546E0B589B0050071 +:1067D00089461600019301230793002306931000B6 +:1067E000FFF7B6F98046072343449A46DB089B46E9 +:1067F0004B46002B58DB49463000FFF77DFB002855 +:1068000055DD5346272B14D91E2703A8FFF75DF843 +:1068100071682800FFF79CF8041E0CD003A8FFF74E +:106820005AF8200009B0F0BCBB46B246A946A046C3 +:10683000F0BDFA27E9E7716803A8FFF75FF8041EC7 +:10684000ECD1494603A8FFF73FF9041EE6D1129B9D +:10685000019A59462800FFF701F8041EDED10723EC +:10686000514699434346C91A2800FFF713FA041EFC +:10687000D4D1013F002F14D007AA03A92800FFF7A5 +:10688000E1FA041ECAD106AA31002800FFF7DAFA9D +:10689000041EC3D1079B002BD9D1069B002BD6D059 +:1068A000BCE70E246442B9E704246442B9E7042437 +:1068B0006442B6E7F0B59DB005000F001600012157 +:1068C0001000FFF719FB002800DC39E116A8FEF7DD +:1068D000FCFF13A8FEF7F9FF10A8FEF7F6FF0DA8BE +:1068E000FEF7F3FF19A8FEF7F0FF0AA8FEF7EDFF89 +:1068F00007A8FEF7EAFF04A8FEF7E7FF01A8FEF7E6 +:10690000E4FF3200390019A8FFF7D8FE041E07D1B2 +:10691000012119A8FFF7F0FA00281FD00E246442C5 +:1069200016A8FEF7D8FF13A8FEF7D5FF10A8FEF7AC +:10693000D2FF0DA8FEF7CFFF19A8FEF7CCFF0AA8DB +:10694000FEF7C9FF07A8FEF7C6FF04A8FEF7C3FFBE +:1069500001A8FEF7C0FF20001DB0F0BD32003900D5 +:1069600016A8FFF779FE041EDAD116A913A8FFF7BF +:1069700045F8041ED4D131000AA8FFF73FF8041EE1 +:10698000CED1310007A8FFF739F8041EC8D1012184 +:1069900010A8FFF799F8041EC2D100210DA8FFF737 +:1069A00093F8041EBCD1002104A8FFF78DF8041E43 +:1069B000B6D1012101A8FFF787F8041E1CD0AFE76C +:1069C0000AAA10A90800FFF767FB041EA8D116AA9F +:1069D0000DA90800FFF788FB041EA1D1012110A812 +:1069E000FFF758F9041E00D09AE701210DA8FFF720 +:1069F00051F9041E00D093E7159B1B68DB072DD4CB +:106A0000012113A8FFF746F9041E00D088E7129B66 +:106A10001B68DB07D4D40F9B1B68DB07DED5CFE7F1 +:106A20000AAA04A90800FFF737FB041E00D077E785 +:106A300016AA01A90800FFF757FB041E00D06FE754 +:106A4000012104A8FFF726F9041E00D068E7012100 +:106A500001A8FFF71FF9041E00D061E7099B1B681E +:106A6000DB070FD4012107A8FFF714F9041E00D09B +:106A700056E7069B1B68DB07D2D4039B1B68DB072A +:106A8000DED5CDE707A913A8FFF790F900282BDB87 +:106A900007AA13A90800FFF727FB041E00D03FE751 +:106AA00004AA10A90800FFF71FFB041E00D037E757 +:106AB00001AA0DA90800FFF717FB041E00D02FE75D +:106AC000002113A8FFF718FA002895D1002104A887 +:106AD000FFF712FA00281FDA320004A90800FFF7B6 +:106AE000DBFA041EF2D01BE713AA07A90800FFF780 +:106AF000FBFA041E00D013E710AA04A90800FFF750 +:106B0000F3FA041E00D00BE70DAA01A90800FFF755 +:106B1000EBFA041ED4D003E7310004A8FFF746F9CE +:106B2000002807DB320004A90800FFF7DDFA041E85 +:106B3000F2D0F5E604A92800FEF760FF0400EFE6B6 +:106B40000424644207E7F8B506000F001100C46D85 +:106B50000734E4089C4200D91C0022003800FFF7EB +:106B600016F8051E10D1E400F16D8C4205D9611AAA +:106B70003800FFF78FF8051E06D14C36310038007B +:106B8000FFF714F9002801DA2800F8BD32003900B7 +:106B90003800FFF7A9FA0500F6E70120704700006A +:106BA000F0B59DB004000D001600059307A800F095 +:106BB000F7FF19A8FEF789FE16A8FEF786FE13A8B0 +:106BC000FEF783FE10A8FEF780FE2078FFF7E5FFB2 +:106BD000002800D182E0636D002B00D180E001210C +:106BE0002298FFF789F9002807DB27004C37390086 +:106BF0002298FFF7DBF8002812DB3A4D07A801F0D6 +:106C00000AF819A8FEF767FE16A8FEF764FE13A897 +:106C1000FEF761FE10A8FEF75EFE28001DB0F0BD75 +:106C200001212398FFF768F90028E6DB3900239853 +:106C3000FFF7BCF80028E0DA33002A0019A9200089 +:106C4000FFF781FF051ED9D13A00239916A8FFF757 +:106C500031FE051ED2D116AA19A913A8FFF782FA90 +:106C6000051ECBD13A0013A90800FFF7F5FC051E5D +:106C7000C4D116AA229910A8FFF774FA051EBDD137 +:106C80003A0010A90800FFF7E7FC051EB6D1230063 +:106C9000283300220292059A019210AA009213AAA8 +:106CA00007A9200001F0B4FC051EA7D107A801F038 +:106CB000B3FB002801D00B4DA0E73A0007A908005C +:106CC000FFF7CAFC051E00D098E7229907A8FFF736 +:106CD0006DF8002800D191E7024D8FE7024D9CE747 +:106CE000014D9AE700B2FFFF80B0FFFFF0B58DB015 +:106CF00004000D0016001F000B93129B9C46674476 +:106D000007A8FEF7E2FD04A8FEF7DFFD30230AAA7C +:106D100039000BA8FEF74BF9002816D10B9B0A9AF5 +:106D20009B18BB422FD107AA39000BA8FEF752F9D6 +:106D300000280DD0154BC41807A8FEF7CCFD04A8F9 +:106D4000FEF7C9FD20000DB0F0BD104BC418F3E7ED +:106D500004AA39000BA8FEF73DF90028EAD1230068 +:106D60008833139A029204AA019207AA0092320071 +:106D700029002000FFF714FF041EDDD10B9BBB424E +:106D8000DAD0034CD8E7034CD6E7C04680B0FFFF0B +:106D900000B4FFFF1AB0FFFF10B582B000240194C9 +:106DA000049C0094FFF7A2FF02B010BD10B500F0E4 +:106DB00025FF10BD10B5002801D000F071FF10BDF7 +:106DC000436F002B04D0836F002B03D0002070474B +:106DD0000020FCE70120FAE770B5C56DC0235B0019 +:106DE0009D4211D30524002901D00134E4B20029C9 +:106DF00003D0FFF7E5FF002802D1042C00D90424BA +:106E0000A54203D9200070BD0424ECE70224F9E771 +:106E100070B506000D0011001A002800FFF764F994 +:106E2000041E0FD12B68002B0CDA00212800FFF77D +:106E300063F8002806D0321D29002800FFF72CF93E +:106E4000041EEFD0200070BDF8B505000E004B6E9B +:106E5000002B1FD00368002B22DB2800FEF778FEF2 +:106E6000B36D5B00984220D8736E28009847041ECB +:106E70002BD12B68002B1ADA00212800FFF73CF8F1 +:106E8000002814D0321D29002800FFF705F9041E40 +:106E9000EFD01AE00A1D0100FFF7DEFB040014E04A +:106EA0000021FFF729F80028D7D0094C0DE0371D45 +:106EB00039002800FEF77AFF002806DB3A00290097 +:106EC0002800FFF783F8041EF1D02000F8BDC0466B +:106ED00080B0FFFF70B505000C0011001A00200003 +:106EE000FFF740F9002800D070BD29002000FFF70F +:106EF000ABFF0028F8D1024A136801331360F3E7AF +:106F000084630108F8B507000D0011002800FEF7A2 +:106F100067FE041E0DD13E1D31002800FEF746FF1E +:106F2000002806DB320029002800FFF74FF8041E76 +:106F3000F1D02000F8BD70B584B005000C0016003B +:106F400001A8FEF7C2FC0C34291D220001A8FFF79E +:106F5000CBF8051E05D001A8FEF7BDFC280004B043 +:106F600070BD00212000FEF7C7FF0200531E9A41AA +:106F7000324001A92000FEF77FFD0500EBE7F0B5E8 +:106F8000DE4657464E464546E0B583B001900F00B9 +:106F9000924698460CAB1B789B465B083F221A40F2 +:106FA0009146002501E00135EDB2454519D2EC00CE +:106FB0006419A40054444B46EE1A73425E41F6B283 +:106FC000320021003800FEF757FD00280FD12100C4 +:106FD0000C3138000C303200FEF74EFD0028E2D0B4 +:106FE00005E05B46DA0939000198FFF7A4FF03B01A +:106FF000F0BCBB46B246A946A046F0BDF8B5CE46A9 +:10700000474680B506000F00904699464A1C00216D +:107010000BF0F6FE00250EE03900614349194846A1 +:10702000FEF76FFD0300A340705D184370550134F7 +:10703000A045F1D80135BD4201D20024F8E7002374 +:1070400001201CE03518315C1A000A409446594072 +:10705000297001234B4001221A409146441E335DA2 +:107060005343DAB290460B406246134342465140C6 +:1070700029704A46D201315D0A4332550130B84287 +:10708000E0D9C0BCB946B046F8BD0000F0B589B043 +:1070900007000E00009201930EAB1D7805A8FEF7C5 +:1070A00014FC02A8FEF711FC4C3700213800FEF753 +:1070B00028FD01282CD100213000FEF722FD43429B +:1070C00058410F9C2070310005A8FEF797FC041E64 +:1070D00008D002A8FEF7FFFB05A8FEF7FCFB200086 +:1070E00009B0F0BD3200390002A8FEF7FDFF041E12 +:1070F000EFD10F9C227802A905A8FEF7BDFC041E63 +:10710000E7D105AB2A0001990098FFF777FFE0E788 +:10711000004CE4E780B0FFFFF0B587B006000F0039 +:1071200000213800FEF7E8FE00282CDB3C000C3480 +:1071300000212000FEF7E0FE002824DB351D290099 +:107140003800FEF733FE00281DDA29002000FEF784 +:107150002DFE002817DA03A8FEF7B7FB6846FEF7F6 +:10716000B4FB2200210003A8FEF7FCFF041E0CD094 +:10717000002C15D003A8FEF7AEFB6846FEF7ABFB6C +:10718000200007B0F0BD444CFAE7310003A8FFF738 +:107190005BFE041EECD1414A136801331360E7E73C +:1071A0003A0039006846FEF7DDFF041E45D0002C8A +:1071B000E0D1B369002B4BD03200103269466846EB +:1071C000FEF76AFF041E0DD1351D29006846FEF743 +:1071D000EDFD002806DB2A0069466846FEF7F6FE4C +:1071E000041EF1D0002CC5D13A0069466846FEF76E +:1071F000B9FF041E45D0002CBCD132001C326946B8 +:107200006846FEF749FF041E0DD1351D290068466A +:10721000FEF7CCFD002806DB2A0069466846FEF72B +:10722000D5FE041EF1D0002CA4D1694603A8FEF7B8 +:10723000BDFD00289ED0184C9CE731006846FFF742 +:1072400003FE041EB3D1154A136801331360AEE781 +:10725000032269466846FEF76FFF041E00D089E7E7 +:10726000009B002BC0DA00216846FEF745FE00288F +:10727000BAD02A0069466846FEF70EFF041EEFD01A +:1072800078E731006846FFF7DFFD041EB3D1034AFB +:10729000136801331360AEE780B3FFFF8463010816 +:1072A000F0B587B005000E000F0018370021380038 +:1072B000FEF722FE041E02D1200007B0F0BD03A895 +:1072C000FEF703FB6846FEF700FB2A1D390003A802 +:1072D000FFF7F0FA041E06D003A8FEF7FCFA684692 +:1072E000FEF7F9FAE8E703AA11006846FEF73AFF4D +:1072F000041E23D0002CEFD16A4631003000FEF787 +:1073000031FF041E25D0002CE6D10C366A46310030 +:107310003000FEF727FF041E26D0002CDCD103AA84 +:1073200031003000FEF71EFF041E28D0002CD3D100 +:1073300001213800FEF7C8FB0400CDE729006846AC +:10734000FFF782FD041ED5D1124A13680133136082 +:10735000D0E729003000FFF777FD041ED3D10D4A96 +:10736000136801331360CEE729003000FFF76CFD8E +:10737000041ED2D1074A136801331360CDE72900F8 +:107380003000FFF761FD041ED0D1024A13680133BB +:107390001360CBE784630108F0B5DE4657464E46DE +:1073A0004546E0B58BB0814688461600012A08D9CB +:1073B0000C2110000AF08CFF051E00D120E10024F2 +:1073C0000BE00968FFF76CFF040011E16000001991 +:1073D00080002818FEF779FA0134B442F6D307A8E2 +:1073E000FEF773FA04A8FEF770FA01A8FEF76DFA2B +:1073F0004346196818312800FEF700FB041E36D1F9 +:10740000012702E0002C32D10137B7421AD27900AD +:10741000C91989006B189A460C396918BB00424695 +:107420009A5818325046FEF79DFE041EEAD149468E +:107430005046FFF709FD041EE4D1724A1368013378 +:107440001360DFE77100891989000C3969184B4610 +:107450001A1D07A8FFF72EFA041E08D1731E9A46BC +:1074600068E007A904A8FEF7C9FA041E17D007A808 +:10747000FEF731FA04A8FEF72EFA01A8FEF72BFA60 +:107480000027B0E0494604A8FFF7DEFC041E5FD1E8 +:107490005C4A1368013313605AE0002CE7D104AA58 +:1074A000110001A8FEF75EFE041E69D0002CDED19B +:1074B00053469F0047443B689B4601AA19001800A9 +:1074C000FEF750FE041E66D0002CD0D13B680C2283 +:1074D00093469B4401AA59465846FEF743FE041EB4 +:1074E00064D0002CC3D13B680C2293469B4404AA71 +:1074F00059465846FEF736FE041E62D0002CB6D11F +:1075000038684B469968FEF73FFA041EAFD13868D9 +:107510004B4699680C30FEF737FA041EA7D138683D +:107520001830FEF7D8F95346002BA0D001235B4258 +:107530009C46E2445346002B93D05A00524492009A +:107540000C3AAA1807A904A8FEF70CFE041E99D04D +:10755000002C8CD153469B0042469A58183207A9FA +:107560000800FEF7FFFD041E97D1494607A8FFF764 +:107570006BFC041E91D1234A1368013313608CE71E +:10758000494601A8FFF760FC041E8FD11D4A13680D +:10759000013313608AE749465846FFF755FC041E3D +:1075A00092D1184A1368013313608DE74946584653 +:1075B000FFF74AFC041E94D1124A1368013313608A +:1075C0008FE749465846FFF73FFC041E96D10D4A07 +:1075D00013680133136091E77800C0198000281800 +:1075E000FEF779F90137B742F6D328000AF0F6FF23 +:1075F00020000BB0F0BCBB46B246A946A046F0BD89 +:10760000014CF5E78463010880B2FFFFF0B589B053 +:1076100006000F0014001D0005A8FEF756F902A889 +:10762000FEF753F9321D00952300022105A8FFF74C +:10763000C7F8041E0CD005A8FEF74DF902A8FEF706 +:107640004AF923000E3300D167E0200009B0F0BDF5 +:107650003D00183505AA29002800FEF783FD041E09 +:107660002FD0002CE7D105AA110002A8FEF77AFD61 +:10767000041E31D0002CDED102AA39003800FEF7FA +:1076800071FD041E33D0002CD5D105AA02A9080033 +:10769000FEF768FD041E35D0002CCCD10C3702AAB1 +:1076A00039003800FEF75EFD041EC4D131003800F9 +:1076B000FFF7CAFB041EBED1194A136801331360D9 +:1076C000B9E731002800FFF7BFFB041EC9D1144AF7 +:1076D000136801331360C4E7310002A8FFF7B4FB5D +:1076E000041EC7D10E4A136801331360C2E731008C +:1076F0003800FFF7A9FB041EC5D1094A13680133FE +:107700001360C0E7310002A8FFF79EFB041EC3D13F +:10771000034A136801331360BEE7024C95E7C04685 +:107720008463010800B3FFFFF0B5CE46474680B53D +:107730008FB0050001911700604A13680133136090 +:107740000BA8FEF7C2F808A8FEF7BFF805A8FEF7D9 +:10775000BCF802A8FEF7B9F8AB69002B1CD03A00C0 +:10776000390008A8FEF7FEFC041E00D183E0002CBF +:1077700000D18CE00BA8FEF7AEF808A8FEF7ABF836 +:1077800005A8FEF7A8F802A8FEF7A5F820000FB09C +:10779000C0BCB946B046F0BD390018310A0008A88F +:1077A000FEF7E0FC041E50D0002CE3D108AA3900FB +:1077B00005A8FEF771FC041E0DD12E1D310005A891 +:1077C000FEF7F4FA002806DB320005A90800FEF7F0 +:1077D000FDFB041EF1D0002CCCD108AA390002A870 +:1077E000FEF782FC041E0FD1029B002B0CDA002155 +:1077F00002A8FEF781FB002806D02A1D02A9080076 +:10780000FEF74AFC041EEFD0002CB3D102AA05A952 +:1078100008A8FEF7A7FC041E22D0002CAAD1032240 +:1078200008A90BA8FEF720FD041EA3D12C1D2100E2 +:107830000BA8FEF7BBFA00284EDB22000BA90800BC +:10784000FEF7C4FB041EF1D094E7290008A8FFF757 +:10785000FBFA041EA8D11A4A136801331360A3E788 +:10786000290008A8FFF7F0FA041ED6D1144A1368BD +:1078700001331360D1E7290008A8FFF7E5FA041ED9 +:1078800000D074E70E4A1368013313606FE70322D8 +:1078900008A90BA8FEF7E8FC041E00D06AE72C1D1F +:1078A00021000BA8FEF782FA00280BDB22000BA9AF +:1078B0000800FEF78BFB041EF1D05BE78063010834 +:1078C0008463010810239846A84400214046FEF72F +:1078D00013FB002800D0CBE00C239946B9444A465C +:1078E000494605A8FEF73EFC041E00D119E1002C14 +:1078F00000D03FE7012105A8FEF772F9041E0DD163 +:107900002E1D310005A8FEF751FA002806DB3200D3 +:1079100005A90800FEF75AFB041EF1D0002C00D088 +:1079200028E705AA390008A8FEF71CFC041E00D1B0 +:1079300003E1002C00D01DE7012108A8FEF750F953 +:10794000041E0ED12B1D9846190008A8FEF72EFA2A +:10795000002806DB424608A90800FEF737FB041E94 +:10796000F0D0002C00D005E705AA110002A8FEF710 +:10797000F9FB041E00D1ECE0002C00D0FAE6012156 +:1079800002A8FEF72DF9041E0ED12B1D98461900F2 +:1079900002A8FEF70BFA002806DB424602A90800FF +:1079A000FEF714FB041EF0D0002C00D0E2E60BAA78 +:1079B000110005A8FEF7D6FB041E00D1D5E0002C6F +:1079C00000D0D7E608AB05AA11002800FFF720FA7F +:1079D000041E00D0CEE608AB05AA11002800FFF770 +:1079E00017FA041E00D0C5E605AB08AA110028004E +:1079F000FFF70EFA041E00D0BCE60BAB08AA11007C +:107A00002800FFF767FA041E00D0B3E602AB08AA0D +:107A100011002800FFF7FCF9041E00D0AAE63B0085 +:107A200018334A4602A92800FFF754FA041E00D072 +:107A3000A0E6012202A92800FFF764FA041E00D084 +:107A400098E605A9019D2800FDF7D8FF041E00D087 +:107A500090E628000C3008A9FDF7D0FF041E00D0E6 +:107A600088E62800183002A9FDF7C8FF040081E667 +:107A7000390018310A0008A8FEF774FB041E2FD045 +:107A8000002C00D076E608AA110005A8FEF76AFBD4 +:107A9000041E30D0002C00D06CE6424605A908A890 +:107AA000FEF760FB041E31D0002C00D062E608AA6D +:107AB0000BA90800FEF7F0FA041E0DD12E1D3100AF +:107AC0000BA8FEF773F9002806DB32000BA90800AB +:107AD000FEF77CFA041EF1D0002C00D1FCE649E64A +:107AE000290008A8FFF7B0F9041EC9D1254A136878 +:107AF00001331360C4E7290005A8FFF7A5F9041EA8 +:107B0000C8D1204A136801331360C3E7290008A8CD +:107B1000FFF79AF9041EC7D11A4A1368013313609C +:107B2000C2E7290005A8FFF78FF9041E00D0DEE6A2 +:107B3000144A136801331360D9E6290008A8FFF737 +:107B400083F9041E00D0F4E60E4A13680133136073 +:107B5000EFE6290002A8FFF777F9041E00D00BE733 +:107B6000084A13680133136006E7290005A8FFF7E8 +:107B70006BF9041E00D022E7024A13680133136038 +:107B80001DE7C04684630108036B002B06D0C36B5E +:107B9000002B01D0012070470220FCE70020FAE70B +:107BA00010B50400FDF791FE20000C30FDF78DFEAE +:107BB00020001830FDF789FE10BD70B504000025C7 +:107BC00005700430FDF781FE20001030FDF77DFECA +:107BD00020001C30FDF779FE20002830FFF7E0FF81 +:107BE00020004C30FDF771FEA565E56525666566EC +:107BF000A566E56625676567A56770BD10B50400D5 +:107C0000FFF7DBFF20007C30FDF75FFE20008830AF +:107C1000FFF7C6FF10BD10B5041E09D0FDF75BFECF +:107C200020000C30FDF757FE20001830FDF753FE02 +:107C300010BD70B5041E32D0036E012B09D1200097 +:107C4000FFF7BEF8002826D1636F002B23D0002554 +:107C50001BE00430FDF73FFE20001030FDF73BFE37 +:107C600020001C30FDF737FE20002830FFF7D3FF3F +:107C700020004C30FDF72FFEE1E7606FEB005B1951 +:107C80009B00C018FFF7C7FF0135A36FAB42F4D8C4 +:107C9000606F0AF0A3FC7C21200001F0AFF870BDFA +:107CA00010B5041E09D0FFF7C4FF20007C30FDF79B +:107CB00012FE20008830FFF7AEFF10BD70B5040043 +:107CC0000D00FDF79BFE002800D070BD29000C318F +:107CD00020000C30FDF792FE0028F6D12900183163 +:107CE00020001830FDF78AFEEFE710B504000121EF +:107CF000FDF7EAFE002800D010BD20000C30012165 +:107D0000FDF7E2FE0028F7D1200018300021FDF732 +:107D1000DBFEF1E7F0B5C64600B598B080460191AC +:107D200017001D007E4A1368013313603E001836A9 +:107D300000213000FEF7E0F800284CD02B6A002B21 +:107D400006D0280018300021FEF7D6F8002848D0C9 +:107D50002B6A002B07D0280018300121FEF7CCF841 +:107D6000002800D093E115A8FDF7AFFD12A8FDF79C +:107D7000ACFD0FA8FDF7A9FD0CA8FDF7A6FD09A80D +:107D8000FDF7A3FD06A8FDF7A0FD03A8FDF79DFDE7 +:107D90003200310015A8FEF7E5F9041E27D0002CAB +:107DA00030D015A8FDF797FD12A8FDF794FD0FA898 +:107DB000FDF791FD0CA8FDF78EFD09A8FDF78BFDE1 +:107DC00006A8FDF788FD03A8FDF785FD200018B083 +:107DD00080BCB846F0BD29000198FFF76FFF040092 +:107DE000F4E739000198FFF769FF0400EEE7414628 +:107DF00015A8FFF729F8041ED1D14A4A13680133A8 +:107E00001360CCE7320015A912A8FEF7ABF9041EE7 +:107E10005FD0002CC5D12A0015A90800FEF7A2F9F1 +:107E2000041E61D0002CBCD12A000C3212A908001B +:107E3000FEF798F9041E62D0002CB2D13A0015A9C1 +:107E40000800FEF751F9041E10D1159B002B0DDA26 +:107E5000002115A8FEF750F8002807D043461A1D48 +:107E600015A90800FEF718F9041EEED0002C00D06A +:107E700097E73D000C352A0012A90800FEF734F9F7 +:107E8000041E10D1129B002B0DDA002112A8FEF760 +:107E900033F8002807D043461A1D12A90800FEF740 +:107EA000FBF8041EEED0002C00D07AE7002115A8C4 +:107EB000FEF722F8002837D1002112A8FEF71CF89F +:107EC000002827D13A0001994046FFF72DFC040015 +:107ED00067E7414612A8FEF7B7FF041E99D1114A81 +:107EE00013680133136094E7414615A8FEF7ACFF11 +:107EF000041E97D10B4A13680133136092E7414681 +:107F000012A8FEF7A1FF041E96D1064A136801339A +:107F1000136091E70198FFF7E8FE040041E7C046CF +:107F20007C6301088463010815AA310003A8FEF7E9 +:107F300019F9041E00D186E0002C00D031E715AA03 +:107F400011000FA8FEF70EF9041E00D187E0002CE7 +:107F500000D026E715AA0FA90CA8FEF703F9041E06 +:107F600000D188E0002C00D01BE73B000FAA1100D5 +:107F70004046FEF7AFFF041E00D012E70FA915A878 +:107F8000FDF73CFD041E00D00BE7012215A9404679 +:107F9000FEF7B8FF041E00D003E712AB1A0009A9D0 +:107FA0004046FEF797FF041E00D0FAE615AB09AA7B +:107FB00011004046FEF72CFF041E00D0F1E60CAB8A +:107FC00009AA11004046FEF723FF041E00D0E8E690 +:107FD00009AB0FAA11004046FEF71AFF041E00D09D +:107FE000DFE612AB0FAA11004046FEF773FF041E36 +:107FF00000D0D6E62B000CAA11004046FEF76AFF1F +:10800000041E00D0CDE60CAB0FAA06A94046FEF731 +:10801000FFFE041E00D0C4E609A9019D2800FDF75B +:10802000EDFC041E00D0BCE628000C3006A9FDF7CC +:10803000E5FC041E00D0B4E62800183003A9FDF7C3 +:10804000DDFC0400ADE6414603A8FEF7FDFE041E7C +:1080500000D071E70F4A1368013313606CE74146A3 +:108060000FA8FEF7F1FE041E00D070E7094A13685E +:10807000013313606BE741460CA8FEF7E5FE041ED2 +:1080800000D06FE7034A1368013313606AE7024CBC +:108090009CE6C0468463010880B0FFFFF0B5DE4671 +:1080A00057464E464546E0B58BB081460E0011005E +:1080B000149F013B9A460123524693400193DBB241 +:1080C0009B463000FFF7FAFD00285DD1002507E050 +:1080D000220021004846FFF727FB002854D1013534 +:1080E00053467B43AB421FD93900280009F002FFF9 +:1080F00001228240D3B29846FF231340DC00E418EB +:10810000A40034193900280009F07AFF0029DFD1D2 +:1081100043465B08D900C918890071182000FFF791 +:10812000CDFD0028D4D02FE00022012109E0CB00B2 +:108130005B189B00F318940003A823504900C9B2B0 +:1081400001325945F3D303A94846FFF725F9002822 +:108150001AD101275F4521D23D003C002300013C9C +:10816000002B18D02B19D900C9188900E200121968 +:108170009200B218EB005B199B00F3187118484687 +:10818000FFF7C8FD0028E9D00BB0F0BCBB46B246F3 +:10819000A946A046F0BD7F00FFB2DBE7002207E062 +:1081A000CB005B189B00F318920003A813500A0041 +:1081B000511CFF23019803409942F1D303A948467B +:1081C000FFF7EAF8E0E7F0B5D6464F4680B58DB048 +:1081D00006000D0091469A46159F03A8FFF7E0FCA4 +:1081E000149BDB5D009353464A4629003000FEF79E +:1081F000C6FE041E08D003A8FFF70DFD20000DB039 +:10820000C0BCBA46B146F0BD280018300121FDF7C8 +:108210005BFC041EEFD1169B002B07D0179B169A10 +:1082200029003000FFF7F2F9041EE4D1002FE2D05C +:10823000013F2A0029003000FFF776FA041EDAD148 +:10824000149BDB5D009353464A4603A93000FEF7BA +:1082500096FE041ECFD103AB2A0029003000FFF7A1 +:1082600059FD041EE2D0C6E7F0B5A9B004000E0027 +:1082700011001D002EAB1F782FAB1B789F226A4484 +:1082800001920093309B07AAFEF700FF002801D05F +:1082900029B0F0BD339B0493329B0393319B02932F +:1082A000309B019307AB00933B002A003100200074 +:1082B000FFF789FF0028EBD19F236B441A78310028 +:1082C0002000FEF738FE0028E2D1319B002B07D0BA +:1082D000329B319A31002000FFF798F90028D7D15E +:1082E00031002000FEF7DCFFD2E70000F0B5DE46EB +:1082F00057464E464546E0B58BB0070008910992B7 +:108300009A460100343118000C30FDF74FFD041E71 +:1083100032D00024E3B2984619003800FEF75CFD25 +:1083200081460300013B01249C40E6B2F86D4844BD +:108330000138494609F0DEFD07904346002B24D062 +:108340007D6F002D21D0169B0593159B0493149BE4 +:108350000393079B02934B46019300962B00099AC7 +:1083600008993800FFF780FF04007B6FAB4243D0D1 +:10837000002D41D000273AE0390028315046FDF762 +:1083800015FD0028C6D10134C4E7FF2323409B46D6 +:108390002421180009F09CFF051E1ED0002407E0D0 +:1083A000E000001980002818FFF7FAFB0134E4B25E +:1083B000B442F5D3169B0193079B00934B4652465C +:1083C00029003800FFF76AFE041ECED14346002B79 +:1083D000B9D07D675B46BB67B5E70E4CC5E7F800D3 +:1083E000C01980002818FFF716FC0137FFB2B7420A +:1083F000F5D328000AF0F2F8002C07D120000BB0CA +:10840000F0BCBB46B246A946A046F0BD0898FFF7AF +:1084100002FCF3E780B2FFFF10B518300021FDF732 +:108420006BFD4342584110BDF0B5C64600B505008E +:108430000F0014001E1E31D00430FDF7A2FB804651 +:108440002800FFF7A1FB01282AD12378002B07D1B0 +:10845000012E27D13800FFF748FC80BCB846F0BD9C +:10846000042B21D143465B000133B3421ED1611C72 +:1084700042463800FDF78BFB0028EED14346591CDD +:10848000611838000C304246FDF781FB0028E4D12A +:10849000380018300121FDF717FBDEE70448DCE760 +:1084A0000448DAE70248D8E70248D6E70048D4E7AC +:1084B00080B0FFFF80B1FFFF70B505000C00080021 +:1084C00018300121FDF718FD002809D12800FFF719 +:1084D0005BFB012806D121002800FEF71DFE70BDC0 +:1084E0000148FCE70148FAE780B3FFFF80B0FFFFD7 +:1084F00070B504000D00FFF747FB012810D10121E2 +:108500002800FDF7F9FC002808DB21004C31280089 +:10851000FDF74CFC002801DA002070BD0148FCE7A3 +:108520000148FAE780B3FFFF80B0FFFFF0B585B0E8 +:1085300005000C0016001F001100FFF7D9FF0028EE +:1085400001D005B0F0BD39002800FFF7B5FF0028C5 +:10855000F7D12800FFF718FB01280CD10C9B0293E0 +:108560000B9B01930A9B00933B00320021002800E3 +:10857000FFF7BCFEE5E70148E3E7C04680B0FFFF38 +:10858000F0B585B006000D0014001F00002110009A +:10859000FDF7B2FC002806D12800FFF7A6FB040077 +:1085A000200005B0F0BD01212000FDF7A5FC00284A +:1085B00005D139002800FFF781FB0400F0E7012115 +:1085C00049422000FDF798FC002813D1390028000B +:1085D000FFF774FB041EE3D10C3500212800FDF7E2 +:1085E0008BFC0028DCD0311D2A002800FDF77CFD23 +:1085F0000400D5E70A9B02930023019300933B00FC +:10860000220029003000FFF791FF0400C8E70000B6 +:10861000F0B58DB005000E0014001F00FFF7B4FA8E +:1086200001282AD103A8FFF7BBFA149B00933B0053 +:10863000220003A92800FFF7A3FF041E05D003A80A +:10864000FFF7E9FA20000DB0F0BD149B0093139BD7 +:10865000129A31002800FFF793FF041EEFD1330078 +:1086600003AA31002800FFF755FB041EE7D13100B3 +:108670002800FEF715FE0400E1E7014CE2E7C046E2 +:1086800080B1FFFFF0B5002406E08368A5005B1908 +:108690001D68ED431D6001345709A742F5D200243F +:1086A0008368A6009B191D6801351D60836801342D +:1086B0009D59002D01D1A742F2D2012464420460E9 +:1086C000D208032082439B181A68521A1A60F0BD20 +:1086D000F8B504001121FDF711F9051E00D0F2E1F3 +:1086E000A2681168136AC91899429B415842536A9B +:1086F000591899429B415B421B18D66AB14280418E +:1087000040421B1ADBB2891B166BB14280414042CA +:108710001B1ADBB2891B566BB142804140421B1AC7 +:10872000DBB2891B966BB142804140421B1A58B2A2 +:10873000891B1160A26851681B0600D593E10918D6 +:10874000814280414642506A411881428041404204 +:108750008019C0B2936A591899429B415B421B1819 +:10876000DBB2166BB142804140421B1ADBB2891B5F +:10877000566BB142804140421B1ADBB2891B966B9B +:10878000B142804140421B1ADBB2891BD66BB14219 +:10879000804140421B1A58B2891B5160A2689168FF +:1087A0001B0600D564E10918814280414642906A67 +:1087B00041188142804140428019C0B2D36A5918A1 +:1087C00099429B415B421B18DBB2566BB142804120 +:1087D00040421B1ADBB2891B966BB142804140427A +:1087E0001B1ADBB2891BD66BB142804140421B1A77 +:1087F00058B2891B9160A168CA681B0600D53CE18C +:108800001318834280414742C86AC3188342B64165 +:108810007642F619F6B2C31883428041404280196D +:10882000C0B20A6BD3189342B64176423618F6B2FC +:10883000D3189342804140428019C0B24A6BD3188A +:108840009342924152421218D2B2CE6BB34280414F +:108850004042121AD2B29B1B0E6AB3428041404280 +:10886000121AD2B29B1B4E6AB34280414042121A86 +:1088700050B29B1BCB60A1680B69120600D501E1C9 +:108880001A18824280414742086B82188242B641E0 +:108890007642F619F6B2821882428041404280192F +:1088A000C0B24B6B9A189A42B64176423618F6B26D +:1088B0009A189A42804140428019C0B28B6B9A1834 +:1088C0009A429B415B421B18DBB24E6AB242804126 +:1088D00040421B1ADBB2921B8E6AB2428041404278 +:1088E0001B1A58B2921B0A61A1684A691B0600D57F +:1088F000CDE01218824280414742486B8218824282 +:10890000B6417642F619F6B2821882428041404260 +:108910008019C0B28B6B9A189A42B64176423618CB +:10892000F6B29A189A42804140428019C0B2CB6B8D +:108930009E189E42924152421218D2B2886A8642D2 +:108940009B415B42D21AD2B2361ACF6ABE429B41D9 +:108950005B42D21A50B2F61B4E61A1688B691206B7 +:1089600000D599E01B18834280414642886BC318AA +:108970008342924152429219D2B2C3188342BF41FC +:108980007F42BF18FFB2CA6BD3189342B6417642FA +:10899000F619F6B2D3189342924152429219D2B2CA +:1089A000C3188342804140428018C0B24A6BD3183A +:1089B0009342924152421218D2B20E6AB34280419F +:1089C0004042121AD2B29B1B4F6ABB4280414042C6 +:1089D000121A56B2DB1B8B61A068C369120660D401 +:1089E0009B19B342B6417242C66BF318B342894138 +:1089F00049428918C9B2F318B342924152425218FF +:108A0000D2B2F318B342B6417642B618F6B2016A52 +:108A1000CB188B42894149428919C9B2866AB3424F +:108A200092415242891AC9B29B1BC66AB342924113 +:108A30005242891AC9B29B1B066BB3429241524201 +:108A4000891AC9B29B1B466BB34292415242891AA2 +:108A500049B29B1BC3610B1C002927DB5BB2A268D8 +:108A60001362082329E04642B142B64141186AE642 +:108A70004642B142B641411899E64742BA42BF4127 +:108A80008318C1E64742BB42BF41C218FCE64742D9 +:108A9000BA42BF41821830E74642B342B641C318DA +:108AA00064E7724293429241F3189DE70023D5E7B1 +:108AB000A2689800121800201060013362689A4280 +:108AC000F6D8002901DB2800F8BD802252002000E2 +:108AD000FFF7D8FDF7E7F8B504000F21FCF70EFF0C +:108AE000061E00D0E2E0A1680B68C869834292418B +:108AF000D2B21B1ACD6AAB4280414042121A50B228 +:108B00005B1B0B60A1684B68120600D5A3E01B1825 +:108B10008342804142420D6AAB4280414042121A78 +:108B2000D2B25B1B0D6BAB4280414042121A50B275 +:108B30005B1B4B60A1688B68120600D590E01B1888 +:108B40008342804142424D6AAB4280414042121A08 +:108B5000D2B25B1B4D6BAB4280414042121A50B205 +:108B60005B1B8B60A168CB6812067ED41B18834206 +:108B700080414542886A834292415242AD1AEDB229 +:108B80001B1AC869C3188342804140424019C0B2D1 +:108B9000CA6AD318934292415242121850B2CB6023 +:108BA000A1680B69120665D41B18834280414542B7 +:108BB000C86A834292415242AD1AEDB21B1A086A4A +:108BC000C3188342804140424019C0B20A6BD31897 +:108BD000934292415242121850B20B61A1684B6904 +:108BE00012064CD41B18834280414542086B8342D5 +:108BF00092415242AD1AEDB21B1A486AC318834221 +:108C0000804140424019C0B24A6BD318934292410E +:108C10005242121857B24B61A0688369120633D4CE +:108C2000DB19BB42BF417D42416B8B4292415242B4 +:108C3000AD1AEDB25B1A816ACB188B428941494269 +:108C4000491949B283610B1C002922DB5BB2A2687F +:108C5000D361072324E0424293429241C3185AE76A +:108C6000424293429241C3186DE74542AB42AD4147 +:108C7000C3187FE74542AB42AD41C31898E7454270 +:108C8000AB42AD41C318B1E77D42AB42AD41FB18E9 +:108C9000CAE70023DAE7A2689D0052190025156093 +:108CA000013362689A42F6D8002901DB3000F8BD32 +:108CB000E0222000FFF7E6FCF8E7000070B50400B2 +:108CC0000430012565609208A260E160002B05D0A8 +:108CD00001222261049A92086261A3610125E56183 +:108CE000069B9B082362059B636226004C36E56465 +:108CF0000C9B9B0823650B9B6365A562089B9B08E7 +:108D0000E362079B236365630A9B9B08A363099B3C +:108D1000E36325646564084BA364FCF719FFA06551 +:108D20003000FCF715FFE06525660D9B63670023A7 +:108D3000A367002070BDC046E001000830B58BB0CD +:108D400004000D00FEF775FF2570022D05D0032DE0 +:108D50001DD0002323701A4817E01A4B63661A4986 +:108D60001A4B09931C230893194A07920693194A30 +:108D700005920493184A03920293184B019300231F +:108D8000009320222000FFF799FF0BB030BD144B59 +:108D900063661449144B099320230893134A0792DE +:108DA0000693134A05920493124A03920293124BBC +:108DB00001930023009320222000FFF77FFFE4E7C8 +:108DC00080B1FFFFD78A0010D44701102441011061 +:108DD000B84701109C4701108047011064470110FB +:108DE000D1860010B44E0110F4470110944E0110CA +:108DF000744E0110544E0110344E011010B50A1E6D +:108E000003D0024B1B680021984710BDE401000805 +:108E100010B56C22002109F0F3FF10BD00230360A0 +:108E20004360002912D1124B8360124BC360124B76 +:108E30000361124B4361124B8361124BC361124BAE +:108E40000362124B4362816600207047104B8360BF +:108E5000104BC360104B0361104B4361104B836197 +:108E6000104BC361104B0362104B4362EBE7C046EB +:108E700067E6096A85AE67BB72F36E3C3AF54FA5AB +:108E80007F520E518C68059BABD9831F19CDE05BD7 +:108E9000D89E05C107D57C3617DD703039590EF7DD +:108EA000310BC0FF11155868A78FF964A44FFABEA3 +:108EB000F0B5DE4657464E464546E0B5DBB00F906E +:108EC00000230400072B09D89A1C920010591A009D +:108ED0004232920010AD50510133F3E7002010E010 +:108EE00082008B5C1B068A185478240423439478F0 +:108EF00024022343D2781343821C920010AC1351F6 +:108F000001300F28ECD90023009376E210AA9223B7 +:108F10005B00D25810A88C21490041580D00062052 +:108F2000C5412B000D000B24E5416B4008001925BD +:108F3000E8414340D21810AE0835FF3573598E27EB +:108F40007F00F659B2463000584008405840121889 +:108F5000FE48009FBC008446205812180237029732 +:108F6000BD0010AE0595A8591218109284277F00F5 +:108F7000F4592000073FFF3FF84127000D25EC4141 +:108F8000250045403C001620C4416540862464000D +:108F90003659B1463000384010AE04343659B04628 +:108FA0004C4604973C43270037403843281811901B +:108FB00010AE8A256D002C007559551935511218BF +:108FC000103432512C000620C441270028000B2405 +:108FD000E04178402E001927FE417040181856468F +:108FE0004E4033002B4056467340C318009E701C01 +:108FF000800067460397C0591B18F01C8600B446D2 +:1090000010AE604680591818019010901600022783 +:10901000FE41300016000B37FE4137004740160076 +:109020001620C64177401600049B1E4030001E00EB +:1090300016434B461E40304338181190019FBB46E3 +:10904000D84410AE88277F004346F35183445846E6 +:1090500090235B000190F05046460620C641370041 +:1090600046462300E6413000784046461927FE4137 +:10907000704050440E006E403700464637404F4027 +:10908000C7190398059C20583818029F0237BF0063 +:1090900010AEBF59C01910905E460227FE41B2467D +:1090A0005E460D24E6413700564677405E46093459 +:1090B000E6417E40B2465C465E46164037001600EA +:1090C0002643049C26403743BA44564611964E46E2 +:1090D000371810AE862464003751504404008E20A7 +:1090E0004000029434503E000624E641B2463E0061 +:1090F000DE41B146564648464640B1463E0013342E +:10910000E641B2464E4650464640B1468944414645 +:109110006940394069404944039866463658B44628 +:109120006144009B5E1DB600B24610AE53469E5988 +:10913000B44661441091029B1E00173CE641B446C0 +:109140001E000B34E641B14666464C466640B146C9 +:109150001E001624E641B4464E4664466640B146BB +:109160001C001E00019B1E40B4461E0026431640F4 +:10917000B34666465C462643B446CC4466461196E2 +:10918000049E741810AE84235B00F45061441033C5 +:10919000F1502600133BFF3BDE41B146260005336C +:1091A000DE41B4464E4663465E40B446260019236F +:1091B000DE41B14666464B465E40B446AC44464648 +:1091C0007E4035002540464675406544009B1E1D87 +:1091D000B6003658B44665449E1DB60010AB0496E2 +:1091E000F658B446AC44664610960B000225EB4197 +:1091F00099460B000B35EB411D004E4675400E00A5 +:109200001623DE416E40B1460E00029B1E40350023 +:109210001E000E43019B1E4035434D44119591465F +:10922000E14410AE922252004B46B3502A006244F1 +:109230008A256D0072514E460623DE41B4464E46E5 +:109240000A3DFF3DEE413500664675404E461333FC +:10925000DE417540A8443E00664035004E4635402C +:109260007D40454456463658B4466544009BDE1D55 +:10927000B600B34610AE58468659B44665441095BC +:1092800016000220C641B44616000D23DE41B0464A +:10929000664640464640B04616001620C641B446D3 +:1092A000464660464640B04616000E40B4460E00A4 +:1092B000164302980640B246664650460643B446F8 +:1092C000E04446461196019EB446AC4410AE1433B9 +:1092D000FF336046F0504544103BF55066460B3B6B +:1092E000FF3BDE41B04666460533DE41330046466D +:1092F000734066461920C6417340FF184E466640CB +:109300003300664633406340FB18039F049EF759C1 +:10931000DB190826B04600988246D044464601969E +:10932000B70010AEBF59DB1910932E000227FE4183 +:10933000B0462E000B37FE413700464677402E00E0 +:109340001620C6417E40B04602E0C046D44E011011 +:109350002E001640370016002E430E403743B84407 +:1093600040461190029882469A4410AE8E204000EA +:109370005746375043441F0086235B00F75056463C +:10938000073BFF3BDE41330056461238FF38C641EB +:10939000734056460E30C6417340E31864464E464D +:1093A00074405046044074401B1903985C46205892 +:1093B0001B18009E0936B60010A830581B181093D1 +:1093C00038000224E0413E000B34E64170403E008C +:1093D0001624E64170403C002C403D432A40224385 +:1093E00082181192C91810AC8C20400021509B1893 +:1093F00084277F00E351019B0093009B0F2B00D833 +:1094000084E510231800DCE310AA92235B00D358F4 +:1094100011008C22520089588C460A000621CA414C +:1094200061460B24E1414A4061461926F1414A4018 +:109430009B1810AA90277F00D15914008E22520049 +:10944000A458A24622004A40644622404A409B1843 +:10945000FE4A84000192A2589B18871E069710AE00 +:109460000A94A45922001127FA411500220002375C +:10947000FA415540A20A6A40C41F0794441FA40041 +:10948000A459121904000D3CA400A14634004E4614 +:1094900035592F000724E7413E002C001227FC41DC +:1094A0007440ED086C40141902000E3A920010AEA0 +:1094B0009259A218841C0B94A4000494A2519846BB +:1094C00090444346109384225200B4582700073A30 +:1094D000FF3AD7413E0027000B32D7417E402200A1 +:1094E0001627FA41564010AAF637D2599346224021 +:1094F000150010AF88225200BA585F462743174024 +:109500003D437519119510AB8A277F003E00DF5946 +:10951000474400979F512B00434410AF92256D00A4 +:109520007B51009F1F3DFF3DEF413E00009F0535F1 +:10953000EF413D007540009F1926F7417D404D19D0 +:10954000514667467940009F39405746794069182F +:10955000451CAD00019E0595AD594919471E089758 +:1095600010AF059DED592F001126F741B8462F0089 +:109570000236F7413E0047467E40AD0A6E40871FE7 +:109580000997051FAD0010AFED59761907000C3F84 +:10959000BF0010AD0C977D59A8462F000725EF415D +:1095A000029747460B35EF413D00029F7D404746FD +:1095B000FF087D40751910AF4E46F659AD19C61C0F +:1095C000B6000D96F5518946A944494610911F00F1 +:1095D0000226F7413D001F000B36F7413E006E406A +:1095E0001F001625EF417E401F0027403D00270049 +:1095F0001F4359460F403D43751911954A4410A920 +:109600008826760002928A514D440F00902149002D +:1096100003957D5002990F000625EF413E000F0093 +:109620000535EF413D0075400F001926F7413E001A +:109630006E4056446746009D6F403D000D406146B8 +:109640004D4075190199049A5658AD1910AFD65965 +:1096500037001121CF41B94637000231CF41B8461A +:109660004F4641464F40B60A7E40C71EBF00B8462F +:1096700010AF4146CF59B84646440B277F42B84603 +:1096800080444746BF0010A90E97795889460F00BD +:109690000721CF41BA464F460B31CF41B846574616 +:1096A00041464F404946C9084F40B846B04410AE05 +:1096B0000C9FBE5946440B990227B84641448F007F +:1096C00010A90B977E50AE191096039A1700022529 +:1096D000EF41B84617000B35EF413D0047467D404E +:1096E00017001621CF416F40B84617001F403D00BC +:1096F0001F00174327403D4345441195D846B044C9 +:1097000010AFF63142467A5076198E256D007E51A3 +:109710004746173DFF3DEF41B94647460535EF4106 +:109720003D004A4655404746F339CF417D40AC4461 +:10973000009F02994F403D0042461540009F7D40EA +:10974000654401990D9F7A589446AC4410AABD58BF +:109750002F001121CF41BA462F000231CF41B94627 +:1097600057464A465740AD0A7D40069FBA0091468B +:1097700010AA4F46BA589146A94407000A3FBF00B5 +:1097800010AA0697BA58924617000725EF41BB4624 +:1097900017000B35EF413D005A4655405246D2085E +:1097A00055404D4410AA0E9FBA5891464D44421D53 +:1097B0009200934610AA5F46BD506544109537004D +:1097C0001139CF41BC4637000B31CF41B94667460E +:1097D0004A465740B94637000931CF41BC464F464B +:1097E00062465740B9463700039A1740BC461700F7 +:1097F00037431F40BA46674652461743BC46E144CA +:109800004A461192A446AC4410AA842464006746D8 +:109810001751AA46CA4454468C256D005451133D35 +:10982000FF3DEF41B94667460535EF413D004A46E9 +:10983000554067460331CF417D40009FB9464D44B6 +:10984000474602994F40624602E0C046D44E01109E +:1098500017404F40EF19051DAD0001996D587F1954 +:10986000009710AA0B998D582F001121CF41BA46AD +:109870002F000231CF41B94657464A465740AD0AFC +:109880007D40089FBA00914610AA4F46BA589146AB +:10989000A9440700093FBF0010AA0897BA5817004B +:1098A0000725EF4111000B35E9410D007D40D2083D +:1098B00055404D4410AA06998A5891464D44821D40 +:1098C000910010AA06918D50009FB946A9444F46B9 +:1098D0000097109721000225E941894621000B35A8 +:1098E000E9410D004A46554027001621CF416F40FF +:1098F000B946270037403D003700274303990F4002 +:109900003D434D441195009FB9464B4410AA922106 +:109910004900009353507F198A235B00D750009968 +:109920000B000625EB4199460B000535EB411D0068 +:109930004A4655400B001921CB415D40029B994698 +:109940004D44424663465A40009B1A4043465A40A3 +:10995000AA1801995B465D58521910AB5D46ED5847 +:109960002B001121CB419A462B000231CB41994665 +:10997000534649464B40AD0A5D4010A90A9B5B58CF +:109980009946A9440300083B9B000A935B589A46FA +:109990000725EB419B4653461221CB411D005B46F8 +:1099A0005D405346DB085D404D4410A9089B5B5861 +:1099B00099464D44C31D9B009B460B005946CD5014 +:1099C00055192A0010953B000221CB4199463B00D6 +:1099D0000B31CB411D004B465D403B000931CB4173 +:1099E0006B4099463B0023401D0023003B4333401E +:1099F0001D434D44119503999146494410AA902363 +:109A00005B00D150A9444D4610AA103B0295D55099 +:109A10000A000625EA4191460A000535EA4115008B +:109A20004A4655400B001922D3415D40A844624686 +:109A3000009B5A4015000D40624655404544019A2E +:109A4000069B9A589046A84410AA9D582B001122B4 +:109A5000D3419A462B000232D341994653464A4697 +:109A60005340AD0A5D4010AA059B9B589946A944F6 +:109A7000079B9B0003939B589A460725EB41524650 +:109A80000B35EA4115005D405346DB085D404D440F +:109A900010AA0A9B9B5899464D4408239946814435 +:109AA0004B4605939B00994613004A46D550A8445F +:109AB00043461093029A13000225EB419946130086 +:109AC0000B35EB411D004B465D4013001622D34180 +:109AD0006B409946029A13003B401D003B00134324 +:109AE00023401D434D441195B146C14410AE8E2311 +:109AF0005B004A46F2504544103BF5504B46062663 +:109B0000F34198464B460536F3411E0043465E40FE +:109B10004B461922D3415E406644009A51404B4661 +:109B2000194013004B40F318019A594689585B18A5 +:109B300010A95E46765831001122D1418C46310081 +:109B40000232D14162465140B60A714010AA049EC9 +:109B5000B6588919099EB600B658B4460722D641B0 +:109B6000B04666460B32D641424656406246D2085F +:109B700056408E1910AA039989587118093080002F +:109B80008150591810912E000222D641330028002E +:109B90000B32D041434028000932D04143402800D5 +:109BA000029A10402A433A4002439B1811936418CA +:109BB00010AE8C256D007451C91884246400315195 +:109BC00005983F2800D81FE400230F98072B0BD8D7 +:109BD0001A004232920010A954589A1C920011584F +:109BE000091911500133F1E79421490010A8FFF73A +:109BF00005F900205BB0F0BCBB46B246A946A046C2 +:109C0000F0BDC046F8B5CE46474680B506000D000B +:109C1000141E3CD003683F271F404022D21B9046B1 +:109C20001B190360A34202D2436801334360002F33 +:109C300001D044450AD23F2C1CD929003000FFF73F +:109C400037F9002824D14035403CF4E728239946D1 +:109C5000B1444B46D8194246290009F01CF949463F +:109C60003000FFF725F9002812D14544403FE419A0 +:109C70000027E0E7002C01D1002009E03000283067 +:109C8000C0192200290009F006F9002000E0002098 +:109C9000C0BCB946B046F8BD70B504000D000268FE +:109CA0003F231340581CE318283380221A703828A9 +:109CB00079D823002833483A121A1818002109F0DD +:109CC0009FF82268510F6368DB001943D2001E0E13 +:109CD000602026541E0C013026541B0A01302354E8 +:109CE0006323E154110E0133E154110C0133E154AB +:109CF000110A0133E1540133E254210028312000DC +:109D0000FFF7D6F800285CD1E37A2B70A37A6B704A +:109D1000A3681B0AAB70237AEB70E37B2B71A37BE8 +:109D20006B71E3681B0AAB71237BEB71E37C2B72D5 +:109D3000A37C6B7223691B0AAB72237CEB72E37DFD +:109D40002B73A37D6B7363691B0AAB73237DEB736A +:109D5000E37E2B74A37E6B74A3691B0AAB74237E12 +:109D6000EB74E37F2B75A37F6B75E3691B0AAB75FF +:109D7000237FEB75236A1B0E2B76638C6B76236A2D +:109D80001B0AAB76236AEB76A36E002B19D1626AAD +:109D9000120E2A77E28C6A77626A120AAA77626ADE +:109DA000EA7718000DE0260028364022121A3018F3 +:109DB000002109F025F831002000FFF779F800288C +:109DC00000D070BD38220021300009F019F878E782 +:109DD00001BE01487047C04602020204024B0B60FC +:109DE00009231360002070472C02000810B540784A +:109DF00006F022FC10BD000070B504001500914271 +:109E00009B415B4283420AD001234340DBB28A423A +:109E1000894149428B4202D0002C0CD070BD07F022 +:109E2000F3FA06000549280008F064F80100300044 +:109E300006F0CCFDF0E707F05BFDEFE740420F00D6 +:109E4000F8B504000A7813000D3BDBB2012B04D9EE +:109E50000F2A32D14D78013500E04D78002005F011 +:109E600021FE0600002005F0EBFD06F0C5FBF040EA +:109E70000700280006F0C0FBF04006006378002BC6 +:109E80000FD06078E9B205F0BDFD05006378002BC6 +:109E900014D100280BD1320039000020FFF7ACFFAD +:109EA0000CE0020039000120FFF7A6FFE9E73A00C5 +:109EB00031000020FFF7A0FF00E0014D2800F8BDB1 +:109EC00001020204F8B5060004292BD026D8012986 +:109ED0002AD0022920D10124002005F0E3FD05004D +:109EE000002005F0ADFD06F087FB0700EF40E040E5 +:109EF00005007378002B19D07078210005F0B2FDB1 +:109F000004007378002B1ED1002815D12A003900D7 +:109F10000020FFF771FF16E00C4C14E0082911D166 +:109F20000324D9E70224D7E70024D5E7020039004B +:109F30000120FFF761FFDFE73A0029000020FFF76B +:109F40005BFF00E0014C2000F8BDC04600020204A7 +:109F500010B5002903D0407805F00EFD10BD407803 +:109F600005F034FDFAE710B5407805F01DFD10BD91 +:109F700010B503000A000178880706D4013A0320CF +:109F80000840597805F0EAFA10BD013A032008406C +:109F90005978002305F028FBF6E710B503000029E7 +:109FA00006D0027803201040597805F0BFFB10BDA1 +:109FB000027803201040597805F0FAFBF7E700001B +:109FC0000048704754570110F0B585B005000E00E9 +:109FD0000192080001F090FFC7B2002401E00134B3 +:109FE000E4B2BC420FD203A805230370467084700C +:109FF00000F0D0FB0028F2D12E706C700123AB7002 +:10A00000019B6B6000E0014805B0F0BD020D020449 +:10A0100070B582B006000C0000280FD0002C0FD0C5 +:10A0200001A805230370237843706378837000F0E0 +:10A03000B1FB051E06D0280002B070BD01BEEDE7E1 +:10A0400001BEEDE708222100300008F024FF0123C3 +:10A05000B370F0E710B5002808D00378122B07D0B2 +:10A06000032B08D943685B68984710BD01BEF4E72D +:10A07000FFF76EFFF9E7FFF790FFF6E710B500284E +:10A0800008D00378122B07D0032B08D943681B692B +:10A09000984710BD01BEF4E7FFF714FFF9E7FFF79B +:10A0A00067FFF6E710B582B0041E10D0A378002B2E +:10A0B00000D101BE01A805230370237843706378A3 +:10A0C000837000F0AFFB0023A37002B010BD01BE8F +:10A0D000ECE710B5002808D00378082B07D0092B2F +:10A0E00000D001BE00F054FA10BD01BEF4E700F04C +:10A0F000FDF8F9E710B5002808D00378082B07D041 +:10A10000092B00D001BE00F08DFA10BD01BEF4E7AE +:10A1100000F02AF9F9E710B5002808D00378082BD9 +:10A1200007D0092B00D001BE00F0A0FA10BD01BE7F +:10A13000F4E700F04BF9F9E710B5041E1BD020003E +:10A14000FFF7C7FF002800D001BE02212000FFF763 +:10A15000E2FF002800D001BE7823E15A00290CD18B +:10A160002378082B11D02378092B12D07A23E35CB3 +:10A17000002B12D010BD01BEE1E702222000FFF744 +:10A18000B9FF0028ECD001BEEAE7200000F032F869 +:10A19000E9E7200000F06CF9E8E7200000F042FB5E +:10A1A000E8E70000054A80239B019C46604480004C +:10A1B00083585B005B0883507047C0460000204016 +:10A1C0000023032B07D8064A99008A58002A04D195 +:10A1D0000133DBB2F5E7002070470120FCE7C04601 +:10A1E000886301088000C0B24018C0B20230C0B21B +:10A1F00070470000F0B5C64600B50600443001F0D7 +:10A20000CFFFB178324801F0D5FF7478A400E4B2F2 +:10A21000B378E418E4B23434200006F085FA05007F +:10A2200001238340DB435BB22A4A11780B40137051 +:10A23000210006F061FA280000F0A2FC002D29DBC5 +:10A24000AB08254FC0339B00DA59944603212940BF +:10A25000C900FF22904615008D406246AA431500B2 +:10A260008001424602408A402A43DA512000FFF72B +:10A2700099FF72789200D2B2B3789B18DBB2174A7A +:10A280009B0000219950FFF79BFF002819D080BC4C +:10A29000B846F0BD0F232B40083B9B0806339B00BC +:10A2A0000F4A94466344596803221540ED00FC327E +:10A2B0001700AF40B94380010240AA400A435A60E8 +:10A2C000D4E7084800F046FF074B00221A70DEE78B +:10A2D00000002A40AF64010800E100E08863010843 +:10A2E00000ED00E05002000898630108054B9A68F1 +:10A2F000FF231340817801228A4013405A1E934164 +:10A30000D8B2704700002A4070B5022924D008292D +:10A3100022D0012916D001BE1BE000231D430134C9 +:10A32000E4B2032C11D8002D0FD10D4BA200D05850 +:10A330000028F2D0FFF7DAFF002801D00123EDE773 +:10A340000023EBE700240025EBE701235D40054BEC +:10A350001D70044B187870BD024B00221A70F8E78C +:10A36000886301089863010870B50C00022A26D89A +:10A370008378032B00D901BE124910331B025A58AF +:10A38000520052085A50436CC02293434364403AEF +:10A39000134343648378032B00D901BE094910336A +:10A3A0001B025D58802212062A435A508178407859 +:10A3B000FFF718FF0100200000F072FB70BD02489B +:10A3C000FCE7C04600002A400106020402291ED80C +:10A3D0008378032B00D901BE0E4910331B025A5853 +:10A3E000520052085A50436C302293434364134343 +:10A3F00043648378032B00D901BE064910331B0246 +:10A4000058588022120602435A50002070470248D2 +:10A41000FCE7C04600002A4001060204054A8023EA +:10A420009B019C466044800083585B005B0883501E +:10A430007047C046000020400023392B07D8064A49 +:10A4400099008A58002A04D10133DBB2F5E70020D5 +:10A4500000E001207047C0469C630108C3001B1A3E +:10A460009B00C018C0B24018C0B20630C0B27047DE +:10A47000F0B5C64600B50500443001F049FE6B78E2 +:10A48000002B4CD13948A97801F04EFE6B78002B97 +:10A4900002D1AE781C2E44D9012B44D001BE344EDB +:10A4A000300006F041F9040001238340DB435BB236 +:10A4B000304A11780B401370310006F01DF920006E +:10A4C00000F05EFB002C33DBA3082B4FC0339B0056 +:10A4D000DA59944603212140C900FF229046140016 +:10A4E0008C406246A24314008001424602408A40EA +:10A4F0002243DA513000FFF791FF6A78D3009B1AAC +:10A500009B009B18AA789B181C4A9B00002199501D +:10A51000FFF792FF002822D080BCB846F0BD184853 +:10A52000B1E73836BCE7AE781C2EB7D85536B7E75A +:10A530000F232340083B9B0806339B00114A944697 +:10A540006344596803221440E400FC321700A7401A +:10A55000B94380010240A2400A435A60CAE70A4850 +:10A5600000F0F8FD094B00221A70D5E700002840E2 +:10A57000FF030000AF64010800E100E09C630108F4 +:10A580000000294000ED00E060020008846401083A +:10A590004378002B0DD1084B084A12685E21515AAE +:10A5A0005B1881786020125A4A439B185868C00F84 +:10A5B0007047034BF0E7C046000028400C660108D6 +:10A5C0000000294070B5022924D0082922D0012991 +:10A5D00016D001BE1BE000231D430134E4B2392C28 +:10A5E00011D8002D0FD10D4BA200D0580028F2D069 +:10A5F000FFF7CEFF002801D00123EDE70023EBE7B2 +:10A6000000240025EBE701235D40054B1D70044B42 +:10A61000187870BD024B00221A70F8E79C6301089D +:10A620008464010870B504000D00022A19D878234B +:10A63000C35A002B00D101BE636CC02293436364F4 +:10A64000403A13436364A1786078FFF707FF010085 +:10A65000280000F025FA002802D178230022E252D7 +:10A6600070BD0148FCE7C04601060204022907D874 +:10A67000436C302293434364134343640020704788 +:10A680000048FCE701060204F0B504280DD00D00D7 +:10A6900011000700304A4400A45A421C1D2A07D862 +:10A6A000D2B22D4E5200965B04E00D250520F0E756 +:10A6B0003226FF360122BA40284F3A4206D16419A9 +:10A6C0001C801B88B34244D20020F0BDC21ED7B20A +:10A6D000182F1DD8BA00224FBA589746214A00E0D9 +:10A6E000214A1E80002AECD00338C7B2182F2BD87D +:10A6F000B8001E4F385887461D4AF2E71D4AF0E75A +:10A700001D4AEEE71D4AECE71D4AEAE71D4AE8E765 +:10A7100001BE0022E5E71C4AE3E70127BD42D0D293 +:10A720006800805A001980B241181980691CB9422A +:10A73000C7DA4D00AE5A3619B6B2C2E70227EDE7C6 +:10A740001027EBE70227E9E701BE0027E6E71A2713 +:10A75000E4E70E48B9E7C046CC580110280B0A0CB4 +:10A76000945701105C58011094580110F8570110CB +:10A7700098580110C85801109C580110BC5801107D +:10A78000C0580110C458011060580110000D020497 +:10A7900000207047F0B583B005000026F5F7B5FE40 +:10A7A000070028786978AA786B460633FFF76CFFB4 +:10A7B000041E0ED16B4606331B88DA08D2B207217D +:10A7C0000B4016498A5C01369E401640731E9E411E +:10A7D000F6B2002C01D1002E1DD1002C05D038007E +:10A7E000F5F797FE200003B0F0BD28786978AA78C5 +:10A7F0006B460633FFF748FF041EF0D16B46DA883C +:10A80000D308DBB207211140044A01208840D15C03 +:10A810000143D154E3E7024CE1E7C04688640108F4 +:10A82000010D020430B583B00400F5F76EFE05009B +:10A8300020786178A2786B460633FFF725FF031E68 +:10A840000ED16A4606321288D108C9B207241440D4 +:10A8500007480122A240D24352B2445C22404254F3 +:10A86000002B00D001BE2800F5F753FE03B030BD29 +:10A8700088640108020000230020002B00D07047EC +:10A88000002A00D018000133DBB2F6E710B504004F +:10A89000FFF7F0FF200010BD002001E00130C0B242 +:10A8A000102805D8044B1B5C002BF7D040B201E008 +:10A8B000012040427047C0466851011070B5050044 +:10A8C0000C00FFF7E9FF0300114A525D002A10D087 +:10A8D000104A11688A687020085A1218A400EB1AEE +:10A8E00010337220095A4B43E418A4182068C0B2F0 +:10A8F00070BD084B1A6893687021515A5B18A40008 +:10A900007221525A6A43A418E4182068EFE7C0463F +:10A91000685101100C660108F8B5CE46474680B56F +:10A92000070015001C0008AB1B78984609AB1E7881 +:10A93000234B1B5C002B17D0411ACDB22800FFF728 +:10A94000A5FF000204432800FFF794FF000404431E +:10A950001C482043002E04D04246002106F0C0FED1 +:10A9600024E006F017FF21E0FFF790FF030299466D +:10A970001D433800FFF77EFF0304280018434A46B2 +:10A98000224313438021C9051943002E12D10E4BD7 +:10A990001A6893687021515A5B18A4007221525AA8 +:10A9A0007A43A418E418002323600020C0BCB946F1 +:10A9B000B046F8BD4346002206F02EFEF6E7C0463C +:10A9C00068510110001000400C660108F0B5CE4639 +:10A9D00000B584B00C0002924508EDB20123184086 +:10A9E0008146FFF759FF0390264B1F5D1B57002B35 +:10A9F00013DB102F40D8244B1E5D00243A00234B5C +:10AA00007900CB5AA34232D9214BB900CB581B5DF8 +:10AA1000AB4208D00134A4B2F0E77F233B40C2B27E +:10AA20009B18DFB2E5E71B4B9B5C002B02D0B3B257 +:10AA3000A34223D1029B022B05D031003800FFF73F +:10AA40003DFF00281CD1029B002B01D100200FE00C +:10AA5000E2B26B46197B029D013D6B425D4101955F +:10AA60004B46009333003800FFF756FF00E00A48DA +:10AA700004B080BCB946F0BD0748F9E70648F7E7DF +:10AA80000648F5E7FC50011074560110E05601101D +:10AA9000E801000868510110010C0204000C0204D6 +:10AAA00010B50222FFF792FF10BD000070B582B012 +:10AAB0000C008378DA08772B15D8134909688E695A +:10AAC000D201B618C27807251D400092012322004A +:10AAD0002900300001F0DEFC0A2C08D00B2C0CD031 +:10AAE000002002B070BD084A12689669EAE70122A8 +:10AAF0002900300001F026FDF2E700222900300095 +:10AB000001F020FDECE7C0460C66010800B583B0FB +:10AB10000300C20877280FD8094909688869D2015B +:10AB2000801807211940002300930133082201F007 +:10AB3000B1FC002003B000BD014A12689069F0E743 +:10AB40000C66010870B54300C01885B22A000020C9 +:10AB500010E0D308D1B207241440EEB2891BC9B269 +:10AB6000064EF35C2341012423408B401843C0B2BE +:10AB7000013292B2EB1C9A42EBD370BDB064010873 +:10AB8000F8B506000024FF2700E00134A72C0CD8FC +:10AB9000A5B2280005F0C8FDB042F6D12800FFF7A5 +:10ABA000D1FF8742F1D90700EFE73800F8BD000078 +:10ABB00070B582B00E0011000023072B15DC0C4A83 +:10ABC00015782C001C41E40701D50133F5E7DCB210 +:10ABD00001229A40064B15431D706B461C8058801D +:10ABE0000196684605F0ECFD00E0024802B070BD39 +:10ABF000AF640108020D020470B5094C83001C59B2 +:10AC000008481D58002C09D0002D05D00023181E1F +:10AC100001D12000A84770BD0123F8E70123F6E722 +:10AC200024650108F0640108F0B5C64600B50600C9 +:10AC30008846080001F045F907000024012517E0C7 +:10AC4000022231003800FFF7D7FF0137FFB2BC42C4 +:10AC5000F6D84346022B19D0082B17D0012B18D158 +:10AC6000002D16D00D4B01221A7012E00134E4B20F +:10AC70000C2CEED83A0031002000FFF7BDFF051E76 +:10AC8000F4D14346012BF1D10027E0E7034B00222A +:10AC90001A70280080BCB846F0BDC046EF640108B9 +:10ACA000020000200C2806D8044B1B5C934203D002 +:10ACB0000130C0B2F6E7FF207047C046C45901100A +:10ACC00010B5123883B2202B1DD89800104B1B589A +:10ACD0009F46002000E00220FFF7E2FF10BD0320A6 +:10ACE000FAE70420F8E70520F6E70620F4E7072056 +:10ACF000F2E70820F0E70920EEE70A20ECE70B2056 +:10AD0000EAE70C20E8E701BEFF20E5E70120E3E7E2 +:10AD10000859011010B5EFF30580103800B205F0A6 +:10AD20001DFD054B984205D0FFF7CAFF034B80007D +:10AD3000C05810BD0020FCE7FF0300002465010897 +:10AD4000F0B5D6464F464646C0B582B081468846E5 +:10AD500017009A46002614E053469A7863789A4280 +:10AD600001D0002320E001231EE001A81723037077 +:10AD70002378437063788370FFF70CFD002816D0AA +:10AD80000136BE4217D2B4004444A5784D45F7D1F0 +:10AD90005346002BE9D01B78172BE6D153465A783F +:10ADA00023789A42D8D00023002BE9D004E001A8F0 +:10ADB000FFF738FD00E00024200002B0E0BCBA46F6 +:10ADC000B146A846F0BDF0B5CE46474680B583B043 +:10ADD00080460F00160000250023994600E001354B +:10ADE000B5421CD2AC003C19A3784345F7D120787A +:10ADF000FFF756FF01AB17221A70587062789A70ED +:10AE00001800FFF7C7FC0028E9D101A8FFF70AFDE9 +:10AE10002278012393404A461A439146DFE7484689 +:10AE200003B0C0BCB946B046F0BD0000014B187875 +:10AE30007047C046EF64010870B50D001400FFF7BD +:10AE40002FFF134B8000C550124BC450002300202D +:10AE500001E00133DBB20C2B08D80D4A9C00A2584C +:10AE6000002AF6D0012809D00130F2E7002806D1E7 +:10AE7000002D00D001BE084800F06CF970BD01281B +:10AE8000FCD1002DFAD0044800F058F9F6E7C0468E +:10AE900024650108F064010870020008F0B5C64698 +:10AEA00000B50400884616001F0005E00123424655 +:10AEB0001370002B1AD0E4680E4DAC4216D02568F2 +:10AEC000002DF8D020793040B042F4D163793B4076 +:10AED000BB42F0D0A26839003000A8470028E5D175 +:10AEE000012F01D00123E2E70023E0E7200080BC2E +:10AEF000B846F0BD89070000F8B504000F00160041 +:10AF000000E0E468BC420ED02568002DF9D023791A +:10AF10003340B342F5D163799B07F2D4A268022192 +:10AF20003000A847EDE7F8BD70B505000C00F5F757 +:10AF3000ECFAE368002B02D0F5F7EBFA70BD2B6852 +:10AF4000E3602C60F8E7000070B504000D00F5F731 +:10AF5000DCFA01E00C331C002368064A934205D05A +:10AF6000AB42F7D1EB6823600023EB60F5F7D1FA31 +:10AF700070BDC04689070000F0B5D64600B584B064 +:10AF80000D0000F0ABFF0090060002AB0122DA7169 +:10AF9000022809D0082807D0102805D01E4B1B68AE +:10AFA0009A461E4B1F6804E01B4B1F681B4B1B6817 +:10AFB0009A4602ABDC1D009B2A0021003800FFF7F7 +:10AFC0006DFF01902378002B11D1504602AB07335F +:10AFD0001B78002B01D1012E10D002AB07331B7858 +:10AFE000002B16D0002004B080BCBA46F0BD009BF8 +:10AFF0002A0021005046FFF751FFE7E72A00010031 +:10B000005046FFF779FF2A0001993800FFF774FFD7 +:10B01000E3E70348E7E7C04684020008800200082F +:10B02000FF00420070B50C0020212000FFF7A4FFB4 +:10B030000500042C01D0280070BD002005F0FCFAAA +:10B04000034906F057FF0100012005F0BFFCF2E7BD +:10B0500040420F0070B50C0010212000FFF78CFF5C +:10B060000500082C01D0280070BD002005F0E4FA8E +:10B07000034906F03FFF0100002005F0A7FCF2E7BE +:10B0800040420F0010B508000821FFF775FF10BD02 +:10B0900010B50400FFF770FF042C02D0082C15D067 +:10B0A00010BD0F4B1B68DB0705D50E4B1B78002B23 +:10B0B00002D0012300E000230B4A1370002BEFD0D5 +:10B0C000074A136801218B431360E9E7064B1B789D +:10B0D000002BE5D0024A136801210B431360DFE720 +:10B0E00010E000E05A650108F465010810B5080099 +:10B0F000012903D1044B1B88002B03D10221FFF748 +:10B10000C7FF10BD0148FCE758650108FF00420079 +:10B1100010B508000121FFF7BBFF10BD70B504009A +:10B120000D00160004491C2207F0B5FE26602571AB +:10B13000200005F005FE70BDF059011010B5011E8C +:10B1400003D00348FFF7F0FE10BD01BEF9E7C0468B +:10B150008402000810B5011E03D00348FFF7F4FE77 +:10B1600010BD01BEF9E7C0468402000810B506F024 +:10B1700027FA002808D1194A19480021FFF7CEFF05 +:10B18000002804D1174810BD05F08EFEF3E7164ADB +:10B1900016480121FFF7C2FF002801D11148F2E74C +:10B1A000134A14480221FFF7B9FF002801D10D48C6 +:10B1B000E9E7114A11480321FFF7B0FF002801D148 +:10B1C0000848E0E70E4A0F480421FFF7A7FF0028D0 +:10B1D00001D00020D7E70348D5E7C04611B10010E1 +:10B1E000D4650108011A0204EDB00010646501087D +:10B1F00085B000108065010855B00010B8650108E1 +:10B2000025B000109C650108002800D001BE024B4B +:10B210008000C1507047C046F065010810B505F0C8 +:10B2200063FB002010BD10B5FFF7F8FF002800D029 +:10B2300001BE10BD064B1B681A6880239B019C460B +:10B2400060448000815880231B060B438350704765 +:10B250000C660108054A80239B019C4660448000DF +:10B2600083585B005B0883507047C0460000204055 +:10B27000012803D0022803D1013070470220FCE7E7 +:10B280000020FAE703280DD005D801280CD00228A9 +:10B2900005D104207047042801D10820FAE701BE37 +:10B2A0000220F7E70620F5E70220F3E710B50300D8 +:10B2B000814206D9091A64204843190006F01AFE93 +:10B2C00010BD411A64204843190006F013FEF7E749 +:10B2D000F0B5DE4657464E464546E0B587B0050018 +:10B2E0000E000192984610AB1B7899461E230371FD +:10B2F00000234373FF33C371037243728372FF29C8 +:10B300001CD0019BFF2B1ED0FF2E03D1019BFF2BD6 +:10B3100000D1F4E0F5F7F9F882467A4B1F68FF2E6A +:10B3200016D10198FF281AD14346FF2B1DD14B4659 +:10B33000FF2B21D1002F26D000242BE04B46FF2BE2 +:10B34000DFD0714CAEE04346FF2BDDD06E4CA9E060 +:10B350006E4913223000FFF736FD0740E1E76C49E4 +:10B360001322FFF730FD0740DEE76A49122240460C +:10B37000FFF729FD0740DAE7674912224846FFF741 +:10B3800022FD0740D6E75046F5F7C3F85E4C89E04A +:10B390000134E4B23B00E340DB07F9D5172304AAEC +:10B3A0001371547100239371584905AB1322300077 +:10B3B000FFF7C6FC8346564905AB13220198FFF7F9 +:10B3C000BFFC0390534905AB12224046FFF7B8FC7F +:10B3D0000290514905AB12224846FFF7B1FC070025 +:10B3E000FF2E02D05B46002B10D0019BFF2B02D01A +:10B3F000039B002B0AD04346FF2B02D0029B002B5D +:10B4000004D04B46FF2B02D0002F00D101BE1723E2 +:10B4100004AA13702000FFF743FC04AB587000230C +:10B4200004AA93701000FFF7B5F904005046F5F731 +:10B4300070F8002C36D105AB1A88AA809B78AB71C6 +:10B44000FF2E37D1002C02D1019EFF2E3AD1002CC5 +:10B450000CD1029B002B09D00821180000F0DDFC64 +:10B46000041E03D10123EB7243466B72002C0BD1F7 +:10B47000002F09D00621380000F0CFFC041E03D1B4 +:10B4800001232B734B46AB72002C09D1119B002B6F +:10B4900020D000236B732B001033119A03CA03C30F +:10B4A000002C23D0200007B0F0BCBB46B246A94612 +:10B4B000A046F0BD0621584600F0AFFC041EC1D1E5 +:10B4C0002E72BFE70821039800F0A7FC041EBED12E +:10B4D000EE71BCE7291D280010300133012200F075 +:10B4E00023FD0400434243416B73D9E768792B7C09 +:10B4F000032119406A7C04F0DFF80400D2E7024C13 +:10B50000D0E7C0468C590110001F0204B050011052 +:10B5100064500110D44F01101C500110F8B52E4D8D +:10B520002F68FFF7F7FB041E286054D000682B4BF0 +:10B53000C5582B4BC6582100183101F0F7FFAB0658 +:10B540000AD52268F8231B012021D150D358E36C7F +:10B55000002B01D0202098476B060AD52268F823DB +:10B560001B014021D150D358E36C002B01D0202087 +:10B570009847EB0705D5E36C002B02D080204000F4 +:10B580009847AD0510D52168F822120180239B0051 +:10B590008B508A582268134951580B431248014274 +:10B5A00000D001BE0F49535073060AD52268FC2310 +:10B5B0001B014021D150D358E36C002B01D0102047 +:10B5C0009847F60705D5E36C002B02D08020800059 +:10B5D0009847014B1F60F8BDF86501088C0F00000B +:10B5E000CC0F0000880F00008CF8FFFF70B50D0035 +:10B5F000140005F031F82100694306F07BFC70BDB2 +:10B60000F0B5C64600B582B080460E000824FF277C +:10B610000823019301E00134E4B2102C17D835005F +:10B62000654305F019F86B08C018290006F062FCA4 +:10B63000010022004046FFF7D9FF01003000FFF76C +:10B6400035FEC0B28742E6D907000194E3E70198CE +:10B6500002B080BCB846F0BD70B504004079FFF779 +:10B660001FFB06001B4B8200D05820602100543184 +:10B670002200183201F09AFC051E01D0280070BD8E +:10B6800000239C22A3500432A3500C3AA350124B27 +:10B690007600F65A114A03213000FFF789FA30008C +:10B6A000FFF7C8FD300005F03FF8002805DB1F2339 +:10B6B00018401E3B83400A4A13600A4A6079210001 +:10B6C000FFF7BAFB2268116880231B060B43136047 +:10B6D000D4E7C04690590110D45901101DB500108F +:10B6E00000E100E06DB90010F0B5C64600B582B0CB +:10B6F000041E26D02068002808D02100183101F04F +:10B700000FFE206801F0DAFD0023236023791E2B51 +:10B7100019D1A423E35C002B00D177E0AC23E35CD8 +:10B72000002B0AD1B033E35C1E2B00D086E09623B9 +:10B730005B00E35C1E2B00D088E002B080BCB84602 +:10B74000F0BD01BED6E76079FFF7AAFA444B40008E +:10B75000C65A300004F0E8FF050001238340DB43B4 +:10B760005BB2404A11780B401370310004F0C4FF03 +:10B770002800FFF705FA002D24DBAB083A4FC03351 +:10B780009B00DA59944603212940C900FF229046C4 +:10B7900015008D406246AA431500800142460240D2 +:10B7A0008A402A43DA513000FFF754FD60790022C5 +:10B7B0000021FFF741FBA423E35C002B19D01E23DB +:10B7C0002371A6E70F232B40083B9B0806339B0001 +:10B7D000264A94466344596803221540ED00FC3222 +:10B7E0001700AF40B94380010240AA400A435A60A3 +:10B7F000D9E701AD17332B706079FFF751FA687004 +:10B80000A379AB702800FFF70DF8D8E7E01D00F032 +:10B81000F9FA2000083000F0F5FA20000A3000F0B4 +:10B82000F1FA2000093000F0EDFA637B002B00D123 +:10B8300074E720001030FEF735FC6FE72000B030D1 +:10B84000FEF77AFCB0231E22E25470E720002D3070 +:10B85000FF30FEF771FC96235B001E22E2546CE77A +:10B86000D4590110AF64010800E100E000ED00E0F0 +:10B87000F0B5D6464F464646C0B504000D0016004A +:10B88000A823C3588B4201D0A823C150637B002B4F +:10B8900005D13548E0BCBA46B146A846F0BD20689F +:10B8A000002101F03DFD2700103700220021380063 +:10B8B000FEF7D0FB002806D02268116880231B0603 +:10B8C0000B431360E6E7231D994629001800FFF794 +:10B8D00097FE8046A065454304F0BEFE6B08C01885 +:10B8E000290006F007FB824601003800FEF7C6FB80 +:10B8F000051E29D1424651464846FFF777FE002EE5 +:10B9000000D03060002201213800FEF7A3FB702335 +:10B91000E35C002B25D080235B02E26D082A01D86E +:10B9200080252D012B434246013A0F210A40134343 +:10B9300021688022920413430B60226811688023DF +:10B940001B060B431360A5E7002201213800FEF718 +:10B9500081FB2268116880231B060B4313602800BB +:10B9600098E72B00D9E7C046061F0204F0B5DE4673 +:10B9700057464E464546E0B583B004001500067AAA +:10B98000FF2E0ED0F308772E06D8A44A12689269CB +:10B99000DB019046984406E0A04B1B689B699846E3 +:10B9A00001E000239846A37AFF2B0FD0227B002AC8 +:10B9B0003BD0DA08772B05D8984800688769D20110 +:10B9C000BF1804E0954A1268976900E00027072233 +:10B9D00016401A409146102929D0202927D0042D3D +:10B9E00000D10CE100D996E0012D00D19AE0022DA2 +:10B9F00000D093E02268116880231B060B4313607C +:10BA00004346002B05D09823E25C3100404600F00D +:10BA100015FD002F00D1FEE09923E25C4946380075 +:10BA200000F00CFD01239A4609E00027CFE7012D25 +:10BA30000DD000239A46082D44D0042D56D05046F0 +:10BA400003B0F0BCBB46B246A946A046F0BD206894 +:10BA500026001836310001F01FFDC00702D5002373 +:10BA60009A46E8E72068310001F014FD0123034005 +:10BA7000DA225200A0585A425341424250411840E3 +:10BA8000D8235B00E3585A4253411A0002409246C1 +:10BA90000342D0D02068822292008358DB05DB0D60 +:10BAA0008158C90B01220A409B18002B07D1C223E1 +:10BAB0009B00C358DB05BED000239A46BBE700239A +:10BAC0009A46B8E7A823E15800222000FFF7D0FEED +:10BAD000002F08D09923E25C4946380000F0AEFC04 +:10BAE00001239A46A9E701239A46A6E7002F00D131 +:10BAF00082E04946380000F007FD9923E0544946AA +:10BB0000380000F02DFD00224946380000F096FC78 +:10BB100001239A4693E7082D00D16BE701BE00236D +:10BB20009A468CE7206825001835290001F0B4FCFE +:10BB3000C00702D500239A4681E72068290001F05A +:10BB4000A9FC01230340DA225200A0585A42534173 +:10BB5000424250411840D8235B00E3585A425341B7 +:10BB60001A0002409246034200D168E722682C4B3B +:10BB7000D3589C462B4BD0580190822189005358B2 +:10BB8000DB05DB0D5158C90B8B460121584601409E +:10BB90005B18002B36D1C2239B00D358DB0534D170 +:10BBA00063460198184333D14346002B0ED0310031 +:10BBB000404600F0A9FC9823E0543100404600F0D4 +:10BBC000CFFC00223100404600F038FC002F0ED0A0 +:10BBD0004946380000F098FC9923E0544946380063 +:10BBE00000F0BEFC00224946380000F027FC206827 +:10BBF000290001F095FB22E701239A461FE7012364 +:10BC00009A461CE700239A4619E700239A4616E74E +:10BC100000239A4613E701239A4610E70C660108B1 +:10BC20008C0F0000CC0F0000F0B583B0050001912F +:10BC30001700FFF7FBF8002819D12A68D0239B00D2 +:10BC4000D3583E0003E02C68D0239B00E3585A1CD5 +:10BC500008D1002FF7D0002E0BD00120FFF7DEFA1D +:10BC6000013EF0E7019A1370002003B0F0BD0248D6 +:10BC7000FBE70248F9E7C046031A0204021F020468 +:10BC800070B504000D00FFF7D1F8002805D0054875 +:10BC900006E02068290001F068F80028F9D00020AB +:10BCA00070BDC046031A02048369DB0715D401681E +:10BCB000822292008B58DB05DB0D8958C90B0122CB +:10BCC0000A409B18002B0AD1B133FF33C358002B15 +:10BCD00001D0012002E0002000E001207047012097 +:10BCE000FCE7000010B5002807D0002907D0AC23DE +:10BCF000C35C002B05D1064810BD01BEF5E701BEAF +:10BD0000F5E703001833006801F016FB0020F3E7A5 +:10BD1000041F0204F0B5CE46474680B583B0040048 +:10BD20008946170098460AAB1D780C9E002856D00D +:10BD3000DE2252000021200007F062F8AC2301222D +:10BD4000E2541E200433E0547C33E054843BE1226F +:10BD50005202E2500B9B0193009543463A0049463C +:10BD60002000FFF7B5FA051E1AD1254920005430EE +:10BD7000402207F090F8E27A7423E254002E0BD0B0 +:10BD80003368E3653079FFF77DFA6123E054307A58 +:10BD9000FFF76EFA6223E0542000FFF75DFC050018 +:10BDA000002D14D1002E06D0F168002903D032698D +:10BDB0002000FFF797FF637B002B12D123681B68DD +:10BDC0001B0516D580235B08DC225200A350002DF2 +:10BDD00011D1280003B0C0BCB946B046F0BD01BEC9 +:10BDE000A6E7A823E15800222000FFF741FD050047 +:10BDF000E4E74023E7E72000FFF776FCE9E7C046E9 +:10BE00000C5A011010B504000078FF2800D110BDB5 +:10BE100000F031F8FF232370F9E770B584B0060015 +:10BE20000D0082780B2369460B70D3084B700723F3 +:10BE300013408B7003AA0B8813808B78937002AB2E +:10BE40001188198092789A701A8869468A809B783E +:10BE50008B7101A8FEF79EFC041E02D0200004B0E6 +:10BE600070BD29003000FEF721FE041EF6D001A8A7 +:10BE7000FEF7D8FCF2E710B584B00400FEF746FEEA +:10BE8000002800D001BE0B236A461370E3085370EC +:10BE900007232340937003AA6B461B8813806B46CD +:10BEA0009B78937002AB1188198092789A701A88E7 +:10BEB00069468A809B788B7101A8FEF7B3FC04B0B9 +:10BEC00010BD042804D004D8012801D0022802D1D2 +:10BED00070470828FCD001BE0120F9E7042804D0EF +:10BEE00004D8012801D0022802D170470828FCD0CC +:10BEF00001BE0120F9E7000012280FD88000094B8D +:10BF00001B589F46082000E0042070470120FCE7F2 +:10BF10000220FAE70620F8E70620F6E70120F4E71A +:10BF20001020F2E74C5A0110F0B5C64600B584B0B7 +:10BF3000070015000193002908D00C78053CE3B2F6 +:10BF4000182B34D89C00284B1B599F4601BEF4E7A0 +:10BF500002AA264B083311CB11C202A93800FEF702 +:10BF600057F804B080BCB846F0BD02AA1F4B10338E +:10BF700011CB11C2F1E702AA1C4B183311CB11C22D +:10BF8000EBE74B78002B05D102AA184B203311CBDD +:10BF900011C2E2E702AA154B103311CB11C2DCE744 +:10BFA00001BE1348DDE701260DE001BE0DE00024CF +:10BFB00000261048032CD4D80F4B1B5D98469D4299 +:10BFC000F1D0002E0DD0002FEFD0FDF7F9FF0200C9 +:10BFD00041463800FDF7F8FF0028C2D0019B002B36 +:10BFE000BFD00134E6E7C046985A0110045701104B +:10BFF00002020204020D0204FC5A011010B505F001 +:10C0000023FC0649C02252008B58012003438B5069 +:10C0100005F05EFC05F000FC10BDC04600002640A7 +:10C0200010B505F011FC0449C02252008B580120C4 +:10C0300083438B5010BDC04600002640F8B5050074 +:10C040000C004A1E264B9A4246D8264B1B78002BE2 +:10C0500044D1FFF7E5FF05F03BFC2349E122D20084 +:10C060008B58012083438B50204B1C6000200C28F0 +:10C070000DD81F4BC2009B185B68A34201D9013049 +:10C08000F5E71B4BD358A34202D91C0000E00C205B +:10C09000184E3060184F3C6005F000FC386832687C +:10C0A0000F239B1A02249C40C003FA21890005F04B +:10C0B00021FF0D4AC2235B00D3581B041B0CC01880 +:10C0C000013C204005F0D2FB2800FFF797FF054B0D +:10C0D00001221A700020F8BD0848FCE70848FAE77A +:10C0E0006F17000004660108000026400066010882 +:10C0F000005B0110FC6501080866010800210204CC +:10C1000001210204014B18607047C0460C6601080B +:10C11000002807D00023036043608360C36003618D +:10C120004361704701BEF5E7F0B51B4B984229D03B +:10C130001A4B1A683623D25C002391425B41DBB272 +:10C14000002B00D001BE154F3A685E26935B1B188A +:10C150006025525B4A439B1800241C603B689A5B35 +:10C1600082185F5B4F43D21994609A5B82185F5BC1 +:10C170004F43D219D4609A5B80185B5B59434018D7 +:10C180008461F0BD054B1A683523D25C00239142CF +:10C190005B41DBB2D4E7C046000028400C660108D2 +:10C1A0000023036043608360C36003614361836174 +:10C1B000C3617047032900D901BE0A001032120280 +:10C1C0000023135009024018812252018218136083 +:10C1D000024A9446604403607047C04688100000DD +:10C1E000C00543425841C0B270470000A0231B065F +:10C1F00098422AD014D8802829D008D980235B00FF +:10C2000098422AD01B4B984209D01B4807E01028BF +:10C210001FD0402801D1194801E000281BD17047E8 +:10C22000174B98421BD007D9164B98421ED0164B7D +:10C2300098421DD11548F2E7154B984211D0154B85 +:10C24000984211D1A420C003E9E70020E7E7124893 +:10C25000E5E71248E3E70848E1E70648DFE710486A +:10C26000DDE7A020C003DAE70348D8E70D48D6E7AA +:10C270000148D4E706005200FF00520002005000BF +:10C28000030000F0040000F0050000F0030052007D +:10C29000090000A0010000F005005200010050005C +:10C2A000010052000200520010B50F4B1A683323F0 +:10C2B000D35C002B00D101BE0B4B1C68226ABC234F +:10C2C000E3589B181B68002B0BDB084B1868FFF723 +:10C2D0008DFF636801229A6063689B68002BFBD125 +:10C2E00010BD0348FCE7C0460C6601081066010853 +:10C2F0000200500010B50400FFF772FF002801D1C2 +:10C30000134810BD05F0F4FA124B134A1A605C6032 +:10C3100000229A60DA60114B1A685423D35C002B18 +:10C3200010D004F0A6F9FA21890005F0E3FD010020 +:10C330000B4805F0DFFD0B4BC1188020400006F0D4 +:10C34000F7FFDEE780200021400006F0F1FFD8E78C +:10C3500006005200106601080001001C0C6601086E +:10C3600060F590009808000070B504000D00FFF71C +:10C3700037FF002827D0002D27D005F0B9FA144B3D +:10C38000144A1A6000225A609C60DD60124B1A68E1 +:10C390005223D35C002B10D004F06BF9FA218900F2 +:10C3A00005F0A8FD01000D4805F0A4FD0C4BC118D7 +:10C3B0008020400006F0BCFF06E080200021400005 +:10C3C00006F0B6FF00E0074870BD0648FCE7C0462F +:10C3D00010660108000100050C660108C0EA210191 +:10C3E000482600000600520030B5134A11688B69D8 +:10C3F000C31ADB0949691B01C918002303601568CA +:10C4000081242C5D04192360156882242C5D041995 +:10C410002360156883242C5D04192360156880242B +:10C420002C5D04192360836114688422A25C801847 +:10C4300003600B604B6030BD0C66010810B5072926 +:10C4400000D901BE1F2314009C4300D001BE104B35 +:10C450001B689C69001BC0095B6900011B1803294C +:10C460000AD81C68C9001F20884084431F2002404E +:10C470008A4022431A6010BD04395C68C9001F203D +:10C48000884084431F2002408A4022435A60F2E7DA +:10C490000C660108F8B506000C0015001F0006AB7D +:10C4A0001A78072900D901BE0F232900994303D127 +:10C4B000012D01D0092D00D101BE012F00D901BEEF +:10C4C0001F231100994300D001BE21003000FFF767 +:10C4D000B5FF336801210A00A24093433940A140CF +:10C4E00019433160074B1A688123D25C9219116895 +:10C4F000A400723B1800A04081432B40A3400B4393 +:10C500001360F8BD0C660108072900D901BE0C4B69 +:10C510001B689A69801AC0095B6900011B1803290E +:10C5200006D81B68C900CB401F201840C0B2704716 +:10C5300004395B68C900CB401F201840F6E7C046AD +:10C540000C660108072900D901BE012A00D901BEE5 +:10C5500001238B40002A01D1436070478360FCE7D0 +:10C56000072900D901BE01238B408360704700007A +:10C5700030B50300072900D901BE0F201400844301 +:10C5800003D1012A01D0092A00D101BE8900074840 +:10C5900004688120205CC01804680F231D008D40B2 +:10C5A000AC4313408B402343036030BD0C6601084D +:10C5B00030B50300072900D901BE012A00D901BE08 +:10C5C000074804688220205CC018046801231D000D +:10C5D0008D40AC4313408B402343036030BDC046C5 +:10C5E0000C66010830B5082900D901BE012A00D91E +:10C5F00001BE846901231D008D40AC4313408B4074 +:10C600002343836130BD000030B50300082900D901 +:10C6100001BE032A00D901BE4900074804688020F2 +:10C62000205CC018046803231D008D40AC431340F8 +:10C630008B402343036030BD0C660108F0B5D6463D +:10C640004F464646C0B507000E001400002800D132 +:10C65000AFE0002A00D1AEE0072900D901BE23686F +:10C66000012B00D901BE63680F221900914303D149 +:10C67000012B01D0092B00D101BE237A1F22934345 +:10C6800000D001BEE368032B00D901BE2369012B52 +:10C6900000D901BE6369012B00D901BE236A012BB9 +:10C6A00000D901BE636A012B00D901BEA36A012B28 +:10C6B00000D901BEE36A032B00D901BE236B072B0F +:10C6C00000D901BEE369032B00D901BEA369012B88 +:10C6D00000D901BE01252B00B340700010300322A9 +:10C6E0009146110081400B439C46344B9846196893 +:10C6F0008323C95CC9190B68624693439C46A369AE +:10C700002B40B340624613439A46E2694B461340BE +:10C710001A008240534613430B60227A31003800DE +:10C72000FFF78CFE626831003800FFF721FFE268F6 +:10C7300031003800FFF768FF226931003800FFF749 +:10C7400051FF626931003800FFF732FF43461A6833 +:10C750008423D25CBA1810687B3398469843236AC6 +:10C760002B40656A6D00AC46022561460D402B43A7 +:10C77000A56AA90004250D402B43E56AE9001825A8 +:10C780000D402B43256B6D01414629400B43B10001 +:10C79000FE25AD0029408B40034313602268310021 +:10C7A0003800FFF7CFFE0020E0BCBA46B146A846ED +:10C7B000F0BD0348F8E70248F6E7C0460C660108FA +:10C7C00001005A00084B1A68BC23D3581B181B6879 +:10C7D000002B07DA0B0C00D001BE0904090C4160E4 +:10C7E000002070470148FCE70C66010801008A0040 +:10C7F0000368002B08DAC2600B0C00D001BE0904EC +:10C80000090C8160002070470048FCE701008A00A5 +:10C8100000290BD0074B1A68BC23D3581B181B6880 +:10C82000002B05DAC3680B600020704701BEF1E7FA +:10C830000148FAE70C66010801008A00034B1B68F7 +:10C84000002B00D07047014B1860FBE734660108ED +:10C8500070B505002248006800283FD020480068D5 +:10C860002C246C430019FF2426001E4006601D0A7C +:10C870002C4044601B0C83601A4B1C683323E35C20 +:10C880009E4200D301BE174B1C68236ABA25655B24 +:10C8900075435B19036143683425645DA34200D38B +:10C8A00001BE104C2468246A80335B01E4184461A3 +:10C8B00083681D0C00D001BE1D0C00D001BE1B04FE +:10C8C0001D0C2B43A360C261016200238361049BA2 +:10C8D000002B02D000229B5E838170BD01BEBDE7AC +:10C8E000346601080C660108F0B58FB00400082218 +:10C8F00000210CA806F084FA002C41D06368032BB9 +:10C9000000D901BEE36A002B3CD0236B002B3BD047 +:10C9100007A80300220062CA62C322CA22C302AE71 +:10C92000230014333200A2CBA2C222CB22C208229F +:10C93000835E0CAD2B80079B9BB217336B80089BEB +:10C940000D93E16AA26A0B9B0A980095FFF780FF9E +:10C95000069B0598002200920021FFF779FF216BCA +:10C96000280003F02DFF0022AB5E002B06DB1F2208 +:10C9700013401E3A9A401300044A13600FB0F0BDF2 +:10C9800001BEBBE701BEC0E701BEC1E700E100E0B8 +:10C99000F0B5CE46474680B583B00400171E01931C +:10C9A00040D0254B1B68002B3ED0234B1D682C2309 +:10C9B0005C432C194B43ED186868204B1A683423EC +:10C9C000D35C9946190005F01BFB012633008B4010 +:10C9D0001B0498466068494605F012FB33008B4003 +:10C9E0002269002A22D0A869002821D11268002AD1 +:10C9F00020DA3A681204120C3A6041460A433A605F +:10CA00002269D7600122AA61019A6A622269190C1F +:10CA100000D001BE1B041B0C936003B0C0BCB94620 +:10CA2000B046F0BD01BEBCE701BEBEE70448F4E776 +:10CA30000448F2E70348F0E7346601080C66010891 +:10CA400004028A0007028A0070B582B00400002345 +:10CA5000019300282BD02369002B2AD06369002B77 +:10CA600029D0236A002B28D06369DD682A0C0BD0FB +:10CA700012041A601B682069204B1A68BC23D35823 +:10CA80001B181B68002B1ADB2D042A0C002D0AD062 +:10CA900063691A601B68636A002B2AD098470023D9 +:10CAA00063620023A36163691B6802B070BD01BEAD +:10CAB000D1E701BED2E701BED3E701BED4E701A9A9 +:10CAC000FFF7A6FE00280ED101980268160CFF237E +:10CAD0001340E2699A4207D9226A9B00D358002B7F +:10CAE00002D0984700E0002620693100FFF76AFE77 +:10CAF000CAE7A36A002BD4D09847D2E70C66010896 +:10CB000010B50200064B1B68002B07D0044B1868B9 +:10CB10002C235343C018FFF797FF10BD01BEF5E764 +:10CB20003466010870B50C00224B1A683323D35CBD +:10CB300083423AD900293AD00B681F210A001A40D3 +:10CB4000194201D01C4831E01A4B19683323CB5CE1 +:10CB5000984200D301BE174B19680B6ABA25495B8E +:10CB600048431818154B186005E0636891005B187E +:10CB700000211960013223685B099342F5D8002136 +:10CB8000FFF720FE0D4B186822000021FFF730FE52 +:10CB9000002801D00A4809E0084B18680021FFF777 +:10CBA00011FE002802D0064800E0034870BD02488C +:10CBB000FCE7C0460C66010803018A0038660108DC +:10CBC00001018A0010B50B00002A05D0002A1DD0F3 +:10CBD000002B15D10E4810BD0029F7D10D4A116860 +:10CBE00033228A5C904200D301BE0A4A11680A6A65 +:10CBF000BA24095B4143521807490A601800EAE762 +:10CC000006490B604A60FFF78DFFE4E70048E2E762 +:10CC100003018A000C6601083866010880060008D6 +:10CC2000F0B5C64600B50C001B4B1B68002B2FD07F +:10CC3000DB681A6882422DD947091F22024001256C +:10CC400095405E6800290FD000239846124B186863 +:10CC50000368002B16DABF00F61933681D4207D0AF +:10CC6000AB433360002504E0F3F74FFC8046EDE76B +:10CC70000A4D0021FFF7A6FD002C05D0280080BC3E +:10CC8000B846F0BD064DF7E74046F3F742FCF5E73E +:10CC9000024DF3E7034DF1E7386601080201880011 +:10CCA0000301880004018A000C4B1B68002B0FD085 +:10CCB000DB681A6882420DD941091F2210401E3AD2 +:10CCC0008240586889000B581A4205D0044802E097 +:10CCD000044800E0044870470448FCE7386601084F +:10CCE000010188000201880004018A000001880017 +:10CCF000074B1B689B6CC340DB0700D401BE044B91 +:10CD00001B681B6910308002C3580F201840704701 +:10CD10000C66010830B5C0239B00C45808252B00C1 +:10CD20002340254206D000230DE0D024A40004595E +:10CD3000CC5401339342F8D330BDD024A40005591C +:10CD40005C000D5301339342F7D3F5E710B514009F +:10CD5000C2239B00C358DB05DB0D9A4200D31C00A5 +:10CD60002200FFF7D7FF200010BD03681B050CD57C +:10CD7000802282239B00C358DB05DB0D934206D043 +:10CD800090239B00C150012070474022F1E7002012 +:10CD9000FAE730B580239B00C45808252B002340B8 +:10CDA000254206D000230DE0CD5C9024A40005515F +:10CDB00001339342F8D330BD5C00655A9024A4003F +:10CDC000055101339342F7D3F5E710B5140003681A +:10CDD0001B050ED5802282239B00C358DB05DB0D8B +:10CDE000D31AA34200D81C002200FFF7D2FF200074 +:10CDF00010BD4022EFE703000268120509D580202C +:10CE000040081B6DFF22110019401A4200D0080093 +:10CE100070474020F4E70000F0B5C64600B50500B5 +:10CE20000C0003681B0515D5802780239B00EB5859 +:10CE300008261E40A26A012A0ED882239B00EB58C6 +:10CE4000DB05DB0D9F4202D0A36A012B1AD080BC08 +:10CE5000B846F0BD4027E8E7636A9846E262013AC7 +:10CE6000002B01D0002A00D101BE41462800FFF767 +:10CE7000ACFFA36A1B1AA362002E00D040004044FE +:10CE80006062DAE70023A362002E23D1636A1F7871 +:10CE9000F3F73BFBF8231B018026B600EE50EB585E +:10CEA00090239B00EF50F3F734FB0C4BEA580C4BEC +:10CEB00013401E430B4B1A4200D001BE074BEE50ED +:10CEC0002368022213432360636B002BBFD0012031 +:10CED0009847BCE7636A1F88DAE7C046880F0000FE +:10CEE000FEFDFFFF8CF8FFFF70B505000C00FFF79B +:10CEF00082FF0600A169E269002901D0002A00D161 +:10CF000001BE2800FFF722FF236A1B182362E36992 +:10CF10001B1AE3612AD1A368002B23D0E268B24236 +:10CF20001CD3721E2B681B051AD580239A4200D38E +:10CF300001BEC12080002B58FF218B4311400B43C1 +:10CF40002B50194B0122EA5063680122934363601E +:10CF5000636B002B01D00420984770BD013AE1E7D4 +:10CF60004023E3E7104B0022EA50EDE7A269C0211D +:10CF700089006958090700D540001218A261B34220 +:10CF8000EBD2013B2A6812050CD58022934200D3D4 +:10CF900001BEC12080002A58FF218A4319400A435C +:10CFA0002A50DAE74022F1E7C80F0000F0B5002868 +:10CFB00000D16CE1002900D16BE10B78022B00D984 +:10CFC00001BE4B7B023BDBB2062B00D901BE8B7B43 +:10CFD000002B04D0022B02D0032B00D001BE212352 +:10CFE000CB5C012B00D901BE2823CB5C012B00D9DF +:10CFF00001BE0B78012B07D98B7F002B09D04B6822 +:10D00000013B062B05D903E04B68083B082B00D9F0 +:10D0100001BE8B68053B042B00D901BE4B69FF2B79 +:10D0200000D901BE8B69FF2B00D901BE8B7C002B80 +:10D0300006D00B78002B02D18B68092B74D001BE6F +:10D040004C6B964B1C4200D001BECC6B944B1C42E7 +:10D0500000D001BE0B78022B6AD04D68013D0B7FDA +:10D06000002B6AD080235B028C68082C67D8802450 +:10D07000240123430F242C4023438024A40423436E +:10D0800003600C6B03681B055BD580239C4200D3B7 +:10D0900001BE8C6B03681B0555D580239C4200D3D1 +:10D0A00001BE4C6A03681B054FD580239C4200D308 +:10D0B00001BE0B781B06C024A404234003644B7FED +:10D0C000002B44D040238C7C002C42D08024E400F0 +:10D0D00023430C7C002C3ED08024640023434C7CF2 +:10D0E000002C3AD08024A4002343CC6A013C2404C1 +:10D0F000F0252D032C4023434D7B013D07242C407C +:10D1000023438D7B2D0130242C40234383640B7BF0 +:10D11000002B24D080246400CB7B002B21D10B7802 +:10D12000022B46D000231EE08B7B002B88D086E7A5 +:10D130008B7F002B91D1002591E7002394E70024F9 +:10D1400097E74023A2E74023A8E74023AEE7002368 +:10D15000B9E70024BCE70024C0E70024C4E70024AA +:10D16000DAE780239B001C438D68013D0F231D409F +:10D170002C43C026B60084514D69FF242C408D6994 +:10D180002D04FF273F043D402C43C425AD004451EE +:10D19000CC6A85592B4003339C4201D3102C00D913 +:10D1A00001BECB7F002B07D00B78012B5FD0002571 +:10D1B00003E080239B00D6E700254C7B013C07233E +:10D1C00023402B438D7B2D0130242C40234343648B +:10D1D0000B7B002B4ED080256D008C68013C0F230B +:10D1E00023402B430C78012C46D000242343802479 +:10D1F000A40003510C6BFF232340C124A40003515E +:10D200002023CB5C002B3AD080239B0421240C5D8F +:10D21000012C36D00024234328240C5D012C33D06C +:10D22000002423434D6AFF2425402B4303658B6B69 +:10D230001C4081239B00C4504B6B1A4C23401A4C5A +:10D240000351CB6B194C2340194C0351002A22D0B7 +:10D250000023536013609360D3601362D3625363FF +:10D26000897F3033D154134B93630020F0BD802568 +:10D270006D00A2E70025B0E780246402B6E7002332 +:10D28000C4E780246404C6E780246402C9E70A482E +:10D29000ECE70948EAE70020E8E7C04692F4FFFF20 +:10D2A0008CF8FFFF6D0B0000C80F00007307000033 +:10D2B000880F0000EFCDAB000160AA00114B0360A6 +:10D2C0000F3B0364002383640822FF32C0218900DE +:10D2D0004250043143500C31435043641139FF39FB +:10D2E0004250FD3283500365074A8350074A8350FA +:10D2F000074A8350074A8350074A8350074A83509E +:10D300007047C0460F000003C80E0000880E0000E2 +:10D31000C80F0000880F0000080F0000480F000031 +:10D3200003685B005B080360002904D000234B60A6 +:10D330000B600B62CB627047F0B5C64600B5804605 +:10D340000F0016001C1E10D0A56B1C4B9D4200D078 +:10D3500001BE002F01D0002E00D101BE002F01D050 +:10D36000002E04D180BCB846F0BD01BEECE74046BB +:10D37000FFF741FDA760E6600023236163618642F9 +:10D3800017D3461E43461B681B0514D580239E42B7 +:10D3900000D301BEC120800043461B58FF218B43B0 +:10D3A00031400B4342461350054B01224146CA50BF +:10D3B000D8E7013EE6E74023E9E7C046EFCDAB0002 +:10D3C000C80F000008694B69834202D84B69C01A34 +:10D3D0007047CB684A699B1A1818F9E7F0B5C6463A +:10D3E00000B507000D00FFF706FD8046C2239B0035 +:10D3F000FE58F605F60D2C6934E0002438E06B6B1E +:10D40000002B01D0082098476B69A34233D1204BF1 +:10D410000022FA50002C1ED0013C2C61EC6829003F +:10D420003800FFF7CFFF201A804511D9002800D01F +:10D4300001383B681B0528D58023984200D301BEE4 +:10D44000C12189007B58FF229343024013437B5044 +:10D4500080BCB846F0BDEC68013CDEE7A96863001B +:10D46000CA52013E002ED8D00134EB68A342C4D08A +:10D470006B69A342C3D0D0239B00FA58403BFB58B2 +:10D480001B07EBD4AB681A55EBE74023D5E7C04642 +:10D49000C80F0000486870470868704770B5046896 +:10D4A000466802292ED0082933D0012902D01E4D0A +:10D4B000280070BD31002000FFF7EEFFC00701D546 +:10D4C000194DF5E731002000FFF7E4FFC00727D42E +:10D4D00082229200A358DB05DB0DA158C90B012263 +:10D4E0000A409B18002B1DD1C2239B00E358DB058B +:10D4F000DD0D002B01D00C4DDAE731002000FFF7E5 +:10D500000FFFD5E7226880231B0613432360002505 +:10D51000CEE7226880231B06134323600025C7E75C +:10D52000014DC5E7004DC3E7FF00420070B50400A0 +:10D530000D00E0231B01C3581B0741D54C4BC258BB +:10D54000C8239B00110019401A420BD06B680B4393 +:10D550006B60FC231B01C150C3586B6B002B01D0C7 +:10D5600010209847424BE3581B0508D56B68802272 +:10D57000120113436B60FC231B01E250E3583C4B48 +:10D58000E358DB070ED5EB69002B5DD1AB68002BB0 +:10D5900003D029002000FFF721FFFC231B010122FB +:10D5A000E250E358324BE3585B0709D56B6B002B15 +:10D5B00001D040209847FC231B010422E250E3588D +:10D5C000E0231B01E3585B073DD52A4BE258A0231B +:10D5D000DB00110019401A420BD02B680B432B6063 +:10D5E000F8231B01E150E3586B6B002B01D0202086 +:10D5F0009847204BE358DB072BD41E4BE3589B0581 +:10D6000013D52B68012B2ED0F8231B01802292000A +:10D61000E250E3582B68012293432B600023EB6216 +:10D620006B6B002B01D002209847124BE358DB06AE +:10D6300009D56B6B002B01D080209847F8231B0184 +:10D640001022E250E35870BD29002000FFF74CFC87 +:10D65000A3E729002000FFF7DFFBF8231B010122CD +:10D66000E250E358C9E7044B0022E250D2E7C0463B +:10D67000CC0F00008C0F0000880F0000F0B5C646EC +:10D6800000B58C680A688423C558753B2B40082573 +:10D69000ED1A2300AC4226D92B0024E055782D0248 +:10D6A00016783543D678360697783F043E4335439F +:10D6B0009827C55155792D0216793543A846D67954 +:10D6C000360695792D042E4345463543C551D2186B +:10D6D000E41A8423C558753B2B400825ED1A230016 +:10D6E000AC4200D92B00002B4CD0082B31D89D0028 +:10D6F0002E4E7559AF46167890254651E7E7537878 +:10D700001B0215782B43942543510223DFE75378FE +:10D710001B0215782B43D5782D06967836043543B1 +:10D720002B43982543510423D1E753781B021578E6 +:10D730002B43D5782D069678360435432B43982510 +:10D74000435153791B0215792B43942543510623EA +:10D75000BDE753781B0215782B43D5782D069678B4 +:10D76000360435432B439826835153791B02157990 +:10D770002B43D5792D0697793F043D432B438351A5 +:10D780000823A4E70A608C60002C0CD1F924E40083 +:10D7900003590122934303518A61CB69002B02D0C4 +:10D7A000CB690120984780BCB846F0BD285C0110C9 +:10D7B000F8B50E004C69CB68C42282580F21114085 +:10D7C00022008C421CD90A001AE0D8254159197050 +:10D7D0000F0A5F700F0C9F70090ED97041591971B3 +:10D7E0000D0A5D710D0C9D71090ED9719B18A41A5B +:10D7F000C42282580F2515402200AC4200D92A00CD +:10D80000002A63D0082A4ED895003A4949598F46D4 +:10D81000D02141581970E9E7D42141581970090AFB +:10D820005970E3E7D42141581970090A5970D02181 +:10D8300041589970DAE7D821415819700D0A5D7086 +:10D840000D0C9D70090ED970D0E7D8214158197080 +:10D850000D0A5D700D0C9D70090ED970D0214158D4 +:10D860001971C3E7D821415819700D0A5D700D0C6C +:10D870009D70090ED970D42141581971090A597146 +:10D88000B4E7D821415819700D0A5D700D0C9D70D8 +:10D89000090ED970D42141581971090A5971D02142 +:10D8A00041589971A2E7D82142581A70150A5D7043 +:10D8B000150C9D70120EDA7042581A71110A5971C6 +:10D8C000110C9971120EDA7108228FE7F3607461FE +:10D8D000002C0DD1F922D200835802218B438350B2 +:10D8E0000323B361336A002B02D0336A03209847C5 +:10D8F0007461F8BD4C5C011010B500283BD00029C4 +:10D900003BD0002B3BD004685A6200221A85002CC1 +:10D910002DDBF922D20083580324A34383500B78D4 +:10D92000012B00D901BE0B7A032B00D901BE4B6835 +:10D93000072B00D901BE0B7B012B00D901BE0A6861 +:10D94000012313408A681203C024A4012240134318 +:10D950004A681204E024E40222401343CA68120613 +:10D96000802149040A4013430360002010BDE407EE +:10D97000CFD50020FAE70348F8E70248F6E7014868 +:10D98000F4E7C0460400B200082904D88B235B00EA +:10D99000CB40DB0700D401BE032A00D901BE042915 +:10D9A00020D008D801290DD002291AD188231B01C3 +:10D9B0009C4660440AE0082913D198231B019C4629 +:10D9C000604403E080231B019C466044002808D08B +:10D9D000036807490B401204C02189020A4013431F +:10D9E0000360704790231B019C466044EEE7C046ED +:10D9F000FFFFFCFFF8B5DE4657464E464546E0B50C +:10DA000007009A460AAB40CB1B789B460CAB1B78B1 +:10DA1000101FC0B2FA2800D801BE58460438C0B260 +:10DA2000FA2800D801BE581EC0B2012804D9042B20 +:10DA300002D0082B00D001BE002E02D05046002894 +:10DA40001CD0002E02D05846FF2819D01B02F0200F +:10DA50000001034099460E9B5D6A1204C0239B029D +:10DA60001A404B461A430A43002E0BD10D9BDB078D +:10DA70001B0C1A433A65002400200CE001BEE0E7CD +:10DA800001BEE3E70023F4E703433B650134E4B25E +:10DA9000002D1FD128002100B44225D2154B9842F9 +:10DAA00022D07B6C0422100018401A42F0D1534659 +:10DAB0005B5C4A46134398465A461204C0239B02B5 +:10DAC0001A40434613430131B142DDD30D9AD007CA +:10DAD000000CD9E7012002F021FF013D002D01D00B +:10DAE0000020D8E70348D6E7F0BCBB46B246A946BB +:10DAF000A046F8BD0200B20070B58CB00500181F3A +:10DB0000C0B2FA2800D801BE002A34D0686C0426BE +:10DB100034000440064231D11B04C020800203407F +:10DB2000501E0004000C03438020C00203432B65F9 +:10DB3000002925D0109B5E6A01910392002308936F +:10DB400002330793200006E0012002F0E7FE013EC9 +:10DB5000002E0ED02000079B022B0DD1094B9842BE +:10DB60000AD001A92800FFF789FD002EECD1300072 +:10DB7000F1E70448EFE704480CB070BD0348FBE749 +:10DB80002000F9E70200B2000400B2000100B20078 +:10DB900070B58CB00500181FC0B2FA2800D801BEBD +:10DBA000002A34D0686C042634000440064231D187 +:10DBB0001B04C02080020340501E0004000C0343DD +:10DBC0008020000303432B65002925D0109B5E6A4B +:10DBD000049106920023099304330793200006E082 +:10DBE000012002F09BFE013E002E0ED02000079B7C +:10DBF000042B0DD1094B98420AD001A92800FFF748 +:10DC0000D7FD002EECD13000F1E70448EFE70448DF +:10DC10000CB070BD0348FBE72000F9E70200B2003A +:10DC20000400B2000100B20010B5030000290DD0BD +:10DC3000426C042420001040144209D10139090427 +:10DC4000090CC02212030A431A6510BD0148FCE703 +:10DC50000148FAE70400B2000100B20000230B60A3 +:10DC60004B608B60CB600B614B618B6102688023E2 +:10DC70001B0613430360704770B58D69AA682B6A51 +:10DC8000CC68FF26B44384600C696442B443C4602A +:10DC90002D68013D03242C404969002901D08021D1 +:10DCA000490021430162002A33D01468611C67D007 +:10DCB000FF21214014792404C025AD022C402143CA +:10DCC000802424062143016451790904C024A4025C +:10DCD000214041649468611C54D0FF212140147B91 +:10DCE0002404C025AD022C40214380242406214376 +:10DCF00081641169002905D001391F240C4080215D +:10DD000009062143C164127D1204C02189020A4020 +:10DD10000265002B33D019684A1C35D0FF220A4017 +:10DD200019790904C024A40221400A43802109066C +:10DD30000A4302665A791204C02189020A404266E7 +:10DD400099684A1C22D0FF220A40197B0904C0248A +:10DD5000A40221400A43802109060A4382661A6907 +:10DD6000002A05D0013A1F211140802212060A43E1 +:10DD7000C2661B7D1B04C02292021340036770BD64 +:10DD80000021A0E70021B3E70022D2E70022E5E767 +:10DD9000F0B5DE4657464E464546E0B583B0061E12 +:10DDA000904600D1B6E0002900D1BBE04F68002FBB +:10DDB00000D1B9E0002A00D1B8E00B689946002BE9 +:10DDC00003D0002500239A4663E05948A3E0584851 +:10DDD00007E0082B04D198231B019B46B3440CE0B9 +:10DDE00053485346002B00D195E0B220000418435D +:10DDF00091E080231B019B46B3445B46002B00D17E +:10DE000086E01B684B4A1340227A1204C021890223 +:10DE10000A4013435A4613606368042210001840F6 +:10DE20001A4261D1A3691B68013B032B00D901BED3 +:10DE300000282DD163689B072AD53368DB0727D4D8 +:10DE4000E068216904F0DCF8002900D001BE2369F4 +:10DE500080225202934202D35A1E1A4200D001BEBF +:10DE600021005846FFF708FF636801221A40DB08CB +:10DE70001B02802149000B401343227A1204C02167 +:10DE800089020A4013438022120613435A46136044 +:10DE90000135A94538D9AB00FC58002CF8D02278C0 +:10DEA000531EDBB2012B04D9042A02D0082A00D069 +:10DEB00001BE237A032B00D901BEA369002B25D014 +:10DEC0002378042B0BD000D983E7012B91D0022BB0 +:10DED00000D07CE788231B019B46B3448DE7902349 +:10DEE0001B019B46B34488E7A1692278237A404608 +:10DEF0000090300001F01AFB002893D00823AB40BB +:10DF000052461A4392468DE700206AE7084868E7C0 +:10DF1000074866E7064803B0F0BCBB46B246A946D0 +:10DF2000A046F0BD0248F6E70148F4E70048F2E7F2 +:10DF30000400B200FFFFFCFF10B5002134E00B002D +:10DF40001033DB0100221A50CB01C318184C1C19E6 +:10DF50002260184C1C192260822424011C192260A2 +:10DF6000842424011C192260134C1C192260134CB8 +:10DF70001C192260124C1C192260852424011C19D2 +:10DF80002260862424011C1922600E4C1C19226078 +:10DF90000D4C1C1922600D4C1C1922608724240191 +:10DFA000A44663441A6001310329C8D910BDC04694 +:10DFB000080800000C0800004408000048080000A1 +:10DFC0004C08000064080000680800006C080000AD +:10DFD00030B587B013008A69D468002C0ED00D7854 +:10DFE000227921780493012303930295FE33019350 +:10DFF00000230093FFF7FEFC07B030BD0048FBE7AD +:10E000008000B20030B587B0040008001500190088 +:10E0100002780A9B0493002303930292FF22019249 +:10E02000009300222000FFF7E5FC002801D007B094 +:10E0300030BD0A9B00930023012229002000FFF736 +:10E04000A7FDF4E710B584B00E236B4401241C80B7 +:10E050008C69A36A002B0ED01B7800920E226A44B2 +:10E06000FFF7D0FF002806D1A26BD2B20E2169447F +:10E070000B8813400B800E236B441888431E984175 +:10E08000C0B204B010BD0000F0B583B0019100280B +:10E0900008D087697B6893421ED9396D002903D067 +:10E0A000002004E001BEF4E70C4813E00130FB6CF3 +:10E0B00083420ED98300CC5825686668E3687343B1 +:10E0C0005B19AA42F2D39A42F0D2019B1C60002055 +:10E0D00000E0024803B0F0BD0148FBE70600B200D3 +:10E0E0000400B200F0B58BB006900F001600079345 +:10E0F000002908D0002E36D0BC6965690023099339 +:10E100002068002205E001BEF4E71202F15C0A4338 +:10E1100001339842F9D809A93800FFF7B5FF002D5F +:10E120001BD02A79FF2A1AD0104B984219D0002808 +:10E1300011D1099B19893B78C9B207980490012035 +:10E140000390029301922368009333000698FFF72F +:10E1500051FC0BB0F0BD2988EDE70548F9E704480C +:10E16000F7E70348F5E70148F3E7C0460400B200CB +:10E170008000B200002901D00885704701BEFBE78E +:10E18000F0B5D6464F464646C0B505000F00140010 +:10E190001E001A00FFF756FF002E0AD0338D984656 +:10E1A000002B21D000285BD0A34214D3A3B2984601 +:10E1B00011E001BEF2E7404602F0B0FB3200390048 +:10E1C0002800FFF73FFFA0450CD24346E41A002881 +:10E1D00046D0002C44D02B68DB07ECD4404602F03C +:10E1E000A7FBEBE70024F2E7002839D0A308994603 +:10E1F000204B9C4205D84B46002B18D10123994651 +:10E2000015E01D4B994612E0504602F06DFB40466A +:10E2100002F084FB320039002800FFF713FF4C4561 +:10E220001CD94B46E41A00281AD0002C18D0FA2129 +:10E230008900484603F05EFE8246FA21890048467E +:10E2400003F0DEFE8BB298462B68DB07DCD4504629 +:10E25000FCF7E9FF404602F06BFBDBE70024E2E756 +:10E26000002805D10020E0BCBA46B146A846F0BD62 +:10E270000248F8E703093D0040420F000200B200E7 +:10E28000F0B5DE4657464E464546E0B58BB0834670 +:10E29000884691469A46149D00230993002919D077 +:10E2A0005346002B18D043469A6996684B465B1933 +:10E2B0005268934200D977E05B461B680122110047 +:10E2C000194007911A4209D1384C20004446159B49 +:10E2D000984613E001BEE3E701BEE4E7F2F715F963 +:10E2E0000790F1E7002802D1316900293ED10028CA +:10E2F00040D0002847D1ED1BB944BA44002D42D08C +:10E300002F0080235B029D4200D91F00A3691B6878 +:10E310004A46013B09A9CA54120A002BF9D1A36944 +:10E32000069320783279317843460493002303938F +:10E33000029070790190069B1B68009309AB5846C8 +:10E34000FFF758FB0028CDD1B1684B1CCAD020780C +:10E35000327BC9B243460493002303930290FF200B +:10E36000019000935846FFF745FBBBE75846FFF77F +:10E370005BFCBCE7337D424600923A00514658466A +:10E38000FFF706FCB5E704005B461B68DB0707D414 +:10E3900020000BB0F0BCBB46B246A946A046F0BD7B +:10E3A0000798F2F7B6F8F3E7004CF1E70400B20083 +:10E3B000F0B5DE4657464E464546E0B58BB083463F +:10E3C000884617009946149E0023099300291AD005 +:10E3D0004B46002B19D043469A69536A9A46136AF2 +:10E3E0001C00BB195268934200D99AE05B461B6837 +:10E3F00001221100194007911A4208D14A4D280004 +:10E400005546A24614E001BEE2E701BEE3E7F2F79B +:10E410007CF80790F2E73400159A41465846FFF71A +:10E42000D7FD00280FD000286AD1A1443F19361B20 +:10E43000002E65D02900380003F0E2FD7318AB42CE +:10E44000E9D36C1AE8E743469B691B683A00013B35 +:10E4500009A9CA54120A002BF9D143469B690693B5 +:10E46000424610785246127951460978159B04931A +:10E47000002303930290534658790190069B1B6832 +:10E48000009309AB5846FFF7B5FA002803D153466D +:10E4900099684B1C15D1002803D1534619690029EE +:10E4A00020D1002822D00028BDD143469B699A6A1A +:10E4B000002AB8D09A6C159B41465846FFF760FE7B +:10E4C000B1E74346187853461A7BC9B2159B0493AB +:10E4D000002303930290FF20019000935846FFF71A +:10E4E00089FAD8E75846FFF79FFBDAE753461B7DCA +:10E4F000159A0092220049465846FFF7FDFAD2E7E6 +:10E5000005005B461B68DB0707D428000BB0F0BC96 +:10E51000BB46B246A946A046F0BD0798F1F7F9FF01 +:10E52000F3E7014DF1E7C0460400B200F0B5DE4666 +:10E5300057464E464546E0B589B007000E00150027 +:10E540000093129A9046EC18631E019300230793E0 +:10E550000693002914D0B3699B469B699A465B4693 +:10E560001B6C02935B465B68019A93420AD8794C14 +:10E57000200009B0F0BCBB46B246A946A046F0BD9B +:10E5800001BEE8E7002305932A0005A93000FFF744 +:10E590007BFD002836D1059B002B33D01C68281B3F +:10E5A000DD68290003F0A6FC45436519019B9946E7 +:10E5B0001A0005A93000FFF767FD041E43D1059B33 +:10E5C000196801914A46521A0132DB6899461900CE +:10E5D0000392100003F08EFC00904946039803F06C +:10E5E0000FFD002902D0009B01330093009B4A4697 +:10E5F0005343019A94466344013B01935B1B0133EF +:10E60000009320E05146280003F0FAFC002905D0D1 +:10E610005146280003F06EFC554645435146200004 +:10E6200003F0EEFC002909D001985044013851460E +:10E6300003F060FC53465843431E0193019B5B1B50 +:10E640000133009300245B465B68019A934200D833 +:10E650007DE03B6801221100194003911A4201D16B +:10E66000B94648E0F1F751FF0390B94643E0002C6A +:10E670002ED145453DD24A4631003800FFF7A8FC6F +:10E68000041EF4D15B461B682A00013B07A9CA544B +:10E69000120A002BF9D14B460A0031003800FFF76F +:10E6A00021FD041EE3D1029B5A01D21A92009C461E +:10E6B0006244D2004B4631003800FFF761FD009BF9 +:10E6C000534536D9554452469B1A00930400CEE771 +:10E6D000C846B9460FE0019F43461293B8464F46DD +:10E6E0009946C6E7019F43461293B8464F4699465E +:10E6F000BFE7C846B946009B002B1FD02A0006A9D9 +:10E700003000FFF7C1FC041EE5D1069B1A69029296 +:10E71000DA6892461A685F6853465F43BF18013F44 +:10E72000019BBB42DED343461293B8464F469946FF +:10E730009FE7C846B94600940400DCE74F463B68B3 +:10E74000DB0700D414E70398F1F7E3FE10E7014C70 +:10E750000EE7C0460400B200C36A002B0BD0036B67 +:10E76000002B0AD0036B00221A7106290ED88900EB +:10E77000194B5B589F4601BEF1E701BEF2E701234A +:10E780005B42C363026B1360C26A1360704702236B +:10E79000C363036B01221A60C36A34321A60F5E75F +:10E7A0004023C363036B01221A60C36A04321A60F8 +:10E7B000ECE78023C363036B3E221A60C36A013215 +:10E7C0001A60E3E70223C363036B31221A60C36A52 +:10E7D00004321A60DAE7C046705C011070B58D69CA +:10E7E000AA682B6ACC68FF26B44384600C69644233 +:10E7F000B443C4602D68013D03242C4049690029BD +:10E8000001D08021490021430162002A33D01468DD +:10E81000611C67D0FF21214014792404C025AD027A +:10E820002C402143802424062143016451790904AA +:10E83000C024A402214041649468611C54D0FF218B +:10E840002140147B2404C025AD022C4021438024A8 +:10E850002406214381641169002905D001391F2450 +:10E860000C40802109062143C164127D1204C0219D +:10E8700089020A400265002B33D019684A1C35D042 +:10E88000FF220A4019790904C024A40221400A4346 +:10E89000802109060A4302665A791204C0218902BE +:10E8A0000A40426699684A1C22D0FF220A40197B1E +:10E8B0000904C024A40221400A43802109060A4316 +:10E8C00082661A69002A05D0013A1F211140802270 +:10E8D00012060A43C2661B7D1B04C022920213402B +:10E8E000036770BD0021A0E70021B3E70022D2E753 +:10E8F0000022E5E770B5050008220026002000E0B0 +:10E9000008328B790133DB00934216D3FF232B406F +:10E910008C5CA342F4D12C0AFF2323408C18E479A9 +:10E92000A342EDD18B185B78B342E9D38C18A4785D +:10E93000012CE5D11E001000E2E770BD70B50C009F +:10E9400015001E00FFF7D6FF00280AD024182379EF +:10E95000AB7063796B70A3792B70E3789B00337095 +:10E9600070BD00233370FBE7827852080323134005 +:10E97000012B07D0022B0BD0002B01D000207047B9 +:10E980000320FCE780235B04994203D90420F6E7C7 +:10E990000420F4E70320F2E7020040790002137933 +:10E9A0001843D3791B069279120413431843002BA2 +:10E9B00002DB0130C0087047033880231B06184370 +:10E9C000F9E7437A0B6000230B7102334B71037A32 +:10E9D0005B0908D1013B8B60027A1F2313400B6156 +:10E9E00002230B757047FF238B60FD3B0B73F3E72E +:10E9F000C37A0B6000230B714B71837A5B0908D1DA +:10EA0000013B8B60827A1F2313400B6102230B753D +:10EA10007047FF238B6000230B73F3E7C37B0B600E +:10EA200000230B7101334B71837B5B0908D1013BE0 +:10EA30008B60827B1F2313400B6101230B75704792 +:10EA4000FF238B60FE3B0B73F3E7437B0B600023DC +:10EA50000B714B71037B5B0908D1013B8B60027B1F +:10EA60001F2313400B6101230B757047FF238B603D +:10EA700000230B73F3E703230B6000230B714B712F +:10EA8000012252428A600B610B75704710B50C0071 +:10EA90001900012C07D0032C0FD0012A01D9012322 +:10EAA00002E0002300E00023002B10D083789A06B8 +:10EAB00005D45B0607D4FF2015E00023F4E7FFF739 +:10EAC00080FF05200FE0FFF793FF04200BE0837821 +:10EAD000DC0601D5002A07D1DB0701D5002A07D1C2 +:10EAE000FFF7C9FF012010BDFFF798FF0320FAE7E9 +:10EAF000FFF7ABFF0220F6E70368052907D8890076 +:10EB00000D4841588F469B0601D5EC231360704792 +:10EB1000DB06FCD56C231360F9E71B07F7D5BC2394 +:10EB20001360F4E75B07F2D53C231360EFE79B0724 +:10EB3000EDD50C231360EAE78C5C01102823C35C3D +:10EB40001B09012098407047F0B5DE4657464E46F7 +:10EB50004546E0B593464F6A1B38430898460F2652 +:10EB60003E40B2460021002510E001255246541CCB +:10EB700001336B434A0094468C44624692009446AB +:10EB8000DC4463435B0062469360013103291BD878 +:10EB9000CB005B1A3C00DC4023099946640A03263B +:10EBA000300020401F234A4613402642DDD0012872 +:10EBB00006D0022806D00328D8D1FA25AD00D5E723 +:10EBC0001025D3E78025D1E743465B0043449B00F3 +:10EBD0000C3B5B449868F0BCBB46B246A946A046D5 +:10EBE000F0BD30B5456A836A590F032004000C401C +:10EBF0001B0E1F221A400F232B40084207D0012C66 +:10EC00000CD0022C0DD0032C0ED0002000E01020E0 +:10EC10000133013250435843400030BD8020400052 +:10EC2000F6E7FA200001F3E7FA200002F0E7816A34 +:10EC30000B0A1F221A400F230B40890406D4082018 +:10EC40000133013250435843400070474020F7E7FA +:10EC5000062303600023037170470423036000232D +:10EC60000371704702230360002303714371012283 +:10EC7000524282600373036103757047122303607D +:10EC800000230371437101225242826003730361C6 +:10EC9000037570473423036000230371437101221D +:10ECA00052428260037303610233037570473E234F +:10ECB0000360002202713C3B4371012149428160A3 +:10ECC000037302610375704710B50368042922D0ED +:10ECD00009D80139C9B2022904D85B062BD5100026 +:10ECE000FFF7CCFF10BD0529FCD1D90507D41906C3 +:10ECF00009D45B060BD51000FFF7C0FFF2E7100048 +:10ED0000FFF7D5FFEEE71000FFF7C4FFEAE71000BA +:10ED1000FFF7A8FFE6E7190605D45B0607D5100044 +:10ED2000FFF7ACFFDEE71000FFF7B4FFDAE71000F3 +:10ED3000FFF798FFD6E71000FFF794FFD2E705230F +:10ED40000360002303717047602303600023037195 +:10ED50007047F0B505000368042B07D01D200B5C3D +:10ED6000FF2B2BD1222828D80230F8E74369012055 +:10ED7000404218604B785B080F261E400023042B8E +:10ED800007D801249C4030002040844201D0013348 +:10ED9000F5E7032B1FD81F1D0020032807D8061DE9 +:10EDA00044002418A4008E5D16550130F5E76A6909 +:10EDB000C95D116058001D3005E00020002802D018 +:10EDC0006B690A5C1A60002806D06A690023137117 +:10EDD0006A69537103E000206B69FF221A71F0BD6C +:10EDE00070B5002200240FE023001C33C65C5300E2 +:10EDF0009B189B00CB180125B5405D6025001D3593 +:10EE0000455D1D7002340132032AEDD970BD00004A +:10EE100070B586B005000C001E004B0628D08B078D +:10EE200010D5D368002B21D01A7919780A9B049346 +:10EE3000012303930296FE33019300230093FEF710 +:10EE4000D9FD00E00020A40713D0002811D10A9BAF +:10EE50000493012303930296FE330193002300934E +:10EE60000022B7212800FEF7C5FD02E00020EAE7F6 +:10EE7000014806B070BDC0468000B200F0B587B052 +:10EE800005000C0010000A794E7909780E9F04974E +:10EE900000270397029301960323009303002800A1 +:10EEA000FEF7A8FD002801D007B0F0BD21692800B9 +:10EEB000FEF7BAFE0028F7D1237D0E9A00920C9A35 +:10EEC0000D992800FEF764FEEEE70000F0B5DE467F +:10EED00057464E464546E0B58DB083460D009146F7 +:10EEE000099316AB1B780893002303E00AAA0021BC +:10EEF000D1540133032BF9D9724E002400231F0093 +:10EF00003000179B98463CE003220BE0042209E006 +:10EF1000002207E0A018C01A2818C6780AA8C6540C +:10EF20000133DBB29342F5D353461B780F201840D0 +:10EF3000824603000F2843D04346049300230393E3 +:10EF400008980290019300920AAB00225846FEF7FF +:10EF500051FD002802D15346002B34D1002837D070 +:10EF600000280BD17B00DBB21F2204A98C4662442F +:10EF70001778079A17407A1E97411F4308344C456B +:10EF80004BD82A5D02210B00134011422CD1621C88 +:10EF9000A95CE21CAA5C07921F2204A88446624472 +:10EFA00000201070A21CA8188246AA5C9209012AAF +:10EFB000AAD0022AAAD0002AAAD0099A1268B1E7D8 +:10EFC000073B9A46B8E751465846FEF72DFEC5E77F +:10EFD00043460093002301221F2104A88446614474 +:10EFE0005846FEF7D5FDBBE7B8460600002E17D001 +:10EFF000002E5CD12B199B780133DBB29B46099B19 +:10F000005A46DA64002A5AD03700B24600220796E0 +:10F0100026001400A846994618E0B8462A4EE5E7AF +:10F02000424649462B195B789342E1D02B199B78D5 +:10F0300002339B00E418A142F4D2234ED8E7E960E2 +:10F04000380002F057FF68600134E4B25C452DD20D +:10F05000BA440436434698199B5D0F21194001229A +:10F060000023114207D15200D2B20133DBB2042B8C +:10F07000F7D9154A079207683F0A01373F024A4607 +:10F08000116DA2008D5852462A605A00D3189B0079 +:10F09000189AD2181899CB5CAB6093682B615168B1 +:10F0A000B942CCD9EF6001236B60CDE7079E3000F9 +:10F0B0000DB0F0BCBB46B246A946A046F0BD014E1D +:10F0C000F5E7C0460600B2000700B2007047000036 +:10F0D000F0B5DE4657464E464546E0B5D9B0050088 +:10F0E0000C1E0492059317D0A369002B16D00023A1 +:10F0F000932204A98C4662441370922262441370D6 +:10F10000912262441370A76923789846237A9A461D +:10F110007B6B9946002307E001BEE5E701BEE6E709 +:10F1200038AA0021D15401337F2BF9D9002308E0FC +:10F13000002237A9CA5436A9CA5435A9CA54013382 +:10F14000DBB2022BF4D9524641462800FEF71CFCE4 +:10F1500041462800FFF7BAFF4B46002B00D174E16F +:10F16000629B029338AB019338230093434637AA3E +:10F1700049462800FFF782FE061E00D0CAE138ABE0 +:10F180001B78532B01D0C74EC5E138AB5B78462BBB +:10F1900001D0C44EBFE138AB9B78442B01D0C14EA7 +:10F1A000B9E138ABDB78502B01D0BE4EB3E138ABC0 +:10F1B0005B79012B01D0BB4EADE138A90B790793E8 +:10F1C000932304AA944663449B46FF2037AA000277 +:10F1D000FFF7B4FB5B461B78002B01D1B14E9AE1DF +:10F1E000922304AA9446634436AA38A9AE48FFF78E +:10F1F000A5FB912304AA944663449B4635AA38A9EB +:10F20000AA48FFF79BFB5B461B78002B02D100222C +:10F21000FA643A65932204A98C4662441278802AE3 +:10F2200000D938E1802B00D937E1002E00D00DE164 +:10F23000FB68002B6AD0629B029338AB9B4601931C +:10F24000932304AA944663441B780093434637AA49 +:10F2500049462800FFF712FE069029A95846FFF7F5 +:10F26000BFFD5846FFF798FB010078605846FFF74E +:10F270007BFB3860F868FFF7EBFC3869FFF7EDFCC3 +:10F280000123BB63B86AFFF75AFD049B012B0BD91E +:10F29000079B002B4BD05A463A23D15C0909333BDC +:10F2A00019403800FFF758FAF869FFF74DFDBB68C1 +:10F2B0009B46079B002B3FD038A8FFF73FFC7862A6 +:10F2C00080235B00984200D97B6238A8FFF789FC55 +:10F2D000786438A8FFF7ABFCB8645B46049A5146E3 +:10F2E00038A8FFF7D3FB82463A68042A00D096E09C +:10F2F000FF2832D038AA3F23D15C629B009343465B +:10F300003A002800FFF784FD069026E03B69002BB9 +:10F3100091D17B69002B8ED1FB69002B8BD13B6A8D +:10F32000002B88D1BB6A002B85D101BE83E70599EC +:10F330003800FFF711FAB7E780235B007B62FA23FE +:10F340001B027B645A4BBB64059B002BC5D1049305 +:10F35000C3E708AB00229A5501367F2EF9D9069BE8 +:10F36000002B39D0069E002E48D00120431E38AA1B +:10F37000D25C01239340BB61079B002B5BD1FA2336 +:10F380009B003B643B6D002B60D0629B029338ABCB +:10F390000193912304AA944663441B780093434647 +:10F3A00035AA49462800FFF769FD061E4ED1912374 +:10F3B00004AA944663441A7829AB0293629B019392 +:10F3C000434600933B0038A92800FFF77FFD394BE7 +:10F3D000984236D0060039E0629B029308AB019355 +:10F3E000922304AA944663441B780093434636AAAA +:10F3F00049462800FFF742FD0690B3E75A465146BA +:10F4000008A8FFF779FB3A6A514608A8FFF75CFCA9 +:10F4100029AA08A93800FFF79CFC069E08E0386A74 +:10F42000FFF720FC29AA38A93800FFF792FC069EB6 +:10F430000028A7D09AE729AA38A9FFF785FB3864E6 +:10F44000A0E70023FB643B6502E0164E002E62D16C +:10F4500063689B075FD52B68DB075CD4E068216994 +:10F4600002F0CEFD002900D001BE236980225202A5 +:10F47000934202D35A1E1A4200D001BE4346042BC7 +:10F4800043D01BD8012B22D0022B08D188231B018B +:10F490009C4665441FE0084ED8E7074ED6E7002596 +:10F4A0001FE0C0460500B20084FF000081FF00009D +:10F4B000A08601000600B2008100B200082B04D132 +:10F4C00098231B019C46654405E0002509E0802344 +:10F4D0001B019C466544002D03D021002800FFF746 +:10F4E0007DF9636801221A40DB081B028021490074 +:10F4F0000B401343227A1204C02189020A401343AD +:10F500008022120613432B6005E090231B019C46CA +:10F510006544E0E7044E300059B0F0BCBB46B2464B +:10F52000A946A046F0BDC0460500B20010B58AB09D +:10F53000002911D06C462273002204922375069292 +:10F540000792089209910C9B00930023033203A9B0 +:10F55000FFF7BEFD0AB010BD01BEEBE710B50028F5 +:10F5600014D107292ED8FF2A2ED81A4B1868836881 +:10F570007824005B1B188900C9180B6816480340E3 +:10F580001206120C1A430A60002002E0012801D082 +:10F59000124810BD0F2919D880235B029A4217D256 +:10F5A0000C4B186883687A24005B1B188900C91803 +:10F5B0000B680B48034012020A48024013430B60D9 +:10F5C0000020E6E70548E4E70448E2E70348E0E70F +:10F5D0000248DEE70C660108FF00FFFF01004A0059 +:10F5E000FF0000FF00FFFF00F0B5022803D0032852 +:10F5F00028D02D48F0BD03294AD8802040028242FD +:10F6000048D21F2B48D88900284E306884687C2552 +:10F61000405B24180C192068254F38401202254FF2 +:10F620003A400243226030688268405B12188918B1 +:10F630000A68F8208243D800FF23034013430B607D +:10F640000020D7E7002929D180204004824227D218 +:10F650001F2B27D88C00154884460568A8687E278C +:10F66000ED5B401920180568FF26354012022A4339 +:10F670000260624610688268C05B1218A2181068A7 +:10F68000F824A043DB001E40304310600800B1E7BF +:10F690000548AFE70448ADE70348ABE70248A9E7F0 +:10F6A0000148A7E70048A5E701004A000C660108E9 +:10F6B000FF0000FF00FFFF0030B51A4B1B6842241B +:10F6C0001C5D844228D9032928D8002901D1072AA2 +:10F6D0000FD9012905D0022906D0032907D01248E5 +:10F6E0001BE00F2A05D9F6E7032A02D9F5E7002A1D +:10F6F00016D175241D5DA940723CAC402140742494 +:10F700001C5D22409C680A43C0239B009C466044C9 +:10F7100080000251002000E0034830BD0248FCE7B1 +:10F720000148FAE70C66010801004A00F0B50B0039 +:10F73000032835D8002801D107290FD9012805D081 +:10F74000022806D0032807D0174828E00F2B05D938 +:10F75000F6E7032B02D9F5E7002B23D1134A1468EF +:10F760007722A15C743A15008D4029007425655DEF +:10F770007626A65D2F00B74039437526A65DB040BA +:10F78000B240024011432B40A068194380231B065E +:10F790000B438022D2008350A3689B580020F0BD09 +:10F7A0000148FCE70048FAE701004A000C6601083E +:10F7B00010B5032828D8002801D107290FD901281E +:10F7C00005D0022806D0032807D011481BE00F29D6 +:10F7D00005D9F6E7032902D9F5E7002916D10D4B23 +:10F7E0001A687523D45CA040723BA3400340742088 +:10F7F000105C014090680B438022D20513438022A5 +:10F80000D2008350002010BD0148FCE70048FAE711 +:10F8100001004A000C660108064B1B681A68882123 +:10F820005B58D218136804490B400002034313606D +:10F830007047C0460C660108FF00FFFF044B1A68C2 +:10F840001368882152589B181868000AC0B2704784 +:10F850000C660108012800D901BE054A1368054954 +:10F860000B400002C0218900084003431360704729 +:10F8700000002740FFFCFFFF10B5074B984200D95E +:10F8800001BE0649064A8B58064C2340024C2040D4 +:10F8900003438B5010BDC04601030000000026400A +:10F8A00004050000FEFCFFFF10B50449044A8B5814 +:10F8B000044C2340000403438B5010BD000026403D +:10F8C00004050000FFFF00FF0349044A8858802315 +:10F8D0001B0603438B5070470000264004050000C0 +:10F8E0000349044A8B585B005B088B507047C04645 +:10F8F000000026400405000010B50300032800D9CD +:10F9000001BE054CA021C90060580322904313405A +:10F910001843605010BDC04600002640064B1B68CF +:10F920001A6888215B58D21813681B021B0A00064C +:10F93000034313607047C0460C660108044B1A6805 +:10F940001368882152589B181868000E7047C046EB +:10F950000C660108064B1B681A688C215B58D2188C +:10F96000136804490B400002034313607047C0460C +:10F970000C660108FF00FFFF084B1A684023D35CA8 +:10F98000834209D9064AE0308000815880231B0653 +:10F990000B438350002070470248FCE70C660108C7 +:10F9A0000000264001004A00064B1A684023D35C41 +:10F9B000834205D9E0308000034BC058C00F704728 +:10F9C0000020FCE70C6601080000264000280ED04D +:10F9D000094B1A684023D35C83420AD9074AE030B6 +:10F9E000800083585B005B08835000207047044808 +:10F9F000FCE70348FAE7C0460C6601080000264011 +:10FA000001004A0010B50B4B1A684023D35C8342B7 +:10FA10000CD90F290CD8084CE030800003590F2274 +:10FA200093430A4013430351002010BD0348FCE7F1 +:10FA30000248FAE70C6601080000264001004A006F +:10FA4000064B1A684023D35C834200D801BEE030E5 +:10FA50008000034BC3580F20184070470C66010804 +:10FA60000000264010B50C4B1A684023D35C83423B +:10FA70000DD903290DD8094CE030800003593022FC +:10FA8000934309010A4013430351002010BD044869 +:10FA9000FCE70348FAE7C0460C6601080000264070 +:10FAA00001004A00074B1A684023D35C834200D808 +:10FAB00001BEE0308000044BC3581B0903201840EE +:10FAC0007047C0460C66010800002640034B1B69C6 +:10FAD00004201840431E9841C0B2704700002740E0 +:10FAE00010B504000A4A136808210B43136003E0B1 +:10FAF000012000F013FF013CFFF7E8FF002801D1CF +:10FB0000002CF5D1002C01D0002010BD0148FCE7ED +:10FB10000000274002004A00002070470020704784 +:10FB20000349044A885880231B0603438B507047BF +:10FB3000000026400C050000084AC0235B00D35893 +:10FB40000122100018401A4206D10449044A8B5879 +:10FB50005B005B088B5070470248FCE700002640C2 +:10FB60000C05000003004A00064A074BD358012247 +:10FB70009343002800D1002213430249024A8B50CC +:10FB80007047C046000026400C050000014B186875 +:10FB90007047C04640660108084AA623DB00D258D9 +:10FBA00003231340032B06D0044AA623DB00D358BB +:10FBB0000120184070470220FCE7C04600002640A4 +:10FBC00010B5FFF7E9FF022801D0002010BD014B5E +:10FBD0001868FBE744660108134B1A683E23D35CA0 +:10FBE00083421DD9042904D94B1EFF3B9BB2132B22 +:10FBF00018D8FF290CD91F220A400C490300C03332 +:10FC00009B005A50D030800004234350002008E06D +:10FC100007230B40D0308000044A8350002000E0CE +:10FC2000034870470248FCE70C66010800002640C4 +:10FC300001004A0003000C4A11683E228A5C82429D +:10FC400000D801BE1A00D03292000849505807224D +:10FC50001040042800D07047C0339B005A581F231F +:10FC60001340FC301843F6E70C66010800002640FC +:10FC700010B52A4B1A683E23D35C834200D801BEDC +:10FC8000FFF7D8FF88235B00984231D012D80228B2 +:10FC90002BD004D903280BD1FFF73EFF3CE000280E +:10FCA00039D0012802D1FFF771FF35E0002033E0A1 +:10FCB000002031E089235B00984229D01423FF33D0 +:10FCC000984206D1164A174BD358002B1DDB002053 +:10FCD00022E01223FF33984205D1FFF7F7FE0028F8 +:10FCE00010D1002018E0002016E0FFF769FF13E0B4 +:10FCF0000B4A0D4BD358002B01DB00200CE0802079 +:10FD0000000209E08020000206E08020000203E0FB +:10FD1000FFF704FF00E0054810BDC0460C6601086F +:10FD2000000026403C0500000C05000000127A008F +:10FD3000024AB023DB00D058C00F704700002640B5 +:10FD4000034AB223DB00D358012018407047C04655 +:10FD5000000026400B4BB120C00019580A4A114040 +:10FD6000802292050A431A50B021C9005A58520005 +:10FD700052085A5005495A58520052085A50002009 +:10FD80007047C04600002640FFFFFFCF8C050000F3 +:10FD900070B5041E00D175E0FFF7CAFF002800D03F +:10FDA00074E022688023DB029A4200D301BE2368FC +:10FDB0009B039B0BE279002A00D165E0802252046C +:10FDC00013433349B022D2008B50A28880239B0179 +:10FDD0009A4200D301BE228980239B009A4200D31D +:10FDE00001BEA388DB04DB0C2289120429490A40E6 +:10FDF00013432749284A8B50A37A0F2B00D901BE01 +:10FE0000E37A0F2B00D901BEA28980239B019A427D +:10FE100000D301BEA27A0F231340E17A0901FF2229 +:10FE20000A401343A28912021C490A401343A27BD1 +:10FE30001207C02189050A4013431549B122D20097 +:10FE40008B50A379042B00D901BE228A80239B000A +:10FE50009A4200D301BE0E4811494358114A13403B +:10FE6000A2791202E025ED002A4013434350435883 +:10FE70000D4A1340228A1204064C22401343435079 +:10FE8000002070BD01BE87E7002299E70748F8E728 +:10FE9000000026400000FF018405000000FF1F0055 +:10FEA0008C050000FFF8FFFFFFFF00FE03004A0083 +:10FEB00010B5002832D01A49B023DB00CB589A0382 +:10FEC000920B02608022520413405A1E9341C37168 +:10FED000144BCB58DA04D20C82801B0CDB05DB0DF3 +:10FEE0000381B123DB00CB580F2214001C40847225 +:10FEF0001C092240C2721A0AD204D20C82811B0F42 +:10FF0000032213408373084BCB58190A04320A406A +:10FF100082711B0CDB05DB0D038210BD01BECAE73D +:10FF200000002640840500008C05000070B5050027 +:10FF30002649274A885880231B0603438B502C00F0 +:10FF400003E0012000F0EAFC013C204AB223DB0080 +:10FF5000D3585B0701D4002CF3D11C48B121C90050 +:10FF600042581C4B1A4080239B0513434350002DDD +:10FF700001D0002C0CD01549B022D2008858802323 +:10FF80001B0603438B5003E0012000F0C7FC013C3B +:10FF9000FFF7D6FE002801D1002CF5D1002D01D0AD +:10FFA000002C0ED00949B122D2008858C0239B05ED +:10FFB00003438B50002D02D0002C05D000252800D3 +:10FFC00070BDFFF7C7FEF5E7034DF8E700002640D8 +:10FFD0008C050000FFFFFFCF02004A000138074BED +:10FFE0001A683F23D35C834200D801BE8130FF30C2 +:10FFF0008000034BC058C00F7047C0460C66010814 +:020000041001E9 +:10000000000026400138074B1A683F23D35C834227 +:1000100000D801BE9130FF308000034BC35801204F +:10002000184070470C6601080000264070B5013882 +:100030000D4B1A683F23D35C834201D80B4870BD37 +:100040000B4D8130FF30840062590A4B1A408023E7 +:100050009B0513436351012000F060FC63595B0072 +:100060005B0863510020EAE70C66010801004A00C2 +:1000700000002640FFFFFFCFF8B504000D002F4B16 +:100080001A683F23D35C834201D22D48F8BDFFF7A5 +:10009000A5FF002845D1AA78931EDBB20E2B42D8CB +:1000A0006B78002B41D0122B41D82E783000E978A4 +:1000B000002932D01327B8423BD300292FD038274C +:1000C000B84238D8013C2879022816D07F20304029 +:1000D0001B02F8267601334003431204F820400344 +:1000E00002401343C9068022120511400B4322002F +:1000F0008132FF3292001349535012498134FF3448 +:10010000A4006358104A13402A791207C0208005C2 +:100110000240134363500020B8E71627CBE770274F +:10012000CEE70A48B2E70648B0E70548AEE704481C +:10013000ACE70348AAE70248A8E7C0460C660108F6 +:1001400001004A0000002640FFFFFFCF03004A00E5 +:100150000138114B1A683F23D35C83421AD981308E +:10016000FF3080000D4BC3587F221A400A70180AD6 +:100170001F2210404870180C02408A70802212051D +:100180001A40501E8241CA701B0F032213400B718C +:10019000002070470248FCE70C660108000026407A +:1001A00001004A0070B50C00461E294B1A683F2317 +:1001B000D35CB34249D9274933008133FF339B00D5 +:1001C00058588022120602435A50250003E00120AD +:1001D00000F0A4FB013D33009133FF339B001D4A27 +:1001E0009B58DB0701D4002DF1D1002C01D0002D4C +:1001F00017D033008133FF339B00164A9A58120FF1 +:1002000003231340022B01D0002070BD114A813618 +:10021000FF36B600B158C0239B050B43B3500020F6 +:10022000F3E70C4C8136FF36B60032590A4B1A40C0 +:1002300080239B0513433351012000F06FFB33599A +:100240005B005B0833510548DFE70548DDE7C04642 +:100250000C66010800002640FFFFFFCF02004A00A5 +:1002600001004A00F8B504292AD00AD801291DD076 +:10027000022904D1834B00221A70002614E0824E1A +:1002800012E008290FD1814B1B88002B00D1D9E047 +:100290007F4CFFF781FC022800D17CE0002C00D1CC +:1002A00079E0013CF5E7784E3000F8BD794B1B78DA +:1002B000002B00D0E3E0734B01221A700026F3E715 +:1002C000724B00221A80744B1A80002405E0200033 +:1002D000FFF784FE00280BD10134704B1A683F23CE +:1002E000D35CA34255D3002CF1D1FFF721FDF1E7F8 +:1002F0002000FFF79FFC02280CD0002CECD16848AE +:10030000B121C9004258674B1A4080239B05134313 +:100310004350E1E7002C15D16148B121C900425892 +:10032000604B1A4080239B0513434350002120005B +:10033000FFF752FC0123A3409BB2544A11880B43A0 +:100340001380C9E7631E22008032FF3292005449B5 +:100350005258120F920709D01A008132FF329200D0 +:100360005158090F03220A40012A06D10122A24056 +:1003700092B24949088802430A8049488133FF33D1 +:100380009B001958474A1140802292050A431A508F +:10039000CCE7002688E7002C51D1434E394B002290 +:1003A0001A7081E7013CFFF7CBFC002801D1002C3B +:1003B000F8D1002C0AD0002D26D13949B122D20023 +:1003C0008858C0239B0503438B502E000135334BC7 +:1003D0001A683F23D35CAB42E0D30123AB409FB20A +:1003E0002A4A12881342F1D002212800FFF7F4FBB9 +:1003F000002DD8D000E0013C2800FFF703FE0028C4 +:10040000D7D1002CF7D1D4E7234B1B883B420AD02D +:1004100023492B008033FF339B005A582148024068 +:100420005A500026D2E71E492B008033FF339B0031 +:100430005858C022920502435A500026C6E70025AC +:10044000194EC4E7FFF774FC002814D10026A5E775 +:10045000013CFFF775FC002801D1002CF8D1002CDD +:100460000BD00F49B122D2008858C0239B0503430B +:100470008B50002692E7064CEBE70B4E8EE7024EC0 +:1004800012E7C0464A660108FF0042003C660108C8 +:1004900040420F003E660108486601080C660108EC +:1004A00000002640FFFFFFCF02004200F0B587B0FA +:1004B00001A8FFF7FDFCFFF73BFC002807D001ABCC +:1004C0009B7B022B01D0012302E0002300E00023EC +:1004D00001AA019E94882000D279002A21D0022509 +:1004E000002B20D000281FD00020FFF7C1FB3200D6 +:1004F0000023002101F0C8FD06000F002A000023A0 +:100500002000002101F0C0FD02000B00C9075408C3 +:100510000C435D08300039000019694101F094FD79 +:1005200002E00125DCE7002007B0F0BDF0B585B0A2 +:100530000400304B1B683F229A5C002A53D00028ED +:1005400055D03E229B5C834200D801BE294B1A68DD +:100550003F23D35CA34201D2002545E002A920003D +:10056000FFF7F6FD00280BD000230027002500260A +:10057000002B36D0002D37D0002F14D13D0033E0B2 +:100580002000FFF72BFD002807D002AB1B79022BC0 +:1005900001D0012302E0002300E0002302AA167824 +:1005A00055789778E4E72000FFF762FB32000023DC +:1005B000002101F069FD009001913A00002328001C +:1005C000002101F061FD02000B00C90754080C4333 +:1005D0005D08009801990019694101F035FD050099 +:1005E00002E0002500E00025280005B0F0BD050070 +:1005F000FAE7C0460C66010810B504000D4B1A68F6 +:100600003E23D35C834200D801BE002C09D0094BA5 +:100610001A683F23D35CA34208D22000FFF728FBCF +:1006200010BDFFF743FF0028FAD1F6E72000FFF7DF +:100630007DFFF8E70C66010870B50600FFF732FA97 +:100640000500012484403000FFF7FAF9FFF7D4FFDA +:1006500064082018E84070BD10B50020FFF7ECFFDB +:100660000400FFF76BF9411C4808001901F042FC37 +:1006700010BD10B5FFF7F0FF0400FFF7DFF8411CD5 +:100680004808001901F036FC10BD000030B5194BC8 +:100690001B682C229A5C1F2A15D884080722250083 +:1006A00095432A1E22D103321040C000FC32824002 +:1006B0001B682033A4001B191C6881406140114055 +:1006C0006140196012E03C229A5E0BB29A420ED051 +:1006D00007220240074B1B68186880231B06134340 +:1006E000802292019446614489000B5030BD01BEC6 +:1006F000EEE7C0460C66010810B50A4B1B682C22B9 +:100700009A5C1F2A0AD91A6880239B019C4661447F +:1007100089008B585B005B088B5010BD998FFFF7E9 +:10072000B5FFFAE70C6601080B4B1A683C21535ED3 +:10073000116880229201821892005258002A01DB2F +:1007400018B2704780239B019C4660448000425849 +:1007500007231340F4E7C0460C6601080A4B1B68E8 +:100760003C215A5E072108401B68882149018C46BC +:10077000634480001B181968002901DB90B27047A0 +:100780001A689205920DF9E70C660108094B9A6800 +:10079000094B9A4204D01030084B8000C058704773 +:1007A000002905D01030044A830098589950F6E784 +:1007B00001BEF7E700ED00E00000000800000010B7 +:1007C000F0B583B0041E019100D182E04368032B91 +:1007D00000D901BE0023E05E00283EDB6188FFF700 +:1007E00055FF0023E25E6168002A18DB93083A4E49 +:1007F000C0339B009F5903201040C000FF2215000A +:100800008540AF4389010A4082403A439A51334BB5 +:100810009A68334B9A4219D0002003B0F0BD0F23E1 +:100820001340083B9B0806339B002C4884466344D6 +:100830005E6803200240D200FC3007009740BE43B0 +:1008400089010840904030435860E0E70023E05EB3 +:100850000199FFF79BFF0020DFE761880222A35E7A +:100860006268002B17DB9B081B4EC0339B009F590F +:1008700003200840C000FF210D008540AF439201D6 +:100880001140814039439951144B9A68144B9A4254 +:1008900018D01448C1E70F230B40083B9B080633D0 +:1008A0009B000E48844663445E6803200840C000F5 +:1008B000FF210F008740BE43920111408140314328 +:1008C0005960E1E70023E05E0199FFF75FFF05480B +:1008D000A3E70448A1E7C04600E100E000ED00E026 +:1008E000000000080100560070B504000A4B1968AA +:1008F0000120404201F0FEFA050005E0064B1868B1 +:100900006843EFF7F9FD641BAC42F7D8024B186857 +:100910006043EFF7F1FD70BD9802000810B5034B7E +:100920001B785843EFF7E8FD10BDC0469C02000855 +:1009300010B5FFF7F3FF10BD054B802212069A6435 +:100940009B6C002B01DB002070470248FCE7C0468F +:1009500000002740030046000D4B802212019858EA +:100960005B68FF221A4202D080231B061843084A04 +:10097000084BD3581B0402D080235B021843044A5F +:10098000044BD3581B0C02D080239B0218437047A2 +:100990000000264004080000FEE7000010B50268D1 +:1009A000094B1A6242685A6282689A62C268DA62C5 +:1009B00002691A6342695A6382699A63C269DA6397 +:1009C000FFF7EAFF10BDC046E4060008F0B5C646D2 +:1009D00000B5002833D019238B429B415B42314C38 +:1009E00022681668AC27D25BB61832680325AA4382 +:1009F0002B401A43326026683268F65B92191768FA +:100A0000294E3740176027683A689046AE229446D0 +:100A1000BF5A3A0042441768AF433B431360226811 +:100A200013686446125B9B181A6832401A600028EB +:100A300007D010291DD9212927D801221AE06423C3 +:100A4000CAE7184B1B6855229A5C8A421FD256226D +:100A50009A5C8A421DD257229A5C8A421BD2582243 +:100A60009A5C8A4219D259229B5C8B4217D3553A21 +:100A700000E000220B4B1B6859680B680F20834372 +:100A800013430B6080BCB846F0BD0222F2E700229F +:100A9000F0E70122EEE70222ECE70322EAE7052273 +:100AA000E8E7C0460C660108FFFCFFFFB0235B05CA +:100AB0005B78002B04D0B0235B055878C0B2704738 +:100AC0002120FCE7B0235B059B899BB2002B04D05F +:100AD000B0235B05988980B2704780204000FBE717 +:100AE00070B5FFF7EFFF80235B0098421AD0B0206B +:100AF0004005174BC358174A1340174C21680A6822 +:100B00009C25495952181168C025AD0029400B4356 +:100B1000136022681368A02152589B180F4A82580C +:100B20001A6070BD0C4C23681A689C215B58D2185F +:100B300013680F2083439A390B43136023681A68A4 +:100B4000A0241B59D218136883430B431360E8E7B2 +:100B500048180000FFFCFFFF0C6601084418000065 +:100B600070B5FFF7AFFF80235B0098421AD0B0202A +:100B70004005134BC358134A1340134C21680A68AD +:100B80009C25495952181168C025AD0029400B43D6 +:100B9000136022681368A02152589B180B4A825890 +:100BA0001A6070BD084B1A6813689C2152589B1834 +:100BB0001968074A11408022D2010A431A60F0E7FF +:100BC00050180000FFFCFFFF0C6601084C180000E5 +:100BD000FF8FFFFF10B5FFF775FF80235B00984282 +:100BE00012D0B02252050F4BD3580F4A13400F4A70 +:100BF00011680A689C20095852181168C0208000AA +:100C000001400B43136010BD084B1A6813689C2108 +:100C100052589B181968064A1140C022D2010A4353 +:100C20001A60F0E71C180000FFFCFFFF0C660108CB +:100C3000FF8FFFFF70B5FFF745FF80235B009842F1 +:100C40001BD0B0204005184BC358184A1340184C0D +:100C500021680A689C25495952181168C025AD00C1 +:100C600029400B43136022681368A02152589B1837 +:100C7000C122520182581A6070BD0D4C23681A6857 +:100C80009C215B58D21813680F20834399390B437A +:100C9000136023681A68A0241B59D2181368834371 +:100CA0000B431360E8E7C04624180000FFFCFFFF79 +:100CB0000C66010870B5204B1A6813689C215258C5 +:100CC0009B181C68C0231B011C40FFF7FBFE802300 +:100CD0005B0098421FD01849086803689C2280581E +:100CE0001B181868154D284018600868036880585C +:100CF0001B181868C0252D012E00A643304318602C +:100D000009680B688A589B1818682840001B431E06 +:100D10009841C0B270BD0020FBF7EAFF0400FFF766 +:100D2000C5FE222803D8002C03D10120F2E70120C0 +:100D3000F0E70020EEE7C0460C660108FFF3FFFF76 +:100D400030B500283CD0C368002B3BD00368002B93 +:100D50003AD005791E4BAA00D258002A28D0140098 +:100D600000E01A005369002B07D0824205D0197E9B +:100D7000027E9142F5D81C00F3E7824226D0236917 +:100D8000002B08D0636943610461002B00D0186117 +:100D90006061012015E0027E237E9A42F2D2446116 +:100DA0000023036120610A4BAD00E850012008E0F8 +:100DB000074BAD00E850002343610361012000E0D0 +:100DC000002030BD0020FCE70020FAE70020F8E713 +:100DD0008C66010870B582B006000D00042800D9A9 +:100DE00001BE6B1EDBB2012B04D9042D02D0082DED +:100DF00000D001BE284BB200D458042D1ED0012DC6 +:100E00001ED0022D32D026006469002CFBD10020B8 +:100E100033E06469002C17D0204B984212D0A368AD +:100E20002B42F6D1E3681A6800925B68019323684D +:100E30002900684698471A4B1C60EAE70020E9E75A +:100E40000020E7E7012DEAD1012D01D002B070BDED +:100E5000124B984204D0134BB6000022F250F5E733 +:100E6000104BB6000E4A1268F250EFE70C4B1E68AA +:100E7000002ECCD03669CAE73669002EE6D0B368BA +:100E80002B42F9D1F3681A6800925B6801933368CA +:100E9000290068469847EFE78C660108FF0042008A +:100EA000886601087466010810B5EFF72EFB074B42 +:100EB0005968074C2140E82292010A435A605A6857 +:100EC00022405A605B68EFF724FB10BD000026400B +:100ED000FF00FC0FF0B5C64600B50700012800D999 +:100EE00001BEFFF7E3FD85B2FFF7ECFD0600002031 +:100EF000FBF7FEFE041E17D180235B009E4201D04B +:100F00002A4C12E0222D42D8294B1B6858682949E7 +:100F10004358294A134098463A0680235B041A40F6 +:100F200043461343435000E0204C80235B009E4225 +:100F30002FD080235B009E4225D01D4B1A6833239F +:100F4000D35C002B00D101BE194B1B681D6A8023A6 +:100F50005B009E4220D0002F24D0184A0121280097 +:100F6000FBF746FC00280ED1114B1A68BC23D3585E +:100F70005B191B68002BF7DBEB681B0E1B06A0221E +:100F80001206934210D0200080BCB846F0BD074C3A +:100F9000CBE7222DD1D8CCE7002F01D0084ADDE7DE +:100FA000084ADBE7084AD9E70400ECE704004200FE +:100FB0000C66010818F00000FFFFFFFE0300000CA4 +:100FC00001010030010000300100000C00283BD07E +:100FD0001E4B1B681A688821595852181268026201 +:100FE0001A688C21595852181268426246229A5C3B +:100FF000002A28D09968E0228A58D20623D5DA68D8 +:10100000F223DB01D3580360104B1B68D968F02230 +:10101000D2018A584260D9680D4A8A588260D968DC +:101020000C4A8A58C260D9680B4A8A580261D9684A +:101030000A4A8A584261D968094A8A588261DA683C +:10104000084BD358C361704701BEC1E70C66010865 +:1010500004780000087800000C7800001078000088 +:10106000147800001878000010B500283BD01F4B02 +:1010700019680A68882409595218016A11601968A8 +:101080000A68043409595218416A11601B684622E3 +:101090009A5C002A26D09968E0228A58D20621D587 +:1010A000D9684468F022D2018C50D9688468104A0B +:1010B0008C50D968C4680F4A8C50D96804690E4AAC +:1010C0008C50D96844690D4A8C50D96884690C4A9F +:1010D0008C50D968C4690B4A8C50DA680168F223D5 +:1010E000DB01D15010BD01BEC1E7C0460C6601084E +:1010F00004780000087800000C78000010780000E8 +:101100001478000018780000F0B5C64600B5070056 +:10111000FFF7CCFC0500012F00D901BE7C4B5B68BA +:10112000002B00D184E001210120FFF753FE041EB3 +:101130006FD1EFF7EAF98046754B5B68002B03D05F +:1011400004210120FFF746FE724B1A68136ABA2188 +:10115000515ACA00521A9B181A68002AF4DADB683E +:10116000DA0000D566E0802080051843694B1B68D3 +:101170001A6ABA215E5AF500AD1B5219D0601A6A7C +:101180005D5AE800401B1218002050601A6A595A34 +:10119000CB005B1AD3185B68FFF794FC80235B00DD +:1011A000984200D17CE05B4B1A683323D35C002B60 +:1011B00000D101BE574B1B681A6ABC215B589B18B3 +:1011C0001B68002B00DB6FE0534C524B1A68136A0C +:1011D000BA21515ACA00521A9B181A68002AF4DA26 +:1011E000DD68EB0000D57FE04C4B1D40494B1B6890 +:1011F0001A6ABA201F5AF900C91B5218D5601A6A18 +:10120000195ACB005B1AD31800225A604046EFF7F8 +:1012100080F9002C00D06CE03D4B5B68002B03D0C4 +:1012200008210120FFF7D6FD200080BCB846F0BDA4 +:1012300000247EE71B0F1E073948FFF7C7FE212D4C +:1012400017D0344D2B68196888229B58C9180B6831 +:1012500034480340783213430B6029680B688C25AF +:1012600049595B18196801400A431A602C4B3343F3 +:1012700079E7284D2B68196888229B58C9180B6894 +:10128000284803409022120113430B6029680B6821 +:101290008C2549595B18196801400A431A60E5E733 +:1012A000380002F04DF890E71A4B1A683323D35CEC +:1012B000012B00D801BE174B1B681A6ABA21595A74 +:1012C0005218BC215B589B181B68002B0ADB164A7E +:1012D0001369B8390B431361012F01D030BF74E794 +:1012E00020BF72E70C4C70E728010009FFF7BCFE35 +:1012F0007AE7074B5B68002B03D002210120FFF740 +:1013000069FD054B9C4200D18EE7084C8CE7C04636 +:101310008C6601080C66010805004200FFFFFFDF34 +:101320004C660108FF00FFFF00ED00E0FF004200F7 +:10133000024B5B69072018407047C04600002640FA +:10134000074A084BD2581F231340B0214905E82211 +:10135000D200885CC01A431E9841C0B27047C04694 +:10136000000026401CFF0000044B186880231B046B +:10137000184043425841C0B27047C0460000264062 +:1013800010B5204B19680B6890228A589A18146877 +:1013900003202040032804D01268D20710D502246D +:1013A00000E0042494228A589B18196803220A40FA +:1013B000032A07D01B68DB0711D520231C4303E059 +:1013C0000124EFE740231C43FFF7CEFF00280DD098 +:1013D000FFF7B6FF002805D0802020430CE0102343 +:1013E0001C43F1E780200001204305E0FFF7A0FF48 +:1013F000022802D08020204310BD8020000120431D +:10140000FAE7C0460C66010810B5FFF7B9FF802364 +:101410001B011840431E9841C0B210BD10B5FFF724 +:10142000A3FF002810D01C4A13681C490B4013600E +:101430000820FFF773FA6423174A1268002A09DBB1 +:10144000002B07D0013BF7E7134A136814490B4000 +:101450001360EDE7002B01D1124810BD0E4A13684E +:1014600011490B4013600120FFF758FAFFF77CFF8A +:10147000002801D10020F0E7FFF762FF012801D02A +:101480000020EAE7B0225205084BD158024A084B27 +:10149000D1500020E1E7C04600002640FFFFFBAC32 +:1014A000FFFFFBAD02004200FFFFFFFB1018000032 +:1014B000307F000010B5FFF757FF002808D0054B1C +:1014C000054A10681840C01A43425841C0B210BDC6 +:1014D000024BF5E7000004530000264000000452D0 +:1014E000F8B50400012800D901BEFFF7E3FB00288E +:1014F00002D12D4D2800F8BDEFF707F80600002CAB +:1015000014D12A4A2A4B0021D150B0225205E82397 +:10151000DB00D75CFFB20120FFF7DCFC051E02D028 +:10152000002D2AD11DE0FFF7DBFAF9E7FFF7C2FF34 +:10153000002826D01D4A1E4B5021D150B022520502 +:101540001C4BD75CFFB219491B4A8B581F208343A1 +:10155000143803438B500838FFF7E0F9FFF700FB1E +:1015600000251248144943581F2293433A4013431D +:101570004350002C0DD1FFF72DFB3000EEF7C9FFD3 +:10158000B8E7B02252050D4BD158084A084BD1504C +:10159000D4E70720FFF7C2F9FFF74CFB0020FFF765 +:1015A00099FC0500E9E7C046030042000000264020 +:1015B000307F0000410700001CFF000010180000F1 +:1015C000024B5B685B0C012018407047000026400E +:1015D000084B5A6C120AFF2313403A2B00D0704775 +:1015E00004494A6C044B1A40E8239B0113434B64A3 +:1015F000F5E7C04600002740FFC5FFDF04494A6CFD +:10160000044B1A40E8239B0113434B647047C046C8 +:1016100000002740FF00FFFFF0B5D6464F46464684 +:10162000C0B582B007000C0001921E00012B00D94A +:1016300001BE3B0B00D001BE264B1A687223D35A61 +:101640009B08013B244A134322009A4301D16300C3 +:1016500000D401BEF02212013B0063401D00154082 +:10166000134207D01D4D280002B0E0BCBA46B14677 +:10167000A846F0BDEEF749FF8046164B1868816812 +:101680007023C35AC9187223C25A9308013B2340DE +:101690009B009A466E23C35A1C40240A62431300DF +:1016A00053445B181A68920A9102FF223A4001984B +:1016B00000280DD080246400224376028024A400F8 +:1016C000264032430A431A604046EEF722FFCAE73B +:1016D0002C00F1E70C660108000F00400100CE006D +:1016E000F0B5C64600B504000E001500012A00D969 +:1016F00001BE234B1A687223D35A9B08013B214A2F +:10170000134322009A4304D11F4B22001A409A42ED +:1017100000D001BE1A4B1A683023D35C1F2B03D8AC +:101720001A4880BCB846F0BDEEF7EFFE144B1F68B8 +:10173000B9687023FB5AC9187223FA5A9308013BFF +:1017400023409B0098466E23FF5A3C40240A624384 +:10175000130043445B181A680D490A40002E0CD050 +:101760000224FF346D02802189000D4025432A4365 +:101770001A60EEF7CEFE0020D3E70124F2E7C04660 +:101780000C660108001F0040001000400100CE0060 +:10179000FFFCFFFF70B504001A4B1A687223D35A7E +:1017A0009B08013B184A134302009A4304D1174B8C +:1017B00002001A409A4200D001BE124B1A68302330 +:1017C000D35C1F2B01D8124870BDEEF79EFE0D4B67 +:1017D0001A6891687023D35AC9187223D35A9D0886 +:1017E000013D6E26925B2240120A53432C40A40016 +:1017F0001B195B181A6807490A401A60EEF789FE40 +:101800000020E1E70C660108001F004000100040C6 +:101810000100CE00FEFCFFFF0449C02252008858A0 +:10182000C0231B0603438B507047C0460000264070 +:10183000044AC0235B00D058800F431E9841C0B2B9 +:101840007047C046000026400749C02252008B580E +:101850009B009B088020C00503438B508858802341 +:101860001B0603438B5070470000264010B5040050 +:1018700080235B02984200D301BEFFF7D9FF002806 +:1018800009D10549C42252008B581B0C1B042404A7 +:10189000240C23438B5010BD0000264010B50400DB +:1018A0000F2800D901BEFFF7C3FF00280BD106495E +:1018B000C42252008B58054803402404F020000342 +:1018C000044023438B5010BD00002640FFFFF0FF73 +:1018D000034AE023DB000121D150D3587047C046B2 +:1018E0000000264010B50020FBF70AF910BD704734 +:1018F00010B50020FEF7A0FE041E00D110BD154B50 +:101900001860FEF71BF8411C200000F0F3FA0400F9 +:10191000114B1860FDF792FF411C200000F0EAFA1D +:1019200004000E4B1860013C0D49200000F0E2FA63 +:1019300001300C4B1870FA218900200000F0DAFA0F +:101940000130094B18600020FEF776FE074B186047 +:10195000D4E7C046900200089402000888020008FC +:1019600040420F009C020008980200088C02000808 +:1019700010B52248FAF7C6FB214CB022D200A3587A +:101980005B005B08A350E02189006358302083434B +:10199000635080235B04A3501A4B1B4AE25004336C +:1019A000A0229201E250194BFF22E250FFF74CFFB8 +:1019B000C0225200A35801218B43A350FFF797FF89 +:1019C000FFF796FF124B1B681A6ABA201C5AE100F7 +:1019D000091B52180021D1601A6A185AC3001B1A39 +:1019E000D31859600B4A80310320FBF7EBF80A4803 +:1019F000FAF724FF0948FAF777FF10BD685B01107A +:101A00000000264084050000010002008C05000053 +:101A10000C66010888060008A0660108A45C011095 +:101A2000034A90235B01D358032018407047C046F7 +:101A30000000204010B5EEF768FD084C90214901E8 +:101A40006258074B1A40074B13436350034B5B68C4 +:101A5000DB06FBD5EEF75DFD10BDC0460000204063 +:101A6000FCFF00000100FA0570B50400830500D0FA +:101A700001BEEEF74AFD0500FFF7D2FF032813D0A1 +:101A80000B4B802292009C50902040011958094A2B +:101A90001140094A0A431A50054B5B68DB06FBD527 +:101AA0002800EEF736FD70BDFFF7C4FFE8E7C0463B +:101AB00000002040FCFF00000300FA0510B500F014 +:101AC000CFF800F00DF800F0BBF800F045F800F09A +:101AD0004BF810BD10B500F02DF800F05FF810BD08 +:101AE00010B50F210120FDF763FE00220F21012018 +:101AF000FDF734FD0F210120FDF718FE0021002025 +:101B0000FDF756FE002200210020FDF727FD0021F1 +:101B10000020FDF70BFE07210020FDF749FE002203 +:101B200007210020FDF71AFD07210020FDF7FEFD2B +:101B300010BD000010B50548F8F72CFE0448F8F772 +:101B400029FE0448F8F726FE10BDC046E05C0110EF +:101B5000D85C0110DC5C011010B5002200212F20A0 +:101B6000FDF7AAFD10BD000010B5084A084C04217D +:101B70002000FAF763FD074A06212000FAF75EFD10 +:101B8000054A07212000FAF759FD10BD805D0110BC +:101B900000033140485D0110105D011010B5184878 +:101BA000F8F7F8FD1748F8F7F5FD1748F8F7F2FDD4 +:101BB0001648F8F7EFFD1648F8F7ECFD1548F8F76A +:101BC000E9FD1548F8F7E6FD1448F8F7E3FD144879 +:101BD000F8F7E0FD1348F8F7DDFD1348F8F7DAFDF4 +:101BE0001248F8F7D7FD1248F8F7D4FD1148F8F776 +:101BF000D1FD1148F8F7CEFD1048F8F7CBFD10BD28 +:101C0000B85D0110BC5D0110F85C0110B45D0110FD +:101C10007C5D0110445D0110E45C0110E85C011082 +:101C2000EC5C0110F05C0110F45C0110FC5C011034 +:101C3000005D0110045D0110085D01100C5D0110D4 +:101C4000034B332203495A5003495A507047C04648 +:101C5000000030400820000010200000FEE70000D7 +:101C600030B583B0072200213220FDF725FD9621F3 +:101C70000020FEF7ABFEFEF76FFE00281BD1794A6D +:101C8000FF231B02D4583F231C40FEF755FE0028BB +:101C900006D00120FEF742FE724B9B6C002B27DB27 +:101CA000704AFF231B02D450FDF746FFFDF738FFB3 +:101CB0000120FDF759FF0120FFF712FCFFF7AEFBF3 +:101CC000FFF79CFCFFF784FCFEF744F8002100209E +:101CD000FDF7C8FE0020FDF73DFE0120FDF71EFECA +:101CE0000020FDF799FD604B1A683F23D45C06E0A5 +:101CF0000620FFF7B3FF2000FEF798F9013C002C07 +:101D0000F9D100210120FDF767FF0020FDF798FEC3 +:101D1000002800D18BE000210020FDF75DFF0021AD +:101D20000020FDF76FFE514C002500950023002296 +:101D300000212000FAF7AEFB0095002300220121CC +:101D40002000FAF7A7FB4A48FDF7CAFE002800D09A +:101D500079E00120FDF7D0FD0020FDF7FBFD00201C +:101D6000FDF7DCFD0020FDF757FD00210120FDF708 +:101D700033FF00210020FDF72FFF00210220FDF797 +:101D80002BFF00210320FDF727FF00210420FDF792 +:101D900023FF00210520FDF71FFF3648FDF7F8FF60 +:101DA000002853D13448FEF7C1F8002851D1002152 +:101DB0000020FDF727FE00210020FDF753FE2F49EC +:101DC0000120FEF759F9002846D12D490120FEF7E0 +:101DD000E9F9002843D1FDF783FD0020FDF74CFD14 +:101DE0000020FDF761FDFDF76FFD0120FDF732FDDD +:101DF000FDF796FE0120FDF7B7FE64210020FEF7F7 +:101E0000E5FDFFF775FD1F48F8F7C4FC1E48F8F71D +:101E1000C1FC1E48F8F7BEFC1D48F8F7BBFC1D4886 +:101E2000F8F7B8FC1C48F8F7B5FC03B030BDFDF777 +:101E300001FF1223FF33984200D06CE701210020FC +:101E4000FDF7E0FD67E70520FFF708FF0420FFF737 +:101E500005FF0420FFF702FF0320FFF7FFFE03202A +:101E6000FFF7FCFE000027400C660108000031402F +:101E700040420F002C5F0110400D0300585F01101D +:101E800010270000405F0110445F0110485F0110FF +:101E90004C5F0110505F0110545F011010B50448F1 +:101EA000FEF74EFF002801D0002010BD0148FCE7DE +:101EB000A00200080000020610B5F8F769FC041E35 +:101EC00009D0002C0BD0FFF7F9FDFFF703FE002C23 +:101ED0000AD0200010BDF9F749F90400F1E70449E0 +:101EE0000020F9F791F9EEE7FFF7D8FF0400F0E7DB +:101EF000E40C0000002243088B4274D303098B4298 +:101F00005FD3030A8B4244D3030B8B4228D3030CC9 +:101F10008B420DD3FF22090212BA030C8B4202D36B +:101F20001212090265D0030B8B4219D300E0090A93 +:101F3000C30B8B4201D3CB03C01A5241830B8B429C +:101F400001D38B03C01A5241430B8B4201D34B0385 +:101F5000C01A5241030B8B4201D30B03C01A5241EA +:101F6000C30A8B4201D3CB02C01A5241830A8B426F +:101F700001D38B02C01A5241430A8B4201D34B0258 +:101F8000C01A5241030A8B4201D30B02C01A5241BC +:101F9000CDD2C3098B4201D3CB01C01A5241830970 +:101FA0008B4201D38B01C01A524143098B4201D3AA +:101FB0004B01C01A524103098B4201D30B01C01AD5 +:101FC0005241C3088B4201D3CB00C01A524183084F +:101FD0008B4201D38B00C01A524143088B4201D37C +:101FE0004B00C01A5241411A00D2014652411046DC +:101FF0007047FFE701B5002000F006F802BDC046BB +:102000000029F7D076E770477047C0461C210123AE +:102010001B04984201D3000C10391B0A984201D3CB +:10202000000A08391B09984201D30009043902A2A9 +:10203000105C40187047C046040302020101010110 +:102040000000000000000000002B11D1002A0FD179 +:10205000002900D1002802D00021C943080007B49C +:10206000024802A14018029003BDC0469DFFFFFF39 +:1020700003B4684601B5029800F034F8019B9E460F +:1020800002B00CBC7047C046F0B5CE469946030C72 +:102090009C46130447461B0C1D000E0061460404B9 +:1020A000240C80B50700100C4B436543414360434B +:1020B0002C0CC01820188C46834203D980235B0265 +:1020C0009846C444494679435643030C2D042D0CCD +:1020D0008919634400044019C918C0BCB946B04608 +:1020E000F0BDC046F0B557464E464546DE46E0B523 +:1020F00004000D009246994683B08B4230D82DD013 +:102100004946504600F0BAF829000600200000F0C9 +:10211000B5F8331A9846203B34D49B4653465A466A +:10212000934042461F00534693401E00AF423BD8A7 +:10213000AF4200D179E05B46A41BBD41002B00DA21 +:1021400076E0002200230092019301235A46934037 +:102150000193012342469340009329E08242CFD964 +:1021600000220023009201930C9B002B01D01C60E5 +:102170005D600098019903B0F0BCBB46B246A94629 +:10218000A046F0BD42469B4620239B1A5246DA40A9 +:10219000414613004A468A40170042461F435346B1 +:1021A00093401E00AF42C3D9002200230092019346 +:1021B0004346002BD8D0FB0772081A4346467B08DB +:1021C0000EE0AB4201D1A2420CD8A41A9D410120DD +:1021D00024196D410021013E24184D41002E06D0E6 +:1021E000AB42EED9013E24196D41002EF8D1009882 +:1021F00001995B4600196941002B24DB2B005A46EC +:102200004446D3402A00E2401C005B461500002BE8 +:102210002ADB26009E40330026004746BE4032009F +:10222000801A9941009001919EE7A342BCD882E7B1 +:102230004246202300219B1A002200910192012294 +:10224000DA40019285E7424620239B1A2A0046463F +:102250009A402300F340444613432A00E2401C0006 +:102260005B461500002BD4DA42462F0020232600BF +:1022700097409B1ADE403B003343CDE710B5002961 +:1022800003D1FFF7C3FE203002E00800FFF7BEFED7 +:1022900010BDC0467FB514001A00094B05001B682D +:1022A0000E00D868074B002C01D1074B1C000749D2 +:1022B000019302942B00009600F05CFC00F0F4FD0A +:1022C000140300085D5F0110985F01106A5F011040 +:1022D00010B5034B0A000100186800F003F810BDA8 +:1022E0001403000870B50B0C150C002B1ED1002D2B +:1022F0000CD189B294B24C43210000F09BF9051E29 +:102300001BD02200002100F07BFD16E02B1C0C1CD2 +:1023100089B292B24A43A1B29CB24C43130CE41866 +:10232000230C07D1240492B21443E5E7002D01D118 +:10233000141CEDE70C2300250360280070BD936892 +:1023400010B5013B9360002B04DA9469A34207DBCC +:102350000A2905D01368581C10601970080010BDB8 +:1023600000F034FC0100F9E7F8B506000F00140096 +:10237000D518AC4201D1002007E021783A003000A6 +:10238000FFF7DDFF0134431CF3D1F8BDF0B5A1B078 +:102390000F0015001E000390002804D0036A002BD4 +:1023A00001D100F0CFFB7B6EDB0705D4BB899B0519 +:1023B00002D4B86D00F062FDBB891B0702D53B69F2 +:1023C000002B13D13900039800F042FC00280DD0F7 +:1023D0007B6EDB0703D50120404221B0F0BDBB89F5 +:1023E0009B05F8D4B86D00F04AFDF4E7002308AC73 +:1023F0006361203363761033A37607962E0033781B +:10240000002B01D0252B48D1731B0593AE420BD076 +:102410002A0039000398FFF7A7FF013000D1AFE091 +:102420006369059A9B1863613378002B00D1A7E09C +:10243000012200235242626004A954325218751CD2 +:102440002360E360A3601370A365594B0522180055 +:102450002978059300F014FD6E1C00281FD1226816 +:10246000D30604D5532304A95B1820211970130740 +:1024700004D5532304A95B182B2119702B782A2B20 +:1024800016D02E0000210A20E3683278751C303AFD +:10249000092A4ED9002911D117E00136AFE7059B73 +:1024A0002268C01A01238340134335002360CCE720 +:1024B000079B191D1B680791002B01DB0B9304E0A0 +:1024C0005B42E36002231343236033782E2B0AD14F +:1024D00073782A2B35D1079B02361A1D1B68079289 +:1024E000002B2BDB0993334D03222800317800F0B9 +:1024F000C7FC002806D04023401B834022680136D9 +:1025000013432360317806222B48751C217600F096 +:10251000B7FC002843D0294B002B25D10722079B6D +:1025200007339343083307936369049A9B186361E5 +:1025300064E743432E0001219B18A6E701235B4279 +:10254000D0E700230A201A00013663603178751C39 +:102550003039092903D9002BC5D00992C3E742437A +:102560002E0001235218F1E707AA009221003A0039 +:10257000134B039800E000BF0490049B0133D3D1B8 +:102580007B6EDB0705D4BB899B0502D4B86D00F0D8 +:1025900076FCBB895B0600D51DE70D981DE707AAF1 +:1025A000009221003A00064B039800F02DF9E3E772 +:1025B000995F01109F5F0110A35F011000000000F0 +:1025C0006923011010B5044C13000A0001002068B3 +:1025D000FFF7DCFE10BDC0461403000810B5034B26 +:1025E0000100186800F068FC10BDC0461403000824 +:1025F00070B50F4E0D0031680400002902D100F0C3 +:102600002BFC30602900200000F026FC431C0AD07F +:102610000323C51C9D43A84207D0291A200000F0BF +:102620001BFC013001D101256D42280070BDC04660 +:102630002C680108F7B50322CB1C9343083306002E +:102640001F000C2B34D20C27B94233D8300000F0D5 +:10265000EBF9344D2B681C00002C30D139003000D0 +:10266000FFF7C6FF0400431C59D12C682500002D3C +:102670004CD1002C4DD023682900E3183000019381 +:1026800000F0EAFB019B834243D123680337FF1A22 +:1026900003239F4308370C2F00D20C27390030004A +:1026A000FFF7A6FF013034D02368DB19236013E065 +:1026B000002BC9DA0C23002533602800FEBD2168F9 +:1026C000C91B20D40B2917D9E2192760A34211D1C5 +:1026D0002A606368116053603000250000F0ACF997 +:1026E00007220B35231D9543EA1A9D42E5D05B1B5B +:1026F000A350E2E75A60ECE76268A34201D12A6086 +:10270000EAE75A60E8E723006468A5E72C006D68F3 +:10271000ADE70C233000336000F08EF9CDE7276081 +:10272000DAE7C04628680108F7B5160001938A6801 +:102730000B690C000090934200DA13002200336012 +:1027400043321278002A01D00133336023689B069C +:1027500002D53368023333602268062315001D401A +:102760001A4227D0230043331B785A1E9341226814 +:10277000920630D4220001990098089D4332A84760 +:10278000013025D00622236800251340042B05D1F3 +:102790003368E568ED1AEB43DB171D40A368226937 +:1027A000934201DD9B1AED180026B54220D100208E +:1027B00010E00135E36832689B1AAB42D2DD22009B +:1027C000012301990098089F1932B8470130F0D1D0 +:1027D00001204042FEBD3020E11843310870210045 +:1027E0005A1C45310978A218433202331170C1E7EF +:1027F0002200012301990098089F1A32B84701303E +:10280000E6D00136D1E70000F0B58BB006920A00A1 +:1028100043320793059004920A7E0C00109B782A9D +:1028200009D8622A0BD8002A00D1BEE07C49039166 +:10283000582A00D193E026004236327022E0100080 +:1028400063381528F7D800F01BFD16001F00F6FFAF +:10285000F6FFF6FFF6FF1F00F6FFF6FFF6FFF6FFA6 +:10286000A30036008300F6FFF6FFB400F6FF360043 +:10287000F6FFF6FF870026001A684236111D196020 +:10288000136833700123A2E018680968021D0D0661 +:102890000BD505681A60002D03DA2D23049A6D42CA +:1028A00013705F4B0A2703931BE005681A60490603 +:1028B000F1D52DB2EFE70D681968081D18602E06D6 +:1028C00001D50D6803E06D06FBD50D68ADB2544B24 +:1028D000082703936F2A00D00237230000224333D6 +:1028E0001A706368A360002B03DB042122688A430B +:1028F0002260002D02D1049E002B0CD0049E2800E3 +:102900003900FFF77DFB039B013E5B5C33702B00BE +:1029100005009F42F3D9082F09D12368DB0706D5AC +:10292000626823699A4202DC3023013E3370049BC3 +:102930009B1B2361079B210000930598069B09AA16 +:10294000FFF7F2FE013047D1012040420BB0F0BD4D +:10295000202209680A43226078223249039121002B +:1029600045310A701968226820C9100602D4500641 +:1029700000D5ADB21960D30702D5202313432360DD +:102980001027002DA9D12022236893432360A4E7B8 +:102990001A680D68101D4969186013682E0601D564 +:1029A000196002E06D06FBD519800023049E2361A7 +:1029B000C0E71A68111D19601668002130006268AE +:1029C00000F05EFA002801D0801B6060636823611C +:1029D0000023049A1370ADE7320023690699059825 +:1029E000079DA8470130AFD023689B0715D4099BEA +:1029F000E0689842AADA1800A8E7220001230699A5 +:102A00000598079E1932B04701309DD00135E36823 +:102A1000099A9B1AAB42F0DCE9E70025F7E7C046CC +:102A2000AA5F0110BB5F011010B5024800F026FA42 +:102A300010BDC0466C69010810B5024800F01FFACD +:102A400010BDC0466C690108002310B50400036086 +:102A500043608360818143661900C28103614361E1 +:102A6000836108225C3000F0CBF9054B246263627D +:102A7000044BA362044BE362044B236310BDC046C6 +:102A8000B9300110E1300110193101104531011048 +:102A900010B5034A0349044800F07CF810BDC04655 +:102AA000BC02000861300110C802000841680B4BED +:102AB00010B50400994201D000F0D2FAA168084B89 +:102AC000994202D0200000F0CBFAE168054B994210 +:102AD00002D0200000F0C4FA10BDC04630680108E2 +:102AE000986801080069010810B5094B094A0421DA +:102AF0001A6009480022FFF7A7FF012209210748B1 +:102B0000FFF7A2FF022212210548FFF79DFF10BD2B +:102B100068690108912A0110306801089868010865 +:102B20000069010810B5024800F0A8F910BDC046C0 +:102B30006D69010810B5024800F0A1F910BDC0464A +:102B40006D69010810B50400FFF7ECFF236A002B44 +:102B500002D0FFF7EFFF10BD044B2362044B1B684C +:102B6000002BF6D1FFF7C0FFF3E7C046AD2A0110F6 +:102B7000686901080EB417B5054C05AB04CB01001C +:102B800020680193FFF702FC1EBC08BC03B0184785 +:102B900014030008F7B51400002600900191A56801 +:102BA0006768013F04D52468002CF8D13000FEBDD1 +:102BB000AB89012B08D90E22AB5E013304D029006A +:102BC0000098019B984706436835EAE7F8B5060088 +:102BD0000D001400002804D0036A002B01D1FFF778 +:102BE000B1FFA369A360A3891B0728D52369002B24 +:102BF00025D023692068EFB2C01A6369EDB2834221 +:102C000005DC2100300000F02BFA00281DD1A3685C +:102C10000130013BA36023685A1C22601F70636966 +:102C2000834204D0A389DB0707D50A2D05D12100F3 +:102C3000300000F015FA002807D12800F8BD210067 +:102C4000300000F005F80028D3D001256D42F4E7EC +:102C5000304B70B5050018680C00002804D0036ADA +:102C6000002B01D1FFF76EFF0C23E25E93B2110738 +:102C700023D4D90607D4092301202B60373313430B +:102C8000A381404270BD5B0713D5616B002908D05A +:102C900023004433994202D0280000F00DF90023AC +:102CA00063632422A3899343A38100236360236980 +:102CB00023600823A2891343A3812369002B0BD12E +:102CC000A0218022A389890092000B40934203D067 +:102CD0002100280000F048F80C22A35E01201A0011 +:102CE00099B2024003420FD00022A26062695242B0 +:102CF000A261002022698242C4D10906C2D54022C5 +:102D00001343A3810138BDE7880700D46269A2603C +:102D1000EFE7C0461403000870B50E001D000E2337 +:102D2000C95E140096B000290CDAB2898023110024 +:102D300019401A4213D00021403B00202960236033 +:102D400016B070BD6A4600F063F80028EDDBF02392 +:102D500001991B021940034BC9184B42594180236A +:102D6000DB00EAE700E0FFFFF7B502268B890500EC +:102D70000C00334206D02300473323602361012334 +:102D80006361F7BD6A4601ABFFF7C6FF0099070014 +:102D90002800FFF74FFC002808D10C22A35E9A05FB +:102DA000EFD4032293431E43A681E4E78023A28944 +:102DB00020601343A381009B20616361019B002B72 +:102DC0000CD028000E23E15E00F034F8002805D076 +:102DD0000323A2899A43023B1343A381A3893B4364 +:102DE000A381CEE730B500240139A24201D10020F1 +:102DF00005E0035D01340D5DAB42F6D0581B30BDDC +:102E000003008218934200D1704719700133F9E72B +:102E1000002370B5064D0400080011002B6000F07F +:102E200041FA431C03D12B68002B00D0236070BDF6 +:102E300070690108002370B5064D040008002B607E +:102E400000F040FA431C03D12B68002B00D0236014 +:102E500070BDC04670690108002370B5064D0400BE +:102E600008002B6000F046FA431C03D12B68002BAE +:102E700000D0236070BDC04670690108704770477C +:102E8000C9B28218904201D10020704703788B426A +:102E9000FBD00130F6E7002310B59A4200D110BDF7 +:102EA000CC5CC4540133F8E7062010B500F0B4F947 +:102EB000012000F02DFA000070B50500002910D0A7 +:102EC0000C1F2368002B00DAE4182800FFF7ACFD84 +:102ED0001D4A1368002B05D1636014602800FFF7BA +:102EE000ABFD70BDA34208D9206821188B42F3D1F5 +:102EF00019685B6809182160EEE71A005B68002B0F +:102F000001D0A342F9D911685018A0420BD1206812 +:102F10000918501811608342E0D118685B684118A5 +:102F200011605360DAE7A04202D90C232B60D5E789 +:102F3000206821188B4203D119685B680918216049 +:102F400063605460CAE7C04628680108F7B58B89FA +:102F500005000C001A075CD44A68002A04DC0A6CDD +:102F6000002A01DC0020FEBDE76A002FFAD0002213 +:102F700080202E682A601A004001216A0240034224 +:102F800034D0606DA3895B0706D56368C01A636B94 +:102F9000002B01D0236CC01A020000232800E76A2E +:102FA000216AB847A289431C06D129681D292CD85B +:102FB0002A4B0B41DB0728D400236360236923607D +:102FC000D20405D5431C02D12B68002B00D16065CB +:102FD000616B2E600029C5D023004433994202D092 +:102FE0002800FFF769FF00206063BCE70123280089 +:102FF000B847431CC6D12B68002BC3D01D2B01D072 +:10300000162B01D12E60ADE7A28940231343A38183 +:10301000A9E70E69002EA5D00F680E60BA1B0192B9 +:1030200000229B0700D14A69A260019B002B99DD19 +:10303000A36A32001F002800019B216AB8470028BC +:1030400006DC40230120A28940421343A3818AE782 +:10305000019B36181B1A0193E7E7C046FEFFBFDF4E +:103060000B6970B505000C00002B02D1002528006B +:1030700070BD002804D0036A002B01D1FFF762FD68 +:103080000C22A35E002BF1D0626ED20704D49B0504 +:1030900002D4A06DFFF7F2FE28002100FFF756FFD3 +:1030A000636E0500DB07E2D4A3899B05DFD4A06D26 +:1030B000FFF7E5FEDBE7000070B50C000E25495F69 +:1030C00000F06CF8002803DB636D1B18636570BDAE +:1030D000A389024A1340A381F9E7C046FFEFFFFF2F +:1030E000F8B51F008B8905000C001600DB0505D51F +:1030F0000E23C95E0022022300F03CF8A389054A92 +:1031000028001340A38132000E23E15E3B0000F053 +:10311000A3F8F8BDFFEFFFFF70B50C000E25495F67 +:1031200000F028F8A389421C03D1054A1340A3816B +:1031300070BD802252011343A3816065F8E7C04649 +:10314000FFEFFFFF10B50E23C95E00F001F810BDC0 +:10315000002370B5064D040008002B6000F09AF8BB +:10316000431C03D12B68002B00D0236070BDC046E8 +:103170007069010870B50400080011001A000023EE +:10318000054D2B6000F0AEF8431C03D12B68002BDB +:1031900000D0236070BDC0467069010870B504009E +:1031A000080011001A000023054D2B60F0F7A8FF5E +:1031B000431C03D12B68002B00D0236070BDC04698 +:1031C0007069010870B504000D001F2904D9162389 +:1031D00003600120404270BDC36B002B04D08A0005 +:1031E0009B181A68002A08D1200000F031F82A0044 +:1031F0000100200000F01AF8EDE70020012AEAD0D3 +:10320000511C03D1162301302360E4E70024280079 +:103210001C6090472000DEE710B5034B01001868E2 +:10322000FFF7D0FF10BDC04614030008002370B59F +:10323000064D0400080011002B6000F04BF8431C01 +:1032400003D12B68002B00D0236070BD706901088A +:1032500010B500F02FF810BD70B504000800110083 +:103260001A000023054D2B60F0F730FF431C03D1FB +:103270002B68002B00D0236070BDC0467069010828 +:1032800003B47146490840004900095E49008E4474 +:1032900003BC704758220120014B40421A6070471E +:1032A0007069010858220120014B40421A607047A2 +:1032B0007069010858220120014B40421A60704792 +:1032C000706901085822024B00201A607047C046FE +:1032D0007069010858220120014B40421A60704772 +:1032E0007069010858220120014B40421A60704762 +:1032F00070690108044A03001068002802D0C3184E +:10330000136070470148FAE7746901087869010899 +:10331000FEE7C046F8B5C046F8BC08BC9E467047FC +:10332000F8B5C046F8BC08BC9E46704700000000D7 +:1033300001B40248844601BC604700BF0104000894 +:1033400001B40248844601BC604700BF650500081F +:103350005B494E465D205374617274696E672055F7 +:10336000736572204170706C69636174696F6E205F +:103370002877616974292E2E2E0A0D005B494E466E +:103380005D20537461727420736C6F7420416464A7 +:10339000726573733A2030782530386C780A0D00E6 +:1033A0005B494E465D204C61756E6368696E6720AF +:1033B000617070206F6E20434D3420636F72650A18 +:1033C0000D0000005B494E465D204D4355426F6F36 +:1033D0007420426F6F746C6F616465722066696EF1 +:1033E00069736865642E0D0A4465696E6974696164 +:1033F0006C697A696E672068617264776172652EA4 +:103400002E2E0A0D000000005B4552525D20466CD6 +:1034100061736820646576696365204944206E6F36 +:103420007420666F756E640A0D0000005B45525291 +:103430005D204661696C656420746F207265676900 +:103440007374657220737973706D417070536C651D +:10345000657043616C6C6261636B48616E646C653E +:10346000720A0D005B494E465D201B5B324A1B5BB6 +:103470003B480A0D000000005B494E465D204D436D +:1034800055426F6F7420426F6F746C6F6164657228 +:1034900020537461727465640A0D00005B494E46E6 +:1034A0005D2045787465726E616C204D656D6F723C +:1034B0007920696E697469616C697A656420772F17 +:1034C00020534644502E0A0D000000005B45525226 +:1034D0005D2045787465726E616C204D656D6F720C +:1034E0007920696E697469616C697A6174696F6E5B +:1034F00020772F2053464450204641494C45443ABA +:103500002030782530386C780A0D00005B494E4633 +:103510005D2055736572204170706C6963617469D8 +:103520006F6E2076616C6964617465642073756385 +:103530006365737366756C6C790A0D005B45525256 +:103540005D20426F6F74206F66206E657874206115 +:103550007070206661696C65640A0D005B455252AB +:103560005D204661696C656420746F20696E6974C2 +:10357000205744540A0D00005B4552525D204D43D4 +:1035800055426F6F7420426F6F746C6F6164657227 +:1035900020666F756E64206E6F6E65206F662062A8 +:1035A0006F6F7461626C6520696D616765730A0D88 +:1035B0000000000028696D6167655F6E756D2920E8 +:1035C0003C203078465500002E2E2F2E2E2F6D7465 +:1035D000625F7368617265642F6D6375626F6F748B +:1035E0002F76312E392E312D637970726573732FDA +:1035F000626F6F742F626F6F747574696C2F737262 +:10360000632F626F6F747574696C5F7075626C693B +:10361000632E630028737761705F74797065292069 +:103620003C2030784655000062616400676F6F642B +:1036300000000000756E7365740000007065726DA7 +:103640000000000074657374000000004255473BA1 +:103650002063616E27742068617070656E000000E1 +:1036600072657665727400005B494E465D20536555 +:10367000636F6E6461727920696D616765206F6642 +:1036800020696D6167652070616972202825642E4C +:103690002920697320756E726561636861626C656B +:1036A0002E20547265617420697420617320656DE9 +:1036B0007074790A0D000000626F6F745F73776138 +:1036C000705F747970655F6D756C74693A205072C3 +:1036D000696D61727920696D616765005B494E466D +:1036E0005D2025733A206D616769633D25732C2049 +:1036F000737761705F747970653D307825782C2020 +:10370000636F70795F646F6E653D307825782C202B +:10371000696D6167655F6F6B3D307825780A0D00D4 +:10372000626F6F745F737761705F747970655F6DDE +:10373000756C74693A205365636F6E6461727920A9 +:10374000696D6167650000005B494E465D205377F7 +:10375000617020747970653A2025730A0D000000AD +:103760005B494E465D205377617020747970653AED +:10377000206E6F6E650A0D00626F6F745F777269FD +:1037800074655F737761705F696E666F000000003B +:1037900077C295F360D2EF7F3552500F2CB6798007 +:1037A00004010403040204010401040301030304EB +:1037B00001040000000000006FC75E10DE8EBD2017 +:1037C000B149E330BC1D7B41D3DA25516293C66118 +:1037D0000D549871783BF68217FCA892A6B54BA2BF +:1037E000C97215B2C4268DC3ABE1D3D31AA830E396 +:1037F000756F6EF32A8648CE3D0201002A8648CEB8 +:103800003D03010700000000656C656D5F737A2061 +:10381000213D2030750000002E2E2F2E2E2F6D748E +:10382000625F7368617265642F6D6375626F6F7438 +:103830002F76312E392E312D637970726573732F87 +:10384000626F6F742F626F6F747574696C2F73720F +:10385000632F6C6F616465722E630000616C696731 +:103860006E20213D203075007072696D61727900A3 +:103870007365636F6E646172790000005B4552523C +:103880005D20496D61676520696E2074686520253B +:103890007320736C6F74206973206E6F742076616F +:1038A0006C6964210A0D00007263203D3D203000E8 +:1038B0005B57524E5D2025642073746174757320CC +:1038C0007772697465206661696C732070657266D1 +:1038D0006F726D696E672074686520737761700A16 +:1038E0000D0000005B4552525D2070616E696321DE +:1038F0000A0D0000300000005B57524E5D2046610B +:10390000696C65642072656164696E6720736563C4 +:10391000746F72733B20424F4F545F4D41585F4963 +:103920004D475F534543544F52533D2575202D203D +:10393000746F6F20736D616C6C3F0A0D00000000A6 +:103940005B57524E5D204661696C6564207265610B +:1039500064696E6720696D6167652068656164658B +:1039600072733B20496D6167653D25750A0D000046 +:103970005B4552525D204669726D77617265202BFE +:1039800020746C767320696E20736C6F74202575BB +:10399000206F7665726C6170732077697468206C33 +:1039A00061737420736563746F722C207768696328 +:1039B0006820636F6E7461696E7320747261696CE4 +:1039C00065722C2065726173696E67207468697313 +:1039D00020696D6167650A0D000000005B57524E5B +:1039E0005D204661696C65642072656164696E671B +:1039F00020626F6F74207374617475733B20496D1E +:103A00006167653D25750A0D000000005B494E4663 +:103A10005D20496D6167652075706772616465201E +:103A20007365636F6E6461727920736C6F74202D9F +:103A30003E207072696D61727920736C6F740A0D2B +:103A4000000000005B494E465D2045726173696E5F +:103A50006720746865207072696D61727920736C7B +:103A60006F740A0D000000005B494E465D20436FF5 +:103A70007079696E6720746865207365636F6E6422 +:103A800061727920736C6F7420746F207468652084 +:103A90007072696D61727920736C6F743A2030783E +:103AA000256C782062797465730A0D002E745C3A77 +:103AB000122E9F9F626F6F745F636F70795F696D85 +:103AC00061676500626F6F745F706572666F726DBB +:103AD0005F75706461746500626F6F745F737761A6 +:103AE000705F696D61676500626F6F745F636F6DB2 +:103AF000706C6574655F7061727469616C5F737717 +:103B000061700000626F6F745F77726974655F73D4 +:103B10007A000000626F6F745F7072657061726529 +:103B20005F696D6167655F666F725F757064617410 +:103B300065000000636F6E746578745F626F6F7408 +:103B40005F676F5F666C6173680000002E2E2F2E1A +:103B50002E2F6D74625F7368617265642F6D63757B +:103B6000626F6F742F76312E392E312D637970721A +:103B70006573732F626F6F742F626F6F74757469E2 +:103B80006C2F7372632F737761705F7363726174EC +:103B900063682E63000000005B57524E5D20557035 +:103BA00067726164652064697361626C6564206634 +:103BB0006F7220696D6167652025750A0D00000030 +:103BC0005B57524E5D2043616E6E6F742075706757 +:103BD000726164653A206D6F726520736563746FFE +:103BE0007273207468616E20616C6C6F7765640A13 +:103BF0000D0000005B57524E5D2043616E6E6F7486 +:103C000020757067726164653A20736C6F747320FD +:103C100068617665206E6F6E2D636F6D706174697B +:103C2000626C6520736563746F72730A0D00000027 +:103C30005B57524E5D2043616E6E6F7420757067E6 +:103C4000726164653A206E6F7420616C6C207365DC +:103C500063746F72732066697420696E736964653A +:103C600020736372617463680A0D00005B57524EE3 +:103C70005D2043616E6E6F7420757067726164655C +:103C80003A20736C6F747320617265206E6F7420BC +:103C9000636F6D70617469626C650A0D00000000ED +:103CA00073637261746368006E6F6E65000000007C +:103CB0007072696D61727920736C6F74000000001E +:103CC0005072696D61727920696D616765000000ED +:103CD00053637261746368005B494E465D20426FB6 +:103CE0006F7420736F757263653A2025730A0D0037 +:103CF0005B494E465D20426F6F7420736F7572632F +:103D0000653A206E6F6E650A0D0000005B494E46F5 +:103D10005D205374617274696E67207377617020DF +:103D20007573696E67207363726174636820616C78 +:103D3000676F726974686D2E0A0D0000626F6F7490 +:103D40005F737761705F736563746F7273000000F7 +:103D5000737761705F7374617475735F736F75727D +:103D6000636500000105010001050302040104016F +:103D7000030403025B4552525D204465746563741D +:103D8000656420696E636F6E73697374656E742009 +:103D9000737461747573210A0D0000005B45525203 +:103DA0005D20747261696C657220636F7079206642 +:103DB00061696C65640A0D005B494E465D20457281 +:103DC0006173696E6720747261696C65723B20660D +:103DD000615F69643D25750A0D00000030203D3D9E +:103DE000207263002E2E2F2E2E2F6D74625F73684B +:103DF000617265642F6D6375626F6F742F76312EFB +:103E0000392E312D637970726573732F626F6F7401 +:103E10002F626F6F747574696C2F7372632F737771 +:103E200061705F7374617475735F6D6973632E6322 +:103E300000000000737761705F7374617475735F65 +:103E4000696E697400000000EFBEADDE0100000085 +:103E5000583E0110B43E01103059301306072A862F +:103E600048CE3D020106082A8648CE3D03010703DD +:103E7000420004FF36BA0D0127531A8E9B4BCAF439 +:103E8000F82FB7D18706D162D57215ACFBDF439C02 +:103E9000EAF7499A1A96FEBFA4234856BC05BF729A +:103EA000A426C9AC6546CD366C5E30FAFE2257C6F4 +:103EB00018F834005B00000008000000010000005A +:103EC000000000000000000000000000AA420010F6 +:103ED0004E4200105642001056420010664200103A +:103EE000664200108242001082420010F44100102D +:103EF000FE43001068430010704300107C43001024 +:103F00008E430010A2430010BC430010DA4300109F +:103F100022430010010000000E000000110000000C +:103F20000000000000000000000000000000000091 +:103F30000100000000000000000000000000000080 +:103F40000000000000000000010000000E00000062 +:103F50001100000000000000000000000000000050 +:103F60000000000001000000000000000000000050 +:103F70000000000000000000000000000100000040 +:103F80000E00000011000000000000000000000012 +:103F90000000000000000000010000000000000020 +:103FA0000000000000000000000000000000000011 +:103FB000010000000E0000001100000000000000E1 +:103FC00000000000000000000000000001000000F0 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000010000000600000011000000B9 +:103FF00000000000000000000000000000000000C1 +:1040000001000000000000000000000000000000AF +:10401000000000000000000000000000010000009F +:104020000100000000000000000000008005314099 +:104030000200000011000000800531400100000076 +:104040001100000080053140000000001100000058 +:10405000000631400400000011000000A1470010DC +:10406000A547001031480010EB470010A74700108B +:104070009D470010974700107D47001066616C73E4 +:10408000650000002E2E2F2E2E2F6D74625F736838 +:10409000617265642F6D6375626F6F742F76312E58 +:1040A000392E312D637970726573732F626F6F745F +:1040B0002F637970726573732F706C6174666F72A1 +:1040C0006D732F6D656D6F72792F50534F43362F7F +:1040D000666C6173685F6D61705F6261636B656E72 +:1040E000645F706C6174666F726D2E680000000012 +:1040F000666C6173685F617265615F6765745F615B +:1041000070690000C14D0010C54D00108F4E0010A9 +:10411000434E0010CF4D0010BD4D0010C74D001094 +:10412000AD4D0010010000000800000064430110C4 +:10413000010000000800000084430110010000009D +:1041400001000000E001000801000000080000007C +:104150002445011001000000080000004445011042 +:10416000010000000000000000000000010000004D +:104170000800000064450110010000000800000074 +:104180008445011001000000000000000000000054 +:104190000100000008000000A4450110010000001B +:1041A00008000000C44501100100000000000000EC +:1041B000000000000100000008000000E4450110BC +:1041C000010000000800000004460110010000008A +:1041D00000000000000000000100000008000000D6 +:1041E00024460110010000000800000044460110B0 +:1041F00001000000000000000000000001000000BD +:1042000008000000644601100100000008000000E2 +:1042100084460110010000000000000000000000C2 +:104220000100000008000000A44601100100000089 +:1042300008000000C446011001000000000000005A +:10424000000000000100000008000000E44601102A +:1042500001000000080000000447011001000000F8 +:104260000000000000000000010000000800000045 +:10427000244701100100000008000000444701101D +:10428000010000000000000000000000010000002C +:1042900008000000A4430110010000000800000015 +:1042A000C4430110010000000000000000000000F5 +:1042B0000100000008000000E443011001000000BC +:1042C000080000000444011001000000000000008C +:1042D000000000000100000008000000244401105C +:1042E000010000000800000044440110010000002B +:1042F00000000000000000000100000008000000B5 +:104300006444011001000000080000008444011012 +:10431000010000000000000000000000010000009B +:1043200008000000A4440110010000000800000083 +:10433000C444011001000000000000000000000063 +:104340000100000008000000E4440110010000002A +:1043500008000000044501100100000000000000FA +:1043600000000000211D5C11D68032342211C2569B +:10437000D3C1034AB99013327FBFB46BBD0C0EB7E3 +:1043800000000000347E00859981D5446447075AB7 +:10439000A07543CDE6DF224CFB23F7B5886337BD1C +:1043A00000000000635FA86C468343FAFAA99311EA +:1043B000B6075774772A9D03897ED73C7B8C62CFE2 +:1043C00000000000442C1359CCFA849E51B948BC1B +:1043D00057C7B37CFC0A38242E3A2825BC0A43B8B8 +:1043E000000000005925ABC1EE703CE1F3DB451D38 +:1043F0004A807535E81F4D2D9A05F4CB6B10F05AA5 +:10440000000000003595E1DC1586C37BECDC27D18C +:1044100056A1140D590BD6774E44A2F89442711F41 +:10442000000000003086B2B0C82F7BFE96EFCBDBD9 +:10443000BC9E3BC51B0386DD5BF58D46589579D642 +:1044400000000000843214DA9B4F0739B53EFB06AA +:10445000EEA74040761FDF7161FD8BBE808BAB8B7A +:1044600000000000C934B3B4BC9FB05EE65848A851 +:1044700077BB132F41C6F734CC89210ACA33DD1F1D +:1044800000000000CC81EFA4F2100BCD83F76E7218 +:104490004ADFDDE867230A53031662D20B76FD3C40 +:1044A00000000000CB14A1FAA018BE07032AE1D730 +:1044B000B06CA0DED1C0B0C66324CD4E33382CB171 +:1044C00000000000EECD7D200CFEACC309979FA23A +:1044D000B645F77BCA99F3D22002EB0443185B7B05 +:1044E000000000002BDD779160EAFDD37DD3B5D6C7 +:1044F00090170E1A00F428C1F253F6634958DC6194 +:1045000000000000A82001FBF1BD5F45D07F06DA66 +:1045100011CBBAA6A74100A41B303379F4FF27CAF8 +:1045200000000000E0F9B8D03DD2D3FA1EFD992674 +:1045300019FE136E1C0E4C487CA217013DA31357A5 +:10454000000000009F165C8FAAED0F58BFC54334D2 +:1045500093052A4CE4E36CCAC614C225D3436CD736 +:1045600000000000C35A981EC8A542A39849567877 +:10457000F8EFED651BBB64B64C545FD12F0C33CC08 +:1045800000000000FA79CB2E08FFD8E62E1FD4D702 +:1045900057E93945D8D63B0A1C87B76AEB30D805AE +:1045A00000000000AD79749AE6BBC2C2B45BA66796 +:1045B000C191E764F0DF3882192C4CCAD12E39C57D +:1045C000000000009936784EAE5B027614F68BF848 +:1045D000F4926B42BA4D7135E70C2C989BA51FAE37 +:1045E00000000000AF1C4BDF5BF251B70574B15AFD +:1045F000C60F0E61E8240962AFFCDB4543E180553C +:10460000000000003C82FEADC3E5CFD824A26217B3 +:1046100076F05AFA3EB8E5ACB76638AA97FD86053B +:104620000000000059D30C3CD166B0F1BC59B48DE8 +:104630009010B7A296479BE6558AE4EEB149DB7825 +:10464000000000004197EDDEFFB3DF4810B983B7EB +:10465000EBBE408DAFD3D3CD0E82793D9B831BF053 +:10466000000000003F22BB54D33156FC8036E5E009 +:1046700089968E71E1EF0AEDD0114AFF1500572798 +:104680000000000013CA3DF7649B6E8590E3706BD9 +:1046900041D7ED8F02444480CE13379294738079D2 +:1046A00000000000B74D707D310F1C586D358847F4 +:1046B000C424783FBAF0CD9181B3DEB604CEC6F7FC +:1046C00000000000E99C2DE8D2008F10D55E7C0E22 +:1046D0000C6E5802AE8121CE43F4243D9EBCF0F412 +:1046E00000000000D610C2744A8F8ACF8967F42B6D +:1046F000382B3517F5E70CA9FA775CBDE033192B99 +:1047000000000000E73E962253E1E9BEE013BCA1A1 +:1047100016EC011A9A00C97AC373A545E1F45EC18B +:1047200000000000A895D6D932302BD07742090579 +:10473000612A7E827384A205886465F9032D90B393 +:10474000000000000AE72E8555807C790FC1AC7807 +:10475000B4AFFB6ED3C3288E79181F583446CF49A7 +:1047600000000000B4FF552343390B27BAD8BFD748 +:10477000B7B04450563241F5ABB3040C850A05B4CA +:10478000211D5C11D68032342211C256D3C1034A96 +:10479000B99013327FBFB46BBD0C0EB7347E008569 +:1047A0009981D5446447075AA07543CDE6DF224C72 +:1047B000FB23F7B5886337BD3D2A5C5C4529DD13D3 +:1047C0003EF0B8E0A216FFFFFFFFFFFFFFFFFFFF75 +:1047D000FFFFFFFF010000000000000000000000DC +:1047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:1047F000000000000100000008000000344A011021 +:104800000100000008000000544A011001000000EF +:1048100001000000E00100080100000008000000A5 +:10482000F44B01100100000008000000144C0110BE +:104830000100000000000000000000000100000076 +:1048400008000000344C01100100000008000000C6 +:10485000544C0110010000000000000000000000A6 +:104860000100000008000000744C0110010000006D +:1048700008000000944C011001000000000000003E +:10488000000000000100000008000000B44C01100E +:104890000100000008000000D44C011001000000DD +:1048A00000000000000000000100000008000000FF +:1048B000F44C01100100000008000000144D01102C +:1048C00001000000000000000000000001000000E6 +:1048D00008000000344D0110010000000800000035 +:1048E000544D011001000000000000000000000015 +:1048F0000100000008000000744D011001000000DC +:1049000008000000944D01100100000000000000AC +:10491000000000000100000008000000B44D01107C +:104920000100000008000000D44D0110010000004B +:10493000000000000000000001000000080000006E +:10494000F44D01100100000008000000144E011099 +:104950000100000000000000000000000100000055 +:1049600008000000744A0110010000000800000067 +:10497000944A011001000000000000000000000047 +:104980000100000008000000B44A0110010000000E +:1049900008000000D44A01100100000000000000DF +:1049A000000000000100000008000000F44A0110AF +:1049B0000100000008000000144B0110010000007D +:1049C00000000000000000000100000008000000DE +:1049D000344B01100100000008000000544B01108E +:1049E00001000000000000000000000001000000C5 +:1049F00008000000744B01100100000008000000D6 +:104A0000944B0110010000000000000000000000B5 +:104A10000100000008000000B44B0110010000007C +:104A200008000000D44B011001000000000000004D +:104A30000000000096C298D84539A1F4A033EB2DB0 +:104A4000817D0377F240A463E5E6BCF847422CE1A0 +:104A5000F2D1176BF551BF376840B6CBCE5E316BE4 +:104A60005733CE2B169E0F7C4AEBE78E9B7F1AFEA8 +:104A7000E242E34FC9D23AE803C56D5DBE35D0AE20 +:104A80001D7A9FCA331ED2CBAC882755F0B99CE063 +:104A900031DD998661F99B3296415838F95A2AB826 +:104AA000960EB24CC1782CC708991924B75928E939 +:104AB0008454E616DD3830DB702C0AA27C5C9DE95C +:104AC000D5460B5F830B604B377DB9C95E24F33D40 +:104AD000797F6C187FE51C4F6024F72AEDD8E291AE +:104AE0007F89499297A72E8D6AB339811389B59A28 +:104AF000B88D429C8D45E64B3F4F1E1F47655E5962 +:104B000022CC725FF1931A271E34C55B63F2A5585D +:104B10005C152EC6F47FBA585A846F5FADA6367EF8 +:104B2000DCF7E167044DAAEE57763AD34E7E26189D +:104B300022239FFF1D4C64C755023FE3D80290BB60 +:104B4000C3EC30409F6F64F4166948A4FA449C9506 +:104B50000C7D675E44918BD8D0D7E7E21FF948629D +:104B60006FA8935DEA3A9902D50B3DE31ED300315D +:104B7000E60C9F4456B2AAFD8815DF524C3527310A +:104B800044CDC06853F891A57194842A92CBD093F8 +:104B9000E988DAE424C639165DA31E6DBA07372604 +:104BA000362AFE6051BCF3D0DE50FC97802E0610F2 +:104BB000154DFAF72765695B66A2752E9C16005A9B +:104BC000B030251A42FB864280C1C4765B1D838EBD +:104BD00094015F82393770EF1FA1F0DB6A105BCE62 +:104BE000C49B6F10501111244F4C7961173A72BC5D +:104BF000FE72584370C8BA04B74BD2F7ABC6233A1B +:104C0000A0093A591D9D4CF95823CCDF02ED7B29B0 +:104C1000870FFA3C4069F2400BA398CEAFA8480238 +:104C20000D1C12629BAF098380AA58A7C612BE70E2 +:104C30009476E3E47D7DEF86FFE337DDDB868B084A +:104C4000277CD7F691544C254F9AFE285EFDF06DD7 +:104C5000370369D696D5DAAD9249F09FF973439E32 +:104C6000AFA7D1F3674107DF78953EA1223DD1E69A +:104C70003CA5E220BF6A5D5235D7BFAE5AA2BE96B0 +:104C8000F4F802C3A4204954EAB382DB2EDBEA0223 +:104C9000D1751C62F085F49E4CDC3989636DC45774 +:104CA000D8035D22707F2D526FC9DA4F9D64FAB42C +:104CB000FEA4C4D72A37B9C0AA59C68B3F58D9ED2C +:104CC000589965F7887D268C4AF9059F9D739AC986 +:104CD000E746DC00F2D055DF000AF54A6ABF56818C +:104CE0002D20EBB511C12852ABE3D14024347945D6 +:104CF00057A51203EECFB87EF792968D3D018C0D2D +:104D000023F2E305592EE384527A3476E5A1B015F7 +:104D100090E2533CD498E7FAA57D8B539135D200AD +:104D2000D11B9F1B3F69089A72F0A911B3FE0E14A4 +:104D3000DA7C0ED383F6E8F887F7FC6D90BE7F3FF0 +:104D40007A2BD713CF32F22D946D42FDAD9AE35FEB +:104D500042BB84EDFC952973A1673E02E3305435D4 +:104D60008E0ADD6703D7A197613BF80CF2333C58FC +:104D7000553423A3995D165F7BBCBBCE61EE4E8A92 +:104D8000C151CC501F0D4D1B53231DB3DA2A386679 +:104D90005284E1955B9B830A814FADAC0FFF42418A +:104DA0006EA9A2A02FA14F1F8982AA3EF3B80F6B54 +:104DB0008F8CD668F1B3BB5169A21193654F0F8DEB +:104DC000BD260FE8B9CBEC6B34C33D9DE45D1E10EE +:104DD000D544E254289EB1F16E4CADB3B7E3C2584E +:104DE000C0FB3443259CDF350741BD19B66E10EC7E +:104DF0000EECBBD6C8CFEF3F831A88E80B29B5B9B4 +:104E0000E0C9A3AE88461E77CD7EB310B621D0D4BC +:104E1000A31608EEA1CAA8B3BF29998ED1F205C185 +:104E2000CF5D91489F0149DB82DF5F3AE10690AD9B +:104E3000E338A4C44B60D2273E3CCE3BF6B053CC03 +:104E4000B0061D65BC86987655BDEBB3E7933AAACC +:104E5000D835C65A96C298D84539A1F4A033EB2D5F +:104E6000817D0377F240A463E5E6BCF847422CE17C +:104E7000F2D1176BF551BF376840B6CBCE5E316BC0 +:104E80005733CE2B169E0F7C4AEBE78E9B7F1AFE84 +:104E9000E242E34F512563FCC2CAB9F3849E17A7CF +:104EA000ADFAE6BCFFFFFFFFFFFFFFFF00000000C1 +:104EB000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:104EC00000000000000000000000000001000000E1 +:104ED000FFFFFFFF982F8A4291443771CFFBC0B587 +:104EE000A5DBB5E95BC25639F111F159A4823F92B5 +:104EF000D55E1CAB98AA07D8015B8312BE8531240E +:104F0000C37D0C55745DBE72FEB1DE80A706DC9BCE +:104F100074F19BC1C1699BE48647BEEFC69DC10F7A +:104F2000CCA10C246F2CE92DAA84744ADCA9B05CB6 +:104F3000DA88F97652513E986DC631A8C82703B079 +:104F4000C77F59BFF30BE0C64791A7D55163CA0687 +:104F500067292914850AB72738211B2EFC6D2C4D93 +:104F6000130D385354730A65BB0A6A762EC9C28181 +:104F7000852C7292A1E8BFA24B661AA8708B4BC217 +:104F8000A3516CC719E892D1240699D685350EF441 +:104F900070A06A1016C1A419086C371E4C774827F8 +:104FA000B5BCB034B30C1C394AAAD84E4FCA9C5B6E +:104FB000F36F2E68EE828F746F63A5781478C884BF +:104FC0000802C78CFAFFBE90EB6C50A4F7A3F9BEA1 +:104FD000F27871C60000051207000B1201001312CF +:104FE0000900171202001B1205002B120A002F12D3 +:104FF000030033120600371204003B120400431270 +:105000000B00471202004B120100531205005B1205 +:105010000600631206006B120C006F1200000412EF +:1050200007000A12010012120900161202001A12D9 +:1050300005002A120A002E12030032120600361250 +:1050400004003A12040042120B00461202004A12F7 +:105050000100521205005A120600621206006A127E +:105060000C006E120000021207000812010010125C +:10507000090014120200181207002012050028125D +:105080000A002C12030030120600341204003812F9 +:10509000040040120B00441202004812010050129A +:1050A0000500581206006012060068120C006C120F +:1050B0000000031207000912010011120900151265 +:1050C0000200191207002112050029120A002D12F0 +:1050D0000300311206003512040039120400411297 +:1050E0000B0045120200491201005112050059122D +:1050F00006006112060069120C006D120505060615 +:105100000606000000000000000085858585858575 +:105110008585808080808080808080808080820102 +:1051200001010101010101818181818181818181EF +:105130008181818181838384848484840809070434 +:105140000405050202020202020202020202020237 +:10515000020303030303030303030303030303869D +:105160008686868686868600000000000000000095 +:10517000000001010101010101000000000C0D0E01 +:105180000F10111213292A2B2C2D2E2F30B393D34D +:10519000B494D4B595D5B696D6BB9BDBBC9CDCBD90 +:1051A0009DDDBE9EDEBF9FDFC0A0E0C1A1E1C2A227 +:1051B000E2C3A3E3C4A4E4C5A5E5C6A6E608090ABC +:1051C0000B4E4F505152535455565758595A5B062F +:1051D00007464700847785788679877A887B897C3B +:1051E0008A7D8B7E8C7F8D808E818F829083000064 +:1051F0004D00000092910000030105040200000030 +:10520000F3F4F5F6F7F8F9FA1415161718191A1B2E +:10521000000C0D0E0F10111213292A2B2C2D2E2FDE +:1052200030B797D7B898D8B999D9BA9ADAC7A7E753 +:10523000C8A8E8C9A9E9CAAAEACBABEBCCACECCDCB +:10524000ADEDCEAEEECFAFEFD0B0F0D1B1F1D2B286 +:10525000F208090A0B4A5C5D5E5F60616263646527 +:10526000666768694B4C0000000C0D0E0F101112A0 +:1052700013B393D3B494D4B595D5B696D6B797D780 +:10528000B898D8B999D9BA9ADABB9BDBBC9CDCBD7B +:105290009DDDBE9EDEBF9FDFC0A0E0C1A1E1C2A236 +:1052A000E208090A0B6A84776B85786C86796D87CA +:1052B0007A6E887B6F897C708A7D718B7E728C7F21 +:1052C000738D80748E81758F827690839291F3F4C2 +:1052D000F5F6F7F8F9FA03010504024D494E4F506F +:1052E0005152535455565758595A5B06074B4C0068 +:1052F00000292A2B2C2D2E2F30B393D3B494D4B560 +:1053000095D5B696D6B797D7B898D8B999D9BA9A45 +:10531000DABB9BDBBC9CDCBD9DDDBE9EDEBF9FDFA0 +:10532000C0A0E0C1A1E1C2A2E208090A0B6A847729 +:105330006B85786C86796D877A6E887B6F897C70D7 +:105340008A7D718B7E728C7F738D80748E81758F58 +:10535000827690839291F3F4F5F6F7F8F9FA030167 +:105360000504024D495C5D5E5F6061626364656671 +:1053700067686946474B4C00000C0D0E0F10111268 +:10538000131415161718191A1B1C1D1E1F20212275 +:10539000232425262728292A2B2C2D2E2F30313265 +:1053A000333435363738393A3B3C3D3E3F40414255 +:1053B000434445B393D3B494D4B595D5B696D6B7F4 +:1053C00097D7B898D8B999D9BA9ADABB9BDBBC9C65 +:1053D000DCBD9DDDBE9EDEBF9FDFC0A0E0C1A1E1C0 +:1053E000C2A2E2C3A3E3C4A4E4C5A5E5C6A6E6C77A +:1053F000A7E7C8A8E8C9A9E9CAAAEACBABEBCCAC35 +:10540000ECCDADEDCEAEEECFAFEFD0B0F0D1B1F18F +:10541000D2B2F208090A0B6A84776B85786C8679B8 +:105420006D877A6E887B6F897C708A7D718B7E72C6 +:105430008C7F738D80748E81758F8276908392912C +:10544000F3F4F5F6F7F8F9FA030105040249484ABE +:105450004D464706074B4C00000C0D0E0F10111265 +:10546000131415161718191A1B1C1D1E1F20212294 +:10547000232425262728292A2B2C2D2E2F30313284 +:10548000333435363738393A3B3C3D3E3F40414274 +:10549000434445B393D3B494D4B595D5B696D6B713 +:1054A00097D7B898D8B999D9BA9ADABB9BDBBC9C84 +:1054B000DCBD9DDDBE9EDEBF9FDFC0A0E0C1A1E1DF +:1054C000C2A2E2C3A3E3C4A4E4C5A5E5C6A6E6C799 +:1054D000A7E7C8A8E8C9A9E9CAAAEACBABEBCCAC54 +:1054E000ECCDADEDCEAEEECFAFEFD0B0F0D1B1F1AF +:1054F000D2B2F208090A0B6A84776B85786C8679D8 +:105500006D877A6E887B6F897C708A7D718B7E72E5 +:105510008C7F738D80748E81758F8276908392914B +:10552000F3F4F5F6F7F8F9FA030105040249484ADD +:105530004D4E4F505152535455565758595A5B5C23 +:105540005D5E5F60616263646566676869464706C1 +:10555000074B4C0000BB9BDBBC9CDCBD9DDDBE9EB5 +:10556000DEBF9FDFC0A0E0C1A1E1C2A2E292910034 +:105570000006070000B393D3B494D4B595D5B6967E +:10558000D6B797D7B898D8B999D9BA9ADABB9BDB6E +:10559000BC9CDCBD9DDDBE9EDEBF9FDFC0A0E0C128 +:1055A000A1E1C2A2E2C3A3E3C4A4E4C5A5E5C6A6E3 +:1055B000E6C7A7E7C8A8E8C9A9E9CAAAEACBABEB3E +:1055C000CCACECCDADEDCEAEEECFAFEFD0B0F0D1F8 +:1055D000B1F1D2B2F24E4F50515253545556575822 +:1055E000595A5B5C5D5E5F606162636465666768B3 +:1055F000694B4C0000B393D3B494D4B595D5B6960B +:10560000D6B797D7B898D8B999D9BA9ADABB9BDBED +:10561000BC9CDCBD9DDDBE9EDEBF9FDFC0A0E0C1A7 +:10562000A1E1C2A2E2C3A3E3C4A4E4C5A5E5C6A662 +:10563000E6C7A7E7C8A8E8C9A9E9CAAAEACBABEBBD +:10564000CCACECCDADEDCEAEEECFAFEFD0B0F0D177 +:10565000B1F1D2B2F24E4F505152535455565758A1 +:10566000595A5B5C5D5E5F60616263646566676832 +:10567000694B4C0000010001020300010203040514 +:1056800006070001020304050607000102030405E2 +:10569000060708090A0B00000102030405060700BB +:1056A0000102030405060708090A0B0C0D0001009E +:1056B00001020304000000000102030001020304D0 +:1056C00005060708090A0B0C0D0001020304050674 +:1056D0000708090A0B0C0D00010203040506070068 +:1056E0005700560087008700DF00FB001B00030007 +:1056F0007F007F000C000E00010002000500080082 +:105700000800000012000000745701101201000090 +:1057100074570110120200007457011012030000A8 +:105720007457011012040000745701101205000094 +:1057300074570110050E0000050D00050D01050D43 +:1057400002050D03050D04050D050000050F0005FC +:105750000F01000000000000000000000000000039 +:105760000000000000000000000000000000000039 +:1057700000000000679F0010519F0010ED9D001079 +:10578000D19D0010C59E0010DD9D0010419E0010AF +:1057900015000000DCA6001010A7001016A70010CE +:1057A00010A7001010A70010E0A60010F8A6001027 +:1057B00010A7001000A7001010A7001010A70010DD +:1057C00010A7001010A7001010A7001004A70010C9 +:1057D00010A7001008A7001010A7001010A70010B5 +:1057E00010A7001010A7001010A7001010A700109D +:1057F0000CA70010FCA600101AA7001048A7001064 +:105800004EA7001048A7001048A700101AA70010C4 +:105810003CA7001048A7001040A7001048A70010A0 +:1058200048A7001048A7001048A7001048A700107C +:105830001AA7001048A700101AA7001048A70010C8 +:1058400048A7001048A7001048A7001048A700105C +:1058500048A7001044A700101AA70010000000007D +:105860000000080018001C001D001E001F00200082 +:105870002100220023002400250026002C002D00FA +:105880002F00300031003700380039003A003B006B +:105890003C003D000000000000001D00000008006A +:1058A0001000180020002800300038004000480098 +:1058B0005000580060006800700078000000000090 +:1058C00000000000000008000000000000000100CF +:1058D00001000100010001003F00400040004400C1 +:1058E0007E007E00F600F800F800F800F900F900EC +:1058F000FB00FD00FD00FF00000101010E01100191 +:105900001001300130013001F2AC001006AD001082 +:1059100006AD001006AD001006AD001006AD00107B +:1059200006AD001006AD001006AD001006AD00106B +:1059300006AD001006AD001006AD001006AD00105B +:1059400006AD001006AD001006AD001006AD00104B +:1059500006AD001006AD001006AD0010D2AC001070 +:105960000CAD0010D6AC0010DEAC0010E2AC0010A4 +:10597000E6AC0010EAAC0010EEAC0010F6AC001083 +:10598000FAAC0010FEAC001002AD0010FF1F0000CA +:105990000000604000006140000062400000634081 +:1059A0000000644000006540000066400000674061 +:1059B000000068400000694000006A4000006B4041 +:1059C00000006C40000102030405060708090A0BE9 +:1059D0000C0000002700280029002A002B002C00C2 +:1059E0002D002E0012002F00300031003200000088 +:1059F0000000000000000000000000005C650108DD +:105A000000000000000000000A000000000000008C +:105A10000C00000008000000000200000000000070 +:105A20000000000000000000000000000000000076 +:105A300014000000000000000B0000000000000047 +:105A4000000000003F0000000000000004BF001044 +:105A500020BF001008BF00100CBF00101CBF0010BA +:105A60001CBF00101CBF00101CBF00101CBF00108A +:105A70001CBF00101CBF00101CBF00101CBF00107A +:105A800014BF00101CBF001010BF00101CBF00107E +:105A90001CBF001018BF0010A0BF0010AEBF001048 +:105AA000AEBF0010AEBF0010AEBF0010AEBF001002 +:105AB000AEBF001050BF0010AEBF0010AEBF001050 +:105AC000AEBF0010AEBF0010AEBF0010AEBF0010E2 +:105AD000AEBF001050BF00106ABF0010AEBF001074 +:105AE000AEBF001082BF0010AEBF0010AEBF0010EE +:105AF000AEBF0010AEBF001076BF00100001020361 +:105B0000A00F0000B90B0000D0070000DD05000069 +:105B1000E8030000EF020000F4010000780100003B +:105B2000FA000000BC0000007D0000005E000000E4 +:105B30003F0000002F0000002000000018000000BF +:105B4000100000000C00000008000000060000002B +:105B5000040000000300000002000000020000003A +:105B6000010000000100000000002040000024406F +:105B70000000004000000000000023400000304012 +:105B80000000314000009F40000022400000104013 +:105B900000009D402020202020101010101D1D808E +:105BA00017007500FF0306020600360410200000EF +:105BB0007FC0000000040000000000000019324B0C +:105BC000647D0000000000804000080B1000000011 +:105BD0000000FF012002001F00800004FF081018D1 +:105BE000001000140018001C4044484C50000000F5 +:105BF000081000000800000004000000041000006D +:105C00000012000004210000002100000016000026 +:105C100040114002C41300138013A01340138813D3 +:105C2000A81320001C00000052D70010F6D6001068 +:105C3000FED60010FED600100ED700100ED70010B2 +:105C40002AD700102AD700109CD60010A6D8001022 +:105C500010D8001018D8001024D8001036D8001022 +:105C60004AD8001064D8001082D80010CAD700109B +:105C70007EE700108EE70010A0E70010B2E70010EA +:105C80008EE700108EE70010C4E700100EEB001046 +:105C90002EEB001024EB00101AEB001010EB00109C +:105CA00006EB0010030000000100000001000000EE +:105CB0000000000005036000040000000100000077 +:105CC0000000000001000000060460000800000061 +:105CD00000680108E5180110050000000500070034 +:105CE00005010F000B0701000B0702000B0707005F +:105CF0000B0801000B0802000B0100000B08030059 +:105D00000B0804000B0805000B0806000B08070031 +:105D1000010000000B0000001D000000000000005A +:105D20000000000000000000000000000100000072 +:105D30000000000000000000000000000000000063 +:105D4000000000000B060700010000000A00000030 +:105D50001D00000000000000000000000000000026 +:105D60000000000001000000000000000000000032 +:105D70000000000000000000000000000B0606000C +:105D800001000000060000001D00000000000000EF +:105D90000000000000000000000000000100000002 +:105DA00000000000000000000000000000000000F3 +:105DB000000000000B0604000B0000000B000100B7 +:105DC00001000000030000000000000000000018B7 +:105DD0000000000400000000B45E0110600000003C +:105DE00000000000FFFFFFFF0000000000000000B7 +:105DF00000000000DC00000000000000FFFFFFFFCB +:105E0000000000000000000000000000340000005E +:105E100000000000FFFFFFFF020000000000000084 +:105E200002000000EC000000000200000100000081 +:105E30000200000004000000020000003500000025 +:105E400000000000FFFFFFFF000000000000000056 +:105E5000000000000500000000000000FFFFFFFF41 +:105E6000000000000000000000000000040000002E +:105E700000000000FFFFFFFF000000000000000026 +:105E8000000000000600000000000000FFFFFFFF10 +:105E90000000000000000000000000000100000001 +:105EA00000000000FFFFFFFF0000000000000000F6 +:105EB000000000000400000000000004245E011047 +:105EC000845E01106C5E0110F45D0110000004009E +:105ED000DC5D01100C5E011000020000545E011038 +:105EE0003C5E01109C5E01100000000001000000FB +:105EF00002000000280A0000E0040700140500006A +:105F00000000000000000000000000000000000091 +:105F1000000000000000000001000000285F0110E8 +:105F20000200000046000000C05D0110F401000006 +:105F3000140004010A0009050800030063010000C1 +:105F4000040000000401000004020000040300003B +:105F500004040000040500001E010500002C20665A +:105F6000756E6374696F6E3A200061737365727445 +:105F7000696F6E2022257322206661696C65643A20 +:105F80002066696C6520222573222C206C696E6561 +:105F9000202564257325730A00232D302B200068EB +:105FA0006C4C006566674546470030313233343506 +:105FB0003637383941424344454600303132333474 +:105FC0003536373839616263646566000000000069 +:085FD00014C1FF7F0100000075 +:105FD800000000100000000880000000F85F0110B9 +:085FE800800000080006000023 +:085FF0002407000854620100BF +:105FF8009DD40010010000000000000040070008C8 +:10600800000000000000000000000000B4000008CC +:10601800C0000008CC000008D8000008E400000810 +:1060280000000000007F0000000000000080020067 +:10603800017F00000080020000001C0002800000B8 +:106048000002000000001C00077F000000801E0006 +:10605800006C0000038000000000440000000800FD +:10606800000000001CA379B7010000000600000032 +:106078001100000000000000000000000000000007 +:106088000000000001000000000000000000000007 +:1060980000000000000000000000000004000000F4 +:1060A80000000000E86201084C630108346301083D +:1060B800B862010800000000A0620108D06201086F +:1060C8000000000000630108186301086463010808 +:1060D800B0010008000000000000000000000000FF +:1060E80000000000000000000000000000000000A8 +:1060F8000000000000000000000000000000000098 +:106108000100000006000000000000000000001868 +:1061180000000008000000002C01000890010008A1 +:106128005A00000000000000FFFFFFFF0000000011 +:10613800080000000000000001000000AC01000899 +:1061480000000000000000000700A000010000009F +:1061580001000000012E01107C51011010520110A5 +:1061680068520110F0520110785301105854011070 +:10617800545501107055011074550110F455011053 +:10618800D4510110E0510110F0510110F4510110E7 +:10619800F851011000520110085201103457011033 +:1061A8004C5701104F570110385701103B57011039 +:1061B8003E5701104157011044570110475701102D +:1061C80009A300100E1400000000000000000000E9 +:1061D800C5A500100E14000000000000000000001B +:1061E80029AC00103E000000000000000000000084 +:1061F800890700008907000000093D0000093D00EB +:1062080000127A0000093D00A00F00000400000001 +:10621800650201100100000000000000206801086C +:106228000000000000000000FF0000000000000067 +:106238000300000030680108000000003068010811 +:1062480098680108006901080000000000000000CB +:106258000000000000000000000000000000000036 +:106268000000000000000000000000000000000026 +:106278000000000000000000000000000000000016 +:1062880000000000C8020008F5000010C900001056 +:1062980010B50004440B002827D0144B1A68136A61 +:1062A800BA21515ACA00521A9B181B68002BF4DAFB +:1062B8000F4B3E221A600F4B0F4A1A600F4BA32256 +:1062C800D200062199500E4A9C509B58074B1A68D9 +:1062D800136AB431515ACA00521A9B1800225A60E4 +:1062E800064A074BD358002BFADA10BD0C66010892 +:1062F80004012640080126401E1F00000000264019 +:106308001C05000010B54378FF2B00D010BD00F02D +:1063180047F9124B1A683323D35C032B00D801BE0C +:106328000E4B1A68136ABA21515A4A0052189B1820 +:10633800DA680B4B1A600B4B002119600A4B0131CC +:1063480019605268094B1A6013680B43136013688D +:10635800DB07FCD400F044F9D8E7C0460C66010816 +:106368003066010824660108286601082C660108C1 +:10637800F0B583B0009001914D4B1A683323D35C7C +:10638800002B00D101BE4A4B1B681F6ABC229C58D7 +:10639800E4196C3A9B5C002B68D000F0F1F8060019 +:1063A80003280ED000F0FCF80500424A424BD358AF +:1063B800002B3CDB414C032E51D0280000F010F993 +:1063C8006CE03B4B1A683323D35C062B00D801BE24 +:1063D800374B19680A6ABA23C85A43001B185B006E +:1063E800D218BC23CB589B181B68002B5BDB002002 +:1063F80000F0EEF8324B984257D0324B1A6800231F +:106408000021012000F0B4F8051E02D02B4C45E015 +:106418000135002000F0DCF8294B984202D02A4BC5 +:106428009D42F5D9284B9D42BCD9244C36E0274AD9 +:106438000121380000F0C4F8002801D01F4CBAE749 +:106448000198FFF725FF009B002B06D02368002B3F +:10645800FCDB00F09DF80400ADE71D4CABE7012123 +:10646800002000F0A5F80028F9D1A6E700F098F878 +:106478000600164A0121380000F0A2F8002809D1C8 +:10648800009B002B0DD02368002BFCDB00F080F86C +:10649800040000E0094C300000F0A2F8200003B02E +:1064A800F0BD0B4CF7E7054CF8E7044CF6E7C0469F +:1064B8000C660108000026401C050000050052007B +:1064C8000101880020660108EF49020010660108F2 +:1064D80001005000F0B5C64600B51C4B1B68596852 +:1064E8001B4A136904242343136101282CD030BFAD +:1064F80086235B00CB58002B23D1164C2768164BFC +:10650800A320C0001E58154A90461568144A2260F8 +:1065180006241C503E2042461060124A063098500D +:106528000D4A104BD358002BFADA86235B000E4A2B +:10653800CA50084B1F60084AA323DB00D650074BFC +:106548001D6080BCB846F0BD20BFD1E70C660108CD +:1065580000ED00E008012640000026400401264026 +:106568001E1F00001C050000AAAAAAAA000000001D +:1065780001B40248844601BC604700BF91C90010BD +:1065880001B40248844601BC604700BF211A0110CB +:1065980001B40248844601BC604700BFA9C200108C +:1065A80001B40248844601BC604700BF0B050010D7 +:1065B80001B40248844601BC604700BF21CC0010EA +:1065C80001B40248844601BC604700BFF1C700100F +:1065D80001B40248844601BC604700BFA9CC001042 +:1065E80001B40248844601BC604700BF130500108F +:1065F8000000000000000000000000000000000093 +:0866080000000000000000008A +:020000041600E4 +:08080000185F01100000000068 +:107C0000FC01000020122101000000000008001605 +:107C10000000001000000000000000000000000054 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000C20200000000B33BD1 +:040000051000051BC7 +:00000001FF diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh b/third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh index ef6bf3bc30ad95..da17582944adc7 100755 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/ota_base_build.sh @@ -1,7 +1,22 @@ -OUT_DIR=$1 -HEX_NAME=$2 -ANYCLOUD_DIR=third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota/ +#!/bin/bash -mv "$OUT_DIR"/"$HEX_NAME".hex "$OUT_DIR"/"$HEX_NAME".unsigned.hex +SCRIPT_ROOT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/" && pwd)" +# Windows: convert /cygdrive/d/git to D:/git +if [[ ${OS:-} == Windows_NT ]]; then + SCRIPT_ROOT_DIR="$(cygpath --mixed "$SCRIPT_ROOT_PATH")" +else + SCRIPT_ROOT_DIR="$SCRIPT_ROOT_PATH" +fi -./"$ANYCLOUD_DIR"/scripts/sign_script.bash "$OUT_DIR"/ "$HEX_NAME" python3 arm-none-eabi-objcopy "-O ihex" "" "$ANYCLOUD_DIR"/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/scripts/ imgtool_v1.7.0/imgtool.py create 0xFF 0x400 3584 1.0.0 0x00018000 0x001C0000 arm-none-eabi-objcopy "" +APP=${1:-"psoc6-lock"} # {psoc6-lock, psoc6-light, psoc6-all-clusters} +HEX_NAME=${2:-"chip-psoc6-lock-example"} # {chip-psoc6-lock-example, chip-psoc6-lighting-example, chip-psoc6-clusters-example} + +LIBS_DIR="$SCRIPT_ROOT_DIR/../libs" +MATTER_SCRIPTS_DIR="$SCRIPT_ROOT_DIR/../../../../../scripts" +OUT_DIR="$SCRIPT_ROOT_DIR/../../../../../out/infineon-$APP-ota" + +source "$MATTER_SCRIPTS_DIR/activate.sh" + +arm-none-eabi-objcopy -I ihex -O elf32-little "$OUT_DIR/$HEX_NAME".hex "$OUT_DIR/$HEX_NAME".elf +chmod +x "$OUT_DIR/$HEX_NAME".elf +"$LIBS_DIR"/ota-bootloader-abstraction/scripts/mcuboot/sign_script.bash "$OUT_DIR" "$HEX_NAME" python3 arm-none-eabi-objcopy "-O ihex" "elf_first" "$LIBS_DIR"/ota-bootloader-abstraction/makefiles/mcuboot/../../scripts/mcuboot/imgtool imgtool.py create 0xFF 0x400 3584 1.0.0 0x028000 0x1c0000 arm-none-eabi-objcopy "-k $LIBS_DIR/ota-bootloader-abstraction/scripts/mcuboot/keys/cypress-test-ec-p256.pem" diff --git a/third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh b/third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh index 4f1c67797967bb..c6d46fd5c2ad3e 100755 --- a/third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh +++ b/third_party/infineon/psoc6/psoc6_sdk/ota/ota_update_build.sh @@ -1,13 +1,30 @@ -OUT_DIR=$1 -HEX_NAME=$2 -ANYCLOUD_DIR=third_party/infineon/psoc6/psoc6_sdk/libs/anycloud-ota/ +#!/bin/bash -mv "$OUT_DIR"/"$HEX_NAME".hex "$OUT_DIR"/"$HEX_NAME".unsigned.hex +SCRIPT_ROOT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/" && pwd)" +# Windows: convert /cygdrive/d/git to D:/git +if [[ ${OS:-} == Windows_NT ]]; then + SCRIPT_ROOT_DIR="$(cygpath --mixed "$SCRIPT_ROOT_PATH")" +else + SCRIPT_ROOT_DIR="$SCRIPT_ROOT_PATH" +fi + +APP=${1:-"psoc6-lock"} # {psoc6-lock, psoc6-light, psoc6-all-clusters} +HEX_NAME=${2:-"chip-psoc6-lock-example"} # {chip-psoc6-lock-example, chip-psoc6-lighting-example, chip-psoc6-clusters-example} + +LIBS_DIR="$SCRIPT_ROOT_DIR/../libs" +ROOT_DIR="$SCRIPT_ROOT_DIR/../../../../../" +OUT_DIR="$ROOT_DIR/out/infineon-$APP-ota-updateimage" + +source "$ROOT_DIR/scripts/activate.sh" + +arm-none-eabi-objcopy -I ihex -O elf32-little "$OUT_DIR/$HEX_NAME".hex "$OUT_DIR/$HEX_NAME".elf + +chmod +x "$OUT_DIR/$HEX_NAME".elf -./"$ANYCLOUD_DIR"/scripts/sign_script.bash "$OUT_DIR"/ "$HEX_NAME" python3 arm-none-eabi-objcopy "-O ihex" "" "$ANYCLOUD_DIR"/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/scripts/ imgtool_v1.7.0/imgtool.py sign 0xFF 0x400 3584 1.0.0 0x00018000 0x001C0000 arm-none-eabi-objcopy "-k $ANYCLOUD_DIR/source/COMPONENT_OTA_MCUBOOT_PSOC/mcuboot/keys/cypress-test-ec-p256.pem" +"$LIBS_DIR"/ota-bootloader-abstraction/scripts/mcuboot/sign_script.bash "$OUT_DIR" "$HEX_NAME" python3 arm-none-eabi-objcopy "-O ihex" "elf_first" "$LIBS_DIR"/ota-bootloader-abstraction/makefiles/mcuboot/../../scripts/mcuboot/imgtool imgtool.py sign 0xFF 0x400 3584 1.0.0 0x028000 0x1c0000 arm-none-eabi-objcopy "-k $LIBS_DIR/ota-bootloader-abstraction/scripts/mcuboot/keys/cypress-test-ec-p256.pem" if [ -f "$OUT_DIR"/"$HEX_NAME".ota ]; then rm "$OUT_DIR"/"$HEX_NAME".ota fi -src/app/ota_image_tool.py create -v 0xFFF1 -p 0x8000 -vn 2 -vs "2.0" -da sha256 "$OUT_DIR"/"$HEX_NAME".bin "$OUT_DIR"/"$HEX_NAME".ota +python3 "$ROOT_DIR"/src/app/ota_image_tool.py create -v 0xFFF1 -p 0x8000 -vn 2 -vs "2.0" -da sha256 "$OUT_DIR"/"$HEX_NAME".bin "$OUT_DIR"/"$HEX_NAME".ota diff --git a/third_party/openthread/platforms/efr32/BUILD.gn b/third_party/openthread/platforms/efr32/BUILD.gn index 381c6407f2c7cd..69e55a5d76151d 100644 --- a/third_party/openthread/platforms/efr32/BUILD.gn +++ b/third_party/openthread/platforms/efr32/BUILD.gn @@ -32,11 +32,9 @@ config("openthread_efr32_config") { "${sl_ot_efr32_root}", "${chip_root}/examples/platform/efr32", "${sdk_support_root}/matter/efr32/${silabs_family}/${silabs_board}", + "${sdk_support_root}/matter/efr32/${silabs_family}/${silabs_board}/config", "${sl_ot_platform_abstraction}/include", "${sl_ot_platform_abstraction}/rtos", - - #TODO this is for sl_openthread_features_config.h. should use generated one per board when sl_ot_abstraction is integrated - "${sl_ot_libs_path}/config", ] # temporarily disable check until gsdk pulls in a more recent version of openthread diff --git a/third_party/silabs/BUILD.gn b/third_party/silabs/BUILD.gn index 915cf8ba2bf164..e08c7cd0bd11bd 100644 --- a/third_party/silabs/BUILD.gn +++ b/third_party/silabs/BUILD.gn @@ -211,6 +211,7 @@ if (wifi_soc != true) { # CCP board include_dirs = [ "${sl_ot_platform_abstraction}/include" ] } + sources += [ "${sl_ot_platform_abstraction}/efr32/sleep.c" ] # Use silabs openthread library stack with or without coap api enabled COAP_API = "" diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni index 87d0b0bc078d06..08695af1fc3800 100644 --- a/third_party/silabs/efr32_sdk.gni +++ b/third_party/silabs/efr32_sdk.gni @@ -222,12 +222,15 @@ template("efr32_sdk") { "${efr32_sdk_root}/util/third_party/freertos/kernel/include", "${silabs_gen_folder}/config", "${silabs_gen_folder}/autogen", + "${sl_ot_platform_abstraction}/rtos", + "${efr32_sdk_root}/protocol/openthread/include", + "${efr32_sdk_root}/util/third_party/openthread/include", + "${efr32_sdk_root}/util/third_party/openthread/src/core", + "${efr32_sdk_root}/util/third_party/openthread/examples/platforms/", + "${sdk_support_root}/matter/efr32/${silabs_family}/${silabs_board}/config", # Headers needed for Init no function will be called if OT is not used "${sl_ot_efr32_root}", - - # TODO this is for sl_openthread_features_config.h. should use generated one per board when sl_ot_abstraction is integrated - "${sl_ot_libs_path}/config", ] if (is_series_2) { @@ -437,7 +440,6 @@ template("efr32_sdk") { "SL_OPENTHREAD_STACK_FEATURES_CONFIG_FILE=\"sl_openthread_features_config.h\"", "SL_CSL_TIMEOUT=${sl_ot_csl_timeout_sec}", "CIRCULAR_QUEUE_USE_LOCAL_CONFIG_HEADER=1", - "MATTER_INTEGRATION=1", ] if (silabs_log_enabled && chip_logging) { @@ -475,6 +477,25 @@ template("efr32_sdk") { ] } + if (defined(invoker.chip_enable_openthread) && + invoker.chip_enable_openthread) { + defines += [ + "SL_OT_ENABLE=1", + + #TODO: Remove these defines once sl_openthread_rtos_config is included in sl_ot_rtos_adaptation.c + "SL_OPENTHREAD_RTOS_STACK_TASK_PRIORITY=24", + "SL_OPENTHREAD_RTOS_APP_TASK_PRIORITY=23", + "SL_OPENTHREAD_RTOS_CLI_TASK_PRIORITY=16", + "SL_OPENTHREAD_STACK_TASK_MEM_SIZE=4608", + "SL_OPENTHREAD_APP_TASK_MEM_SIZE=4608", + "SL_OPENTHREAD_CLI_TASK_MEM_SIZE=2048", + "SL_OPENTHREAD_RTOS_CLI_TASK_PRIORITY=16", + "SL_OPENTHREAD_OS_CLI_TASK_SIZE=2048", + "SL_OPENTHREAD_ENABLE_APP_TASK=0", + "SL_OPENTHREAD_ENABLE_CLI_TASK=0", + ] + } + if (defined(invoker.chip_enable_wifi) && invoker.chip_enable_wifi) { if (enable_dic) { assert(chip_enable_wifi_ipv4, "enable chip_enable_wifi_ipv4") @@ -809,6 +830,15 @@ template("efr32_sdk") { ] } + if (defined(invoker.chip_enable_openthread) && + invoker.chip_enable_openthread) { + sources += [ + "${silabs_gen_folder}/autogen/sl_ot_custom_cli.c", + "${silabs_gen_folder}/autogen/sl_ot_init.c", + "${sl_ot_platform_abstraction}/rtos/sl_ot_rtos_adaptation.c", + ] + } + if (use_wstk_buttons) { sources += [ "${efr32_sdk_root}/platform/driver/button/src/sl_button.c", @@ -886,6 +916,8 @@ template("efr32_sdk") { sources += [ "${efr32_sdk_root}/hardware/driver/configuration_over_swo/src/sl_cos.c", "${efr32_sdk_root}/platform/driver/debug/src/sl_debug_swo.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/hmac_drbg.c", + "${efr32_sdk_root}/util/third_party/mbedtls/library/psa_crypto_ecp.c", ] } @@ -947,7 +979,6 @@ template("efr32_sdk") { "${efr32_sdk_root}/platform/Device/SiliconLabs/MGM24/Source/startup_mgm24.c", "${efr32_sdk_root}/platform/Device/SiliconLabs/MGM24/Source/system_mgm24.c", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/fem_util/sl_fem_util.c", - "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_rssi/sl_rail_util_rssi.c", "${efr32_sdk_root}/platform/service/device_manager/clocks/sl_device_clock_efr32xg24.c", "${efr32_sdk_root}/platform/service/device_manager/devices/sl_device_peripheral_hal_efr32xg24.c", ] @@ -963,6 +994,7 @@ template("efr32_sdk") { if (is_series_2) { sources += [ "${efr32_sdk_root}/platform/radio/rail_lib/plugin/pa-conversions/pa_curves_efr32.c", + "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_rssi/sl_rail_util_rssi.c", "${efr32_sdk_root}/platform/radio/rail_lib/plugin/rail_util_sequencer/sl_rail_util_sequencer.c", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager.c", "${efr32_sdk_root}/platform/security/sl_component/se_manager/src/sl_se_manager_attestation.c", diff --git a/third_party/silabs/lwip.gni b/third_party/silabs/lwip.gni index 9a35e7c45f7a61..b0b6a0db0d2c9f 100644 --- a/third_party/silabs/lwip.gni +++ b/third_party/silabs/lwip.gni @@ -169,8 +169,10 @@ template("lwip_target") { "${_lwip_root}/src/core/ipv6/ip6.c", "${_lwip_root}/src/core/ipv6/ip6_addr.c", "${_lwip_root}/src/core/ipv6/ip6_frag.c", - "${_lwip_root}/src/core/ipv6/mld6.c", "${_lwip_root}/src/core/ipv6/nd6.c", + + # TODO: When updating to next Si SDK version, revert change. + "${sdk_support_root}/src/core/ipv6/mld6.c", ] } diff --git a/third_party/silabs/matter_support b/third_party/silabs/matter_support index 9e983904a64d2f..9084b6fa2f9407 160000 --- a/third_party/silabs/matter_support +++ b/third_party/silabs/matter_support @@ -1 +1 @@ -Subproject commit 9e983904a64d2f74280cd48b65ffd4457abd64f7 +Subproject commit 9084b6fa2f9407396a7f2db12975e6e89fe07a8c diff --git a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp index a7fef6deeee4df..0e519739bea690 100644 --- a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp +++ b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp @@ -35989,142 +35989,6 @@ Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint16_t valu namespace ThreadNetworkDirectory { namespace Attributes { -namespace PreferredExtendedPanID { - -Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, DataModel::Nullable & value) -{ - using Traits = NumericAttributeTraits; - Traits::StorageType temp; - uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp); - Protocols::InteractionModel::Status status = - emberAfReadAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, readable, sizeof(temp)); - VerifyOrReturnError(Protocols::InteractionModel::Status::Success == status, status); - if (Traits::IsNullValue(temp)) - { - value.SetNull(); - } - else - { - value.SetNonNull() = Traits::StorageToWorking(temp); - } - return status; -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint64_t value, MarkAttributeDirty markDirty) -{ - using Traits = NumericAttributeTraits; - if (!Traits::CanRepresentValue(/* isNullable = */ true, value)) - { - return Protocols::InteractionModel::Status::ConstraintError; - } - Traits::StorageType storageValue; - Traits::WorkingToStorage(value, storageValue); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT64U_ATTRIBUTE_TYPE, - markDirty); -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint64_t value) -{ - using Traits = NumericAttributeTraits; - if (!Traits::CanRepresentValue(/* isNullable = */ true, value)) - { - return Protocols::InteractionModel::Status::ConstraintError; - } - Traits::StorageType storageValue; - Traits::WorkingToStorage(value, storageValue); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT64U_ATTRIBUTE_TYPE); -} - -Protocols::InteractionModel::Status SetNull(chip::EndpointId endpoint, MarkAttributeDirty markDirty) -{ - using Traits = NumericAttributeTraits; - Traits::StorageType value; - Traits::SetNull(value); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(value); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT64U_ATTRIBUTE_TYPE, - markDirty); -} - -Protocols::InteractionModel::Status SetNull(chip::EndpointId endpoint) -{ - using Traits = NumericAttributeTraits; - Traits::StorageType value; - Traits::SetNull(value); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(value); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT64U_ATTRIBUTE_TYPE); -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable & value, - MarkAttributeDirty markDirty) -{ - if (value.IsNull()) - { - return SetNull(endpoint, markDirty); - } - - return Set(endpoint, value.Value(), markDirty); -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable & value) -{ - if (value.IsNull()) - { - return SetNull(endpoint); - } - - return Set(endpoint, value.Value()); -} - -} // namespace PreferredExtendedPanID - -namespace ThreadNetworkTableSize { - -Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, uint8_t * value) -{ - using Traits = NumericAttributeTraits; - Traits::StorageType temp; - uint8_t * readable = Traits::ToAttributeStoreRepresentation(temp); - Protocols::InteractionModel::Status status = - emberAfReadAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, readable, sizeof(temp)); - VerifyOrReturnError(Protocols::InteractionModel::Status::Success == status, status); - if (!Traits::CanRepresentValue(/* isNullable = */ false, temp)) - { - return Protocols::InteractionModel::Status::ConstraintError; - } - *value = Traits::StorageToWorking(temp); - return status; -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint8_t value, MarkAttributeDirty markDirty) -{ - using Traits = NumericAttributeTraits; - if (!Traits::CanRepresentValue(/* isNullable = */ false, value)) - { - return Protocols::InteractionModel::Status::ConstraintError; - } - Traits::StorageType storageValue; - Traits::WorkingToStorage(value, storageValue); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT8U_ATTRIBUTE_TYPE, markDirty); -} - -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint8_t value) -{ - using Traits = NumericAttributeTraits; - if (!Traits::CanRepresentValue(/* isNullable = */ false, value)) - { - return Protocols::InteractionModel::Status::ConstraintError; - } - Traits::StorageType storageValue; - Traits::WorkingToStorage(value, storageValue); - uint8_t * writable = Traits::ToAttributeStoreRepresentation(storageValue); - return emberAfWriteAttribute(endpoint, Clusters::ThreadNetworkDirectory::Id, Id, writable, ZCL_INT8U_ATTRIBUTE_TYPE); -} - -} // namespace ThreadNetworkTableSize - namespace FeatureMap { Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, uint32_t * value) diff --git a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h index 63493b3f90551d..3fed44373526df 100644 --- a/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h +++ b/zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.h @@ -5537,23 +5537,6 @@ Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint16_t valu namespace ThreadNetworkDirectory { namespace Attributes { -namespace PreferredExtendedPanID { -Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, DataModel::Nullable & value); // int64u -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint64_t value); -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint64_t value, MarkAttributeDirty markDirty); -Protocols::InteractionModel::Status SetNull(chip::EndpointId endpoint); -Protocols::InteractionModel::Status SetNull(chip::EndpointId endpoint, MarkAttributeDirty markDirty); -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable & value); -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, const chip::app::DataModel::Nullable & value, - MarkAttributeDirty markDirty); -} // namespace PreferredExtendedPanID - -namespace ThreadNetworkTableSize { -Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, uint8_t * value); // int8u -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint8_t value); -Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint8_t value, MarkAttributeDirty markDirty); -} // namespace ThreadNetworkTableSize - namespace FeatureMap { Protocols::InteractionModel::Status Get(chip::EndpointId endpoint, uint32_t * value); // bitmap32 Protocols::InteractionModel::Status Set(chip::EndpointId endpoint, uint32_t value); diff --git a/zzz_generated/app-common/app-common/zap-generated/callback.h b/zzz_generated/app-common/app-common/zap-generated/callback.h index 6e78fd6c09a8bf..ab6514fdf02103 100644 --- a/zzz_generated/app-common/app-common/zap-generated/callback.h +++ b/zzz_generated/app-common/app-common/zap-generated/callback.h @@ -6473,24 +6473,6 @@ bool emberAfThreadBorderRouterManagementClusterSetActiveDatasetRequestCallback( bool emberAfThreadBorderRouterManagementClusterSetPendingDatasetRequestCallback( chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, const chip::app::Clusters::ThreadBorderRouterManagement::Commands::SetPendingDatasetRequest::DecodableType & commandData); -/** - * @brief Thread Network Directory Cluster AddNetwork Command callback (from client) - */ -bool emberAfThreadNetworkDirectoryClusterAddNetworkCallback( - chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, - const chip::app::Clusters::ThreadNetworkDirectory::Commands::AddNetwork::DecodableType & commandData); -/** - * @brief Thread Network Directory Cluster RemoveNetwork Command callback (from client) - */ -bool emberAfThreadNetworkDirectoryClusterRemoveNetworkCallback( - chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, - const chip::app::Clusters::ThreadNetworkDirectory::Commands::RemoveNetwork::DecodableType & commandData); -/** - * @brief Thread Network Directory Cluster GetOperationalDataset Command callback (from client) - */ -bool emberAfThreadNetworkDirectoryClusterGetOperationalDatasetCallback( - chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, - const chip::app::Clusters::ThreadNetworkDirectory::Commands::GetOperationalDataset::DecodableType & commandData); /** * @brief Channel Cluster ChangeChannel Command callback (from client) */ diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp index fcae2110b2ce53..3244826b526af4 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp @@ -23948,6 +23948,7 @@ CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const encoder.Encode(to_underlying(Fields::kExtendedPanID), extendedPanID); encoder.Encode(to_underlying(Fields::kNetworkName), networkName); encoder.Encode(to_underlying(Fields::kChannel), channel); + encoder.Encode(to_underlying(Fields::kActiveTimestamp), activeTimestamp); return encoder.Finalize(); } @@ -23977,6 +23978,10 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) { err = DataModel::Decode(reader, channel); } + else if (__context_tag == to_underlying(Fields::kActiveTimestamp)) + { + err = DataModel::Decode(reader, activeTimestamp); + } else { } @@ -24156,43 +24161,7 @@ CHIP_ERROR TypeInfo::DecodableType::Decode(TLV::TLVReader & reader, const Concre } } // namespace Attributes -namespace Events { -namespace NetworkChanged { -CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const -{ - TLV::TLVType outer; - ReturnErrorOnFailure(aWriter.StartContainer(aTag, TLV::kTLVType_Structure, outer)); - ReturnErrorOnFailure(DataModel::Encode(aWriter, TLV::ContextTag(Fields::kExtendedPanID), extendedPanID)); - return aWriter.EndContainer(outer); -} - -CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) -{ - detail::StructDecodeIterator __iterator(reader); - while (true) - { - auto __element = __iterator.Next(); - if (std::holds_alternative(__element)) - { - return std::get(__element); - } - - CHIP_ERROR err = CHIP_NO_ERROR; - const uint8_t __context_tag = std::get(__element); - - if (__context_tag == to_underlying(Fields::kExtendedPanID)) - { - err = DataModel::Decode(reader, extendedPanID); - } - else - { - } - - ReturnErrorOnFailure(err); - } -} -} // namespace NetworkChanged. -} // namespace Events +namespace Events {} // namespace Events } // namespace ThreadNetworkDirectory namespace WakeOnLan { diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h index 9377e6e1739a75..2e3dddde6d0fc0 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h @@ -36291,17 +36291,19 @@ namespace Structs { namespace ThreadNetworkStruct { enum class Fields : uint8_t { - kExtendedPanID = 0, - kNetworkName = 1, - kChannel = 2, + kExtendedPanID = 0, + kNetworkName = 1, + kChannel = 2, + kActiveTimestamp = 3, }; struct Type { public: - uint64_t extendedPanID = static_cast(0); + chip::ByteSpan extendedPanID; chip::CharSpan networkName; - uint16_t channel = static_cast(0); + uint16_t channel = static_cast(0); + uint64_t activeTimestamp = static_cast(0); CHIP_ERROR Decode(TLV::TLVReader & reader); @@ -36386,7 +36388,7 @@ struct Type static constexpr CommandId GetCommandId() { return Commands::RemoveNetwork::Id; } static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - uint64_t extendedPanID = static_cast(0); + chip::ByteSpan extendedPanID; CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const; @@ -36401,7 +36403,7 @@ struct DecodableType static constexpr CommandId GetCommandId() { return Commands::RemoveNetwork::Id; } static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - uint64_t extendedPanID = static_cast(0); + chip::ByteSpan extendedPanID; CHIP_ERROR Decode(TLV::TLVReader & reader); }; }; // namespace RemoveNetwork @@ -36418,7 +36420,7 @@ struct Type static constexpr CommandId GetCommandId() { return Commands::GetOperationalDataset::Id; } static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - uint64_t extendedPanID = static_cast(0); + chip::ByteSpan extendedPanID; CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const; @@ -36433,7 +36435,7 @@ struct DecodableType static constexpr CommandId GetCommandId() { return Commands::GetOperationalDataset::Id; } static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - uint64_t extendedPanID = static_cast(0); + chip::ByteSpan extendedPanID; CHIP_ERROR Decode(TLV::TLVReader & reader); }; }; // namespace GetOperationalDataset @@ -36476,13 +36478,14 @@ namespace Attributes { namespace PreferredExtendedPanID { struct TypeInfo { - using Type = chip::app::DataModel::Nullable; - using DecodableType = chip::app::DataModel::Nullable; - using DecodableArgType = const chip::app::DataModel::Nullable &; + using Type = chip::app::DataModel::Nullable; + using DecodableType = chip::app::DataModel::Nullable; + using DecodableArgType = const chip::app::DataModel::Nullable &; static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } static constexpr AttributeId GetAttributeId() { return Attributes::PreferredExtendedPanID::Id; } static constexpr bool MustUseTimedWrite() { return false; } + static constexpr size_t MaxLength() { return 8; } }; } // namespace PreferredExtendedPanID namespace ThreadNetworks { @@ -36568,41 +36571,6 @@ struct TypeInfo }; }; } // namespace Attributes -namespace Events { -namespace NetworkChanged { -static constexpr PriorityLevel kPriorityLevel = PriorityLevel::Info; - -enum class Fields : uint8_t -{ - kExtendedPanID = 0, -}; - -struct Type -{ -public: - static constexpr PriorityLevel GetPriorityLevel() { return kPriorityLevel; } - static constexpr EventId GetEventId() { return Events::NetworkChanged::Id; } - static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - static constexpr bool kIsFabricScoped = false; - - uint64_t extendedPanID = static_cast(0); - - CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const; -}; - -struct DecodableType -{ -public: - static constexpr PriorityLevel GetPriorityLevel() { return kPriorityLevel; } - static constexpr EventId GetEventId() { return Events::NetworkChanged::Id; } - static constexpr ClusterId GetClusterId() { return Clusters::ThreadNetworkDirectory::Id; } - - uint64_t extendedPanID = static_cast(0); - - CHIP_ERROR Decode(TLV::TLVReader & reader); -}; -} // namespace NetworkChanged -} // namespace Events } // namespace ThreadNetworkDirectory namespace WakeOnLan { diff --git a/zzz_generated/app-common/app-common/zap-generated/ids/Events.h b/zzz_generated/app-common/app-common/zap-generated/ids/Events.h index cc619b581dc3e6..6e6191fe45c21c 100644 --- a/zzz_generated/app-common/app-common/zap-generated/ids/Events.h +++ b/zzz_generated/app-common/app-common/zap-generated/ids/Events.h @@ -611,16 +611,6 @@ static constexpr EventId Id = 0x00000010; } // namespace Events } // namespace PumpConfigurationAndControl -namespace ThreadNetworkDirectory { -namespace Events { - -namespace NetworkChanged { -static constexpr EventId Id = 0x00000000; -} // namespace NetworkChanged - -} // namespace Events -} // namespace ThreadNetworkDirectory - namespace TargetNavigator { namespace Events { diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h index c5971984fed334..6bc2808777acad 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h +++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h @@ -11547,7 +11547,6 @@ class ThreadBorderRouterManagementSetPendingDatasetRequest : public ClusterComma | * ClusterRevision | 0xFFFD | |------------------------------------------------------------------------------| | Events: | | -| * NetworkChanged | 0x0000 | \*----------------------------------------------------------------------------*/ /* @@ -11597,7 +11596,7 @@ class ThreadNetworkDirectoryRemoveNetwork : public ClusterCommand ThreadNetworkDirectoryRemoveNetwork(CredentialIssuerCommands * credsIssuerConfig) : ClusterCommand("remove-network", credsIssuerConfig) { - AddArgument("ExtendedPanID", 0, UINT64_MAX, &mRequest.extendedPanID); + AddArgument("ExtendedPanID", &mRequest.extendedPanID); ClusterCommand::AddArguments(); } @@ -11635,7 +11634,7 @@ class ThreadNetworkDirectoryGetOperationalDataset : public ClusterCommand ThreadNetworkDirectoryGetOperationalDataset(CredentialIssuerCommands * credsIssuerConfig) : ClusterCommand("get-operational-dataset", credsIssuerConfig) { - AddArgument("ExtendedPanID", 0, UINT64_MAX, &mRequest.extendedPanID); + AddArgument("ExtendedPanID", &mRequest.extendedPanID); ClusterCommand::AddArguments(); } @@ -25693,9 +25692,9 @@ void registerClusterThreadNetworkDirectory(Commands & commands, CredentialIssuer make_unique(Id, "feature-map", Attributes::FeatureMap::Id, credsIssuerConfig), // make_unique(Id, "cluster-revision", Attributes::ClusterRevision::Id, credsIssuerConfig), // make_unique>(Id, credsIssuerConfig), // - make_unique>>(Id, "preferred-extended-pan-id", 0, UINT64_MAX, - Attributes::PreferredExtendedPanID::Id, - WriteCommandType::kWrite, credsIssuerConfig), // + make_unique>>(Id, "preferred-extended-pan-id", + Attributes::PreferredExtendedPanID::Id, + WriteCommandType::kWrite, credsIssuerConfig), // make_unique>>( Id, "thread-networks", Attributes::ThreadNetworks::Id, WriteCommandType::kForceWrite, credsIssuerConfig), // @@ -25729,10 +25728,8 @@ void registerClusterThreadNetworkDirectory(Commands & commands, CredentialIssuer // // Events // - make_unique(Id, credsIssuerConfig), // - make_unique(Id, "network-changed", Events::NetworkChanged::Id, credsIssuerConfig), // - make_unique(Id, credsIssuerConfig), // - make_unique(Id, "network-changed", Events::NetworkChanged::Id, credsIssuerConfig), // + make_unique(Id, credsIssuerConfig), // + make_unique(Id, credsIssuerConfig), // }; commands.RegisterCluster(clusterName, clusterCommands); diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp index 035f26c348a135..624acd23feb594 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp +++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp @@ -4340,6 +4340,8 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label, ComplexArgumentParser::EnsureMemberExist("ThreadNetworkStruct.networkName", "networkName", value.isMember("networkName"))); ReturnErrorOnFailure( ComplexArgumentParser::EnsureMemberExist("ThreadNetworkStruct.channel", "channel", value.isMember("channel"))); + ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("ThreadNetworkStruct.activeTimestamp", "activeTimestamp", + value.isMember("activeTimestamp"))); char labelWithMember[kMaxLabelLength]; snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "extendedPanID"); @@ -4354,6 +4356,10 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label, ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.channel, value["channel"])); valueCopy.removeMember("channel"); + snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "activeTimestamp"); + ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.activeTimestamp, value["activeTimestamp"])); + valueCopy.removeMember("activeTimestamp"); + return ComplexArgumentParser::EnsureNoMembersRemaining(label, valueCopy); } @@ -4362,6 +4368,7 @@ void ComplexArgumentParser::Finalize(chip::app::Clusters::ThreadNetworkDirectory ComplexArgumentParser::Finalize(request.extendedPanID); ComplexArgumentParser::Finalize(request.networkName); ComplexArgumentParser::Finalize(request.channel); + ComplexArgumentParser::Finalize(request.activeTimestamp); } CHIP_ERROR ComplexArgumentParser::Setup(const char * label, diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp index 9de841aaaa4af3..d0fba2b8f0e0f3 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp +++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.cpp @@ -3854,6 +3854,14 @@ DataModelLogger::LogValue(const char * label, size_t indent, return err; } } + { + CHIP_ERROR err = LogValue("ActiveTimestamp", indent + 1, value.activeTimestamp); + if (err != CHIP_NO_ERROR) + { + DataModelLogger::LogString(indent + 1, "Struct truncated due to invalid value for 'ActiveTimestamp'"); + return err; + } + } DataModelLogger::LogString(indent, "}"); return CHIP_NO_ERROR; @@ -7316,22 +7324,6 @@ CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, return CHIP_NO_ERROR; } -CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, - const ThreadNetworkDirectory::Events::NetworkChanged::DecodableType & value) -{ - DataModelLogger::LogString(label, indent, "{"); - { - CHIP_ERROR err = DataModelLogger::LogValue("ExtendedPanID", indent + 1, value.extendedPanID); - if (err != CHIP_NO_ERROR) - { - DataModelLogger::LogString(indent + 1, "Event truncated due to invalid value for 'ExtendedPanID'"); - return err; - } - } - DataModelLogger::LogString(indent, "}"); - - return CHIP_NO_ERROR; -} CHIP_ERROR DataModelLogger::LogValue(const char * label, size_t indent, const TargetNavigator::Events::TargetUpdated::DecodableType & value) { @@ -16872,7 +16864,7 @@ CHIP_ERROR DataModelLogger::LogAttribute(const chip::app::ConcreteDataAttributeP switch (path.mAttributeId) { case ThreadNetworkDirectory::Attributes::PreferredExtendedPanID::Id: { - chip::app::DataModel::Nullable value; + chip::app::DataModel::Nullable value; ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value)); return DataModelLogger::LogValue("PreferredExtendedPanID", 1, value); } @@ -20318,17 +20310,6 @@ CHIP_ERROR DataModelLogger::LogEvent(const chip::app::EventHeader & header, chip } break; } - case ThreadNetworkDirectory::Id: { - switch (header.mPath.mEventId) - { - case ThreadNetworkDirectory::Events::NetworkChanged::Id: { - chip::app::Clusters::ThreadNetworkDirectory::Events::NetworkChanged::DecodableType value; - ReturnErrorOnFailure(chip::app::DataModel::Decode(*data, value)); - return DataModelLogger::LogValue("NetworkChanged", 1, value); - } - } - break; - } case TargetNavigator::Id: { switch (header.mPath.mEventId) { diff --git a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h index 8ca6e2ef3904d6..7ee50893968ccd 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h +++ b/zzz_generated/chip-tool/zap-generated/cluster/logging/DataModelLogger.h @@ -627,8 +627,6 @@ static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::PumpConfigurationAndControl::Events::AirDetection::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::PumpConfigurationAndControl::Events::TurbineOperation::DecodableType & value); -static CHIP_ERROR LogValue(const char * label, size_t indent, - const chip::app::Clusters::ThreadNetworkDirectory::Events::NetworkChanged::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent, const chip::app::Clusters::TargetNavigator::Events::TargetUpdated::DecodableType & value); static CHIP_ERROR LogValue(const char * label, size_t indent, diff --git a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h index c9386dc42a6a7b..0319e41eeaec91 100644 --- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h +++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h @@ -148571,7 +148571,6 @@ class SubscribeAttributeThreadBorderRouterManagementClusterRevision : public Sub | * ClusterRevision | 0xFFFD | |------------------------------------------------------------------------------| | Events: | | -| * NetworkChanged | 0x0000 | \*----------------------------------------------------------------------------*/ #if MTR_ENABLE_PROVISIONAL @@ -148637,7 +148636,7 @@ class ThreadNetworkDirectoryRemoveNetwork : public ClusterCommand { : ClusterCommand("remove-network") { #if MTR_ENABLE_PROVISIONAL - AddArgument("ExtendedPanID", 0, UINT64_MAX, &mRequest.extendedPanID); + AddArgument("ExtendedPanID", &mRequest.extendedPanID); #endif // MTR_ENABLE_PROVISIONAL ClusterCommand::AddArguments(); } @@ -148654,7 +148653,7 @@ class ThreadNetworkDirectoryRemoveNetwork : public ClusterCommand { __auto_type * params = [[MTRThreadNetworkDirectoryClusterRemoveNetworkParams alloc] init]; params.timedInvokeTimeoutMs = mTimedInteractionTimeoutMs.HasValue() ? [NSNumber numberWithUnsignedShort:mTimedInteractionTimeoutMs.Value()] : nil; #if MTR_ENABLE_PROVISIONAL - params.extendedPanID = [NSNumber numberWithUnsignedLongLong:mRequest.extendedPanID]; + params.extendedPanID = [NSData dataWithBytes:mRequest.extendedPanID.data() length:mRequest.extendedPanID.size()]; #endif // MTR_ENABLE_PROVISIONAL uint16_t repeatCount = mRepeatCount.ValueOr(1); uint16_t __block responsesNeeded = repeatCount; @@ -148690,7 +148689,7 @@ class ThreadNetworkDirectoryGetOperationalDataset : public ClusterCommand { : ClusterCommand("get-operational-dataset") { #if MTR_ENABLE_PROVISIONAL - AddArgument("ExtendedPanID", 0, UINT64_MAX, &mRequest.extendedPanID); + AddArgument("ExtendedPanID", &mRequest.extendedPanID); #endif // MTR_ENABLE_PROVISIONAL ClusterCommand::AddArguments(); } @@ -148707,7 +148706,7 @@ class ThreadNetworkDirectoryGetOperationalDataset : public ClusterCommand { __auto_type * params = [[MTRThreadNetworkDirectoryClusterGetOperationalDatasetParams alloc] init]; params.timedInvokeTimeoutMs = mTimedInteractionTimeoutMs.HasValue() ? [NSNumber numberWithUnsignedShort:mTimedInteractionTimeoutMs.Value()] : nil; #if MTR_ENABLE_PROVISIONAL - params.extendedPanID = [NSNumber numberWithUnsignedLongLong:mRequest.extendedPanID]; + params.extendedPanID = [NSData dataWithBytes:mRequest.extendedPanID.data() length:mRequest.extendedPanID.size()]; #endif // MTR_ENABLE_PROVISIONAL uint16_t repeatCount = mRepeatCount.ValueOr(1); uint16_t __block responsesNeeded = repeatCount; @@ -148765,7 +148764,7 @@ class ReadThreadNetworkDirectoryPreferredExtendedPanID : public ReadAttribute { dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.command", DISPATCH_QUEUE_SERIAL); __auto_type * cluster = [[MTRBaseClusterThreadNetworkDirectory alloc] initWithDevice:device endpointID:@(endpointId) queue:callbackQueue]; - [cluster readAttributePreferredExtendedPanIDWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable error) { + [cluster readAttributePreferredExtendedPanIDWithCompletion:^(NSData * _Nullable value, NSError * _Nullable error) { NSLog(@"ThreadNetworkDirectory.PreferredExtendedPanID response %@", [value description]); if (error == nil) { RemoteDataModelLogger::LogAttributeAsJSON(@(endpointId), @(clusterId), @(attributeId), value); @@ -148785,7 +148784,7 @@ class WriteThreadNetworkDirectoryPreferredExtendedPanID : public WriteAttribute : WriteAttribute("preferred-extended-pan-id") { AddArgument("attr-name", "preferred-extended-pan-id"); - AddArgument("attr-value", 0, UINT64_MAX, &mValue); + AddArgument("attr-value", &mValue); WriteAttribute::AddArguments(); } @@ -148804,9 +148803,9 @@ class WriteThreadNetworkDirectoryPreferredExtendedPanID : public WriteAttribute __auto_type * params = [[MTRWriteParams alloc] init]; params.timedWriteTimeout = mTimedInteractionTimeoutMs.HasValue() ? [NSNumber numberWithUnsignedShort:mTimedInteractionTimeoutMs.Value()] : nil; params.dataVersion = mDataVersion.HasValue() ? [NSNumber numberWithUnsignedInt:mDataVersion.Value()] : nil; - NSNumber * _Nullable value = nil; + NSData * _Nullable value = nil; if (!mValue.IsNull()) { - value = [NSNumber numberWithUnsignedLongLong:mValue.Value()]; + value = [[NSData alloc] initWithBytes:mValue.Value().data() length:mValue.Value().size()]; } [cluster writeAttributePreferredExtendedPanIDWithValue:value params:params completion:^(NSError * _Nullable error) { @@ -148820,7 +148819,7 @@ class WriteThreadNetworkDirectoryPreferredExtendedPanID : public WriteAttribute } private: - chip::app::DataModel::Nullable mValue; + chip::app::DataModel::Nullable mValue; }; class SubscribeAttributeThreadNetworkDirectoryPreferredExtendedPanID : public SubscribeAttribute { @@ -148854,7 +148853,7 @@ class SubscribeAttributeThreadNetworkDirectoryPreferredExtendedPanID : public Su } [cluster subscribeAttributePreferredExtendedPanIDWithParams:params subscriptionEstablished:^() { mSubscriptionEstablished = YES; } - reportHandler:^(NSNumber * _Nullable value, NSError * _Nullable error) { + reportHandler:^(NSData * _Nullable value, NSError * _Nullable error) { NSLog(@"ThreadNetworkDirectory.PreferredExtendedPanID response %@", [value description]); if (error == nil) { RemoteDataModelLogger::LogAttributeAsJSON(@(endpointId), @(clusterId), @(attributeId), value); @@ -195631,8 +195630,6 @@ void registerClusterThreadNetworkDirectory(Commands & commands) make_unique(), // make_unique(), // #endif // MTR_ENABLE_PROVISIONAL - make_unique(Id), // - make_unique(Id), // }; commands.RegisterCluster(clusterName, clusterCommands);