From 40b0aaa3b16945a7d17e5aa9947ce5c4e21def3a Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Wed, 19 Jul 2023 14:50:57 -0500 Subject: [PATCH 01/35] fix(CMSIS): Switch GCR BTLELDOCTRL LDOTX and LDORX fields --- .../PeriphDrivers/Source/SYS/SVD/gcr_me18.svd | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd index f038942225..29a5e3cda4 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd @@ -1597,38 +1597,38 @@ 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDORX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 From 4a3a428bf44652c3275f93529af745fc73e5009c Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Wed, 19 Jul 2023 14:58:23 -0500 Subject: [PATCH 02/35] "Generate_Register_Files" bot updating requested register files. --- .../Device/Maxim/MAX32690/Include/gcr_regs.h | 24 +++++++++---------- .../Maxim/MAX32690/Include/max32690.svd | 24 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h index d088d7d1d0..f76248675f 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h @@ -891,24 +891,24 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 0 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 1 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 2 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 4 /**< BTLELDOCTRL_LDORXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 5 /**< BTLELDOCTRL_LDORXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 6 /**< BTLELDOCTRL_LDORXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ + #define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 8 /**< BTLELDOCTRL_LDORXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd index e0a3f7fa5a..6385af0209 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd @@ -7334,38 +7334,38 @@ memory. 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDORX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 From 8530ec05872fa9149ebe4e75c80e9e08312a7df6 Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Fri, 21 Jul 2023 16:18:04 -0500 Subject: [PATCH 03/35] fix(CMSIS): Flipped all RX/TX fields in GCR_BTLELDOCTRL register for MAX32690 --- .../PeriphDrivers/Source/SYS/SVD/gcr_me18.svd | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd index 29a5e3cda4..66995be9b9 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd @@ -1633,50 +1633,50 @@ 2 - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 From 7250f612122eecdf313eb228ea3b25e9d431486c Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Fri, 21 Jul 2023 16:22:32 -0500 Subject: [PATCH 04/35] "Generate_Register_Files" bot updating requested register files. --- .../Device/Maxim/MAX32690/Include/gcr_regs.h | 28 ++++++++-------- .../Maxim/MAX32690/Include/max32690.svd | 32 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h index f76248675f..d66be6f6ee 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h @@ -909,30 +909,30 @@ typedef struct { #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 8 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 9 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 10 /**< BTLELDOCTRL_LDOTXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 11 /**< BTLELDOCTRL_LDOTXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 12 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 13 /**< BTLELDOCTRL_LDORXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ + /**@} end of group GCR_BTLELDOCTRL_Register */ /** diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd index 6385af0209..0b5b540cbc 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd @@ -7370,50 +7370,50 @@ memory. 2 - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 From fde23ea653f3ceca9d1fa00f681a920111a3f0b5 Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Mon, 24 Jul 2023 10:12:58 -0500 Subject: [PATCH 05/35] fix(workflow): Delete generated register files after action completion The workflow can't regenerate register files if it already exists from a prev job --- .github/workflows/Verify_Register_SVD.yml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Verify_Register_SVD.yml b/.github/workflows/Verify_Register_SVD.yml index b29cf2921c..d9deeeb97b 100644 --- a/.github/workflows/Verify_Register_SVD.yml +++ b/.github/workflows/Verify_Register_SVD.yml @@ -635,5 +635,26 @@ jobs: fi done set -e - + + # Remove generated register files for next time a runner picks up the job. + # The register files generated in a previous instance will remain and won't + # be regenerated because the Wall-E doesn't refresh its workspace and this + # workflow only generates the register files for a specific part only once + # (to save time) by checking whether the generated register files exist or not. + cd ${{ env.MSDK-INTERNAL_DIR }}/SVD/Devices/ + + # Enter each directory and remove ./chip_test/ + for file_dir in * + do + # Don't mess with files. + [[ -d $file_dir ]] || continue + + if [[ ${DIE_TO_CHIP_NAMES[$file_dir]+_} ]]; then + rm -rf ./${file_dir}/chip_test/ + fi + done + + # Return to workspace + cd ../../../ + exit $CHECK_FAIL From 2f382d1e62228d62b0d869b4c8d239077a41d19a Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Tue, 25 Jul 2023 12:59:43 -0500 Subject: [PATCH 06/35] fix(CMSIS): Fix BLELDOCTRL TX/RX field positions for MAX32655 --- .../PeriphDrivers/Source/SYS/SVD/gcr_me17.svd | 124 ++++-------------- 1 file changed, 28 insertions(+), 96 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd index dce8af6339..51403cdbda 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd @@ -1219,154 +1219,86 @@ 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDORX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDOTXVSEL0 - LDOTX Voltage Setting. - 2 - 1 - - - LDOTXVSEL1 - LDOTX Voltage Setting. - 3 - 1 - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDORXVSEL0 - LDORX Voltage Setting. - 6 - 1 - - - LDORXVSEL1 - LDORX Voltage Setting. - 7 - 1 - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 From a3ab69229cc3e6f739bfb320da0e56895e4f841b Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Tue, 25 Jul 2023 13:11:51 -0500 Subject: [PATCH 07/35] "Generate_Register_Files" bot updating requested register files. --- .../Device/Maxim/MAX32655/Include/gcr_regs.h | 78 +++++--------- .../Maxim/MAX32655/Include/max32655.svd | 100 +++++------------- .../Device/Maxim/MAX32680/Include/gcr_regs.h | 78 +++++--------- .../Maxim/MAX32680/Include/max32680.svd | 100 +++++------------- 4 files changed, 106 insertions(+), 250 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h index 97d62eaaf7..114d0aa63a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h @@ -694,76 +694,48 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 0 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 1 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 2 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 2 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 3 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 4 /**< BTLELDOCTRL_LDORXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 5 /**< BTLELDOCTRL_LDORXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 6 /**< BTLELDOCTRL_LDORXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 6 /**< BTLELDOCTRL_LDORXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 7 /**< BTLELDOCTRL_LDORXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 8 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 9 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 10 /**< BTLELDOCTRL_LDOTXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 11 /**< BTLELDOCTRL_LDOTXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 12 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 13 /**< BTLELDOCTRL_LDORXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ + /**@} end of group GCR_BTLELDOCTRL_Register */ /** diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd index 934f7925b5..a381278e73 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd @@ -3822,130 +3822,86 @@ 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDORX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h index 7abdaed289..a9cab93a24 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h @@ -694,76 +694,48 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 0 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 1 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 2 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 2 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 3 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 4 /**< BTLELDOCTRL_LDORXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 5 /**< BTLELDOCTRL_LDORXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 6 /**< BTLELDOCTRL_LDORXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 6 /**< BTLELDOCTRL_LDORXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 7 /**< BTLELDOCTRL_LDORXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 8 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 9 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 10 /**< BTLELDOCTRL_LDOTXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 11 /**< BTLELDOCTRL_LDOTXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 12 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 13 /**< BTLELDOCTRL_LDORXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ + /**@} end of group GCR_BTLELDOCTRL_Register */ /** diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd index 988420a49f..5c8d913cb9 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd @@ -3794,130 +3794,86 @@ 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDORX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 From 0c55fe35e13d92aea1f0bd7370a73ec0a59ebffa Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Tue, 25 Jul 2023 13:23:46 -0500 Subject: [PATCH 08/35] Revert "fix(CMSIS): Fix BLELDOCTRL TX/RX field positions for MAX32655" This reverts commit 2f382d1e62228d62b0d869b4c8d239077a41d19a. --- .../PeriphDrivers/Source/SYS/SVD/gcr_me17.svd | 124 ++++++++++++++---- 1 file changed, 96 insertions(+), 28 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd index 51403cdbda..dce8af6339 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd @@ -1219,86 +1219,154 @@ 0x74 - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 0 1 - LDORXPULLD - LDORX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 1 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 2 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDOTXVSEL0 + LDOTX Voltage Setting. + 2 + 1 + + + LDOTXVSEL1 + LDOTX Voltage Setting. + 3 + 1 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 4 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDOrX Pull Down. 5 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 6 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDORXVSEL0 + LDORX Voltage Setting. + 6 + 1 + + + LDORXVSEL1 + LDORX Voltage Setting. + 7 + 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 8 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 9 1 - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 10 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 11 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 12 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 13 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 14 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 15 1 From 60691c8cb4d285999e683baa7a9821f8a6acbc9b Mon Sep 17 00:00:00 2001 From: Sihyung Woo Date: Tue, 25 Jul 2023 13:27:50 -0500 Subject: [PATCH 09/35] fix(CMSIS): Fix BLELDOCTRL TX/RX field positions for MAX32655 --- .../PeriphDrivers/Source/SYS/SVD/gcr_me17.svd | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd index dce8af6339..c4627358ac 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd @@ -1219,20 +1219,20 @@ 0x74 - LDOTXEN - LDOTX Enable. + LDORXEN + LDORX Enable. 0 1 - LDOTXPULLD - LDOTX Pull Down. + LDORXPULLD + LDOrX Pull Down. 1 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORXVSEL + LDORX Voltage Setting. 2 2 @@ -1259,32 +1259,32 @@ - LDOTXVSEL0 - LDOTX Voltage Setting. + LDORXVSEL0 + LDORX Voltage Setting. 2 1 - LDOTXVSEL1 - LDOTX Voltage Setting. + LDORXVSEL1 + LDORX Voltage Setting. 3 1 - LDORXEN - LDORX Enable. + LDOTXEN + LDOTX Enable. 4 1 - LDORXPULLD - LDOrX Pull Down. + LDOTXPULLD + LDOTX Pull Down. 5 1 - LDORXVSEL - LDORX Voltage Setting. + LDOTXVSEL + LDOTX Voltage Setting. 6 2 @@ -1311,62 +1311,62 @@ - LDORXVSEL0 - LDORX Voltage Setting. + LDOTXVSEL0 + LDOTX Voltage Setting. 6 1 - LDORXVSEL1 - LDORX Voltage Setting. + LDOTXVSEL1 + LDOTX Voltage Setting. 7 1 - LDORXBYP - LDORX Bypass Enable. + LDOTXBYP + LDOTX Bypass Enable. 8 1 - LDORXDISCH - LDORX Discharge. + LDOTXDISCH + LDOTX Discharge. 9 1 - LDOTXBYP - LDOTX Bypass Enable. + LDORXBYP + LDORX Bypass Enable. 10 1 - LDOTXDISCH - LDOTX Discharge. + LDORXDISCH + LDORX Discharge. 11 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORXENDLY + LDORX Enable Delay. 12 1 - LDORXENDLY - LDORX Enable Delay. + LDOTXENDLY + LDOTX Enable Delay. 13 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOTXBYPENENDLY + LDOTX Bypass Enable Delay. 14 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORXBYPENENDLY + LDORX Bypass Enable Delay. 15 1 From 1ad5091fd9779d41251c3370462245385a327cb0 Mon Sep 17 00:00:00 2001 From: sihyung-maxim Date: Tue, 25 Jul 2023 13:38:15 -0500 Subject: [PATCH 10/35] "Generate_Register_Files" bot updating requested register files. --- .../Device/Maxim/MAX32655/Include/gcr_regs.h | 28 +++++++++++ .../Maxim/MAX32655/Include/max32655.svd | 46 ++++++++++++++++++- .../Device/Maxim/MAX32680/Include/gcr_regs.h | 28 +++++++++++ .../Maxim/MAX32680/Include/max32680.svd | 46 ++++++++++++++++++- 4 files changed, 146 insertions(+), 2 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h index 114d0aa63a..c22cc5ea8c 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h @@ -702,6 +702,20 @@ typedef struct { #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 2 /**< BTLELDOCTRL_LDORXVSEL0 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 3 /**< BTLELDOCTRL_LDORXVSEL1 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ @@ -711,6 +725,20 @@ typedef struct { #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 6 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 7 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd index a381278e73..6caf08e9aa 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd @@ -3829,7 +3829,7 @@ LDORXPULLD - LDORX Pull Down. + LDOrX Pull Down. 1 1 @@ -3838,6 +3838,28 @@ LDORX Voltage Setting. 2 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + LDOTXEN @@ -3856,6 +3878,28 @@ LDOTX Voltage Setting. 6 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + LDOTXBYP diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h index a9cab93a24..90d5d65cc7 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h @@ -702,6 +702,20 @@ typedef struct { #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 2 /**< BTLELDOCTRL_LDORXVSEL0 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 3 /**< BTLELDOCTRL_LDORXVSEL1 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ @@ -711,6 +725,20 @@ typedef struct { #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 6 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ + +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 7 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ #define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd index 5c8d913cb9..931dc5aab6 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd @@ -3801,7 +3801,7 @@ LDORXPULLD - LDORX Pull Down. + LDOrX Pull Down. 1 1 @@ -3810,6 +3810,28 @@ LDORX Voltage Setting. 2 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + LDOTXEN @@ -3828,6 +3850,28 @@ LDOTX Voltage Setting. 6 2 + + + 0_7 + 0.7V + 0 + + + 0_85 + 0.85V + 1 + + + 0_9 + 0.9V + 2 + + + 1_1 + 1.1V + 3 + + LDOTXBYP From 579c373e7f646c5ff4359333ba54772ed9b5442e Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Thu, 17 Aug 2023 15:20:28 -0500 Subject: [PATCH 11/35] updated BLE GCR and SIR --- .../Maxim/MAX32655/Include/max32655.svd | 102 +++++++-------- .../Maxim/MAX32665/Include/max32665.svd | 121 +++++++++++------- .../Maxim/MAX32690/Include/max32690.svd | 116 +++++++++++------ 3 files changed, 208 insertions(+), 131 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd index 6caf08e9aa..330d650d4a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd @@ -3822,36 +3822,36 @@ 0x74 - LDORXEN - LDORX Enable. + LDOBBEN + LDOBB Enable. 0 1 - LDORXPULLD - LDOrX Pull Down. + LDOBBPULLD + LDOBB Pull Down. 1 1 - LDORXVSEL - LDORX Voltage Setting. + LDOBBVSEL + LDOBB Voltage Setting. 2 2 - - 0_7 - 0.7V - 0 - 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -3862,36 +3862,36 @@ - LDOTXEN - LDOTX Enable. + LDORFEN + LDORF Enable. 4 1 - LDOTXPULLD - LDOTX Pull Down. + LDORFPULLD + LDORF Pull Down. 5 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORFVSEL + LDORF Voltage Setting. 6 2 - - - 0_7 - 0.7V - 0 - + 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -3902,50 +3902,50 @@ - LDOTXBYP - LDOTX Bypass Enable. + LDORFBYP + LDORF Bypass Enable. 8 1 - LDOTXDISCH - LDOTX Discharge. + LDORFDISCH + LDORF Discharge. 9 1 - LDORXBYP - LDORX Bypass Enable. + LDOBBBYP + LDOBB Bypass Enable. 10 1 - LDORXDISCH - LDORX Discharge. + LDOBBDISCH + LDOBB Discharge. 11 1 - LDORXENDLY - LDORX Enable Delay. + LDOBBENDLY + LDOBB Enable Delay. 12 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORFENDLY + LDORF Enable Delay. 13 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORFBYPENENDLY + LDORF Bypass Enable Delay. 14 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOBBBYPENENDLY + LDOBB Bypass Enable Delay. 15 1 @@ -3963,14 +3963,14 @@ 8 - LDORXDLYCNT - LDORX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 8 9 - LDOTXDLYCNT - LDOTX Delay Count. + LDORFDLYCNT + LDORF Delay Count. 20 9 @@ -9257,16 +9257,16 @@ read-write - TX - TX LDO trim value. - 0 + RF + RF LDO trim value. + 16 5 read-write - RX - RX LDO trim value. - 8 + BB + BB LDO trim value. + 24 5 read-write diff --git a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd index 9dc82575d5..fd73a61f90 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd @@ -4099,8 +4099,8 @@ 0x74 - LDOTXEN - LDOTX Enable + LDORXEN + LDORX Enable 0 1 @@ -4117,8 +4117,8 @@ - LDOTXOPULLD - LDOTX PULL Disable + LDORXOPULLD + LDORX PULL Disable 1 1 @@ -4135,24 +4135,24 @@ - LDOTXVSEL - LDOTX Voltage Setting + LDORXVSEL + LDORX Voltage Setting 2 2 - - 0_7 - 0.7V - 0 - 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -4163,8 +4163,8 @@ - LDORXEN - LDORX Enable + LDOTXEN + LDOTX Enable 4 1 @@ -4181,8 +4181,8 @@ - LDORXPULLD - LDORX Pulldown + LDOTXPULLD + LDOTX Pulldown 5 1 @@ -4199,24 +4199,24 @@ - LDORXVSEL - LDORX Output Voltage Setting + LDOTXVSEL + LDOTX Output Voltage Setting 6 2 - - 0_7 - 0.7V - 0 - 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -4227,8 +4227,8 @@ - LDORXBYP - LDORX Bypass Enable + LDOTXBYP + LDOTX Bypass Enable 8 1 @@ -4245,8 +4245,8 @@ - LDORXDISCH - LDORX Discharge + LDOTXDISCH + LDOTX Discharge 9 1 @@ -4263,8 +4263,8 @@ - LDOTXBYP - LDOTX Bypass Enable + LDORXBYP + LDORX Bypass Enable 10 1 @@ -4281,8 +4281,8 @@ - LDOTXDISCH - LDOTX Discharge + LDORXDISCH + LDORX Discharge 11 1 @@ -4299,8 +4299,8 @@ - LDOTXENDLY - LDOTX Enable Delay + LDORXENDLY + LDORX Enable Delay 12 1 @@ -4317,8 +4317,8 @@ - LDORXENDLY - LDORX Enable Delay + LDOTXENDLY + LDOTX Enable Delay 13 1 @@ -4335,14 +4335,14 @@ - LDORXBYPENENDLY - LDOTX Bypass Enable Delay + LDOTXBYPENENDLY + LDORX Bypass Enable Delay 14 1 - LDOTXBYPENENDLY - LDORX Bypass Enable Delay + LDORXBYPENENDLY + LDOTX Bypass Enable Delay 15 1 @@ -4360,14 +4360,14 @@ 8 - LDORXDLYCNT - LDORX Delay Count. Count delay base on PCLK/128. + LDOTXDLYCNT + LDOTX Delay Count. Count delay base on PCLK/128. 8 9 - LDOTXDLYCNT - LDOTX Delay Count. Count delay base on PCLK/128. + LDORXDLYCNT + LDORX Delay Count. Count delay base on PCLK/128. 20 9 @@ -13174,6 +13174,39 @@ + + + BTLE_LDO_TRIM_TX + BTLE LDO TX Trim register. + 0x54 + read-write + + + TX + TX LDO trim value. + 0 + 5 + read-write + + + + + + BTLE_LDO_TRIM_RX + BTLE LDO RX Trim register. + 0x5C + read-write + + + RX + RX LDO trim value. + 0 + 5 + read-write + + + + FSTAT funcstat register. diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd index 0b5b540cbc..ca462c4e92 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd @@ -7334,86 +7334,130 @@ memory. 0x74 - LDORXEN - LDORX Enable. + LDOBBEN + LDOBB Enable. 0 1 - LDORXPULLD - LDORX Pull Down. + LDOBBPULLD + LDOBB Pull Down. 1 1 - LDORXVSEL - LDORX Voltage Setting. + LDOBBVSEL + LDOBB Voltage Setting. 2 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + - LDOTXEN - LDOTX Enable. + LDORFEN + LDORF Enable. 4 1 - LDOTXPULLD - LDOTX Pull Down. + LDORFPULLD + LDORF Pull Down. 5 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORFVSEL + LDORF Voltage Setting. 6 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + - LDOTXBYP - LDOTX Bypass Enable. + LDORFBYP + LDORF Bypass Enable. 8 1 - LDOTXDISCH - LDOTX Discharge. + LDORFDISCH + LDORF Discharge. 9 1 - LDORXBYP - LDORX Bypass Enable. + LDOBBBYP + LDOBB Bypass Enable. 10 1 - LDORXDISCH - LDORX Discharge. + LDOBBDISCH + LDOBB Discharge. 11 1 - LDORXENDLY - LDORX Enable Delay. + LDOBBENDLY + LDOBB Enable Delay. 12 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORFENDLY + LDORF Enable Delay. 13 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORFBYPENENDLY + LDORF Bypass Enable Delay. 14 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOBBBYPENENDLY + LDOBB Bypass Enable Delay. 15 1 @@ -7431,14 +7475,14 @@ memory. 8 - LDOTXDLYCNT - LDOTX Delay Count. + LDORFDLYCNT + LDORF Delay Count. 8 9 - LDORXDLYCNT - LDORX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 20 9 @@ -13498,15 +13542,15 @@ signal(s) on transition(s) from low to high or high to low when PM.USBWKEN is se read-write - TX - TX LDO trim value. + RF + RF LDO trim value. 0 5 read-write - RX - RX LDO trim value. + BB + BB LDO trim value. 5 5 read-write From bdbbe38a41d8c8a2a87ff56406477e1f0f5195a8 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Fri, 18 Aug 2023 10:16:21 -0500 Subject: [PATCH 12/35] udpated gcr and sir for me14, me17, me18 --- Libraries/BlePhy/MAX32655/libphy.a | Bin 535006 -> 446270 bytes .../PeriphDrivers/Source/SYS/SVD/gcr_me14.svd | 538 +++++++++--------- .../PeriphDrivers/Source/SYS/SVD/gcr_me17.svd | 302 +++++----- .../PeriphDrivers/Source/SYS/SVD/gcr_me18.svd | 254 +++++---- .../PeriphDrivers/Source/SYS/SVD/sir_me14.svd | 49 +- .../PeriphDrivers/Source/SYS/SVD/sir_me17.svd | 44 +- .../PeriphDrivers/Source/SYS/SVD/sir_me18.svd | 23 +- 7 files changed, 637 insertions(+), 573 deletions(-) diff --git a/Libraries/BlePhy/MAX32655/libphy.a b/Libraries/BlePhy/MAX32655/libphy.a index db17f36a3d78efee83acd8a2b0f2099ffe503dd8..9247b282972667506b4d825bfbe0b110a52047de 100644 GIT binary patch literal 446270 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 literal 535006 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

pzJ32NQD`(i}W6H7t@w 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

Iz>)rB%qaS)o6AWW`#uc0{2W)ljj{ zh@%R7C^^lD#=_mmVa4f2G!<^gXscLnM04RvR8hqSBjy*l<8Fmqn-w^7S8O!N;=-$p z(`&@i0`I?8$hBF44~Ht`+N^LB^Cs73g;o|puFVQhvjOGWtZ)|9WM3%#uCi;TFY zP++bvuKW_J?}LR&EZk0$Twi#V#3e@DSh#}*3rW^%60Mn28rJJ)6-529J;+HB-!*>yiyc_WMr@<-lD>N=yU z{9u%`AKQS%7seb01AhkF+Z_|G&3bX1A;ZQu4VgMzn_Y_I)D_J5^(hXrfgCz~UgH!# zf#VUs^Rp-Bh9LWeb(o8@at%`W11dHf46t;e6A`oTv`Q*3yi7u_K?>)g4`$m;(!cN^ z>}A`H7+9Eyj-QolkivejpA81s(86RiMz+(`h8335KvyNRHKMQyJs{g{l7_-`X6Flr* z%QZ;hHJU!d)YcZ}qZee)G~%?vZH%+ci1mdJ(b`!?^b{UvoOf4_1@so$F{-m?SJLzA zJtKd??3`n2+x(F?pn0?BR<4BT-TuhSY23L68TnOa!np<+`49AmtaA-A@)xds{ee)RpUa}6@`L=2m3=o-ZOA#-fqY!3X?;CLX1 z-Ymz2YmiAe&X8e}gcc%y5Ont#}M<}HH;#v1Zm z)TrOs?+F|SoGLyo^s&8j)m${7|1%ui&!nEk!IM<}f!}}3uc`B0AJ%XZ#?RkXbr7@g zO(>lJ?bQKGHn+Q!F`l)usjJ)!%g|Vok)Dv20%-nqbLex!sK}>#q-D zwp+}J$U%wRZuB#JxM;bpgJKPSk=&AG4W$s9xoz+!P6vw>Gfb?hUiCt;0u66$14RDv zAa%<8T~~oqBK4JirW+DVeE}5b;TK8Wwa72&jKS+Kpg#IpetV7ryY$d;% ze@6HjKIpVk(j(4h{DLetQOrLW2cAF0&un&jmw|C9e%=JyvEF(J4w%LFLnr7t6WLeWjn3sk*BKgL1#3KO!&T>h@fzh(D&!8nV-^>^(?T2uIE6iI6OFK12z zUBd#Anc^P|QP2N*<{${HOt*o)1;0RTA`Z&<2UX+wzsSsYYM%#f>)BdbtDzeInA-Ch zv-BkB@8E|{PBu$>E~2ZnXa_6pm10fx>KesTA?wT0m;Ij(@TXpjV);L?vN4*!>wAba zf%NAvc}yd(0tepI$5;suo8mT8B)g^=DKkK*9DXgcALgj>%OKbT-mfVzHD;907=wa* zJu}m(y#e0q_yuZ6-YerDs`}r^ywj--Lq+rbwLonI)%eHM9?k4)x!m062d{d}aO*Q^8wQpv==hWT-mDQnI9o6{9)V`H@&8cmIN^hvvKsEj`wZ}76 zn4qmfE`iF$p;{x=_{Y?~omt@2c0=XEq1r-dl<|+LJ(1~gYWG9szEG`|YW!nr-^pC- z)SiF}pX&w{vWjZ_V`|^c@TQXG?FFcCtD``zoof7JYENc<>D2xK6~4Xa)w1c=QjLF1 z?Ry!sREf?o*gC}2A<*?);Z4Ok94%ImGm+_CO-2YOKOcgNz}9;ud z;DE0u260%AoGXJkw`A73IFCZ*>n_euaqwIihto`of5`D~&Cmm@xwV&1aWT5eAmUPg34(8EY3_EOb_F5F5vksi1X1*8YQ-L`1T{+Kw6wNIA{;! z3}PJqvAo@pX>f72L4`X^S)40ya2ey&vaZ=cDQhYm_;+S34emO1tJD8H4tN)i_rOrW z{)A=VSxi511KQYN2 ziVFpQWs>V55B{PP2nfe$y{`ps6O7mdRCCuav( ztLEisE;G9y75d4Y9LT`Gobx;vFwj2mJZE0vLdHPn+HODR+HQ~?KzFcmYP#rL&R1OJ z{{Ex_lN*{b?|A#Cv4KJ|ufyUF@`gtp-C=nUcaT?zN*hqF1Du1rkueD}HL4Pc_3Kxx zlmk^F^K-|zqo<>mqK@wliZYHa@Z47wy4geFCSeUdCe9e_4=HaPaa|K6V{81Q3ue$% z1IY)QtOCXz=+{>+^B-vHNA{|It1~B9JB-hG^_69Ti@gb#obP*sp@$U*4&jinzLJ$U z=~D2^MqJf|>{L4eZf=)K4jEyTL&D^aA6`uC&@k($f=Pu))+dLyA`)eNO59ezAmcS5 zR|OKkwgexy*Mn?d+f-ob>TAM!pH!$qLrg7|yoxd{s1-$>9@nh0N}Lh(SBU%c@nW`A zMhZHs2Au*;ZY>nVZa{3Y=-+U54XQni!OA?$+6a|@I1L|B=o#pG4d*z!%7YN|RJQJB zpoJKFa%uLVrP+s+W>-hpoa`~>Fv&>~b`w|&lkAk8W+w*hqLDI>teSvbOtQ>aGXr)p zgP6wZB&ZCaX2ju8pwCS{1PCBW$wT1NPJio2<0~ds>7|R&T(b9$|xH zYob`A;jRnVJXwMrtwFNvBpt6RvRI4Ij?@X)ie?D46Q-E*X*!EvU)*95Q$F>A^-a`5 zky|Wx%BLRl7q?sF7AqrVSEIptCTf?l18%W~Qa(9@_Oe^#&WMzadaR6i9*W$V5nbxp z$vjp&MeeLn_Yt#*KOUAh3d}3R+eI!770V?Yf?SHTLGSu-D?7XRo>YjCGyewM#m-t=mw$WX`H-Q)kYY5oS7w zjMu(udpB*|QVU0lwY?oZQ%{}YGUz_Nr}LxWlR$ev%-prYIU>Fy-Y^|*Rx$a*`Nb(6 zTi4_Jzq5L~H-m@8GkkV*K|k=r3fE|sI4CT=!dK1K;`|u#M}ytup@3lYI&3o3*5= zAN3{pNkVY2OXC*_0iGBI*~KPbOk=>snelKBJD|LFf;$+WnHX@!XC^q&ILDFl_@eSb zfd~a3T9#tL!z6A5kr|pPPc1eaFkF$2L=13ief((&M5%thgm7O=;UN?*lyH!*EJ-+# z!UYoU?<<=Uj-_zEgd_b-kaYjoWeO0B6mTtY1U6w`UwZR zpJK@?(`A`qsbA-DxPPXu+&?0Xqw>`CTYVF}kQCe?!LO2n8zuNXyY{%xc@67~){GBffZSg*AKlPRyO%@mH} zfT)46id9gT8HGbv1rq~%A5PkP-b!+0*??FvJ{RUIlUc2-TpdPLwf*5OXQe)tmGLNV zGQp=xB>0ycn~Wn(3BK!)?Z--^pYNmX(>hq{0 zl~kWyiiPMOOKNAzwI*xrXe(yi0r)jBji5&CeeZ(6Z< zUfZ(y^XIiKZ*5r;OE&HX5T0T>y1F)*yA$TiIT&Yl!xF7*P|jB@SvDgy=CTv8`J_Vb6b~r&Ru8H(|7ZdIqE-Qoo@-8*R7}9>&?CJH?;}& zif+7v&atX(9vUl=qtJxDLM!Fmn=51Z-Rap1&+~Gf8%B$zd`cJklXK#2E~lJVBlNj5 z=n^*Qd+c|pyTG4Z=;0IPpRMu-1BTA=LN|tBg|2tZjkgtQ?)+neUS>m)xeDqx@YNHz zC8ML!t?N6?kvr-x+CGczyNJMLhK4Aw zGHPArz`aP&5#~3$YVYxupS5|#y3W%BYbIXM+BR?Hyrr>@61a6*GZp@m>SxXJ=v=6~ ztEzKt$0qNsIO;~9a{l5tuGL+do0{5MmadrFhGMU1Su*d~cQidb!bUJt=c;B|VfBHjFhy&pFsYU~P0NC+X<53mZBA=b z+nna+WsKqm%A9$cJz`TNos0!N9R=*hZU?8r9Tz$rN1mpspyKLhby&^8^Av{G-1Ttf z+R_7Oqnoz&!tbuj{#5Vy&G4-{->&Yg11UBUH7^(y1TsQ zmFg?4b6e&IQTG~G3HQz%3)T^r?qk&IS=ZD)ev>fy93Ohfz{4ld^D{vo2 z9_pNI0L(^dM8NKt-3`OIF#m**0(0inh7O9=~)2^EJ!OMkVaJ zv|?_%OBdFP>GT61tmvI!Y=m2AoNTvj^qRJAj?7R@6)p*IK9%G+~pjWtWLptDraxl5M@r3|VkaT?`S$;z23wVT{x9WJbj=wuDe zU@2;sGIrW*#U4Uf?4UxmmMJc3dxE>0Jh{Sauc>i!1uLfID%Nw%Pb^n(aR=7OXM>7_ z6-2R|Gj)jijyd7v;zIMHiV&RD+q&QJwOmncW z5jzw_^}5bPZZx66P%xD{ckt{X%5ykFp;ebPua2BS5kK^+$rRNE;=ZE8$`4KoJzi+f zu9@Q&=QL|MESI>tDqkC1$)Tr_&vp%bkG9O6x6Jw4jc%*MlXt16E4HzUu668GRY;h% zxpU{>x^3RF1*_R-f)0e@hqE^7i@At8Xa*~|^08S!XRc;GVpy^f-dQ(p3TBQ#jeD4& z#-=IVWi89+t_Zr!wr3nC3F6oG9WTRGEHF*}(W<4wE= zvr)J&Xwa^)(Tg(FDVr>gT8w$I@;G0@kkxCl=6PYcItoruDjDYf&bCg>gKMzG1BZh} z=M>Y%^MZM24yKgooho;xFWGGTyrBgbq~5}gOs+#x8 z=4{$fHE+Y3?yfFe@vp!mR$P3q>#3@*tC==sYTeZOn)__Z%XKA z6Z(8JsTk*N`NmB# zr0_0NTz^PHKadw=1@gwwMD*<+*7wkay`g5WIIr-1sA5Rr?Vou1!%V+8?&EImu4ZA!mJh7FXn_wDR_H|%MUPnjiCj4gDM8T)EL(vW%|YXDdwE9Qut&o zu0PuJSA{0sTU7xg|rnKSI|Leh=+`Q8j3h9QNw z=s4dM!_49#j#A#N1U)-JAC{ntJ%xgl?NeSoc|g~D_s8g|-V-r;n)hOip6=yz%1*=HV7~R~E-gZj|B+jA zP8NH>gT;ApwOCS$YxXyhx<_v%qju^6OG%--%^l`9mZ$LcRmr%#PznXbr%@p*a+50L z>FGd7yNAFbBY2V&lJSSYk*8W6!6WbpCw$Juib_6#b64BRXD7k6Vexj8yD~I>iQ8r& zKYp9vnJMwS+eGdLH?QYh5-ek%7v6!vQrD~|DRsxX#M6J%jolP=iJPQ&S0~2CRb}F) zglYHnjdM2tI4uuZyy^Kk8=#;V+eZrb-|nTqfZOoBG2~(bbezn7gCS2 z{b!@pg!EBL{pCV_PEEQ^*e$fZ zM!MSo5BE#Z^Gr-eTe^5bZx z`&%K;xupLh{JYS{KqKGwHUSP0&CjCAF9_+bgY*R9p~8A0T~<+kq;RgVMR=^x_C$f+ zJ4AN~PZjdpX4=^-JWF_<@IvAHgjWf#6Mjf|oA6`8PYdr8enI#Z;Wvce7Ct5Xk??22 z7ld3RFrT&u3-A@uuM1OHGf>X8193m${=$*MF~Uj0DZ**O*}|iR^Mv%JNV~@gPY}LS z*eP5m+$h{CJX`o);l)DR^96Q4Ao>R3ZsGmHuL++L{zCXiq3!(wI|Hz2Vm?O+4;3CJ zJVAJh(DrzNzU}b>{JZ!A@G%7KR0<11+v5fN38D`b)(d9|7YJ?77wDfR`b^;t;Z?#9 z3qK)zK=?J`_k=$a{!aLsupASw+g-{!zk3!d1d<;U?jELOM!hyc>ic72Yd+NN9V$ zK<`=6zY+dTSb+ru?d&fcC#)A9EnFhpE&P`78KLdn0y{5@enZ$F-!;*GK{!!3P1q=; zQ&8%iC_GiTMfhIf6++v?1^Rc2zEAj7A-(v~-gCm=3jZpkO9aXX2@ez=BAg{`7TR7e z&_7u;-TyKEHsM9WYlOE7?-o8Nd|ddfaF6h>!ZbcArrmc5&lP@9NT+d>e@6JA@LR%X zgf9qR7QP`o01FewpG3rZY_e#2)hpYMekgi@uvNHPxJGyyaUoo|ihhsqV&VIVb1-g% zcL={o#0C39!mo?}9pUrB7lnT(BEKoP1SrFza+nYw%^O`uggttGBOWIHT;WP#n{Xo$ z_Rb_80S_HQx+Nw3G08teob7p!2p<#vl!$bm7w!@Nzl7<5LA>F@NkpVqOT?vYlW>91 z_L70UcGAF8#HVvx>Yp#Xng}~L5^;;@lfrw1-ykCXw}iI04D_Cr{P#lM{9$~$G^4!& z5sT-^!g?asr%goIn=hnqGwK~LJWc!_;TG}F71AFi^=}j2CHx{0={`)H;(1Sq{sHk2 zcm)#vo``(BE}Bk%D5v8*=Ia3Ac=74hm+~XUpCeo(eygxu{4U|?;=f0DmGBlK^7(P$ zXNcA4x5CGSPf7kPaf0XlUih-G92Wr0Z(cZ*2)%-Eium=y!^LkDt`L8faE9EpUq2P@5&!qX*Ttv11nOmp zX!reyW8oS@I7vvSdDJ^vNXHA*TPj>5{wcy<@wW;u5&v@Gb>i<5-X;Fs!uyHH&x6E+ zJnu>24~73pM1KAtd`0+oVFnlKjF%UVCPII#@K9l`a5fS8M+ujSzf#yH>=bSwLVuI+ zBJnR3en5Dg@D?KUKPvpZ_zw!dA^eu`2Sn&UEBu4_FAM)Jd_$PSg*NpE3da&r-ig9m z;WXiqMCdmOmx;ep*e2{0o<>A_ykB@D5s!>MBKmG3^6~}IUngSBJSqA)BIe@Xh<=%f zbMxz>v$)BMkMX=pBGMU6#2WWt(X)i}gv*5;!i~cB5^?k5X3@6^KOy|I@P6SJgt(lt z^EQ^Ph6N(dy9WyEh_i9N6)qsogp+UK$;4@%w??>?h)8D%FB4uVyp4!?`wrpfg%1j! z6#hWChlqLScfvP>DPCWLPd{+P1B7(=M!H@|&u*j_3hBa)wB2t2(pMX4+w%%&_Y;7Z zi@#fVyO3_ysQ(2a{i%`up6~^s-4_6#9?~f14L71)_XCHErh_xiCpE%3!g)fvETjA+ zq3v-B+OFS$bX&##e5sJ$#7Og=JdqB?h@TVEa~SEzg>)W9`gtL}gpqz#NJn9$2MVi% z2rj1_C@+?Aw7GMzEeo&UZfusT0cEO-ZwJA z`zIVfRjgu+E1a@zyjj1+IBXz|@!3ekxLruZIB6xqE^ggf{k9X)E^CP}(n~}?-A2T^ zWjhf@cM{RxuOwm|Tu;RK*iFQG@=hYg&)vj1f$K)Dn;B>im)nL}A(p#F4-z7)MvoAV z5>^wD{$wEzjka+KqLDP}qglu#Sucx)twhw%3Za!7^U_JAf$c=pSC?=t5t&&p>?NZ9 zwg|0WP><)325u*!K6eOr634=koA62^>h~I<)myda?II1_O+@|NF1(Y7dcR9}H?hw1 zJ}Z2Hh<5m*@F61F;}PMbM6}D}!tWA~z}|wwXNYL0=Y&5eqP>14+(TTbc?b9$$1&>H z?(bzW9ymTwpOc8FzeXbJZ#8i!<`p99%kHD0e*Qoj^|Oclcr5BW4Mcs|eU56}--2zH z{}SFmK)D|vqP(rVZbv!4LPYsSB5juIA|lFjClTc+<8?0be-d$_?$@8J@d4Z8Ssu{U zM8ugcx`BvtG>b-5E6)nitB9^&ApTm?DBl*zw-Hg!9in#$%l1V2BZ%{nzUT(xLZmO+=I>*WzUXbl z#YkWD^~9w}U-SdSRuuN_?0tyW35y#J+FP9^U!}E;2e))@+foxgB8=*Vk4g8T=N_2u zL#q;JOE|B}@g6U`q(%4`Yi8 zr5?BzrS4H<^3iKTBl6C_dm5S0DDgP9ghu?qY(fEvlz2p&P%8DXHlY&x?!AxfCZ5qI zER=X!8?=yBSIK9#5&7OvZX?3IpWjA=eLcmEs`T|Nw`R@e%{7tt7)0Ac?C{-qD`)WO z7{88qvzCacwyp95X9M=vz{KFB;CAalULKZaRWc# zi^e)-QwP4)tC_QGNexEKrgdw!Zh_gi5k^86Q>4dr8pHGe!oQf_ER4Zl>fv-~A*n|h z!zBE&`0Yy%r+~fE?GK&{X&p=k;uPsMivBs~TH0TLA9eU6>Ng9F3q$*;@gA)ZU(m zJ=TG@i=?-W>^h%x|gu-IlQTYQ$bXV(*EBy{{UhV4TY|&zikP7dmyWlErPRm zMM95TrEM#r_pyZDcF?R}7u>k~2>8+Zt4975+UrVXqzb z>cD6IM&sw~jZ4_$^>{nvF1Y;hIes*MSHfO3lxVLCKWC5E_tE@)5%faHU2yhzKOk!F zfk^$0g|f59=lfB6X-t^y&Y1K_b|&mS6UpCr>1BaC6ZX1bkM-dK#1`o7JeogmS+T!N zgoexCClmH|z+SU#5U9t%_X(o*2Em@IKcchu-GseI`>@CR98r4>5qr3-2<`njVXr?D z8paGMKy2ZqguQmyV|}rGC*$YxHw5{Kw#V2$?D4)zG=FO&_G%*b>Js)EU~dTIF1Y;h zzDqRSWBSnBkkC7+54}qhdOdyUeKMi9y$`)7p~w0HShxmyjXEZPw7~Zrl6p=?1$X>6 zr5nV;brl2;M;eZG!SGk;MeDg2^~`5GY`0nX(H_$)$AOCj(mMeQnulFxK|9%qgx&$T z#(koM-caa8)2-_a9Q-rg!|-$IPD;~?zn`#pLYlMm}u_^{G2_$|KZ}$ z#@*v^Pmc!*PBt@P@A^|vFA&lmE`vjRixc+l9PfD>STF@=Z(+jTsG294-!!`|viG@1_N!fOdyniL1xqa4BYPyy)Y(P;*z}m&UfqfP zlrP2aGW@Q_@0vlky?O=k%0a2yv^VbiY593_wKwi=Fv{;D_i=LThPLB4 z^Eqk^CK;5^F;2TlhUPP$Y;MzrVu#_XJ7L|2{*>-3pMtj%*Xn)Eg! z*5~)(ic~L1_~d{|Crg?X_D*n^J(o8BW~oSo|nGVGP)~&B2B-~h~4?ww04;h zxA%J-YIo+(rSeskJa^sIpH~U#t4;3t{kaZFf551;-=C}2^fi^=fJ)Zye-~xfnykOy zznatsD-VW|L4N;nv~rzMRlYais~}n0fje;k$EX|z188PHs2da8R=xpdhKvC>K|(_& z!M2qJ9H;JN;@77*$o3lzhR=8Yf;->-uCu@xbO#vzVWT-HL0TBJ3P%0IYRNkozX{~- z_hVF|KQ$8lfiU{igQ&U`zhm$VqED?OkM~73;^*zh%|88uBhg<8qaR#F)$8%Q2EQQs z!S&>Q3BUiq&l}vpEbVX6t3ms_{$1Ox#P=)7M)w`T87aPBNj@s&o+H?JCBETGup0@A zI>7C(GSKa>vR{0&i`b?VgS2afMb`!*gX0@tg!-%w1vZ%PwGx8s;y?MVH#?z2)|u}e zM{r8V?WOcT$6x|kqxe5Z?oPi}^NMgVZE`v(RojzrJT!BxX@%Jsdl`rjE=fBHe zJXSG%x_l4(6=8{EUf$tKEbiAGwOI7)jsau~A~6`;eVMs4Z*V57Asc2U4yw&m9TXb! zYXikuPO;t;X=^mx9tVnMQHnF2A~suuMT!nYnt>v-B8zeNIP#Z8zcz5SB7ZmXzkzB7XhAi5EC zkE^1t?NpC+Q--_cTg=x`(d(%50P38OuvX=6CU9U0_fyt+(UN$2M4vH-;%Mewmq<9T2|dG>^6ye~)mij&>*AYB zmC$vMQOy1Z_)(Dyp;!x`G<&m;mcDbSAVH*9H}QH=DN^xKG`(wdlO6=xf@> zr`4Hjjc6C@T3^a-(B5UD|LQ)wNTL(=;mp;NwP_a}Kb8XOM(t$I%wn>n_iWcFbg#U3 z(X401Dk^5I*!vM%e#ydYIcG@G>S51fTZaC8T}C_!&zL^%Jp};^_eh|ho49^?Lf@`O!Wb#9 zBB5WA(60z}c|gB7(Lld9(U3}5OL+sLV#LRX0FjWgFKdg8lvi0KaFp_RiChfyD-#X$ z1H*f3SQ*>%1p1Z0EnB0hIRy2`dy$j}bh+0UqftIhA~-va-{Or=o>}&qVxkP5)uS|~ zXtV&9>9~o{zR7o}m_H&*Lga0@G7w{k!-9O1kJq0}ez>qnxIlQk@FZb}kQb|re}<5k z`J~?`yi$0J@P6SBh0hCL6PBa07{5|jCA4>N!9Ps2eftY~h3F1pkML~aPN99n3;kO~ ze_HrO;bX!d3hi55=)WYI&-9ot`n@39ySBjbqU(i62^R_NT`lN!i+1nu*|)LaUnc$y z!jB5?6+R@iZ(O1Otmxke`HYGA@o~9Aw0CNO_N^+AcTC8iA#4&JD?CYP-<(2^JLXdV z65$7h_6{xh_lSN-$mbK(e@Wc%-V(B;`62#`CEkV7XQ6O zOe$B3zDe?%g}00UY0>uz|3mzTh?q9MBl=m%?ORo(_e=5rApXn3SH*vWh-nUB<=_m& z@^B_0a>gL?z7NsH5pcTb2H{d7%7I5jhO33|6mAxtDSVIcd?D}lupGODw+ZhM^3D(C zUlBekd|YVr0wx2_-7L=t@vDf)S2Yp&W(dm*J(x7RHlKj7_|WHk#&~82@%WtF>VxA1 z@lGK^-@c)T-UFneXYmlp;z4gbOpDxE|MO=!u9x@M;~>8X)$n2=J0F8k6|Y!0p0>ex3%%Y{Gls* zSL5g6;Ly7jw*Jlo1t+^5v^%EgLl~?-l@7tlcH=mj?$2@leh56Kiy>xn6w|#IKNkmw z-q~1Ya6Gx-WS<5jYHv5@ZMFyPapmO7@pT-#I5_n9eR#Cpob0QRMeRKbdyU}H9_LGE z?-?AsI5_lv410Vx#|3xzeK4Z-vM^Ky9_?{mE<6IgR!0DtF2k$%Me|pUj5UJC{BgbI@|S}#bdO%JEb#lyxANR~ zA@sQZ;F=Au446G+#nObmFf^e59UD@`yt9s?dTWufLZo2su;{ZXc=TI8bJpzH(`Qee zF|7)2X6x!Ae`n5|UR5=-e)i0_`rNk}Yf*&ox$i_g9qCq z{4W~OjwiogX2itt+6X^9{ssyXv`O0Mw_E++hlu}hrK1%DJmZ~bko_2;EYnm*sIZT| z(wT?AOtB;3S?&r#y5cxO*2X`c%%f{aqDoUVl=8n>`I#^e0+R=K0s(^*a9M{)&?M6Gt->eyf+Y zUOgeAME9qG(u7cHB`u9KCFa`S#r1Ojb{>u#cMiY}mwrs>9tivUt>t(;lG{E8li6cb ztc*n89Y(Jl!{`n8u}fQYzMmJ3K41o;=Pf$&fz$^s2J)AlT|V&lQ0Fh*fK5#Y`x6FM z_Dc;MIq>-5gZ)96LCVH^{rVjR7V3FexOFctNH=)WFt?b2A0@I9hIWMO2Q*50$U>O@evh| ztl47I5SR>aHO6A-vi51zg@6u>lgC6Dm>@%67)YJHV!XE#|8X=q?ik>2Uyqe+XWr5` zq5iubCWTuN7jJmY-MFc1-NxEp>?d~0#!VZ-?Svy+JiW!oOTE}lZGCqaw)tg?WWv2X z^Ztl3KenA>B_1^m%~asI4L0#CugUmFB^0o)Y)OR)?m5tSKQqba7O|PxHD$IFV<^Hl zw0(&tnuz;oHY8&q3jRk##cd(%W^|8kU6UxDVA}BLXVW&`WyEc0?3fpoU}J*VHfMX^ zqK#^A#*Om6?u6?(1p7~IF%DW~1GX(n>}eL>H4mRP6l1u3{cwLZ$Zq7pR75K*O$opH z|4W}=wRWsu+}(9-kB3JXTl?DM`|aK-EwHB$_{kIc1p zF~lkQH;;3IMX}T0_kCwv=tTnkiAMwdherebgGU4Xe@8>gtBR6nKi;)22Kw{nbu>=R zwqoFY?eU^nFTAfk6X*i3Nsh*k`hmQ{TkeEF%6XrQa`yirXzzE$=ziXXF?xXa!5F=t zeG?9r^}NBbu$BY@d!p5TaZ(6xr59P)dITqz2rX~5;WQQzh0{#QNhqA_BQe5BD8dWQ zb8!YvSax4v^d#ZI0rGw+`+6BJ^b8|3S9fJ-PS#u57~RhY^7@iAuMPPvG!DJ8D&0o| zQ7bvyiF!v0n}sdH6ND!VyM@TA#XDDciIDA52IDu0zLQu3Us9qUAfod;Ecyu|I{%ME z|D1?U!mAeM>z_ibe(ZkYP$Kx_goh9@{AY_c-x~*df$t6A63N#{zK)3Lg|B4N&ILs1 zT`ate2>C6zX6(E z*r6)znSI#fOhLOYR8mqJOe%eeFum9Zz{M2!d2rm~|Njmc zT>@Rv!X*6VI7tPh^*tRLI6aO59&?N`SRV}z?QfZm=L4g9oO{tl!{GFqz(Lpc8YQ9s zLFR*V2Zn@=VbW{xi`wH@C}odxchp`(#2$uJXm2}?qxLwKI6t_M*1GH(B2nu9JRN;4|@+J?6pSh;V`uKbiy9zgi`r?Dq(L` z#2#0AuDpN1akRhekPKkK)!#ory%oKIC@jnC0`1X9vZyUb%!S< z?7a$m4YJ4cq|4uW+2c8pfp<3FgSvKs_V_z9p|=y2RqA;I&z017;rr0r?g${$W!Mg- zXnWKRDwekja+klWpoc1BRajVoNN?qN!%iAU#PNU$_|YDcur$FA!%hsMJ3^|McbtC1 Qxs>AFh|G1C3-0j$0Po>M!TBTLE LDO Control Register 0x74 - - LDOTXEN - LDOTX Enable - 0 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDOTXOPULLD - LDOTX PULL Disable - 1 - 1 - - - en - enabled. - 0 - - - dis - disabled. - 1 - - - - - LDOTXVSEL - LDOTX Voltage Setting - 2 - 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDORXEN - LDORX Enable - 4 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDORXPULLD - LDORX Pulldown - 5 - 1 - - - en - enabled. - 0 - - - dis - disabled. - 1 - - - - - LDORXVSEL - LDORX Output Voltage Setting - 6 - 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDORXBYP - LDORX Bypass Enable - 8 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDORXDISCH - LDORX Discharge - 9 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDOTXBYP - LDOTX Bypass Enable - 10 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDOTXDISCH - LDOTX Discharge - 11 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDOTXENDLY - LDOTX Enable Delay - 12 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDORXENDLY - LDORX Enable Delay - 13 - 1 - - - dis - disabled. - 0 - - - en - enabled. - 1 - - - - - LDORXBYPENENDLY - LDOTX Bypass Enable Delay - 14 - 1 - - - LDOTXBYPENENDLY - LDORX Bypass Enable Delay - 15 - 1 - + + LDORXEN + LDORX Enable + 0 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDORXOPULLD + LDORX PULL Disable + 1 + 1 + + + en + enabled. + 0 + + + dis + disabled. + 1 + + + + + LDORXVSEL + LDORX Voltage Setting + 2 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDOTXEN + LDOTX Enable + 4 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDOTXPULLD + LDOTX Pulldown + 5 + 1 + + + en + enabled. + 0 + + + dis + disabled. + 1 + + + + + LDOTXVSEL + LDOTX Output Voltage Setting + 6 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDOTXBYP + LDOTX Bypass Enable + 8 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDOTXDISCH + LDOTX Discharge + 9 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDORXBYP + LDORX Bypass Enable + 10 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDORXDISCH + LDORX Discharge + 11 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDORXENDLY + LDORX Enable Delay + 12 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDOTXENDLY + LDOTX Enable Delay + 13 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + LDOTXBYPENENDLY + LDORX Bypass Enable Delay + 14 + 1 + + + LDORXBYPENENDLY + LDOTX Bypass Enable Delay + 15 + 1 + - - + + BTLE_LDODCR BTLE LDO Delay Register 0x78 - - BYPDLYCNT - Bypass Delay Count. Count delay base on PCLK. - 0 - 8 - - - LDORXDLYCNT - LDORX Delay Count. Count delay base on PCLK/128. - 8 - 9 - - - LDOTXDLYCNT - LDOTX Delay Count. Count delay base on PCLK/128. - 20 - 9 - + + BYPDLYCNT + Bypass Delay Count. Count delay base on PCLK. + 0 + 8 + + + LDOTXDLYCNT + LDOTX Delay Count. Count delay base on PCLK/128. + 8 + 9 + + + LDORXDLYCNT + LDORX Delay Count. Count delay base on PCLK/128. + 20 + 9 + - + GP0 General Purpose Register 0 diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd index c4627358ac..8fe0cb4c27 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd @@ -1213,165 +1213,141 @@ - - BTLELDOCTRL - BTLE LDO Control Register - 0x74 - - - LDORXEN - LDORX Enable. - 0 - 1 - - - LDORXPULLD - LDOrX Pull Down. - 1 - 1 - - - LDORXVSEL - LDORX Voltage Setting. - 2 - 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDORXVSEL0 - LDORX Voltage Setting. - 2 - 1 - - - LDORXVSEL1 - LDORX Voltage Setting. - 3 - 1 - - - LDOTXEN - LDOTX Enable. - 4 - 1 - - - LDOTXPULLD - LDOTX Pull Down. - 5 - 1 - - - LDOTXVSEL - LDOTX Voltage Setting. - 6 - 2 - - - 0_7 - 0.7V - 0 - - - 0_85 - 0.85V - 1 - - - 0_9 - 0.9V - 2 - - - 1_1 - 1.1V - 3 - - - - - LDOTXVSEL0 - LDOTX Voltage Setting. - 6 - 1 - - - LDOTXVSEL1 - LDOTX Voltage Setting. - 7 - 1 - - - LDOTXBYP - LDOTX Bypass Enable. - 8 - 1 - - - LDOTXDISCH - LDOTX Discharge. - 9 - 1 - - - LDORXBYP - LDORX Bypass Enable. - 10 - 1 - - - LDORXDISCH - LDORX Discharge. - 11 - 1 - - - LDORXENDLY - LDORX Enable Delay. - 12 - 1 - - - LDOTXENDLY - LDOTX Enable Delay. - 13 - 1 - - - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. - 14 - 1 - - - LDORXBYPENENDLY - LDORX Bypass Enable Delay. - 15 - 1 - - - + + BTLELDOCTRL + BTLE LDO Control Register + 0x74 + + + LDOBBEN + LDOBB Enable. + 0 + 1 + + + LDOBBPULLD + LDOBB Pull Down. + 1 + 1 + + + LDOBBVSEL + LDOBB Voltage Setting. + 2 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDORFEN + LDORF Enable. + 4 + 1 + + + LDORFPULLD + LDORF Pull Down. + 5 + 1 + + + LDORFVSEL + LDORF Voltage Setting. + 6 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDORFBYP + LDORF Bypass Enable. + 8 + 1 + + + LDORFDISCH + LDORF Discharge. + 9 + 1 + + + LDOBBBYP + LDOBB Bypass Enable. + 10 + 1 + + + LDOBBDISCH + LDOBB Discharge. + 11 + 1 + + + LDOBBENDLY + LDOBB Enable Delay. + 12 + 1 + + + LDORFENDLY + LDORF Enable Delay. + 13 + 1 + + + LDORFBYPENENDLY + LDORF Bypass Enable Delay. + 14 + 1 + + + LDOBBBYPENENDLY + LDOBB Bypass Enable Delay. + 15 + 1 + + + BTLELDODLY BTLE LDO Delay Register @@ -1384,14 +1360,14 @@ 8 - LDORXDLYCNT - LDORX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 8 9 - LDOTXDLYCNT - LDOTX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 20 9 diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd index 66995be9b9..9d79a03908 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me18.svd @@ -1596,117 +1596,161 @@ BTLE LDO Control Register 0x74 - - LDORXEN - LDORX Enable. - 0 - 1 - - - LDORXPULLD - LDORX Pull Down. - 1 - 1 - - - LDORXVSEL - LDORX Voltage Setting. - 2 - 2 - - - LDOTXEN - LDOTX Enable. - 4 - 1 - - - LDOTXPULLD - LDOTX Pull Down. - 5 - 1 - - - LDOTXVSEL - LDOTX Voltage Setting. - 6 - 2 - - - LDOTXBYP - LDOTX Bypass Enable. - 8 - 1 - - - LDOTXDISCH - LDOTX Discharge. - 9 - 1 - - - LDORXBYP - LDORX Bypass Enable. - 10 - 1 - - - LDORXDISCH - LDORX Discharge. - 11 - 1 - - - LDORXENDLY - LDORX Enable Delay. - 12 - 1 - - - LDOTXENDLY - LDOTX Enable Delay. - 13 - 1 - - - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. - 14 - 1 - - - LDORXBYPENENDLY - LDORX Bypass Enable Delay. - 15 - 1 - + + LDOBBEN + LDOBB Enable. + 0 + 1 + + + LDOBBPULLD + LDOBB Pull Down. + 1 + 1 + + + LDOBBVSEL + LDOBB Voltage Setting. + 2 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDORFEN + LDORF Enable. + 4 + 1 + + + LDORFPULLD + LDORF Pull Down. + 5 + 1 + + + LDORFVSEL + LDORF Voltage Setting. + 6 + 2 + + + 0_85 + 0.85V + 0 + + + 0_9 + 0.9V + 1 + + + 1_0 + 1.0V + 2 + + + 1_1 + 1.1V + 3 + + + + + LDORFBYP + LDORF Bypass Enable. + 8 + 1 + + + LDORFDISCH + LDORF Discharge. + 9 + 1 + + + LDOBBBYP + LDOBB Bypass Enable. + 10 + 1 + + + LDOBBDISCH + LDOBB Discharge. + 11 + 1 + + + LDOBBENDLY + LDOBB Enable Delay. + 12 + 1 + + + LDORFENDLY + LDORF Enable Delay. + 13 + 1 + + + LDORFBYPENENDLY + LDORF Bypass Enable Delay. + 14 + 1 + + + LDOBBBYPENENDLY + LDOBB Bypass Enable Delay. + 15 + 1 + - - + + BTLELDODLY BTLE LDO Delay Register 0x78 - - BYPDLYCNT - Bypass Delay Count. - 0 - 8 - - - LDOTXDLYCNT - LDOTX Delay Count. - 8 - 9 - - - LDORXDLYCNT - LDORX Delay Count. - 20 - 9 - + + BYPDLYCNT + Bypass Delay Count. + 0 + 8 + + + LDORFDLYCNT + LDORF Delay Count. + 8 + 9 + + + LDOBBDLYCNT + LDOBB Delay Count. + 20 + 9 + - + GPR0 General Purpose Register 0 diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me14.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me14.svd index 33037b350e..ee57622c48 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me14.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me14.svd @@ -1,5 +1,6 @@ - + SIR System Initialization Registers. @@ -19,7 +20,8 @@ MAGIC - Magic Word Validation. This bit is set by the system initialization block following power-up. + Magic Word Validation. This bit is set by the system initialization block + following power-up. 0 1 read-only @@ -39,7 +41,8 @@ CRCERR - CRC Error Status. This bit is set by the system initialization block following power-up. + CRC Error Status. This bit is set by the system initialization block + following power-up. 1 1 read-only @@ -52,7 +55,8 @@ error - A CRC error occurred while reading the OTP. The address of the failure location in the OTP memory is stored in the ERRADDR register. + A CRC error occurred while reading the OTP. The address of the failure + location in the OTP memory is stored in the ERRADDR register. 1 @@ -61,7 +65,8 @@ ERRADDR - Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). + Read-only field set by the SIB block if a CRC error occurs during the read of + the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). 0x04 read-only @@ -72,6 +77,40 @@ + + + + BTLE_LDO_TRIM_TX + BTLE LDO TX Trim register. + 0x54 + read-write + + + TX + TX LDO trim value. + 0 + 5 + read-write + + + + + + BTLE_LDO_TRIM_RX + BTLE LDO RX Trim register. + 0x5C + read-write + + + RX + RX LDO trim value. + 0 + 5 + read-write + + + + FSTAT funcstat register. diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me17.svd index a3b401cdfd..e84b71012e 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me17.svd @@ -72,28 +72,28 @@ - - BTLE_LDO_TRIM - BTLE LDO Trim register. - 0x48 - read-write - - - TX - TX LDO trim value. - 0 - 5 - read-write - - - RX - RX LDO trim value. - 8 - 5 - read-write - - - + + BTLE_LDO_TRIM + BTLE LDO Trim register. + 0x48 + read-write + + + RF + RF LDO trim value. + 16 + 5 + read-write + + + BB + BB LDO trim value. + 24 + 5 + read-write + + + FSTAT funcstat register. diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me18.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me18.svd index 6174cb8c01..da91113183 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me18.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me18.svd @@ -1,5 +1,6 @@  - + SIR System Initialization Registers. @@ -19,7 +20,8 @@ MAGIC - Magic Word Validation. This bit is set by the system initialization block following power-up. + Magic Word Validation. This bit is set by the system initialization block + following power-up. 0 1 read-only @@ -39,7 +41,8 @@ CRCERR - CRC Error Status. This bit is set by the system initialization block following power-up. + CRC Error Status. This bit is set by the system initialization block + following power-up. 1 1 read-only @@ -52,7 +55,8 @@ error - A CRC error occurred while reading the OTP. The address of the failure location in the OTP memory is stored in the ERRADDR register. + A CRC error occurred while reading the OTP. The address of the failure + location in the OTP memory is stored in the ERRADDR register. 1 @@ -61,7 +65,8 @@ SIADDR - Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). + Read-only field set by the SIB block if a CRC error occurs during the read of + the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). 0x04 read-only @@ -79,15 +84,15 @@ read-write - TX - TX LDO trim value. + RF + RF LDO trim value. 0 5 read-write - RX - RX LDO trim value. + BB + BB LDO trim value. 5 5 read-write From 5bc4b746e7733562b626a9214d8edd3e62e2002a Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Fri, 18 Aug 2023 10:28:17 -0500 Subject: [PATCH 13/35] "Generate_Register_Files" bot updating requested register files. --- .../Device/Maxim/MAX32655/Include/gcr_regs.h | 108 ++++++++---------- .../Maxim/MAX32655/Include/max32655.svd | 6 +- .../Device/Maxim/MAX32655/Include/sir_regs.h | 8 +- .../Device/Maxim/MAX32665/Include/gcr_regs.h | 82 ++++++------- .../Maxim/MAX32665/Include/max32665.svd | 15 +-- .../Device/Maxim/MAX32665/Include/sir_regs.h | 30 ++++- .../Device/Maxim/MAX32680/Include/gcr_regs.h | 108 ++++++++---------- .../Maxim/MAX32680/Include/max32680.svd | 100 ++++++++-------- .../Device/Maxim/MAX32680/Include/sir_regs.h | 8 +- .../Device/Maxim/MAX32690/Include/gcr_regs.h | 80 +++++++------ .../Maxim/MAX32690/Include/max32690.svd | 14 ++- .../Device/Maxim/MAX32690/Include/sir_regs.h | 8 +- 12 files changed, 296 insertions(+), 271 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h index c22cc5ea8c..9f3b7b9607 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h @@ -694,75 +694,63 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS 0 /**< BTLELDOCTRL_LDOBBEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS)) /**< BTLELDOCTRL_LDOBBEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS 1 /**< BTLELDOCTRL_LDOBBPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS)) /**< BTLELDOCTRL_LDOBBPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS 2 /**< BTLELDOCTRL_LDOBBVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS)) /**< BTLELDOCTRL_LDOBBVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 2 /**< BTLELDOCTRL_LDORXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS 4 /**< BTLELDOCTRL_LDORFEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS)) /**< BTLELDOCTRL_LDORFEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 3 /**< BTLELDOCTRL_LDORXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS 5 /**< BTLELDOCTRL_LDORFPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS)) /**< BTLELDOCTRL_LDORFPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS 6 /**< BTLELDOCTRL_LDORFVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS)) /**< BTLELDOCTRL_LDORFVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORFVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORFVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORFVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORFVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS 8 /**< BTLELDOCTRL_LDORFBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS)) /**< BTLELDOCTRL_LDORFBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS 9 /**< BTLELDOCTRL_LDORFDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS)) /**< BTLELDOCTRL_LDORFDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 6 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS 10 /**< BTLELDOCTRL_LDOBBBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS)) /**< BTLELDOCTRL_LDOBBBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 7 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS 11 /**< BTLELDOCTRL_LDOBBDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS)) /**< BTLELDOCTRL_LDOBBDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS 12 /**< BTLELDOCTRL_LDOBBENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS)) /**< BTLELDOCTRL_LDOBBENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS 13 /**< BTLELDOCTRL_LDORFENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS)) /**< BTLELDOCTRL_LDORFENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORFBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORFBYPENENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOBBBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOBBBYPENENDLY Mask */ /**@} end of group GCR_BTLELDOCTRL_Register */ @@ -775,11 +763,11 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS 0 /**< BTLELDODLY_BYPDLYCNT Position */ #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT ((uint32_t)(0xFFUL << MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS)) /**< BTLELDODLY_BYPDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS 8 /**< BTLELDODLY_LDORXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS)) /**< BTLELDODLY_LDORXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 8 /**< BTLELDODLY_LDOBBDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS 20 /**< BTLELDODLY_LDOTXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS)) /**< BTLELDODLY_LDOTXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 20 /**< BTLELDODLY_LDOBBDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd index 330d650d4a..29716c210e 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd @@ -3878,7 +3878,7 @@ LDORF Voltage Setting. 6 2 - + 0_85 0.85V @@ -3969,8 +3969,8 @@ 9 - LDORFDLYCNT - LDORF Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 20 9 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/sir_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/sir_regs.h index b30b2a4e75..7cb4fea91a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/sir_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/sir_regs.h @@ -143,11 +143,11 @@ typedef struct { * @brief BTLE LDO Trim register. * @{ */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX_POS 0 /**< BTLE_LDO_TRIM_TX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_TX_POS)) /**< BTLE_LDO_TRIM_TX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF_POS 16 /**< BTLE_LDO_TRIM_RF Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RF_POS)) /**< BTLE_LDO_TRIM_RF Mask */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX_POS 8 /**< BTLE_LDO_TRIM_RX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RX_POS)) /**< BTLE_LDO_TRIM_RX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB_POS 24 /**< BTLE_LDO_TRIM_BB Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_BB_POS)) /**< BTLE_LDO_TRIM_BB Mask */ /**@} end of group SIR_BTLE_LDO_TRIM_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/gcr_regs.h index a01fa739bb..62618fec9b 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/gcr_regs.h @@ -966,64 +966,64 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXEN_POS 0 /**< BTLE_LDOCR_LDOTXEN Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXEN_POS)) /**< BTLE_LDOCR_LDOTXEN Mask */ - -#define MXC_F_GCR_BTLE_LDOCR_LDOTXOPULLD_POS 1 /**< BTLE_LDOCR_LDOTXOPULLD Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXOPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXOPULLD_POS)) /**< BTLE_LDOCR_LDOTXOPULLD Mask */ - -#define MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS 2 /**< BTLE_LDOCR_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS)) /**< BTLE_LDOCR_LDOTXVSEL Mask */ -#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLE_LDOCR_LDOTXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_0_7 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_7 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLE_LDOCR_LDOTXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLE_LDOCR_LDOTXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLE_LDOCR_LDOTXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_1_1 Setting */ - -#define MXC_F_GCR_BTLE_LDOCR_LDORXEN_POS 4 /**< BTLE_LDOCR_LDORXEN Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXEN_POS 0 /**< BTLE_LDOCR_LDORXEN Position */ #define MXC_F_GCR_BTLE_LDOCR_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXEN_POS)) /**< BTLE_LDOCR_LDORXEN Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXPULLD_POS 5 /**< BTLE_LDOCR_LDORXPULLD Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXPULLD_POS)) /**< BTLE_LDOCR_LDORXPULLD Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXOPULLD_POS 1 /**< BTLE_LDOCR_LDORXOPULLD Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXOPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXOPULLD_POS)) /**< BTLE_LDOCR_LDORXOPULLD Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS 6 /**< BTLE_LDOCR_LDORXVSEL Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS 2 /**< BTLE_LDOCR_LDORXVSEL Position */ #define MXC_F_GCR_BTLE_LDOCR_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS)) /**< BTLE_LDOCR_LDORXVSEL Mask */ -#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLE_LDOCR_LDORXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLE_LDOCR_LDORXVSEL_0_7 (MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_7 << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS) /**< BTLE_LDOCR_LDORXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLE_LDOCR_LDORXVSEL_0_85 Value */ +#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_85 ((uint32_t)0x0UL) /**< BTLE_LDOCR_LDORXVSEL_0_85 Value */ #define MXC_S_GCR_BTLE_LDOCR_LDORXVSEL_0_85 (MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_85 << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS) /**< BTLE_LDOCR_LDORXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLE_LDOCR_LDORXVSEL_0_9 Value */ +#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_9 ((uint32_t)0x1UL) /**< BTLE_LDOCR_LDORXVSEL_0_9 Value */ #define MXC_S_GCR_BTLE_LDOCR_LDORXVSEL_0_9 (MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_0_9 << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS) /**< BTLE_LDOCR_LDORXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_1_0 ((uint32_t)0x2UL) /**< BTLE_LDOCR_LDORXVSEL_1_0 Value */ +#define MXC_S_GCR_BTLE_LDOCR_LDORXVSEL_1_0 (MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_1_0 << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS) /**< BTLE_LDOCR_LDORXVSEL_1_0 Setting */ #define MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLE_LDOCR_LDORXVSEL_1_1 Value */ #define MXC_S_GCR_BTLE_LDOCR_LDORXVSEL_1_1 (MXC_V_GCR_BTLE_LDOCR_LDORXVSEL_1_1 << MXC_F_GCR_BTLE_LDOCR_LDORXVSEL_POS) /**< BTLE_LDOCR_LDORXVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXBYP_POS 8 /**< BTLE_LDOCR_LDORXBYP Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXBYP_POS)) /**< BTLE_LDOCR_LDORXBYP Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXEN_POS 4 /**< BTLE_LDOCR_LDOTXEN Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXEN_POS)) /**< BTLE_LDOCR_LDOTXEN Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXDISCH_POS 9 /**< BTLE_LDOCR_LDORXDISCH Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXDISCH_POS)) /**< BTLE_LDOCR_LDORXDISCH Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXPULLD_POS 5 /**< BTLE_LDOCR_LDOTXPULLD Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXPULLD_POS)) /**< BTLE_LDOCR_LDOTXPULLD Mask */ + +#define MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS 6 /**< BTLE_LDOCR_LDOTXVSEL Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS)) /**< BTLE_LDOCR_LDOTXVSEL Mask */ +#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 ((uint32_t)0x0UL) /**< BTLE_LDOCR_LDOTXVSEL_0_85 Value */ +#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_85 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 ((uint32_t)0x1UL) /**< BTLE_LDOCR_LDOTXVSEL_0_9 Value */ +#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_0_9 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_0 ((uint32_t)0x2UL) /**< BTLE_LDOCR_LDOTXVSEL_1_0 Value */ +#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_1_0 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_0 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLE_LDOCR_LDOTXVSEL_1_1 Value */ +#define MXC_S_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 (MXC_V_GCR_BTLE_LDOCR_LDOTXVSEL_1_1 << MXC_F_GCR_BTLE_LDOCR_LDOTXVSEL_POS) /**< BTLE_LDOCR_LDOTXVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXBYP_POS 10 /**< BTLE_LDOCR_LDOTXBYP Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXBYP_POS 8 /**< BTLE_LDOCR_LDOTXBYP Position */ #define MXC_F_GCR_BTLE_LDOCR_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXBYP_POS)) /**< BTLE_LDOCR_LDOTXBYP Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXDISCH_POS 11 /**< BTLE_LDOCR_LDOTXDISCH Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXDISCH_POS 9 /**< BTLE_LDOCR_LDOTXDISCH Position */ #define MXC_F_GCR_BTLE_LDOCR_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXDISCH_POS)) /**< BTLE_LDOCR_LDOTXDISCH Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY_POS 12 /**< BTLE_LDOCR_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY_POS)) /**< BTLE_LDOCR_LDOTXENDLY Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXBYP_POS 10 /**< BTLE_LDOCR_LDORXBYP Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXBYP_POS)) /**< BTLE_LDOCR_LDORXBYP Mask */ + +#define MXC_F_GCR_BTLE_LDOCR_LDORXDISCH_POS 11 /**< BTLE_LDOCR_LDORXDISCH Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXDISCH_POS)) /**< BTLE_LDOCR_LDORXDISCH Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXENDLY_POS 13 /**< BTLE_LDOCR_LDORXENDLY Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXENDLY_POS 12 /**< BTLE_LDOCR_LDORXENDLY Position */ #define MXC_F_GCR_BTLE_LDOCR_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXENDLY_POS)) /**< BTLE_LDOCR_LDORXENDLY Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY_POS 14 /**< BTLE_LDOCR_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY_POS)) /**< BTLE_LDOCR_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY_POS 13 /**< BTLE_LDOCR_LDOTXENDLY Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXENDLY_POS)) /**< BTLE_LDOCR_LDOTXENDLY Mask */ -#define MXC_F_GCR_BTLE_LDOCR_LDOTXBYPENENDLY_POS 15 /**< BTLE_LDOCR_LDOTXBYPENENDLY Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDOTXBYPENENDLY_POS 14 /**< BTLE_LDOCR_LDOTXBYPENENDLY Position */ #define MXC_F_GCR_BTLE_LDOCR_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDOTXBYPENENDLY_POS)) /**< BTLE_LDOCR_LDOTXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY_POS 15 /**< BTLE_LDOCR_LDORXBYPENENDLY Position */ +#define MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLE_LDOCR_LDORXBYPENENDLY_POS)) /**< BTLE_LDOCR_LDORXBYPENENDLY Mask */ + /**@} end of group GCR_BTLE_LDOCR_Register */ /** @@ -1035,12 +1035,12 @@ typedef struct { #define MXC_F_GCR_BTLE_LDODCR_BYPDLYCNT_POS 0 /**< BTLE_LDODCR_BYPDLYCNT Position */ #define MXC_F_GCR_BTLE_LDODCR_BYPDLYCNT ((uint32_t)(0xFFUL << MXC_F_GCR_BTLE_LDODCR_BYPDLYCNT_POS)) /**< BTLE_LDODCR_BYPDLYCNT Mask */ -#define MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT_POS 8 /**< BTLE_LDODCR_LDORXDLYCNT Position */ -#define MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT_POS)) /**< BTLE_LDODCR_LDORXDLYCNT Mask */ - -#define MXC_F_GCR_BTLE_LDODCR_LDOTXDLYCNT_POS 20 /**< BTLE_LDODCR_LDOTXDLYCNT Position */ +#define MXC_F_GCR_BTLE_LDODCR_LDOTXDLYCNT_POS 8 /**< BTLE_LDODCR_LDOTXDLYCNT Position */ #define MXC_F_GCR_BTLE_LDODCR_LDOTXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLE_LDODCR_LDOTXDLYCNT_POS)) /**< BTLE_LDODCR_LDOTXDLYCNT Mask */ +#define MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT_POS 20 /**< BTLE_LDODCR_LDORXDLYCNT Position */ +#define MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLE_LDODCR_LDORXDLYCNT_POS)) /**< BTLE_LDODCR_LDORXDLYCNT Mask */ + /**@} end of group GCR_BTLE_LDODCR_Register */ /** diff --git a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd index 728448e8f9..095e976e5a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/max32665.svd @@ -13121,7 +13121,8 @@ MAGIC - Magic Word Validation. This bit is set by the system initialization block following power-up. + Magic Word Validation. This bit is set by the system initialization block + following power-up. 0 1 read-only @@ -13141,7 +13142,8 @@ CRCERR - CRC Error Status. This bit is set by the system initialization block following power-up. + CRC Error Status. This bit is set by the system initialization block + following power-up. 1 1 read-only @@ -13154,7 +13156,8 @@ error - A CRC error occurred while reading the OTP. The address of the failure location in the OTP memory is stored in the ERRADDR register. + A CRC error occurred while reading the OTP. The address of the failure + location in the OTP memory is stored in the ERRADDR register. 1 @@ -13163,7 +13166,8 @@ ERRADDR - Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). + Read-only field set by the SIB block if a CRC error occurs during the read of + the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). 0x04 read-only @@ -13174,7 +13178,6 @@ - BTLE_LDO_TRIM_TX BTLE LDO TX Trim register. @@ -13190,7 +13193,6 @@ - BTLE_LDO_TRIM_RX BTLE LDO RX Trim register. @@ -13206,7 +13208,6 @@ - FSTAT funcstat register. diff --git a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/sir_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/sir_regs.h index 0f6f44ea44..fa57e5d523 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32665/Include/sir_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32665/Include/sir_regs.h @@ -89,7 +89,11 @@ extern "C" { typedef struct { __I uint32_t sistat; /**< \b 0x00: SIR SISTAT Register */ __I uint32_t erraddr; /**< \b 0x04: SIR ERRADDR Register */ - __R uint32_t rsv_0x8_0xff[62]; + __R uint32_t rsv_0x8_0x53[19]; + __IO uint32_t btle_ldo_trim_tx; /**< \b 0x54: SIR BTLE_LDO_TRIM_TX Register */ + __R uint32_t rsv_0x58; + __IO uint32_t btle_ldo_trim_rx; /**< \b 0x5C: SIR BTLE_LDO_TRIM_RX Register */ + __R uint32_t rsv_0x60_0xff[40]; __I uint32_t fstat; /**< \b 0x100: SIR FSTAT Register */ __I uint32_t sfstat; /**< \b 0x104: SIR SFSTAT Register */ } mxc_sir_regs_t; @@ -103,6 +107,8 @@ typedef struct { */ #define MXC_R_SIR_SISTAT ((uint32_t)0x00000000UL) /**< Offset from SIR Base Address: 0x0000 */ #define MXC_R_SIR_ERRADDR ((uint32_t)0x00000004UL) /**< Offset from SIR Base Address: 0x0004 */ +#define MXC_R_SIR_BTLE_LDO_TRIM_TX ((uint32_t)0x00000054UL) /**< Offset from SIR Base Address: 0x0054 */ +#define MXC_R_SIR_BTLE_LDO_TRIM_RX ((uint32_t)0x0000005CUL) /**< Offset from SIR Base Address: 0x005C */ #define MXC_R_SIR_FSTAT ((uint32_t)0x00000100UL) /**< Offset from SIR Base Address: 0x0100 */ #define MXC_R_SIR_SFSTAT ((uint32_t)0x00000104UL) /**< Offset from SIR Base Address: 0x0104 */ /**@} end of group sir_registers */ @@ -134,6 +140,28 @@ typedef struct { /**@} end of group SIR_ERRADDR_Register */ +/** + * @ingroup sir_registers + * @defgroup SIR_BTLE_LDO_TRIM_TX SIR_BTLE_LDO_TRIM_TX + * @brief BTLE LDO TX Trim register. + * @{ + */ +#define MXC_F_SIR_BTLE_LDO_TRIM_TX_TX_POS 0 /**< BTLE_LDO_TRIM_TX_TX Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_TX_TX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_TX_TX_POS)) /**< BTLE_LDO_TRIM_TX_TX Mask */ + +/**@} end of group SIR_BTLE_LDO_TRIM_TX_Register */ + +/** + * @ingroup sir_registers + * @defgroup SIR_BTLE_LDO_TRIM_RX SIR_BTLE_LDO_TRIM_RX + * @brief BTLE LDO RX Trim register. + * @{ + */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RX_RX_POS 0 /**< BTLE_LDO_TRIM_RX_RX Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RX_RX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RX_RX_POS)) /**< BTLE_LDO_TRIM_RX_RX Mask */ + +/**@} end of group SIR_BTLE_LDO_TRIM_RX_Register */ + /** * @ingroup sir_registers * @defgroup SIR_FSTAT SIR_FSTAT diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h index 90d5d65cc7..933e2d4666 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h @@ -694,75 +694,63 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS 0 /**< BTLELDOCTRL_LDOBBEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS)) /**< BTLELDOCTRL_LDOBBEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS 1 /**< BTLELDOCTRL_LDOBBPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS)) /**< BTLELDOCTRL_LDOBBPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDORXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS) /**< BTLELDOCTRL_LDORXVSEL_1_1 Setting */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS 2 /**< BTLELDOCTRL_LDOBBVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS)) /**< BTLELDOCTRL_LDOBBVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS 2 /**< BTLELDOCTRL_LDORXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0_POS)) /**< BTLELDOCTRL_LDORXVSEL0 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS 4 /**< BTLELDOCTRL_LDORFEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS)) /**< BTLELDOCTRL_LDORFEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS 3 /**< BTLELDOCTRL_LDORXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1_POS)) /**< BTLELDOCTRL_LDORXVSEL1 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS 5 /**< BTLELDOCTRL_LDORFPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS)) /**< BTLELDOCTRL_LDORFPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS 6 /**< BTLELDOCTRL_LDORFVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS)) /**< BTLELDOCTRL_LDORFVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORFVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORFVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORFVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORFVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS 8 /**< BTLELDOCTRL_LDORFBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS)) /**< BTLELDOCTRL_LDORFBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_7 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_7 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_85 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_0_9 Setting */ -#define MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Value */ -#define MXC_S_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOTXVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS) /**< BTLELDOCTRL_LDOTXVSEL_1_1 Setting */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS 9 /**< BTLELDOCTRL_LDORFDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS)) /**< BTLELDOCTRL_LDORFDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS 6 /**< BTLELDOCTRL_LDOTXVSEL0 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0_POS)) /**< BTLELDOCTRL_LDOTXVSEL0 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS 10 /**< BTLELDOCTRL_LDOBBBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS)) /**< BTLELDOCTRL_LDOBBBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS 7 /**< BTLELDOCTRL_LDOTXVSEL1 Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1_POS)) /**< BTLELDOCTRL_LDOTXVSEL1 Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS 11 /**< BTLELDOCTRL_LDOBBDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS)) /**< BTLELDOCTRL_LDOBBDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS 12 /**< BTLELDOCTRL_LDOBBENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS)) /**< BTLELDOCTRL_LDOBBENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS 13 /**< BTLELDOCTRL_LDORFENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS)) /**< BTLELDOCTRL_LDORFENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORFBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORFBYPENENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ - -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOBBBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOBBBYPENENDLY Mask */ /**@} end of group GCR_BTLELDOCTRL_Register */ @@ -775,11 +763,11 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS 0 /**< BTLELDODLY_BYPDLYCNT Position */ #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT ((uint32_t)(0xFFUL << MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS)) /**< BTLELDODLY_BYPDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS 8 /**< BTLELDODLY_LDORXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS)) /**< BTLELDODLY_LDORXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 8 /**< BTLELDODLY_LDOBBDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS 20 /**< BTLELDODLY_LDOTXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS)) /**< BTLELDODLY_LDOTXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 20 /**< BTLELDODLY_LDOBBDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd index 931dc5aab6..144e485944 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd @@ -3794,36 +3794,36 @@ 0x74 - LDORXEN - LDORX Enable. + LDOBBEN + LDOBB Enable. 0 1 - LDORXPULLD - LDOrX Pull Down. + LDOBBPULLD + LDOBB Pull Down. 1 1 - LDORXVSEL - LDORX Voltage Setting. + LDOBBVSEL + LDOBB Voltage Setting. 2 2 - - 0_7 - 0.7V - 0 - 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -3834,36 +3834,36 @@ - LDOTXEN - LDOTX Enable. + LDORFEN + LDORF Enable. 4 1 - LDOTXPULLD - LDOTX Pull Down. + LDORFPULLD + LDORF Pull Down. 5 1 - LDOTXVSEL - LDOTX Voltage Setting. + LDORFVSEL + LDORF Voltage Setting. 6 2 - - 0_7 - 0.7V - 0 - 0_85 0.85V - 1 + 0 0_9 0.9V + 1 + + + 1_0 + 1.0V 2 @@ -3874,50 +3874,50 @@ - LDOTXBYP - LDOTX Bypass Enable. + LDORFBYP + LDORF Bypass Enable. 8 1 - LDOTXDISCH - LDOTX Discharge. + LDORFDISCH + LDORF Discharge. 9 1 - LDORXBYP - LDORX Bypass Enable. + LDOBBBYP + LDOBB Bypass Enable. 10 1 - LDORXDISCH - LDORX Discharge. + LDOBBDISCH + LDOBB Discharge. 11 1 - LDORXENDLY - LDORX Enable Delay. + LDOBBENDLY + LDOBB Enable Delay. 12 1 - LDOTXENDLY - LDOTX Enable Delay. + LDORFENDLY + LDORF Enable Delay. 13 1 - LDOTXBYPENENDLY - LDOTX Bypass Enable Delay. + LDORFBYPENENDLY + LDORF Bypass Enable Delay. 14 1 - LDORXBYPENENDLY - LDORX Bypass Enable Delay. + LDOBBBYPENENDLY + LDOBB Bypass Enable Delay. 15 1 @@ -3935,14 +3935,14 @@ 8 - LDORXDLYCNT - LDORX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 8 9 - LDOTXDLYCNT - LDOTX Delay Count. + LDOBBDLYCNT + LDOBB Delay Count. 20 9 @@ -9121,16 +9121,16 @@ read-write - TX - TX LDO trim value. - 0 + RF + RF LDO trim value. + 16 5 read-write - RX - RX LDO trim value. - 8 + BB + BB LDO trim value. + 24 5 read-write diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/sir_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/sir_regs.h index 67b0dff0f8..a45ae4b1c7 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/sir_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/sir_regs.h @@ -143,11 +143,11 @@ typedef struct { * @brief BTLE LDO Trim register. * @{ */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX_POS 0 /**< BTLE_LDO_TRIM_TX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_TX_POS)) /**< BTLE_LDO_TRIM_TX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF_POS 16 /**< BTLE_LDO_TRIM_RF Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RF_POS)) /**< BTLE_LDO_TRIM_RF Mask */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX_POS 8 /**< BTLE_LDO_TRIM_RX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RX_POS)) /**< BTLE_LDO_TRIM_RX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB_POS 24 /**< BTLE_LDO_TRIM_BB Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_BB_POS)) /**< BTLE_LDO_TRIM_BB Mask */ /**@} end of group SIR_BTLE_LDO_TRIM_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h index d66be6f6ee..eb6d13cf07 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/gcr_regs.h @@ -891,47 +891,63 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS 0 /**< BTLELDOCTRL_LDORXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXEN_POS)) /**< BTLELDOCTRL_LDORXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS 0 /**< BTLELDOCTRL_LDOBBEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBEN_POS)) /**< BTLELDOCTRL_LDOBBEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS 1 /**< BTLELDOCTRL_LDORXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXPULLD_POS)) /**< BTLELDOCTRL_LDORXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS 1 /**< BTLELDOCTRL_LDOBBPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBPULLD_POS)) /**< BTLELDOCTRL_LDOBBPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS 2 /**< BTLELDOCTRL_LDORXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORXVSEL_POS)) /**< BTLELDOCTRL_LDORXVSEL Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS 2 /**< BTLELDOCTRL_LDOBBVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS)) /**< BTLELDOCTRL_LDOBBVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDOBBVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL_POS) /**< BTLELDOCTRL_LDOBBVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS 4 /**< BTLELDOCTRL_LDOTXEN Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXEN_POS)) /**< BTLELDOCTRL_LDOTXEN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS 4 /**< BTLELDOCTRL_LDORFEN Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFEN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFEN_POS)) /**< BTLELDOCTRL_LDORFEN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS 5 /**< BTLELDOCTRL_LDOTXPULLD Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXPULLD_POS)) /**< BTLELDOCTRL_LDOTXPULLD Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS 5 /**< BTLELDOCTRL_LDORFPULLD Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFPULLD ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFPULLD_POS)) /**< BTLELDOCTRL_LDORFPULLD Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS 6 /**< BTLELDOCTRL_LDOTXVSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL_POS)) /**< BTLELDOCTRL_LDOTXVSEL Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS 6 /**< BTLELDOCTRL_LDORFVSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFVSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS)) /**< BTLELDOCTRL_LDORFVSEL Mask */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 ((uint32_t)0x0UL) /**< BTLELDOCTRL_LDORFVSEL_0_85 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_85 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_85 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_85 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 ((uint32_t)0x1UL) /**< BTLELDOCTRL_LDORFVSEL_0_9 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_0_9 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_0_9 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 ((uint32_t)0x2UL) /**< BTLELDOCTRL_LDORFVSEL_1_0 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_0 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_0 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_0 Setting */ +#define MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 ((uint32_t)0x3UL) /**< BTLELDOCTRL_LDORFVSEL_1_1 Value */ +#define MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_1_1 (MXC_V_GCR_BTLELDOCTRL_LDORFVSEL_1_1 << MXC_F_GCR_BTLELDOCTRL_LDORFVSEL_POS) /**< BTLELDOCTRL_LDORFVSEL_1_1 Setting */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS 8 /**< BTLELDOCTRL_LDOTXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYP_POS)) /**< BTLELDOCTRL_LDOTXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS 8 /**< BTLELDOCTRL_LDORFBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYP_POS)) /**< BTLELDOCTRL_LDORFBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS 9 /**< BTLELDOCTRL_LDOTXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXDISCH_POS)) /**< BTLELDOCTRL_LDOTXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS 9 /**< BTLELDOCTRL_LDORFDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFDISCH_POS)) /**< BTLELDOCTRL_LDORFDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS 10 /**< BTLELDOCTRL_LDORXBYP Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYP_POS)) /**< BTLELDOCTRL_LDORXBYP Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS 10 /**< BTLELDOCTRL_LDOBBBYP Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYP ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYP_POS)) /**< BTLELDOCTRL_LDOBBBYP Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS 11 /**< BTLELDOCTRL_LDORXDISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXDISCH_POS)) /**< BTLELDOCTRL_LDORXDISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS 11 /**< BTLELDOCTRL_LDOBBDISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBDISCH_POS)) /**< BTLELDOCTRL_LDOBBDISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS 12 /**< BTLELDOCTRL_LDORXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXENDLY_POS)) /**< BTLELDOCTRL_LDORXENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS 12 /**< BTLELDOCTRL_LDOBBENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBENDLY_POS)) /**< BTLELDOCTRL_LDOBBENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS 13 /**< BTLELDOCTRL_LDOTXENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXENDLY_POS)) /**< BTLELDOCTRL_LDOTXENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS 13 /**< BTLELDOCTRL_LDORFENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFENDLY_POS)) /**< BTLELDOCTRL_LDORFENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDOTXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOTXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOTXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS 14 /**< BTLELDOCTRL_LDORFBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORFBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORFBYPENENDLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDORXBYPENENDLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDORXBYPENENDLY_POS)) /**< BTLELDOCTRL_LDORXBYPENENDLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS 15 /**< BTLELDOCTRL_LDOBBBYPENENDLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_LDOBBBYPENENDLY_POS)) /**< BTLELDOCTRL_LDOBBBYPENENDLY Mask */ /**@} end of group GCR_BTLELDOCTRL_Register */ @@ -944,11 +960,11 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS 0 /**< BTLELDODLY_BYPDLYCNT Position */ #define MXC_F_GCR_BTLELDODLY_BYPDLYCNT ((uint32_t)(0xFFUL << MXC_F_GCR_BTLELDODLY_BYPDLYCNT_POS)) /**< BTLELDODLY_BYPDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS 8 /**< BTLELDODLY_LDOTXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOTXDLYCNT_POS)) /**< BTLELDODLY_LDOTXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS 8 /**< BTLELDODLY_LDORFDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS)) /**< BTLELDODLY_LDORFDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS 20 /**< BTLELDODLY_LDORXDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDORXDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORXDLYCNT_POS)) /**< BTLELDODLY_LDORXDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 20 /**< BTLELDODLY_LDOBBDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd index ca462c4e92..46812014af 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.svd @@ -7390,7 +7390,7 @@ memory. LDORF Voltage Setting. 6 2 - + 0_85 0.85V @@ -13482,7 +13482,8 @@ signal(s) on transition(s) from low to high or high to low when PM.USBWKEN is se MAGIC - Magic Word Validation. This bit is set by the system initialization block following power-up. + Magic Word Validation. This bit is set by the system initialization block + following power-up. 0 1 read-only @@ -13502,7 +13503,8 @@ signal(s) on transition(s) from low to high or high to low when PM.USBWKEN is se CRCERR - CRC Error Status. This bit is set by the system initialization block following power-up. + CRC Error Status. This bit is set by the system initialization block + following power-up. 1 1 read-only @@ -13515,7 +13517,8 @@ signal(s) on transition(s) from low to high or high to low when PM.USBWKEN is se error - A CRC error occurred while reading the OTP. The address of the failure location in the OTP memory is stored in the ERRADDR register. + A CRC error occurred while reading the OTP. The address of the failure + location in the OTP memory is stored in the ERRADDR register. 1 @@ -13524,7 +13527,8 @@ signal(s) on transition(s) from low to high or high to low when PM.USBWKEN is se SIADDR - Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). + Read-only field set by the SIB block if a CRC error occurs during the read of + the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). 0x04 read-only diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/sir_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/sir_regs.h index aca12422b8..aa8fb92f75 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Include/sir_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Include/sir_regs.h @@ -143,11 +143,11 @@ typedef struct { * @brief BTLE LDO Trim register. * @{ */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX_POS 0 /**< BTLE_LDO_TRIM_TX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_TX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_TX_POS)) /**< BTLE_LDO_TRIM_TX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF_POS 0 /**< BTLE_LDO_TRIM_RF Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_RF ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RF_POS)) /**< BTLE_LDO_TRIM_RF Mask */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX_POS 5 /**< BTLE_LDO_TRIM_RX Position */ -#define MXC_F_SIR_BTLE_LDO_TRIM_RX ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_RX_POS)) /**< BTLE_LDO_TRIM_RX Mask */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB_POS 5 /**< BTLE_LDO_TRIM_BB Position */ +#define MXC_F_SIR_BTLE_LDO_TRIM_BB ((uint32_t)(0x1FUL << MXC_F_SIR_BTLE_LDO_TRIM_BB_POS)) /**< BTLE_LDO_TRIM_BB Mask */ /**@} end of group SIR_BTLE_LDO_TRIM_Register */ From 15b20f39d3ceeb70530cc50b4424b0a1294fe715 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Fri, 18 Aug 2023 10:37:24 -0500 Subject: [PATCH 14/35] gcr fix --- Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd index 8fe0cb4c27..06cc96ff50 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me17.svd @@ -1366,7 +1366,7 @@ 9 - LDOBBDLYCNT + LDORFDLYCNT LDOBB Delay Count. 20 9 From cb03c20da0b80ade1fab731a605f1ac8f29b83b1 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Fri, 18 Aug 2023 10:47:02 -0500 Subject: [PATCH 15/35] "Generate_Register_Files" bot updating requested register files. --- Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h | 4 ++-- Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd | 2 +- Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h | 4 ++-- Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h index 9f3b7b9607..83c76986e6 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/gcr_regs.h @@ -766,8 +766,8 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 8 /**< BTLELDODLY_LDOBBDLYCNT Position */ #define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 20 /**< BTLELDODLY_LDOBBDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS 20 /**< BTLELDODLY_LDORFDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS)) /**< BTLELDODLY_LDORFDLYCNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd index 29716c210e..51f947847a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Include/max32655.svd @@ -3969,7 +3969,7 @@ 9 - LDOBBDLYCNT + LDORFDLYCNT LDOBB Delay Count. 20 9 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h index 933e2d4666..7f3b8fdaa6 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/gcr_regs.h @@ -766,8 +766,8 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 8 /**< BTLELDODLY_LDOBBDLYCNT Position */ #define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ -#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS 20 /**< BTLELDODLY_LDOBBDLYCNT Position */ -#define MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDOBBDLYCNT_POS)) /**< BTLELDODLY_LDOBBDLYCNT Mask */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS 20 /**< BTLELDODLY_LDORFDLYCNT Position */ +#define MXC_F_GCR_BTLELDODLY_LDORFDLYCNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_LDORFDLYCNT_POS)) /**< BTLELDODLY_LDORFDLYCNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd index 144e485944..4d52b1ac29 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd @@ -3941,7 +3941,7 @@ 9 - LDOBBDLYCNT + LDORFDLYCNT LDOBB Delay Count. 20 9 From 60876802b800fdea864964ec725761660fa23b58 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Fri, 18 Aug 2023 13:06:37 -0500 Subject: [PATCH 16/35] updated sys driver for BLE clocks --- Libraries/PeriphDrivers/Source/SYS/sys_me17.c | 2 +- Libraries/PeriphDrivers/Source/SYS/sys_me18.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c index d537824cd8..a82dab68db 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c @@ -253,7 +253,7 @@ int MXC_SYS_ClockSourceEnable(mxc_sys_system_clock_t clock) break; case MXC_SYS_CLOCK_ERFO: - MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_LDOTXEN | MXC_F_GCR_BTLELDOCTRL_LDORXEN; + MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN; /* Initialize kickstart circuit Select Kick start circuit clock source- IPO/ISO diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me18.c b/Libraries/PeriphDrivers/Source/SYS/sys_me18.c index ff05baa16f..82ed109894 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me18.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me18.c @@ -262,7 +262,7 @@ int MXC_SYS_ClockSourceEnable(mxc_sys_system_clock_t clock) break; case MXC_SYS_CLOCK_ERFO: - MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_LDOTXEN | MXC_F_GCR_BTLELDOCTRL_LDORXEN; + MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN; MXC_GCR->clkctrl |= MXC_F_GCR_CLKCTRL_ERFO_EN; return MXC_SYS_Clock_Timeout(MXC_F_GCR_CLKCTRL_ERFO_RDY); From e761e2eb4efcb2f384132965dc9f217d51281766 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 21 Aug 2023 13:31:38 -0500 Subject: [PATCH 17/35] fixed max32680 btle reference --- Libraries/PeriphDrivers/Source/AFE/hart_uart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c index d6b899b10c..3734e7daae 100644 --- a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c +++ b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c @@ -564,9 +564,9 @@ int hart_clock_enable(void) pPTG->intfl = 0x01; //enable ISO before enabling ERFO - MXC_GCR->btleldoctrl |= (MXC_F_GCR_BTLELDOCTRL_LDOTXEN | MXC_F_GCR_BTLELDOCTRL_LDORXEN | - MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDOTXVSEL1 | - MXC_F_GCR_BTLELDOCTRL_LDORXVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDORXVSEL1); + MXC_GCR->btleldoctrl |= (MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN | + MXC_F_GCR_BTLELDOCTRL_LDORFVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDORFVSEL1 | + MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL1); MXC_GCR->clkctrl |= MXC_F_GCR_CLKCTRL_ISO_EN; From dc122368532f27ff21ed896b1f740b1c8d935d8f Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:16:18 -0500 Subject: [PATCH 18/35] typecase around volatile --- Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c b/Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c index 176b568ff5..ca7e6701a9 100644 --- a/Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c +++ b/Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c @@ -474,7 +474,7 @@ uint8_t LlEnhancedTxTest(uint8_t rfChan, uint8_t len, uint8_t pktType, uint8_t p if (llTestCb.state == LL_TEST_STATE_IDLE) { /* Init test state. */ - memset(&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); + memset((void*)&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); } /* Handle non-packet test mode. */ @@ -911,7 +911,7 @@ uint8_t LlEnhancedRxTest(uint8_t rfChan, uint8_t phy, uint8_t modIdx, uint16_t n llTestCb.state = LL_TEST_STATE_RX; lmgrCb.testEnabled = TRUE; LmgrIncResetRefCount(); - memset(&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); /* clear report */ + memset((void*)&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); /* clear report */ BbStart(BB_PROT_BLE_DTM); SchInsertNextAvailable(pOp); @@ -1029,7 +1029,7 @@ uint8_t LlEndTest(LlTestReport_t *pRpt) LL_TRACE_INFO1(" numRxCrcError=%u", llTestCb.rpt.numRxCrcError); LL_TRACE_INFO1(" numRxTimeout=%u", llTestCb.rpt.numRxTimeout); - memset(&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); /* clear report */ + memset((void*)&llTestCb.rpt, 0, sizeof(llTestCb.rpt)); /* clear report */ return LL_SUCCESS; } @@ -1061,7 +1061,7 @@ uint8_t LlSetTxTestErrorPattern(uint32_t pattern) /*************************************************************************************************/ static void llTestResetHandler(void) { - memset(&llTestCb, 0, sizeof(llTestCb)); + memset((void*)&llTestCb, 0, sizeof(llTestCb)); llTestCb.tx.errPattern = 0xFFFFFFFF; llTestCb.packetsFreed = TRUE; From 761a63c9a819a250bef38b30ae62e7023f37db74 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:29:53 -0500 Subject: [PATCH 19/35] updated fcc for max32690 --- Examples/MAX32655/BLE_fcc/main.c | 32 +++++++++++++++++++++----------- Examples/MAX32690/BLE_fcc/main.c | 26 ++++++++++++++++---------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/Examples/MAX32655/BLE_fcc/main.c b/Examples/MAX32655/BLE_fcc/main.c index ab276d5b05..7f168caac0 100644 --- a/Examples/MAX32655/BLE_fcc/main.c +++ b/Examples/MAX32655/BLE_fcc/main.c @@ -67,12 +67,19 @@ static uint8_t txFreqHopCh; **************************************************************************************************/ /*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); +// extern void llc_api_set_txpower(int8_t power); extern void dbb_seq_select_rf_channel(uint32_t rf_channel); extern void llc_api_tx_ldo_setup(void); extern void dbb_seq_tx_enable(void); extern void dbb_seq_tx_disable(void); +extern bool_t PalBbAfeSetTxPower(int8_t txPower); +extern void PalBbAfeSetChannelTx(uint8_t rfChannel); +extern void PalBbDbbEnableCw(void); + + + + /*************************************************************************************************/ /*! * \fn Get PHY String. @@ -236,17 +243,19 @@ static void processConsoleRX(uint8_t rxByte) switch (param) { case '0': - llc_api_set_txpower(-10); + PalBbAfeSetTxPower(-10); LlSetAdvTxPower(-10); APP_TRACE_INFO0("Power set to -10 dBm"); break; case '1': - llc_api_set_txpower(0); + // llc_api_set_txpower(0); + PalBbAfeSetTxPower(0); LlSetAdvTxPower(0); APP_TRACE_INFO0("Power set to 0 dBm"); break; case '2': - llc_api_set_txpower(4); + // llc_api_set_txpower(4); + PalBbAfeSetTxPower(4); LlSetAdvTxPower(4); APP_TRACE_INFO0("Power set to 4.5 dBm"); break; @@ -269,15 +278,15 @@ static void processConsoleRX(uint8_t rxByte) switch (param) { case '0': - dbb_seq_select_rf_channel(0); + PalBbAfeSetChannelTx(0); APP_TRACE_INFO0("Channel set to 0"); break; case '1': - dbb_seq_select_rf_channel(19); + PalBbAfeSetChannelTx(19); APP_TRACE_INFO0("Channel set to 19"); break; case '2': - dbb_seq_select_rf_channel(39); + PalBbAfeSetChannelTx(39); APP_TRACE_INFO0("Channel set to 39"); break; default: @@ -289,10 +298,11 @@ static void processConsoleRX(uint8_t rxByte) PalBbEnable(); - llc_api_tx_ldo_setup(); + // llc_api_tx_ldo_setup(); /* Enable constant TX */ - dbb_seq_tx_enable(); + // dbb_seq_tx_enable(); + PalBbDbbEnableCw(); cmd = 0; param = 0; @@ -302,8 +312,8 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ - dbb_seq_tx_disable(); - + // dbb_seq_tx_disable(); + PalBbDbbDisableCw(); PalBbDisable(); cmd = 0; diff --git a/Examples/MAX32690/BLE_fcc/main.c b/Examples/MAX32690/BLE_fcc/main.c index 9fb8aa504c..b322e422fc 100644 --- a/Examples/MAX32690/BLE_fcc/main.c +++ b/Examples/MAX32690/BLE_fcc/main.c @@ -73,6 +73,10 @@ extern void llc_api_tx_ldo_setup(void); extern void dbb_seq_tx_enable(void); extern void dbb_seq_tx_disable(void); +extern bool_t PalBbAfeSetTxPower(int8_t txPower); +extern void PalBbAfeSetChannelTx(uint8_t rfChannel); +extern void PalBbDbbEnableCw(void); + /*************************************************************************************************/ /*! * \fn Get PHY String. @@ -236,17 +240,17 @@ static void processConsoleRX(uint8_t rxByte) switch (param) { case '0': - llc_api_set_txpower(-10); + PalBbAfeSetTxPower(-10); LlSetAdvTxPower(-10); APP_TRACE_INFO0("Power set to -10 dBm"); break; case '1': - llc_api_set_txpower(0); + PalBbAfeSetTxPower(0); LlSetAdvTxPower(0); APP_TRACE_INFO0("Power set to 0 dBm"); break; case '2': - llc_api_set_txpower(4); + PalBbAfeSetTxPower(4); LlSetAdvTxPower(4); APP_TRACE_INFO0("Power set to 4.5 dBm"); break; @@ -269,15 +273,15 @@ static void processConsoleRX(uint8_t rxByte) switch (param) { case '0': - dbb_seq_select_rf_channel(0); + PalBbAfeSetChannelTx(0); APP_TRACE_INFO0("Channel set to 0"); break; case '1': - dbb_seq_select_rf_channel(19); + PalBbAfeSetChannelTx(19); APP_TRACE_INFO0("Channel set to 19"); break; case '2': - dbb_seq_select_rf_channel(39); + PalBbAfeSetChannelTx(39); APP_TRACE_INFO0("Channel set to 39"); break; default: @@ -288,11 +292,12 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); PalBbEnable(); - - llc_api_tx_ldo_setup(); + + // llc_api_tx_ldo_setup(); /* Enable constant TX */ - dbb_seq_tx_enable(); + // dbb_seq_tx_enable(); + PalBbDbbEnableCw(); cmd = 0; param = 0; @@ -302,7 +307,8 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ - dbb_seq_tx_disable(); + PalBbDbbDisableCw(); + // dbb_seq_tx_disable(); PalBbDisable(); From 304f65c3065f1ea85282cdbc3ca9928fbb25dc62 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:35:14 -0500 Subject: [PATCH 20/35] added references for AFE setup and done --- Examples/MAX32655/BLE_fcc/main.c | 6 +++++- Examples/MAX32690/BLE_fcc/main.c | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Examples/MAX32655/BLE_fcc/main.c b/Examples/MAX32655/BLE_fcc/main.c index 7f168caac0..acb23fc3a6 100644 --- a/Examples/MAX32655/BLE_fcc/main.c +++ b/Examples/MAX32655/BLE_fcc/main.c @@ -76,7 +76,9 @@ extern void dbb_seq_tx_disable(void); extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); extern void PalBbDbbEnableCw(void); - +extern void PalBbDbbDisableCw(void); +extern bool_t PalBbAfeTxSetup(void); +extern bool_t PalBbAfeTxDone(void); @@ -302,6 +304,7 @@ static void processConsoleRX(uint8_t rxByte) /* Enable constant TX */ // dbb_seq_tx_enable(); + PalBbAfeTxSetup(); PalBbDbbEnableCw(); cmd = 0; @@ -313,6 +316,7 @@ static void processConsoleRX(uint8_t rxByte) /* Disable constant TX */ // dbb_seq_tx_disable(); + PalBbAfeTxDone(); PalBbDbbDisableCw(); PalBbDisable(); diff --git a/Examples/MAX32690/BLE_fcc/main.c b/Examples/MAX32690/BLE_fcc/main.c index b322e422fc..dc5e05de0c 100644 --- a/Examples/MAX32690/BLE_fcc/main.c +++ b/Examples/MAX32690/BLE_fcc/main.c @@ -76,6 +76,10 @@ extern void dbb_seq_tx_disable(void); extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); extern void PalBbDbbEnableCw(void); +extern void PalBbDbbDisableCw(void); +extern bool_t PalBbAfeTxSetup(void); +extern bool_t PalBbAfeTxDone(void); + /*************************************************************************************************/ /*! @@ -292,11 +296,12 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); PalBbEnable(); - + // llc_api_tx_ldo_setup(); /* Enable constant TX */ // dbb_seq_tx_enable(); + PalBbAfeTxSetup(); PalBbDbbEnableCw(); cmd = 0; @@ -307,6 +312,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ + PalBbAfeTxDone(); PalBbDbbDisableCw(); // dbb_seq_tx_disable(); From 7282e7f4720bbeb8c2f8de90c222dea1566b99a7 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 21 Aug 2023 21:43:32 +0000 Subject: [PATCH 21/35] clang-format bot reformatting. --- Examples/MAX32655/BLE_fcc/main.c | 4 +--- Examples/MAX32690/BLE_fcc/main.c | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Examples/MAX32655/BLE_fcc/main.c b/Examples/MAX32655/BLE_fcc/main.c index acb23fc3a6..8bdd88bd62 100644 --- a/Examples/MAX32655/BLE_fcc/main.c +++ b/Examples/MAX32655/BLE_fcc/main.c @@ -73,15 +73,13 @@ extern void llc_api_tx_ldo_setup(void); extern void dbb_seq_tx_enable(void); extern void dbb_seq_tx_disable(void); -extern bool_t PalBbAfeSetTxPower(int8_t txPower); +extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); extern void PalBbDbbEnableCw(void); extern void PalBbDbbDisableCw(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); - - /*************************************************************************************************/ /*! * \fn Get PHY String. diff --git a/Examples/MAX32690/BLE_fcc/main.c b/Examples/MAX32690/BLE_fcc/main.c index dc5e05de0c..aafaac8601 100644 --- a/Examples/MAX32690/BLE_fcc/main.c +++ b/Examples/MAX32690/BLE_fcc/main.c @@ -73,14 +73,13 @@ extern void llc_api_tx_ldo_setup(void); extern void dbb_seq_tx_enable(void); extern void dbb_seq_tx_disable(void); -extern bool_t PalBbAfeSetTxPower(int8_t txPower); +extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); extern void PalBbDbbEnableCw(void); extern void PalBbDbbDisableCw(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); - /*************************************************************************************************/ /*! * \fn Get PHY String. From ad85a57e349439c8a5e8c9ffce27946c9b0e632e Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Tue, 22 Aug 2023 09:34:39 -0500 Subject: [PATCH 22/35] updated 680 hart_uart --- Libraries/PeriphDrivers/Source/AFE/hart_uart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c index 3734e7daae..9fa7b19eae 100644 --- a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c +++ b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c @@ -565,8 +565,8 @@ int hart_clock_enable(void) //enable ISO before enabling ERFO MXC_GCR->btleldoctrl |= (MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN | - MXC_F_GCR_BTLELDOCTRL_LDORFVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDORFVSEL1 | - MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL0 | MXC_F_GCR_BTLELDOCTRL_LDOBBVSEL1); + MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9| + MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 ); MXC_GCR->clkctrl |= MXC_F_GCR_CLKCTRL_ISO_EN; From 26d1501efc7d4ce705b827cc3b020c29837c4eda Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Tue, 22 Aug 2023 13:46:29 -0500 Subject: [PATCH 23/35] restore libphy --- Libraries/BlePhy/MAX32655/libphy.a | Bin 446270 -> 528118 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Libraries/BlePhy/MAX32655/libphy.a b/Libraries/BlePhy/MAX32655/libphy.a index 9247b282972667506b4d825bfbe0b110a52047de..28d7ecd266fe513d40a6abe9318bb2d04ff28da7 100644 GIT binary patch literal 528118 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 z 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

S5bl7tNgSd+pJ7ED zDn!C5EI}atG6S*uvadTbU(qX>ACy04_r7j9ruvByPOn~vzzOx--?1C`X$v5wJ}B38 z+~7dmgg`cG3IGFb+=PG^^`+&2Ue<&_%=ExiG_l^+SV7(zE9ev7*I!~5zdW|L-&hCe z+k?e`eld#yDBKFz(??N^6Qlf<=becYa0gsc4UgTd2iinD>cFG`?eXs(ix}YsL}R7h zg+dS3`B`hcP||oDE+9x_a~9LpTx=Cf@QdtscTsnabD;j9DA90jHHew`C7m^AT+5qT z__?t|P2qr6D9#HAYZyjg%>ByUWNlt?hhp!ng&ixKdmFkY56)W_rF z>TJ@Pjc)fLXCkN~)4#{gczJ*R_3ycVUNoGB+mOXCee7 zJH}M>Pv>?!G<}SNJ@PJAfdpj7Ji-XcE%oEleLz;yH!~*PU(m&xCFmkHn2*drQ2F(Mk=!w*UK zf}cAvJseKSOmdak(4TbEL&U*_DR87b$nBpcwj6#a!7i@IOcQR7$mSVy{Dva zG*UA1z#xfC+ys;43Z$~HNgXT=F!vvxJa;ch8O#KhB;rEX6nSqJc_)k9D{7ISSgiQR z%N!ODSRhO#F(~r`wahDm!e(v#PYXMpnUMAnS2{C2?Pg#^K#RVqThZeHm~bmTo33f# z&|b73mulB_G*i1DJKp5@d3*4??mSVAOnkJbjwZE`i7l-wyPBY3+0}y@vWbD6hTQ+( zZiu&=XLToROB>XN>)X~~BZAf1#9phqlep>hMC%0Y;#JM<*zV9#i_QAh73#k@K_sr6 zZ#Tg(uN-GYqnlBNd)K3i=W_TCwOSwdLqamW`#Io zRg1jqipe8R<9MoC(CXxQj2)q|{KST+aIaDKR7>^MBeNVR+262tS$7XbS{f%Kv6lAF z+d?G!1)_V1eEYco$S(^cA~e4!ROd%+E;}o8cKV#umgKoOovg*n53cSddQO&=Um#}W zD>tXlN}ZiNhbNfzB&WDJb5{E7)H%s5;8^A52SCcd=H8-cneZbHbu23JGgr#q2x7q{ zwtotr0EE9O;KH}Q$i=-vartG!PdzVl;Tv@1;$ERRf3`$EzF0=C|2OvjM54pjBWh5D zS5JF;%vUkfzPPt%DA?IX*uMIqysEk#mKCTp}a=YsJ?U z-&M@uiz)pp6pM=cD;}sgTXC^sonouvDT)^Hz8@(5Oz|bfHx>V`*bBoI`C&>}aHQgR#X}Y6Djuu2La|eEgW`pXS1aDE z_*KP+6(3jph2krU?yW;hVUr@YF@eaiY6dzQ4f{4UFttjI?=wB=SN5wxW{!P*4 zcndz+mjIM~2|(&p(tTe=>O_*3bF+bH_M&Ib=V72n5BDNz2{U> z59!4R=Y&S)7^18m_mD5=5p{Usj(kqO>%K2kvbc+&XW;llz41Wp8hXgT1F;yH9-{%N6?F3a4ni15lAw;A6Z|y?2gXk>Jj~ z@SGZo3;a0NMdi&IW%@Veah$g0@&xXq^4@?vum+d)dkij7dF^1D4mZl<{N2iX5%)F> zZk_%ZZ{D$uG2-_t+(+fz0eMBZQ68TkR^A)9r@Sisc=f^y(OnqJ>_tER-c_`G5AM;k z-g^ej2YN<+048eC7K>Nn=xh->?RCwde=<>2bARM7n{xvuyuR_IyI^}!72|DGRog_Dr>wv-{ zLZa*dNQ6!~4{1qWM5o}4&;F1Oo$?tJlr4J#62db+cQT5vpn|MA`Nfp{H@d1i`E_u} z+(uWbNLzLCd+GWu{41k6IXg!7M#zUcIUTe0yuVoP9ivYEI|TN4j3U&@Db4Y&XDKWd zBH`VKBtV^_Ai7-pIHRC){Xyns46r49CGfEnuKB!+n3 zq=0$}Q}lSi8`Q}uZG>0H2pYv_v_~5QP$#EPmG=k6vr>GfdZ*B*Nu*8ljw8`5#33H{ z_oq$}V!C$+!>kgb+PjQCEkexn___jhawcb%mthK8Mf4nxFK|#Nr_Wq(E{S#_j`H?n z7ETnl1>WuS=@4SEM~y+Kle2V|czsE939;0BisiOOh-Kc7n4GmjG`p7)Ieh%<$_z}t<|HVJW&cM;>+EW}oipIx9%PHC5V zl?-#X5Zk;TP_)rqy~5i?0b9gpyVr}!Iai3Q`B-$IPR>;C@c1$db#fBdc|$4f0wHed z^%$IP@z#*}k_u{a-{#}t;6R<6%#Q0PDfBX-Qm%h7!)_C`)+`iY>36yK`L55S!JtmQ z4}?ISd^n|CDO3^asg%a{mES_CPMY07bjzg-zKrV$xe#l(#BgO7ufIVp-27m7)*X^JdAUPbvI zqLQ-rm-ipWmxS=7d29Q>pOYSF&o3#5zEpoXs3x6RAc}ayvLU-sJjLHKaTJp z6ydLm^Y3ltKV$euQoiAbx*p^ke%y=vxcY%EDXBq0Rd&)fKe4p=;j33Xh=e*AjdAna zvS7-&Sg>9iGk6$Tm5k`a{F^SJ#|ki5_>5@z2t!2UA+82y*DdWbG)pz6o`ogqSQKFF zuAUI*2-GCNE5@I-`U88C;exkSrqPKtPQ{35fl>J@nl4-0T+NJV=LBk5JuSDYP7btm zOjF?DH#WR1kjsKSnX~tIm^V*=;jKABvE3FY6GxXX(dw! z0GmZA`=C~v+B&+5F>&1s$gWn4o?dA)Dru-eGn9&J>{tmK+!#;T)J#a|mBwN~vOZ9Q zsZ=2{Xt1hi5>z(z9KwXz%ym~Wi^m*It1jCI>9pD_NM6uRV^ctEtahyrdZSdFdVjFWf_Xm1A`J#8(aZ??UTKn}Cq>w-Qau7?8x(;}mRV?x z#Ud3h>T)KU?kayVb{Pl$iJA@O+wuqLHgL}6+liIVsiJhT#GmwxarjrqBmEqg-z3vh z4&Q&Clj&VHFPHE#{Zf_gZtm{M0dBz^=nis+q-bZL^olyAoHyT(`X@27k6y{x*A>p| zFu{*pNz5T5pN-&?lKnN|x3h4L$zaq?i1Vj~A2U|HFqe;9w1XPw&j`Pre}-RLO(5zr z#QDog_^}ujxv0w!y}Iiv#HA(Wt6>=8AGcGA4{ec)c1!uqiKWi=KwX4Am1Z8Pi?FZK zMWHj!q!^9-Xa~R)G*mrc?+7&yNTJu-o`Q#KaBGJxQ<4cJk8P0p0ZbQ>FS5h}u~PL1 z;D}Fm;=aG)L5kIivlWj~T&h^7*rvEv@ifKr6}Kv0uXvy0PZeKOlC?xoZ(JUC)j;#WbNb({_>dyMrO^FZ#g`S|R&>#& z>7Q2|q&P}Z>_Wl6TIu01@=Bw|?MyFcww@q6(9lk0?&Sl@_`HX@jw+lWZ- zb426^T}al6Ip&dXgwoQVz|Zf#Tu0^@%5XE4obkl* znwPJ^5i=-(k9~0s0L30#kBbII7m#Zx{*w<)Q7-fCT?qjFc=4HwD*8yi(cmeKm*cy= z&?M!Wj{i|UE_iUxp~o zcM|TS>owc)e0Uy(hHfh5z#uG-bMdobaO-f#`Yzt+W&QY7(B9K)13D$!xxK94m2im0 zyI!9+j2B%(^2>N{$Iphrt;0j?NAX54>sPuCcpcvixg zumsRn;q$nUrjH4m4mYMRx(@gzXta4YJGrKnf4p_JcJMuq1YwwxwME7YCyCScAqwQ) z=UKebi+SM1xkZ$3Iub_x4|~~LPE%xxt}AUHZC|Qt()c2;kG3zhcrS@9SZCYQ!C}Ei z_`|ZRd#&DHop>gF(57nl=k9@jdeW?;rE1(^#i2Lunv0dTqspIM0oQMGeJxWn|4;9C z+_w+B#=Np|9J-7SrvSa+KONKQkjaNSJ|VyDt0(cY8y z;$OJ#c0K9}>uz6$G_1RQ2N15iaT<`Eh1H7Kx?3xSbX#|OhLKiPE<=LS_u^mXTlg2Q zyUhe;*WK=h*dEs1Rw38Hx*J<_uMTL%T$b+-nlz^=PpN;bRhMlH%<-R)9Jv+Hh`F`;(dZ8-B|*WK=? zXuIyVfCB8g+iX-+uu#Lu2J3EF3b5;L zGnhHM?nV>r!MfX@(9VN(H%{_{b+_Fp+OE6ZLeX~J?I;$AU3a5}l3?8pNekEAo@5H_ zy4#VA)ULaoPr|OdeT(tL*WHFN0=w=;3)JDd+oxE{!MYo*(1+`8<0v**cYA^b9jv?2 ze(XPa-R*QH%&fch=9GY0vCSS<4k0$^nQWbgmESk{k^_O z1B^26zh`HVmDWFwEFOVf-7-wQUi@eV;(sp56>@8tJO$S@z zQGpf4naH-(+lNKfDa7&Kb!0OgY?=2A<1rnq!F!J7wpQ4hyqlSvbwZrreVxR5AzHlS z$##+utzHue7-s@QyO(0|o>K8c5O?|GDEd@kTkraxCv{rIf5Yo!*MAGif_WwuJ!}+> zVKJN`6s!`RK+X+9ZE^ip=5V7>7r6c}nf5b<+Uok8c)~u@dyonHMM#JP`%IMiJYs+& z>@$&i$@Mw4fqf=Y(4d#~U#3`^*$gMm#wFIm9<`3koy@(IKnL;RWJ}l+PUZ>v&_M(- zdhw~jx-;&RKVXrZlbnyV_SpjwyXV2xe7bOV^cjr|ximEwxO9TwJvHJ|z6FHaAugP_ zxI0#$J@p-qT68aelzm5HP)oM7W=hFx?R_ecCehS;|Dt z6DGd*xjXv3z^IBIqvFL`zq_O21@i5crz>hqu8JYJbNAYfZu|y=sisrG4}0$3xsAA= zf!_i6!Qp?Mc_HV}f;D-xcOh8O#$fRw)_?kzTL0-6XO37YLP13>10{@&B9s&>LP|U~ zdzM!jzG1@x4}st6l1^tju$RLsL&3|1T1ORCT}vcm+L_kj48E4Pe8W#W2b1J&|IinA zaxKPxQ@;#uF8kic_Q9(t|3hRm<>edbhUy%=KmJeTa1Tn-IRJV6zr_lVdCU03tN46T z!2(5SgePKmr-E1BI z0N@Q-^)N&K6T4Jb79 z=yzT>KfBt>MJhS6RhD&FK_9T%*Tb4yY-Ly$o*HYh9ac7*>p|q**Y?7N<=CoHx2?Eb zeEjDw-!f@PWoy^EReCtB=s_$WPlGB`rUaHcx*M61ypp6$iRYG|-*A6<41ePRp2h@-g`Ctcd5(BS(37dxOdfX(;KD_1tk zL85CK!`Q<`%+5w^sBSQ;*?Qc(Pjj#XW zY*14=rAJgFsI+UAt6j2=uC>N0Bc9G^FNzytDb0BIHE`SAKAxGCu+nkXgBSzCXXDx~ zvB;tNL9ujdX{|8lur{v1(eJiCWM~Lf99T%v73a7L6U3mncp|f${oCHs5ULQ^_89WO zz(UymBFp3xSUn$pcx}8~gZh^xYy|FhT6kC<>;&M5cY>I>VBI~Ux*`c0ugB@OH{wuN zNqj6^xRM?TsKbu57@m0!L2?9Yv{}-A4c$?+QrOluPMr)*GC(j)+uDv!u+mgZbDIGD{ErHK#_)!MZ`iRec0We?;FYmY;A?rdS?K-&5kHPhmhSQ4fhW z^*~`l!%Gkv&5*`n;$*d;;N#U2$qqY&ERbj(+nYLA1#4PZ7_EUuNqE@2#>E1&qpUpX z7_hyib+z+vs^ezM7(Ln6S34Gl8arA`ZN>xxfLMXivaWB6RtgVj4r?W%Sg5hYMprWi zM}o5f!7h|+?nmbc8lN3CZBjWZ*VlD)H1qUlc`E+{wq7*d#%NTaX$8A)&{%?>sq>Zw zQ|GbvEqx6v!Gi$iM&wb`9B<2Ezn0;}JcWAF+_JiCCP`>$QUQpY)1k-+#8L&1w)GFO zVLuf)vNVT8E@lKm96CGC+)4_|yjY|G!DkJf| z@q=`c`0i=nEBPMDcgHAQ{0N%wrcr+0e-!<%sLRB)!0<}RnwEW!#y8N=3wP9Iiu0$1 zpRfGp!dJG)MO~&ie@6K2d%yWA5eA?xQ=Gr7gdg9TA{TX;;`~|R59FYbYcVWeeuD|Ge_Yp!U&_L(yImN5 zO$)DNY^N^cA0%s~{NTenqHb0dkTlx_b+cwET@*UwG{)#MXS34mAN^22H!96K;hE5O z->IR!U>(@dD4$?}ifMP5F|&u+Z@{kSq?zYa=-T51G436Xfwkr}A?_VMF}r)0jQx>- z^a%xrxxyG1e+r{q_-!tMeVi(L)1@9vV>e(14X26g@Pc=%E2c4-HtIG<>3m23qvcfTD*66g@Pc=%E2c4-F`K zXh6|J13r{AazqaewCJG$MGp;l9EN+QNA%5rT}p3Myhu^>&EU^NUdVrs;`*wTibXKA`xh;!}#xEB;>b zJ;gF~NXpqwak%0*#X}XjxVy^}p)rTlOk_ZKp zDy63o@o=qH`UoNvNtP%r_G=)wl{6k5r>Xk|ikA^Fq~4(Por?Dp@z9fVpAr6X(#ZSI z)&C_TlyYBDlyjiLw@c~2D!P!teECH1mn)+Ai#%joP{uFF-$UsUilY=~C?2jjPmxP; zOqYybz-3CWQj~EF?h+4#^O-|_KC76&A`$tQcu+okma+V%5>c+xi74+mL>derB0QR@ zAVi298J9tbe8}T`hjJwz$mO$=FYZUP44X4N5l=A-qfJ^+d$GS?MiAmft7R)BM0kd#IEdyfFnYprw92KIVI33ZKdP zH1CP2+atdlQ^|wBNB=OYh<>TbO6epZqBqK~y;e)KZu#<##onG*{`1 z0BLJPd!dQSH5C8Jmo#KIKKk+68$UGJkK|+DDvg)@(OxONnGcNeEdV{hG65~$suDi7 z{UUz$vV2?N5S7P1P_#@y%Xbg%qkOl3<~U+6%l9lCqI~y*=D1@o%l94}qI{2l?ul<8 zn4)}7d;lL0AS0i>p2JOl7Q9~8k8?P_9ZgsF`!U`=fkd&a89&pPPA-u*9nZrJV4}RJ-s#p7dDAfdem!BOh2?TViM)p(Z@S9k`+&{w z4wYA>B6i`$^RdY5D7>YtX#U<6+Ha6}W>0JNLh7(8MdC9JkF3)R)i|Z7Ba@WRPW896q#twaWS8811j&jO{tmKhT zZMo*I!*-S@pV}aLzD46U94>=WgM4vSH}Ji^p;P&)ln*WeAKczTrLpet-<^&^_aDUs z;-zR!!wagly-{JwRGJHuiB#Ea%tD~V%ZYvJ22>-Icx5u^W~ng}`;cx)LIx!aD;_ z=^OAbb36W}mNP*kDnCP44#Js7=vskDpvSw0u8-4|<8`V5sYy<&ycqXozs5hduIvQ* zIGLS*G#zrZvNIYt-sjLqq3z3{-m?%0ZC~Cyz2wl=QOJNl0MjaH`!Y_)|13%a+P)+b z{x8w{q3tX2`nRGWq3t^rL9+gv7-FIAOP_N82#hPx_N7myKabMtM8IHw3w@RgF~t8A z!_-TdqW?IUq3z2sBm7BZYZRZ+{uh~o72;Fn-^nUnDLzyES6LBFB5j&~9|jd@`#ypc z9O8eE2|YoG>3$>nEwp{Fn#G{|A(kwDE89lRDT?%9Z>8gak}4t`h{XIi4DG#qUlR#`W2`! zDE884v;P1^cL;H|e>dh;Q0%487Jp9?T|%7azsFed&zc@zc-2=ioGPZ z`m_TJ#a3N@T-caXdJTLmU(&ro@Uh;p!(lLGMxBfn4Gkxh5|9a-Vd&NiOWUM5t=&7Z(VvP~#-J*pt%j8zKp+)miQLC`LD4&ZxiZMZvL|j_aDN!#LZvClD}Q3rEdO8#_$!PmbrPFQ%>I@ z;Tlj!ETubzTH)q5Gu3wqXA@G*26eYkEpGlmmf%-~v)#=f%96iFs17%O8cXS3;p}qr z53>K=Cw}YQd|y)c3w5%aKZEIfK&VsQ{7cNye+qRvQpVW7R`Dy;(FVw5t$bZ%Zb{^y zWD9vvI4?-#Co>P<5bB~t{zUqHQ#iLK@>%BnA)&S<@~^PvJ}jKu6ZyW((YJ)UI+6c7 z^YCrq+>yw?%kq3gsOu8>P3&3U5$dKy{*SD&N2N2|lE~l9RDV~fI}-U9Si0X6>i$Ij z8>GH3;T}rl&!o&BNPLeZ@^7#;lVkiTonAx~C)tCzbEV7@ig?mCApK z%bWmEajv(5js0y?RVpUQ7!yZ)KTET;1N(C-^~qHsFd{CR8zzY!{x%~vtiFA0^+<}YE3{BNQBY`&cJ z@LQqEv-w5L`^!RAX7k6hHeV5HKsNsvOa4_U`N7%z4;b!uLXF7g=do^I6KZre{~}{} zU8srK{1n#8?}eI{%|FMKy&=@htW(BOj!##a4d8@!KKI3uj{$Ma;dx^n`2?`@hKsEu z$6;~A>h?|6k)xS7X3?kU$R|C!k2qp;$K!P5WalmGILFES2KQ+?$Sj5RBkV^y>A%sD zGFbTHxX?-W!@bCuVjVAVGJE4bO^4L6te`(6*Q4}%z3ygklsrn%pND@LJE>WK(Kcfz zHCI4<#!hPbqQPa3m$J|L{n21DW>Vw(+!&HElbXE07L6`bXR6Q7Bas>Nf>7!2i6)n+ zm&V!O#{rs7ra_*d1N?R*DAOoDQ~jw-&I%z8^qbJ!GGT}je;*AiV5^`Y$=tnc8f1^ZhAh zQw3SJx%nTXcVx`u=6N^I&q0~9B-~4G{$%vA%-KR=x019_rr0)UHm`I--JB|0`k+hN-d- z&VD}vtvhm|si5i>T$WmRS&H|lJbV#6O^_9xao$S4 zE^_f=N_n9z%k@F1-Xfj%|46uF5P8z6!4u&BmaRg`6FlxY+>CiplJ5~&zB7$^*`-R5h zWi=}Gzp$4mSs|g^l_k5No{jjeDcNWA>xf@zIPQV6GEF!X5j8o*Mon$!Nv-wN2JXUP zjB+w5Rs4<(`*kH@SBR^q^g^dxxAB-La3$}Xh645Jn8k*4tMEU=N*`Wk(wEV2d_NLC&b+EgHZEE#$DkzSTtM6))iZSZQ-1edh z#zqf%JPv-WT0ddMifCG)!Y(!wk=TFkHZ|l0-J-L-qd_*(HR2TS)(#%?EZalE%|Eh< z1iQTISFE&o>!Fv`uEt@=^=%LWJw?^6pEyO1MW#k}^NA5lui^TZY!t&RrWUgnyD3Vy zU`3d$`A@NQ$*$amBbROWM&HC{v3l*J>?*-tm0&L$U89?Ypec^rhuaagS|hz;vgzFF zQIG6nBM#5JkJO?WZ?L04Hkc@DSTy5nTRKdMn1fY&s#IgV6KN~iWCCH`+lU!{>;S=| zQL(+H@#MyMyX)xeY-VCj?{34sC>CtEgHY2M4j?GW7B={`9>f%st=HIa&g98PHjdblZFHsErc|I5JvIQ=wyz5t zSg;F71656RWEYHvDb12e4M*=-i$yg?Qr)%!ri@#7+9U)e?>|eG_qv4|coc_`eIT%GZvN1P&-p3k9c(5;)R&k55l$dEVl04ms$ZW+&Z98IX)kzxIa`f3TZbF?+9#Sx#Paia8 z4)kkQV^qaH#vbb2^a;D^2k8s9{IE*w(Aj|JZ0vd6Ep@Vs$@Hzs6ES=RyV$$$menmu z`qYZ%hNsNO+gz}rDza@;Lj-9u=c${`WOf5#e4CVpV8w73E%XlM9PH-$X6(G}4AL5I zP>d$Z^oDW4K-g0o5;xf;Ya13MFuE4(aAdcMb)+Cu>-{-EC7w^WUldsZ#EE82E7YwT~Wjq6O4)G~`bA9WL~vWLYq-aH`W z*%wrFw7g71o@h#0C3oBL9W(5J(3(QC**<)dak8zM*RH8k@!Hn5Rko-&^5ZRxPu9qI zWql(xKQZX%?7g-G%&4w8K(X_|D{uIW80nAg_%wBfUA-pFG8;1+Ln)H++ju$RifHtO z#`gG_#-Yqi{2*U8q(fXVyQ*tPahwzn0srnjCf27y4oYV#q$#KYeJwqXV0`t8CX%lg zwawjJ%}3`cs=IMcKBLsRt2k$DqGFMt|<_i$5U<8Ju;W(0M*x6nkJeW*`o$;BO76&p| z`WCC*_d_=52cMBy0VOYQeB#TaRcj)&JOpMtYVjFN>i}>?61>c%ze6 zXkYcvtxQX_>5zw}ri86CY9c70gZ9d%B_a48s#%Y;-wDBxXT*k|WG6T}eukY%gEM*j zVS>QU#C*u7iomXjaf{TiDO`Mk=;Tn}+Sc6JXg@bmfPGf}GtEoLzL%(d2`)Ft$E{u|< zU5PkdCXuWAnLE)MXL&$xB69un?La^SCvqjRbBFB?E5@?mOuG;JD$TY^yAOve zO}>6ulRqv-m&ryShBy9M=d74N@*h6WV}>1cwTO>+U84vYIcQ@UmSci>@JGDD^@@n2 zUB}Urf4Z$i^}vcHA5k2k#sX_0fsIGdlo5n(jUcupISFVW4JBgV(I|DN>H+x=R-`5Y z=>>|PR$Quhg5rsaYZW&up0Bu7@$-r|DpKQ~@_(%O--?x7>W6z#af;$h#f6H;D{`+K z`DwVCc$VU&iq|UMrbwImv!JLB$^^{!EeEjp+ZT;@=f{=rG*}D2`O5$}ZgxRh+AM ztRnTZ>EEfiLGePxs}*ln{Hh|)9A>zu6<<{30p4_%V+epghDFi?6;~^6QrxQeIYl|| z2mJRb{fOd|ioa5PO>viE8pA2$fy$2Ho{FOt4^W(?c(md&#np;5J5D+0C~i}{UXiBE z=}$#G;`bE)OYud;KPdiHF^A!s{QVWh{sQPKr4Lp-Qjw;p$xpl0#1j=yS3F;FyW$rV z?^67x;$wF1n~FbD zEaHn~8`VUnct9Y~iuH;oDxRUpqdv%YjpCOS?^FDa;!}z*DE>k5Z;I4P zq@04{-inhH4^v#ISgW{N@f5{#6|YqMg5uqZ4=esyk(;O(FSkk%-&HJwMjq+i6o)I0 zQ#@30p5kW|n-$k7o~3x1;`NGOQG8I5+k_b3&lO)*d`B^f2O$0XD(GKsoukK$``acx!R`>rTVl01J-Jel>S@AVR46719x`QBRrA!aCGKs?!_fn*~ zCEcqPk5HVaSf|*iNPS(V;|#^K70*+=Oz}#^uPENF_@9d3Q2dVK_Z21m(9%bCBpy*W zMf!@QQO=`?DE}%V>SZdC6J#RNg~zcVf=Is5odiW5!jtur*qJ$w^DxNYPK59`h>$0C zu#ld;I1fU4s)>k1;u(VZkfuk{3wolaXD$)+0!@$1XF)F`4S6l<-%fxn4{Yub<(E zsfsflKVDBvz&jcoI39A0WIkBFFXLy!;MN%gmHB-l4)*rl626&Gyk}bMW%=HLLp0tw z2RqI~aAUl9>QF+-z%-BbHc!UM=29?NL33(hN?PcZd zULtQg3>$Fhp1?>flim`8aiqCg%`17R5Y@!Ew4 z)VDcE>P0{P_?{i*``Xx^ZLIJ;oP74mLNMF3y=*(32c~HHo`~cZkDDNUe4j^OYq#OI zLf&{w0Bu~vNHI8%fUg}6?EgdYW4z_~F;3feaqCP(`@4oWdRcia^C(}{p^ifvj`p&* z{M>@&oO(UVu=r6nRwj%aKYl7Ktb80BE8AKnw!p^95on2S&5|auT>>w+=9$R-lIGBT z$qC{8Gm-lxt0L~fec7nN&;0roXJ@L+>s?;aztF3uu&jNyS92BqXKM;|?X$~juEPIx zO<{Ta>{QKF_@AgL)VI%eYp%k7rZQdQ3>&!Y>SY7#uC5!n{OaWc>#wHIH|f`_=I&ja zi_;jN8#+&z8fCPq3%#Jhk}M~UoSC8t_uYnHV=v+SBC=3=7c z?7>&YNm@j9iOj-1z2|0!Lt>RlxA~u|xvp(V-5@E6sQZJj6pSP}|1z4k0@7A4a(Ozuc-FwLGEDA&0l!p8v?}M)x*H7kh9G)#^{8xKP zXMoyHvil(qYqM`7Ij3ZQgXhwz**@SoJ$o0DaYpXPxOZ}oVjkq?eu-ETITw%l zWNr^Uby7LL%BOROLqaCE7`|n>2`H9qZV@Esa(_cmFUQYVy>fqo96vV)VSDF}LoE5+ z6L9a7`!(V%&#grc`{o`j!$;Cw3Y-{q1?mGP6H}_k(?3YU-wWD)?K|$`HTMEuGxmNri zo4W*(t8%wO&bZttDCN~=rK9&0;!hSlp1F2n-yAl$P%{_+FI4<`t z_&<~T3?wYg@zd&ObFYBs_}patugzTy3CnUkqOvacBk(NGak->EHwwNDxmS^f#@tqv z#){lYa9NovgG*EHONg;KM=J>@Ssau6W>_vA}RmzT;X zX1KYlP|&?jg|tMqTk$0jPOrs?IdPbqza3PuS2apAG1K^M=!K*?iNlTGb^iB|_QWg= z=lVlYkcrtE(DgSUEr~fA()C*?_6QB?`uCDNQo|#7+!scP8VhH|KGA3s? z8g?slIpAdmWa{9ayBW3M_^+y*f(bmdVh)-4FWfWSOnqe!RTz&9D`? z2vVkI*b0rP8PIoh8Jjg)g%f&K6=@VSlFjoQelg zd{-3CXXdtu&-TJn7Rb3mTwQpE1+Qk<3NKTDnqe!vz!az%wt;Nxw-iP)ihE8nSP)jxfWv4fkm}NdKlFVTT#E+i{=V!Gv#5vXkZ6b$%UTplON$ue;gf za+6Uhh5OK=vuehquqTq4H61Kfs7Ju;XQhxbg)$7ySv6x);AzU)TJiA0pZrJS{t`W=skjm{2uiQh0~S>5wo>3$sad3UPela)wbeCWS9hw3;y~ z)G^g-g{`Tuk;S`Ch!YBf(D1YCg=i@}PH86z(OQ_uFeg{cLaN#e&yekuie(_~8gw}G zbE>edcL()l;!dkL8D1y5gYKtrYsO^Ix0ncP#$=GkYO!Wa2K|jyVa=EfqNSFsHDfZU zl~OiU@Y%f09VFwaHDfa9E!MO(V>0M`ben8o#zfj7Q!MQec6r#i^6YwCD-%bUF{#0Q znhxT##`?gF39BGY2NA^RB@E1%oPqmfHKRT!`4TF3@V+c7ci$}MQG3)ccijCdTr_m2 zz*QV~v^)`0&S2V#o9>Ry9*oi~RMV@f|8)rB6k0I2y5oe%7IsHacf1hgg^gsJAjJRa z?pxsVsLJ$bzVDkf{hD4AdV$h@Nz*p1ZEj7|w6vvdlD2_f(j>hgmo!a6TS?Q9v{1Ba zxeBO=E+8yjxhpCwh&SB7t6lEwBDxFWttx+4c6HYkR&)VH-RF7FduGl|ztG~(-~QY^ z?U!fX%X!ab&N*}DoSAnfPg#b__UnYmP5Ck7EEJ+*3Vkj4^+Hsiil^f|e~}Ok-ZZ+N z^Ouw}Zvh$w=9zC`#PCz8qUqdx_kZUXO+ST(U-OG{Z=kaMSA0all@>q$a4BoZ|2M;$ zC#)|)T*d{lX55&30>liz)vxx-b6{-(%aC5_3g+;riMdo_E<+8>{05$#nM{&@kQLAW zi68tI%*>)6Q^YZ0_P>KF!*Qw_fBYBy;AF&}^*XrNhw`}C<(1I{b1@$x%?0!50GhM0{^6Ez%o5#?v-r0 zBYf$&wP07`H**B?zl72F2c|s#6hHV3EX+Cyk~T0}@$<^2;t$Kp>62#9o`vT^RymDm zGfiEL&c8280?zeM!txWz~A~W+}^Pc=KO}8UIuqV`x&gyBdM{S0{b;b+uxI7so2 zs68I=K3>!w1Md<1j9LW_Qv4%oPXwIuh}u!`zK5Sz!;)6xKuYRA8NA!7yaMKbhAJGr zBwzkh0dM5R3ccWR+ruQbf-3wYiT!=>gjFkr%JfieEi_X6BWnK;{KBd=K&3uZYo!|h zV2JSir-PGlS|rhpP~jecNt8V}#Xn;0>%mg1c0N>kLbY?K#y_I=OweuB-VGIgS;<)I zp&I{)+Bbr0t=bJx;RAqPE$gd~YWyQ=-wY&QpN9C8RPpA|2Ke-%ZFX$@!)$Za>^&u5 zaYaUU75&c#|IP&1c^*cTBaAI-C*wfA8A2QW7Xms_6t(X{<=dfJj%xfPYF`W%TeX*= z!hLP8mWj@y8vlsemjbcG#}ETK>GP+s3-IwTT*&eB507J;;2#Fjk(jr_dnl~Y@!K?T zr{Xv3REIEesG8;t>pN$nkFv8f_eYfQl||C2x1);C5z-cy`M5%)W&9=hE_NoHfJn~O8X`x6RQO#bL9 zNJ=Yx_0T7(p@gL^yXG<<9tUfRNzAzRG9MSP53jTI4AX;kD(`KDD;&vUdyaw2%uoEu{pvu_IxpeANdF`6G9{}C`BEC?)`r|j8^cUI;ha=Wo$I*} z>*e9Okz%wIn}W#MsjtMj$C;ILV`Ag$b(Y1Z*iebAhcQ?nJYJ2ON1ZL9;iXgh$JoZf zel536WjMlHD3!MXC8XposRG9_Hf5YjRpaM-Tj~G@%pv|t@MSu?3dgaC7$XqmqU06M zc9J1W#&&dVhfNj}f|0ono2;B+zs+HjrFos>u*qUhVPu}eCX16Vu&W(5St|^CzQZPK ztzo;>LsqL{S2@~bbr`m5n=H8H{#Yiy3{Md zFK##DE(&#@6D|Caxi`_2^p8PajTxpI2%lg&s5HyPP;EduC=b~N8Q5|eEWOl_(j|Ck ziS=F(3Z{JWAoIRR@ zn(E30Rb7L7=J)UI@15VO5>D%pL8IlEP>b+=pcW;&C zwQBv!Z3}Aa7cLBoWuoD+t*U{+z5A+m^z~K^boJNnTxfG_U!JGqAq268ckS=P`+JuR^bUcCnJ>I<^x%0g<53lE$s}=5m_vo8cHuha_=4%( z$+#HcsDKxF)kP~9ee}$UY(R`DycbmJyv=~u(l&?Z~o~3Xug=63iTrV7g_T&+T^qM59#a5{yJD$FI)gmOW8l?rDjgp(*-sY2w=6q{!K zbg`fCeS4oNc@?CkXP`JW;zl3jD3ruBvA`3SR89GNc(<`np6m~^cbG4Bd)bIrSg+g0#Grt1psP{9w9 zf;&}kG%2`C1>X+^=bK#Jt%C1`f=VMm;iMej4Fy_`kE`H2Nx>&n@a<5brtVe2^PxaZ zeNqMAN(w%ug6EQgPpjbBn7~iphf|T^KoFjaXHBc13um}YuHjG-1oKm=n9@->UyzLt z&}f#O9!MjicjlVlRJ5nUTrd)jnu8fOdSNX36)B$X;*%g99h9CMOr9N-rZ34M`tpL3 zpkx{j%4&kiFf^hPhN^=S9E!m-TDV`Zj47q}R4$jA{_RLula{L0bHzn|a0(2K6GJ$J zyx>gf3{wi0Q+m!@OoE?5^#k!s^`GCvngXZ6pJI&e?)GAx6;E$Nn+ zl_{_i6rUce`h3+C_Xz$#9vf(G?)gg?$yZ5FC9L3FA}4GYb8^8crcNd~HO*$5EX`5J z#=5|t7L=C3-8ibH*tEibEtERLxV6m;1UFx727<4OAmbOL9~RD>^j8aW+QY#?QdNnH z`!^=Vi}d)Q^ej~M+m}mzFIZssF=t`okgmJ$0{D)>JY~RjM+Cn#`v&*+ z(PV9{iHeEK0=V1}-!NTWJ>II0b&1 z-ze4}B;*ZRoR0Nv3&Rvbmr0Sw@s73)YmD5^qpa(vmfChB_&@4<9F>HZ222q-BZRBG z0XWI-8XD?_mmx@T&ZN=E>1uCT)7jMALC#wEo9Z(z+@q>j_p{=Lr>o}@#&6J5)Y916 z=5_BM9EAVR&VAyyF7I8y*1dxl48grvZ`Gcmo(rm?`FGpu`K@cun%~{Gcc`}~ntJcp zzq_xeYG-%1XMKDo-Geu+U#YD(Jh>+Q&OZ9e9vXnFt3hPe_}`=>Xwx*ebvC0_B#J9e zolWkogEhw&IA7L)v!DL`aC@(wcJrsHe$lj>#oK$*TjjB?!cnb@qn00Y;^w#!q`O=3 z`Ypw2T)okpNI9F#l{sz3L6Gr0j#F@UXdMYn#nmk8g1f7lMdybZto1ez!R_j5x%rgFqMC3D zj&W4;YtNi^Wz&_y9vDiy_U*$hdS|zIV2m|XcpG%ao1Wfi#95@ZgU%s-tKbn$T+|Ky zagM~pyucaGe&fF@;hN5NcdbfWvzu48b!b+)ySv1Xq4d|c=2<*U-W_wSJ$7Vma#~vS z4vb0gD>(qylA(8T=+!ishSJiGadh}|4X=2;yD#eP@tU@1yJ&4}S#6?9Io&>#@chgU z%^|zK-sq!mNFQerPSmluq|vdhvuWc783$}-ws*9&(e}dVIxG%3CC#w$qq{}jY~xm) z6|nT$?6x*_=)lLbqs(EePW*@GlbZLFPsCL?(q5$1VV%3dpt^QrU1@nX?CoFQHFSYY zrEr0heq-BJTjQ1{a%^3^iKA{k`FAH(S|1n;>P)6= zfg*3-TQ}R2vwoWlmYvPpIyxISZr;$r94@kBQ2rEZY#rn;t&}s&TwWjEtM(5$1DKS% zWm9L<%8r$tTUM@XiJcBfBy`ekPg*#xhKZrgK}zbLp^wzg=yfr0wP=Df6TY3#xvD-B0IZbMpAt6d1k3$>|) zqtx!f3*j|PzP0fdJ#U+`i_cE$7P9lWj^z>;)@lBll1N%CA;BvNeNII96PENJV9wIO^rK8ZAc00XV2`Z&|O?Mr6cZjkUbdT+KGlSa*%4AZ!^}y65acvmR4K-KxI` zXBZns!wzwaw0feMa2b#hp>J5om$J(FP~0t?4Z1a)|h$ z7fzZnc`*)||!3ziC}4emDXnO*TE(owLaX-8aJ^ z+#Smh*ThS~`n~Ywx_8iUG`HQmsJ1}UZEI<7++yT!?n)W$Ra*ouXIet$B{6*rJsTs9 zMVb|;osduC)$1D7Fgv!LZJN_zYW)~@$zhXs$0wwxZBwtPGNhSF+k#|`+U}ayjWLJM z)h+gB5k*=Y&Dg@(fX)U{L7HW>E-goEhpF1ovGKar#`Ue?>EMZs&2j0pm@PAqGSa9nlP&jXmi(7*{E+EK1Q*nJC^*08xr(E(0roD20pp4a!ldn@KfCM%p+rBGConDvW=9@ zvyp%YD8u`}O=Bj1u;7Z|%FI>i_rXSc_L(Ohf9%mCW4u+Ph{c#`6T#>#K zy5~M4iss1#tH&oHLcPn=^q;)#nMWUi!MI+`p3yrupB|r(NZ4yXLA|zodMBE{H%pi2 z$Ofy|Jf`r2C~Mm@D5)!FotylNe0@^RCqo?hs{aZ3${Hlv#itxRe>M(-Ma}cqdj+FM ztRI=m7EH*L_$T?3(v$ru{>gZ?Vp^t5o@s)j6I@ot`_Df(B0NUmO8In$Y@>%NX+CJ+ zgfyP;ar*$D_`&11^1PH$%Q)J!SCG&zNa*uvt0>?puY`VKLccIl#u0r#$Mcg-==1ri zD5Rks*Dp%w$E9gJZx!c^N$A_>kxUwCJc$+8AD7S{7i9)VX*_Qf*PoEkH}WW!k*^4? zxX&xmUP;1UiP($Ap^`8r57OSmg#JX)=XhiS9*cHD8ZVK>^E*lOIYyZvFPT{a_9rLw zqnuDF4KGn~dnb#%=;pPX`;`u#RR^G7KOBzOX%lB ze?_R03y*k^#`9kB{FEi^^Lel+q%l&*^~*({PneldZVv?0c$zV;KP#a>E1_SJ(6313 zKdMX-HwCiEA2r)p%5gg)eMNPG1ziTpGq z=*0<|u1%tl7VqdTeR@RTDDACG(2WUtRf28~ebckv=&PQ6gI5JZ7kKB#=tA%E7@hTQ zkI_ZmS7Y=T?`Vu3=lxpgCg248vwrZ{b0=W@nu^4kK5J$I#;18o9~63$w@hh{yc00K ztW%mTWdg>NZbsI?adUryzDD&qW=+6&a);8K=S;wOLI3QG!g`qC<-C84$;-T-D!o+X zOzInYmb~Uf+QhH$>SOY`9^Yh&^yi76cGB!Q6Y$<7{j`(j$UXtjn*K$MuJJw< zqiek*bz4Hja4B)J*MLU+2)uCc++a|nuv}R&b+*g=e%e+#%d6rk$t=lGfg?8~e zf1ZwAo^o$@c~cb{jrN#Ama~)<@^sBVq}35=WXJ3eh4T0|uCrIwW%kA$PPluOTxPR( zhROA&7@zlCiCyNzGEPh#cWHU{r6q=4q2_&FJWjsbRf&>sc{$H6zv$*&@)k+7S`$w; zT*Qg7hug{&Q^PLPqi+=Amui3OxI*J`Cc^mWK3?_$^Bn)QKJyHFcEHft3r)YIUK#YJ zfo43)D~O;uq7!!kQ(MeS4AkdLi+Y^FP|opz*h;;m9D3~kl=F&3R)tjp6a7LecySaX(I`NhnX&_#z6QnDG)VZElN<7ch zBjxi|&MO}2Rf=mAH!H%l$fdraw@2xBDPE>{jUwNdroF?8f35h4;x`muQG8wT4~lrw zQR0tM9Ir?}sNPkH2M#WnddA+0j6N-PW_&G&h|0w^O;$w>cpvdbX<$SG}_yfg%R{WXb zONzf%{H>yo4##-%T@&DFrHd7(C{9Dhq!eZS&|6+f!@SBiHjep2y%#V;uSKgGXO#CO^4%8LYgYP9#Z8J^70*@d zR@|+)S8>1MyA&@~e4nCx?*-}nh0?bu-llku;-?iqtN10wzg2ux@%xHDQ+!o1z=WLj zQ><8~SfjW?k&eTtcb?+A6t7kMwIY4OQ%}D40<2LQZ!8LbnPQ`2i{eJb&5CC$UZ8lf z;&qC*D&DL31;vLIzoB?k@n?$vrO0>dna^>Grz*}>T%_2fxJmIm#S0VA!&Kd|B~vMLN|W{{_YWQ2dSJ2)uAYd5L1FVx{6~ifa`&EACL-t9VfH8pWFw`vi2oj?=^TyrZdSZU@j=C}DL$?EUB!PKtySr>6n7|Ipg2T46X!+g ztB7lnKgD|$A5!@dVzcKxtN0zo{~(@?@m}$_%BK@~&Y#8;AwNkGZ_r~QTP<&GHJ4D!ffr!cMON#tv1?dSy$WJC>8Doy(QpI&D z?;v8*+^s0zjRAd)(zmGI9mECbw~E*n5tqMmM(+@;7#yQ0qii;H25~0^h zoR9bCl-@(!0_V9(zlVr=y-bll(x`vE;yud$q~iU`e^~KbigYZ?^!|f5*Yn;`96Qd? zWs0>#=q)BzVBJ7*lj7Mb-$9&-^$f*#DqcrKe(9={cv$&&D1JftUsilX`A;eyRsIW# z|EBzx6w{c%)9whx@kHcfqT*cTS1L9rpU!cqw@LY%6+4yRLqt2?r~Ctom#O@HD*veR zZ&kcU<)2dgs`4LJd|LVcsQ9Atf2R0~@?TRd!a@tnH%{?nBJw?5ae?v|Dbi;t<*OCn zu6(-wr5!r_rF@U#rOLlj@k7eLLGfY~(5$%C4B~xXd_mtu@ia#bIoqth$S^2+K z99eASqZKC+VP~phwesr}mn*+fv0eFF70)9gKfT21*pF0vx8jG1$j^<6A5*+j@jfEr zeOB=?^oK|+AwqwO;(X=TC@xW4u1F`<)L*aI zrTkvSe#Jq>gGA_Gs(7RFZ&AEc@#BgQ5TXAC#ix}2b;aiuzo+;UBJ_Wz_`33cr&xd+ zXDP4Zcw#5k9TZm*vF)->>8(V>-J$dzBHH=^r7tI9%)CzNTZp&@-mUcgM9fkCM(M|h z0luH2^bZw(uJ{|pLM#L@UlSE8h*)G;t@Ig+ZHikIar+|IEldXmWqqI-_ti?*5;6YP zD=t%9so18tMR7Ng{ZH|b;uVUr9sv2RN`FT2LB+=upHe)k_=4gqimxitsTtE7qgbjq zQ;}}UC|{~be`KWPejiB3W2E1qDEITAFIAeZ#3+~VPXXySjP(7A4-?V9<$Iz)y8I$7 z_vJwP_9Fc&MY-<=Jt}4Rbj`)~SEfj}TcjHlxn50rgW`6@9z}ZDqWqnTbf-o7dc`{x zKdwmES(JZ8k>0aN|C6G8XB6~Lm8PdG%H?~bK)S>tU7|>@SfuAF(ghaj6^itNMS6>( zw6n8dhvzRa>v?SNInw9{xCBf8s3xM{$hsH$(+bk)XKRUQ*R4d@-9{|)yzNAsmt8~{ z86e`ie}IVgdx!|5R}&YYeu!w)Hxn^mx}Au5)V;*hG4CO+^1O$L&7OCJxEA02Bw~Ka z!1QoCDp;t9X`;}R6{jlZ6w4Kn6|q~V*r13k2p>sF{j5`LB_fdy#cf2?*Ex#Yi5ORU z6n7C(e|?GrMAYLx#REjt=Rw6oMAYjQidPd+zaLP%o``zBLGflH%70k#c47s_F~xg{ zsQ>#EA0Xm9d|vS(Vl~>K;t?Xw%cF`<5^;W>R{SOr=jl1c?+}-IvcE-qfi%wBPZWPj z#QFQV;>$#w$6qPFMqG<|p&~bZcwYIvC!(yM1z6usfiA>)DG~L(got`>C$fHtCHU?z z5%u{oBI?oC_RfzQu->l908wA`ILvygC!&7#6Hzax@_rZfK_70cha*Ik|0JZ%a-U5^ zId3DPobsL0Rs4_wXp~Dne6bey|D=(BWXVfy*Zzfalq+39gpE3-8;B@ZlhQCD6l>Y{$ZziH0-L3S!MAXOUm41kbdU;goCy5n$KDX=n z4PCNl zU)K)czCnY#?9sm71N*#6K2`2j?ihk!6n?Ca%*t?w%-xX-_YjYx7w#q=N6+pn9!JgY zFdj!O+-p3JUbyRc96jzo=23}uBJ&8HJ;_8p>ds_>YxgJfm@+$+c?9u2%Sgd)(k0)@ zN@zGw#M=$Kghrmd$~+qJ*NYMg`S&jqO8Is&6DqM+$A`&oVs|rPAncJ=S<)y{6>9LwpW$0fCh(ZZ|j-n)k{sJVvDAMC=rXq7A5)>ooa4DQ~se;>@A zXgCFm7!vU$p$T=07BGBCD8*mu;c_P-sYe;ZZ2SuGJDwhf^kdR30?&qw9?S#clIN{Z z`ngtPe>G_8@W=Fc9dpaE0(3rm9pJn6jym>O2iD#p9J}_`fzD^|Ao#AmpE&lIFKh1; z346?MK6`g1?ET!amv!ttld#t_jJ>~4*!z`ZkLla|{a3=?z%cfHnXvbUV-M4&(B3pu zo?Cycr+no-8A@*bWpJ%zz482xbL??n*R^*wWKH`j2&mY3h7bnQJ2 z*;E?PVD0hy#BTmd9D60uwe}7q?EMt725U_9NM4uF%YkOy*kIHBWJ2#SXx6U{wqM=@ zzMH?P$RF#C^*0$mn?K&i;(yrB?*mZ{+6J5MR}=Q;!CnqZw1;V5Xpj5R_#fIk3gQ50 z8?3z_f$!#T9qd&=iS}6EHh%#M z&Pdq1!O34v^$LO9_jdF5GU$ByYfjkvij%)G$KE><_L?wYE`{6%Ti){%_Kw0H&nxS% z96wv$4<+m!8pa;?+1>j4m1A#~WADL)y|2JtzWV!2!d?*;jO_U(+WbAAu$O@#UwOGs z;pVRn_H21^n-JRjRl?qiVeIidx%SqlI?=znO2`@u$g&q?? zN_ZlVo|RF-9{)hoHLbuZ$>#q;>SB(?G_Ke%Ou>Sab0n1^-224~w z1)dF7#`|x3OxbG~1kTT+$LAE>bPw@AgwRc{b=Y5BUHCR~z^jv#I zy=Lu*_D;i(^}_l+HDRxQ2HKxB0=Ye$lCbw2?7aXX?Qu=k+N(;~TV0O5c4kC_wfDA! zz0dE&ngeub54XRez0=g5y%vl^BR-E8HVw4L-|B>3|Em1ojc!*x8~-8bg^dh{5KG{5 zAa4Eb+l4hbEpMahvHrG052tRx#KL+V?#*j00kq{MrX2pyp~n-j2GETk(`CPBny?p! zpX1)0&j8tA?TrV+)hmAoGGQ|hnbqSRI^Ny2pN&55ccT~8FRaZ;*q(iF^Saf(Z!OVg zMQE4#xo-;pdf|7YPr((q@JzofQ+n5HSLg0}?OOakfZs>(yJ6g2uU!YcejL7hjPK&6 z&phU{*f8&t0#u;(e`-+>GiadG-~w>H4U_g#MhR{C+sQqlKa z!AhlqPAH_`Pp$C#uJWKyCb$ji>6<9oIHiw}8L} z`b@B$z?yqI6V@lJiD6-^onF& zwwBpBUnJGpsWh-tBn{cWrDT^_TbeygVz&^>vwWT?^9~_aWPiZCT_D7&>|sj!glNik zlGr1}>g;0XpkGX{%@)zxUXiTJUPsA*5F4_6%)y1C)|%z`o*5LPBYTL}hJ@Ibtst>a zh;y?4&U)J~#P%%r8Zs9N(UawbIdicPyRu(ooC8AiW%Y-YLYsY!z$g zT|yklo<+$)Ar5Bweb3Chg*cSOl*Y@vM{<2d_7$AuFqmO&dXdW#7DC880RV>Zpi) z|Cx`7-1Cd7Y4k6I!WX2t+mpGW_z9>K`bBJ*nHxn`0op(O zr}`F2{9_)4?ngOrMT&pSBkM}}K@NPCB>puL^QjILb+rBX$Qb+ak+JblM8rPjFiyYq zAkp<>8sp=iiwN~u9U6GTe6N+jX+g$&#c#b$Wg)Q6e2>pIhDw``QTlVTREM0R*&;Ak zCh(jy*x64Kjnv%U98d2zXvlcI5Pwh5nfsr+mv+o^hIOi1#i%=|xaSx3WYW2#?}9gRF=w}C;(oItS1Q&K1*;UB81NT!Ny4$1@w8b}4_BM! zP#kOgAN8;r^JHWC?hAWHoo{D30>I;#q95a(-Abki#jiiR|iUSthXs!M0$F$Zf1z|Q|weO+(#bk z>dvGQdWsSUps{lWgY2ugki8gY6&h40mYv&VKk`k=$sv?(?FP5@we*9=hr| zhAUkZ{*uMf3%uU$+aEcFikv=6yOc9v&#hBu=>GXU_8eP7bR<1&gNvWTsKLtF>>b>B ziMZ#KWMvRXH;Scz2B>FUJcz|)NjKK^6orf^+V)V58EkQ zM(9e%_LW$7Q-zDWF6iytKOjRY8#%r6q_N&CX zXSad%un1vqbn_dlCOL0(mT8<;YGhYklZeHV&i$uzH6(jK!}%KG#H+~8u7I3)9gqHV z^xcBVx)U<8UsE1(qKPJ1X)o~N`hn;|BVEaYH&`EzK7toRCgprR9y)h(+HjZlEs|uEAjjE&B=d zoiJT#YED4?am|u)Ll<}}Vl>L9ogeek@_k-;^7?Yj(BLw7ZFgx5t+LmZ!eTnxCZCC7 z{)k)@Aac1b1)`KV(d3(aJkBI?t_zc1rMO0Mv*J05U5dP^rT#^VTn-@pe#Pq*?@;`b z;`53>R(xHt0F}k~#fmw_`HD*v<=t86$un2LF6H+tzDx0HMR^AndUq-<&(4DWiqcOh zKCdY6vO@l{(!W#8;!c72o1|E-SfjXH@l3^SioJ@1itkmFXJujU7NzAGSu zBMScal>S#m?lCbx@~j__pNb`YiXvB5NH0`erMOY?97TC&6M7dZeU0KxigznMsCY#2 z8O5WDRTx5;9@p%NtB6<@+NAV3M0B(5ioMF`x;6Rx6yK@*ONkg%u2=e2mEWd#xAN~- z`g4k3R{jwphK+A1{XLa)&xz@A1(o^yh0?!Nd`iHIbx9J`Vdk2 z5wK3_2E`3TlmlByf@dk7t2m^1vEq9aFH_{I5X*5`@h-(rC~}2}^1oAjQt@d;j=X$^ zl4JLqJ@X84R9=)@%8NfTo&Y62%E9rB<(W)Gd8aDMyY7f5{SNw{Wxs*m_lVGwc!(tN zpjXa#AS#H^mwE%;KpOFyRKAvo_;2YM#qjw=&Q$a%xg<~S47})JJ5`k%r(?MoV*i&v zOob}MHl@ML6x012 zel`vcy?0@n!Tw}}mE8}9Ywt=kbgG29gu;-pPD|;9+*WSypw*oxc z<9KQ9eFw)j4i3HV!`|;5hCO@^GS^-;4CTP1J)3t;pC4@R&c@gaPt=jD#^Xj{zJ?Sc=S_ z$o}vE^f>?EoQ-{!=^`tVrtOm;z3pg!8+o9?=ACuq>RpeFO|e4A>|x}($ZQeU)Gw}G zRNJtiZcz@NS*xp^zxDNXxmU#Mn;2UT`zWlwbHNAr;75 zO{o!^5FwQb`0iG^md6{XbWkBPf|~=_^Tl7l2sUor^9^>Bl^MayQ95A6>XNlME|39k z#u%RHKq|gq4y68!$q{G7XCd?}!~~Ayy6PVuAw%-)1hljxEK`$t9KMa5R z6izHg#J7)PUmGucldY(cv8^Z=!j-^&SG>i3=zUb|tLsJ17vo3AlXZ5j#^m`*IVwd1 zD+ya!1fB`AmBk}DZLwhpOokJUu@1VdeHyjF(8f459o!Rs?AQ6i(Ftxt4dBCJeZ4()11kKI zU)GtzDs$m!c4ngRPG0}@f}H6SX`Ns4}69q zd^2`9(JT>FB345(7NX$4BZ}6WWtq8O7o|x=m!M8;5e**T`XLsW@y$6`0$2W?yORB< zT_ZnsDc4PV2u{+6TQS$&54P8;C=Sl?9()5R@iDM)bzPE6lwExZVjb2L-q{X|?4o*9 zoX7S3|IuBu)~>#Fy*(TIJ#3up@6{ayR-Ov*c_OERLI;cvFRar)-GVVk$KlqCIkMW( zlcOa^#y6uWbLA&OudG3&KQrIp_6mTUAw*XiQe01t%blAmk(>2j>Y9KX11F?0^Nq(J zDfa=KW1GO)coeuE9M>O}(C1xK6u4d-*B_nG=Uq`0xSkx>ADhtUT~8Fa-po096yg+p zfyX&!@@(~wzdnrxT_@1@wj1bc+YR)k?FRbFc0=0Bxg^dXSGS`;-`Bj~#wA>47F_=> zSDN+0_3wJ14ZL?b9Y5+D`3SGw3W1b!J&ba;{|PwX7slvO-jy+Ww0BdC9vi-=!j?B4 z7Ipy{42{~2hJ1T*IJ-l^eK3*WAk-Vhz z?-hBw#dX0FBJ^e`&LyJzFIKvVc&g{ERTLkaknd3WZX$*kKH^C`mlL7?KE)3ZA-{uI ziU%Eu7_P)eCTKqIOTPHX1U{m)oCl=Cohjyr{h27|0mvRidWK>H5$P;dY*bvMxJhxd zqS(jXBKu0Xj*Iv?(y&`WMEz6~QGa3|nOH%Zot21kus;x`9U;E78=%;Q9jemaWFqWw zq#)*quv@Mu>B0Uy(m+WUk?TkU7qMQDP74wC#m5QkzMnMgeVhn;e@8@ozN5u>_%HA1 zOZtc}>6K~uU`OnOmh!=#v{%q;84q?lH2yXs?Dr_Wi->ggDSd#*#NNug@3MyM_F0Y^ z(YwNqM8}W3vTy*&D-8#bywY$e$tyL3%5WkKFY=0TlmcHMj$8cS`?4@jr7WfZ*;g3Y zR@{(Mq7;bchU=OMNj=IKX5+_xay&iu0mgCDwP}H^ci-my7FUmBFPdl=Y@Ai#plN$6 zRI&}z59Who2fBpxVbVMBbM3J&@I+qJjdv4<`d+B<|}*Iox`jt@3u^xz=SwMV~# zHh<((kMzgzbM0*hozLE1g74ZJaO|N=hxWdLW7l5aF!mlw*rUHgn?D?e_P(94$1x#a z{+>I^jIaJm2nNnO_%-`w?oc!C*sHQvYe+S z?D1W>R`6}G_IS;3?G3=*3MkRuWc;kX4GDXENq~AbSbJwA>^%T`15lzp_kH2*342SB z&@ZhK=-R_`683VqXf~)lUMFq-`qUn;i45~FFkFSYwt@EeyEviuASx^0zQh%(XXDe4 z>>*14nJ&X2=(+W`4f(U>%|UMS_hIOv$|#a>5RtfuYXig*h)%Y>2WT7-%K=hz2!a~L>hJS;*WTxx1bXj%zTfX3zvsF4Jgl?! zJFIuT>s{}9*Spu=IiydkZm(@P!^{u${fwP7b=Gj{KBLD|5hCH9#;SDvhpqE=wBXPsvIwr{f{Wlk7p~pxXv7> zPFlLxDp&vV$#u&0-ze_cAFKaCrJ}m2sHU`~x~8dK$@Q!b4b^F|q_HE4*3#Ii(Q{j? z>x!2y)4+`S&f=Br?e#643mcm)F~AY%=&WvT(_9PcJ1g2-J7?9YPN3(OmT2_!rS;@p zQ_;G*zI}Sk&tRswFP`#?YxVlNTQFpY5p3$uZ~pq@Kg7=woW8dX$B`=J(8QQgM@HF80HQ+;h`QENwJ z&LOR=v8k!JVP17)>_DD?h;|f9_mbK^a{7T~%@}Y=eN$(3p8>JM<{8zEEyaC?q;b)M zEU#JpuLNjP*~+G-lge+bX|L{#OjX}`?Psd~R+aB1CxqWES zEy9YP6gj=NvvF0#h>#NIKe2+0K!=NI>DQ_)`2F?M1Y zIk&Dg%EQpwj+1i94#KPp*DP#Y+R+DPM_Mq?U(=6r0&{V7OKp7<(P5DqB@K%f&MmE6 zxTvzE{H)T-S@X}HS>00CRNt-yKYvl>{Ni&3DE=2JVaU@<7n~p*8l4P1>#TDt zr&knJPA@5$e?psCXIGX?UpT$;-05>?^|6&~aG0aHt*d3frTvTBFKO#+onCM4`+ZPR z{;JvFBBd?0Y*A5Ny8=5|>&g~cqhWGM{mIDltLqwDW%12lT2bBEP~56F48e27oPY%L zf|YGi8=tVwhcllqrJ5FI+|+pVYuTxmyVV{K1G1YaEOz6HsLGKxHb)_!eeg*dH;Y ztse(QH@&uYdR<+6xDkxd9|f-B_S!yuiK%9_ENzW$w{T4#jGjM+)_yw#bk($eI|T5Q zyVTlm!lKcCSi(tY^RX*5*SD^;oEuV3*!ROdMpA(=$_gu7P_~_|_9vlOW747KBu%U! z6ivaz+S!C2;0d=ZKo@tmH!bLFwNgkR`dGV9QWaL5`)F8Ytr$_otu396Eh}4BMu^sU z`ZSOkv<%nhhDp1ckmuLe)+33jJ2_ov^nGaJrI@Z6ZA3?$3aEu^w2CBzwFZ9v$?&q! z8Obhb!u?*Doi~5zHJlP?dq(g3z|3FSQe1203;@|hM@QpXE1R+StbDtqW*LP<+gK3A z)oqYvU8t4NIQGdNPCmfF{pi&1mW_|wsTsVYFlepfXOm$`zq*+RBT~;V>9T{ zSh=%!LX;E_)Fd(tF4>6toVihj%!sxmJxom*xYhO$3~%2p9bspR28aZivcTa8pB zlz+BwU$DU#AFTS}>+gRk@98SKr75$=aNbf!c>f_^A?gF_0Gk+dlGn7&(ATE4i+R*I zO}8YsU9^;9k>cC0`4jd9=Bmt0=_M2W=__y+Z*O?n`0lmsO&L9gW4rWf%VE9$P=eL~ z{U>F*W;?rX&)m>f-t)uwr#~_>+h!bcKBpXWk{f)Fg8Klp!^brzVV|okxgnXjA3{|| zC}BVGq@L#noq%!~ui-oPd_Z^>*5~7JxtUWqUEZKmDW~B%>;V6D;B<^mE(5F6@VyL_ z)8XC<$VKZorlwSp;_%L78<+bgw)s6N=cYb!Y7D zxOVt{3$kmwP+Y#(2;3!r$F~G@S9dH0`IM^=TDf*OUj*dc=sw@y1tDS>_XR3f&J#R9DHrBgt=bh^&JtgT(SJA~4uOe(SkyfL}BFqE5S_7EXoLVm<1JC*xx zQiu@B^ESny+`lA+2v;I|>vWF55WFs9q5mr&eb+%#arz^&-Vh%tfL;a8LpXJio& zF(3_y$JeDms6-dl2(F^MFHNly8Ubf?-wk9E9!RU-L%JHcje_135nB9V&<9Oo%QuJf z+Nc;zUpL-Pdl>vlgXz)6I|4kHOpi9+OM4#G<>-|wW8j74enKP`kldY%js~#vKk*_7 z7w_?c-F?Q3A-MP!7b@j`d>OmL+le7A3sw=2!<%Tn<|d!i6-YxJkrN(IQ?jRG-C*DHbWI5En2p487#vv}5-sSkqA;(OAUS`E{(c-ES!^HH<-e(6iS95st)fiHC|6l3w; z;YsxnN1lDY)O#S0#k0sv4FbpFxxh@l3yQFK=KGW}z!(u9jB&=N#h){HfRQj5&XlEM zV$O(hB91t%OW4UZNIBzAjX5o5YRs%4oN%OK<(VjzH)zDfXrckEFD{CAN{mu|AbfUX zB22@W6(nm+It1hc6FVWQjRW%VXJtzW(H+ekj#O; z%(H@h*c1A&5B^0FMmgZxD-AWk7z=5M0SuU<35KO$l%rDmNlDTzZYxS*qk(;S`}8-+ z>Q8J%^#(@|ZU{!3+y@Z{x6M=5X!~~!ry*@xN=v*w0hqhUhvD8pm_)^8VW@?y&?$oT zQKRB+T*zl3zTp7)z*VddeU~44H9vG=eoAyDQh3RQ#}B3Qqvhype*eFaQw~pcs{7#g z4&!)yoI+BBYm7%3d3pKzA8zq+)ZEa&-{CU-D8k_UyO|`&!Hmbb)2H?Un5~ zSO5jF%1U|bYH9!@=vgq1#{q-ef~%JjW>9ov8x%Ki-f0+achH^eG2F&*cXGPh?Kxwd zdoVz^XGOl-@C4oNF%CB-G}30bZUdSF@9#trp3sB@Ei573?F+g6o^wrzdvBaf!mmSvI2x8FIcUxhb~>RT+=nK%WmGikh% zqi)r{wEs|BIvSU?)YpY-8>-utrCD9mB`O*%{m9o!n;k<`7~Wdd2V;3_ExH^xo-SI= zXEtqo6AG?7R>2Qt)Y@(PG}U9X-lh^|!oDh`esfSSuVjTEul9XM3kHmS2G@?gpo7mk zP8>p;e&b4dz*9=wSDtt$1aq+34Y_99+?aiUm z=9>DtI!rNla9FmnMV9&)F7&*y1*iP$g)eE$5BM0$u`WI~E}X8|DN0eiZ-e7Tqx{9+ z#)nfL(wP1*X|g|($!p#|GME-kkN0hajEi1;rmqa9Ms^xSIZT7HCVW}foIdFS~ZrYF&rWDGP0JCltRBh^SVhPg7B81?%^qg?9957A`o zLD3*GfxZcxlet0E$B7-EcXyGGOCd+a$&~#;MiBLJA|vR_?-73Hr1~SbQ8s|yeEs-+ z!f&UMxPu7u^1=!3zVc1sFAQ__r8;5ZzL;3ykIYB(Oi_MZKmIu3k8pAHk&jaa`tb+) z$qz)BaphD4`tc9wM^BXY5oBUG<))<#l^7x6%BgSz67_Mafl(0YygQA2oPE5Q^wbCu zS5C#-=g7yYct0HZI8`VD;L53n_k%N}2YMOjFcJQf6~)1|FuosL+z*})nC)rvMEFy+ z1#>MX!XH{t+aJoi%mz>szNsG^zVET<522=fuHi(?1`oOH58FRu1E>kV(GNb{5AFp_ zd0f|t&>Fd|z--Iee2D|q`PnA z?ZAG~JCarD-68t@->4l#6Z=0gM_2Y1V>9TTUZ6-m(LcF}-p%ZWQ3;2QiU_cC0ipEU zI&JQgq5JG3!Wco0F9Si{J}Uv)we*!}4@Lgc%Ko;n-O8o2vV>@s5zi zHv(rAY>%3&n{^87Or_FUV}U_s!J})bPqXS-R$XD$=U8>ERWG;dR;ylb)f=t)daJ(K zs_(Gsd#(C0tA4|(|6$c%ST#2v>Kh9mXPs)*`Bpv6s%Kesja9c=^*XD*)~au}>U*tv zk5%ut>fc-S>sI}~RUfhH@2xrpi;emuTlEO59%t2OTJ>D3KHsXBTJ@_|{gGAkVF2Yh zow`n7jrkpD!9!WY`Eo6InpN{*g9B$!=UH$q>vY_bTXmB~UuV&;VU5j;hnTE)TKJ!` zhLb#Q!OvJV&w#1dU#@(T@SG8RIARk>M^X*ehOesFM&sP0+tNzfc zKey_mR(;&6f3RvVbfvr)s}5TAV5=T()tOd3+N$%dda_lYX4S=3J;SQYt$Kk~bA5Au zxxQJ;Iz}z)7&Tl(@FA-fer&1SCump39ok*!m@mc|+7F>g=6ecj_(36S$eYR9+S1t` z!xlLZA#xbsC{N@=9-4|DNI#G(`k)RG4`s8gTKWYuLZ$R4{iDALgi(tg=yw`n)Q@qU zq5ngy(VxNff&NZq4f(rSL;kz0A=gWPgq$;3qrK=g(i%VHNPmE(KgcU&KY&YEL+&CA zUd$TuJ1uw(YxJ|xf;X{-@LMf-8*B9Ypat(?P5b3_T+)npLQ!|N>$<_d!dXJ6%Hut| z%B$(X2_TLe@`%ineaG6N`(Y!yZ$E;)t@cC9ju<7?-WU6^_1g+hq(*M8qJ%}ZMh+ma z%}Ow&bzObU%4L;}eDyF-Usu=E;6_vrQ)BSrP&9~_+*_8_TZYgaCt{j-%xX!5B~>1e zNpQa(ElAEvRNnOY^YW@YJKGy;R^l}zOvZojlLj`po9wAh3FZt-3{rlxQu|Hgc{1E3yDMaCCG5jusIunIFEbOlgC0bq;;8+yIXnF4fPDZgmw!9rcMDz6mPOzC!+kAK8I=bIa&@cJeFYn&$ zet(7QXn8&WC+qhY;ER^`U6i~)l)P8^$qPZA?QrPbvbOoSPtCTOEFRLC3$wOAbHVq74WPC~uK-iD{bGkk#v8KuU@FC&8pCVD zrF>k8C!b&T8STGQ!1odwW&wW+3j0k!VV_avQa()n*-;AHmr%P8-)88y*(QQ!Ut&Ar zJ6F|sz$EWc{g>}hO&U9Cio9?2U%x}OrdoOlze9DSx?}n zo{)+?@W|TywZ!e{^&}WQ0b}~do&nGA4TXq%Up;%&J0M-IOFkYn_W8XTa=rVK(NZ^F zk|%ZC5wDRcS37#Wka9Vs{5zy%hHd~%NtgJtgzntavp-=UF)q=>k?VQMnd>=dWcv;{ zvO;AE`;DyQAF8ZxKID5)zU;dXxaMSMIF74=E#D-mO$S zOm%gSz6n!;cU@j`PT3bT&&WC@<=ws1uHjK*LPGA>2SZ^@2$)lWF+x-JtI&5J`Vgb2 zD+-1i7tc|-KDDr%nzAE;mY#FC_&e*c#>X2Mt(_2zXJE+jn5A}Oz zRAI_K_dNGuHNaKo8cPXRfeSqyAgyDcyDa`J_mON@Od00RVeHN_$P*emp=5urC$zuU zl~7PZO#0e!VrTt*b#KWzjy-MrDZ`j^3qq}a_e`bt;@z{jvL8nNaqkq-X=73Dfy`8A z+MoCSylC2i)60gH1s^rW`cL`nV0PL5L%oHN4NdgSd1tH4o4-ja+*tJHUiVAJc>id} zk!;782UWTc^T)p0_9f08Se7_DzRY!8Wi5C#LHeeC0c$p$jqj(%&3O#70t*uy7fM+>y{AiT zr7c3MI`5A)pGo0Z@RP45XA_KJbu zmkn)WZ$?NorULl*vb}FauL*D*P$5093HyR!OZPlF0Jg3u9+J#A9jhD8UY5EjZcb`- z-0XWBwl<}?(vS5Ha31Ro#uVRD_jh7E&Ys={={>z?6JzjgMDac8v;kl$^~#{7;NOaP#3KcJ zRRm`5tolclO24JyhtY{IIZFbgHyv>H40qmAWsbezl-H{0dp!r;b5w>A+R*D7L0fI9 z>XG>p-SHJa+sI7VSN_!x7yqWWZfyCnwH?N3ckR8t$a_#_67zCz!&qmR5%RwKa&O)A zUEa@MQ=^X@bao}vpS#?J9s4|3ErnlvG{Km*YwwUp^%_t9r3z(taedi3tL!gdf)^HG zJ%+YpMZJ=GSL%<7-hU+rvOoTC^1d!r)w9Gfdj4s|i9c*f_e&jj#BDg`YDcd-!3jS| z(Ca%(jbNkmtPe{WT~ zZjoLVFOo}o48y(}Y+X6>ZaZQCwlFSY5KgBZfpOG)cxpg^;J*cBRE(U(_g zY$37A(xTa+^&`%Gcw>ogR{626nrS6_3-9@|t6gR8I&O$HBxY)#L<|`7QBV0*d#=Se z1IC~-udK@*y@4(@!q?N~D?j$_+T60jjPf2M#&_6ZJdZeM+w zNE@H}=e@@E1*OvtY%fbH^NjJo^t&T&XUwrTYHU(-Z5_;bRG7IEL)O$ z&;CO_H;wt|=yZCB5u(+%lnu9{gvYYK__dzHyx0S`rSC{L1cHwjX7yCKN-*F4(5HKE zKpdxjIb}xr=+KS7;&tV>o4#wQ+^i8XfX9e78ttH9ZFx%0F(W4GoZ#ofk z?g<{imW)Aq_8rvyijzzG+lStLM#$JrD#zrIww!a@W4(rsf9$Wgr^*T43(#LdEqcBI zHO5wu*;9yXPeDvLDuFw!kvl<41*fH(bI(P+*fC^|*+2W!8h9-Y$cqsa7(I6z9HW5< z>PbM%EU?F>Wok+Dd(#UF_RSr#q39oba}T7Y{x;Qd_$o)~7~@S}S;7AKy{qvs@ z&4bugZ>p;L`-h?S8~X8ut~~sq%76EzQx|XSy*48U-`8cl3C!V_R7OpE&f+gxrTHO zK%bs0v@gR^z!havZ6)@n(nkqjpZuXfWo7n+u&TTTqsm5>4eA;0i@{#tg?*U2pW7#^ zm|muPa*G_T$rJGO31yxmhG)|OZ`tO&zewK3{>polZ)Dkwvg`BG-%Ov$jK=N$-AA5{ zr0wW+hUb{tYMeX4&TBjgx+kr@lk>L$y7~XLZnI9J+cn5N_aK%Vlb#Ci->_}D6Oq6v z9%t;~;43r_v_~$1f2%oM?+ba_AZE3YCc!Z`xLN@WUx` z$7JIEMBklI9*Z%-pLG~OM)XLKh#ZQ00O zruC$iGQoSf@DeJtI6Noicp&Z1{#|LV!yA%#=Ro;f6Iz>{dzqtsz0X?~FFUlu>fdSY zDbZ`x-rYQwZXAlZLzfWCOGnv4j4V38_ejmoau91 z8Ta;x-z z1Rc8$JDqv6ZaMzNQFyrHjF*hVMannsVgJsYtFO54u-E<7LFC1PyAQaXy>rh-3)hzi zGv=tQ?rYF{;f`KMcx7{B+IG=v++Js%s2NEQ&w@8WkBiw^r1xh}+WT2n?*|w=6WoQ0 zANY{YpJJ{2$@Ut{|70B!H*uESWhHSfPcJJdd!{#`i+IiN4SSil4Vk>tAHhV91z2E`M(C!G!(!vtQZ7zi~@*rNtKPd!;LP&X~Ds#J#6Yw z?d>}=Qrfp)aZ1>xrDI~8+xxz z+<Ug7eFR6+WqM}KS$^H}V2OKnQo3kv zQKnxuCoSZ1}+lpynmtOq9#L93yl2Mgmoya-X2QqldG9 z_t~RC`7Q~R#*|!A3|~tKsJrld!IhMFDp2lc@#T7X0KSrg^Kk8Xo!Gzgi&w5}b{Gm) z@%pzo_jY9^@foG(dwjV~*w4)?*YhxsD>ryGu_?g1ZXbrPf+Rkj^5l?h62Exmx)M|6 znwIo)ki4e>!9!{vhJ+(=H&4<%M97zryKFN4z_5)JBIL_I&3%EN&wk9b90Uwg7s(<~*hRDc+B4uNF?#F}RlXb>RIJdZ%50P*HU1eOaBFo$4J z_-jx4XM*X)6yUEtDLQ0c598slJqe_nTM4uXkYV0IpjCiOa|eMo0kX_{30y3|2y-`q zb^%73j}Yh(V3fI!K&JrN=3+RMd!+!Un6(5}36NthC$L(8(dNYj)(DVmt|4%V0AtL{ z39J<$&%Bzzr2^!e(*pq32~c3pAh2G5vF1DimkBV=TtMJ*0mhr>6X+6Pf>}x63IQgX z^#raIV3N6lzy<*(n->$`ValB4CKQ1oAyg1sG#PxAvH25(9?vBLRGFt{16V6So%v6MEYGC^G?*I@$~@}?XfnT} z==B1$nT0gfWdd}XXHo0R1z2PLf(GdlV4Yc;0^kY(y38OcSBlmf&C6)f4FX(kens6j z3b4t{q;6LUaGg1t0jBmH<|~j+a>|Fm|66YYX!L3OvfhVxlVvvP5!B_ z=lWm(9&)?+9-bb1HVb8&*+A>uAi#EWdlrBjMbU0^4Gn*j06WdOaAD6D0d~c|3LD&S z4$1)Pw%`zS`e2}p9(23Vl@a(R9nc*Dxs1SiPR+I;!>!KDc-ycZtYzvq7%%yCV*wZtI%hX>1C%40%V!rz+pG}L3(b^K0Gfnyu6Y)LW&xI(ucbBSPtluKucfu-EwG(e zucdY7-?3|W+eP$cW-l#UMj#AGssTY32?LdcT(01aI5(lDVGUwyNPa; z_i_QYna{v0yj=opH#f4=D+K5^$8kJ*E&a&+C3VwlX{Y)3JOFwv-DBPiC-Ytv+zz|! zG9PgRxLW4t3G+j&GVe9PM?iVXd=P%>-6WK^%@s7SUQ6$qJ+y&dOYfOaP=o75gZIs) z@N}AS}H< z{ZyKaH7ET5rE?+_@_2vn2vM*<}ofd{;R?iOf} z5#U=2-kqXZGB~k*y+01ViQx<}0zadv?h(#BBanjy>AhE=0)z<8!!Ciw8G+ZR^?d?O zFaoulmY)bT$q0lvu|E}PiV-*+q0D=~EP_)3;dLSJZs~oR5pYrKp9xfG1e~AK#PsQ3PL{@sLBY8hrap7z*0!%QyzYwU&2%Jri zdO|qcj6gSa`K3VZu!{@Olfv0)1QyX>ew8-4#2<)Y1zZTBTj=*#DtltQ9qa!dr9?)-vbBiM|0XGod zX9T*{5y+%nekYvU9D%2(*|P#|cLe^%NcHc++3g5?!7)51&`w9-c53##K)W1)PKMau z%VN0S5g0~${z0HUjzA-Oe?g!pAd|uCKcwB$j=(W4q8FvVXB>f{47z_5=vhbLG0yEv z!ugyd;AEIOD6|(Gfl+MtvdDbV5x9V%k3p;mp=zHAtlZgn9bnv zws0o60)OWG{Y5lOas~F$L;fng4{-%X(0AVvXqYSTHvQ#YfkLjp6P(+>36$Xqw2|{Y zk(uQRe94*qyFl5lKn1tJ_XWyz1@dUme*~w1rN9-qjTZbs?r$!21vKycc;Bh%tDe+JL;>8vT%yb{Ls z>8vTq zEQas-bk;P@d>;d`;h{v!>-{B|@Q3XH8A!tB8_5oi(+X18Ky|Bz(68 z{(`vV(^(VtfOQnt6?_?%#U3z#t*m=`Fz(34S$*7<(Z}kqonqdEkm7HW!7nm*z?=Qr{}!8XaR}P~ zmY8qBef+J`rphb{0nk}{m-&a00Cd)VrMZHNwhP-vvzY=qMD#B6d4zPo&f4!cufv@B zb=Lkf^Y@r2zxKZe&FOGpzxKa}&5Mz0`L+M;F<*4qExFn>-qowdJZro-v|+W+1*hfrFV2>7eH1#!!Ng#e$K|3nn< zUn#)%fe;+nzd-=xogdMp8zr9`W&}Qi2mAFsaL5R}NdsLikvYQ%>>;PV3(heDr*Q20 zHaHh~ARXXZ;Y6l+B}cE5cjS**SigRqy(51-jp}a}PUMekuzvhHe=ow#D16Yb6L@5d zyJ_m1f+2WAnGq<28~gR`F!H&7BF6c34v!4(dfN16nIU9wKf%)V-y-8f26vSHqtkd~ zTl^g=|7}9M(g^&LJ=`v1zZsfQ<{d)AN_z^y$-hmYUDj$!<8p%1I-))YnqkuJWN$4|K`uEihmu~F7pUlnbiWg%?0pTvqk`qc{8#E zvo8L7u=z|6DfI%F=5vs4E)yVDxt<}Z!ATwbv1W%m7mi|ni8X6>Ch87HVquvp1#l%b zcho3zRU&)$B{c~!n1EmTv&}~T@7Q_^QZ943r7rhrbAXK!?fJrvj#(e=`q;kE2RbgK0~aUL;@GZB;vuxp9k>BAYi<@=i5rO?G&utz#6?Ca*B6*&^G4@EbZj|> zd0YI&U`R|skX4Dy5{$&j_;w_g;Tu0kkc%K>Zg!6L1n1?{` zNc=I35IHGWDgQzpt{12+rDCb)h=5CBBcDYa%n$Kdf#I6XQ0o)?<4S08~-W2N0 zzpI$f8!zYhd#|OLJw&($WBJ5(I$y+y{l2(A`a6I$lOQSXCI5KL3jSal28=r>fD8NxS8*>p zdDJv05wjilY6_e9_Y}AwY?F4S^;BW}4dw zGz&1-+)bcGfC}YWgM|@jbxwoH{7J^`{)cI%buhDWhZQ#8!1#@AR@iLE)EakMVRIcR z+pVy90mH#v0wgFG|Mb)7cGg0gn+`~Z#*fp; zs4?CrL3A>)=d`<&`zYYSg}62z9ZtN}aB2vc-wkBA)0pI6fzkM}cL47S_`z&In}III z%9JK_VBFy~WlI5p@z3a93)a+js&J=Qj}>V7q&$x9jV+M|=m!lRV}lw*ALC}Pgx%3V z!?Y?5o~-7D@RgE_RbgDyzvXA)me=Z*h2T8{C936@@Ob0WNJ|U|eV&deuKQf?m7V7t zpckN|%Dh~rHD3-y14@)QFJ{?jiipFe3UQmm;##!0+kw6nMT=|I;vNEGH%gQ^KgMa) zM#O20JPL7X*gO?4RLbY^V7j0`)8TNRi}m2&2k(1*#n)2X@<>Z;G0=7dqP8CV*}CO7 zK!4q*<&dL@8^%m8XTX}*p|f#mOwg!lyzbrrLBpN~56~I(f+U6)6fJ#{mR=6TJd`v# zk4)##JLowXT9lrUpFz~{F&Hz@*{@T2g&OK-=9Co8b}-DAmt8allLDCBlfZl#7M0MSqlox+*kJSKzqksru=B1~ulriZ{JL;k7+7n}!Gj*@aE z!{kj7?p)y>mVpTIADp3Wo|Kn?>b_hW$D)lireZm0s*-_WE`o6yV@Dci8wDzd^G}77 zEc_&uhATy(DrF|T)L0zp@C6`^?lesE=vB3?%2=YO$+5L1^S2NLSQ2N)*49y1QwYjh z2%^m|*Q7-br52*7G&*M%6w0Z=#qVY)bq6@1lw&1`OM&|XhL_WV3r@|GLacE3##t;m z>|p(AN_}KeR^m5EBiiP!M}NjbPwJ;Y1;-RP^zhEr!&?t5 zOTz+%w6m~0@@gB1J%vvE0NVW&W!M)OIFJ*GdNV4ZlY=kuQP3%itz{&P>E=xVm zJ!Xi8DJ+QqA$&;bub42#s?1o>MuD35{psZM_Ivm(_Bi zh2nCe)E$sY&!mWkC=r`25tl|pY_~+*7(v}{p?+*jRXKZr;?SS8gvrp2u`1_r5ZKF$ z7J-UB1>7&DEA=<4{Unw1f+g};MC7ZM$avV7-X6AQ&Rdqu42wdU?*d1e6E)62fH(xy zS5sl5W4N#aCsa~HQyHLkxjjIuZgKL95toK7jT3Y_-ITv{^JA1e*%5ZR$I=5|2jUf! z)I9iy@e{Xr*tbCR66x2-!QX?EKXem^lKLfA=TF=rBKecq`6wA&O+R&ulP>~1lZ*=( zV()j$!g&jbH;7zEMelbHq((=8_!LF2k=?qvV{1)jJ4741-PRhZ)oW(AJ4>&by37Y* zQqc1?T%Y+gRod-7)m~GcY=O%(yexMWbJ+*nX-o`~a{uTC^q_`Dz=3pG{cY_d>SYm~z`O6BYV zj=sFz#=-9%1diVGa|^c`I?Im5Kuy96eF!Bg=NXIeK{P?+^QQ@@#y6V6<&$fnVj+nJ zhyHw=L9XEz3i=mXsBsnw`k!T?$}|dAgfT2!m5s}y{SY=rR9O_UHzp+I9i-{TWp0yx z%MXW+3A=X}vQt`HJ1e&3WQ>d9?M_X==C5ZtjT?mo zc7z>S8BA>1l#v!2yULjW0;lUmo1pgzu8BjIG|R)AwI9>S-`SL>RnB}%z(C+-emHB) ziK;BZDK-I9yc{?RINin->V1J4oNME30ascAmfM6(m3Av|5;T8g5ycMhi0eZz;(6}y zonsT|MmMvcVf9Hu8bfDEhaHEa43jW(p8GV;F5i$ULP`BYEI7}1$MJk|1rWU@GS=3UTI@4;=9QSKh}GTIFAV%edH!#*<)=^k3L zvrgn1m<&mk)9AF64IHG1n`Y@1!;cG{7~Q89VBt#E)$6hr?t)C- zDjU5nYoRXGJ4&xBQ!m_eG8u`CZ(Xt-I<}shdmd)N2)ZTr4CFSEn(R*d6rF@}&x-?; zqW6=++zVkTBURHpsap~O4bcH28^hx}eW`UZf*i!oW&=@1x*L2uP*l!k_*#f{{(Cgw>|6@mM&P)I{6*u8Q`Lyg zKpiO7EL*W*$*o2ecpOlX?N%W|H(2ceqm9am2h12UTJu<;YJv7m5=tz>Bndi}@yKq#C*n zqcbjXaRI2sm^`DKw^zAm(SfdTiHn9f(HmW93=Mz8#Qhc}bqSWXag|1f{5VoaN&OB7 zg+QJ{&SD_WB$7WeXk4v1>wu^s^4m;7jwa_?Al9H{@S%-yjVq0=d@B$)5?M2axDavw z0r+{8+-X6y-sF-c~bbhQC+6Rqr0Q?z?+H-E|(6ASMS>wMiSS} z7D49%izA8aPwaj*<)TRD`m{|EjkYd{ESoo@d+~p%?*}=sPwZaweoyWB3&t|m=TsWg zSV=RM;DU)rhD~G&%!SfmjboZk&{|choM){j3pK?k&@Ixqj<^-%e1Z$=&}K0p?fl9@ zZLm<7VP%>7j&KK<8VmP;jhn1SBv{6`R98d4=f;()S0F>H(Y<9d@`JYq2znSDzZi3T zCd#m%;S0PIzX!4b*L6e|@Z0vsrSW#bC^a>17Z?NMqOh&HV}<$0b(hNUT-0d zbZ&iconCMuy+t~=KD18nks-ZDI=4Q&F0+=gBjn1XZqBWbtkXwR8LoI*!?|_OI(;^k zX(M{qW&Se@O|o3^JB8!v^;sd9Z~sKxNv015Wr1rr7plS^z=tPnBB)|{+$iu=mq$-+ z7EW$Wa2$b?C&wlDUf|z~U$D$DUowX9{KQr3Ne=Rjs4igeCvDbAoNsVbVeX2*w5sN~frS%kdS7{S7 zNdy_(tY}7+gM}iLk(#29+GtRfvk0Unh?}8F&aF?c7hjj7wq!$R$Mp0IEUEBxgeYB3w6Hs9Pdj-4^O6779BPLmkCGsZmf(-ycf&vvJn>#~#e-7gkfQNUiLA zuFeHq&(A>?d16suNy}(YuUBa=fWmc~#ywMxUgyH%f~nv|36?bP^w?{OZY`SdES(aY zEu21y6dTQ_|Dj{&*4}kE)dZtV>2h4il=9ENqNmjRI=ZG;%EPHr<>fX<*%piy2md_e z^sr{MH@g2k1$T+EmJT^3al9YvXcx*b@$y5?apd?9Af89blXKfc&LWW2fY*Qvv6r!APr4PWKb6U42t8-uy$F#>&*UPdY<}s)20* zi>Na+!QmSzO;+pdfe%k|s=y-g&uWYKx7Gon??;J`Oti*&}h@v;}_0G}Ut2YACMWk%t>z!v3xf_W4Q1l94?>vW#`9&apPfl6k zmpO+K*#pEUD5GVs?y_xMr)}Qlw4UMAYa4fIMfi}QgHzSzlt+?|t;^(Yox9ArSX2>z zz)52W`jF6S5wt0B%AaEqHdzF@nc0eSMl38b&0V%Al~ZA%9*+{@>Qsg4DrYfBG}UXG zsLj>jj#^1I7m}RI`P`HukuM>atL$tF)(qqAnwz!v#$iR)})d&}yb==V=#V_jm|} zJYg8$g#lV_Zju6cDvdI%l8N7W&MADGYAO&DiTs$6_&nz3C;v$0g-dz9SoQCrasvZ>H4_>Gx#wFmr3Y6T#Y2aJzlp98G?m=pHk%m<2dfu|sIOY6f7MM#> zvUZ}Emk~u$yHY{za1NsPH-WMoMNMQRl$iDeAY+AdkP`-z*m(`;SD{EW?8e1*HV9`? zL%~Pu>uhf8c`66)BTji*G{v(iSDt59FS6eN@a@?J24MTZK>u6{b z?+l;vy$?>Ko9%~5b{y|4;EQuVhf0s2q{`-&14lr(-YkQusB7LXYz z;iKEr3iTq_YZ;4tm^Ie3Y=VxI41>!olq_#wmC7lwc)KjZ8C*CBhjJ*$7I#Gvu*k<^ zk#iDBdb}?Q&*akZV^O1AHvc`tHqT5Ew)%K&hFDe9+0ks;#Rw*tf8lO7CPZ1h`G`cyqypH-NlJXe^PQwIFM$rd}pF6CBMC%Db zk3+H-JVD5v#6|dnLmo}}a$PvAGn7+~Q}9zJbUOT83;nAK!WN@sZ9<33(H&Q`L+=E-D}{2v1Wf7czG}7_nIykVZGp2Zzb<4?40KNgluueu^?o4qp#C zCjAD6d<6Q(s`oRu|WDaH$_74;tI(XaI1qKX3zedNc824g$M`Na2kFpCacSN)3 z*90~L{eVU@RLJ1B0Vl?25x;81@!?wT7}q#F=ukOOjP9XDw8|A4% zk;5HPrTmDH8IikDFTS%W=q~6*g5VTLwbRyM~W#`Qc!U?uTbU>=p*6ceU7Duw|p9`cr^>&k(0A2Vx$P z`{>Dk*T|(n)DZbF&HuheUI)b0C{qt+0{Nwp_%gc53gK%PdP*IHrDA+&h>Jf8w%sV9 zSWq!$mHG%re#l6mil2b;F^a5v#0R|3jxWxa@sSa{8Ny`U8-s8M2R2#vg8(F@bulsTXA^Lb+kgCwGwKI!|tA!mY5 zqQMg=@;vtsb8$2VN!ly9P%p;yd`COzyaCub8^?{B9i3XHbpNr{7{@## zrl3Le3CTbg{|I5|2Dpgvh#oSyVTHS9*+YIr5BVMN{TW3M`4K&27g8LBGF68Bs2;K& z>fU}s-P>=dKi5MYjn*SjWJ4>&v|NaeIn+*k<8GjdL*0t!(+CPO)K!}9?^F}AR;r9l zSLC+%I;$xMdTPIc4n3PQb&nq65EZRD5qb`EpM}t{a}tDjUObomst{GVNFg8-eMVXwS^Oy58hp?)mVg<)BeDCnrC>76z)d& zuS>)E2FHeX6(B^vbUVc8^U^J->Q)dL--jC#-+u+G{Q^bakfg!FOUJ#Eu>e68YnHbp z(rTn`^)_0(#a1EUPufZiO{S}u+OfH@7~Nc*!>S+-XnAXkzvuHg%J7Ht1UZ?>k#Y9$ z!SFBe%o1?E4j86!{_BvEjIk%7=yT3kL(cY22VyFUn)VI?xbaUozx@I-1NG_B=Rc*( zO0Zpsa=LW+PwDY$z+J>izyFkOp8&j5_&V6_3pT|1h>WGiDgrKM3#9*}xgyGvI8eOEU6-JlC29)?$>b zDIlK?Vj-sRuxx(ofnG^TksW$^2Ba7-dW@ofhb0{|YU$j=G&R9I>K}je!OHYFX zu_Tn3rN4{Ei^V7d&M`}uAR4nI7I{kfESV)Z&tG~2Vi8MluD|qmA@HLFXZlMYMz1Uh zMP})zNDEm8tTRhXF+P^yEPv@k@GO=A=bEKwBRgOjaGqH@9lR{T+5S?#48and<1d>6 zXItyzo8>dE9DyeRD5W1FMzI8oe5JRc4NI`tS9%wM5lgVtUwRNWV@WLYlnzCEmc$ZI z=@N{YWxxt^=6sBeC8^NsDdih1ECZ+eONYQWSrSVFp5sWVeVU-#6QQ7N;61B^sZVe%bC zSePk!#=oG^4yl$Xw3`)l4E{wC?45S)m4+H%j0Jf}U%^pghxQd4rcmfGw^le>DE`+& zTS0ULokKC0>O{vyaMEolf=OpYypyrcW{4LP}e*fB$6*fEYXFtq+k=0`W?oEP+I z3aE0cd!xJq2{QsnM!2!HJrnJ`;UfU-t+>-)Z3PD8V?V&Rn5s;zaaR;squs>m^Sx*Np7q|Dan8YcG0r@vdN27koB?MI{+eTecVVU^ zRH6&Bjlc=?aJXEFzgdUXXd>XfU-4UATLCKxPidvEjxcM0$LYqiiFnOirqhNOGU0HM z^~YaxATk`DN66`e6_4IarAu+5R*7%n%yUvKG969e&v1sEEl&P_NBL4g*H3T;oD=X@ z2UGF}PG3oRUfS_+nrH%#8l4k}E5EQ9Sp6tM!c+1W!>w@tvr+No+;Q%OlTFv^HUzyD zXI6bbqT5^)z_fB-hM-1OoecRMoUW5_rcBt&%YRyND?~;>UHS5oFF!z}FXKHm^YA$iCjup?lvB;!aO$-hgw;46SLx#%Tzws9z-cC^F$kvE?~I;4 zAzc;7m1%y|7zDp0>S^>|Pk#tpbO)WGqvK-GMw!)#&{zE=(TVfG1z-!zn471RDS$i% zgQFTJTRWp@!5MJU`O7n}Xm|?nOCR%awE!ndjY&4VoVdwzVj@B~ zSx4;J$Wb`6?0YC2N{nOrK1k*R*EbmFX6W0O(9MUs>1n=8d=bdZFncGF#>m#<${biO zIDVDyz|{tLqBNMcAUj}BEr{>oGC@%{;H>v{>oIz(xU@tFh;HL%B;RT#@febL6D{nbamf>s;+B@=q`2qI)ac-xG zSjjtaA{WHnID=0AnR|KhsC6fPZ7x?6Cz%3dC7Oc)uEI$#2AEMvciF5is`%ry0j5>* zvciC_IR<3i=D7xt*nqPG;$=8pWCzon`*F!IU6d!p(MT5GVU#aC%)uLZ6SGRM6{Gf2 zYn3!1T0Q%>6nF_IdLX_+X*2E{2X2Pn&y2sX6)a9``W&HzqY$Th%N@`M^8=h1K<6V+X5BX(frNvhG~YWI>h#P$1dX+vC(D|28Cl|KBYV(&PC z*oTuwM%ug676cb_u+mV-1ncL(g>02pdP)Ijow?Wd$7-y~X!z>gs#%TZj7B;s1CRon zd1_LDX&w!-^w38UYjL8b1@`iy%?R5AdwIcRLkWL%1f0pZs>X?oQKJKAF{%t*TOoh3 zY)s*f)@OVD;}jIkF#~^D1Gte`h7(isb6tkeYu$+?PRz*$odMeD_cLB^g4@J=jKOJ3 zmRGZIA_Dx)Iz~W(IS|yK{{EJ1mH1F7t(39kJk!&|OM~l54z6`L(ISrqY{b5rp}%!( z#+5np%)LsB=V)i-R&#a6aU3p>#F>*BI!`jrs|jl4If>H&9jI`nFsl&gJQOD;A_NmR z(An(NmM83smXOm&0j>}&@hr{*o2{>J@Ras1(cvbfRfMOMDN#6@!zwj&O8Y0;hGaT4PsyKXS{dB~rrF?vW^B!nwShUn zyuF>c=*5ZB#$R)Akmaqm#;W)BEF&!9c)64<<0Wx44 z=Nck`6C-^f9Z{Y$J*!*x?j7J1{420`71TH2^rbl9oCF7kHPES<+UJbUEFJ=8ddGzM z=7WC6CU|8Xg^-Xd;tibH)kEXt!O{IOoZ~QXemLR7$%Xt$;14H{DR2h#<4fP1z-YQ2 zia*X?>OFz;&>Y>wjx#b!RQMgvQMpPccpDJ?U&8r+5-HSt2dnT_oUmAespmR#i!*L7 zuNkOs7^9I`C8laHCbeFs_Ik+-IIFzWWciyr^(PEogA*YWjKoYVGL_?)?vJ*TWk!&3 zu&CiobQsaU9l|8m;+%$)!vsk!-?E1TW3I}4xP_cS;S?6wxXe1(i6B0LLwk0;dzx0s zEXAngiw^1Z4PVrQxxN`RD*;LvK+ZHmp%ue^l2!*t_S!Iag1v9P zb4mA}yn@d^_fNd2M^DrY{_b~7f(vp-9EsEBj#oD9CSqRN0~hA7mSC@o0h=XWmEuH_ zMgXJjWhSt605|Pdm23A(g8MSqIC} zreeP)?Au}639bFBl0(8!oG1|@Y%W*h?|uiZ2wFr4rwxi%HrHnNi#dl5{+h$&+GsP0 z%riL(Ckl*xS+%{y->jnm5`rOU&bg^(gtTX0zvopCZwWg2pPPuR&hcM$*n zL94Qc&ODHvwCQ?kO!7pW=rIV|P0-mKFuRis!Yr~t9W;qboW5cRn4#NdJ6$$@$NkFt zU>g9j0B3FizzGLq!u*Kvl(Gj#W_TXXq3GZ+)f+#lt~^M$aeL{?dxkqfd_^X{IxE{7 zKIXvdr(g}vgM2{@f;`Un`~D2WHL^@B#(Cfr`{o~>k}t)k5<>gP-%+-g z*Hdr~a*~7g1n2@G>o^D!5<$>L4x9+P>DfehiSTbO(=6$pHArS0)20FybKrph<0Q^E zmtUZ<($iq7e7QD(u)Q;wReq(+1P04a6b}D|p~f;8>Ri&kCop$Zzr)V2uDon-9bD(( z0A+IL0on>34&47O$0!`c8xu3zt&TiT_Kw1Y{ zNtPpI90fR0Gz885z|~=GqM7iNnzJgFx2x^2QYYa=p!l10u=|BGu>t3S2V;88lm8;ILwrNLKzvr*A$sZb!oS(`XNBS5RuKZ>aS)&%b!dUVw+k zNmfkX@40*Q?q@5?J(woi-(;L#KK(j{^7Gti&kTn)&3@TC=+1Q0%}WpcXahWF;5;5@ z8_pC?@2JHEPwE`!IfAskBXORDvlpj#uUfP&$wm0u!x~g$9k4%eq zuxz|^-RwDnjCTXheK=>Ke!U$si00UizqjMO6X)H=#r~l!^5p%O>bwJ_jd=D%u>+^) z|3f+)z<;Yxhq~Xvc@54RaC!&J-ODq}%sW^=tbf)?7^ioP!^I?=lX0%~96`T3%XSsc z)jogkl4a~K*CNO)+b~Xs>p%W~KVnP6t9RNSk4}sKC;E|*hj9=a62vGH_zzyh!c+;C zOluBQR#w^nO&!}Bdb+xLx~q~seTmkXa{!-scWY-~Tg<8I=;?}8#S-z>ik7})Ye&`U zo}SKR)v?E|u@})qS4DSEcdQ~7ZHZUuuBxtRYe&5M|Mu?Wwxp8e1(->pO=@GjB@s=; zW67$9oeIznriP!bp0RPu)KLmbJc=af4ntTwLH2t-c_}{e(jXnX;Y_GEm5Y^ z<&hg(6AGfYV?iR`A4?=X_4NJ!V=7yFx>Jds&dylEOJ`L}XAB)`v@_Du5{b6QDqC4q zlKWEe&SYf==L3y6P36&y*X+Tz_Q2NaZ>t+Oxv(CCntl%7_Eq+{V^~7aG>pU0Yits5f|__e;k8Udeb@k55x!;>#nU zjI2pUlC$JwY;%^}mgu)~XJ;hZ8^<*sB)g2VvR_W%4%3L=z(k%*Zr%>${g`gNJuP$*9 z4h?gsEp^?hP-BUEc&OBM$As3GxTE0=x8)_vOB&aO`o@N;pc@D+t3;#A#P|FV#s~Ld zZV6+U?UtB;r`>fVga|^l?mC43BCgkDxab@>#IERYdl3G(@ETqDv?rbM-KwfC9JI4@8hKNvd$yC3#)f(&0 zmG7h+?ZP^wz%31?!g&L-lJT`53&PZ$J9xYsIE;VCR8_j}IJaqzJNO7>qN)T6O-NQP zLJfr7LxBOvEHTbXW2}Tv0K;vLJBq*!cq4MafGW4?2>iCFKl9hvSQ+gQ6YWgboe;u( zxCimMf#7{-213C{oIp-;A2l~JJ-Cylf4Dn1G}H}DcU@c^ja1|A!J&iP{E04VbxTR3 z4Kz?yiM?@u5`J$&LNFzHc&P8In0<=ERLwY6O>jHDdTq$~u`uq?1a~abm>-%wAkQ5c z{KM%;Zz-LY4hXozf>+_*eAqyt(OF@*3}uiP3T_FzEF9LlabVHph54s46f6q3VHVeT zH+)o1I{%Ec$=DAnLxyW;F^2?TW{0_j<%n&miDjkbSMz6beC4rgc-Ln?%D1^74Fa~cSr@?WZ~^5iosbWd5c$BtgYa- zfIE1C8#ol*!z@*jTNB!XXpr1$HyE!lCL=d;G9aP0jkyF2Y@IlfHb6n~w$)s;+TI(q)1>61jvK1cLXU0Xg{dK%m-K zT6QbAopF`2tV4)l6f>|CJw-`wn(n7waHuiGUYglZTK+myN$5`9BamTtRMKG)ZOznG|On4MpZaz}WR$mx)hoBB8;Bts;Y8Z&Dx%sB@R;tp1 zDcf?~GCBuwpEZ4SZ8^pt3LZ4e9f1G>HSUPR5WlGd1Rw0LWJGy`vdrstllI}mP0t?S z_%%3~kIrtgxwDWRRcH!Fm#{mSMH?)vq$)3K%soSB1E%fM9x?E^hcIJwty6=la)&WP z%3uKD=d{XaOd?83Il7^L8$1Q=0a4Jr&A2ejl+JJj!qP&kf>j`{BpN8=S_)wbyaMc< zLcu?6N2@j6)2uM+yD<1I1kW3702mNZ3fbM_yEXyF{@r;K-5F)BJ2`an@^xEEN=j63 z$ouvHz9QAsOwjcC!F8s3f~e7hP%pu8R-A05YWD~_hQ^p0Vly^kAT(iJBdu*|Rz+Nd zoS+FJI*f`a-idAz>R?Rd6IaO%q;Y#?8W^)Jy z6X+j!Wy?4(WE)E;SX_xY7aV81`D2k_+D_H1tYZI+-lpR#Lf&f8gB}Tls@9$CjRrNY zy9$|x+D12j{AdP)emjI|)G^FV)yDP9jAdc0z#zEHL^u@jhF$!H(G-N&twX%);2Z3p zRqZL~Sm5mgnGUZH2`yWys z41}g31WZVg^{rtq@V8CioIaTL3BNsz0(aLO?G{#7y47e;HRu3xy4g2v8cW?`rmJX{ zTNEJEX*P^XwbgCFNrp%SfnoxRIww4h{*U!>MvB;Cj?7 zJ7Eb0PpWi__qQoDf+LqAjNplgWVkzIxQSy3GHSyd?}a%uE6hWKJ(x@(j$tM4Ohf}i z8wQDHRc(p~L+PPtICQRq{lT97-V<_q?aK$zT6mP&Q5#JTO%$Co449$dG7KY5Tk#Z= zJk-RnDz~J<9aiR+j75o*nU+kNAv{zQNAiOsQGdaX%Fw!gW^_Zqv@%!%+M8Fe!LgMv z!*z4L9)6=47~Ifu)5I`Gy!*^q?yw3QOArkKQ!00eX(1{gFX}0C(hm98tTU}=_$oH-@< zF-!1};ie4PZ3W@j86=1LUx10D>*s` zHzAK~Pe{m|d_d;7(!7%btV&JD=u;F@p;iD6DTh>Ga0N8sQ6g@zpwb;z zjTsA?ygSR>6k5)NVVN);I}!Pu(Ye8HR!o1`ogQS5j3fj?NAPb6|CG8zET$U|G&#d6 zlPY}N+coa6 zO&soAS7(OyP_PtJ7K|!Ob4unjQ!*tZ;E9a(a?r)TFTLyt}R)AK;CRLI>bGU9W4Z(E5oHqvh86~PBjG+Y9wC=>?wrttz z=2xMM9OmYip+&kUnPoKhQzkPtq4jRLA^JcrG0{JI!?f=bovNA7mmzozT|+S08d2^J z8t0acaYt0TW$5=&id?#~yn~^+X452XfEDgMI@?kYjXV#Ao| zR++HmQQlfg$q8bfhnz9NRmy5Dhl{>tC@B0gfe9NUjB6SKQf`_` zh1-x7i}C!QQ_AfbUv9bakjbs_{GycRWiQ-!7pg*$NIMxsO|G9^Wrj{S?jFtsaZPn~ z$%)vkWA#<7+cL*=Tkc$LquJGR?Hn_vx}iCx=pTl{&SzwcnUTma5yadyl37%5B$z>M(^_rf#Jor(40Y zFlSozvI%jxF~vZOTaJLRI>mMZ=HXcKl?D4)kM%O$b%udp0!s=z{$c&k%^?&=2}Yrz zZfzf~Ys_S-cD7pqE9DM{kx@dkYnI)k#2TnE+Ciz$?8?ui;*T{~^t3}ulw*k|2 z3~TpfZukX5qjT~YTF^fSWml53_xRP!1}d^wUA^2)cd_%zp$ciNw!0PCL*F&Li31;M z61!}*?qR{}vAh{m;vQDQzu^+M3`5{JU0GKwQ{agus8PXRH~2Vu3nnRh-Fcf$5=P$~ zkDp|sJp!vryT1cgk6_^)&g~zx8qA8!0(h-kT84QaCLebHG}smX;vLim|9y4`wc?9* zP(yV!>p3^bDan7@WDhc1P~+T6la@K+T+zA*#^vl~?!Z()MpKyt2jp;&(=1}#qU|Tdu@Exif^1a z_lwezy^nrJIr}J$ zUp>xUTj>^#bL%E!&o)QzolJ0tFsD_eZXLqIDrpA0kMdH?Zm~;(jlS`-a&G<4ez&qS zI>;#3=IHJ|2+84meVCWg1E%`o9JMOjYvpF{n?|kForaX2!hycr#ZTI~feE=AR9Ac9 zm6(EWigwO#sc(-pL^~J7J3AXXmPdOX&vAJynyl~Yjim5_&pS)<${~ z@r_PuYhyGOYfeQIslHwZk59u5GiQctsw<~d)`V-TYip`!)YgS3C1RaON9>4jMOSNY z-|W_&L@KtmqN@&as-v%~1?-HcQk{6-+T9k9c0+FO?1`o-@bqX`E_D_#hbR9*djp2$F$#4apA9J!*(*6dj%&x$w^$<5+7oMUkGIBS z-KiwK+whyJcRTfw%3vwUHFbEJNGQ>3Y}F|ufRWI=s{7p6%J zo-lT|)~0W^)zBQ<+#E}--rCf&1$ERC=}ERaDCUi^R3zG!so!H`sa0E5{`E+Ie~h(L zV{0c8=|e7Opz`rVl$DPswaHYZr!Uppmx{C}Vw)o!@r@l0Y$6ithF$cuw44<(e910tf<<(6tW_FqmkZ3thGB8>F(=tI(u6B+E<&>HIIDx zpjl6qQFvaC(Tr=x#-PX4h=J8qGYuF0slM*m3e-Z(G*~<>W^j?#uC@sLYwMiWw$?~%=cY(oydOR} zaU;fL3f94p+wk^+V~n!1ttXN~(L2%Z6zaA!9)*2&MUtE1y|CxR7lmQ+-x`BOwRr`X zNG9X7o=7k17XId0JaZE3HvNL>ERwzPt_T|tHJ#Ruqb7DQ^9aFeAN8WkH9qNX+b4Ps-otIJvh(t<)j-Fww$ng}g)6<#FZvvt#3 z!gw1xqTSuGPUAd(exzyfy2y&A)k{_!*Bn`}a8do5#?>?`&pwmrnqYFBskj$EYS=X0 z2+S|i+Rok(jd(NaCdnFeTDP@!#*$83sx=Zv0hr1+-31fh+mY--D$yL1t*8^2PJ6T! z&-qzm(XCz-<`sZ8S-GbXZ;2R#MJc!14m#f68Zm{>7dU8Q=zr>2Ql<=SSK{S1E9@S$ z_h@HtN7RYNk|;N?qcD8~djmSyYL2z^ZDd8mp$A3Wj#Tw{?Q43}wB>ecdyNn#Z2Q73 z9r2XYjyg$?LCjTmY)iycnv;sRC)c3!b*qhf7vQn$g2H zE^M}0ZfNgW=)F0C`gd9}f+0*+Uj$#xf=Y^~610<4pN2j3QZR`Ht*uMC)0VSZT^vo^ z6oOa0#`a^8_-5m5%P1D1nKJ0ESeFgL_I#$JG)3XnYL?+d+fMC+6`(7!b!plUQkHaA1S+pT_<0jy3N zfa$3dJzHQ+9Amupf_VhrLrR(6i>At6B-tB_wdI;>Bw}7iiFY&0?6TAV*kyIbx;Lge z)NA1to*H!R8*BMz3jfsc&s6@I#y`{fX9oYw%#21GqX^mG;C*wK={C)A%o5rnQOB}H zgee*KHivfXRX)2+GfK6lvg<0R+lqHPZSnT@YUBnMVJps*4XSfNJjtn1LuXIxrlbR- zG_5SBW3}yB&DkqeJE!t2z?YM0HYavaoH_&bHf@U6j_d%V?hdV{HiAmvz`{;A)s=`~ z{ub}S`)pn;s5{O0%qZi%%!EeO72TTYh83bO6;qW8+q1U8eoVK(CX&c%x9l-E`Z^fy zBK(aIFX~n3%X$(q&jw(|US```Hktv!!B4zsko9K?JtulYPM7++FhjxQM!rl%0!;%M zH8p~+u>rlTe9d6Q;xIE5&Hy^vaeE)yk!jd5Clc|7)%Lbne>$P)54>rWuj1MnH)eIX zD?J(~%BKiTW6HpRtu1?Mw|Z^l_=XkGZNl&fBWUo=tc)$E zXge7CGbU~(T${6u+&`)zd+kw_0By<3H>#hb1?P-txVS)KOdViIMb_{)ol{uDik2;K z#QZ)LHIp4PwlO7~2e>2str zkuyr7xi3m!fHc!HOqFCdna<2Vm$yZR296?A=ZD%{G(WOp&FaYV`sQVtdovVv@w9Fv zZNCYSZ9cwaVVuki(cbXk-Dx@=&K9_+YN~IHpxBOGxH?ilzd5pS)haJCcBhQA)AXpA zC#P+}bO~AQr>{5J+G*{jZBcV)Pj4(^Y-WTotx08(Tm4>3viEa1gJO4T%cd_hP&Exqz#>I5=QPa;yO-CO!J$-bhv#1Np!o^&I7z>7(HTT9(NMN?) zq&iS8{*{ip-n4O>X58G-mulBySgV5GJE zv)4b^VnZi|q1B&qP6y4fqEP&%d7y3yYThtz8X=||Ht6(f*z9R&)aCTAi?az$0CQ&h z?53J)oddbfaJZi0Pgk_GXbEd77#)BqZC~N1$1t`~v#e}elo@irV3lb4QoB|(YrhD8 z2F+Ww$L)yIyd@S(4~n+e!U7{_3xalHO~AY~9NE;d-EX3cx{jsI;az4H7b`P&Qzx|* zBgBg}<((#~9u_3^*as`%tG-}SWO@s&-Q^;11pJqnKHE>ifWwYb3 zHtd^_RNDy&6N;R%5}0GNOhJH=md;JgM7$eT?{%vPq^l*0Ce9poqQED8LnBshuUG{(mDoLS$f zaDCBXu5Q<6h>X)>joMPo)P8NG7b{y%$!tftUoF+zqA(?fEl3!EmYJ)!qF>AyMzo*X zlgzj&GOmuZ8$^2R0xDWtrnaI_U4#i;djG*^9yK;%J6SVhkCz6F3+X-}od85`XF`km zIy+HJnhl{?P1ma}mfES2DHsBLT}#w%c>2P|nvhds*tz*^fcGH)&ah)$#`1j1SSKVg z%y`pH)gt%YtkD^h=1y0g-CIM{>FtJ8w7V^uXiI0ojCY*Ft>QKY>x26QSb}n|g$A-; ze+V}k9$JJ~-~PbTg_N0TnbyP2s@~3S%y2t5nfzd8#%&U(rBB*|K5lrTqPgt_LVR3|mqMd%O)&`w-1GWUQNQ!h~ew~W+TWkH_m!Bpd zUOAx0@>Q!b0~E59Oxx6Oq*P`aq*>P`&HbF|dlm$%ZHi{id+d&a*_W^jQ#1(_6t-?# z`!Ih{2NyAu(_ZXKaVz4$Dw}DqunW#+YO2j&GY6_MbD$bC2g0`%(-(7~OtEqoz)L85 zC++3V@Ct!*_eg6rfsZjIxTC|}=XmcXEYW*6wRiz}gIL-wwfe=5dG*%mScD)oWVD|!&S-VoX6Blj{+sR9Ie4LKJmN6nB zmE64ExQ(0A>Admzf?b|@*^6+kjE5dJndu!YY`%KaB6YyMna#-sDeUc`0h?_%m|-Uh z&z5yfX1Oohuup0*_pb5sp1ov9^`v0V-eNe}fyXc5^ui0yXq=ffn2lvRro5*6;1s$w zflopC_V3Kn+smAjie;AU>E0`jC4Vf1Cn|OYk0MKO@)3_YtR-xi+vggHgU!$164G1y z=r|B5HgbK9Kc_yuhGP0g6Jk@efzyOIYCwaZDYWUfFgs0F%nB0Ejy7@vXro?E@#TZJW(v4hkF#%$R^p37e;x)0m*#8H$v0o*ZoKjih_um_JvwCRZ@O zoJSZ3s5iTftlGtt#j6{1V)dLrWC|klG{e(D{n-bYW^7a7>9Wk&5+}rFK*0VAW?37t zrH-u->?i0J-vrnU&s^*oL%=e`OF?$GV5^9JJ$RSCR=hKo{gsh@HgSX}V`sS^KQM@-$Q5 z`t;O8$@CkW*MPHor?efIr&<24j?*&rb4<0dEH1kkG%Ca72n93EHWRL4%x-?7T~k7@ zt<_CKCtib1PPM(6wf6a&Z~L3;Sf!YohZIfLnovgA^Y*gYfM;mt(PU=PA(n6)II zX_#cOyJx+b3e4*Hd^>=6CT12@jG5zp)&pJh5W{71b?-mk1#`tt@un?aKDjH{6OKv3jQef9rh zQ~rk)*eCJ!0PQT2{XwSnaF^KMczQM8vZjh1X|rG84V&f}E}zD7fZe|-W>!_^hMXP| z@n#4)oP%M{y)n3nqtNQ=+;%3S)8BqY z7TURkW9EKbl} z*qlTnQGQQEq^}bL4O*X<9$z_4wZ@CgtgFms zi`@&cW3DwTU;MQ;E8e}#I3CAf_-x@$@%~w#X48wlHELIf(HgTnjN0{K)GiRCc7+(_ z5|NtItl^;_w=*U^CspvicIa&@aTdo0;0;f9l9)XVnFk&iEH;}51^Xwp#xp_m{B}`{ zWqc|#DP;d(yMOc0ZvU5+Y-LYXj&0GUZ`$m&QMO?-3enuWRlR+RVB4H$v3B@Ib7rw- zH!M5+)~QqWXN3bb9)FoE9(V+|OIH6qHr;h;%c|EKT5M=&)0qc1oR~D?A>4x1d_cL} zyyddIzA<~MfRJrd!6Xm+V|L#~(fLNbjd%kJ%OdkYuMv+0VA1u{)4Nv~fy{z2{p>e$ zXRY0hK~?+T+A=e;{ikI}zFl;rCq>+Fk9T9M7nP92J5>I+im=p6q*~IQ9-0((NW9G% zcC2`g(TiCS?5f(k(5`iQJI}vA!=i?}-!E@Vq6_lf)Dg zuP#M%9a?f7T5}z|SJpUWn}rS5SZIzL`;y*%Axhty=5s9Kl+w<4Fx<1R)(XYt;VAz{C1p^Y)*4r;(!~b~31FW8fF2`1iEYMzey)0-!yPc>s6JdSSZQ z%jdie1!X6PzDMJWm#jCvuNSsiGw_jHwXLyCUHR+aKzT|(O=3DV*-4k2Zt%|ruvC!i z{trsqwsfbTlzP45>a7d-)?CIWxn@8JSx*@}Wn`7l{mc-O-C|9Z*fC>zi`RW*ZIZG# z<6Acj+*iX9y8-QWinhi3;#=Z9luNXG&!X_y0(Fqw-lV`AW_S)|-Y?^O4yMcG4ug`*{+R~pg}us_Tc)hd+g)}; zz|%qJ?3uOKQJQIJvW){~uO?y*9Y}I_vLoJ(hZvak+1)(Ti5g3fn+cj(PuaOzR>`Ng zG5&Wwn0CRo~jdi5}T5}QGCf$SF&wWRpuL`RxPT)3ykS6 zZK~p%S#4DtF{AcXi~oHR%o5Fn(R;F^uA7~ZUEW0+qt7Hf-X>p(-{W@fM5nS)Vd#;Rgq+UyR9=}oW$AiL&jDYbQBG|{<@ zuiq#OWo;e}l-v9>n6g2J!LSP7wqwi z_Pm2%N?2c1xHGtmcV_$X3*hRDhMqk@zW#6+ZWyO`EXGAv8c!@JDy<)!6&K_7hez2v z7T}`3XyncTyMpH+C8reOn-2Z)@w(ho2B+biUo`UUP^MH)`1LOy{rMvg7iE@6rNM0xw;nFs#{*+dxE-mwT5zOp{9plB%W%&z+m=@`366cvUcd&e8N z$g1nSO~xKs*4}XeF6I}N@66vd=$wJOL+85Z4LCpe71V5f(Tu$MqH=#-K5KNtJ43tN za|Y}Vo(rwK^#w&E=Oa=6{Oo`p?B}Au_M!oP_XVDNq-cP@j#-`!KHK)kc{BXx7fm|5 zVE+`RzX%m7&JHw+FUZHfU|xGcQThDA{%}t+`jd7J+!Z><-96yk;Cal=?t-Gx^9TFO zhhMTdzo>fu*z-;|VTKvGjyllSZdU)=Sb28)>x9nyqVU;+vSZG&m+MS8={Ax&Jq6OFJG-v76^+cQC)SPEM*Q~r1l*7H>SJY5IB!vQ+nQ|eI~ygI z6&}B|6X6;6LR@>t09^R%djn)&Ic2paro(SDGmP&3{U!DMaZvWhG0WU{;69OG&gzeY zcHyPl@6PZ%cYoN{JrlP79@>s~kKdi?JCM6S4!^$N-JegU-7gPfxcoAAvm@aI4#%ZC zePP9NCp2W>^8CDlQ1O7$!0^Dq!I6PO@Pp}x2F45+2iwR!{7wU$e|+xu$Hxl&q7yWu zRmLd@7yl8&H#yQ4GRFYNewDoan({pO`;Q>LhcR0}WWMy3v2wh$zkr&#Bj^mu(Pt@S z4*XU?j(@(x?@!Fsq51K)^bJ9LQG0g$gN^>Yv<7?K%z-Z^&CwrX^f~6(gWp4+IfD46 z{p|4hW%ijPh;M$+_8*!PKWja61o2h5+4{vf`SX93F26{%G)KQQCw#xAihF7JN`^dqFNAN<(=(c>${u&bvgcZCcc-` zTA7lu;Z4iY=PWgI1o2hg+40TDc;YIEUzN%BKib5Xv4^8`^k?PhXG(&KLEN1kp8d90 zFOZ-!H^+ajiSH^;0sj6Y=+x)v*BgEQ{;NIey$i#j(~zUzVDwj~^&4{Z7v|_M%<(@q z$NyLpUZz%$&Cy?yqrb%Hx23g~q_21p#81{`m)Ei!|K&OU%T0I}r}MKsM}I|*{tBc2 zX{3~<(n{)h|O?VHcwbDN!WL$#yb?5Bx))@UvE6)D;ksyBfI9osc z>mCYkU55mk66=jfko^fUe0$?2T&BIulwqkoFg&(!}Z zIrsR`l%fKl+hoM)=H(Xc!6KoH2xXK ze)O33Sd6b755V7l;K!hH^tU*TQeYbmz~6ra@jI*8J^0r2PnCC|4+@yyVa?nTbheqF zW~K{g(gDc+BZy!1%nolmYRn$A#DMvs*32D2=d_G~tDy6x9QlkKc}I@?RETnQg2X^Zl14HyL@b^H0fa zH z%kh6e{>bQ+QvNpm<<5nYH^8qLtFUiNo@L}o&JQFHF!GVky^;awPj()c%$8S-`Qr=p z(82g#&5=LIkq7&hl+-VS%>2&7S?p9fQzb7lGCu4ixx>h{&bplYPtB3HOaBd{U*}vT z`2r(PbFPy7tdVCpw@BV$$A4yyyeLOr zrTaNADMoJ@&GGM-Ka)|6UuHfh$Nx(CZ!rERIyXzU_I$GQsASIMi!nd>W0wC0=Ra9; z)EN=7^=0d`#W_MU^IGh*IkP2~8yR21BAH`mF~;}qEIID%lx*AYCg)p{ZTh;LJF@h9 zoTswn&Cc7BZTv|mFwmxNkckhi3{TWDKfY0(NLx%HZ}JfgqpHHi0u2chkY>P`;@0~u=?H$Xx_^T#tW|lny2~Z zS)KPzozG{Lc{huX+tQDln)O+u-t2ejy_9h*t*p*Yq5-H0|3vMj1&lwUEwCCi8x$oR1ZGS%b2vzRX*{KA+VGD5>Ahf(JMS5;ak8b5 z7`OdC4C8Y(LEE>1e6GHyi(aUBI+=c~?sH>VZcdlEp7rxR_Wj=V@*KQ(zkGqD-w*KI z5P-fx$a6u+4Am#5-!{*3TVTI%pl} zO1mt{dM`eG2Pz$rl6FN1x=^{FJPGOMzIe5 z5A}OD`RopvL;Bf;7y~mJFzk$g?g{GYl-f7jtcZKFUUc(<&#EmbN!IIdo)%ufGvAnD z!`r>!lD;Q zmY@HQbV3j4SZ}|$%oj>pfBy*J^@WjV{QU7)^E875Rtor0!C%;UdBJ1$$NCC>X@5(a zTugtkNn9(okkH>Q`O6}wsSMAA`z!lQA@9dFoV?rNr~5drd-3JnBKK!FH^B989P`6? z1;4ewDqMg`<~+DlZvlyL3aR&;!iPKOWd%>#=OG0c`zt9U-F4&(nfsY8hQoPO0VZ#? z;26-P`z8Bqp6MMy|KHmmynhFYa7RjJIAdN_IU`)w5B*ompZR7v@fh>E%IhyG z-#2YI1#j8>7W~!zFe3Fkq0ex7NyJ+W7Q8Jz(BvQKHsu3`>5ue#BN2K>b~zt{{|67 zZt{083H?V%=wmu-$afbBhcFIT(>y11eWIYa|41F&j)$%`DH2L^I z?fiNB1E0*l3Fj51AM#buXLw(f9#j8_hxS(hJM+?$Qan4wi^R)Bubyt8{DR}$MgCjm z03t}I;9vH~T?=5x|I~ehur4crP)s6yBgwyGeMP>Hc1ga5c1a@K#U#RMBoWRkxt~HJ zo)!}KwUfB7Q~rD=z#Zs{BQMmSGMeoi#` zgZrN)=aDF{LK4cx?qKhwls~rpF4N8QjX}AXbmM+gFW@xlA)gCG6Atoa?nil!q&vbN zN5Z|D#C;}zkj;JnRsF&JB>5Y=hI_B%GsKHYq~mhQUVQ(Pz09J%7a!tTrTaICrXPX( zPRUo1o_&1gICoG69~8&1exW}}tQBX8OGRV<%$MXnAnl=u;UGPxd_Ys4e^fcWrt(4g z&7mI3Z?W``ClOwocq)l>nsWNP?T_gHWx1bA!u?X|Unky7BK+G)+N@Sm3d zbMk*#{%?>de*|gtJ_XZujZK_7x(5T;*#ObcwUAIU>Gaa|PsjNo-9J>hVzY_yvRv}$ zjz$(D2L^08p%WTK8Fp#P37e>s{QBr;jD7(M7snVhPGb*2ami+JgV-f*7k7($#H+<0iuZ_* ziN6zH6Wu&% z%fJVVSp1pzl=!mvmiTWmhz^hW8!8?q9w|;27l4CRU2ah>OKFVvE=#o-UpzUMgNI-YVWF{z`ma zd_(+)_?b8uV+70Z5bg_)YP<;*Z3K#HYkp#J9zd#esuudWMVR z#Ts$0xLiC@jEh^uUE>#Ia(9c#OD2JVA_!N%1W4 ztKzrC?~6YbeaiQ2OM#UcSOX63=Z;9U%e=I&MJ|n&= zzAOGm%*TY1<#ez(L7XDiiz~#F#ZBTiakuyl@mldV@d5Ek@%Q3e;)f!B{L`eTL@X1l z#M$C9ah>6tCKU=(5{I+tJx%gZ0kK%jcf5nMd_%L1b#6@DGxJq0nZW1?(Tg2Vs9`S1NhvGfrW8&|` z*Ts)S_h6fzX<~!eB%UmuDsB;XikFDr7w-}u6<-$L68|mogFP&VVlgbv71xOoF(z&j z6XFHp*Tl=j?}*olH;K23KM`LL|0MoX9E^n<(>GF_Al8a=#YSL3m zJH&^?UyHvN-xNO(^RUo1b}cRt*NN?7O57pt6>k=QDn2UyR@^84O{_W8#w2gm+I9{w4XNyb4wPKgJUED415w8|+5uX-c zA%E;RuStH7yxno~4^ukGyB+6H$&<)i9H&C^O!8)|CnO(F-sm_n$(zXs9H&n_P42tN z>#+|c`5O6OFMePCKbHSP8!z z@Lv&Mlm9#N|A^eX3m@UJ8>&c7o+(`0C_InTJmqim&jd?^Oocf$OjzfWAQT*{sY4x^F_k{ zU~x1F|HI{9MSdCeB>6aTJ&CneABp?7iRX(KiC-rX&tA#biZ_tB|2FX+5_-QN&vcyU zB)>tT9sHGi$Z`HlBECSGWr&3S!D6M{YsKkuUo5T^Pb3lFM)FH|4kPZ6`vv4_D0lHX z@rUxio80O+zm)uf?r0M6l#@xvnIgHKdEc(#Ys7oRr^MI955$8e+VIDV)5N*r z3i4scIf3lLb2Z5c66Mn`?iRlyUQFV?D=I8C&m)oVYs7oRXT^8Lfs?FWnRv9gT-+cg z#ogi+;vM3X;$Os1#34u6@WbL1@mMh`CP?J>40033E6Lv?QD5H{e<0o_-bv!VN5$vF z!Xxc{L&Y+2f_Nl}`=&`gTAVBQWs+Bj5wTV5Ad$|q#LLBN#e2o4#J9x%iX)D)_a7iS%Afc3`}a{CyJTbBlO~+#i(ui1=V-al5gX*bLUOa%DsB`zN#x^9@nZ2-@d*;)KTF0O=XDb4`8SF5d?J1> z_W>1Fe<%t6Qt=QH_g9G1#Cmb5xSB+K8^~72>5+V<_*HSQc#C+S__+9@_!seg66yI+ z{8a9PDy@5=h~G6g@gF9+Oq?k9TFKMIW8{9U&e|Crq4Vz>OylDtbiU+!Ng zQ4Uv&Kal@z;!jAF&*S1B#P`HtmGv(XCyNWkQ^d{U`Qo+Wz2Z~iYvL#3kZK$L1o0RW z>1`l4;Q6)WQ%RJ2w}>wqGkRxAK3hCj?t3I(CVpG)H%k72c)Q&1m;5vFx8n2SU&Ob? zzmrJkXJTQEl}D0D=V-A^?)Y{;qhBws6njb3?>5Q1NZfy(coB(mxJJBJd`f&(e1}AO zJ|c1dr(&Si-alNd66cGn#1qAoc%k?`@geag@m(=6#fD!Xju&T(Ys6E;&Eih+GVx~d zJ`(x(Ie9Yr3(5OPX)Tv$$Kl zLcC7=fq1|8g7{CdaGDM0aB;DCqS!5-CGHWwC*C7ICB82XnQp@!A&wO%iTFWUlm3Nb zx41>zA>KwJ-#;bS!wyK){|n+P@_$S6yW(eJ-VCchkVH5ok`ERS7mpIFN$AZXQSJ?r zSIECvTr2lB$sJ-BiFBSL?iFtr9~WOE5zpVqwOHRt&YuYx`5Ph@lh7L@d7OB-+^0yM zE-n(6iYrLmf1>1w*e3U0$tiIgiF{uq`D@}8B+_}6c$?gREZ#5vOnj1r{%=Tx_p01q z7vB;8E`CTNou8A(<9&vstvp7oB;kInxIs*cXOp=9D`Yd?my&#wc(?c~@g)*^?~8@U zSb2gtS6nQfD0YiykcjUbawW!967}|7@h17-Dfw>k0l7ae`6+Rq_=flviSR#={IOUx z%es#dE5$h^(s6>=E1oA_DgH!!PW(VDoo(;06c>vpirwN_;`!p$B+_{!xdQK1Nq&Sx zc|0aQDfbs8zaqXS_rFR0r}&}VgL7;+1I5uK;+rISvREVc*^=wUMRH#y`FQa}xo?!b zN!%`;A)ZYlzDvZt;`il$i+BeKJHJoW>i1#cC4w)rm97hwwhI}Lp?{0`Ao(!f zw^PT6zFB;jL_Cj^u$|{5|A9nXdsqBW?m^@w4}EPBiTg&87@Mb%NXK+>mfRPS z&|53EiwP2Q4dn;XEupCimZw(0gCer6CDzG(p5z7M z61lG<5pIjvFP<-6O(MP|4s5g#o#h~|3I;jL_DL# z$>I$8&l2lNq+_YrCTWif@VUiXVs{i-8q3JXahd4igU%4-+SdM~F4z zRB^UgFD?<6i)+MnVpNQYUE*eOt9ZJ2mbgp2P`pI^miTS)yW)-FZQ_r``^1ODUy4tP z&xtRIuZe#a2RJCd8|~-n$Pto9iARyw>vIm^Jj&PVbD`iG%2#23SUgqi7Ppai+t2%u zms0+={ag|G1If3E_lggSzaeqo8{{|b=f%j6DeuAlg;*MZd=cLB5yy(-#UsT^ak_Yn zxI%0eJIG!3b8}=;@)q$dahG_hc)55BISAvDc(-`J_;c}>;>+Sb(R|(l_rERqQ_;z@ z;SMLyM0*y?#0lbLv0AJb7m91iK8&woo7f?KiA*}qS>kyjzbA<9d&JAc?~}clr;B%r zcZ*Mp&x*en`Mp5AkKYGGek?jcD-RHdi-(AnVy!qwoG&gBmx~dxRoo_iNxVq>n)p4k z%W=Lh-Y(uL-X}gJJ}>@Wd`uXYsG%`{IYF_K;{D>!#b1iQ5uX!Z5&tN@CB7?it;Xk4A<=xU3Gy(>=JQRE$4aghr-`%0 zdhrDDM6pF|7tavCES@J`DDDw26K@oMAl@(jO#H3*y!fX0j`+D4EVB755R1gHST0T% zj}hmKi^K?t=Sr>OsbaUdQ#@Dvs`z#BM)3#Y9pYW$uf^YpFN&{-e;5BHek$Ut{Y|<` zNvxqpiets`;!M$e{%Qr*OOh9hr-&_LT6>k*p6(1BI6Q2-Y5&tOu zQ~b9$1bZmV&oJ>2@i4JmoFvwWQ^h6Xa`6Q5M6pxs6?cnY5w8@l5`RQCI*$3=8F;_s zpNTJv`@})RtbUyM_lnnxH;E6CRoD*{pAerGUlRWyn$Oii|1HU%iFw0qI0a&nI9xnLoJ^KuUss$i z9wV+0o5gnVR52-T5ziMd5-$}m7jF}PEZ!$RBt9lSA^uK$QG7@IyBNU67Sr#FBg9c+ z1&QY$HR23$mS{fD2mj+GpDad2^Lak_pC=BdVdE`j6KXH$EnRv5! ztN4)kbMXZdYiaX2LhyCTe-S?sKNDTVMg4qntTJw6=IFJgq-L&%f;2=TCqiJ7r!K)C7vfGYn^-I9SB?ij#Mr{hlw{F{*SWUvNW{^;t zMxH|`Vid)>HiIFCf87L!S=>&QOjpWKT4lcyp7&C>rB_6^VMkPP{?9S-eX$&uyUhpyWry zr%5F8S@8w&WpSVQhWK~!U*bpNr{W-%JM4?!3rG$X&GR3~Val+(a&eM4S*#Z8#ChZf ztk1;7Vxzd0gx&Ic<;V?Uo7f?CioIe=+#&81&lN8aFBbQRSBck&H;6Zjw~BX&#%__W zdnG?cqJ2FfJ}o{g?i1e--xS{wKO$j7=6RDbCMyrfvm7dxiX+9*VpuE}&GRR;<2uUV z3~`pYm_+++6r04=;s(-n9P@k%G|#67!M^DZ_LAsNQ{q-~D88Rh+(Dv!?i9}@N8)pq z;>9HT+dZOro`rebm6XA&$THZ!cmr9EeK7G>67BU4@h%em^1b4NBpUZ4;$tM*>l5PB zB>L-T#TQ8Q+b@gz$QgM4DZWXfAAd*uJBj}MU*bpPJk+0Po}a-N8U2?ykHq+}KwM0&MSY7+B--t2 zaV?4Vdy=?;MEh(LJIGelzt~H{-c#aM5_WsKxP!#_vQs>l#5i+-crn?F`WG)FVW(G$ zSCJTht`lz{x1#>VTS<&ZcZhe97?T}Nb)MwzZfR3Mg5EB z`|2WBg#CX+!rosi1Yz%|A`i6l?~}0aw@BFah1@5E zJ)8YH*zrrqBkgzK|6=c5z^f|G{o%Ft-fL%N?+`)~AdnC@Awak#0Rp0eJX5p~!obSn{chN7zU{Y2E&cA<9=QAc}(MplLob+cdS$B4-E zC81v-qAUYK|C0#&$ufb^FNX*_DiC@q5%yFk^l~EXs$J+#;w03U(A$VpW&Q|xYJ7&h zsqq)I8h_c33;&Bm*q<6_5wFHsRE`=~K^s2&KMD6C5p)_6c9|n|gjkCEOz2`_xr~$G zuOkh6ZI$?T;zG=Oh2Bnt{i<;b{Ch~(VqPophl#LfHEtkYjT^9Qb-#j+@cvvT{W|D5 zq+#c^M9_7_m8dVFJBepvzAd!sPhtNDg;xDvBkDnD)qk}}zXN%y-@$#M`VY{m|7gcJ z5ODHqB;r1~Na)Q(+%LO@zMBYRIwbVdMBG0w3H=HY_t8IvHejo~pE8MukU#N4)VI*Z zMBHCeh5eUOOz^03fH zh`2vr7y2zC?o+iNCiFGf|KWbkB7)8#;=Wbu4?vfY-i_xdiLWKzh5JwFR^mN)ZW8(; zBJS&LLaX%$yy*)2HmvDyY6kZAI@qp#{cY>}jl$NZ{wAZaxv$SC>}~5TWME-W>};Nj z_NK0`woY|A!(av+DB(Jm$VsdZ2#RsL4vvtMXY^4)33*(H1`Uqa#|I5klt-o{V2_@m zQ@{R8qjB`lm#401>P*0)PSjARA0>|T90fEu3kdKW3Y3t?bv)4EcpQHs&Ey;uG?*i% zrW_eGm<2-gNkLy0sm}}=%%e{a8XSXTKh!xwgJa}GA*V65nbfaW=L!wxR%gD%^P*Lv z#{&&cfLPY=`3c$vQ9Mm;Fs zNn>XUC5(1X7fKkF_@#L>fsz9cqrw%!AX5(-Fk6j4G(Ih1H{ z+_7v`4i*}mAlh!x{xfRHa)OYnMH8MQ9TApKnD47pN! zP8;$lhgj8{=yQjT6&-&F&{uFJXmDf_E#_B5%lSkJ^N7ljlZuYTYLs zyZ|bR<<(Bhy8{94aumDdg%PLaJq5qJp7}iHZaXdSfJfdO$jd?)^~2+2RNn94cgs`H zZwS*)*U{e);O5&7VxeXN>U`ga-(8M6tBwo^V2CaUKl2zSfd40*bJ z@v0yyuNZvzAGQ0VASyv?r}g9WtXtj=$SVL7^~=Pi_2W4yZh0lBh!ibM_((4C$lDKj z+79p-9+lVakyi?NvnfEFuIKYS@(#Mnn+0C2-}N4O>mh*U&`y{4n;v;bT=MYBBP#Dl z9(lVVuTcvVK9c;MhP(b=fjsKP`eXZP{eJ6_#||Wsz5K=_ZvgUid*HQ1RNki^c?%(r zcBP#z??)bakxygx5&^T;kM9q_8nu`8khet(6F!nz;B%L^81h&SmNyTVmUn_j9^We_ zvS*(6;g+}FrC+{F-q{{`eC}^Vymri&?hKE-ZIGwigZ-t}?*fm!^@y0OBshPxJf3&$ z)^9iD*t9*?~Jh|n@9Nc#_X_#Oja zzskw^qjmT(_}uy4k9_BVh2@xrOXvG*k37E5C`G(>S{}b2xb39}eASu>h-l^BgU6lk zTgX@USF~51FVFFI%ljeZwTldbmX`!Rx4Z#YIq(`SDzCsJFM^Ksb(cI{j(m^2;(s{b zyjd?CN3?$W+;H7L2k^dlyGx$dkG~^w>-RL|MZiaS?BBG!W{-Y5An!TEYp3O%?%d9OoWrIO(M(fZxsk+%o( zB4D9@yq~l@e&=wvZviUFeZOgW{GQ?Fj?va-k zLcK5paa!JAJ@N)1ZvZ@$SB6W=ONGa+-;S{JjaS4eKKeu8bL)5XpI8HcaLTK|rR7cZ z$a@ciD(6Jn>3SLGk$2=@&KeEMtHPz_ReIzd#pH%|tR4C2No>1XM5yv z9d@UZ;QZ0@c+R}LygMK-0v765gGPju^xFxAy40Lr-51PH_s#QCCEb)N1ZP32_AV7(~OP_r@Q2> z@W^`y^0ZDAs^!&t%}@;FYp>+dM!HByi`Et~J<-SsyI^7MH5HSp^4Ug42f zmyvj$bFYW56MU4XozC|jPrf~_dN~KoI^SnJ^6oxHzVCYY4jzLq4F=_|mzTij?w_@O zDd2P0%Vw8;%`W{WdE{kfI^({#ybC;h1>noqOd^kDg(u$~u6)~skL|t6Bd-?nvM4~D zE=RLR-fow?)!^0j%uP$vqx<`(65- zCw!Fuj7Q$xke5RN;&gd`=8^ZbOWqpr>hkjUp6>DPAC9m5hkG~6b%X{${ z^7uPacm2KPl6SsK9)CybmUk5L*hOon%X_+qj|VcczO>VP%RKoGAYa{X{b1Jh(g!|< zW166x4S5T3Z)vCHaXo>TuRt>aHQ)6K`1lQ3JI!|&_!zAFIp(W%Ag@mHLl0jH_*%6v zpq9tq!Rj=O?g8KX9I(XcIR0+d-5v(c^c+Bk&++3zT$IOhzUYy64sOOnIy1y;dGC1m z^3FAkG1*`cr}_Tu$#(z;x2_!N%k%n}hGQ<>t$XmBgCfVzzl`HG%fom0xA@I98N_M6a^chASubKO6Ygp4bkR=+ zUtD=lgMKhT>bDJ-)^92J5Zt5F@BO25w!5a8FC9_aGU->qcLZ~o?ePB$7v=GOW}a?4 zzyB!Ks-T{=)AEosjxXyB(`bM$+G)O?rp|`u=7#3Zw!-eBNF*|S_6aj)oG^1%$xQf* zi;G=V(prvzxY5}?YB2YHZgYRr|FFOf>+~3vA;Sj6ru0&x6*X(Q9nc?pR`41ZmfTV zJXsHD9W~y%(U|hVv+;596m_GVX>WhAU}>#Y-FVT^YI5AQ=G&WE8aG#qjsxw*=9Hu( zz9~zO8vguet-M!z$MptZ366WMx3tVWDr)>LH?$t^50sjYIOgHlWYhUOCpK6n-+kA7)`6G{hk@Vdo zldgKJ{p;W{r@y-IzxFZhtO0v|PUZVb|KGpq)T4iqk#}aVm3IqkMC`}6C@GGf_V&?= zs@kphUy9n^ru2Mm&A7&-YGZ7pV-az+UHEK3)pqJDNqH9r}nc@`>grQ=kwdAK7f~p*UhXRR&7RhFR<7Gm%r9~B-R3Tue>?F>t(b+0IeOI zGVF*k&bU6meRTDx>i8D$=4>kqbn1TRz&DBy4Lr8v?tz1wZ+&3rz$3+%zJFZy zx98rTYSt%HKVw|erpB%G0v3v_+>5195fcTNI3=(;iN#&D&^B_8npBf(IOl z<1W3cH|=rXWb4RX8-Jf`PBwoRobq>N|3{^LoO_wv7Fz0-#;4vk@}3%aEOOVt!HB*W z`qcfNwK$;a)%xI&vW4M`o*#HRGOB%a)Ag#t`q?*wQ<${cEZ|C$t+om>Y9t zjs?~CFK~ERw+B(Txd)7KkXKB3``-+Ve_6F(hN?eu@(P}k*?#TDQ+xf@`O5l+Rr_Ik zzWdW2XW8TX)}93k|2-6_9(p)=N$`VyYv_LtJ?vcL+NU%c0vy)B@!{!542R_IK%1|f1XGc~7teNx&lK3huZ~}QIjpQS{&kRn1 z*uaw*-~CgvFu_BR{c8mId=~c!2z(0@X8#GJwlKz*^aS1u_ySfC83(wW*1vSr?T+Ma zNrH%YtNj@Se7X{#MUY(7i*?FaBTV84n2 zTlQka2JPL*HObzJqT2S8DV(n)U5&&dZb|S$iW>lvVe_Z{rd^1?J|np#Sd+}PnW4V( zj9~3BdW}%WIwQDv*j)J2!rz0&!6n03lC1DX%*cXE6)`G&ErNn|iWnXKFKThBBC^8^ z8B?EL3jsOd3s6D9W$E=GBH=vLUU0c0@8?r4NrWz^S&X%cBgdP4fa!WczrAY~M|DL2p ziWm~+q%)~j5vgH5K_)F$#LzHbS0_2Om==B+Rhs0~;;>L#SBsHUm%b80GmXF|MxEj3 zYS;jej!!x(Ee}ek2KfD8=uG@cV+9z2>D09$ZN7@EVq~k1Ok)AksJQb-B^c&dLQ;#l z6@2!^h&AjdP_w43wyrP&|3Q6M`zarq6C5uoWOo$tREd={l7rzG_!b76iu-x?>a8%`BWBnkfv4U}|&N*4%Q z6taE<8Eur9jTN|!`ET%ZhHs5VM6#W9QSwrFLY-}0M$#q2+1f_;jUr?D@$*WvZ6m7Q-%0rPfB6d&Ssgsfs())81>?<*AexRKo2F6=R2=hYoh7 zN|O@iJ~(!jBGSTK9B)^rvcA!F+|t8d=x<_%wtY(S$M86b7fFUHajhZ(MqnEXWiR%# zLz31p*QAca-D3Bk95J9L?g`II?Qh>!VF)5sxo&d0v*j;=C)+M911@O zVdhoYv?3!sfg-QYrhNs%eN6rJY*hu}H(-wDwMh>$v+#Tcn?})4+QUN;WPU4?H&%Z*kD1<*$zEYk_zo1%yj2nRhfhbmdAsUX z_J^NEWt(>>;*s!4$j$t=GOEYI53w5W96|Fq7_OlPca2~J9|~{fO?3ANn%7|?u$&U^ z@v~|&s+sBD;ViWUWnd)5RB%rK0nU@NxoZkShUX$Jf@hI{Xyt}~LdEt3DycJjrg{da z22@AEUw4={x#jSEkR#_NN6t2IUxLe#bCVi05n%3`fd+Q; zIyW$%Qtt%g&6Gf?=LQy2!26)zVVIJ7Zr}_CW}y5-agCe|VisPjWtnxBpYOo18{d!E z>}NX_03KvCnmeAEivz*Yxoo#;cz#9Ce0V+|0?!x{ZlGs7Jm02=*?g3S zKbc3_A67VZ(1QST*S{bqzpMKK!(8akcn3kgYdgpMn9W<`&tP$$LQ%LpVf=geV=nQl zVaK^KkNbimmie>ULbhre{-8;<2%9)>1i~MI=SPmR{tYL>L7VSmQJOL(I%ZT5zsYCYpe`YdT7)w0Rcdl%f0q z9wYPHEWPD$&QYA)2Te6c1f;<~syRab<5eNJ?Myb4GJSS2Jd|i;@^ilVA&mr`DK2vt zH$WTC@f5*%98ljtZT$(?2#&Z2oX$Rwoi8WKBT+;nf_6r6{C_v=Ao3JY=1Y!9=3(w) zyd&}@UoJ%!A>|ZYj>wmM(=se#f2Kuf&>$tx` z8?)1=3?p~Utt{IbUpCFjhg|vCGUho})@?pDYK%evw?fUvXFRn>O{H+wLJ#WA;0`r;?C8hClM9)&kP8rbCc++O`>ld!I=Q;wp@CHj*R^LE z6Sg62nM0e?jqDpi-oZpqz%!3|9D=8Yo}a^`GCKkf&zb+aE3@YirZW3IJT%z6SKw&^ z*8{?}4k9=-tf8z-cs9^88lJ82U}OQGd79g#xM$k%ijWGPM&cyY(DArNwBS(=yeIzx z2^$e`7A|E{8^9Gcsnoz}2+thK?!3%xSmbg9m-!}9@K*3~Cgcb%^PNb+_afjPT*|QG z1ZTFfC%Dg4=D$!G7K`kNyw4m@k-tUCXQCqSGiOuebf_{B*O;a3bMH5^X>AuGfZMo^ zQFqS+W;X5eMg&~LKxKmaOl5+6Ed)W-4Rl)7&}+eup{a_|(L7 z7Xog^6?qks+3n%gtuaa6`>8%PEIfwTM{!MRYQhkn;RHU9fZyPnIDjPA!VoZI1vVIS z#%Gz!tPO_!+GrRF>Q>zp*}3rWrpT*=hbEYcDBAmaa4kfbGQs8W+=j?JcAm8N65*n~ zvrnjSXxjT`kjmcoz@zN_K6sS9{}3K^yFChzy4?=Kqwav8!o%C`8?Nkmdnm&{0?&US z@?MFA;pe@8FmC0yb_6cS4GrgL^rZa5%vo(809eqVJ)J}UHgZ@3b_R-g7au_AA#jBxTe5wdLms@*Ab1Rj<-djdS%Ju7=MJS@B#$9@M-UI{|pfag|ZfYO;K8aZC- zM<=w4&xZP$_pmdX<_KfFx$AZc@6U|}Iv6@uLcI3}1xqL*)LqJ~k z%1{ZrM_zVEsALSPfR}w~sH6q0$jiPgRC2kEU)tjeRfS4^4di9736)HN0r0Y~3YCn) zoyyBTFI4g^WXLOAnq0z_&Ad{65h{5adGfNmLM2zApX6oz)h>A#`SY?@hf0Pao|oMY zIY`IL?hci3kOzq5mgA5tHH@De{KFo0FaC71) zMx|LwfnfpDn{T>XTsS-=oD!x`oY)%6g zhMAO*<9J2h7*W}sW3H3q^~?i@&uaZ^GFa1*FqBCTvVO*nF{WqKoBPYd3|SdI!{XM_ zc~0u-s&>akMKM7>gvE*n>EqqfSz!|#elkzgatx!OFsj7FQ4!=ZDNc}6ca!7GOtvXu z^R$taH8t7}uq{tJOe=(8IkrOKWG|Fv5JSWZJCv0EVG&J4v4lf7C{uE!lN_= z&m4mgRb!`(bn1(tCDeTGsIF9<3wo3IAg2p*{l!gemIX4F0-VG86}n9TBebr&gPvoz ziz7?vrkTD}H_a5U8*VC98K^N<#W-B1S_TXcI%4(L`E#P8i+OCQv!{wte8+b9pT=bx zrxA|e@*x-?4t=}<6J~?xAUxE-d#^XpdEd$+o5u3VfF8$-zi|#@5~UH+a3yXxhv`%| z)8M+n2u?`^nnYqr4iiWFDAQm`EF~lnBA7>*>g*yAF^9=Gg1Ke1;$U9!Vww?ijbb`& zw=khn;fuO<_#BQEcfuP{8Lfy$t2vz$czP_*FuFiofeZRE*`tmZf8*T$vRdVmDxWq! zS9j72rBN+}^|+iSqmM5=5J8xW%ZZ>*y-SFzNQ{qKGUi)Ibt-`(omSD}9EuVnxJ;Z! zEaIF9@Qb54JK3C}gACJDd0dA8Mw`Z&1Pb#T8+~_7fM=$XTBoI|@MwB?c*C^fGL02i z19+>!i@$M>0V{C@jdi$Va_*p?sYq`CP5-&LkdzV}JzY|Cjp3$4v~s48fxLXibl1I{ zg;*y&Gl@FB5^(O-I_7XUF4$T$8Uz-I8mX$Zr?TMA4^U6l9H#LqyaTu_Xgnu2sQ980 zK}00KHrl0&PVDp=$d5+CCuC`P_~zq61fez>0gpKLG?Q?}>FUH`zRF-iKwXK3#ea(l zQ&2}10aF2p< zM~QSgTqFBOIvuZ(6-&3!0c9TaYJQzQ0-X|t&vAmChf?@^ggzoTRZ#2al*<_v8C4+h z#U3O{9ZPUA4_bzH`S47}RftQ+mBR0K-g?rsE|1nn*Mkn%sLQY8HU4j|FFv*VjS#BX zXMUDC1YMX~*vk91u&~JaU)R2&0vj=OcNO(@ukCGVGm6@~*R&P2^>(yOYhK&e(q6Q@ zySuZmXu*=x98YIQbJ6OSmZGNKHPgDfyV|C;H8pn>O)oB-Svb9@qpPKJZR=MHiBBx4 ziqv~!n;uTmj#>b?!wfkGF{@ziqvmEMlFzM_im-qw!pqMpvC{#D(*Yodxq6U6F4 zm%(r?BW}UXY4r8CwzjP*Z0Eh$0AJJE&i;n}4Lxmr2t()500yj|0s-T262p(@WBOZq zH}v#($7orf9E}Iv+T4tIOadk2Xp&eE_UeddS=HTu?O!_9H1&7)#>F(PYIEqh&1*Y4 z`=@nuah8W3*)%M5&-w8y6U)l5#s*ERy2vWWHy7VDt9rF%=K1_El^Ej_Zbq`rJ%vnx zIHp4}rm7;V%#l`=K-$}69PYzg0#_EFIjPOyFbfJ5S!OW9vZi5FcQbw6M}<9syHp?& z470MwMl5rlNBQqN@uPyKii}tKa5QlQsS7Q$$Wy96D28BRoF1z;300!=Dw2I8`v4>iDnSG*@Yn67;7RT4~@K8qE;#Co^N_ z<4=dw;7BW!%}j$Mf+q}zu#~x|#9$;?G;j6E^DN7sY)+p)UuiUjSWi_kHqYKv@wh+X~LJ3KSxl=gxTEVRNES9u)nyidM}()S5WmGRL6p z#{u{kEkAJzq>sz2{kPiOpN7Ww_vo@YwZIl1wP+qH688m^Ow{zrh0H}YC(Gh$eAU<# z7;S9U5t?||DbnJjRf|6mYjITAm$Y~)TO3tJtMsRw;$OE)wX`&}6^dzSO=qKzutraY zaz&~IE!=@rPT2t^pj0faNrHIO8czTzoz?%!xvY?3> z9Ab?dZ&@>}aXCnrSG*|GzuNTYn3>jiuw_TA@#we4TH}vnhiLjo(IWh73ejaa7G7*+ zfKPRnC>+`$!{0iWJUNj})p>@45!DjmLaQQTg&DWRIHYRj;~1##{LrD$pNV6|Di9 z9>`+D&TO<5eq3e#dsO|sIVvCMd6_OlW#HL26(90Z`ft$mBPQ=qx&m^&_ z7>n9;Jj%XQofHI%{eQZ|^xtWsx1Nl=Cly&4dDf&{Yw|QGFg8=lJ~ns?G8(6(u*JRh z@Fp^G85FC046D4Q&>8K==sC+vHncJE^y$8H-a#NNiH0`B${Am{k`*`)?MV9!&PQ;O zWgX|a-7ZT$b|UlSh^Mc-iQJCG=U_lR&dMo@tWwz^mkevvamc7h)u~w&@yt;6{69`x zCp)9Y?M{c8<(!6oqrALf+48dGr!8x!U)iv{W^vWh)0P`5L3w9e{rZ}|UNH4_Y-|Jc zRIS4XYZcvVyZYODjsEq{7NVND68pi`HDSj!aOyDZUs_jI+ki}Js+Tn^URqhzP*GcN zv~@L=t?h4j*eX_aSLrF|X+79guFa)XMSVp>by-bqRi(pR+1%{x`MIz@nu)U^;KH`1 z*0x^oN5l0NhbzizYbqO-FKei*sjhZnF*}Ets7O>ySxZYh;!}664 zW#!9^)lRt$JhDV8PB;NS`Qx)mWJd9f>BVzqltc=!;T(45Y?~CBwx*?L?Yx%mUhKp- zZA}U2{`R$Nnt`1i{r#PIw&`l^XzBvJs2>R;8vAS7MYv#w-XU(dAG z>9Y~i)Z5ZN4-Y5nj&GZ`W(t{BN2V?9i%i3V!Mqk|GHq2?_cZQ%*A1Dgy4Q5{Pg7go zP3!4K^S1ROaMjwbmi~_Ju4#R33XyshckYYQ(MmvtoZjBi-`3U9wOV#&HOiOQRy8cE zSy2+QXHaUWh|(pSuI<> zw9eJ0sMd;#vbbi2tt}T@>s`ORV@=zd?zR2IzWyd`cG}ReR+}pog2<{RgLPVuRyDdi zTO0bFR6R;N>Y#M#?Cx3}ffzmxl{X{DDy-)3!5=HP8>8Y~{=uvuDjJVu@P$ zeC;$P>Y{2z)sncjWEB|Dd~r7(wEH?%ceS-fTH2d>4YX4|dV`uJRSk>F>KD{3F?1^^ z6`{9t=fN(bMN?f28!oQ>kS&CvpQ)F=1!?8(Wa3yKR93NQP$%SM!g`IGr?Ixnt*BN< z)tJLh6(|>#(Xg~`dCk%#xc#fD%TB9}^={b5myM-tyk^OYhO)ZyhO)}adbgqXDxUJS ztKy6S1_%?67FslHQO^4Ivi{*W4`_5?T7W7m! zb+xp08a*3~45j9z8*(S*Vwu`H(+iB_y%@93mj(K~=F zU%FrcIstYvP8!_GwXNMqwzelKq<+09t)!}(y{Wmgt**DZZ~82wALfq6iB(5Wy}PNR zC4o#)u&$})JZxCawlsQL*Dl0Jq3j0DP+zg4(%lYDqs}ftqxLr8C6Vd`YLK6ydZ4K3 zvMX{kaI9p{RO8%=NRDo-e{G-9-J^!pJ}1Xz)fmf`x-;xm9bZh8BPQBU^*8mhW_lo3 znWe60r;204WFWGDx;nV)cC7Yv9XnO7ZYmW774-hv zibfLj4;5>BdohjBmYCp;ne*nbs3-Qb`xcmw^eU%eAd5D$>TcMX8a-`oy=t3cv@&|K zn%4DEgRYOZ0_s$?TG@h%!Tq4qZZl`NZ^pLHrVUQBMMsbL&dNPEQN>lefUD9*`$rm` zlW#?JT*Kk+fVL=_Gmd(@7|uPKR25>VsqDU>%fS257M8BfXp-rQ$|-8zFqP#TnX!OO zRZ|=1Yp(89w2d=Ctt)I@&w*k^tSDQ8Uv*>h)!NqA(uWaW)pg9&>SUm+>2s{t=~Ey| z`Y-ow(}hj?Wk8exn70>tV6kpp6of9-7O$0)-a^%6Uq4F8?j1d9m%cNiv)JnTvc*+; zZsAN{aKm_}FIp^jo>yI4q7vbTZNR?8YL@Jt3DmE2Swvh_;ssYS0>(xbfwBa-&YT*@_TK1N8c6tU`X9^KD@j6Z{yH+!$ws8!&m6(FLJBl8u z_XW;`7Myxu#{5j_029XE)3KfuG$?i(JWfG6D3}|@FAkkDPf|&v=I$E0bOdEc-MDLV z`AVZVI_+uc?%7a_UoALIkDG!yVBlp~%pg%JG2))44VXi>$`09Dd-gA#-F=uhqK8s* zClv#gV=V(BRw!ja(Wz{-+EvG*%Ge{u7_IAy=4f5T#K2f|M$2RKKzCtlDr;p1h;Fc< zyC?2$N3l4Z^|j;CLCsNnW1TT4U1~Hz<0`xF;dBH)o^j^gvAS7yT17?GGBqeV28Nb! zS%YV~fE-j`uiHo&8Y<1HRyHl?8s5Qo8SgH3Og&;t70t*(5es@?^1ZQ#Dm*;8X1S(u7@a5}Kph|Qwh(wnt_TxN7;AV3wCGJMkJ*HCw?E2M?>CMrupTlze)D@PF zKxYcdj)MaPs?I$>Ea$V%jD(?coc_DMx*9BXHH+PMm99V-10Mm@)EC21^oBG#ST?z% zVOM0q$d1RF-oCz$sM&~_p$;$*$65yUQ`>!kW6CYg$mw*V5Yek-ITeL_sWsM@8Vf2a zPK*@riM6bEO{8i~a~r-jwMO{K4W;ksQV+4y_y}7#y?D~GA8CygeB=274&Uf6N=+G} zX!YR-fB4Ol@!EYA&2OJsniiF z5#_1HTkNe#R|K!Lwgs;8UyX9C52Z%@x< zmwXi@LAb9hl$rx+?zD+yF-$vt+tzjJ4$pVO*)DN))T6?)wgk5NuRz?gP-6kj$SQBC}QZkQ9{wT`cvw%7;` zNm`uj3kA~yndWeFq(93XWsWwp&D=m9g?gMjC}4c>g*zIbaor@oQL8V%(J(*1TDzPd zAFlN}2q!pTILq9evf!uk%C=+e&$}|_{P=hspFXI5RHN&{hj`XuEIqz#yPO|uYvR+} zMmgeR>1|JX7^BN!t%E0hNb$#PkZX!!&JXL1&o9PFEJhdmEXds6fQE3IX~`z zc>Wy4Um0a_-(8fS>*3FJ_@idZU!cUC--vklBcAd{V$AUQvF4u7$SzgY1fj&iYAi#fkB!^1yA@yALzBgPD$ zAER}=KCzOL(T`o!F}cA~Ie+mqx~%-zfFOm&PLD^BZNJ_%hXAF{>%_ z@K<>FD-?h1E~)VFS9$oWJo2kN{0lt%3q1S_Jp45(J{DM`&dwptk;zoMk;h{F*c~%w ziwr*n`!_o7Er1Ey?fk|fH;MXM?4g%<=sFKw@1d7_XxFk`#Q4>^-x!PEh+FrK_%n?T zM6-M17?6(fZe5IBg>myC#?vm+F}`j0#P9ad`#_VQ^~KTYC!YA{CEm#|&3HGC#;%b< zb0kW~%zh+=iDQ~v&@uTVj1xWa+=?p}pJjA;;;)eSTF6Sr_;jl${<|LfNe|7lb+n^C zJR3(l(#~QyCxrB9pN@6vc(RA)79-k`f02i7@X%eLndL%U=@>6JdE&q6p>NmxNR*E8 z@;^NBPk89xcxdh@p&j)b@X$PaLp#Qg^Ux(8da;LY^w1kYvwTkbM~th4rtEZ#$Ge1% zsPg0+-}R*DZV}os4bOzoj`UwVG?phs9pm|n-&p<=3~ot9+R4AbI9X`+{OK59`7=iC z$kXhh`-DFqap@ReuMoON(S^qC9)6zvq8;UNt0L`4|3T6pfj=Ej7$14!ldwKiJMxe6 z&{I8hrH4KTG|S6AJ00WiT2K7-67Tc}CB|M){NoZ&GfBsI`+OXIyun=)DBp>nV}vke zkI^R>xpDM~27etKi$6*IYAZ(1HCD&P&oeHGqfa(&jicuqkHpcX#?OT=hE91Hzy1JP zJJ#RdB%b|zo>5^0@#|XVPyTeH$`~I*fbI4pQCo9G>~!xDX~j70jIoqnGsw3`L5 zxcE-=t6tbcSnSQH^MX~sPL#KXPVSTy`=+b&J!V|AV6ksj@o7BaQGWUArl z{i@#;v^?&EE{(vcPSmho$b$f<>eaFO zMCwvF{tL7yES4Gj&L5XRzxvgIqM`Q-H#C&5Coy%R3rBQNf)7E_Z&h0UpikVc&#&sk zSAs7+t3-)bzC@Gh6%JAHp6`Xa+zD14IZ=te3#b^+7hflX!Rx71c*3vJ zDh4g-`Ff**2d@E9!N*$5;zS-(y6S?!-w9oim|A zNc?Nk-!Y62iT6NHOngG$MY#p}!_?3o=mBIo(!fXLThZLxWA(4v3pD49EJqFzi1HmIqI^FkBK=_^>gNa%>0cnCTrUy7 z4;`uZebATq1GG2se&_`pRF3a?$^n|?V|%i^p@*Ega_C{_w}edZV>oD*oAD7~G<-k8 z7!JElCq5$fgu=`v{cUMS=-ViCJCNx+i9ODKetGw}(-*hV~n zy_SdvowM+C`$qLadZj1iDZPH;d~b5ctM)wPl#}5TATRe>$DT<~1?@)4<8F8<#EY<_ zj^J>?QN)dgF_w6tYyOjRLFKq0D1 zA&RWT|vH!pg!q>#|iSBQ- zQosq%7AzNBA;|MtnU3fE5%&r{BKR}GmjvGy{6ugVo>`f0q~I9Ae8H0i`7BMoQv~Y- zc@7=J&lcn^>!dFhyj<`q!EXxQAb6|bw*~hI@>!d5elGZ1!S@9}6XZUzu@Y@o9uiz7cPYE6o{GH&df}aQu#Q;b7S%PB)CkvJkp~qZe1$Mv_nmc<_kMjh3 zB>WO0#_7w2zLtn|w+P-PxL@!|!6SmN3;sp$b0YG$F{dM@5ldk=f(3#zB>qI=JnS_p zSTEQh*e-a!;DtoUy_|R==2t@BPDJ_c6ns$dM}m(L!T(Dl(!W5&C$l$%{(y+|9|;CA zAs`(R97+WLSR&F-B4QFSN9al-_!kOtt2okU3pNvxu1n}%!OI1&6x>Aw-@SrAl<-Fd z4@mekLjOweIU@A=gWyrYPX&ELoOtXFr}&N&ED)S7SS7ez@N7ZuzDxPtg6jph3*I1j zyWl>-9}6B5{3Vg~Pn?eW7y1Jt>t8U43An0%!J$O(Pb4CJ5wXxPP8RwUBGNArY!GY_ zY$p~P#zrF2Uq+mQEoFtijfnK$7ThPOj!8iHkA?4N68?3$74s5NsDbUvQ(~HG($@ zeov4Gx-q{O1>Y0=n237gM4o69$74Pu^f)5QGf{9V5%c?55??0aRf4Awk$#!rS%PhX zU4j<~ZWg>saF^gcf5p&KX!~*P+D)<%=_VAI=p9>~INAjf!juspzI8|^q5qg~{ zST0yCxJ0mC@JzvT1Xl^3E7&WzPVf@J%LK0$yhiXw!CM6H6ud|9KEZv0j|x5^_*223 z3;tU01;IZGzAE^R;QN9f3;sjUhX-laM^G?TFkNu8V6NZ=Nu1+$ea7;1z;b3tlI9qu}j=cM9Gsc%R@81s@gsiQrEKe<}ED!QTu1 zQSi@#?+E@)@MFQx1$i&AUPFSZf+GY+3+4$<5G)j&A$Wq|Ji#i#8o^TqPZK;#uu-sG zuu~AzKlPl1;Z7mcRjA&hta08?@;PdPgck|U6r3wqD!4-MOu@joZ{qTuU-ZwUtZzG5}%U2vG-a6zv5U_95W5~m0j399!j z2338FW}HYK^`o^_%VX{f(3#+QiJpE`GVDgrwBF*whEpn z*e%GDGdS(I%o5~@8;qYNI9IS#P`w{R{1TzL!#Vl6$vv?}aJ3*0>tOgML7vk=`W8X;UJUei zguYL3pWq{c>U|mbc%%o@zaaPr!9NKO2>w%0y*~qgO3+D{C72^PPH>_i5B{Kh^U2v4(7(pIc!Su5Pc}@i9*R_Jn1Wy;_i4dGGpD(yxP`z(MIM06I{P||V zI|O-NJ;U!6yiZWQZ^OKqCw6iE{42rV2=Xik&X?7DH{gdt4+x^zJPFJBK7}>~i<-Aa zh?vh}3aaMA#l%d^i-{O}ONn4!NJPGMMCiAYh;lR%Q4j4z)K3o)!qyW}|C@=p-?kBP zzwaQTU$~iw{%ki9{o)=X-q+kuEH#Y%#0tYWNUV1DPiDV=gmf*&6=E}2sa?L;WmDcD0qz4r^QC!+o_MN_z$h<4Z_xQ&SR z*e^WBtqkTlxykl@oqwC7>L zBSf_8bAm4tOP%kK#8(W^Xy?}j-y)*D-xEAaM7w_|I6$m*4*DY+CTQ4!+RqiJzE8EH zpJF(W-#2L&Jot&2MTC8*@0>vO{R(!H&v4)<9}w+YPDHz|CZaue5Ydj`A!g#eHxcdj zGBFFk4OMz(zE2wUxXcEYqCJTfmqMmLRTG=1! zYmd--iKw@OLLVZc{*?Vd{&S>JkFQAl>qOM2YInq|c8Ahx{tLR4?TPwrCxY%IqMp|a zeGw7$y-n!tL=^TRq4yJM*Frx{L_4T?E##?r?L642#2+P=LLb@z;%y?@r$FebM6^?_ z&~-$#SG&-iM6}x$q1AWDC1_`%Zzk5EeTCjbtcSir?>JaovC>$(yMtY?5#)Q`-!l- z9YXIU!v2iHz71>oo0@_By$-f(A9j%H$4Nj~A!!sg_hBbmY%*2Iz{1%2(Act3tmpf3 z1}u3?#GqD~#v=3@Aho7+aImxf%_T_l>t#QKlVJUiYsF~7_~>R231elQrL&53Fo!J3 zi(5!~EUwt{&|`7PLeas|(e;&sqvEPwSBR`ZOvD{s>o+(uu937TSuB`{`%6T*77z|j z=~^fli_{CvyqiXNI1+4lk z;V)anmmm+`?au00_i8`(UxjhY*i}eRbO#BiM`>+qUb`9_u3$5tLdW0K+>HHY+_9bA zEp8IK4R)<=lg`meGdQG^TY!s1^sYuBH_YR{IH~|nDz$5#QCL>LxUi|ezqg}#Z9l~R zyADISfg#YqG)6fLrEw0!i*jS}mwf2{mGkm3j&33@8`oFy6@$l{Zw|t=3y5bb5K|?i zROk{cq@w(<;UW(&(x>8b%fpbX*6IP2)AAOBa?6|RlE*sG@_ONS%j*Q4NWU(Ryh@im z>ZRp<-6L-s=rml~Y5lH5fLp&>$Ri)iiz#7L-ktEf_2c|36_<9p-EK#KTi#hNc`1m~ z`u!Mwx4e5K4xpTt_ajhld7ZBEGJh@adHCJ(_JU4S-e*1X`d#wKujPH@k@wg!)>TiNJ5i%=dOL!$BygOAB| zzsC7>qW0zUfm_~tkf-mrh)doZ9(kOXC$i^1dF1`mB`?n<&xiDG{W!0WFhHCx@8=$Q zDNV8R=7U$)AK$;b<=KcxR9?QXcbE4e$kXMW;F4GDk;mT_CMqwVkKFPOx#ShNWeeAe`+x85j9%T>MU80(JZHeRDo&?Xo)*-M-Z-^){pNc-1WEIC9fFFTEAyJ z@}9;sKlRs6%j0(rx4d1D7XcIXn}JKqd(R{9L&!@se$X!6@*aac+5zR2xa4u&th>C} zCfz{NsMG#Q9=^aa_)hWg1&_gZu7^*(?~djg(}CYr-1_min_4HbYyX`dKK0%_fjqA3 zb<0aVhP;7<}h=`1pN*cBdWfh3-sv+;(ud zIc5iCh$kQI{z8wug^-=qL>ns1^f-^zZB z=Sfb!OTer1J<%g?X94ulLcpiJvpw>*T#yV#{=zj zd5K6Kb-TgGLnO~a$YxxWmxhaZy3{d_o(|iB9cZWJ!6f7OaxTNSBj}=?=ED=U{Pet` zcU56`(e&9T%$RY)%vmKfBiP}uxY+e~_UsZ;Gq8O?3Z4c{roxQxxdQ!+L? zVGRFZoWCbHF5JVAz@i5~HH!V4{R+e6IzS#e-=eI|zC~talq>BQpL~8G?ctPa;1@X$ z_!ebv%c?Bhm-aaMZTJ{J=iz{gHw&!l(C;G3AE<86J;>NEBBM+9&3W92{PRuYGvhOU zcV}DRuXz-IQ}|-~IC!)HGRkKs{RP23Uy@p;VcO55T2!m~CXIwa;n!rr5s>0%Yx<^S zanX&xh5qBS+6X?2zhm*=LH`M(IN$IEEWTXuAEex+qrR?!l0Jr9pKUE7^8x(vb&ML1 zm_WedPSL(V5~nZz2bnN49dF|eOZoZI+MkudXL5fE{gI3_=>IwW`I(*c|AzkJOqjLd zzn6dJW_}A0@Z^OJT%ytz^lLHkhznGMND02UIXeoGnM>eg%=CN6Gv7OvX6%i{Avj!f3-BatMfi$6(pQ=vWLKzmY=D8eBA;6!w_ok&Zui z8e-P@&^xANB5XRsxa3B{Qu(Md4`HO&qHM{`%zQVh5apP=&V(+Zo9TUbJhN%U#Tzli z7x3o0B@Ek&>rz}pxkAQ#U#YVf^gX!J?qk?rRoJlK!B6Ms^w<3B==66G@E7>s#FfDe zsU%d%WZgU)RYkGyVrr*uo-JUuQ&E@#T%mHsJ^K*CP6fRf*HD%1b1K_)pnGvevsYS} z&pFxOh?t$YGGo~fzmx(GsO-&8z&%2>$bm`B)kxlk5c58p+0n6X&0Qr(60%iH0h^tR zp8f;Z$Z3>y-&}^7ry5yjki0DjNd3dhXTzuJ2-KiEb2(@}%^e2Qj6at= z%yZn+Eu8Ky>=}@TnYq=wS7n`18_Ffc{aJ1RoAlB^2NqeBx>fLem_ke82?9i@)OXfQ*0;9i$P) z#9#vN-@&rU=qPY1K{Lh9hGtU7(HF$@YpcC5+z}eDy9FUZQ4U7A~ z6rhtkYN~o-hxe6b(M++jP!dZhmC2WlWOCJ;Q(DOhQE`q*!AoFI0i$t8J4qu53Of-y zed9LscjAt7cq1V4T+yFQ{bYO!Co`Xn&#nGs{P<61eqz|0bE2svu}XogDFl6mr|cYW zoZK1bxQHMXrDLB+m*YV6#gk6KdZ1(B=n5Q&`%7LO?~Y*J-tdSp{7>Y6H!{Fxujp9+ z2M>l#d@Aez;F+%2VMLCqO>jgjXVB`D)uyp9q_PEKC!M~FDik(1XrYdDYH%v0y7#baba)|8k;9RXIIk`KMA&zg9Gqe2 zuTz4?1^v@--ll(9WNuv1K6muML4gsTamSPHl*&k{@)>6p1_90V($m!64nyeqA30`8WuXpyXl?84Z*q=`-~_%CrxEmVyQH=rEcNKD zyP&tet#z$BlgsFBJ0G+hbEOi;HvM-FplEJZI~zq+#b@1m9&3XAb(XDV8Pr(^vOzq^ z3wpW1{r^W#EK`-SxT8yz({mP7Z(IMmCY)7-1ATO}4nB6LKNgwbbOF?Dd9$-glIJW5 zm9b0mzjJnt(~&f_p1ZcMzpXWTCWUIf(|d8=TK%f1rcS|{);k4jYUy9w)am%4anwN6 z;R$i)A!uvhx}B&nRqVlK*JpUaCiTHn+LFq2hRT?5$bzoHp2b=xd^_){#$i&fBT#7E zT7h~T!sjYaj|ezTj_Zo@!E8NM>#B5=mRO-I20 zvi;}z?kwg4s+_Sh=*gAC!Tsjr`Gbl-RtM@KG%Ak!%g6J_PqO@YB@rK=tmMV&n(vHa z&X0*{Jb&1ezx%0#Q?4N%empw5oZlGgi6838-}Q18>HOf1&p)2>mmtsT=(_Ry6=^ATVe+Glwjjr#A2dugn; zEX`M^dFtM@etmrJr^4e#8dq28nvCdB&zPWtyClO^`lTJfe-A_LpF%|CoFQ~85nVyM;2H_%x*djdoevSOtWUW<&u18^bvd;-0BB=K1LiiY=#|rX|Bl%|&A@?LA+HZlx zbI)+f=UXJke~k!!uG{dT(bo#SnV2W*?15KFxLRiq`exF=+a!FC(0c_RCPE%xCNuw^ zO1SzxNFLs{O8oDM$p2lz0YN{WmVGe(bRx@1%!3^YPLS|ff^&%&()dY){CxFH>=Il{ z#E{5!2@JnZ@VkQd5z%ozBJ?4mWf=S%LjFGzk^ifLZ%X*zg#K8NZ*+VZ>iANa{38Xq zo`>NRh>$l~aE74zoeRRbXE@`_1p&%_pqfIC!n7xjro>5t(*$vgtMEC3>V5>@Vxb#} zX!lmZ^8~vE`FVr!R|)PA+$p$M@P5I^1P==SLQvhGkn`n+L;B6Ff_>QIOw17{5{QQo*f)`~t%GTLk&(f_CA`;aR(Y|yHSM~x__5xJ>I#9{SAI>$HE+UvOSWJW-%6@=z zNJGe6!BQgbpGrZMKlH054ODtS&*h|nD~ZteEWt)1^iXyOY$pvpIt6=(C`Z2_*Nal0 zQX=$F{V?+1MjH9;B_bcyelyMgDQ}{bAM#XrK^HI_a#eXjtMcmd zfnLaX`IH_myHJHIW4I9icctVztCw>Apm?eHHHaPyvCS~e(P=(%UmMhdX z*;11K|KAee)=>^-tNINLWyOuC z(S=3jeF(o>zdfMQMMa%1?@@%fc7Cl_cvFZo9|lTV;CLl zllyRJhiK)#0gt=9hoRqYC_(+;jp}!sM;`ZveL)KWpZ5O1!zNBa8;Kg}5vSw0ca2*f*D}_Dhw^xzXnC9)=`$* zeW{UmOK;DD(N`_~_>1$eF8}0+Ipf1OnZ&oq$b0H-BTugfOqw+3;gP?~Sd>xon}N#d z8MR+8-+v%n-PHczNB`Kg=fKhr|IxRte9XS2BV6Ivw%PXzLs~Y^dAxbs_{|xW+55=% z;Y%6#yZ^w_k5gKXzKL~)#a3y`=U;rm`~r*4Y~NA7^eB7>vMzn_Q=j3iR~&#%Iqe=W zcfwv%E=DW7f!5%}P&+K<;};NrAc@OJ{bsNb%^CO<(O3*v4e*=xA&dZlJrIR8foCwt zXYEZz(02U6n!rvKl*FTo0*@ylXmQpi1_i7%G-cpxOt^H^bt)+70CTae2<^*GnvV8F z1|MTc2&{x=SP6I{_$&@v!AJRrzCaeaBWjUgU^`@DVPGS|t>?+{CvtEvSO3(EJ_fwY z0B$;pHG@|$;Gg(o*~rSGFR9iJoRfSC>cU=#us}lwAM_0SKUt*43?Hbtb`D^L-ERZ4W4UC5Z#8D}ETO#56kMW9^~ z`Sw0a>rh0A{dcmRtB6W_1&Q;NwB`0BYS5`-R@mo|Sfhwl_Up{2E91{7!8)6#Sp~XP zn)UW!3g}V9Mtd#`cfKMnvbm9EpjQ!>*dMcT`xLR+=GLQuennhne~ykIuvQUUY(Go7 zP7znw&#|d5P{cO-n=Hb5MOWsBCfG7rsxY5vBQ1^>IN=S#C7&} zDf(hX?6e<-6$CC(#Emvrng=#1;%1xMLI*Z0;uiZVvR$f(UG{1=<7JAt-F}uWcex^V z+jo#{iz4o{mr>f*jBcoSx6RFV0#~T^*>6A3B3zlV1u>7=H&DPf74wq4l~r|>67Y)s z1~s@^5wF^3vj|^T#OroBD`dMO{%r3j@eM`1WtX!;u2IB0_DBl&rXt?653oXZ{2%t- z1iq^3>Ki`$-g_?R-kTEwi3nVVn~7O65C#z?OeqlNK@qG;NCJrj5|V&`iUCn^s3JIG zG$_%krIw;tty-|6b*j}mRIPQcQ>{fsz3pS`_y4c6&&|03+kVgcJm2>|@9#bN?X11l zUVH7e*Is)#=k9%uAfJK`y`^Ng3&3LsS{|NE@R)K3I zkD)@(vZ~igQb2`@S<-ca1yyJwUG93pEETGyW85HEScN{J8ao9`QK1W{$Blxest`}+ z1X=}4Q=y%-#Z7{BSE1k1Z*CSWLxuP*DO6vIe)L-;L_@QK46v zcB^m>SD|(`!*0RyRcIS!whLCMLNQkMHo=NiXfQc%7i^RY@g28;9||@`h3=-FcSt7~ zt3usri94nAaVoTsQtlG0ScS&Z*M20}WEC30e0v0&szQ9PZ{Wv*%}}B5Q|r40o1;Qc z(AGbZ@)oF2Pu5|tV5h>?^sAo==OWaPQuYaUh6){|lzRj#SE1+0d9UQFQlVjVjs1cx zQ=uMgqx*!j1}(<={Y!8WQ8pBV=Zq#uIl78TmhmOdylxB5c0wC5wjdATpd zoveXh3U-Arw1O@6sBmucg@%*!kYHE)LVS;K;4$I6-WTH2kig@D?L->2{*`dH`a(@? z+b0Cue%mhaYsq)e7vkHU z1J6o%hkT(i^y}XU_P8$;rv;xA&L?~!?pO^xFKN&CLb59Tt;l@V7kYr@y&!2X`$9|D zt6miB6<;VypLj{I*L5eRW}a^Mxg0)fzCYW=EURv;9n zl-JTZ*`)+R{6UmBeF7nNuE3ju^$Ubf zr7mv?77K*#q}Fc>mK6x`D-eNqL}pGP)Iwd}6>Lx-bddSp6Kq%@G>P{7W4aBN{6J_7 zTl4+&15o0eK&XH+KM>Ay1EI?)^FzT}0-=-WJs+iKA>Woj=zYrkIGrz_f5r@b!dCf{ za2i&qjBWdgU;!({=gfgW3ualNFDUaBlslZCJFpJj`4+?f)C2S%M=ns5}Qu)OgGHGlgO10+eL_T z4YNDqB7L+=yxa&5MBF4HumX7kaX)XWZA+aJ;+Fxefxy)G)F)B0VU?rDt71WX7T1+( zLMj(o0rVO)yqf5ri9B|Sni+bKnSTd~YF1Ci4Ql~Ru4eaqnhB|Ojcc$$-@Y3OVI$0v zNEbyx;Y#oK9eAJ=zM|&)F9oUVGR7BnW3qGDBh610e;E1`GV$V#xN1EYZqiLu{NX@H zMM*Te-vB>XcS^}dI$x&G%U_Ov>PO*>*FhMFcrHT5b3i5_G9KZ$4>c>wHF|smHRh0M^uzm$U@XP<#9v!6yQ>g_dt9HL8|c& zL}-RStVS^+QibDSxo!yfb!!;@RUoY&&ZjgW-k;wQP@AMmXmwQS_-j~!YN3!@wX$fZ zlGWK1uI9v~UF#j|_WCt5)c0VGPedsr5i$`svT6<0(4FM(gLFCqKE?Yhw#(wKq^d6= zI7h6vcq9eq)?$C4T0EWf0Rxfy49Sff&j9)V*@*_I;MYeOQsJn{ha1e12Djb^or4Ws z(pAJ98#xL4?|Ht!vW<>I31i?+p(FxYJgn5Tbh1V=Atw(kDH1`F4Ox*6S*gfsIq0-> z%1Sz=;2e=iOFkvg>4*eA>(il)KBv&#d#s@kq^2L^U<2NFnmE{STtpSf$qTf9Q3v_> z6)69sXpe!$4E0aB3b;y{O?i|s;*N}MTTpcN%lL69;gxzQ4Cxp0poRa1elq0aD zj$;SxE`t#G+=7|M0G8`Gfaik4%cdn|%;yL(6ai84pW;OEUoO95I)y^{N0O9Jq$De! zAX5WoWbhdUiK&hCdmp2Wskv8o(4Dd$-8|u@|e%KzL$36Kcr<=nO zH-i(?&9E|iDKnIAVqd?Ro5Ridy`AF%d8QrouZ@{mNJxvB-GZfNZczCG2KL`4&KYcS zH{+LfO1Ov#$KzN4ax4G(n2E;_W-uqiEW-H##PTwrgTDkD{HHH7Ck6du!Jc7u^-mC( zq*cEEkii2551k(~dj&63jq zh-8AnH;(^?TDJ3?YRhBhWm2rQxp;MMN*Ht$)R99D(Evv0-u5LtP^|EDdDq6a*ta90M2q~+mtX#9Q ztm^DlO_gq!wY!Oxezm94FA zY^tqa<(A8y0Q0!0sL@z|cA29CYl6z+v*Nlu8arX5va@SCjL>1j!m_2+%@wZ1j^=5q ztiVg+mW$<~r?wIm&<&><+?37|%T}&gS600Wr-CY$R~zom^p5@ad_L^mWUdSFidkN< za%F|caZHVtbW2NWMAr$l2v6gT=r9bt(kq*l?ku`#ZCU=hqWmiP@Ab*DRn=#gi8gNe zjZICpW%X;C%NlS3L6_^*$@O}vFROYKPoiCnidD@Vs;a8jmQ~P!`7%cMTG`AA_`>nT z`9@tuQ}e>6>O|eEmM$-occ5ySo;H!rR9jh#H~BRgiQ@on+0x;fItm7TdG)I5Ms%ji z`c=)1^>tKJ`zd_8wrY*5x7f52JT8HS)-P*HavsuXDRHRfD;o4LP*=Tbd2@}MvBOGb zb&a|Yd7NzJ(u!4OmCcPft-`IPla|#_s;I1~M!#|nI>@mG6eLtvrdtbWi88CJH-Nu( zC3>ZyF; zU5x`COQvTuuWT%9sBWxfe+O4(bG6i~4CZhpdi2U)(*R~BX!~=>!Z4VqLqko|O7x_r zX1D((22NxUPXur0F@%NIu0{^LKT^Bds^+s-IDV#87bWU3(7=|njB5%1wJ?fUars?RbIukm7 zq9r;Kt1Fw!))tcG=!}JBoMq5?oY~_ThngCt#}|x941XPh(M#$a;jUm$V-+PDixut2 zROq;nn*(ktI(&ymFfY3dv}}S`dO87{jm_0mz1khk$?Up0eYFwQO7d~9799g;VgSYj z$=Q(y;B>pQ=!S~2hQ?~P%&Ijj(ZkRwq=O~(JFi0hnYOB_y73s}apBR!5gsyVdpQn{xz+37G6$gXj+&f28jMVM3cQ;=1k?YTx{78! zr-Rtk(1`X&Lsz3FtB&EuiSe3_URAr+^^=wBD$6{pT#S(a^5mU(o7;V{kUq+!SP|*T zvSLg%(aKiU zuP~hXtq_{!uN#58EUpM;eAjN_(Xk-WV2S=y(SWtc`oua+&-+}8IdVs$r2KWGA=m3D z$FQ<2W#9uH3o@ykJ94@M+R;jlPAJvMDy~H!r_*?|rXg{==qwoJK&%$cV!3FQg`VdO ztxo2`THjqIYSCP=s;Z(<*4{8MZ{VDTnR6?GJK4%wjE`DCM*}4Wy5w>6=qirVzTw<^ zjF$Be$I7HTw~8v<8aVBm@O*8;#QLV=9?jFLg-HhV4i!z!^$le;waaT{ImwY8Hv(=w zIv6`9wGH>ac z+PbQ|<&}x4m!pQG2(@rlLdVc&bdo-aOsid1*RhYjN9{b}c5W@tFzmG@d+RZ7V%%=X zyF8~8>2`4Yi+dmWUw7;qKgE3KnQuM-Wx9LuK`kGdyH`0P6Fq0Ky}aa`P=J5`o1M+} z>d%MK*xKrOVBGO=8e}}!4JOr>&(+D_QBUXjKY4laY<9AIOZfHAi{P+?&;94eBj;rP zu<-L?yK^N!lJ=uymfvx8XhIs#W_vH5#r9tQ#G`hH>c?qb@8wV0WlniLyve|mwLSW5 zG*5YUTs$j{t*U%FEX59Zi6qJ zl=0cK*3M}*aD@0+w<2>o-&o7C;wY-V-9C!W$BQV;c_5;HAi+KZ>cj6b@yCWR_8*_2 zarvPHbb5vli15KIAQ?VDY@roMOZo8AS0*7Uo2TjWa}W|w()ctDXK5(qAiYB4^%^#7 zxLL!CHM~Z{Rt@j!)Y3xs$r#u4I0Y1R^+=> zhm+zSZzM}CzYWTT^-)fkGA704cOG7!Y3S7>|0TydI-(OC?#TqWx zuvx=R8eXBHe2*0Tat;+x&YuGQQm4y#Q{b;_{38v&(ooKuBAvTvS+1Nn1stOB(HipC zf2PmX@JtO?Xt++p3pJE;rr?+Fi30MSvdk~%OaUL)xSTTu{+7l+)sXM0CO>yB5%$zj z&XEEy()dIT=V-|N?c}f1aD#??&pPSXYS^wJ_r{WbP{U_6d|ktjHROBM$tU0S1eEW2 z0%qZ7XVUXEoB8n$S7g@*DyP4M5Paqc%|{>L@s?p)&UXn0t|e`uJ3 zeHBdat>GXIM`_4+_%eN-hUFTr(onvGiS$b~F5kffe!Ir+)$o@ZKBwUu8h)bT-!!x^ zm9e}Y8s=zNs9~{&vot(I!?QG8r{P5!%J=mk?^ccP)$kV@KBM7l8h)tZR~iPeM~V7$ z*D$8xa1F<4$X&JMJ59qX4OeS;zJ}a;Prh3;d|ks2HT;q=6K6d%ZsO;5AAW7lAVj|Y zgc$6zH5{bre90sEP9enjKV7HK(vUB)WWFUDRuO`KwZ_+Icpf3j*+Pi0L*ut-xQ7sO z_G-9a(|@VquQmO74PVyuw>ADp4L{cOZwL_-CN%2ZjS%vW)3Be0SsD%{1YeQH$7nd7 z5OU@avK>`HVOMRRvj~yz0z&ZfWDfZ<$cJ4lVlR{<^#neMbnr{PfR7=Le4;;a(VzDGPo4KZ z)_OSU7uoC+T{P{7*QzT9z-ZC6>(p_iQv8&$*`|ri;FY({Bagbc z@>U`4mDd2g9KpR@d1ry(m3KYlv0Um$yXb-U$0iMX2wQR6)%o{2HQ zz1+0lgW$%QHW5bQy^?#m(cgjKEq4qis5wYvxwNBO?#GC`c@Q-Y;D(c9iF>(e?}Ol# zw{?Uw22oyj1XteQ5qI+-YJ3fOyBN`zoAy`WUU_>V?=WbTmx18QWASvpJ) zvYlC`J7yqiSn$7%jOfdi$L9=QK4YZgFP-@?Gst6<#`O)&^&Q{s7%}EV&lfvzUKii+ zkneVk8dC_2*S|iC`yLw#`}#R%(Yt!$w0hTR&&N{=8um{*to-)OM-caw_)Cn>(tpATa zP~454GEWLh{?~CvHXpn=Bl|7P5*USl9cN@828MI7?;&TPKLp`iY&qh7UzhF76EL%x zX9!bf_u9aeK$iU=5kvx~gF&B+4Yq?Jz|ThD z4D15LgZuHX%Om{9SYSD2=4WtB4L(Qe>!fmsz*jT20$72-Rb~eC2sKdl_T$MA3RAls z5;wy63I}A3jEWmJ%1F|tNSP?$HzyVpNq(#nS zo+?Sni10&3I3P=DeIjqO#ASl?i}02h2V|Ki7I~a`Y9voi5x$BG2V|+i#7M6$KpF&@9C@8=s|6{E z%%cX4B6@0M5T!Lq%8bZuOlcNmR^(|)TO(|9A}M5BE69S#-zn{EK^8@7h^!OjjK~E< z)(cV|siA-kf>cHL7zzhuS<{-xFzR-$Aa#)+GUYr$8X_SI*eFPIgi{j^$TH8m$aU19 zMUZnNuTjxWg0w__O}5RV^_B=vMq8IMPDMw_6Xmoh6A$9b9H1Zk;~E_2XbxXOy;>D&y@GeI80Ee0Gf%ox0@G1V8r~AtxEqy%dp-lY412zQJx(S&wu7%pl9LhMCP`r-2 zjhv~`rxBk9Nhc%iKYw0_XEN9ra%`uIb8N>tKIy1U(kUH0woE?M6G=M516e6HWbs6f zosEh}Dr!NRN zF)CvoK{0~gSliIX2-_g}JW3x>;2lC2fPdujUS50?+}Cf&!+G@|IIe`xYk`8o4E3Gc zmyZ6ybwPc7T~i)5_BfIM-mfAg&LbogbRr!;^G>R7#B1mC8nCfzS$*TmM25s~LCzxP z-}`g|_jJkLrH-=;Tnkk?GHMJucH+Rn@jNBahx_lxntifNv%u`bm;V>w9sjmz=8g+q zm@Wqv%;4-`%v7hxG=Q9 zZDdIXUfxjV;PRaYvA29RU`3*#B^moB8dsO$Yw%9XEysRFv<{9bxZ5%&$~wC3A-t*{pRd!ItEEF4jV!ML?#t3e zrIpw!Ci^s3Cp#}(*4gC+uf<0&9OKHS4;ZR)C4L)*e~Ry~s9rCyqN2)JTBt_@L}YtW z#~yFlb(Pe7*v#SV*GyDZHdezNAk<^`CAv&=ebTWDc0f_R<77r+|DPCbeM5Cek)$M! z6;NOH>PgM(4DA09D`-2iX}DKJcWBqjQjn{gST4~HHT8|nv80lZu32T>3T;?-!&&Dh zPqui{aKVEP%h$_@(J{ipfs=}XZn}+_H#tp=OBHmb+&Vh`=L{4w^0-ZwwB4>lQ@6@T z@3l`>rSn*ahD#{!9t(oL3ExYytJ?!K!`T%ps<8!1I%0!%T{hcymx#TW)wOG#Lnop; z%XXydeULJsPpEF1;%r?!M)Aqw6JyKKrbXVPyT*hm^Kk^`d($SBojPI0!YS-@+Tl97 znQjWVZ1y5 ze+K;1G(Jbeg&J0Bc$S9s8lI=&77Z`aP=3dQyj>cP8u(eN7$YuH=Efg19yJj_2q!&w?G(U4DPm@e;W2i&ajD>ZD@@FyBRq#-|D%Y3hB_`Zfm zG{kvhNnfbpW(}{@uvNo5HM~#5M>Tv-L)rg=a=zAh0Ns}5%03ss=^CF)h)}L^ey7@p zE?ci*v!=6GlTZ2yAbt`SoPCdUK1U|Z(r~DT(qBNAeg+}z-Q?p%2=xS((qDjQ5bxUY z`{nJ%HfaYFoKVGE>u598h2wQbK6L-_Thd6&@C`RB_h2K&JK?#nxWT!mpbsB=3 z2T{X<195Mld%4kC5ZpM^hG06H;4*pAsuA~=dpQa$294#iJh$9+h!J?&YR6 zgW#3-3mGURbFRFb5O?z+YTO8U7kUV8 z^aiAP<$VHqtS9wD_fN>X6LIFrN8lAhrc)r(y_m*uuZAw)nW)5cmr19Q?-3n$lkNZ? zeaO974_*%=c=bEtsV`h2q2IHJ!#x@R+|FrgG8@>t~{;-ynJ{SknsjH=*#8fGaWvGSh^HHZpH9Bmit}$qGSKQHF`wBDCY;R zfBpN`)D$Tt@%vVTQIEHa?Tb&$zj5EB!#@A5i0!DmvCB6v;hnDd-OBwwyeVIXpA_9a z@oz8Si}1#n{oQ7Cn^}Cg#o$|HCwy#V-W%VNAIomXe-*neepedlD*Lwhp8Tp9({2p< zUsPlM`dbx4{xLldsMz25URji3w3x*W`_pHp&oU05FY*lEevx(?{@)(I%TO`rEA}e; zc9F-_8-rc6JhSwk_}%&04fv%^`{X$#<%*z6-MjSe)HYJ8rC6EzgN zyi1q5y=}aezrS1Q?8Dy{Qcl;>mR!hao_)k92b_z*d~*>dASi@x2$`T$PUiQ^&nRD1 zetP-h@_hLnkn;S{cZ<=oZ#VwC7z^hzhe3+Nbma8 z*qIk1b!=&FiC_PAIYjc`Gx0c`zeqSnlm_;YBTHm}`!W8$IZR}nFk=g3q-7bI!=|!@ z85<(8(B8uj2Q&SHpkZ3{`K%K2v$QUQYHDlJOZ<;oBOjjFTbFUXlo9xGM(GfdKfJ{M zxHaOzi6fD|=L6PkfY3YFEu`ya9iwjBKH&R_*%vba*`0C#V}M0~`GAuFPeoXUaCrY< zct!6D$C_8|9Z*^)7CBaZV^ZJ1p1!5WO6@JFy-F?GtBaT8L2a*e;YitIA2Yw5ux2D- z&9KC}!J4d7F?460Sf4q%KHj>h(%tb@^rDzq?1NuzP%ZQxd0+GS`}3x&?D?Da#dqcZ ze&3`c2Px8-(|Lb*W@YKaO$l9O!oN@T?h8m=vXHN>E^?s2Sjy?RLRs7^WP!5p#1;;Yfea!xp znJF{=w3VZ@^8cyjQjE0s=99xh?B)DB@&A?lJMjOtd?Wj@xKV&n7CytgCw%n9gaxw~ z&R95W_F-lHFz#z{MswyivMV>;7k{0j|Hqd9cEpHfV zN4{yAbcB=*`Nc9PJh*~6AFLb@qdfbwE-ECko8n#4LNRst8}$Rk+_Zs-w1Ke+hhs@; zDT%Zc5OV;n+_^n#ocEkkh@*gh|MyL0k+ILzu>_gp|x?@G}8JyL2RQgWvefiGB zo~6&l|6%w(OZBBazo=qr&Gi+bOK!N}#dvDkqw#)eb88-rXQg$&S)h-Vp7%YT1)w;7R5_r~8(dvf2V!!2r% zSm)mOSHK_sFs+!h!K5ANQ$s0d)J!h#a|xw{wUksyS#s&`KcEkMitq+?#ATMM%mDiI zcKS8?+ZBM@V$PhyG~aim1xgiCwju|6>*Z25=Wo7$zW34zS+6Z~WDs9mo|(W^>83bhuI&t?8ETjpmRnDY6;dDFkT3v!P@=2x-J`;3&`@i^jtGwuQ0j#;v2&OPzJ zNvwB{jBPQqSd}hX<;DZ0kH#0NN8@Lx-H^Gc`ub|5pj}S*=d^e zUVdMEUBQiA794o&i<`Wgl#HyWyg`%8%h#-QVlln{CuQ1C z;|&GIpy`11eyLGB>`a{~rh2U6H(2w|+>8VYXQXB-}HWFH>y_fNVN_^n^I%-g4>j`#Nj z4L_oYT@LSWo?#5|=Z+hATg%0JKWG`SiMq0XzZrk-kyTR<#WN21k8GSY>BwfMpMM^# zZ`G6z>_x zK2kg%BgXtgz$?J@R{o@~eh!Xz@-5^&oIm-iU8_q#|0b=B&pz@txU9_fczAU?_GJ}+W%&<%bn?OWcxpia zxzY+wDs7Kk&yT}o8!lD*|Ev~lrQ;jCLPe)mf9 z`~2@-+#a8dJE0QJUclQCYmXO$;@*3;BgQ+Z8Af}2R{mSdC}VNytr#2ci0!O?G~OP2 zG`=^sXw&X54^HxD?QD6iW%iNcc{}l4kk>ZhegrF8Gi&GO*`;S;H5)sIr+0m38s1&k z^)cQl@J^uk^SN18_7|ItoWhHnF7AqZt9kjclH22F6yF{{lb#@6cFOcqrkO~q%U_v2 zf6FMeLQc2YUmafE?ZVyh*aVl$$eZ?DChG3ugz19$u2`GtSu^;5H>~LM@2=b} zc17$0BRhMkidB{~)ye1mzk5Zt<|kx3?xt6M8<25&*TgXgoDo~act_&s;LY#End3yQ z@6X-2yu~cuj{egVen;Qqd|rxk$dcoL!Fn99_D5v>SR7kibxzjKi)SA>IPtZMIqw9r zc3z+mD4AHjJhcUcB8fiWR&U;gl)A2V|`bxd)KbX@z@t%peue4j%E7dZ)iVylq z&8$U9cqr?74<0DRxYUUIf*AWm17-+EkMxpoi7N3;?K#=etpU1$GL0DLvH1R>vxd&N zPkU$ptHF|d6E^B9md(DzwRiTWF+%ZL)xc&Ci*}7cEpYQe9u2P@yPQ%OS~loXSn`R8YnqXI&sOq z`TK@89NZV@n1}w#KF#MBZ{-{6#(f7dgC3T-?kzpneLLRyJB+dLSbv6UG5BXF=g;Mj zWBlZwi@VU}b73*QSlwhi3T2!>2frDw&UXIR;7!|$@v_@YJSmHR`}wyYd|Pash%c7* zG$IDx4+?MVeDx`Co>bw#`WTO&Qr^Pz@K^DijUTyiFQ3)r>;8C}LHXHv&_pBoqHW23mI~%`31y1aBzL2{7 zW(cq+@w7cKvnTrlwj=wy0Q(lts{*ro-6o_iOYpefXPMd1E>MJcptcu8pL^C!+~*lY8@n*vn)D84Em* zm^m!{BF6g+Mm#@*Pa}gdq4OVOfu58$F5?~~b?Kr`Cn!;?kYa6zeU$YE9(nt$+q=VZ z)+ag0V1y<>Y0Ww-xPz=b&S+TYqW-v9!hatQ9*fpYjr0tT5AmZ`DR|+F5iCw+xrW^s zgEA9RrAjG$HD7RIs#GC`@AL~!k`&AS6psailO<1zeN$f`Qv^w~M>3@(^>GNxz^5Aq z0h{W-nFU(G=^>sBcQTji0wwbdLGbGPH_<%7nf|U|>td=B>OV2HpNYq^F|HtV@ zO1%W}=G28~#Wkth(MD@i&%)2j=cK*{OPrg!3{~Bj+K8q)-?|&WmKatE9#|^tb9jT# zI_Cu1j3>(jRs(*RF|7|EA!zM@rd_NPVRy@V7;PT1%E1%1Mj&s*T7+CFmTx$;w@!!K zrCM`9?`n-hxoOr@Fj_aOFUsm}O+xAE*4!*q-&zShkF)MW<$G9t2jboK)=-$Lr!^^p zvw_w?PGs$TT~*`nubTySymrtn{9o8 zJ&8HiOf-3}br7Wtuzm~41FculaRyl>kTBRPhXsaMf6Bz$sx5x?Wtepk);+;`2EH@g z8V?D1*4xl6-+B`|6j<%BXQA~CbQobhfzD85T>@*2w6;OoC~HL;zTaydgq6lvakRpT z)(fcnSnIE#oCFTT7-#(*GEcVpp?0TOi=f+h>o;hTV(Uxz=>+R#=rGap!)}wTq0nKn zRRRf9EbhE5vA#iDe9u~p{yWvW61{tx^%Imn-I|GK-=$UqB+Rf*L@6_^?WpN2>n`Xy z+nN9?&9U-O$GO&iJ94 zTc?A6iPajzNfYZGSor%^U$n)U)=<=|%nCz7x%C2SRAK!Vr7X4hTWX~hL~51w8g!_( z&VV(RS*7UA%dPWJqZ(^7bgs2t_v6b1)}PQKE3Dh0bDh-%^p#dO{9k1RCP6LhAO7)> z*ENvpo1j8G{+^ZzX}*anonH_#(td$D`6j7U?p=?i{VWUEWGAg94N4ilDNfq1Zi7${ zUy07Ax>dnVeBaXc-Cm~HX*#RwRt-_U={m2k+gnU6RjIvLsIU99IfieB z>V6^>@^|}~i8EE|DL@bVyG@2$_-3i@qu@yR?IfL$s%MM1u|G#!hL#D^&wd+C5LzyIVm3dz6{?XuIrbv5)k?}R z`y%*$=qyRew@0H=p%s!c#@;aiNS#O7Yfx2GSPk# zJtov3$YlGpOdzWTDY5T^okEQwda4~pZlyua6{OA{O}6s{ zX|PXV%0@w&?J5jEq4Nbk9w zK7x)Lx-6aMyVf4h%3Urg*W16Mhx|a0o%SDS_$x%wR{H=2Tq(#ddlF`j&^AHZd!GRf z?yyf|&TG=!q4l2VT8tQ>YbD)K(O20_*9jI-(Ri3s zS+5yZ_{`AX;db`NgE1+VIqKS5(V@alUkccLVn8ay9zi>Z9ur)CbVzZ=}Rs4=q^BoC2>u#gBWzpj9TdG*kc;f~@T2hA zf^4;~#QYOpC&;DtkEz>wK`ys_@RslfL9VbLq!G^%WShMn)(@X6$acF3oiTi#AXnQL zq5Fh43UaMI7w!~3Uy$qVr)iKDL3Y~BaMAE4L0avP*m6!^y4lXB;hny;%O1^Ubo$b* z_B2-e!t^XKwA*~UO!y*cpZo1eaK`Y(>7$YIkUfHpwN+AHx7V;qoWAsy-8Tfp=}Yg} ziRrIGAcEdLd zmZ72x=tXUU^-$3dspc-xtfz{e&rWhndIhS}M@4U>*0&1ha25T6CF~X~Uqvrs>Ft6Q zs_4(?f42!%q@qW{z-||8l#23Gap4~dHbzA!Ky>&H=>%g@9_@dpls-;Huc4Xm60BH7 z@1x`WNU+H&`ghi7k6=?_GkW!p1)HIwr($Ld-!0f26-{IR`H7UbKt(^HJ@*QBs*3hx zzMl%`A{G6Bmft7X87f*yKfOn=auuD1=^%Ws|AKZ z8vR1BjYy+)52T+BL$;{s^=!?9B6F)Rx_&UQM}+foU-UjqcHv(Nc7-pxg5L9}aBlNO zQ&{&yf?e&4eo3t#6VB^>(Yx7~9~W$=FS?deekGi(zUX`oAx{Xl%NHHNp7o?)?Y`(a zY}==#Gu+{e_NCTO3%1u6{V}ckj9~ZsqL&i;wd6bKi%w!2JuBrMLV5JM-w5`&FIq~O z&k5%fzG$4|!t;{$j4!%`R{E{Td={m%MlVR(%f4tA*5O6LUhze5!g?$Gl3=g-qC6ZI zemVUrh<@D{-9oSXos?h%qF-_lctx;4Ao_>`_Nri3AbNl`dQE1nlt6R@^Zh>kN04F% zq5^>1fpC_hd)Yx3Hi2wldbu2`d@%OV@5yp1N)P38dh`=`@<)K1*|AH zbcO#cm}Nyb(XT%hEX9hx$Numa!P2bggB%kN3zlI;Z{qy%nP5Gw=nb^Q=VGNkRy2*C z^@U(LR&)XT`w_v0SCF4ebs|UxR zsFo}=@ZrDihzpVPh`ah2=n^@a3laOO$GJp~i9*DO|K^hT2IR97%6&o?EOwTW$~DvF zE-OC#cP`>43DO*Va3VtR;lFE{LV`$Q(@6?G{I{1x-dM0*goqFSJw_s>f9w+R;lI}q zH%SOIvk%4nPhn{4^@)m{8JYr9+ZK9A#9cLgijEa2mud%WZbgo`t0sQ-H?mZUwCp=z z>xi>zO0jqVSZQ>y(4JU&t_Y-#qJ=nN6(4kW`q4&E49E~0zb)f7-8Q*=-J2k?|g zt)z^x??4kr&Jtv-y&RqxaaK*^?6cuC5$6u%6g!7(&K*dx{aZLm#JK~RXfL5U^`gOK z`_FLtNP{3#?XTd;k=26Cu+Kr$M4VOA9Q!#c>a3dP*~e3zW?@@kwXdER*}L@w7|=}#sJ;;xh@DW!&4hIrs=I3W-CVu!HP0L1aX44bcBOL6?K$o>e`PjUQjl-)*YE5uF5*q_1lDRol$ zMfM{Y`BEJJJHwuiReOr#e`nfPus-#Yr`(Rh&?(NUy~S>Yxl)`}`(_(`(MV|&wk`Gx zSe>LaiRgCwMmScAvueM?Ud2M4Rr_5w-*K4Y_}?D;hcO_I|J`lhg()e;@xQ%xZ&uD( zwcl%(v(OE4dvTv#jyW#n96=tpCt-1);`rao_IS(yDUScWVo#K$Ods1@K`YpLl;cBGW`ySE>Y2^&_`07+hMHdPQf^m;;iAZ zg8K~{WxKQxR&f34OFN`~Si!Z?f1G7JR$KppmQA@v(l)E;IdqL{rS98R^bkg^l>>VZvftT3SH~3p%xyWEODHMQV>`e4pHQ8p|ut%X# zHARrHeGy3NdxB)x%b7A&kbd?f&|6Kje~T=GjC6tw@JfLp6obZ9)BO*i$Ueg-A zHsR`c_8Uaos5gR;fMf*KT86}awWuJ-xfBLVJ6Hb{7*DkaEmC>ikDyxjfVUqX!Xv3a z5xBj99&hw}2_6UH3FKdba2i7FN!H``pgiNh2!wMHGM`};_62)?2t;N60?n!JaWEtH zE_Hb*nDJMn{RZJlgjfyBdpMZE7YrE){{YD1D=E}d!Ke_6v&Wz-j04@zf2^U}A2cUH zTF!i=9EV)#2stG{h9WW;!N|pYW^5ad=eOV+pysFoBR3zUFZ1wd)gk%L2HPl#L&A9- zY%IkFXg#+TbAm zZZZjBJVL*pbr<4j8lnb-DuhAsb)x{1p{pOCv>c%3nkllg#^`$l>vy%)k&Vs@*=rNB zw+8cwTnQ1EBxG+5p3J5?00Ivd^?SIF2$)6Udmy}pz|mJ1IF|*oCTz9A8H2#Q#wiWH zhSK^*=`WQIDNRWCq0AwN=@ym2;W3DVfWGsQrWShH{*Yi>*umBfc2y-_wgB{Vq?H5* zYiUEzLcdjGgWZVpa;!S^Raig`KZ@L!{-4#EJopRvu>Z34eec5JRQ<_$tws?Ds`ZDU4;+B#I5f~Owz@R^;2SZ-s@F|vbY@kp{a=L~^(!;% zY8?~uS4cgfxd}heK55EBX5UrofEN(&!*!zXs&kFuFJhEe516)p@Na0zJ&s_f#rqCK z{Z+d|nj=EnFdz<@i2^{*I|)L9b9Myg?g-@Z9VDQQXLIwQn2C^o7CHo=^H03~cGJvh z1C{SM9Dw2}S1(s1z(o#Y(or`jska%OPhIPf7Jx^!vcP_#-nEW; z=Ognu2>nh)3V21oAA`Vm?d0(|H;8j+xVJ(0J&972Yt8SoCfzX5bwwzkVAzLGFCpi8 zT??Kt%SDh{j6-BB5!PZpBD0CG7Cczigiy%L_`T|Ediw^`R&OJ*NYve67SftUqUHv3 zA`2fW>TNLRQ@xR*)&{ejDWht;L&6qQhP+X;=x-NlWH}bT>N1Tq5V_nzjJ{!Z={m>9 zav%jCc7_4_4P=e#%q*7j188{(!mt?9r^4}!zE^-%Epv=ae^sp<8pU-NkYV&2EPj?5 zRI5NQk`a2AnIk&mz&Vpfiq5aXAJsfF%6kZ-?-wXVO>mT<7}d(Bp8fue$sgn)%&`wF zcOw}6`7vshYlcYWm4%>MpGjoMH3u+>ubSe^tc|`KU|5ynNJpE3`3o=)`O+cF%*4Ut zGY+6%$!}Nk<~!BeJLa-|6&OsJWW%?e4fU?WhIB|f9iZQ17-&EqLSza|!*>F)#~9_P z&_Jv>r0ZgcY-+}NF!kAx?^VvYg4am-sJJyJLsuuz>p??An9v(cg77ka;GGF1pdjshw zzJ&pWlt7%6hXSF2982n`ICzb9h>V?qh@KsM&4`Bs`~kl2&oBh2TbzpY1R0+^hnhq3 zVnP--g3*Sa1zyz}NDN9e42JcZEP%~U?x{k03c35GaD3hzklZ#*5<)nMvjvCDpMWE4 zE-Iof3-sswyl|m0jzbh>o_sk+ux(DlT`z6KP%#@UYJ*dTQ|w?4GpgPp!DP^6aR2TA zRbEp6kJvHK3?$YlEL^n?hsuK(JslBF>o87#ehgYI>dZ=xB-R4_xSSdTYi6LU>%DwW zy=qmtsCGtMMpDBA=7-R$xa$dc7qXFkGb&j_I{#hHNM67!%EoWrdysM(G~hexq>r%E zWFrNY_BFsGUIsUNIq_!1$5T~#T_XR9wI&Bb*{quA&VOgJgn0q;8m(z$4@oFtwI&rBxjX|&(iT@B=6jH&R9fy8 zirPsgh`O^w)Gm->aQcT5`EqXusU4!YfkAXLa`%9=4&(nj3DUs5AiW2nWA8_VRY_C> zt5Rdc9q=4{J=s=ttWo>fBYOujI9!i9z`hdI$bODweH_G?czqhMul=?f@tBF&JBZPe zquOA3^+&(6p6)verc^Ka=_2xuR@J%@OvC7(S0Q2y?#fx@Nr!>{j}Ds4+3R61sqYF8@L}usZzh0%Q2Ed z>jpS_tbwPnhFK^&S9%9p;u4*>4zxNX(k*Y&G;4s7yB4%QsLXv1O`S;RyK1?SyA=tn z<&$oLk-J^<))Z8zz%kW0q^Z^m z5~eEf_owX_2c54Q$lVjX$x!?UBIb0zxgPA3dG{oDP3M7p4wDAL(F}?*`aaIdtB+Fz zjDjLwN)*w@pUEO_K$fcz_}JCx53ia6{}u~84OZ$p)|tYX)95=7tm0{?#Y5FNU%pH+t^2I@W~ z-SXSpr2M}^y zNsoP3QS@f&a?GNppNed%hmtjkN*jW?w2Gr#4<*ahQIoLXP(76lc}D+_V!%v?8B(3O zv~>b<#e~sv7-JF4;|NA+1sp}aC)Sw*T($lgW7>>AqbEzd7L)d=xd8%l{sY95kcppm za9Chk!?%bme=%=zS>_>mPJ#suZ?Ihqb=W-UveY7Zd4gpaS+2r+udN{S0ap=xtNkT2;h75_(!%c%>`r| zfrQ7v@@RtX6mrNvvVCQqu_ej*I39&kpOxqso5e_3K(EPmR`X=mOaIZj;`V=p}f=?4+!$pfg% z3iwyl>O!f-t`?``azDnYI}C7=#(@`ye~kP}i9Eo&fWI3E~E% zu0vQ5L+U~woEwt>IXA*%#|}V*b0#MMthwi=420;j5(>{jGL{@*a1=gE=8_!{cO`75<^$Erd$!Z?LPfQ>Zw#ibhU^N2`SXW?@eI-GV&E4b3}nl9 zfg!{~j2Md=;PU=SJy=Qqh#PV5>MITQ@Y7$4_TiQe*hp?&Hb(4)Tl=z+#*XBqWe4+} zG@9Ml18EZyX+45@l6E?qju#hosrVuw4S&us`3*k;cn@)Uxxn6oD@6bA0o`A~ru z>H_qAX6CciZ@~LGf;@Gd)|Iyq@NY6RpZx2?9C-d9EEgjA0tCst3z6#)22!JR8o^lX z-dw>aQO=TIVLD{6_Xd|7#9Y8&|0=vhA)Uc~BE00AOz44N@3EF_N3US8pADaJI%@Dh zj7luo3v)8qPluOGMUP;xpA0W~1dCt>`>F5}zP5+KekQzR6WWi#elEP^S~M|({d{;y zH8f?g9}6$(gGw^kkB66Bf+2*#{%v^4ix_Sh>|ckMtViV;Qpbmua86|CIw8E|DX7L^ z-)Al1<6j2*PJ3y1W@)aa(`+cC>07Qe`@DcJhUP^e&$Gi1ux#->$e;s$9jt|>nU>4qq^!B z0h>;FY5H})K%Ja?n{O&aIRvy&cP%?XNOxZdoZ-F@_&AAxw}-B+@M5QL@+*mZYSE}F z>(DFtmBhW>HxT1D!48v+fz&?U*8+3?=$m-2FbW#js~es#7x%nwVlNsHy{|)m{a)ez z$^6sOlXAqgcu`vC$n?_K99c;OD3#q;6{OEo_fN#@xw{7!MNT(QlLpK&je>M7CHIoe z3Z7DsPQ?aXx>;fNyJ{jTFc1j_6Yzk<;kjmFFJgm-8{>Pq`g>}IHE>eBAY*7UtEW;J zHyrs|=n2rB-r-abS%)WQ<)SSQ;yZYb|Jg)%bpA1_h=*Va>cZolYU625#8`+7BZk9g zoq`7TiitUjylUgYt+yDgAiP$^)6?X3awLrL^7O&baAIFrSS;V6z*yJPTuH*@-Gemw zI46q7Vo5U43r_KB>MMWW;gcnF*?{ zzNXJQ1|7>Mt&m7}ikzcupu73pWDPnQd!F_WVb)fi?-ihF3nGdhwvfihZMC+0a-HOP zUB@`6b1w4oIz~NxIJ#bv^%f6@+yn)`v9c}3^;(tcjzl~9s0Ny}0g1aTUkl=oVW9Ps!1pIReT&B5gK;-fT0&Wzr2ElKHzHMWq!9o7f#>hql zWz63Uu+@nY?2+gk{Fe*!A()t#Pgaz1Dgm>g_+0=jz6;J6M!r4JJE4J7s#B9w!627k zjRTyB;4=ymtX^tYx41IXv0_6$6hN>GAz4!p(LJ;S*L%-_X#$NP&1dpwO$<+)0A(&tsLb70`hJjXy(AhE| z$;A-^*$LPlPIkudEPx3F`H2KXj6SAHAeJc$>y5uPgX z!ZyOi5+Bhb6FcB zlO1Gp8zXe008V|Wggb$6nfTKcPEx*KTJ9YO+cmq5vG*O!vf3E?1i@z%wGr~iknb8T zkSvoG28Mo!vRgPK24lZOKmx&$L;_=fa}o&nTSf8^<;<5{4s^kilygR+hdFlRV1z0S zOptvtQqgK45Au*nq7^|N>LI&^1$mfm5 z-7Tr|z{Rt}5|ODQ717Sk2okPb1gw+^7D;pg{>$ZaBhGIiSohPWtT&v7fc)Ou0VxzT zw%>3BC{@+Q2sK0=0;i=KR2v1%aOn6imrqem_Aum(CE61Bzh9m1!p%b{iRF678tB+H zqDw$Kf;kBP=^9Z0Jp;1vUoNLceGu5$6b->lHRv zMpQ@GTmn}@M@u;+b0onM82^*5?^dNJ`20q5GtV!`pyR2dyx?Et1QOENGQ3y~UT(uJ za!_ebFP&!Nf$bcolcKwI7UOa17vC3)rV6EuVD^Ab2=9rfY$;CB!X8#K$6V2gc4OHbY*;??c`w(F|F<7GR&m>#{>IDomjw>`Ke``X zi91)n(Ezvb{rg{1{O(T}&YVAOe%`cIm33?I^|J)qoSOBM>Q}C;UzPZ#;ZffX{QvY@ zj0wg5^~V~rdTniGb>7U1b+s$=W=>c%qHxs6k(~^XsI>cGAik|%zT#L} z-&l>0wiOMp;drLs(M})VW-=ZaF_@7I?MZN$WVOGeC6ZS3mu$ znZ0WaHTz$$KrdEt916_Rb@8u91&>*q=cG2;nll1EvxomTVX^q&pqd__fB5&VQIha% z=Y*f?gkN_~*ryYo>6~znPI$U=!o51-siXwu-@it6vj2P3xF=1vL7ABYpx_eG?hlEa zKX=r=Rf~K*kucmz*sT+O-#MXOC%o1<;WnM{YUhO8b;2u&1Z}fBbiyr6IL^!us+d#w zA9TX5&IxbmgtpEJZ|a1bJ14xQ6K+aMQ2w`JGc(C&FZ4;14ia}O)vcXR=kNuR7_TK` zy6G^ECnNoK1UX}!hJkiRrV6H+)?%|T&$RlRpE+1}o#n)~JWtm-viKz5s89xW{xb#j$Ush5Do^mRn z(D#RDqP&yM9I5np6k?lWa#`XGM~6LbgcMO`PjIFv~ETx z=v%>pJUC`VnNyiC&QzJEc>>7(v&ZFi>exSZvvxCcGR*#l!t zVh9NOf53sOM+W^=I&$!2$Ws1K&gneLJSJtNABS_IpE3{UNdIN$C^P2&GBDgM@LzjQ z%*@FG`eA^>ihuh#)5)?PyaR*z`A#Pc=IbuIM#BsBm$2uWHVX)zoDm!jrYu1UPBHsS zWajwO(;bF9(}sP5rFo|(;{~Uu2lM&|OAEBzwJ4PG)|lVt5+Jeu=}8PJvi{*>BVQQ% z1B?Y$qYFI4w7?W9HLYnJtT=G^L)&Qm4daMhjj!)PXkyKET^AIVE@i7GHUj;KgOjzy zX^aAleO3$tvd+f1=TF~^F>|fhDHH=C-JAwx`eUfnafRVz2+Lc&Xq}Z*)Wa+)Lx%ZS zo|#E&?f$+cYnRj+)M<)0FckI9~R7sg@X3z;F;Sv6&V=(3dS}zI51|<3&x@91d<&*_he)wSbzo|3_$;o;5pk^ zkhtygt4QFGVS@*S=ZDMf0v2nbJp?n%G=MfwJg<*au! zCKascB6}cbGyPx%bm)g>JusXgdZ*n2cNM5i-JEn62-x$A?9yU;#!9=a$ey{tj+WT= z40|$Wa%J|EL+zqsdv>vX=uA}1I-au)Eyyp(&(9x}f5@N$Y=bqWKyqd{kqyR&91x+B z3t_N5b2y@%fnB8cDLb~>wnxIC%V5w`Fhye0 zF%;>LmG(>pG0Sj)PPj@n{1m0=`p*j&*oQdHTK{)M!FacTr(j9b*$Ib$5hDOI7bMZHZk&-XRJ_lzSt6w}5rxT!l| z?Kp9aa-EJ17y1tVJ`!UlDFbm%-Gl_KMAnAJFct?J&@T&o`m0U7=8doZKfMz_;-*UCGyR( z1*afp9R?h;OLb{CFa zZIV}nMqBJOT4xoc#Ecb)qA*qrtWsqWZZ)XFsJGt zyoEzr!61dTN)2zE+qWvg#qwXMz)PGC>#6WgcE<(wNS-MbquPRK9%G%U*?1j`Udlwc zupk`lhpG*BnZDT5#<@Z@6#*>TDf15Q2^OO1n@ME2Xk~H9q6Ldsik~{?)eH}FyYs(; zX-BYMAw2f6c!wZ|Se+V;uE3f1t`yy3E<#Etva=dnv|zy^pHj23wm>Y(56>?Q2WP`z z5GtbUn!jMdf`vuC6W~{982L0TpBew@n>-HC+-O0$_O!7`%u02#!EB6?rld+#Vr~*w zE2-?-a8@(jXTN8mRD1PPm(sC72QEkjU|Q-*Us8W;06w&ifh6+yNG9L;|{L*DK*{UWu9%u~=-ruT;LD;qULtuQ$G|#sT)|arWeK_GqT38xA>mxs4qdfxl=H z&T`S_g$ov<3k?T<@Et_zKVgJBW=(DXSn)RX*yWmI`NkM@P!ayR?WI4HS3pDl~`EtpA+x0uv*`lI5FPX+=SWs z`q{Ic1EGj@_jpsXt~C+w+|ky6Kd?a zZ(;Gj5g!!Z(NWjg$;dV(+7d~8Vz{%buC1{y*+@5kxJ`{#L(7(UvaTyZ@7DUdHe5ky zh}ShXCavnamWukS`g$jk)yewK%67!x*4>VW0u@-@riPjEWc#*wOZ&D&lDU{M!^uTr zYoZO;KAKyR!gxblS2E6+T6saF!|Lu#G%&$#8XFLBvc1KLvb-s=u5N3hvQ9FRu&kr9 zuB{=_Vj;eGq789ws%vhGcd_(%?WLlAT}ShZw&t!>2+I;(HQU#9)g`;SJJvQep#+&^ zw*ttPwoP4|;~mgovP(;yWTS+6U8SKb*%IeBT~K*5N>O`t2^4uCz?f zb=50YJIA;MwJy#yQ{H%Tbs3P&5^OnxpQMB#f38pOJb$Pr6t94 zO3PxClZlo@U1wrSYr^UjicMeJ8Jmu4 zY6}{WlIcxt?b92~wMy)_w>Ec8H*IKoM>}dUk%VJYcUwbOb9>u#*dK|bn;Pr7>Qb_| zw9-b>)!qeTL^YJSWmmga&ui<8_X4lz?wQdux z`?>u{TpfvNPiS=In;MX(WoT$6t5cl;jG(eRnMB*JZEj64Nol)Hv>CHKsJ*BSx=qD2 zPt#O7x5kUNmo_%w?~JAzc|`JGQJhIl39cC zl3DT6GAn6{plo(MgK6kW#G6mF;_+?`8*XCKwNbj-8&29vO;_eE;3n4$jib|o(J870 zt411-Zw?FUnUkHJ%}d%gRiVGEUVe1E_UP&*jEy4;nru2-b&cr68Z=T+p&rJIF0Z#UL*iMLbJN`$JXuT4=%f)}l6f^XMe}jX4{c;--06E}IRi>OZZ15d3|kYe?8M#t zrAJOrRU{f=!!YRdi0BM>Xf*8@1KeoR)l?d9!MMcQL0^yI!0FyAm#+1-S(v8@z>U3j z`-(PHeL6W+&7B;Jmb95W0BE7SK<_k-PGgqHKaH}ry|KHc&e*V1?ZJDq648S{I!#bwni)*e;9a)}c}rX4tgV>uesRx|pu ztlYkcy;V~(kvJ*AAsqcsubV!OYEN$I?5M*H6s?_&TZ+;*SJW(>4$Dd3P{9gpEZWr2 z;1)kkERL#jD!RP|a}e0zCKL*03Me^MD7wQoOkdC=!s=SsD{d`y>Sx{3s&uie+tFFu z+^{91jMywY>f*SGBHn@t2#)mh)0Hr|bzSWp79&VB#u_%)8Ed48WBLOlbLLuZ17uN{ zDF-beexf_W%9!7v0iaig0hrQC87aEY8f11&cPl0{4Jl{S`LX*%*F~V`YVB}aS;J;i z04*546RoL3(sLVh%rZ7k8%>Q?CU7tYc zdAgIC&Qt~-?g;8Mc()67rpC&GW0-Cx%9m(@lv(3$y>Yh4nf9g~G*zcU(w%HoqNQ$! zQyXS7;G4WTKIxj%SWq&%j(x)HCbw)&li@(uu?>@K)l#XI9w9l2;Yi2>G6%pTJ2A*F zH8&!ed5Ec#)ac&b;YL|J$8uW&I|8(N=iCGBGmbIIDHBV*Fs7lZB2^@YX=m7E&xmO_ zM+9$&k4CPtKUkGFpnv7rL1Xh)l%<<#)u?hKb0 zPSZWIX=GI>7N&)xDreuOf8?|tZVX~`^QO)0=T0=?SZmhCYgepZvi8VYlLquk+v>I? z;@us{45s5IPrgpvEl$-W;!8~ec>p6$MT$aFt7rVKA^PpV$xKv^EU&3mb`=cMPhEBk znSD~T+b5Y)FV#rhkw71d;U-~a7;frRjD>xoTh{*SZfZv1v;XYqN~Y#RmGvlJj_T@C zRERiv!>wtlp!bBI4>babPsa>&j9S<#;o9-INEcGzbcD`rZ4C*GN{v?4 zdNsc4$`wo1Dew$zS#^BL`Xy^JhsN}Xfig&-L9}*n_lzEN& zV8Un3N~xOq?Bxxo#R)=r+ zk%p(Ek^yJ7W-|j_dzA0AxTd?UvZ2nKj~ZV-O4OM&V|j!v_Nb~_O&r+_(mf3;skgPU z5xWKI>GDgR8KmmgJ8i<8FSCo64vWkT0Wjw+n@@7OSDqIbW0AF+;Vso;c-m&FnI9y^ zjz**#W4v3JHQTkGAzhPfwoJD-o>AxK2nj0XIR-406YlO-CnUU{xdQzxj9_-!GW|yE z^qj5R8!$ab+jZ^^MH|+*T7iaCxwdLamBmtDWx7T8?11M)X88zpTG#3(#&v8&hn+r0 zW%H0FB0ro*Wt=K(!&$M_(b&BlOB8F`+g8_gZZWG~=+DfEiPrYyj@5N-82wtg5@n*wXqTHh;*Q*yXhCPeX3FxM zp)M+8!o*>wskxyUAz>8`i!GdRW4ttH`HDQ)sW*k zvLKA=WllM{^$^F7X*rBDHQlP&UXyV8XY?eRy>@UBu6pwh^io(YIO<5Z)vn%P=9cj# z8){)|N3Oxh+SG(o+@^;3)bJ}HzGh3r^r|qg&%5lqfyk_0H74aoi@!I8> z6)j)8s*3q3@mPgB%5upS5wT=iI-CZ5aAPoLU`iO~hur8Kx@NoEB2c+onmf!iTGMtX zWr_OkO&k(X$n7|dNcHn<52;02e+%U>g>}9zo}lzDhuKa!RCITGCU8(gkem!QG&@5m z=FnLCz`_Nl2=4MQR)kE|r@9<7AL3c7a}HIrA)cDp!v5=auqv%hTaYoc?yU1+WJdEi zGn0VG93bB&^i<$jeXU7gb<}CfX2BHoFjsbEN)rR5u~cV$Ahk%KOtW4%*K^9li3K%r zkSVBp?&21gx7B%1D$Vr0w-U~9>#!D6no7FU!*F%mGzHn4IRjsDM7*lJwmiPReAS97 zr(vWXDS)Z#v53z0?j+8F(E#G;WYN*$`2giAJ?Qw?89X(Gg?y)`u%N8o3}rWKt`lKz zqbPQaV%>V2Q?@utT%5)#gE4&#oUR3%YEO0Qs6RFcwtY2-gBhfmH^Gu&Rhyi7MrN0Y zP74M@D{$L{(A70biUHJW>uz0#3TR1m zE^SYm)dejl%`HuzymOHBjP>Z4vBs3PvDqmbOBskUo79C9(_ozjVpXnLBa6g}#*uAY zG{c+~Q*OvP3e9TYrpBW zCQn&9hUM)W5vf~Yyw0MvU8gH!_tuu!=5%i|){Kd)(=wbQEMJBTga7m7#?0w6TdAqI z%BJ=u?sGh5dattd%!CmNZFjP5EoN`Y zO_*Mx^5)2Tu&9$Zsae`Z7|mQE^^EZKvK0x;Kk+?9T(l(>eh)pU(;T49d2wQq6l zf_()pz3}|ZGsAIxy*W)!B4lQql(7jq9i^r^W?pDY4Td`Wp$SQ26*G(rU&}MdyPBzhz*#)rcF-wBxVj&i` ztd1>RoShr9)VRt9Q;v-820`}jluc=1;P77P z`G%vIRxClA>#(qi*{Xg|c~&(xlsikz#xZ>b(c8J0oZ*Tq2PIS?(!|Tk$O9IlT5;CE zYvsOIDzI$gus3s=-HqBQ2hV~$;$TnCl6O{e-MaAD%nZk7+%U>hSHMz} zrkcw2nhKcFRx2T9I@9|Er9)THVOCsd>wUc&iSN};P2$)}SnZYQ!If~g4{=WDxjJpu zyAZ^ZWa`u+qnG8{6OYGbWK2tF^>f`NCCHY?9W0Mh z7wZ<0=}^mCTG*K)p^au1j8=dPL9Plc$+=#_o+WeSWH*xTF>sh~Cg5IRViCCK;f%#u zTEt0Mb7Qw#KBgLZD}qyp=~62-7aL%xoHN6m;<%{Y%yluTq$dESxC)V4Eva!)SuO;so`Z69O+@0x`FIw6tTVyVWYM(%L+) zks#l?Oy`y@VsfwkD>v!>QMZS<>)7eVV)n7_Wj|*Xa7E>k8rBYLzdP|=0RcJ}STG4U3%0%?KGljzRRn2sTDq0 z1iIW>UMo+vKyPMJOE_i@&*fT^euQYIOsHlV0>>~E4Ay1L5Lv~Ry}BKFX-_&XnhllA z#Op{^;%VdaQo*1cmWILHC|A zHg0Q6%^A~5?#w|AB)uYGnuur0Ld*3SQL$4sottq>i@Cy$LUW4~Ht5`C<*Z=fs>zDB z#>93GPu1<67Q1V+!sU)W&7A6XXnd%ww=j@vEOE=p%x-X==3T&%9||tx%ox4A&RuxF zgK0!qfl+gzt@y5F@O;rsZcxIrRlhW1sJ3-&+v41vWGup&ZLkmEWd}I1hv4cS2Rqmp z&JR81ifgVNI4eL%I6X;O9~K9WO5(;CYw4;=rHOMt4MpnLoPH>?>0>Q}w>2Fs({+s} zbYqp)3~$c3?y09)&In*EjknH}m%CwjyZVD!pUE@kA;u7#<^36{eBdgk)3>N`n-Vmd z{_^Fy($W>~T?B4lZH7wRAXc{nw>z0@vvalDkkZf%CvGw@YI8-2%XBDyj>@S5O5gv6 zu{~u-X#D9JPc>I=J84<&sPB}Nrv>&}3C9|QcRuMXfno0ArjUaoruFH|Z0@Dq>RP9D zx+Yz|sR3uD&Go#su&QA#@4jFgFiS&jV3n=i>GM6Of8*s~U4LIyUAem22{d&8&)zuG zKrdCXqbpJD?vxy?f-%^pE=Ifl?j*`t8JA_TD{&{|ydBU)hd#(m%}^KY1~SgpxblHx z{bxATOBZhXj;qXjfIN|USG&BXnLfWu^(Jlx(rW3FQi$dvajN)I9TUd5<~DR{Xf2&> z7ROO_G;GzJ&7kWti-%695U+39V(xa_lGtH6U0ueayK}ZP6Em~o?X#U5wu)t6Zr!87 zJG1YU*`TIz!i?T#u6i3x^D0 zM-8%OB~dk!Hio!+1!x8Cu&|cnc3kg@E>=|BJZ5z5X6AtENt*Kj7K~fetn0NnGxQjf zYrz;eqlk9jWDRPVsp!blLVe^xP375E-O2DI44>)wVEkw zI+h;EJjKBx;hLMAZ`!u%vj(H{Vr@cdqc2 zPhVrhw+>Fu!FMUVuYls~pWIh*Vb{D)tvo09%+Su@Sy_08uh*{{{@>)c!SUM}IxBcK zkMqV+1;5_m^ivF(ucYFux4g$v9*>{9@wIK`IR!iIvqEPF&p}L;IdigVvvUf{`(4UyUo!o?{>y!`-=E=o)7t{MB4>yatge*IStC+6n_YQ-uPHw z-edWSFdmD#Xw1PYm%O^PWB%N&8aw4Vk$S$)&adZ{x$iwL1{pSWxc@kovDbe1`o4_3 zR-v8jciM?J{4kF5%icVd!5`_Q4cF3yy}JJL;Bj7m?*IRh|4+8(_xH!ga`MOLwY~dH zUWS|*PWK)e`qVAwSD5M&c(lL@@O|9&>?PAzTjBnFR!6h4!+D{Cz@Wh3;E=%3z_7sZ zz^Kqzl(T>HI)$u{zV`a#VQ#O8_kNkzVx`=Id=r>w3*s$ctn2g^vIat6C`@k_{PF!J zj~%jB(pwNO4$C|qFB0=?LA)+3)4z`ikL}vo_@>kJhEH1f^rJ?f_Uvp?cgHY@*VAW) z-`D8RPigTL`{^x+8p+h}=Sz>bhWR?X{yzQwMxVCgZ2a0pdJ953GyEK%ex`5G8sO6( zVD!yL!cDOFewSwpqINPv7-;nOrgT_)=`Dyivu5h&8+~*i+W3~$^cF;Kkf~o_^wXu{ z?JZb7gM9jfjQ*pkAn|cA&la=>`}7AJ{fAOIe64)w9&sfr8PRW$DN=x#-~5V=%@R@ zF+TmVKK-#ieU3uuEePMt`Wk2S)3wCbo8E$Wt8=FQ1f!p>U%u`+y#?_}giQU3KK+Sl zW$Xpmz(RDrg<*(?8Vc zr_1M1U-(mf`csYm#+267)E;+&)^wl#bfeF{)7hrGJBC54$fsXq^waiPCZR%>Ha-Ek~sPc zeEJKF{_<3)3sQTI{z9MrLSOiqFV+oOi+uWvjDEWPEb@iF*r&hP=%?*(u}{C;r(bUL z)BRDoPrt&aUtzvM!s_Q7FbnU-XAkpG${s3w$5;7|Pq%C;2Cbz&|E0d;m;3yeoA}bL zAYJlKc!&G+5BG()%ICkzgqQ9Q(w5?cx7w$_+UTe2W3?~*H9q|{KK(U5{k1;*wLbl| zKK*K+eznn0_uth%{Udz(NBH!Q@afn1^lNdeEPLM{aT}+Zf~_d z{q;Wm^+rEk{_B1E8+`g3jQ+lq)`rv`cY^rnMrQwbjL}cGhhu#D#~S~%<6n+1(ibC-^b`XYk9zd^iGuGTT5N=DR~BQ#TLu*+V5iXXHWVW3beBjvs8* z%D>q754AQ)X3w98`Q&!VTr*OG?4);s70hz<9eJWvAlb>^Bx{0X_I!DmKh4STpJJ_)?1X=)b-d&jqd(QW zpc}hpV;twh-`yzRq%6}U6^Q@WH4xj(!@(&sR+16g4|3mU0Z~W(4zxDb5RsQUG@-Tn+ zk7UO_=UamiFzc_{_%E;uB|H8Lt>u!P`dMVHmmD+ti>+44PW_i#r$BZ$=I?T!{3D-y zr%!&wC%@>E-}K4<^~pm$r|66yA8bu+ln?jG8+~#IWR?flcJiz$>pL0pQtLv=WyXKG zwMR0Ok!KxlJuKO=&sEm*lAZEfZT&MtUSkbFM2yezUu#X3%(UjARu*Q+M_B7KAr>nzDm{nc8#Bs<}+w{DSqp9z11bw6ZxW1P>*->FZG54d=dzSVj>?vrwFvr1ie z8sF$R>K>kyg1OM)N|otbl+3+o&P4&=eQ(w2u$_z89tU&FyDRJR53f$TPR>OzuZ#C? zDObz5d6jTE26u4ira4^q#bvQ{77ucF2lSoSj<_M3d%pQ{g$^YiS2>`hH#zin#HBg+ z(6pw{2^WYw2l_AVn!{6<*SvT3c>>P7(BgVH7lA#JCpGXh*I-@W)MHbwL+YkR*CF+y z7}o*$c5je!olrb}CumjbRy>cEbFteg2;UV%UeHFh80C~#=8F|{#oiO1?t=3il)f9X zcYvt}d{Q;x*i#j*fTo`@b%S^Odf)a*TS(o$7ZhCnk z8rfkluT<5!@9=SBMV`|kIwi&g<3cH)+BaILjm)O#^K{DHT>N(R(@vG?_eQy%s=F`B@llcIZP_n6*QK&wvaA^7QNMD|Te4qv zu4`rg-nn*>{k-#e#q2*gAF*b7lRW-u%i2leIG(pq-Xr-I$qz|xVLBghK5j?--EgPe z0y19C4MzP@@x7&Vz3qG$H~SrZBI)m(vml;-i2t;#M-guJ0pySTz_MOrJjgG@%l-&| zu#NiIIe!@SsWT7Ce%+amW`BwK2>f~c??@c~35nCb9`Y;H8^irC;wN#ns2_q)$>_#`qMuudcU1kBfXSuVr6kfhheSFnNaTMFiOkoM(C0KS>*r4SW<741>tH0WV30$}$1I%DfxmD* z-$nOX^5@DTw0eMb@K9pU8Toyjg4)PZ!S-FBI<;jlJTyzf1m13}rdt4HYMfW#SsKRy;=BC^m^L zVp7~Lo+9oPzbjrWeqY=z{#e{A^1PP$y+?dN&XR zF7X=idhr%JH}x#IUkp8qo)SBZPX8^zniyTtp% zpNsp&r^V;Qm&Mn_zl!gQABdlb{}!?2XVMcE`-yqt5OK6PORN%WM6Me!Uu`1S2`FD6 z{!qL{ykC4-d`qlG$IRoJ#H4th_P2xS`W8$;oAH{dYPsOZ=ldb{c2yu!yORN<6#aEWsx5N{~ZQ@Sx z67d@GR`EXZm*VflKa1~)Ux?wT6W>sAqF5$Yh}GipVvG2Q_>%Zn@t@+CVl>-{=MZt6 zSS&6O4;POT8^sgFQ^fPdUE&SmUE(9+GvXh_x5bY|EODFi?k^4#Cy8YuZXq;!Ys6#4 z&0@EBhIo;+il>VgiC2raiua38iZ6+O6F(Ba7W?No z=^8Fh5oe1_#C2kw*e-rYJYW2Qc$0Xqh}+#vy*w}eS$tpoj~E@`=nWPph%>};ajp0* zaf`S^JV(4jyiWXy_=xx$@sHx)#m_|>CnmI~d~u9eBrXtFibso^#BT9S@e+~WerCA0 ziw}yw5`QngC4MXh20F(L5J!qr#kt}#@kp^jJW)JVyiok1c(eF3@t5KY;$Osnil5>H zkNN1E?{J7XK`a#)iL1n;#U`;+JWae%yh^-DyhnUYd{+FU_^$Y=h*#j7^bHV4h*QK_ zVx?FueoH(-+$Qc6FA=X1Zx!zspA=sb|0aGUel7OL2^Y(6xHv_eEq06Ni@U@d#Jj{t z#An1mh;NG@i@YhF@%0yniIc=Kv0Pju9xHAZyTvoai^SdH&EikR$HnKw*TsK`pNk>f z636rn6i10u#W~^U-E^TaE~8^pWC$Hd=?uZsu7FT_4WoOBHm$B8B4B5}2N ztk^7W6VDRw5FZzx6JHnqA$~3n!U;LcWsF!zK44ihBp*iJi|bjE*OQN69Z1|L_ZIRl z%lfwDbL4-%c(L4fOWq^iAorh0zE^xe?oWv?i+`2>+u{Mae=hkyA{Q{2uY3~e8X`_7 zk^T~Kp14q~BB6hjxJ5igyhOZ8yiUBEM0^jDcUsodl3ykf->c%E<$gf&KgCZ-95-ON z6V71rHp`kQxs*gWv&6&XzD)8;v0CoON!}(-KgCO$%5 zhxIYZe-hs&_gL1alI;k9E2aj*RMkvmcTlAk0`x2(@42S!3h`l95wv92k31i9U^rb=E(qMX-?8|42j zu}$tt@!R65;<@4l;uYc##62X^v6t+&th*&YNG4%7l3yliH{ze=en9d+MQfC!7ZL}F zL&dQq!kt7uhVyi}&k@VTCE^;fMm$!Gi;X10*+L>8JH)fa+rluSL_9IF)v}7jxpH47)`{)nHnPF8&X#;B`3Tlg#ocn>OV(M|&m=!C z|0l)Y$o(ZUZdq?i{zUweJPz}e7>INZ7sruDTUM#$h2$f6E<{`=|7vj~iQ_ku>n&@W zUdE&fREw@dzs_*1z*DZU{0--~aMi0>^D_4+T#pG)RKE&Zcno;Za> zdP~T4mbF-NwRjv^ZCRTnx09lDe~C6TZ1iI>TLkNo#ZzF+dM#TUrKE$dH`-zJw? z)<=@RAgi#BJr+dza>)xVYqVG-_ru8Z(GQ8o$i0a?$FjO5pH3p3XNljF|7GN3xXvN@ z2JxrjgW@yd^WyvBzr;S{obdaKxg_ErFU}PgifhGMv6)2rTE(s6N#dE}IpPH*!oNb? zD?TVbEB;0NhxoDhl^7oHgfl=KB90N~iIw6iF)k*>v&8R-SBkfY4~x%a7^9I-;I7LOO3$a2)Tc&gmbAs1TKrIN2A53{TrB;QWXv8<;^l>am0^KySn z{ES5U{!7lp^^b{;{z!2w3I9@Yq1-FPl_ZXTg82Hzh8Vte3`^?eFXjKV{9l#(pTu|N|Gxacl6zpPla9V5(wQrcm-}R~RPM9Im2zJz9xeCd z#iZP~il@o_Eb#|&zgoOW?zf4L%6-51tlVD^|0ef$#1BZ+*QX@bI3lohvcEWnM0rmT zi{xG=E|>c%alPD+72D~iu zmxSKW#b-(6;}2wC%X(Mx$0XAEx%j2r`xH9veZ^c7#}Ai0S{yI;BFQtv`6S{gCy~x0 zAhEcK>oj!{44QU68gUv|3V_%55zCU zZ1mxDA0kc^%fzK5&RLHp5%0IeCh-KZi^Q07CV2wp-*Uf7yiUAH+($z1UhxUJKP|o> z{$6~Ig#H2Y6!eEA(*18StJsmlVvd+64iiU-6U9TtQgN2JKr9zmh^xgT#iPYK5wEo| z>1q{E6nBW<5zi9O6E6|35U&=0B;G9EF5WBNFFq#zQv8khy!Z$4b@46n@8U<|r{Y&) zpv1{fMC>OPh(pAX1wE`EMZ^IjmQjs6x&x&t~?~4BvKNh1| zh!5)}{lx-th*&6=igU#U;t}GJ;wEv6cq)nYiZjKF#LL9n#h-}xi4Tdt6n`cDMSM$q zPc-+JAf7KIe@!R65;@RSNMRPv}!oODXKJgy$H4^8I zZ;0=R2gE=a{y5*W#eQP0I9Z$~&JbsdmEtn-7_!u|ju#VRv-lnHbnypdk!4*iUN7zy z?-GA1n)^eb|Cr>@Nz4iVBL@38avyPkm@f_&M~johsp1TAwrK7jLHL!DSBh)Jqr_vy z262UpA02%i2hebDoRgdPfK4DOgt~r&-o%WRYc^OJY8DF^PHJE)tRKA#r_SFNy08 z`^a)Vw^N1ZTPQC>yCe^H-h0S-?kkj$m^VmVhkKXAeECBX^Y$JR*C)++DNdRr0mwKX z$R!()e-h(Kj6}UpCR_EKQM;Zq!gU8_Co4+`~@fpYl1# zKY2d#PhN=plNTZXddz|Nccpt)3ly5}-$(!~5l-rPh z%6B6FFh6T^Tu7MAvKN7>W8HFHROwg=xEhf0^XPBo0Ou87>!B zi5o;#0rfVDjbew`C8B7J-pS&*;sxTx;^pEV@p^Huc$;`12|Ig8d{o>oJ|#XQzCyx& zUK8IC-xS{!-xGVpFGY*xkK@hy2bfD4_ER7Z5l4tIalBYe!fwjMIih*q2JVX`SBcBT zRpJH`?fN)zBZ>CiC~hWU4`w|D?4XSL>=L(=7za-lPa{!pJH>NJ^aB@&7nA4@E*E!^ z=ofa2d&rn&T`%q>$2reyk^3m4zqm)dk3_%mkoYJ$P0w?IPf< zMt#2~zCq5xeGB5dB>I{6#1BdIH=l?-WVvO1DOy|?sX~2<5po%x?-FxK^hahL2sGrnrc!CVskv3dRq96}lW@(3|T-iG=YCzI%> zr-{YnU8sL?4vBu-th0e;JrM2Lln2_eO@Fl82T8Qs^Fkon>tWDgJ8chxXrFu^1>5E0 zB-*2S&IIl7_CAouS=O(~iFn?QM0*>6u-VScc@f%|dCmdt>7{JAqdl2&F?6qy?jlgos8=bF2i~*iT2Pyu7)0ocJKiS`yY$6)9zmyKm-_p{`KuupUUGwkvy%CN^bN!TG@R7?9i zk%YZnL7rn-cN_x3&YmPM#CS?xg!KfJCGBY`dAVgJ$t!W+4hg%tg@nC4LBdWxB(KBs zqeH+O(QZlD!)Ed}jQ`}FmUSa}7w!id3ZkBo3@dBD=3}VK@scN#sGG%-QN*VHQB+2M zBZ)HHF8O2<_HeG`3rGZhz2vMmDf&gULPmF{- zo`fA0OD-c}Pt}rZ$!QvApx;HgNb?`ams2j)cmR1HW!T$`BxKW{&r$yj+4Rq_zYyCe z_j?6g+$26DCfOXzQ=47=@;|8^4gyHoPH zB<%Ql$$LrIv+1{R{C>))EYnXxevvZl+w@D2-=tgzyCETeLc-onzXRFyJFt7xe?T_< z2kd`w(9y3V(GIF5*OF)t8zncAXcs3-K8-~CxIps7B#h^J$$Lq(mwP1NN21;Am;4lY zI{H`1Z;(4-FOokb(VhxIAksU8M7tU<**rIi_Ejc%4vBVV*46i;9w?)|ZIpi_iFVf^ zxr@BgvQCq{lSDhbSn}m0+T$L{*OPl-SCa1`uS5Mv-cO>PJ}3D_67BU3$#0Tqw;xLW zghczb*x&9){g7zKG0Edev}dcZb4P1eT|L;9bhz2w>q>0zvI@;73kvJ;$>l;i6n3Ov z%HzCb!YWKAS{y(3eG2C77YA`qeT}B~A@DM<^zjAM+-W{njTif5dN@(@%{`g!-k1Cw z#K#=aE4g_6L;9sZ>7=D{>Ur-^W|%n8dHYYMvv~;x-vQJ+tn@p6@S>Oh<&8J-q`lp8 zO&|S@o_Og=`ZzZSIL`mpptO=F@XWUaWoF8GS5PmvgQnAccTlEw>J37f&Z+kZWjd$c zCY0%nB6nXPl<9#&Kez{uaNjS~JJY7B%oj%w>Zi8`Wya*#UgoQS4yKWQAyB3-<4nC4 zDANmR?e%h?bizz^>a|*FSGWFfZ0Zdz9vg7Iy>9~QeXx@!^8%pE6geKAm;GdV_kI~r zroYN6{Ys!rZyoM=F;J$z^Ln66Hx!@u!QgD8<5|Ax}!9qTVSE z_q9B|JThL+)5|yG6+M~0z8CfME*{S-dwP4C?3$>U=@Yr0#}y*0q- z+f$=eYMiRX*v1~;`8p;)8-+2=d?~Z8zCM}Q>h*1DXCNtMe8USLS;N4WcIxfY(u_|5 zDMXB%R$)VXYik0Z{`4GWzC~meme;H<#8K8R79WTd?0*PiK7$z>j*Yk3(=Q4|nZvJPhX<$nNHbmj@+p zcvT251|^1vQ@vDpJO}fJ$GLbv_`91M9`CjC>U{}4+KaondVH6USFayDo^zEzSMPWz zdDGXp-^m}-H%NNS@9Dnq_)d|7<@YjxV*WIY_)8K+ju# z{ZM{x{Z3W-5QW8eLwVD;9S6k@5?(g+yy1;Ucq~8K-*o)k`k3eoZx;@lbCB?s`}CfJ z9+I5e-2En>-tV9{Hl>w5=5(LlC(t`sJHN@NH$L0B4(0~w+TV51LlD+td6Xf)G3+zH zGw^fs%X<&K<;M@RO@qI?x#8XK3$NB=&sfSzg~v4$Z+MFlo*M?kbj#%xUwFrP!kg_0 zkM}xy!>dAg;~9`PH|)=R;Wc`~n+sj)(O!6Oq&K|H2(MOQ5pH;;KD~#acd&7_#;5lj z^r{aM-ibcFSpS2E$9pEd=_`XCf=q4jHrow8y~WUr$&YaLe&N&G2)%>#f3N%WPKF-) zc6W2b`vZ2ocGZG%eiuru_*LLXJ(lyQzVLWYfZNBxJ7otS`NFGxBHd3`LC+13@7D5` z%Q4>&UIcpH^d093Z>cA|iN5eQB0TS$m+^8N>kF?D;ko_Ba`?OHtMr9;Il^)-=H_nr}xP>=#~5QLWuNW$R7YpGeyu`vtdtPxXaY zjPMRt&foThx6>0Ime5n-{m>WQe1vzOTX@o=c%?7A3lJX1Beu5<__^uhyWG6x{0YK4 zSUdlX^jv$)#pD`GyQ$4}e+hbQ$LLng_6z7u(LUjJ4S!d7t{3%UC9ag#dkcEra^C+0 z>}9Nzk8eTU&Bv#{@cvqX^En2LI)2wSw4*`^0K?<2 z#;3RM23&tktEKefzVv+wy=lmYyD?sFyl2~+zAq8Nb0`<4?*#nZ^tC__&K*34+vHm< ztJK*wf8G3&o@%m=gWew4U>n?@#E;>jDVR7t#czH25T36%h+W~(l+9z;dL|UGPDWbX z&5aiegU+W6HWjuP#bU9NS#wKE=gyc}R)+oJ;$qL=S+n3)S~6?)Ea=5z8?#ScvTA7{ z;D*FwB(;|84NUyk}o*|0CD;+<{|mtG=sZ&LgEucf##*gm72IWFy@e zd$DJCEHLBHs^FCU*xQfTBF~+7e_$MPg1Gl175niwy6@q4KRoky&s$TTd;T885GZ~6 z9mL-8x1pf}%liDFoB3yIW~|(PTIfJUpSydummIb;bRer=@yZK&%BuT+lpFc)Il+%| zqeC_yz4?iycf1?4A~RMl`EcoH&qriw z6S|9P@n_nKstxm?_AU6;Z8v@sy1$ie@w*c%8n@4*>jE7KW;1m$90Sd4D{8bTv~JqzWm^wlgfH>=Ktn>`y}hKGSp{5Pu{evdkS(7UCyHldiqT(=*b!}*+_pm zZ<67ZrDZ)?Q;U}dW>UwV{@L?=XmuA2>Iob+?*98evIZ1Cmo@8-cS2MD^ZXTGj4U2H z_4C)QqEDaOU|L|wxyudVlUrcI`{?|9!xO)kXL!XIYjbnW-cNg~a|f6`Sa@!KvzHxX ztk1r)_QOErg?Da8dDY-|E`C44kHZ+d_6hj$+-ebi7~agrK5VgdqSa|#V_l?w!91s* z!`}e!LGL#MJ?uU>4oUYhR#qsKhk&yJkykNq2|kZMSyKix=&V2(gM<~t8^W!usY9l5 zpIvv>>>(IrtgI~impCwZ1CO3N^hD#-XB;}!tdPAF=?R+m3irDq& zm9rv!mLSkj$Zp1(HvFRW3q&R}ywedvupo~oqc$%l2ZtlY!6Ereu^)bduD|0S?gg9k z@h6sF!~MDl{){h3U_bmmH85gYHur)rU|)V?K`#MaE#92-O)O9Qhk!3)LGT68V@u4Mxb0Oy@C;M(7ve?d73_5pp6` zNL8rG1f3hKr)!e?_rZTbI2s<%cap*TbB=9uk~!3?d#2q#6ln9viAaB}2+q$89x z!YL7aciswh8sW6a@u-7Pml4j0aA_jcZG@eXISg&95zdZWjR7#U%?Rg4@|lJ0M)+=o zw@!t27~z7*-Kg@=Nk;fya#PHH~0iAbJyXbhC+lejxfUTK+9Y zS{#V-k&4i*Myd)#UuO)r8EJVS`dez=ZlqO#C?Dz!-C?9^lnbRhO?|U_1|rzje%%_@!eyNYYasB7+2_CBQ*u0d{`;;Q=_># z5IvWn{LDx#f#}tY?>?j15r`h38QyQCWFR`2rTc)<>Q`oxu}Ex+*KmTUkR-8qM8V(K0r< zr;M~GE80Q7Um5B8tmsb}-_xcs?1jX1{@O_UvZA9|X3rSuzO3kPsrego+@o31H)xU1 zn)vo-MW?b!{nkiNWJNz<$v|ke=*Y7P?Rqx2>sQBIX)EK!?gU(NRva+PkG#%Mw%9i z^0Cs;Tlsv-us9UmMvHtq|My75w?k1b`-k2!nkR>%`xyJXMmjANEvEJSJ%0)ucZQ-v z*sA`KUkT|MJ354+959+zB+9}Ly=SCQB+AFTL+=|Y5{aJA68ykO{UXsA))xzZ1*`Q!PCxRQG|2&Lij#8hr?ncIsd{@ zQENay`$(J3FmfyUD0_Y06HvDz+Yy+3RNnj8&x)LZFzpRS2t`;P_R&Ty97)0&>|^pc zrHkMzhxWH@_5@B)$9sc{E2uvsN%ltL6S4-3w`-y&@PG*nbX^X^v2r`RTP?fR2%+58 z<~GYdwh!|e$!)FMZrOExnB0QM(+sLUhsO`IvYAr0XH%ddD|ig@Yc~d&oB>bSO;J9g zncJ~>hh=Ya(gh)D*_-psvzw8}8CY{(1GEmwZAdm)_6f!(78#DhvbW@Q!lx{~4wWf&80&6!u9g%qyI*hP05`n4PC+0DwyK-@sXxT|qdJjeF zP#t!sDW*pw{NRDzWfJ;}$P%WY+oFv(kkXCua} zNN5-u*T7@ZY6EwpSvyba1a@D6?k2C*xK8Fi%GYf9$?Z^Fz$n(?w-&#GtB|z7gZ=1s zGJak74XWF^$qKxl{~Gr1#_uQi9kLI9_#XN}%~s&yeAetA;PM;%2ET$o1)EV4fuH9x zoN9P3$8X3p5V#$VqzrARJwGv)fey8X{Rwykm2^D3h6k#7m+-K+<(8D&4!C_NxAPn~ zJBVoDj0FL6_#W4JsBz}%4nzH!>r6wmhGon7S=X5-d)6>ET57-LI`bsW8pc*h=PzC7 z<#Zmwo6~;{XQVbT4-SVg4U1GF2TY0l5Gt48H{uR>F$m^tEB+pl)s1tdkzD6~8P3DL zEB_O4ICSh_4IH4>=aSmX1Cg(XS;KZo<8)W!TsT-G_Q=^B^dmZ1qe3)~ftSG&0$e=D z?bS#^VD~W?5ga2p^-vnYTX20HzdW{$z^RK_Q)6I?{1}okj8oUrDGu>i{0i7m0^iMl z3~oEIdm7!?jRej&hH)cge!pl)6%-J>#fMZ!Z->lFoKau!t7W2>5_B+(Cha(@S$;EH{dI+fsA>CrngFJpbRCdFA7xjlgcmzAVsyn_Pgcq^%I|{ss<^Xoy!EfZdIR0;N zuqHf%AnrivXR#gwx7*|Y0EfP)Grmg()psI#l>omBt9yw@wmT?55)wI=^tR( zPd1&!F*6vEHH8HcIMOubz@&}nXaW`e11w!ftztISCL8;xSjGNnvaySbW1ir?F|W!Z z?pu>CWF+JI2UwrZ(c@;Oj~;h;`si^R(npV0b{sVM zizKqA&p~Kq*pFJ%w%~aFvN7KZ3=B-j$?qG?8J=_G;DLc$m~_^7t8d?haDojVf}wg| z-^2RO?Yjb%8j?>0-S$L_F5#I5eewf+ZAUKv*GPZQVLY#lW;kFl$Cu+)14 zD=UUFt~}e5tgOL5t3YP4Fp&;GZUtq%^#;K$6_NA~=^Hq5FasXU9klJfD9yYuU50vt zV7iB$cSZodB_`9uzk5c&${KP>1$u)Kt_PYJb}j0lbqqiquz*Kr1cY8ZHWCUof%_`@ z9yxeJ-=q5;)tB*&DYHuQm8`KNv7e!Vr_WMHF@@>l@Ki?XxCtp8H)OOtCv{g;3}vb& z6{2dK(w;OlW+I;KEmO3&!c@^s8oDAshMXUoK8OxX?No23V9SNpqM`GLw&l2iVttIy07qYsZJ>^>N-Df29AlGt_O~d&>A%yhi z1at&Jjga+m;D~EoZ}!gaMvW}1_*!y5egSL4Q^1SP?nE4WsEJ_%9JF!NJR84=^{F-C z^J$-3sesWPI-6qf2ENoB(Txesh@~U0rL+pasAXKn?GBjSJd~kCiD`;BO3OxE%cPmk zAmsuFvmudLjFn}=W0)subIQYgl9}pjb&tF}uzdWA<>RMb%j_{YD!|WdSx#l(D%Bpy z{Lz=Z1;2oGByqdhJ%YFczo6B9>b2Zq>`=j9XY*X^atgPacp5*{8S#$UttQMY!E;Ma zuVasJk9BG@efSaX;hEKpFwKTO5Yg2TjDt!wsq8YA7=4V=kqne?*UQKRM^RT}JvCTv z_{t~t+%1rey&?GFz!<=vCyaoZJS;Shsl&XE)$lSKLN=3zePF;kg0a2g?BcK4GBr$k z91Tyv-Y`s_9F0`PWQI|ljwO{2+7b_PD#(;Drwf@SoMlverQtaG3NbS{Q{N2E({i%{ zbht0m(aEv%m%Ro024bw)ttBSl7qU9uJ>^>NvB5Ek)v5ZO1{X$7cXy)}H(CQXHUaNO z{V;yC7)&rty^aE7__>?w7lQ+>!`(RHyAi*=_^}S%qQ$P+Sf&>vKCZ*@b&k97yAi)z z@M8hE+yByW)9vb#%v~;iER$0F?!(WUuLxxN(|tdFZcl<;v(3WaIrtrpA3LT!_}zt{ zcl%%Ec8<+%;P=QuR^UH5{ViPPW^V8c6c!da|M9i$N<8M!-d5Dv-koenSVf!LTN6cz zWOKvx`tHt#%|*5C?Jb=}%hnv}?9?S&r?=tr(9;uj_02`iZ4E8mjftYxx`xeseB%G@ z=*}H@G{dCG4NxK+(+N~u|8H@m19T!<)m)#fOExDuiz?fbjm_;v9W8ZTP3_6nR0{Yl zclWM>1{PYpG0{}l-O?5B+R>5dEZj^Rj(2u7;&K`U43~}d_3`BPcrvkxzNmdq2%9Zb z29?|41w(GF>)Pz>rIhL+Lur0}cXLbE^yW5pO>Pia#c+HbZS41frya0t(~yE6SOMD} zYzM;qZF_De6jfThM+c|WN1bg5b2zJC`c202D zsWBWeHXH~CKZ0{^@Ng685!AH9!MQjd;p1q#fA9h)!g*nO9c`DwW7K@3_8AV1L5wJ( zspgmk_H@G{dp2l?OAyA{3}cW@1*2SKFAqbUiYSV)n{SuJ?CH}X73JGSP%0d24ovBf zu?K~R+S7wO7}G)%4g($(F0g0JgKDX>yB@nU>@f&nY>_=?G&21c6wsL9wI;hoHZp7y z{ss%kByM~vqoW~5QSz*XDDoLVg#E(7|DH169ss9#F{aKg3p zPcO6&9m71ZCa1w+T#-EsZcf$CLg5|CsK=VLM@#LgBOnza%t7|_sm3E3&M&lwUu;Jg z+QZk|(PF#wmvAqJN`A0^~hm_2s-20I@T_JT=-6J85zth4PIcK&Sh7bZXBjBx3;Rfx?V zhB8J_!F>B@BD}&8$JiT;INd}TL@-7~+DcFi!Rq-1rgD+rdGH9t_-DRd0%U~;n7^>) z@JzM?yFVHP5DgD5Ks};9sC+n_ix#asdgaQak3Pm85)N)YyfAAh%A_NSUZTlD?|_yZ zukUI}bao^XjqxTl^+Yn>(4J^&vKrdEab;dQ4NdK(@rI^NI3Qlv(9qo)Z`{__+0YVi zs%uCobvAEmLod~s=!$nHy1JU%Hg#Ine5@P2CZ55=U#p@bzOJ^s_Q-Ydr8VWNm&BKr zuUNID%F(K--^7RX;$2qVrUu+xVzqBgBzZmitm^9Z@Wo7IijvlK zHDK>(scva#rCi@qjXSZ`>)PrYkWfa#=GN+U4eL-mtEH`VO?ySaVlUUU8b2O zsOghZqfOwwN0Ta1pKeao>(+NyH?(4wsa?~6M2pw@ z>T~(Z>WYeTQ=tjx&?jn@U*DSAb?a(Hp<6X=E&Ws@YS*+QRpG15sR_@a5&L!1E2*kG zH&hpOmloB_U$5!Y53LPnR*N;pOuC>NZ^~A;pXoWw-{RWq(L>g?yA8lsyhNIW*|n`* zoP_HeHdNQv*LQFNx7yctNwe+8 zqv*e$E8T8sGQ(@?i_vF08d~cbRqj9rp5+gaDTj_P)- zaXHLrs`}Mys^y*I4Ye)ny-=TZMeEyfissHis=2ipEf&8hsfPBZ&UNUfon5A*yQ4Z{ zVXm}pq)i&Rw5_&wow?R+tg1=T#f)+iRq$^##i@ z0=CNV$BIhQ$6*;A$!*@gk=WN8v`}?2c)9OkBdBGyaYv%vCVGiiUx~%1JLVl~t{%s5qgj3S%b+nc}InRtr+0*KtIahF#TF+f`j>&0jQsdG*QV z3;Qvuv!TV!+r;_my40&{dd6>%v_o?S{3|B1L8msWgs~W>b<)+E(`xBNbMI3rs7q5R zoEzCfIvdU~)0DqMu~&4!HEwU>oGN{0O&iD~Fi$i#Bhnj$d=^)?*H*W8G_ZPG@vCd+ z`ntM?&dzz9?!=ojrklix2HpRhmhcODd2I)(k!RBE<}=*kAkkDgBT5%+X~O~X)u`l= zrLL``gG&JpJ??c{(iNb4i8=+NY~sR9<_^q{U7d*mBcZgUy3cr(sF?DK1t~Qn%Df)q zn<0H|V@A>}=!=-#pYBu{i8|Xm>ZN)cQ0!K3Ao2Ot z%*N~@_01bhb6MA2SM9snM9CASTDG!!`TUbkSiE96eT-Z0Q%~&u^BuI3GMWmPdyu?&jnLG7cfG)N752jW^valP8p_j#;!!cOOh7|Nn;b& zbY`OEnvd%zBUiMwuvgEn?QE{&5YTDq80%kT(l-B`(k63?>29eh-3De>MYse|;I3r~V%Y4W;K$X!kA*R2M&GQrl72bS!SVY?#q7 zdEJprv?e}zac6uoZYCUC2TLY5wzf?sRYep#)O6r1U9a3tz$Es z+zH&$j-e|AwaEAykccn!jwx!)n^ia-4yf>lwS4m0rh4Fxms2Wdl zRJSJW?eH$GeBS3-Ivl%8NB05@Hv;OKG32`1z3$}8CQ()1h}mbf zP8o=&Yb%i%y>!NE3+nWe8zv-Q>ekldQpv4o&-Xs36(uz|X-U3CS>g)UXQjDbQ#bjP zm3S?K2K&eR&aSrh>Zay3O|p9COoXc;ORxM@Q6jx>Ny(|PwXL}mqYM^_348kQ&DG}W zJ29o<1)7v)01Js#5(li7W(=q@C9=b!RiW?db)>hr>h$iL)OM#_V@~AfX>fTX6JC_c;L@)bgV4zDlYIIgL zxVM?;=+yS%n_~R6#`99w_SzhoGw)?2T@#prz+A;!b1N#2ju&vU_~S&XLdA+V}d_W&CbZ*G+=Z3mb8n) zTb+wTmjo|G`ngEIG?I~z^yS6ST+1JTEPFf-of#)gKFJCXOgm{nAQB!N%C?8tLxaQY z;r0kTP&6u(2c4;#KPY5EvP>inxG(mZSieE{Mf=D{}LO2dP{70>Nh1m z%tx?<^V>~@Uu1k6-ca;O{1I(H%J~E2{7Igfc=FV@1@V(U^(Qv(u?h(aCcUjr{mIq` z<*l>C*})WTK?@Ii__m<19wh>T?h|xgKv3Rb^F-w5Z#m5W2zei$#bG-d41bPIB$pp4 z`J=7b_@m`9*qNSfYcTw~*hB&uUxS_TY)^yXzYZLmjq!MJ)7vQbc#?ZQC-}rwUVfLA zU!Szpo6kf8RHEwlpkplh~igT{i0dSiMzm?sTvvL_o5{z8A@Hf6N^P z`EAPh1$r;aM?T~wl;iGGD3M(73{wW~P`pR+6~#9dKTtfN__<;jdU<}P;t0h!5x*$2 z?FAxuJ3x`opi!QwI7_iiagHJ%x@EeBic1uiE3Q;zk07rz%N;lz4}d8SQRKt4fo#jl zB_gmu!>1^gD$Z7%t5~I2tJtX6rHF@oCBGiU%N4Ixq(5m7{YiX4@nOXuD$>7<|4?xN z%LRFY;&es%9wfrW55TWz`00vgDsEEbv%A#8hbf5PROC|lHsJK`0r;4vA^7&5c{flA{ zLp$Ze6h|vgRy;;gzMqJ6r>NYZ*r|Ad;uVTtQ~ajle<}V@@t2BkDUvIPb{tfc?;t`x z0zct1e1hT(#S;{(6l)dR6wg(>RPjc|I~5;Nd`j^J#osFaNs+IeF@Jfx7dR9hnetdg z`FvNaKH{_%1PQ^_``1TT&Z&vwMm3OObzOVKpm7mjizJkf~|Df_;RsM&{8CbK>&Nva}&R3j3 zgnea-^A%4eLf=}I&rx}!%2%kogNSn9PDEeZt@7hUWiY1E2D=ttxMX^q?UGZGSixsa^f_K*C<}E_;tnG6dzQ4MDf>(zft_X;=77}Rs2jb!gVa{%TUZw zK#}jwG5t=(I~8U9jqu$n^CfkrdtCAR zia%ETnd0w>=nwBI?pHjZ_?aSZwn#czuOoeg>t!HcizALzoTNzZT87K|9eA9|e4~@$ z^A-6H9pyU3(-mc1k8r+E$9P%S1LeEyK>02^@EaO`kD`2^9pMkD%s1zFK411H{#@}_ zihMzi;U6f=ff%6W*#kSww}KS$*P z#Yu`qilvHWigOg_DK1o8qPSeKMzLP8NwGz-U9n5CTT#Xx*tu2ZZHiYaZdbfPafjk9 zin|o=C&Dj#6u+bRnBrc=eTvU0KCAe$;%ka;D88-uj^YQ3y^5bJTI|=zKcvXFl_|#* zhY`^pWLyKrDWlx^iUpc(lHwnTNHWnmUpDg_>b|hR_#%}{iO{!7Uiy87LjP%U6O11Z!hLA>lLviHckh#VA7@B>OyPgy z#~9#h+{R-w;Pd#hu}=IOs#3OG{AD@}9kQjSV;r~f*weB9t8{DwsrimWnAuFelMsN* zJ*!M3;xylyt?QmRB0q#AY*b_aMNZ@33Rh|Io*nZw$N1_fZ_1b8u*#f^{SBmzmAPaqKb2jLX8} zuErG77xxT~{rS$DhXABwzF5wC`M!!{zrIe8@3U=~&BXl*0ZIB6T2>rk)Q9D#r|&}? zn{#kz-41=cA8a;r_#OiM`kJ8c4Mb937IxzoDl_L$$E&#C&HGbkGjX3Iz^`xKqC`98 zI@svr*vfNE85{F4A2UPU7{`5RO1hevmUW^@q-mIrV=>We_afa^BLJB%w>T2{?W=)( zw1MU2`rO!8jCAO`?Ff>s^r%E1V1UVs=xZKU6Vh?r2X}*)#MPGxWS(X$z@c@+G0FBB zeXK)&x+`H{xrs!aIc#@-62Y&R|0d7r)R`qkac=*b=XBS}w9xW+PAA}we%3>w%7Gt+ z?U*nm4*V$1o+d|M1M_BJQtXMexD&Vc@3&)5q>r)2l)q=$*Mt55ww1)=Avs@m;WB;Yp_T-GSEU#w6k&@_G9X96yxg?K>c8 zhy;edgb6p+`sy9kIX$Z}G0)mj)+VX~OF<@p{>( z>q=hfY5ikhLgWQ{YT${xdrwE3s@NY2-iD*vKQi>RKhoExEpvKfTTZPTd%>`7)XEb~ zYA;yn9j7fgqC0q`{X}@dgT3e3r0m}NQNW5lv3Iu>H|g0&z6WZd>%c~RJbvH)^x)eE zUqATf!S@b+a_}>G2Eqo1_G#cGn1DI;;6d{QK|4ZE!dFBNL)dJ%1@i z{cMc1e?QoJ@NWnIaS(lprdg}9&0G<(&q7daQMzS)j9ForM7w`Lu*zq$f}ymNFoy^2 zFu(p2`X0t@@U&JUP0&u~k1xT1GaT!Oko+)l)bJX{1kxUbs$j_BRcPqXF`Tn__}PpJ zrM(*gq&t5{U@$%HAD9cEXmlFV{gB#*WgU%l&UN?`zKwr)6k3MW4tQ6WGwK0`VkEV~ zJPK{X#Rhm+TN&^y{x~o550BE)Y}%P#Y4fH{I=|Xrr~i=m7t^y|CF@%B&&Uu&u5TiV6|KS_5V_KvP&6A>g2+{Di+;$U z)gq)vUxaf(f`bdI3bPjJYKGB5gZMgl*9uu%u^;aCx)_wE-emCc84q z&*6Z`mBQ80U0BzG$d$tO=v>-%o(R`PU&0-K5VB|4tTHi>Xs^hv7TEOf2AqG2}YEmA+k7F~6fWV%1PhUK|hm`@KxQNI?5T$$|i=tf$-U4(zen%U;Bm2)gR z7NqB|lc2@riJ@iJAB6f_w_JGKhaWOmAOgnBCDZ`E( zPrvLCDbtSecUcg*GUZ@9_C31x>mp^_G5+QUB3H&8ZpS)l<}G5`Fgtc4>-W~IA0tVQ z9ebWu-zF&w?buDs;dYUV?AQ&=eV0fjc8uS)0Ff(omcnXE-w1!AZOL!B9m}K#?-%K0JJ!PU9*~qP?bxUE{BDs}*|9g7!-FE#z-s2cN6xFa zV_%_{9ule1j_sk<4@=4>J66R8^@vC<@EObZ9ZA`4$9}=w|4XC}JN85RwCp-}8~ zxDG_FoEp+Yv2U{suVmc@DHe)-${z5lkf#m|#fH$%*Cb_TDE3{p`QM0T*`e5b0Z6Y) z?m3~@LE7?Lkw%4Lbxiq&NbykY0k*o|iIf+LJ;WT|6rK5@7@1~3F+Mo}B3I@fN{-K_@%mAj!zKoaY$&8-)JFB%No4e~)8_0RvebgWy_G z60pK#0CpH4n#kEIF(+CMIa>$P)2tT>T%&O@DsCUe&=|r66td?p?kA4rncHC7{EcyYBbXQFo(J!N? zI1O&iMxTRzr%{?}c9g7z&KeO8k8a^PO)^Cfi!MV;ahfG&X0(LnoG!xA(LbOiI_|1z zR`fD78mC2Kj*I>iEx}nQLRs`zXueLX2(zP)qy0E-V!@m!ABu6>MVJ?T7cJR2LxhFV zN*2ytH7$wmrJ?SsX<76jlXXe5<CC zvIy>~33I?B=toXZ)>AMTb3iTiT_8DOoCk}FxlWmCTzRS*Hdj3#_tgOR-j^x}Vm3=3!#fQ#7 z%;&Rx3SnhMYpu8dk z9fKhEY-`M|Y$s0+v{|_PacDbs#6IGONMw!Oj9zP>fo6}N8^i?q+%w^M)miK_ArDDu z!UtYl4%;0~IOqlCvC54J#qh-YaHU-(MO}?3d&k>QF+skeeekwIqVf~ z2dEl6g6FLm$`paCHWbt#7kkAhiXBMY&J(s^(6?8NbCaA|@P;IrOz|Q_Z^oWO|M3RK zH;^fvGHWEbv9H=-|j z@i)-MJ?$%zi3j0Q?rGKGiL)_=a!;!XPy8EHa!*?wp7+v4!fMdX(2n6zBk>_ z_YUZf+&7ZU9vn>~3r17I8)SwVc7E1Olx?7456&>`!GjEYaAq<;@L{R^z=QqNvjO-u z%Oea1sVq5blPH5p1x(ss#LYMSx}*Xo3$8!x@MO+i=M`1HYQ3+ER>Ejq4l^_-#oum)tk1Jy@G8hj|Upz3Te7zEo zbvsV~oBhWUQCU=Z;93i9X_BIa@avy-wIuPzY6Y2`C6NUAcIwi!Ib#fh52 zz?ei2jI+_JFnMF+Fao7=?ET>ns*C_9s2A4H!B{s5p#;0j4$7laH-az^LxCH?BMvxF zN?7eh@TkF!AaG7gCK`pBKAW5OQh(k{cQWr8*um~fFnKTCnaF#oKkubG6L~N7=ba!l zHW_oYhUElKKK&cWSpO2z#f=jO zHyXo@UgO4Lk()tQV}F~gKN0gkp`YK04q6*w$^R*$Qjfvrze_oanYQphq#PwHOqZX7 zRA^!v8yotgB~`{z_pt(Sin5V9xLqQ39Q?Tjg2b$BFjWo$o9CEW;VGwvg9B}6&_u^s zB!9~nPI3l;crjd-l^s5ARJdpg5`QU~S@ik%|P1tW1HN2C-=wzB7TcZh0=2qGt!`GUk9VyekCy@bR=-1kXJrj>vcpqI!Wzc` z3z^G0$ihdM{E0tJRL&83PI}z2CxHbt&&jn&e~Gio!5^AU-{peMl4|mxa6tI@DZ!Y1 z925>EZ)W=}P#>0?6~>apW0R0+3iF(UbV~HcD>EWH}fbgiN#o zqlzJ1@E9mu1_@+kv>VO?Ul~}I7V>$4Py=K=hhSq$RlsB{f+2BK!UaDsL;rjs@<8j7 zrn9O*7wR*t6P!!nr)=r+m^OV(7|KcVf0x;bbpTEvX;*GtbhUN4BwvPnMjdSG0gg5t zM?zIY5)6+Urk_L!A|yE7WXI;~Yom>+ZB+A2G{FQJnQ3Z=WT2aS!lDzFl`pKGbHc*% zFM-+igr$A>iBQ8RHJE5gtW@1)D3Q=D4ney{I*&SVpY*ZoP^>#1xem@ywvq(7Et~Hb zGVL${IVXiPQCJ@Nc!_%&Nl(P_N-vop*i_?u&DT)?Zg4arPIm5IDKk=dVO5MrrA(;5)tVC1lNqZr7wRU3U7wf z#8BilfBGdcs34_B3E8k_w#S1=pZ28#@=+Qichgtq?6H zc!F5m1P7RpBMkX?^k#;_TKk&IW5o_f4p^2F?IWf4sF{Ztn2l!INRDc+N4lIzW@?9$ z`WA3S3wO0Jii?+8+8bSWd6yuV6D$1Rc`ziJ=mEIYP#)Fd1~XV-CI?*{Y6vta?#O}3 z-n5uRkMXfoyUzDfX8Ke4MHMd&kL zno4v@qSW3TK(=P7LXWn}*ISg^Ty6GGV|_SBH4Uwh-lJ4}u!AEI zTGuS3e}NvA8&u4N+DYplVENJV|WN zrrN!s#OHKB&Ay@ePK-ua6ocuqtE0BH6AW^sXEn=S3_-;wx#L!IW1XM9m9F!(1!X+c z3hmo_I3Te5m~mB?_G}D>QPV3~=h|klaHDV3g7RDo;jbl+I-P!XSNLYx3p&(_^&Oxc z?^@h0M4$bge+XhpB}YVt(90pat~q7-=JHwld{c5#U&e5_0Oxz-wR!|aafd=PzE`z3 zFKei+_Y;Qq%V19rrP7!u4FMicrx{B6E3%)`S7xlfiTo7CtlUIjBZY9%;wZtiiR&)c zDg9K_A<6sPky7cz;UBh%l*>JTb$i_U9_72&(HdH6(F)N@Oo%j{&U(xNGJ<`<_YIOr zAKg0Zr;lpwwbyomNLDytQ`&tp8)?F9A3vjUwe%JxHHW+0Y2VOY`>qpsEvr4i-w&%w zsL1r6lwsS~CaY$e5%8#z1UW62*18PhD27h0j!&L`We!NC!A@#!z6*rDXyvlBi(ad5aCEpU;?RU+^26#8t^IouExLRaXIy(nGU`i`yI46iXR6J^H6c zwGacpw0d@4%-g2jaXL!=dVn{*Dk-fuCN*@;sjn-?6tJNovEb^!Fa@?qmnPT@jVT1a z9xJ7Hf58j!cq)DVP?~I0bj&gf+Z)U4>kjpW6L{40aNjK!uPY{aKh^cd!|qJsQNt%@ zJXwE()Y(k+5~Gtnbokl)(PomnDgxkzT7gL_{vLz)n`ic#ubv>@X(ub z{=04LBIu4n{_Y!_c@M{o&3$u7X2wt4yYa8SEReufHJW~^6AN3nA#~=IGJ4^1uExB1 ztzKq2-ocPNi14D<|6M1u@9U6TJZ(v->HCR_@)aU^JoU}<{WUQe8{EE-U50_hkUDW9v%6z0cZ*ecDxr+r<2Ml((vNhvw7{$ge%< zE^Fus+ z+ewnAeOQzIyL-x#m%uo03(m zThHqNy^$v0?DBoWN5eVfn~BCFriX39#{iGAT9YPrUEilp$xN59E^$+|U(Ro4>R-_N zy(q(f>Svi;I}*vfQNXt!n>u8u$x45yf(+s+DBe<@%17E-NdZn*DcsFu755=sWNUWdfkT&LB zp8U@-Uh`RmL-Aenxr6eI%uQgXZp*+^RB^~=+^`FDzFOvCOMR_s){QsOk8;`W%(GvH0 zlz{Jf5(ME{jlO)^V>CT|k5?!x7I8ll%f=@Q5*zuo`IKK`OPBOK*WFN|zAb1)Qqo5x zeZtRtawf5nUprZUOwu=b`V(jJEb?zBr_Ye|2`iFggJ>DaA(<)Z*>VzF5DeJK=?6>t zxR+$Gcf^Ar-cqLj5*r>u^ljw(<}*^<_^gHvIXOL^+V^cid5AU<(3k(44;Lpk@`3xe zpfFn`LW0)lgn*-?w2T)(2F-;ij+H= z@F#nFWU|YZMqEO<(6UZdBA)r{1qQ%r!-^xOp2sMj zmrulb6NxxaxWNz^*Yns00&#GTGJdN22xMfs`#2-*n8|QFSh$D?eSA)j`c@JVxe$6H zFqRJ$5;;y$Uzh4XN0H+Z!wuq4WZE5okz&ULmlG%eBip`27JfNNn6|YqMnxb$zBK{GT_bI-h_`2fzioJ?_(}a2lD+*^LRD4rWxEB%rxyq4{n{Jq*a4sUg zROQ)7Hz{7Nc#GnFijOJ&Sn*{=zSzk84=CdE*&=5uj#8YYc(md?#gi556+0Ar6falY zp?HttcNCvi{DtD1iu)D+sTji;Mmt9+7AQ_voTIo*k+0t|eXHU*ihNg?;WsFLLvfGd zlZwwPzOMLz;@=h1F#uA};fnc+C5mN=q;X-oRf?x8b}MdC+^%?=;{A%>Q+!tO6~%WH zKUEA3aPt|g7*{M*oTYf8;!4HSFxJz)F2xHJFIT)-@h-)O6rWUlPVqHGQpr%?r;0&5 zu1`5rairoz#Tklo6qhQVrnpwITaoV{QQy^yI~DI${4d3)6@RYyhT@+T|E`#Z35)u& z74sB}6pvF}sCcSkli~(N;eMxGD&L~`y5a#vzP-i#gtHxZgvteq(-g_az;ufhS1C3t zZcw~X@k+(7Dc+;_h~hrQ7ZhJtd|$Cw(ZNLm^Bt@>T5*!%QHqs{GUch;h6eqOx$9GAm#mkA%f2ZR26@Q`lE)k3814P)A zilvIP6w4InDK1o8uDDVW%RFh9n3e@GY)CstQx%z4o6WU`Pla0wCiELW6oT_N9JvE0b_ zssIrA%;kC>`n!nGdlT2w(EA_}dY&ahPd4>TRR2Ja*auncgFeXz@=B(I-fm5Q4iWmd zs=SSeeC}2Gej@UFOy#{q=Bx7aMEdtX;?kBI7P#GkyBhkle1c5d7l&Ik{f6U)Ng~|b z#*p8D`UdkRO5aeuE7EU-`Eje?$do%J9#Qw|&dx$(IqoINx$bZL|2v7hS+!`Aa=!-P z-3#S0H#Ae(a`Bhx&`f1xyYp|1M^rs2<`!^Lqt z4m-Mr>}dYd@BI31Kv?1)xSI|^GG6%geE@wk5l(#^i>QaqLv-35X7Kh4H;+-k7< z_2r+C&__K+AN!$S-^(aqCc?~S^s(Ri^{s+F>Y;tO6!G+3gJZwGcc72=X3S>vU4a0< zzIy1ZK^XPLup9gC#<5>t7a|yMHlyzj1o-vs^Vx?buBY!w9Q*b496}%GHNU=RefsDh zW8ZI6^ld{#0m95??0Xdfetp02>BF$+={tyH+6TAEwg(ED^q646(~yY%H|;scNyIT7 zb#OZZ2j-YE)75a$*3HC`kK1qGYq0MfT*I+GKyl#N$NO~V9I7}6Hy+6YV>T1VdDt8? z?!+9-A-(`}$a&kJ@4ls&6A;FHc~8^$c^<;dIn?*|NOw-*F*g%82M2zA3#;6|MSUDo zjJ_|Y=$kdlZGY6o&FDKNMc;Ply9M#o2NOJf>r(XXfW8=fZ8oE?IYnP7Cde`*qCT$e zjD6&&|Es+4ps%L)&XdkZjwIcVF~3vdN3+YaZ5Kq}z)VIUY~O&V1RQm?wh0t)~Lt z(J@L8Y7TLkla%fN?7PoI`qE)8l%ad&!& z{r>F0Q=g<|mL13~yRzqT+_bz6;YUO(-rF0LSo@6}GNI>H?A?87kISZxOnaQN$?twr ze)NKYm8-gYgxi{V2MX-F%PJS|w}a6qS}!iVICH!;-dIv};&8EqT<(GQ%VOmR;^pNq z>fYW^W^K-ocBdBy-Y>UdOU}XrxeIUY4ef7{}9=Y%Q_lnCGX-rcvO)Q`Wj{{nF}%01(uNhozrH_L0^ZF`;` zkMgl>p^u6zQ?|U`Oeq^ZTvSXS=k*?D(aX2yxIX^T?xJG1Oo%CZ3%)Lzdg90F#d*D1 znJh`s)Wrw#%PG~3y!$N5UfOF5 zqrUY~x*bCO%+3i{{(Semj~~h0+EceNeQF54pZD=!2j3)&=RE(BoP)bB?G3hDcKVFa z`*YLw?k+npuIxKK!Rgc%s9~BDKQ7oX@8g}r7as`B?b#jQ7({+GS2kDf>RsJlfWP%M zm-bqkZ&7gGr++KS@6C!=hOyLz|8=Y4uq$*$h5;M%{W zeOK?cnq9pcp{J+FVQpWb9QttE%!dY6hAI!M%zJ>AyFBfaADB=XuYCNSnPmujV&>!g zn~CojxG5fgCsV>PKR(0|XThu8mVK(VcXx0BeR0FGbgh$Y)X8;NOt@oT$lig2SPgDK zKZ%*OhLxsUf*1Uo7|TL(O*>&IMl$ethlgYI2`#`eIKr1nP&!G3z!5$=jF=VB7dUEo z3u6LlBQVAVLk@qH3Kc>ZIKsCuCY1I&NZ<&MA_g4ccesjdoE+jU^I-PisR#;P4a>k6 zUWsGpJ_bC;^!eE}I1aO+IX_|OpO7;M!p~;tFYzahq5MfMeG(-r{09@r{3LLY75>Zw z#!Voe0^wqHz#cnv+JKpGPh>I*048wivm)O`Hedp$5QuzETWduKMb;t+OyGP3h|!aS!T>vxEWMTFS5QDQP9a%28U+(LE!Y&fpSE?1>Rl0Dpn?gU$?l3Y($MuH+!JYGvJE2K8+nc~ zXNquNB!jBEMZx`%YFcoX#O#UG(CV|ZSXB>4`2A%tfm3)oaw{!3N0Pl18OI`=E5gf> z-!SGp5nhRmW)aR8;kC#+RL~;|UXKJRTp+@S5q=Uov{8hAMtdk+C_;uE?VvrIvYtn- zqwMH;fY4^q7q_DiQOA}nwvRkJ`ZCYENa7~i(W_Y8ts+gbqeZmiVo6zOM_*vvB@#E? zjt1z9OGTP#M^`d#o1{G2j#kh$mr2}gJ6cNVa*^iPQPQh|75pR^SZPN;qn0bhiS>3g z%#>G&)MQ5&G45)STI}dW^wu>}zIHomGr#Skv&W9U!SY=zaU1RED3<*?Df`uSbOKXe zFLB%L=uy;pgGk^MOrwA1A-Qy(49j8f2s0qWTPC3!gJWTBEY0SSkXC7v>v14I7-kQQ zz%_w^e{*(fGNhkJgvzy61Si7PtFu~!aAX)x zbm}wM`_m)5FXl9e5Q*?dE@zDhF)K72Zg84{v?L>BA2Xm7?I!XP0_|A?nTHkm1Si|a zieN`7kj_3%gh1rSh_;UxAqdWCo>U(E6e$LM3MbifhftZzf|z*&%(j>Fhfeo4mc3&) zA`iP6e-IqM4Z%23w!xn;?a6^G-cB5keJu7Yyrp2-r?`Q$5O6g1Y^qy^!P?5KMyc$@ zu6|xR**iGU9(ETESsWO{qMU*q3w7(TN8PkXGsQUw;AQL(gjxJuYzP7m7b?TU?WMs_ z?4?7`!KJKSYz?E@r_iFT;UQK_<`&vM-_4S?+dIzpvYhW`c`JgyhW)TEW;s6~Sw4+` zC$W#}WYMvFC$-*3t^J3WD63z-N zW*|Sz#RnyZWFR?9$S-sIOSsIGa7Z>%u!K?M=BBVlrOasv+dfQ)5N4>+fy7$Zr``xNr{KK7C1v;H*>_zlfbOg4HILJmOUS2RaA zL*TGnggw3+(XPLkf!bqg*2>{$zF%W*^O)O=fO8dc8%1F>zXEUvRNRbx^f(Bg;owi$ z@c<89OBdSwBkr6TaGpls=>7P^*@EA@A5BW|J8^I`b}OEbKc}P6EbF;q3JqFjmtmkj z3x?ZogW!?|jgijv2V1)GnC5ycjoxtuEAN}|t$i&L(ob%}>-`CDG6`4E!bM0ZH7*@* zk$oiFYQD6IMfPkqM_0uXzlvq5V(ee2;r=a8=i!t!(VS9m-J_OqFqt5bMR^Ag=6!s}Xp(U1ei+GKu#s?90U- z`vsWcmhW;g!!6(CmGsXzq(j2xG|w&Tm14qpG3P2do-AfuEoMv>8?F``CTF57_BC$! zy=Xc1H4<)3`VQ@`a&u>oadWToy~>yS3SaIg`*J_Um-{JhE`@Y2w_faEnMFP$ z>k-7qVeY{`vK_)NalobU=&cYAqyMmv=67hGz`@=3dj%Uue+Re{)wvw| z=zS3QT*(IPMKUyJXCk``*tsX+!1e!Xe5at6opOZ z5QXirzNDlB4Jm0xGH2+ZB)-XEm^nQv%f6hLhb8f8y5y9GW7N;tnFXb(M55UVTFxPc zT9Ztghx@2Ihw`{M>#EtXW0;%%+S$YTgY)n~RurV9n3vsiHTVcW4JUtW%JJAjR}5Vl z{gQHpj&z_^2{uPXL57PaQ&!jpq4zLR|{bG5$hg9QFG~7(oq&0b z419?P?uxT=(7uZM@{N`x2ca{V4b2bJ;1U9-xK!3m3?cGs0FvNHHd}r!LDvLzX}eXL zzf;3KKo6%%0tfL_m2NsW(Nce+zPz94n)& z$CeFObj+v#d(axtvy%svuCR9}4_G~jd1NOKnq1+pJ9*HGJ*B2XVcg3^u(#P*31MRv z+-a4`E?^aVxdp5e$!s3dz?+0+a#%$;8GF#`?B2I&9Q9$beV`tesbTU4+dzQCX?G-dhc^I^aX_4zRD`cR^FK@0q}b0-gWi;!Nh zlLy~(WB#_22V8_B*+H*z9DMlArqcr0M3bpL;@7d$QA8@Hqf7yRgJQyZI z`cXT1;JO-RLKd<~>vXLZJ=7(o0a6uhH7aQdR22B95$ z${5A=B0tI%AueilT9JbXN0jE5U2G157nFztfsEHaC%> zI-LuU!?D}easu@P@os{r5JEuIHMudtga!m~!?PSTnZPxCO(TjY@KPP7v%1I5y$UgPq)^Gw%Y@G`Z$m+*WHlHUC+^CxYHOe?lcCA zJ83QrgWwJ_GzdaSETcIP9M3KYVd;@H211%x^$S->-^qiQUBTYT1GoRRTfUmIWpcQSaFEzA(Ia>X;W6xos{9N|wv^xw zH!BF{jD9L#tA7|$(T_=$&w$z3weop*B6d`MOLFC}Lg?w(1J=x)#BMn*+DY6h$Lqty z8{Fd%@jmyM>kfBw`-!P!3{&X{ABG)OOrSNW6t~CF76^fzJYe<^f;){J5JH|I5FF1E z2w|CFXaa;ZX$kZZgmkYWmm?s6osKqJyB_o^(y81yd~su?b2DcQc117T#D#IdxDnWS z4jsdb7FuLBf7tT~WYc@iL;{n-G=CHQKVc{DSp}{0IF8z%;X!X1Dp(V^NmV$-{f~#c zlF0C^J`|M8+uB+>r+^aHJ*e$iH@UT~wPA8Y?ds+!&8>AU>+2h)tgEeSYHn@#56|vA ztJ8ALF$z^gV8TGnD-q?Mvaoq|M=f69?wnH5)=}TwHl@9#wyUwNW1Xjq@7fTfn_G{Q>clge$|L?N7^lHV4Tj@PCnL{s z@|_GYh=+5Boa7Xd13FyfOaK;*awg?~(_u45nXOvo`@%7uXts@};oMqEZCva_7b@E|9n*vTB} zWQ?H^Aj-}R2fJ-&K!M`~BZZ)6-cSfq>s&+z2iVSG!81>UIK?>(OxS}*;&4osGg!>d zFaDSIm-J_UNgw-JvSWP3b&kn*#=;l5;tNykEcjyJSl1JUjPd(t1=5aoRv<0I#}238 zy6j*K{-Nhm(mMkr1J|kcNj|^LO7Yu^LV~V-8r*PP`nH!*IGz8LSEu{aGh z^~jZNrI@_ig?P5s&x(Fuhz%AohdC31Z=PF-hOsjMZggao>kLL2gRh@kIL#Rxyg7il zkx=3`h$7ISKYcFS*^uGEh%K$!2~W+&Z@q`R*_Aj^aM_Qh%~NoQB*6iN&e#*3Xz)yy zcg!%<8$x+JTY2Ee52d1bVWBe=l~#$E5_G1K(gcgp9tSxS#z^0g7KHONoak6*w97fq zJYWJe1jpIIw!*1SVX(0bmU$765%xiV=(zI)y0ogy7`3GdZ{n9>bZ1VVeiRZ-@=A ziw#3YWE+)6B`GR8HM5TZJg!z302-b1MWq?7{U+ zUShJCIz;s?R-9^LX!&F654wGf8&e$TcqbjnIfmF6+XhT> z?4o$mX+M(F!pR>>c+RKG$%T(>4nmW$n((*HUwEmUk%$gY$#y0ov#d$ZF*0BrGn&K3 zF_RrT4?oG+Hi-*CqS{dJy~V9h7t8a&RSjn>@2+U7ZEbC6!L!JCPaMQ9WK&6|Ms@j; z6WrG3+-2P-w31ibJ=GAx_{f?x2pl$kPRr_QnJU1_4QAU;JOZ6ye)K4iN!XX*D|6Yj zmb9JO&@sQYzM&hmkw`Gp<)o**r148I>lyo&C)t{M4Scb6{d-Nw1p7Z(Na2j#L_aON*hv$Y@GbnRhBM$^ts~3h za`QafmqfR#yNZOS6-}tw5J*T-d(Mal>H?ZpbWn11Y6`M@fm^eMDc_x~Kp|BHgB{dt+Dpinm+0Y4kRglaQ z*B@OGi{U4F^-fKukWx30a;Tpa39cfum_j=>btx|bn4XeCs?5|KkoJ8*> zYRVfM(23P;OKPRCo*gcskfFkx?NWayn0qCUx+Y6nyJ_lR%1o|qL&79nYF*ux&8@X9 zrahtAx3sNZ4+UuWUbf;OmsiQ<9|o7SFLS&UVG8XI59Gf3Kl;UmzIEi)exfHY>$ciC zoFzP%;Fy4P?bmsL6u2f_x)uZ)#=rzHT zK2y~4Zq#9gG%ksB2dib>l^}0i20C$>!Z>sLVwWdkH*~FUZQ#5Lm$_Q{T$`WL*0Hv; zy%sKB*IB=IO5##@S>C>i7;VPqk%9^@5P6a~i&f;>=<$6L#yyTUR zwC$Ad0Qg#5pKqA_zr%IL`y$G9){)9}#(O%mGvb@Vo1HD8i-KFhcNXZ%7$)xwn)@oe z-&3A3Y*TPEV^7J5K`tKS_~aPm%u$ndh@#k=rZ+finF^?~hiQo*oPf zm=ELK^a#a-lDKzhxXP-07mMx$V<^h}F>)9BWbFVY{2I(5woS#^w^}lfIn+}tnFVI}jz|;7(XQDec z1n@!_$K41zKie9#%7u7porr;T6>*AX)ewtZzAf^K@rQ^Ael6oW zo;;5|ndwCz;zvOq#b47DS^tcuU84}s-wCLXeUImJBQ7Eq@B#9GBR#SMyIRlHd7O2z9Hzpi+@;G+{d72Lr}cE>xVQ zc%tG;#YRPW-yi2~RQXE9uPgFVL+XE2QFy^1zohcpiXSU-Kw|m~#T>YeN^p`4?zf8n5 za=OaG3zlbDXHy2Aui=-fe1+mIin|o=CPL4HMA-9PA{J4?8wU9$P4|l8Z#CWfD*stg z_{4DD;bHguaYUS7NIV?583-XDaeJQ9K@LZC3eW#j6#sQ{1U|yW(9$yJEDr& zihQ_};UkGiH%{e=ic=M5D9$1xAHK{$tS92UGZfDzLf?6c7b#wE9y4-!VLQO`N7!p}0h`TXD1ERf-QQ?o)h@h&K7U%I^|k$Db7cp=e{` zV)$W-Llj34VaEi;nMCMYu5yFo8H(pB-m3U5#s5lD{2wkZm~8q%Mw@=j(#Wjj+ z6@|YP{qjP}K)xJ9yirlsCy*ajS=K3#pHf-YE0CX8S=KF(f1|RjUm(AyGT*MDe!fyk z%vBt#I9ah+k#D^*-LZ;u6z3@l|0&|DR2Cjo$TcdjQCzForP!@_zT$<7+Z2T_6?$$| zS$I<+^MxSVvs>{g#UCpET2anohmA5Hgt9YZL@W*04;46}x7ye7}aYepE z!|-1#zM=TGqO1!MFY7`eU$bF)zS~HYbs=z~%F`5&Qe3Q9r6@eJNZ+J#r{bB4=PO>Q zc!lCMihQ$&`97uiW5u5-{z~yx#kUpTQT#~pFN(rX3w;5uzkq!9i#SMem|~8itS1pa zLFE#~>59iIRw(jiBkEhFSf{u~QP!1+?@@WH;x@(Yio$n`bbP&t^YFJ7A69%+QP!7; ze@W%vDE?0I9Ywx6Njz5l^}hoywnAA%%Z0TJT`Zh6SOJClg@LKzW>=Mk|^;l^|r1_Y6vAeK9VnTnXY zMV5S!Uhbm+O+J$}Uh+eDsmhWsWLf_JC12n|jbEa;T(O3T^3*Ff5mELQ#dadf-=)}1 zgg#j>0edLJ*iDLCi759r#Vd&@#CF9Si15P>Me_bI|G}Imk*~~i$nQ8fi22BP0R21J zFQIo25&B*sLJy*ZM-@S$NBl8f{Q-T;HGU=0lmqeIl%f9?jo(FtvS(C&mWcdbR{1p| zGC81fFOl{6pYs6vZ*96aJrm4(?RsO=``NAUz0bahzu+!tBC)xd*dJ{mEb`r;?0Zfk z62CEjQ8aE^_8V<(Ulw|_fylCA_5Xg_K;ig8Q=$h7W;6OuLV#c2Ea*e`5F!PRl}6urIQHw?0pT%(na$`s z8v%ZO%YF9IE~D?8IQHvXiE+a`Yfha;-<>%2>#K*pnFwQfaVhTUdlJWfecP~J%}1Eo zpkB7`;jdrc4qtg=h%@&67RP>l_d}ntiHeNAS8?puw+H%IPTI$N=tkc^aqQQ(2m1WK zVi|pZM>@a0$9(?F^ywQ3Wqy6UkLoY4v6bvXetpmS^f7;9-*lv--B2Uj2Px%cUfg)U z+#FM8x|`@Y-Ar614*dDPhJ4GA0sX??3QWEyr|8>)LjJ=z1L=&urj&FS;)cOUW}ur% z$NTsGd~=SqtRBsm?b_sfW{SRBax815Q3f>nI#cxRIKiEZSq@GcM&BhV`g)=7u731w zNzwN<^kpK9`f!S;kNpe(z3mpkMkb|Ck@HVjSjjih%w}Wtmyocg;!Q2wQa~5M zR)BI$u)+({P8?Am_~`lBxBVq2aNDOBE*nuFL`eHwaGPBjD7$^t`A2_$clvcRABrq2 z|G0GQ*m`o6E#ALr*^9l;6hHMzs3O>|M|IKmvGp^_S%&k{A1ZhtIDhehJsnJM#|@WR z(L+rSq%90qhCV8A@+yNrzGwEZnlII4R|Y>y4}SWB9XC95y$_wb2>FelA^ELbVC4tL zex>L7+#Nl3oEmd01BwO0rLyorMEo_D01 z^8870d;e&gX`9cV?4~)t5Mk#_*t_RXk+5rfpp!dOa7Miy?|q#0MczLv)RQ^-p@AO_3Wh4JYZf24u4CXw8NtN|?l{Bs z`QigNcTlqATq}2bZ^)sw++A<;$h9Rh&(5VZU|vA*P^m-rXFmQ69%a80@5hwwkK3Z> ziL(7=wv^!sXTj``w+_CkcJcn6+1E5x9O#*PO^vk8bgK+u6*n~n4%DpP{g@l)4W@%Fj1(9-$a??K%G)>i)UZ9{R~U%HQM-vog)hf4P;KN{uR z4wde+VBd6eaNf1p{r3Hn6llIJ8^`^nvqH)C9V%VGNzRw)zJ#6knxoj6H@A@cmXs^t z@1fF#!+q`R&wr_Yrs4%~4##5rwaNJ#dlZMHNb8nB_fLYykUu|#0~mHu9&RkTqad=+ptcD;wDelS5z5`V~&HB1_rcfO@G7bW^AoVSr0T*dRhA5=YrX zjUq%N{Si!dniF;%b4+KIAdM!t%_ph={Hc;o^K z>qN+n@XKJJNn}i3`OcHd+H0s))2dIB8vpcQB6b^3(`}u|G-Tm#d4JojRiM}M0%-sBFhBnt&)jc zDo7vo9n)DZNS^wM$O=L7m7BJ`l%3+dO`ZDc0?{0WPnN|vPzJFDxJt` zK?bSrMAirbUz0@E3NplM6G48qBIUSTw}J`YPLaAKogham??OR5@pBfGS>8oSOd}9qEl39J4cW>^=B4wZUV>ZM8(@o@4N&KQpt+Wp1d_u zs&;A$70ef;eSAe-x#eB#=OJ<_su#<V)MF@tZ(5l8ELDX@^pyzWQa#Bj6~v{j$Y=36S9ht&lv>9R1J>JjxhGkU2Y&!}1|ST16(t52z5g&=UoN(Czg zd0YLJ3N91mUG*cgQ!fhMQ$r|rxgcLCohdw6nx-iefE3!ibzKv3e6?W(^%*!Uh zs_f7Xmi2nUs_oEzTFebnz8X99KC#WBv)&Hf#X7!Gc&qFXA8q(=yS?Ydnc_5eoJyv)S;Cp9hEc)n@C_))B(;ihbib=md_?V^BVtwR8RmMfAk}Il z70eT)M)A!?e~ln@;(6IWUyvng8cfAsD~T?TpHWk5`E|dm*CQT}G?WIw`|hk}FA1K< z8L7^li3}%toa1j`6XfWuWUH%?$zX|8RIcie1__piix4MIWiVBp zl>#-6iI#^;0180|QX$!|SA41#tP}-n6qH#(Z4&F%V8)ptoDFIe`gKs7#71=nbFEEc zvnnP>o5U8~I=P4_t>d+PEV7q`HXQ7kGvQ!@8Au`*Fq0i3dedlJdr9zYMzaNHy9W>i z)Zc?Qf~ahyr49zWvIJ^98}^VO9<0cTz2cq^v9^C8`?ZdY68Hr_inj@(ZP^(leXPG9 z!FAHLs4+X7PC8%H0Hq`J*gexJttsI-VA?m?0a_G)SqOGR@@BM&y^4M&^>&=y&@K^G zYp>KK*0SAj0raLIr3$`E?+FKki3T;6^pjA3L3*c4=(n>lv9(q3xyiDU93$ zfn|@4Y!5_SI?}d_bll|-up5qIN4b49+6m-bBI7_Fh0u{-L)jy3Sz^GGXeuB70+&^o zYt!PiP7rzl8H+sJU{X*rO71Jb>WbY849c8cNX z5N`rPpg;u9v-7M@gF*Tdq_i_|aS|6(Oyq%9r{N&^af6vQ5*J}yEY&<$ps$t2GMob1 zjhg0-H- z5s=QfNJFr)82czA@*gR-vOB!vXcz>_00hy%m&L~rp@s@vlp$yhUoj&8kzyy<9XcmM zj(J!K%5ntJK>NR*2sQAG>AMlM2F{T-|B+%R*&U`i8lD2>2?Wvb4lei-m1sDQi!Twh z2Ht|9_(nr}yTk2{hBh1|5kx}7K6O z%~o2rVLWIUePR4A+%To(8OHOP0sqkshaHi+J~UDKv%d_s(h3ay2SXp=M4-VkLO4k$ zK9CHIUeYtk;8~x{)gUJZyCoTC8OC6VQDCK&7{*k?7(zy{-b$-7jKzj=sxY=&X*Gti z(J)RE#`jj*62ss@p-g-z81`9KTD_tF)zD981lGuU!{EuGjBtj-*k~AE8^)OqV~b(L z<5?17xB?M!I412dobC=M-HCIz;S6&)84hQ+;au!+GQnZRKWZ3t4kJsFDYDWI7!D5` zl?-%sls#uScRQSJ5~svUd&O{`a5&wC)5A)8+i>1>IN6T2j|}HqhttF1a78z-9)nB9;W97Hea}ut=VVVze1?o(*^-V% zIE(h?x)}*`8>u%gaXmz?dj)tshOw+ZZCP_g$?iOUEMW7?6#f2`-O%R+Aa?(BJO51- zgrUv(DxYrr8N45<{B=;o;62th|7=8O@cu*P^Zj22?~%6ouK+T5pHTUHe~`huE0EtC z=`ysrQ02c3$l!fX<*$Zr2JgEnpYLBXc<&4J9R}K;&>CER{+~ME)?T-L+6TA)*PgQj zj^}K;;cjzko73PqnSPRg?S|WN+#TmQ?v972Zu-F%U(170S9HGZZB`L#;mI3iN_5;@ zw~h7E+zD;yxY-s}e4Q#x56t3XTKsg!xQNCsPfH$MSr??-JiH^8xc`H9@Ak1Ctc?rl z4lUemr^NW`?r0oNYro&fP^!stl#u4Q)n;vV0%Em=uW59?XdY0Q?j2)tPQflluP&(e zF%DZV)Ve7Ct!S|q(Q99ECFA06Jtp<*f6QqnjC&x~;ho)wj7>GHd4 zR9iD0-OVW!hKk>C!|izSj?Fz>d7GA!@A2f5gvNPqw+FN<)|CSHPhQGh^~qJ-lR@D+c5ac@0IBL&-eQ6dOjV)LR( zBipz0qDCX%Z|B8E1ebNzcEY=b5$L;}7Y7iS3gL4INTp;uFAi&@$97(PiU6nJp8*`# zmnQ&zK=9(r`r_2>;97iINzdT`2?#!L0+*$VPh!4h1XdS-Onu48oYS_;I(IuE=VKK8 zz;<4Y6C_Z$ofqdLATB3gPPTM~OvoFuSl7n3`y*tB0cx5ZS2vSmJwi8AeO6qmr#>-i z54QU#R4}ws-PrKK7!_!wHLamX#zI8>;K zv{b`|8bd2J4!NZohYB^_V%4B-<%g*mR>mDOdG)$wZ`L9*aZ?EMw+sX=h3Lh@lJDkY zQ?39FO9%YO)xT^5^9qaF`bWB>Czki$%D;$6 zFC%<}a5z>0uAO}U-z?8$tS{VFPh{^u_~6wplKu}J=l*}g?e5qK=S=8RSh;8>{1A;T zT{3e{v)`d}w143L?6Y@VW$nzGs>0ftiz;gu^fBVm`2RWH|H{`dUts(1eEpWf(H*wJ z7Ql5cOxwKw1|o2@T?Jl-6Q^6vA~VWsod}q1r?D5HUj@gOboSctqnzk|rX}@Hn)*ab>OR|s8(?@-cK@X%!pqEs?`OJkdGs5d~z(|x?Dz=FQX-Y$TN8Qw0rz%pPw$uu4u zcwjHCtgg+o_&?v$p7zRS)>+0+TxIR_d9xR2cQl2yi|{o_VR`vEb6YufTTmYBH?O6K zGwt+^-Pq~o@YYscF|WK9KH0Pjoyzj^%G%oh!G#(!)2}b0RW7QWTUR;PnudJVRhp5l zrGq>@XpQ5yG{~=vOy=T$WOKy3DPN-u%Sj8oXC%Rb#mV=CrN zterWhxUPnVR~xlA?GSiG^}KQzVM|Z8@Ygh=v>MjfoRs5rP+A{+G`#cmQEM-}vFhC#`LwIrH5d8mK1lxv^_C4ZHL+nwH0b394OpD@_(@W zAJXjER-94(rY}foKXl3wRZg#>XWkYbJJC#Kl6IM-T_$OlN!n$ScA2DICTW*R+GRtm zit=(clyUW1J}qxaUqt-1zh2RvXT|1_PB^unSf_WQ{dn*Idh&02Pt<;*%h9Uk)wAJ& zbP@bA8}ot3%Q{@fIDRg#SsJSaPDf*n_BUE4>cO#cZux*|E&bdYYk|{QbCrjJ=A$OG zGg?z@;|5gw)onQh*36zUacNB@7A#}%R$H?d%F=~(^Uy4Lmbu7xF8VsT{S60_b7syx z2g4q`fYvnoxg5U))(sEajxS2s+Dv43y6H*L9)xZ%9xF5X^bgCW;bkD`J~z(fF~*bU zh~mPt3Uzjir%zu1U)prOY1N?qk*~Z~Eu)*6qfVpe&vCP4c&xrZZhBsGmLjvY#j5*#$gj7zO_Xy@Rl>kG=~82eci zo7WLlV@qpVIhbu(vT54mt?rJ4`_s~7#EVH2<)7Afz_fmSn>EwbZPY_;^RzUrq6~K+ znD8)M(ask|U43H^)60c?87T8*pww%Hd>JV7F;Gg|4e1|E29`TQdmqM!yrq~$%VH+C zQcPN9&6#L+(%kHU9`}F?X3k?%&7BeXwL9{t%XX+@$7T{@u;|y~eAuzx3u|ZARiYEX zipycf6DsGo9;aasT$Z)CJwp{~3wPFfY@<@CTt_iF#090*3oDz8Vf;mxEv+eCfL@GR z<3Fh_nN_5&WKNMOMP?M4P=+`|w&QSLw^;LhLeIJ}joM-YYuS`C%Aoxut5Tb=k(l;w z;nP~$EMEro>DHXmCC$TYtV>_?{?ck0XZ7;2<+?W7ZJbW2yQw(;H$6f8oofRbRIY2E zqm>ko_v&osW|!GGz@Qv$HWP_TyG%Ft!6*fri9EgT1p%Xt6psw&UK-@+@Xx_dw_{n^ zgqoRR3$5DAxTSVl8!P3QqGHK{*+h7-D`zl93cMen$9>GiruUU|S;yHIGf<4j_Wu1b zWe%Di)d4#lh7rt3u26gNH!C|QAqW+hEk;&~7FJhdgsm&3pJz+dM!j)6S(sjJv9g_s zO4_s^+qB>G=7AF4nP<*LUDr)3Ux3P9x>h^Bve!=(Do5fr^Y;Zws;cR@sbFnU}Q5{oiv4jlDT; zX!311+j1>Wh>I88*}mhxowN5y8u#yF{4&dTM5OaaIrv@{|H`p(sAE_{oc835YiDl~ zm$F3^d|zBw~MVY>c(si}i><)aE+E##zh{??<+h_lkUOR0bPsF+Vr9$6D(5i+pla z2HR&bKWvn@k`IbJ>rVgh@H^(`w%W9kZzJ;6(Q3d$x|p9EPqtg;Ctl?Fh)n;ubKd-O z<50(z@_1`4=I2K2mVCUL6!UY#D_l!{Skh~@F+8)3`Oyz_OZn!Sq8R-?w@jg3v=8td z2^;*_pBqP7wv=x#-z-yx{lW%6_V;T)(s;%l^K;8Xz-Ge#dq2|6ElaI#E3;X-;N7gg zfNW0YHwpGS*5Diql3B~d{oLya15*CaMxK2? z3HI_5pz|aDT?YXq{&_1r_LE5R`Ei!>Bi_9gPXBq%kNmS*;q>e4{K#L_3SS4DB#uW( zu-BVg;BBpY49-5C1bh68!CCW3w4R#g55vnX_`%MqXf@ooUU49TY-9b#TF#kBFx-yH}GNu%M9e0qXz4j#?%nKK2fKd`a8|CaA~Qb@F7KbI^H251S0i#ruGS? z0H=};;WEMk{h9>hNqr9En+kZ52l5v6GH{N8ml{}a;I#(cVBqZr-fiH620mgS$5iI)Sp)fumN?ss(1ZFU zOf+zafoB@XF_HYy22M7Ra~|mn4P0g5bq3N03HclY2_G>~e1`%*XmIfr3S4}I0)A)c z9zNX#-qye_2Fg=k&<7j*ECa_IIL*Ln1NrJA^{g}S1_O5(c)x*<8ThP$uNnBEfnONN z&)TUk;MTC6fqe0t^gafPuXEt%7+idH0xvgsje+8e6ZCrx&QH{+M|^7nicd|ze;fMO z2J*Qo<@k0uA-@(T%ro$G1Lqoese$VaywSir41CbQ#|?bmK=EM-y^RL{*}#riZZf@Y z2KF;>n1RIxUSi;K1HUm4rw2;>kb#{H>|x+Q14kIhSG1VkB?itiP<%szzQ*924CFVL zl;35b_zDO9w8397@O=Y6Gw^!@eOMkde%Qc>f#NG1^ivIfwt@VPnDV6t^0P#QKdkp?Z1D`hVRRcdX@JjBP1Np8j=_LlvF>slIR~We2z}pR^ zcLm1#vw_bU_zwd=GVn_S`HdyzgP2$e+Z&i^V4i`e8#v0q3k|F=@D>9fHt??ozHHz- z27Y4THwLkYigz&i|l(ZII|Blsr8;QVZr>z77@|47&cA0EYD+1HqlW&t zflnLwyn(M6__~1~5F-A^2L52^KO5-B4H5Ix#=v9)Qw+=?MEvds4mI=w1J5yVtbrF8 zc(H*Mgor=Wz?Fu+%D}4)yw1Qa1~wS@J3_?YW#9orf6Bm@3_N7u+XlX8;3tHL|G9y@ zW_f)Eh71fF*vY_%fjNW-eGDu#^pOUhXW;n;PBpO1z-mH-`39~u@MZ&d8~8T^KQi#7 zfyqfaelG)y44h`*5(76Gc#nZk82FBXCk#x$b_w&7ZQyVNCmXoX!0QaW$G|5I{HKB6 z8Q2DWlKM_Du%Cfv8#vj(c?PaFaGQaT7{4oRf6C&QLgcv_RBt*KO5C*WmHMqCErgtC& zy%QnEgIt5>8+?et&o*$3ffo@%?{otf8@SrQ>kMo#@Gb-IBg7i)j|M+r;8O;^Xy8Eu z-!$-D0}mVciGhse%mnrzglsPZ`x}T`N1=}+gzZc;aI%5Z44iJ@ECU}PgnjKXQ0}jQ?>G3f z2EJh6YX-h);D-i&Y~U9Ler4cE1Aj3v!22QSk28>aT4LV@rW@GRz+MLC8+fXLXBbF7 zhKw)wbAY_RCeByr2`@3Q)Ijd%l3rurVgoNV@CpOvj4Q}pZ}6K8+-BhI2Fm>)e-tzii+u2EJ|Jdj>Wdc)~zG@6Qmwje-0Yns~Z_{N|bXX$JDMXX0}I z2*@v=iOX48fc(OlxSW**$d8pNi*^H4dhqN#Q9M;A-`TG z3>hf*k-)ndoZm2$FZYvx{8pK`bM^y2S0+BkKz^}Ie6@l6GMV@`1Nm_>ar%%Y3m{1LZ6&(D^Ac`OaAma=!_@E$;&X`8guTQ#wc@>~G*;1J5PIcsSm`iwwNPKz@Zt z{z3zB`(^PA8BDt}PH~@y<70#na@mAPCyx;6OFu^cEg+75K9UgYPU+WJk4_?vbt-?< zgJcBaQed2cPCA_o9x*V>KqtNa#GP~ju~j6vqzinE!6kj*GOhrY7B?DXNbd-7q$B$V(4Pez)C&>I zg+W>B9keWiXA?qyfx!z2k_!dGam-0dX!^Dw~1BU+;A@Xz3 z;I9!PUmqC!Fd^;bf5)eLUFDLx-ZlSuZ@!fu^k2Q=_?!Hg{rcbJ$86dEnjgD)|7$Mx z%FV9*uX)&b$38r^!T%GB8{)mC#LfxUhZfr`qq zg){KTe)>GCx4tedE32(s6zeV?5o1vtM?H5&<$_q!uPN0t=i+@~t#JWfFvWSHbLQY> zr`T9HP<#%AhK(QFyR@#Zc4pbaI;j2ce=sX~KEyGNzy2CT|D)^3FCG6eeOc&2@@p+e z9)H~t&^7*-a=DOUoY-{PubiL9T$~3OE62W-=Li8ha$|9gZ5HX1WbeklIrG8%pzDep z@%ad``Z!jxe>*=%-y9HP^*suGiJ(!RAAxezw+SIu-%jAaRgP;wkJa~FO#VoB^gYx{ z-;2PV@2PMZE${ufj@5S%`uIG8`NL2Y)%SN?$L6mP4Z0jO=jW971rTEOr3}OR0yOH2 zM{x3Y4A-&x4nQBanW8_(UXFkgtFIpVSYOn~^{=CkAM3^H``dre$7eOM`qszjYa64l zODlccBku&h^K;6}X9)O<+Fv8&vK%2mryTn0&1O6q9e~djoS&nQ=arG{#9I!=Z`lFY zqA}5}oscWW*zf!t-fCRLmUrVYd<2VzVEs{?>9Rg=fSeNtsP#2EbcNGNfjhjrTFG5_ z3eJLbG9M$yHE?XYkz&k4(8qLB5u9`%Zl&+tOl>a^k)M<9?pFF5$Lo2L`q(axKCY#m zI8;!WrRP6h^XKrm_KwZp$O-84piv*EL`UCSpgD0EKe;RX!E+!mKZo}ZT*T^IKT)sC zs4s%x==&IQjN^Z;l-NQCr&2-&ymB*gZ|}9@qOLAJ`s46A2_6M-~9f0`2%7+%je0p_?I6tIB#%& z$VL7O|MDkvhm87{zt+0O`fhLgB5zTg_-Kzm?z3Il#f=dwZvTVJ`YfY=@NG@LM7uF$ z4?F5>`}`j5WBsu8%-8<5>EdO)@M!z|=l5t|>-Q|xp3-M7?Jd0c<9=IvU*Fc`hnCBr zie(|Fyq){a^c<|8M^9`y@~xa{DoUWN(L`bNDVgR&TkF9k4d< z-}rs9HLr281yASroIfIKh3)N{p{R``aYpC)U%Se*Ky*R((Uy>!{1xc+fp~Z=11pR*#M!>|u>mJ!JP! z%>C|ABua^Zaw;fx1m653KOPC7zkatjRO~78AG6vsj>*KprA>5JkHYA^i$ z(fLIwr4gy)E1C+=V!d0DuaC%H7MfJW2QR;koe~^XV0$TL-+SD>Rc3l$nG1=`QlKdXx}F_1<;K;A1u}o7@b;`on>Vv_w}4~fAiL! z^DkUG+?8WT0Qc^^ec{nrds3=A$KcKO*i+WQPkosUsW&zi4wy2cyW~5$@Tspyh3lIl zd7j2oJnqJj+ipB)cN|gQlwKhErN5;Y4T}8Z2#dtu;Jv=F-eb7^FY@FwKg{XAPX?P7 zfZaaI`?=d(lOkVf^%Sb$Pl;PwZR8vSjXY zA6xBy*K!?u5;+RllUEEo>c$w*EjkA18esf>I!2-0c&2?T@954ogxbFCh+~5+Um!d9W^BJ@uZ8S>o;yH(;@);qD@puAc(k=A+Q&US&!DvG zycrXk@*?r0Q%mDV-C4D%I?a=QqN%O>L{qrUh#M;YMT*be*fb%%vFSWg>_{Td*KmG? zRskl8g1C`931N8E#WUKBTKy|6Pl^_5peC)w^c}=yeu;(m7N5AM%t~)Rvcnjbmw`1G zDM2q~seVZs&9NGFZrxJyW=SU7tZr-7FFA<^RbeP+{eD;DDXy*HWcRys_*aKKqv7l~ zvbxFB)rAutZYlXHW(;8V6GqvYiF=E`{bl|WO%?gYCzdU+PrG%`)x-UVtV~i~X{yS1 z*V_^Q2d^|$4BP4d@*h^ub!DHyAHR>gw7zM}Y|g0DX9Zx7wMr_)1vJWBbK70Iq= z8#%eQvcEZqUX+J%C9)MG!>g&crrtLE@T)n{ee}qnz4cZ}<5b&j{K?kmer!zF=Yzx_ z$0xaBXWN?a#cyO-W1=3XvaGJ0$Mk6;_E73hZv4g5x$x^lT9S3;oFek{*TsqKT^v7= zU+65fwSLM5qgoH|DM@d6?nq&yZR-wMsIxV7TuWI?Q)vmmSSA;9TsnWGd5^6r4B#Y}`m&*gdkXIOroPt7+Dx3+kL%)2cJIfb+`G!{q;ML*uYjy zd3%pNz~AewL!M&+(dB6J?%wxF<8{40{dyQJ#E!7mHx`{D`q^?$`}$3b+r8uV-Fxd!tQ^OsX(r}vCp`)6KH`(gc8u5`Ty(R5Pnd-UpLTazcx z-FTV%v>N*!EkjCRD{0{x)@w8+SO8;k9Mi4uV%{(RZEYVO@$a=G_C4gXOnQaVvP61h zWO^eSOWeqN9@5JzN6Oa#qW|V)HWuL8m)9mbGC?|;BX6SC3Q3bU_wGxYFzZPhGkvC~ zbKo~Qpe#y|XE$!QSwHkqTdMos%+-4CvlzPv||TcIw8cAq?nbtaRp;^yEWpn%28M{*#qH zPAoyM-F7x@blC&5dwY&2dfqy;?~|tMN=p89BvN}#E4j$3V@Iq$9~?Y&%9^GtGjj0% zs*JZlId;&>D67qxa!2jI&G^Q37Uy^Ng)et|i`K&e-S=!V))#Na6r8IQwZo9D=W(l7 z@u6{}Z)jRS{D!6_W%f{e;Nd;r?kR3`sp1nGYOVBaS#fP^ic5UI3F93`EXR)GWqc}- zcCorYJUs6$O2u+n3)`9!qV^U_)M-8^_Gk4PebCBGElMfM7VF}5_B}d2V=~N>UWLA^ z&gy1m?LC5iotTalclwA6|G@Q#);IP~?RRAsS~qy`e^k-1qQO$`XYnB8fUGrj-DmHb zbk>NbEK9w0;Zd*KcgRUY>#)1q{SWWC^$6GVuO4a1Yro5LZ}vTUF8(!Vr!&Va?75=X zr{9e@KWgLg$KAFEEx|bUJ$hVcAJXd|+O$3w>6_>%;EAbIT}zB>rFRz{&1(u;zST9e zF@j#@&+AjvyQqERDSt_X|2FkHXRi6#0(ZzV-Y4MH_nm zQ`Vl8DsHp_y^GE+y1IAPTd;JjAGktuAA8F4)Th3+l-SnfjFF}K z*@~-?!{C3;;W@vN!z-|o-i;C69{4AxjxmR$j*HzG5!_;V_C2~!v0j~V%^fpy)~Du(Vdff^ab9Dh_pe38jTNd8JwD?5)~x0A8C|FJ?p?HH|J>ocU!!mYa@%v2$ z_1H7%hWU5tvrUB?b>53l6fE!*U0R{BNNT}Zjc?kg-@nIKX!SaFC^_=T$;L*cwHoO} zyan}lbhH-ijW5!xXB{WojEzi%_V0`qxEqgfY|(UY^#0nLctC2+O7|A&e6qGOA*)X( zBUWG}e7`BNEA5@&&NR=l)ycdMqJH)fotqtdxMurqufHfkW^9*9-)-iY*gosb-#(K! z_C?(*Z;bX{H|CsSje11n{Koa0gXwkGMoB?tr{2l??Zz){uJE*;VWT}6cQzG8+~3qs zuyIuo@n>wk!i<&adQ7Xg*X~JRsFzcI`aocK1H# zhLc}?4NG^OanL?C+zRx4Ah;uE-Q{;3^Lufhlc8yMfwrS*%z236`Q}gt&b({50;v~l zYjQ>VI7_DMF1EKj{mmECBI(gq@F(hWakbW*`ZK?o`ne|c{p{z7-U4)Ui#EjZl>0b( zJ;fZn-}GZWEyvhk)b`(Og1cFaQvbGWj8iCc@SLLTqNkb?H!>CjTgrp9P&lWnC?(dZF7Y%DHF}Yy= zn6FqFy-%d|V>B&1oc8V-oo79UvRV@NT3H|N!5Ihr89SKUbSQCOpHZ)_&up~aX`ZyW zyuGj1=Z@|*#_D=!)B165Uw8eU;f*fW+gJPnw#93YYwd2@8DsM-J?nV3+jGnvE2go;^lqHek%`cZrWYnpOb5up5-0gkl~A@ z){v%SIp;by%Q|#GtQrUJ4UZ0wb!S{$Z)I$)x3k(c*=c&;DS&&m!TY%PbmCCl*hmb= z%07OOJ5b-q%D@+$#q9`IS-AJ(@e0{y57|39@1f!oHMLtyicdsp-!7>+dkgMCaYu_X zB<^i9X30a$Pb4$5G&njr!*$Zi8&MT5oNSku7N6L$;Lg&-eUZ|V(jBEg#MrxcbT)Ku zDZ97~c`mCtds5jJ{MY?~yhz5|WvS&>#>M3|XTMpNQa%Zg=?&hitwxPa&YUzNCuQgH zZtnA{+7xc8nw;u8XR_UN4MrVXC*^+L}bmU#5Q)W+| zol;m3)OEyugRSWn=N+ymvDL5R#ShCjmYJY;N9cpVy>LEj!E1&>>kQ~ah(n;NF2dtta9zMiup1VB$ZoTnLDd2bYz&5+bONSkv z8++lpM~5QBa@oGC@l?jc9d~!nl#7HEcnF#B@Yp8zppU7^GsX(O9_v~weJm5|HXg2^3*WFNVtU8PrC6hE16HKeLv%$SE2sAyz)Hn!@u0{ zI#N4=>UkZ{bv${=w@@~RVgvb)SDr<9%fd4>`43?EPXnP8A)a^t{1o5ih5h)eKr*;u36U47}6Db!Yp!O1}5G1Jjp-#P(f+#hF$aF#4s56Po z5F}2WMWjlQcr}{HOhFRVc|>Lj5>lN|DDUhr?K4poqY1p#!ilKMP5C0qP7qGQ{%m zrDX3qH@_)s+rH`^pE?DkFJXn09Ze0vH|6 zrX%7~)$u?|!;I`vWq3%6v*}!r4yX<&JIu#_ zMJ>j-g0txuC!*Hj%~zaFM{QZ^Rdj8fO-D|y%EprEs>fM`#ez&yD_J{B1ev0?V(7uybQHsx z)YP_2kP0=CxxQ48D)ly+4`lM%3!l88JY*rVs*jI;nlE6(WhsXxuY*ABKJJ$%ZRlUzPy;d^X zpsHE%*9o#i-AQ}fD9Fx)*H8y{tH~K4-5BnKMDGg~(SmLgzGa8bAnRtqJa%Y4n`TRx z!)?G0O=FR75nh}f%3z9H!}(B>Xoo(e<=iS*#J2pbFtKAjK>OGYWLWM1aT&FfEw7)2 zCc*zNSQixuCuI53aqStL4t9f^oh*J#z&|y(5Is{pf+odzb4C8!6f0DZGtO+$Hc?IO4y0N*7pNPE%n@X|x|xa2l_p)J z)?+%yd2`Ic5_K!o;Ji5^%ha1JkM2v$)k~N)aNZm_E7f|84LEO(NWJ3m!G7JBR;gu7 zXQ6P`sLssJB0<)vzUUR{fahN~!3ajwf3$j%`&qOa5q(OCJd30a8P5n#- zx-ace-?HU&U%ErR!Ma`>-imtJsUGwKStsrDsCoyz%zs7rL2w>dJ7A~&^}=~q{eji1 z`_c#MFzZ0~rH|B4%)!-?gTrc9IuPBL{;fV|GwQzdiE78fT`OWo)$Ode>je2s{f_7*L1*j9%Dzch z=xpz{0d})sK08#)!fp`^U9T4n@D{<89a^3UY^z}Ch!^DmyHzlpl6e}FYY+_G@>`np zHo=nY(4&;RO|WD;#7{r{+XZWHhfdJ+c1X@r>=4&d{@cTEf!N6oeaWi2LnLu#W)3=} z|4za3FhsB&b_&+l4*i36-o6u)h}!r)#do%S-;dr4!(E&3wG) zXXR!^VCcNY>b)2Il2Yg4Nogau2Y_M6wQNg0e(^7Tyxn z8Effr!Is&fAk*6?*m67cGHvlMf~~|Ur&Cq#n7ZO&k!N>s_JWF=u}j$qlZM zoICl1VAr}r-4nojQY1IJLfN>1@INKkW>;t#E#zsD+~Nv(SZB`&w$&B-kR#QzBH7>y zeZ?|7C)f^G=pE+ldBJufJ?89h(i!e{g%+|tUl44!E5r{Q{Vxjks4MgW2d|eT-T_zW z6LzAPCB3Iyp*ptF-vxWd6}pXWdr%~wbA?8-=NuB=i>^=_#P{X=9}1S?3Ee@-k3?sdC-f;>`d@-&dqRbr0uKw8>k0AmXaC3H z!4S#wgg#>p{#)*EF7<>Ku(U@+ayfF=8`vj;)kBg!?$hvC#9QMDJ<5K2G&}>?i{8*J z9J7vzq!kEVN1OOeFi#-#6M3Ht76^o%W4tc}iwlI_=cxXrV2OdyBdn!H!IA@^KVX^R zKQ35GAoKy2LjJF$mO2GO53qb+3ziiK@q>B)3Bhs$p?qTB2-ZIk8cUn_R5Nhq%G=j>ol+1Wz$XnkM&fGUNyz3MX20>UNt4COVQ4ON)by`hp1ZLfh4Ox zQuPec)?VEO0|->f6rG~RqU8cJg)>;$=v;wWf}E-r!uA4s)ihMSiQzV&??BE_w_)T6 z=sS=CH5bd>fW8A6E(dQ1=1C3;)weM7K#d?H)u28=<_j`L{RQ12pjS=f)EL-YK(Cs{ ztG4LSfjSYJsBVV+1@s-rB(<42(5t2?DxQhzRnt^8nH8?@KuXjhmPg-#RHzL^^s1>! z`OyLay=t1JevghE(5t3u)v*T@qGJMyB4q;ph=v5QufaO$IAASWji#gx| zjI9B44`PQt!nhk)B^h61hi1d(0;>gEZ-<^`TdomogB|*w?YCC2jdo}i3?i^Dd;~f- zV}@nTULm{>ux4N>_44Vk9a_i6xl(waU@6Z#kC)iSG;f$I?a4=im@D-OXEgSJaP4`B zrN7F(1a%evupOKlYy;)$MvTxn5|~zIsh_<-wEel%e#|O35?C8!LIj9jwfoddFdrNV zOin;$qUvxYFcGB!$UTk(rkTd6^D%wmNMLdjRS(!7jszx>r1-5Ujs#}cPF5Gg%5Wqw zIsH`<7D+e~mPqHX zuiEQXB6F=*?W@!iFsxv$h^ZOuv(H1&N8{ZctmY%1LRUco>9q|)PmanURT3e*V_Kx zRP^K!)T{QlRXZ4cP}|?Ts+8L5MZtS&4QelVxgcMt;}`{ks|5Kulnet7t`-FA&U`k* z8d=ZbboMV`!9jfw9I-=PsBoQ(%s8FBiIuPKf^j-KKiCWE+u&SSDXZm5k;F=q#{&oT z;vMV9ndrYky?V#`u@AGqK_sz$tVaI{>h(KLXa5{F7}N`RtQbGV>>0c+9Dz09boR9{ zO3>{%QZ-_hOPCt&3C@_% zT^Q^WrfCIs=n@R?2_;$s20X4*5s`hRy59*=mN(b2%K`DoCQ`;mOK& zgS#Bsyj0m?1p0!#qthW0Fk*2a;0T>E2GwTYk<4pN_df=a?-8W2J(l-VMlWEFo<4S3n-a81gUyMx6Rbrn1wo3jwnHI-Z0%*|#=FfGR|| zh7taR-fD02%Xr!oWKzL0*V{X;F9u;OLK-@sZqCkE({g%gRk}e|L)9tiC^N{}Z&3Rjfvza+mK*Zpz&eySJ ze)35L=q!?;<;`ax)?*OH8RIBmuL zSQFm`;Z20pyIJm|n)o9KKOl&ac+WG2&=wa~$C=2V{e&;TJo8tAU^nzj$6F3Z*ngh$ zC2%*#=jMl5+q3B2^2-Pkg}d?>ePK3GJCH&MUD3Q&XDIE4W9RE|-JOPvPG&`*jS*he z5r#qdOh)M6Dni7V=KNvuLH;H|V>T}bNFmk-LEP0WgaHmh z*Fi{%{74}#*bc*}8w#!LV*Km4hy&r4=4iPR&B{O~vU0$>-PiFIkQy!%En^v(TA0He zCUFri{)I$PU^~AX4olCoa%c$5`L~9S~7-D;rS%^vSoxd0Q8uWqgt7P4dI z?1A`gSa5u%#ijf)(pJ|;Aut~)Io8lQkpstMZT%SWQ1H<(^xP+)z`n$n`Z-A9UJ;ir z-ZWjj6+jmwbY-JaoK-yn*PVTFh?Z!y+0>TT4bCyjt4QrZYu<%;zenhD4(&M6H-N;0 zAiRi>dKv!V&~BMc==0_{iI;LRN%EzLS-X)Rgw#r=6!yu@L~jtX5i%1QJ=rJYylc}X znQ2%s1MkQ*T$`q5?u-CWcbaor>X)2sx@vqH6kI~h6Ei^^;gfr(r64RO@fRBWxte$_ z2pbT@+E$=4$78g0tPROpIY`DLW42-RV{>krYUQ9ZEHCWvGRQ${iE+qG$$l~Vx*E$D+7hIg?Q_$k%OsWrT>4X>Y- zvjn6oA?`=j(i8&ESve~~8+|6qs%bXFt}-zP8WNME)@{(b(Wn>|qk@wmRb0}n;$EYo zrkO+=WL{T0TCJP|AhGBTMwt}d&bM-&0fQOcZ5Yhxi=f>y%(9*|@dsKt?}9{?uQ#ha zY*aSJs$^~E95p&UXbq?EjYcQm>tIu2fcO@qH;2H=6%3imrHOHwfKkT2-|GY4qT^z$ zgfNA4xj0_P=`_>d!#r+B=q*#j{oZ_9;2R*kijcYp(~SL~S1jxY5SmClPZK-*3`x36 zqU)s8PuV*k^hQX`2cZu_27A+PuNe6x;3Fw`I>*|FywY*r2H{N-Ynai8yzQ8y;~;#F zp!>)k9o@C5ER)t@@9~;GQm*^V9&eWJGZmS~QGej~(RgL%!_3ki@2MJ}o;f;O@FI=R z$eqR2>cieNt`L%Q|Lz60S7Y6CxNcm*mhWzAQ_Q!_%HbqMMuTC<__wLt%E>T{y@sKC zQiYY1YZxyZ#t>0eY2^$wj88Pf7049MbStO8a9qf-w0n2q%+NiLEu5w~GHkknH|qXI zMsLID+uYNJ84|jQ)4?Vh(hw_WJM4k8}87uSbrG8x|SG@u2oE_Z80g@S9lfemOmC9i)Sp~x?Is)SlwkbhjoMy zWP-TDJD4`aJu?y2Ugh9(wV__+P0@xoug{Wv%f3nXfPy|t`r_`XLW}@nWeXf<`tj2ab z3@hghBl|a_%~<#xZO5$S_Z-dvD`z~U+1}qdG`1SoL?wp7m*}M7(8RMqqk>Z$T7i{= z1{MW_9h#$Hm0^r=7@1buX3%8Nyv;DRiCG;FMo@_*-sml4HTZS|S3g}YN)}cx8cRCr zu`@y!8D>hnr?GX5Kp2jYx<3w*W!`x1AkGG120~sAI=VgGn?@_P?7Tn2)a@Atb?1kO zR(aF9g3GU9vhdKvnvY~NW?S|=ZaafARPFS4ssAod!n9vhCr{VRym#gAP)1X;jrKNq_>h{?pz)ZFZrrE*#X7t{?Jw1}Bzb8uzz zS{-L&Kg<5b6J-1F$CCl_Nck=)Voz%ulFQjoiYm654=zSK2Iz`E*m2cUR- zWi5458zHu5Vi$rifyDSs5W8#1WgsjfaR8Nd*V()sgj+~_k+zwwB|ig!+d^49ec}X$ zvDANHTf*+4tGj&wcf<%;91IVF%cjWnO2X4YpF&wPm+a#l#VGM-%xi(E~Uelgw7<$4z-^xKMVy)vHReBDl0naw1 zK~xf~*FzT>YhslIH(EJGM#(nAI9+1wuyX!l7`vObKW9i!8WPrj2My^RLt=s)FQObMc0j~Y5_I?!JetE-MM!%a`0EI{dE6qr&LdsMox20mmA%m;=Fr4qmO%P<;K&Vt=GX(QuJ?h& zy9}{gY-n^savXMXSSQxJ-I3%`o#YTCH;74|3JE6pt)m`E4mY$!#FA`ClDt0{2@aFY z)Ep+sQS95UJ$ibDm?r=Dg zBi=Ti0S@#3=h#$&-&i?g4C7@d6+PcG_a8Z0p0m<0D(Gd#R9tW&;(-xMp}7QRN2vmX zX?JlLI#;-}e8xn<*@RN#c{)bgC!ljG$oUEv%-nb*fV;LI4XM(QP~G${N2#UJ1h8H* zv}+vNAggP8Q~8p+=MZN^1Pz*@dmx8TyPq)y)YaWU%+eW-VqFO}rEYp5UPSTec>;H{G{fcerei ztYzJs?q9Cw$ZU_yk?u_oEYIA9#|U<|r#JKF-t^#dy)~8NNnmZbH|<`o_ojL}gr?=0 z!@D9%t|wuYNE}#^Wuf}E55UCOt^+ueJ*O0aVBu5woNocyIvv23n#YX-w|BYqG~UqU z*2J|0{PDPr#>P`{6a1=XsDpMV?mro9z1<0u2%_>1y-G**^j(ZM=5p9i*@>1Lh0CzA z$ODZF;I#g@;4Vm4_Ep-i$%d7K8CXp7Pdb|3(?X@`T|FA@tA<0HW$jrx*(T2ChQrB< z)oA6QSBSO%dYeu{SPz0V39S2}u7_s1Hyv0Zwk}(3DYjl6vzCTx0q##=h?0scHY8a3 zdPBki=uCl9*BjEpW~l~4T5m|0nK;x@eS;=p7f|0H%JApVaL@QSvAeC=t*x$NkCc73gS0SYGEe+f4ktYk! zg0K%E2idTm#J?E`j`_&8(-<(g16(hRajs>Wtw(J3mK!t!drxxD#c}$+R|SId zqp}vG;9*^TAAs{7Lf=i}z=4GP3jjhQrQdy^egpQ`2>tE=!h7-n0^ST`3@n$h9f*J| zXz5;H_CyfrLR=JxbmwO}Ko0*yZ7)_p!Z^E)8CK}qT1 z>)c&P{0W5b5qip8z22$g3SH;x-R2oirLN=kIwP)4(=+d4Q>}N)vq{&c8FIJIS!OUg zRkJ-{r!j*3ka3=2=&HmdWIMgegJ4{}OY7S?%`wXerkT8usVn}6%bh?#x03_z6>vOnZm9Riet+B9t< zOdb!Ruuka0w_QM%o163y>ItFCgtkH)%=e{=Kp0NqQI5pZ+~?4kxHB;WA@%B95KG;u zBwh=`1_W&lrEYnw>)Lc->e${8D$_!DLEv`A?1_IMc4bVyME*31e}gfBm`CDK5I!OC z+$!!E&uJH4(3KA>{V!1i1>g+%WocvwH!n)R>j}1aDbpx#e*H4>san zQ&v4vc^IQe>T{{!Ug~a7>t71aVgzddM?x9Xwg9sixZ8gWSs6PwgMU4OjE48%;`a#6 z1HvzmW9{qJ+@=ey9N33gU}t?xr8&MO)}}GO4BRGx%gHIEKN2}kjc z&-6rY+PkB>e1{=vH!yw|Ssk}`=ke9J1IW_j2&ppVr0A)HA5MHo;!m7kQrz;`VhdXP zdW6(lco&=EK84fRiy-jp_RMo2ZgmNBN}6)iP5h`jM-MsRuf}P>ln@&wjw45*P{;@ zP0J14?7HMUX6V-$`VcGab&wuKHm#0daMAUREBX|n3PihsW$V45vYMlt^kt8(=}V?BdLUvY7~3 zOmGa6V~#7)1p^L`5R#>&WDY2r42XUKB+|WDpUDtDxdl5wD_r z&$IS(s!mnHz3=b)eSdx@IsKfq_S$=|z4zK{Pp7J=3TtwiRWT~wc2rr%35Be3TLfes z7RyYFdtNhqVXmYPTCS4p5#evK@5P_7b|JMM&EI3}?147mdCc8Jk<;$5?mZHn;RPJY0y|&8eu| z^|wiMTsegabY^r}VQhYaVr~U&@Q+{IQ z2h3{X!*I=!n{%o3TPl~K1I~D%8bP-dY5!|z#!FR3n`vO0H4`QC)#YdSLR?4T#MlyjZMBcnR4HNi0$lu4-ZzfA+wr8*o%LX1$<9Y3}QTj zK;cgQ06pn7j#X?duFUN18a{YS`yd!Olq(M1c;wcJEo{1Tb8OdV_|5^9Pr5RG8VY?9 zx4nACeJpR;o|%Y;X#hvJ2xoiC8#qWc7tJHboA?@4oR&-X7RuequRfW|H@Ois{ZX*K zfmFYW+wC(}71>eEufTW-w;Oz?2ld=Hk5Ub$mh5hb?ZiE)WFnZaN6a=4gE2(rV>H;mJLY@9cqf@Yng8vWp9kX} z+$+YjT}z6}e~4^m#_^{IIZY}-kBGbxF-v|HVn4(kABE6KykE!P$iE_GRB;^IqXM^e zZ@2-xiGx3ExX8aF73Ux^>)vd(xwx%+uffAA+}nrJA`M?PLRm)mh!hxBY(_I%Y6r~Y950QtqKpz)Aa)|q3(Kp_F^UWzaCw_qf3OO(eV#GOn1PCOG*J z%qQ}QD>9@}3M=xXuE?&a-!3TXw+o8;m@Dco z#NLkE#;tK^mYK+yMa|$ZW)0me>J2!Ch80;+*SPQz8E?_dL2vqu;@s-DRZ&^c6$J%7 z`DV7%eXfXcE8=6>BHkCV9i4YUk884}x!;w>CT71zxBOaIu~7DNF|oD|?48`iJU$Vw zMmCPKoKLtsK8N)0#_f#cQ!bCE!1xiF9V3vyosmjzi@prTZ*kA4ge6Aqid1sqiB*to z{r?vfGDr0fmO3(8l})2(+Va~&c^ZY@TCcgK61 zBkp+54P{M{%0EEhSE!m7aj)2Z3Z%D1DxU^(1wSGb+3pB8$hEj8z)P9#*zR0M$KcHQ zdt%f1sjA4iu1V&AF$?z$ej+P!zO%nb%L;xbE0S>Jitm$1Mk@Fo!=xy^S$m|C?^vxw z%oVt^W4SF^ST`>>slkFVadOaLvw}*p_FRZj={HORa$F-5X7mg9? zbs>;*iiHsy>sq114&3%qD6`MnyFW<3hyez^&MU{wSSwtt3}U1iD-Qk%V|gb}U{9Iq z8i_Np$gT8LQ+FXbu)cOr?aa8LV2wK11+J{Z|KZRBVpHyhdFoafZY9yZ#&5Wf?* z+uDssY&-KQFrLKioy=ckjf{1fc37qywOpoSU8b)?@GrQhTBc(omg!Vj)CAm9E$gun z%eoniEo9n&HP$I`1dNMuI|VA70v`qAcHEPvB2Sx{O?<2hnheX0lX26AVN-32Hq3S0 zuOQZ!aC<9PA#UU!*?G%+ljpnDt8AwB4?EKP1w^02J%?V**>x~?XGYqCR21TLvOTBq; z-KN*{9E(;*sl_?g8IszRW1TChb8@UUN%iJf`z3X0mbEr5DW`z9?g3bBQIoyz9K8=> z>yscCaR6H1hNrcB@)|g&=M~2txs|SZ;YnbffmYj&yPo026yP7$KYh1}+=SrkanD63 zaWC|HjjxZyD`L3I8cG_EptJHWYb_>_*c5A=RRc9~S8R@Lm=B#hhU28t+xYES_~BRFjn83>ru^6ofB6jz`^>WVyMt$X}Y@o*`qv zHbs7mZmvKJA zKHTf~2E6HuXB|WT^x&Yqh=*Y&xF`nq_5Y4pWVtZ<1mw~^9rZHx z$M~=kcd_@ENOMSWmg=~yz_Sa(BGV)=F&CFl%Ul5d>SFyDmfwPyJ|{>KZx?5RarcNZ z*~3^xF8*dO)+?uQ$dkgZ9H9nfLJSB+i-L3|VDlGwb;pPk*-P%%gr8;KL((eQ}LOaA2~_+poR)U>erov>?w zodm9gD6})wMxOl~HWft05dLhBp{lzXj5}O7{@R6fa0LM|tX%rNDaR=Eaok9V@G0Cy z-TGniLr`q)iaawns*UNA2-U0zYYV;%Z>? zqY4RuP`DcI1^+iDvKxQ1*MoTa2X3?jUu->GsLdk?V>BNXuw-VaK#0Lux+(H|6H9vw zXC31s3+H?3!yuUfWkE8OkHa0wQ099L zTyJ$*9%p;ykb>HTZrmrX09RpVZh=s)0_YNW)#7GvXBKU^BVM+AMcfO>3g9t&t;JI# zZm2+T@j^;&0&|NC$6sA!u=gQSz@ifPqBs1du5@n1Nyg=8w7h!vh`+j6Vl4Q>i7@0Q z+@CadD}vl-9PG;j7-(NczY)liv8?A3%@EJRlU-OMcwv#-z;y|pBMGV*r8f@5qWB^= zONz1)@9ZE-Ia+htpf?!D=(l73+=w^6;uw=Ewj5alb`66nK~hvIh|XFFWH>N+MXaTq zJYm?2hr_UPn|}4`z-Q0;XL|i8o&2!JWa)oDTz4R>G%oN4-OlV|;Ll zzb%qYFXCk@q}aSKqnxP7VA};9SO!cMurZDMB9h3J_$AyZ1>q~Wqu$Uvj`879$0s~t zkGl!<4k7bof-RC@f;o|_|7LShB%G&9Fe_4&mj-0*D$a`*a3jb*;vE5b3vM69!JOx7 zcx0MBnjPeHsKqy96^a167?F`!R0i#sbc|AGNfM-!bAKxVKfw)`KLrx5;GzC?C&C`K z@N8FtE6YlTm=MCnUWIN)I0C5?yNgm2vOzi!%DD@K*;RqR5wC?12(@HYN7A@xPE!6w zJgx>83Sr}4+4bdCZKRJ zl_uOpUi~qmOY!U%@#s=K8&7s&0hPVNrs86pNq7-Ajg07GXDtXEyVz)`WWt@ePh81P zXlEc4@%C8U&>tt!l9R}r3{cQXwB{tTsuV*5SNK4VI&-qf+JlcGoP`@bEpm(x9Y$Of zImQR74I%v174hcdsTMa1Mv48n%h6Lz zWL79=$wlVr5rooOT7*URxO)Y_WgKc5hC5~}p6n{JxY8wHy6L%-+?8Wa$KyQQ1%)Ad zuCZ-2q(qUIz8Ihj4K5AyDuL`W+?bURsN68`pjSULZ9_W9+*N`{WJ~xl?h~7B$TtK+ z$JeMEms<#dP_9P7w95{gML5e(xyU4r2km>Nb@N#abnQ$HM6DvImA)0OnLdPrZ zQZk1Y2!)lVm60E@Zi5G!u`@%q2Ic^3k9FgrA2(_nf9>KR%c!o!YL5-!*(I~f!tGBZ z{$7GRuhE;p*lWyeVrWg91B4S~!YNj=>8b)>6nPT zKI`@Qqxjp}ug{-ag5RjYw+4EVDdbMZAMY6DzKeTufo%H7B{?AqJcWBwp^zo-5@PtX zxc_f5g;?lf6W)s(7E7S^F%0>Kyy?gI%tS-O7>&dUQLB+yNC$;F7O06~G|(n5++yla z9C!zAq)cEYHnGSx4n9-`CT%6pj6maJRfA2S-_36as#uSE32qJ(L`sF$KpYqgMb?8C z^M=PWSZ(7m@1heyegqEf`S}HsPRQ0}6bfYrJwwA6}tu15865}zt@L#6S6Def_sShn*QLBoR83c+$T&Od|hk>mg5A57uu}51rmjZ zz?d^}bJqq_iM+-F+b-H3QYOT3yCnF;_C~-Yz;ySBzjo!eG-=NPH^34+ARd9$Sf~@5 zV6lm0>po~YMu~bO-n7+ey~*sxU%S}1cu|JA&IdY?tfz<4S+fqrSOc?h!=n;tQ&BG+ zv29EyVG}f?3j?od@ntnOJ0Z^1lntL`KxOK8MhSOH++at*qZ5D4WDnk?{I++}cn zXuBD67tM^4H~kp7j5E%Q;`>+e^=cZ~rBB?xicCsxAkjy4kl zCBnPV9Dd2q8$ff+tTjQzE}YdcPr|kK_!bg70|{ysDzzoTafivYgoSdG8!SmtIs6xg z80(7~TNU9go%?JTAAjvCLM9yj*lK0C>0!qM-FV4w;<9OW)EkH#V|SW~JL(<8 zcGU^4kZx>nryHL_^&Za#;30bzj-MK6)G=sR7vlboQdq#F zT{AseU>tXF)#8EnK{wbRFoE^DX%pK+eA?JN+~?vB%d<_Ia8s7)1sCdM7sr>av<%x2!B6^`%AdLVjTB}HpZLr zZ`S<VOFh_^gL;d&~qqHzYS* z^nBo1Z^36>x8U9t3J)Gx=iz!T1x>#d#~scGqz$OV+5Cem?Z9OD7_?_#XPXq>C}df9 zEpd?TH*7mzf&6uj%%&UYaZ3Szzvz`hmW9{}5U&~A7I7}Vnw$IkMDaQ3C(dL4s# z)LV%KM^WUTcn=ISGgvsSJW^d<C#CW}t5{-JbGJ5YpA#-aXin@@n?? z^`vUjoeS`_mJ2eeflMl0vn_eJtEaVbYt62{zV3mV)3@(-4|TQG3u}_;o&~*qy{QGM zWLsB_lBwxQw(sxi{r@bvfeQzubdW=?46ZOuU2W-Px+^tM)6kdh=<2KK?@neq`_euC z7ZJ9#Zf>n3;KSf8;4BL`?;Y0NxR{N6(h=5l>i;HXg=2P&4yy3z>XSp)jNNhAKagIMSR_5bN z1ARQLK<2R;aK`u}X8UNNLlsR(lj+q|V_QF*(w{6PwsaBRM+nvLYs$iEcsgr1dQk+e zGGiL7J2uOohU7-XRuvcd6QWOC43nrNYfEv&9~-?FaYvvjN14nH!>uSvQ7n2W?z4<+ zJY%qgMRESAjzvo&ew$=cpGeHl$+wn_7ntb{W=trfnQ3Gijn)12(P2X-8~3NgSNfBy{Vgl~QZzCYF?(I* zk6GZC)%c?qfG4BvgvrDUtoD(h;n;G~3nTu>S$d%`%TbtvLjMMuQ_(dPp%qD@p)z(CNoM#COrwLvkq`lGE?wt^Xr z$7AMN;CW)vM0KUVAci)sIoGdT=})Wn*T((IRS25xkEKRXaYSrv4Ib($V&mYmaQxd!(~tuJioW0rJ9bc7l7AmW!tN20Qp01sQGopg3AbH&NAy1KJt zw-fvst}(Vv^+&)}$7<{R304`kXcTsv{GRy(W>86!iJj{ElT6oBs{K*bu!f34ZJwv_ zc%)M5kDZCM_n4_+Z188Z9VVUSBkCloWgPz`T3r1{ZnRX7^N6pz)DV?%W-I25+ix^A z^LzI-KC8IE7re)hj4K!+ZZaWh^lp?OPybaBF1Jk(Y35{hEFF$C+>RZ z2-nb~V3la=SqK}g&M_8v3g{8mbUXbj!-(&CF5K*i`fe;brrIBGjXuL4e=;(vWzmpm zbf}ui7mdj49rv5^Q98ukn&@TSWFw#>x-1=SEc((#utD>*E8}SHQPEqGJS*2FfFTOCkniDNa|+N& zjP}>g_Lo)p{`}Z^+x8rSe^5iA>=#AwJ;>G`Q5%J#d(1;eF|3S1<3y)Ba=xQ#{Zq({ zO|^DnCpR(@o3*EjZL%e=A#O(LeB{PD;Fv$#FGU+nk7F*>&l;|**xGdVc@@zyoweIB zVbgKgx~c)S{6Q>;%!(-=|tMK0T83rF zH}2yvjHV>MXAhF!gV5;E%GyA(S(I}`(bB6MW zmgS{6IogMLA@Ueo;V(xvFto9tXjZjWJtOE=>C?x;ZPtUG7d)$Ic%IeXF`QP*tFpq3 z7hMir6wVn2%vA6ghY@G3c%i9>mcZ1cVu3%l%CDG)nyIp$OmyRQT^H1kPC)xb_gBaE z46&elBi74c3FvP@yGEx~!wmPV2|WBh8yNi9HtS-T?tbMREB&zxTrN>`gefS}XzL-W zpdjmotFw#|ckHp=GY&JbQ?@n&(V81)H&_+!UGP zsLjPt6)>$?k(!!SUAPNs@KVffFe|h=q|1#SjQDdocKUmPw9wcLR`05BG z^nhmR3O+k}0L6`ttLEq&J%BQ@KS80%)#J@7;itEO6j5fvnsn)fki$aYtv6_9m z+FyY22(wr;%-JZ?YL@>zH`{*;Wh%4EtYSTHf#pSeBK|^lzWmA1o2;)2O;RCncGI~R zH#KcL2~`9WIiDj@jdcy0~#+3%y96wt%WF zFo|k^vvJ1wr#gWXEUQkA?Afz*&(>h=y~YNxNRvMv4Mv?U1vPWkNH$vq*Ake?p~Q=- zQ6XDv_YCd9Jcjn=pY2z2JvlvwfWhNgL$;G+y}pWDP)NiUxV5$HZx#77i@RKQbkVl> z9AcJeia3TEnA)CmwjVll*dI{?7dqA-QHAd6pKCh?+yRw#K%3vUa(^UrV;EcA5*U zvOzG4t)cM@3``hfj7wv-Ut?)0V1d6WFAWQ>O?UQM9HXdjfz^&;bd?t zs&S9T=&)0)>fQ@ZAvy~&7MQ6&BOU?v?zp?)vvY@*pIEQwCI?u z&6&@Zn}fB4v%|yi(VR^q+GJZxp1XC8ZB(J*>;1V5srBd1_c1EYWsOcp9j;ngFui=v zbgz`Fa@(&~FIZ9=E^uC|O5SEcfw%D^bp^ArUt5af%tG;#GBde0haZDF)3{qu6&<89 z>txY;3?tDrRw8cL#2x{+$51a7n0S@>^@Dh>vpHD(Dt`g0fV(qBV<=u#xAg%je+nGf z9E_x<_Gwa|t^*#E{wio(v<>$&vrUgq5YXJYjK-!Elrh#gt^> z$J|s0D|MU8INattoNgGIUa-t~Cnf=0(@i$?IjT6)v z>^v*|$V5C(kx-R&C`M+-LLT`um18cC6YIC8P`~_LwY&1;I;Cor-*n-cx6&j34B+e8 zvSQ^^h2~>ttyt+-Rr#|!{L`lUvuWaUU{jTtBjM|;Ku2a46y`@R5w2tC+=!-wT-AQptgJJ^hIcKBb$$$yy@0uYGYMvp=00*k3!?-=9i*;5MeZlQ>!pB5mkR z;`DLX=8dhM9sBk73?>dG52O-<{fUn53%!;Nr`IR?(p~$!%;BbFCe@lrrZa>69!`Yg z4a=9uc_3U}7q73aud7{FzbHO8o$7`jsZ-($dfNL3SGD)0GpWN1dKQ7s>>uoD19o?1 zGTk^m?(OJG_JZ#0?n`DC;4FF7KwoF3v!5(P?d%^~v|ylrK}X#ZaFXfv{i|^DJhU{m zpyyNy?TatiF%VyX1JG6N&}2bpZ{LD;JM_kLUr$$NL1#MIlUmT&EFIJw&k{RvT9`^F+WS(Son7r+sou;0gFA3a3+)pFsZ6G;ci%uF z*)fzzwzmU2(%!ZW>sk}*wlyc3o0<|Ew^j`s zcL;6NmgpO3_fXCIQkg`uC)d8Gr!p;vRsZXt|4@ppQ|DSIkr+fNm!a`-oXf_?G4nts z(KndsAIu~=)2V}r{ayR^d$5T_suygd~*?&{f*>G#qDLy6kMb+!Dn)Z3TpO{H-YPsw#8j>-#4jDFObqR9nKeqn!d zV8BZa!3+{OV@As-phe1h4;jecl$N&y2FWqc4#` z)qBa_4BEE4D+&ATNemq5>W4k2-zp6&e|riR)e%%&dSIZ7)|2Q*+alavBw$HWz2+Cp zSq$`d^(5GVDCxED-`3T;nO&_tg`dgJzCY1i@GeSCfA~#@Y>zpku`y9k#jQvwbSicz zWKC-h8^pe3Pmi+*=z>Z>+Xu~NU4$0eg0~>}Vt{!|7;nS=WN&Y(+t};ZCz?0yN$hCe zwRy+()NVR>CAtn8+tpDjK{I92Jt_Dx zXQFu~lI*x(5bX`8<66yn3Uo-ry5X({(Ee<@Oy6c$i&LVpt*rrX>$GP2`n|Tn_5;@Y z(y3&}g{t~`_=DQR3p+bc(A2xKO>I6o-FFCf!_g$@8JIEfb*YT`DH72S#z56oz<)84TQ5~H4zIy&y$UlqtXEFaQ;h&}avy6Y1=f<6V zNu(U^+M!v>Qm1nl<^vsxr01|r2%|B6hewMInwieg#-sL3L96g3rksQ7>h(IhIy-Ao z8nnGxtExRc)Yvt^Nl-&~U;BXp59Vk6slbK0o~w=<)T*031r`u0$r4u*H~cMLhIYd* zt*OVjp+r`L{!yPmBX9_zyUp~Z6PT%W_2I?5AQ!Zq=5{uo1n*p-`}8Ca=Nzt53~8}g zS~vskfc=;QU}s3@^-%f-jm2lMG--(0< z(W9(0r@TZW7)m=kQbSpl;RAxHRHz9%sRd?oh?O0I(>9~s+_DqJ+t{|bw=2_??Do12 zwqlyV!K@>HI=Abr#2F1cAlr-~5#|83QP=R3m`#~gXJ|zj?sIILWF5>i_wY!D;&mob z7qqIN+%N==5S%BX3*!OGSZiPyMbYp#TTty&HmRfiUfy&d!CHvP9y1r>cqG3nlhDPg>u$8`Uysikph9r^~Ztghj4faxpR7bph ze=?0PQn%u;|7zl6T>^7Fn^BuL!sIFIqjFQ`M0dJiWJJf`n8u)JQ!-4CWHvds7M{Pm zDudrgmB|gFH8-wL?AX04v29)JR?WAW3f(&G9I72R>2Vz?q!z};+^`%B89_`Nra434 zLaKRPQv%g?`i5PJb?aLb8(La|%;;E|X}9@S%#E|QV9p`0Ck^%ww0Apu>DbuH?vpb% z8!N0|sV)keKj=v=K8G*}_GS(pcuNCyqc%Itl0|Sg@Z?GJ_DOU1$wkI7ho3Z$pEQ@B zG@qYb?rrSBQg9QO9cIBWv)2BuGt-zMd71sFm+AvCs}5s49j0ariQc{gm{la&k$M+8r`N{$md%Bsb(;-TZKivh>E33#x0&v3rhA*| zj$dA-{PL_GuoyaD%oaS%uG`bO`c~&|%k$^ved!IP;y`~IBP?1MUNzC1bFB0>6yZ>u zvnNb-Xi#p^#L>PU$~qxVq&V?3-@Tqo#EmT*b|!54+_IsyHlM7^C+qXcg>-VLe7tsS zP1MwPh~|F$Of0;#l^%K19E`cnKL`H7RU4cX2HCLYoC4Yaqg2ACc_Oz2v0y;APKb$z zOFFv(wtWnZznt>*a9*KFU%?EYZmPB3I}vx8$2Amxcc!gP%T{Y(H~_2dP~~SwGxkth zN_K3_4Zd%&GBjW6)`zyrBd19(RnQ_Dhjq8XeZ7D>@DZSf&CYS zO>|?=>9je#e9h`&V-{}YWDaAzQgLzycfxr`I@o2fVYx1w584!)030iKV7W)5=FHkM zM8cR%wsZWnxgFQNNxel*$Kh-^G&QMpQxhtRlCcq3Vq2OZ!9-j40T!aG7gis*RV32W zmP8k43A<6@-J5$mQipRL5;F_-N#;gV#^Rm+$8COK6D$~<0$*enbOO~Dy1g=F&z#(1 z%dL7{XDrwugPd~1HVXGWf+TY`o}0uBB!=qYs=5YJ=7g~ZOtW274gJXsmIJ-qC$aX^ zqNQK!SW|ca)oI4YHJq(!RJoz-Fl%?~F=WOGvPNwQ=32i#(T~+ECuh!49@k3st}3j? zuduZB#afq0EU@hx~W#=KAST-GimN_Epq#5$U3{lkV*D-B-0()BG`Dx zIa~|3F4!L28^E%Y`zth%a zl$UC6H!qUi-b^&F+tIvXJ97>kA(t#}deU-M0+YGcGdJ&Q*p%R)=%$~$v?&)vz&0S3 zONnmGuQQ1uXRZHp{b}+M)B`+Ls9DVnP{|UqzNz6zTIM>Wt?;neL43~i0}F!HHYfAu zJ#PQh_9EO8HM_uQAH@7Y4lZGn(|+tkar@!KA_r-&unW#+>T2z;&4KD{4pe7zAbb%t zLoo-+RV()c0!8Vaw12xSs07a46Ya?~K6jPoE)I8`yZR4cvEF~6El4OB#Ikm&buf0x zYY#8QA`BVk8>16g$bI64o%yDMJ(RSy7pko()v*x^CQJZX9~-bxmE~}jT`-5vP71PH z1hj<0=?k}o-4wC2#t1Pkne{W!*nXBTr|qr>Oc zbuO2sm`0mR;DpVe0E)0r?8j1A_gQGJy&&P>UFbn0Jv~C;q%$7eG5m3Nj)XM4Z z+CyazkKo5GjNv>{Wq~*MdfU3(!ByZdY}1(o4aXN7XRy)X%Cvk56)K$dNT}chVqbqE zYvQSJsp_p%Fu#JMkQ20<+m2>eM(bi46toQ-<2p`Cauty~6;U$TTFY4tr_(l^V0Q*{ zw0+ow$3_ZvBNQbxeYU}!OGRsPEMkJZ^8JXbbf`gt)8vfp6;`x4DX-6ys5pBDM=dpc zfwI}XFSBhNGT1r}6QRr*n1$sIU~ODRTn_nNw!8Tjt}CpFTLQRAeqcX&`?W#s!t!n6 zye>O&k(yz%3c6~(AIi44oqvU$8Ygw~Xw=$lh>JERjmEGNp<r{Pic|A7fF#Oq>NN8uB3u6_6`;sKBw9RNYY^Mh$Z@@vEop0vm zW2{&!mI~BH*kl^&sCQ2A;Lv#18^uYu_ zYt6`3Ssgfdp!IR8)Nfn&Dp1b5z%6t;55vLzqU>>M2Y1_SY7$gJxFz8rY#ed6kgE%B zVDj~Wyf(GLmWPg7NxORI{`I1z+4Hmp8|Z0cC+aSFleX<>FKqk`q40f)w%mSdQ}f0| z!?v(8FyHV-rV1Z)b53$F^+;WWzG|JvniSI|tV&u?v9_He;d&l*x~2)v?SqD}npQ&u zM$wvG)U<@wlD4_imC)u+c8-Yl-!vLY2X%qu&aR#rhNk$j_(lRT#4qL#H1X9syqIJ)pDG6Tdp>$ zB{@SwmkgOXH-CfkW6KAf3VQG8=T7f{*RrFjX~!8GS`rQ0cX|1ns)^){CWbiEj7CkhA>XY?cKD47*_8q{Xx6Q0% z`m(9;IS4jhf=xv?Eu}xm^&W0JhdWQdCR@%_vBhm05W$#f2f;kj<>-2RSIjNbEJA^k zLN)Omn3R z&YsZQ9xV1HG0zVfkXEznRk-Z=Jl|+(+OdB3Mk?WE?^uD@QnINV6|%m=j?FBk*3`l9 z1}C~t@FLP8x9_8-umB!by5)XP*8tDYwWp*FYMkx7#r|}zLXlkHDFP!<4)7M);}i}H zo!k-%+9r2c5VCi-E)8BpFpt534DY^lc3Q&*N5SDTxW2tmg|n`-sJ4S{vo^QdfxB=e zNhFf|>Wsu-HwGH?zCfQ)JuP)L0%y8BJ7n6+45;bcsx!B?KW+@M(=i)WLv5?!wZ(RC z+~$fKc%4~=@~?MA3F5NgIN!nW*~YEsNW1-iRU(ZRc70| zru?Y_v~gVp^FD02xs4pD7#j8V;Wa9(iR^^13Fi#3=ygl8+hG`iY_*s@R?fw&ciTH? z>hP;yHX}QJS_bvqiX%HI;tqaSFZPbn2m^Q#EBtB_)_LhnTi&wLdGf&A(aEq06YT%c z)#9k6AM+wuT5a&4jq&V`VR#FOl@IgHjm#LRk?7`wUSmUpotd_J7p2lT(n< zqLPJ-wn9dGAtQJbj)SnLqyXEbU zFhxzgF_Um+9&R4I8PIPp722zk94E1{K|z-T-@gcNo1@p}C684?XBTD$+?4BwG2^&^ zGdWb0n=Xb<-#2YO+x&5mwk<4ps#oj$N3N~HZE&J8We=>Vr=~yInp1@E`~ZswagRTX z?Ksq%J&X+uXV>9IzKoZ%Qm!J9Lf%0}AdI5&Xwe3h{61_=;zp6BZGl6{+lQrp<10Q) zJk-Jox5pj0N#_GX`E3r){nDMmaTiWT&;|nsyiRoFp#+xiZs*&5dk;K*D0-_cKy1}& zul+F|W?HWI<*X1dYv9E-9Cg`iYkZZ$oG3ROq%J)+4Khf(#noG`uI;5Uw?7cbz+DGs z9k@=Lm=1Js2<_L@tYJS??j6|Q)roTw%mdvXp}AGF^e&sS*$T_``MjFX?rQu`KFz(8 zic-4`DI00u>djltCNO5X+)zT99qPTSV^GcnKQfM95G<784%ii%(JOND&P-9YaAlay z^X&>%S5On51<+4L_s_>m)~196MBq~|vMXuyusE`%HD+}x3}9rR|r zbkM^W$opD1Hlhuh@C(RhN7Ljz6cRN3;!lQ6nJqdey%fa zUo7SR@C!ZHmBx?yR}^0vy{hQlk)npuO7M6G*K9njD;<6mq1i8dV;H}@5B$r)AAI7Q zrP(j{WLO+`@TG91`Ne+gN=F@yUcprI!}w)?>q^TmFIH$AbZ~9LL!N%;l$2Jk8);vb z8pt%7%!H%GS46Kw>gSi@Tj+u>3Zx95<9yJ?FArQ_S{BHk`NX5&dW2tE7}j?_=&(+~ z7v3?64hx%bc`R3Jd2yZ26I^K$rK7@e`Nf3mN)>i?N$Dt*B@SM2#qkizck2`1dIU9_ z-yZxDKGl0(J=|jaY&{fhL`8(_AzqNqewU85Ygmq7h8U)c3ut~FS-4F7mQESd=_x54 zjuPeTyB2hV>?e-r;M#}>)`i+_dr4`T#SOQE(^2)6E*%vQA_ISA@x!)zz-*WG6I`tC z^`$e9j<{m@mBX%zUF}~}d~Nid&~#ntvZ8gRGiL^Zz#p4z{Alb7|H|U4qE|zz2u(C$ zJqi@=4@V$}HhOpDqSE3pzcJt^N{ho~V0|`(Y(Jdmod{cBI`{ID<2B5Fxg|urBj_}5 zQH~d*MV%$3GuMv{r`uujbB_+YB6g*JRq@r)Ygn3VOG>A#9~rKnVw0;qKKG)Fk4ux~ zKzoJl{;Vgyjm`rLjZ;Zo-N5yw@ymzj=bmRXAA?M&?TeaWt8v9A+zP$&`hC&8*73t- zwIiDP0AJ0;XGFU4|(v*IK$;(-35Aw`Aje1htqcaoL>&d zp$!Fb!hGs`B7QiJuzZ*wE+=(g$M4g(9SAQn2ao>J4GXq;vC+e}jVLOKl^0h=#zjtw zPKZp5Oo~j7Of8-cdnmlZtYYuK-VBH1BZpzqi)O#})v=@Cgs&*RyOO>*cNKf?+x*=Z z+ZG`_d`0nfj`{L2`$Ami$}!dbv_mdN)EizPKRg$RrzpPGI6u7-k6#kWI(HYp_BeM% zVLAEoqfCBnRwP{GOuw{1zSQJvv-0_=Me+6J`JA$X^x2BJD~hiP&X+GQkPm;2F!iY{ zkgqiPT&;vHiSpwMTuic}u;P6A*#-L0%5zr~)}Jpw*W}O2isV{?tSG+zJ70dD$uG*v z^XtKLR}>>=zWn@LAfBT5xsm+v>Voi^g76y4uOll}lYQbt6hHWppI)8Gugpr(f#t3! zzUn+*zCIU-rzpOfJU={FQVK@#wb%LKODwq|T!dF^;7iXn%C3WeoE|7O$VH=1?y|o45Yl9%esJE^le4XX@k*w6Z>=PfNUPFO= zgUR!^d)?I#JQzm34F&QWO#a-g{DuPg(+lKJF9_dU5Wd;c%hmGc0{N{4@>@+lXJ1bZz~AjQ4qev(z`xeo*f19I}7A@nmm7~*j+n=2g4|Sf-B!XvcDpv@ZAOByDhzk zvZ>_%!b=oCLY<%9nI@m>^?5(2g7)20AfNxkl2QCtOMZIUpK+Cb=M{vXXZhv)_jy@O z`4III1@Z}#&y5O+0{OiK@_S9bHY>F^`^1MRepEPL-?oDE+Y02{3*_4i5Jfdcsh z1@b)w@;xRW&r0=VpZE~<`U>RxOg`7XeFgFd3*-+L=yR|@exN{ppg?}0Kz^`5e$eD| z^*>l3KV;!K<`6ulyEfsA)FbwjLb*`<;BkTcA+Jfn#lQ%{!&ekPbDQt64~K(Me-~zd zMxHa{2FUyomiSZZ1aDds~jcQ`CEV0ewjUeWZZCtbjgRKwnuv zUtK_7RX|^BzdRl=%kU7^kn}r)Kp^Q`3+Q`5)17i}tQ_RcR<(Mzlh~8*)y|-4h({GX2S`fdZfX+z% zR~CPXceQ9&pUb=tivF>Mukb!4`iRjhy|0RP?Y-Ljp=ehhYrWr!zSHE_dH)LHqY&ks zZ=s@C9_}xdV?K4VXznAGd#8J~po5F$Utd7CO5WwS*=rNs4cT)1qVmO}KW6kc?|RYP z4=VR|cz1~A-cPx=)B9>bn|!PHyy)*5z1#aE=-{G0Zx+yF&2PFNH!6pBn+7_#D8I0P zURyvnDLz-O<(RLWQxM*-aAsSM`O1-k@S7FB*TT>9J}!ES(FyM%(aVh9>phnj-sZiQ zN4I-rG1oq>emlGwqFI)5uhUy9dZy9)ye82c1IxWGZ+{+rz`I1W>wi7ojiQ}?ecs)9 z@&~=|<6Hykl#**KiGvr~6UH8XUc z#`DMQn-UGJXW~;9)%CSY3cpLJIsfCyq0fN0^O(?QKaJt!gSW_nHx3XKyclY4*#-n& z&azl|-OtYE?c^Cl0gV@%@@So==Ys8UJs>yp z6i}aXG2U^Xo(XY7CyPORG*9+8Jj7#lAIvrjgm^~34sYii_tsXx2;SlfC6YbY4|qsG zUnmrCkTO#Zk=a+t^LUN!+bP0=p=0=v=*Hu|5e!+lcYH%qJd6#IR5berY2Kl!31vB( z^Im$-#z6BTlY)15L&;}fNM-5^?ihSqqZSYb^+g){AX{6kesXuhlU6gf9>U zAt(5FnFXP%xX&qu-*^c^-YODG>y)-n|ClsbQZbKb4oW#>%kP*4nA9 zTJR~?NJKi^TPVTgZ#Hq5KPJU%DF=Dh3z7RVC6Buwp_~dVBK;FLKcRly;V*gG z{V*cwbHnj|>UnX7BcEC#^5MFu1o@ag%7^hSolv_5?R6CL)Z=O*(jUe6&%1gce*);K z&*t=+DY;_GAziB%q`QJN@@KxR$2QT2g-3`;=St$wJ@0xT^SgK}TW9RlNw z5B<&VK(8eIvisplmXCT6t)3t^Ni^$){P{v_2heLpHxtn=W|!da6@38_=?@XXKO*`% z(Km~}L-ePGUlPIuy^`O1-t)ksFRC7(*D{5#Ccff%mx&JAYYJ(|%@(p=nSYbe^nBIT zV+oM`hG=>s9_@wkZjS$<3B8R-xDBTDbB^s)9wKD(IyZ#=AAoIV-hQQ^CV zw+MrFvikV3=Y5&{zp5U9kCFbf=Y5y>lIP*k$~heC$&x>zTtw(Mf%r$*6Y;;$zlpy< z|0W{cO+-X)A|jm@@y{nBpEe@mbrOF8`zInE&n8%pCCnH7YdjIdf3CtiiQxB(zC?IE5qf-3bdcZwW-lu# zALNI8S`>e;uvd6g_z@!N)$HR9&-(&t;6uWxY+s}^S6DAxDYW)yKB8#{l)ni`d$9V3 zK2w+;(CX(!`MqDLUQmB#->5&+7jk2Sqi2v}s z3y8?~GUA^+?{4C2s#kO_=FfU5A|IP(F(Q73v6P6+CJ|qd-C?I~F6gZMOY-AzR@T3m z7_O-$k?i;x*xhRIneHYc(%S`OI%f&b6P(r zLT+Y(9Qy^+4Z?$Xg*5djdcckAMGtXr2sChxWuy5?sHuTl7E!p*|%LM!J( zc#TMOpD-i5On8;>eM0s-=Ko3IJ;E;t9~ORFNPD6@hCV~SXheDv?FM+Nko)nZKOp?L z@bkilgx?cBEBsI4Uxg7=Ak!%oP8QA;E*7pA?hu|U>=F(Mxo^(&t`~COob;!K_X!^n zJ}G=b_=@oFLhgezez|a(aK3Q4aHEj>-jv@f>=9lhyh?bJ@OI(d!Uu%k5xyXNSr{pH z>2v>@`Ainh6)qO87w!u2`?9Nf4T_ieOUNu;eEnKgii`z5WXV(yAVIc;Oa}r zedr>jJ72h5xKY?D+$-!6UL?Fqc$4sU;oZUqgpUcI622sSRrrQ*1Ue}78876%GU;03 zD&ZF4nZgd?K_T~(8Se(+ZNfW+UlBeg{E6^a!lhViG5$8;*}{FojPO$7yM-STep2{F z;lsl33!fMMPWU%r6poJhmI+T5&J!*bHVStN&lesL9u{69e6R4B@J`|V!bgQa622(> zgYX~1VI!P=mBK1vweU3ICgE;jo3KxKvG5w<&BBig?-hPk_#eWjg})O1m+;@hkr*3T ze-njsgo}j@!kxl|ut)ed;Wfhd3;&Ps^TKZkzc2im@D<^I3x|z#`iv9K5Y`FT2)7B( z5q1d=39k^|D7;;GkMOI)$A!-b|5NyyFp3Et>u0QRns9;eG~s69nZlHCKzOO}J;DzQ zKO?+f_-)}+!e0viOZcX6^k}EoWZ@~orNRxuR$)@uCw#l`ox%?YKOy|0@SDOXg+CYm zLHJMM2uze%PbUdy2^R|233mw36CMy=D7;GeKH*1&pA~*x_&wos!ruvB7vk4SO`i&3 zm9R#*O1M?HN4QVeQ|97dF1%j&Vd1BR_X!^nJ}G=b_=@oFLi`?>=~XVACY&!^F5D<= z748-G2rm*|CA>*^yYOz|1H#9IPYGWVzAAh}IHKI?H(oeHSSMT~+$KCn*d;t9yh3=R z@OI%n!aoS36)wLr;mN{z!llAS;ZEWC!UMv?!YhRD6&@4bDZF3!sPIR^7lnTi{zEtn z6Jy$SrLam^Ej&%QNw{0sChQYlEWAc|v+$$Bdxc*W{)g~s;je{%5k@cpr(R=(Cksy% zE*G9I+%0Su9u&Sq_%7jxgr5@LC;XQ1N5WqSUlsmKI2#LL>a|w5QP?DG5$+Kl5FQjB z5?&>|NqD>PZs7yM$AnJ_e<}RC&_BuPvqab+Y!;p;yg+zJcvN_U@H4_M3m+9eFZ`YG zZ$f_1i1kn|j0@KY_Xrchl<O+{!v&r+2yxU*ecvB>=9lhyh?bJ@OI(d!Uu$p37-jL33rLVm-q?K>l6Jpg}+01RN?Pd_y>s}^Sn=q{vr|S z-Y@)`!XH!kkBPT?-Y-SJN`(Ahgnt*mc&g(M7mg+(-bqB1ZwB!;>@SL5O+-5Dg{O<( zD*8;}xy0MBk4!{5Y2t@G?^5AA#eYBX7VLkC{u~kMe@Xa&!oQ{PCyDR#ycb3Po(TCr z313tAn+hK`4dL&FpCLkzNyPVf-YKFN6A^#8aJBebL~j?i5)tn_g{O$ud0s~JQQ>vO zYdr5mqCX@2Jn>5G=ZSuTh5ndzwsPInV zw}ihC{#7`9mP>E4aH(*s@OM z75`1)m^m)~G+~W!jc|wXJmCQ%%6(M$Vd0mA-xvN)7@h0nrwD6=>xH|8UBb5uZx-Go z{EqN>;j6-;Q(XGvgr^7_gu95SpS{FxjLV|mMnrqPL--!yjlx@qi1$h1mxX^+_@9N* zc`lt{!cj!Tn;?3MuuA*|qU(g~gd2ogh|sfLc(L#b;cddt3Lh8#T=;k4s8d}!ap7{| zHsKkc&pX7TS3{c+)E#J^AU1Hy;I|Gw}A;j2XW!J_#t{g`kh z5&SYD^qC@lTsTYoI?;=T8-$yM+leSgQkWLLS9muO>3@mX>3QEGBHy19QQqf;zYza7 zM9BYH{J#nRNksfH3mi@m&JfNQE+HcRdSZv??G&999u!_Gyg_(Oc$e@2;dg{j5uxuh z!WYDUS@a);e-Zyp(a~xbZ#WTpRf?Vdf-A>ot4UkhIomex4=Il{HVR$;gB3gKnME)}j7whB9i z7YW}jJVr!0K0!Pm{zCM_M3n1M;p5^zE&4g(i{k%Y^q+*Ui62?y((#2QMC3PK^d#Xl z@lO?9BU~$N6mBLW{%+BGgck^Vg#$#$9TmP$_;KN5!e@jp6JZyB5na3(H0oo5uvOS4 ze7o>U;d_K15q?GZW8oi#BbK;y=LuH{n}zMdA>lQ`4+}pld`kGL@bALNQkQ;-utGRT z*eu*5#IIUeId3GQzCJ`e2X;V2`+r6Fb%j4J`uoBcg})O1j)-(#6aC-95zAb9qlM)} z$i<1M_gSLr6uwxvLi~-Qw+MF-q33?#rNWzpcL^UMBA*`+_jumVMZZEs`Cb+NReW!` z;};7@5D|Zz=!wF)!ui5FBIH(yUMJirev9Zcgy#@Z?tal3;oFIO@E(isM)BV-{D|;l z!h48&@SY11>3u`|Zwa3e{!sV~5qkcDcqZ1jqWQuU`DH}#PZ6#c?iQwqkn17t^1O>h zUnjg(c&G3|BIKSD{!uvWG{>(J&J(T@HVgL>k>7q|3&vF<+U+Xgbqc>l^sU0%#lK7R zXN3<79~C}MMEXyQeopu&@%bXG)r&ArgdWRp$A!-c|5M?w2>&Gh8=}3nP9L8LJ*NumgjE2D;=y_ii{T(9o`kwHI;=dsJ zCE;(y|0@x9w9%zkA)G-(JuV?4y%oZ>M9A+X-i39#=x*WVMCkQSBHHR^(YFy{lXnU4 z6aSmUm7e#6=x2!-d;UU1zOM`45I?p7e55}?I9pgx#N2Y7=xs#A-zhvp{5H{@!nY9- z?>)j#3BM|QTKJ0a-@;+2bHEBIcf@~6^fSU2#D9edz5Xg19~rm&iiIPH(5IXT z{icdPU3jX(YlR!c-z;nqo*_J!i1d1ehlxn{C~*qfLG=5H6X733e~yTH_>%Ae@xLwl zap4cde_r&9!e5L3nsDqUm)NHFZ`wO4I=U>ZUWBpyb2=dD&Ybm@~;yv5x+s$Eq=f7QsEWCYl%qj1Hz9B zKQH_`5$S(Z_!tp-JSlud_*bF7&80V%Sb=&FT}`|T`#(hZiPMQlcdM|O2>A7k|6x7U7xVw~O8<>=ys9=!=DyivKRrHwbSgBL9yl{7&L%&wD`hw~5gEap9BV zKToXkyjMj3P2v9#zNzqWJ6!yU!f8arJB5gPsU?oY^i|j*ObHJQ-zmIJ_*vm2!l#8V z3;!i7!`ztZ&k!yVZWf*^>=Rxld@m9DJxIjf#P^A)haU-_7ylQ+Ka2l2;XlQX?R4ps z2+M`zg;Ryoh4X~f!X?5L!u7(9!tFwQjkxK1w(xvmr|<${S~w)UM0lC-TH(8eHw!-~ zyhHeL;oZW|3GWwvRrs**QQ;H99}1rpz99UK@MYnjg?|(NTgWvm+h?S3jPNAkWZ?|q z9AS-cp|IFPI-l0(dVv@UjGiPsmG}vLUIe(7^vB%ikBGZT-|pcXTpV5?>=j-}ybtpR z;myR`+~>21cZvS2@c$|9{==)N?mUj)NEB48sGy+8UTmzW`H85(f8qUjs)S61)eVV9*+JMk~}o>b~1^zYjE z`w@fjAMn$78kXYO_*uLJFUNX&OYZqY+fMpM{3?D8@5S%nBeq{E6+NFKH;{e`pT(cy zc6=TGi2s56Fm+Ha?jYNx?}g)VJQ<6z9LMANIL*%1^K@8?^>~x*(0w+%4Zn^{aT)%= z-k|Si;N!Rfx8gSZ4gMD2$G>2zPcB{|4#FW=iX-t{{2X3@7vl`9!8v#n-idePYO6;4 z1AG)8$0uJ%^+Dyi59h+=nTho4MWw*+#WbOk)wAj%9d0UVv3N6|ci) zoP~36F)qPx;e8lAzoYUzO8TexB>o!xJ5et8TlgnD?2z2}PvLOep!0q##^|{ojh{q1 zdag(5OG#gW*JBIbh;wlVYt9U!!iQmHeFnWGTu>>n{G>*k8oQl(NCf+ui;zx zCoDWHw|xEZNIV9Ma0HIVu~=oltnaPiH5ffFrSY>!&%rKSh~L5cF?xPV@B2RK==mw7 zpC!Eox8kqyH@FLTV;`NPyL{2}Rq|7$kH(YnR4m6)cmYPwUFrQ-kiHscVlB?a`FJbd zfp_D*ct8FV{@7ll@BiXP+>Ec_YxoCz3-_Uaki>EN;^8<9Pr_3%dag_PCy~AoFT*SG zOPImyuo-W}xp*hujo-%a;&b?O{1yH?{uZO>!BoDtNxy@C#t-pGea7^Czhm%t9EKyX z7|+8Acp-iPYq1`q=g1VlopkgZnbLQWz8AlP58#9NIBvk7<1g`b+=1`oU$FnDa?3XW zqvy^v{}V`;U(aZnXN$(uz0YT>J(`&!s8fa?&gCaom8L@L7zWQ`7r? zOZrWG8$ZH=BXi|A6pz5@`89p!J=tkljO929FT_jn3cMa$a5jDg@5H??4Y{DCG4&H=Ia49aw6}aABpzAyM3_gdi;v2XVcj3Xhmgx5% zipSt_n8qS3!3sPF&&A8}DvX{VRQzhvb8$Z2YbWVC0zQBb;v@JNZosGTCESj0;@kKx zzK{FRKV0Ma4zUwbsT1*JJQYXUwfa6K=}CAA<1?hQ*v$9^q;JI~jDOgU)_p|WWY5s~ z25!NvxC3`$;UMKN*L5C@o=a5v7}C-6iAoPAJpzkyERM(Mc}3kHy4q@XH>kWNk4Q21iaD?(eFfI2D3O9 z=i@DSJFdW0xX%7i*MUesh0ikn1&p4L)O`QQ^bZ){?>N2x6kSKhWAHdE!3wOzF*p^c z;S8+77Hr3_+Y;T!#$~u1AGIpmh}vg28&fK3gA*{c!+(8c)Ge9Ep>0 z3SN#^VLRT4U&n9Ya$JEA;Tl|r>+u)(Z@9yrrt6XTpZFdgqIKx$hv88;2v5P&aSV>b z%dPe~SK$n-!4B-iJL~|R-{HL&J@2XUYe`4Xdn)~}q@TtY@nw7+ci;!MD3$svM$dsN zeTXg;d;Bmw2~Wim9EFuwg;VhwoPp7Eq>6hT>F7C9r5BRE1Mk9>xEeRuBlJBYd=`I( zZ`k3f)E{sc?#2)CV;posF8>f5jwfR=mg8s~i&xsSv_HWNX0Zj^F?ya=`EMp2J%Z~+tpfr`>>W3k;Rr0oN?V@$-B3G@^hB((T2HQWI}N8}z18|sRYta=sxV4-Sp`{$ zi%?Y)jaL;!F2@zP3fEe#-*vbipTLc{8Mop#dK8{~F;?1I)h~|2i8vXjU=>cqnOKYU*odvzfnB%|7vW-Df=e-K zuPWbi(hpf}Cu?vmuEUME8K1{3xD~fy)SeYDy3Zwddc3y3UAPWTnSsPQ)s!{pM7R?vM53{+OKU@!F3@_sL{*pG^DH zMvs@Rc7UD>#!jp4a~^hC?PnL_B0EIi|G_18sDA$uqx)*wUY9#9SJ>gH)GB<)7HR$9 zTC4r?I$UqHe|`ctTJ5JdQiv#Qhdd>?6TkTJVV%q9BP=q6FmDVqoTOAihVWpj_ z^^N1KjuR7cveo`%3RYR|52oTYtL=I^&a@e=f2_CKUK+90s$F+rr&YV1hh0`X$A!4a z>UgslmslNlmf|w2cDo!`SRIE};X`(g)<3Sb^R)hPy}eoMA2(XH|IPTkU7+=kTkS1c z|M-%bSNC_gWp__Ms0{KF$?lKda+ie;i=%*ZRl7_5rPb zOxsmj{}}!LppJ*dPRnwu_4^?MHNKAP2@N{`@aJW<&$CqrZkPQA zOSQ+%R_*Xu)rs5R-|QUKv(Jmw-lkc#vm311*O4d41*z0U_7;5~z}}|sNm;d@vsI^V zH}kC8%L=P@@`6?S_|V>`-@83gsy%$ksvX>BSLyu8uGaG&_F=UbAFnrYzN>XtNqUUc zI#5+b(^W;${#%O}rCY7)a31L{tGZGVqUp=6+QmB3>#geMCDPli>S8bHeRe44p(;=R z0;Sb%imlS+b~xvmN>6cG?Wo==-DuUG7Ls0MPt*2J`XQ_K^*res@)ABJJBH(;@{e&^?Qt^Gr`YjYzoe&Iwa-q{^Q_wG64Fbp+Uq*f z>#f>tbX-yVZBDEG?qPa#e9+2Cdpp(iBCGa1ne-H^l{S-ftyTN(Bt6ew&HhsFU*_~R z?C+G`=(O5>w0}}M+COF3zbGB;U$h;JD^xzECt7U}^`slEwu{B2qu(o4<5@#`t<`q2 zmGm~N?PV|N==%^Is(F9e7 z3v_%Sy~1jHTSt1m)poa;bo6_r+WxkYe#vS(+)a9q)%KV=M5;W6R@>!Z(nGB_j_CUh znm)>DZKqS1US+kt){?Hb4`}-$-DOv4eUV;fwH>b^z1C`bPL;OLY3j&S%Z|33_2I9M zY-dNRv^LX`NtIT&x2Hsd{k@5y zZ>rvTLN8Ulr>N7JsK2V-Q|P%W*ZRV;T-F)&U)4Kz)Z@_pd9^mXJE!XX22ItHtDCC4 zlR}482b?&mEt~JHJ$+Q=eW!b?$~&RE->L&l4Sgc@TEbXAR(apr)1y`1$+^C*@=nU% zm{e_{zpMQ3s>#;`^{zw*S9#yu-PP6KnVP@;lHFhB4Un%Rth^cN607&L1GQDUwd(zb z?)BEaAMI|*^j{TQqj`I=O2ky2JY7@8f@p*4-K*99)AI%BRlZm+SFv{|`npOKPE(`3 zN$B_cyH+Mcszf9f3n7fA;f!CBjV-Tqj=>S=XhQ(p?nS&k2g^( zV4|jnA;eSj*e_nu$GLkyj(4K)ec#9Oz^$~^;&;8iM%Qr>w!ulAf%pu-+iFp1z zsE?oBLufC4-Xb1vs^WP$T|Rxh?v7WJi0A8+-WI|T$~PksuQnFX>m`)$)xIJ)DlPQ;t89YenLyD|}PvEq$T953(CSUf)mqJQ1{p;d~vSm`i? z<@IwT@%me*c%i)vQ|7R|ze~jP^|5paMm{HBOT^m|Ti!JJyuRIUin4Z>uS)T}9AOCM z`zR4_pW=n}dy+DT@)afGb!vh>UUm;5URwF$%iI5NJ^R0+SUf-95-;BXeV$EsN6XFE z$+3xe(-kk2&-=?zzHB01x#HF5iI+*lYgD|@UR*yR-uy(oWr{Z@PrSK_cncNJ_3!qg z%R$}ozMY8Y&-J0s99EN~;hsdi#j$waoF3 zQq4EC(=z1`^L-@|&({;i<%#F*HNJlRe8i+!K244WUtfy1m(7}QSid8cBh2?0ZC~+t zzf!#T`VH}pRK9q;ZHiZ^I9?wYALUhr#(g6er^KS1H`?9nbsA5bq0# zcxg3)`2HZ2@4`g9Rf?A;p352HU6+XG=MA=LdKf~yx5pPUEu5T^JbNdhR+%HjlefVHM(E%7j`M#Tow@~rY%Hw$F>J{QWk%%`@ z@#5QCh_^kF&)@rBqc~v*%i;SW@piCE^9}8JyfTOR{xuP=_;A&W7mOjq`ydf-o8s+N z9xulPy+XWW^+&v3*7VnLD^I+ml`metE$TDvb>f{Li&vJ2=kI41#^Qx~IXw|?O`n49 z^SaN+;!R1!8>ssZ@p{(eXqcRcH%2oJ^>;xmUN#Z0O7R+rVM4r2B3`57r8V94cM(*zN2)lI8VH%6YJ4*Zac>VeNyjwyr@;P~g^6giDiZ@Q<9q$UgLcEehyxoddtm$EJJ`blR z;%!m9&|Y*KpgW$Q8;qB4s20}exnT&)>-&50^6gW+!OGxgU{GCdUl% zzLE z6^0P+xtBcUXqc#czPA^KP|w%r$rq+MZ}@vI z^Nq*Lx84?$FYK2ZHQ(?a$8%kH_+BDktMb+6CPn{;`MQ6<@E%XtrhK2htS4ib_Akm8 zufOf8zi~Rj_Wo+FUXJJb*p!HOWP_fm4>QyB5buRVz71-0Kla5rhLF$w4aVm?^c?jK zdt7e5H!E+L@9z@vT5i+CP)YhT#Ct6fZ^xwt(RVDp99?>ac<(3UDZ{ut%kgd^-ZuT9 zL|WqXB(N9T~Z~Jtem#6`{e2er7 z<*QUajcyI^-~IbspV1*5meti(zVo4TqQx4&Sue-)_UAf@xASf9>)M3sISe75 z-nw7DH8b`3LuCm=$X7OUR60IXoHcsn$kAtC zpE9YSAVhLKkBI6z%!2~>CzLgeNFA;ZH>IUzxqnslb0+Abc1v?vd&{i0nrvBXrg27f z^^DrK*)wXhb(vX>9qpwxsn37miu8ohqg9sDGfFGcBg;otlvk?EBXl7=n`zIUnl5Ro zX`MB;rln1{07{xhDcw;&tEpNxHgt3}W=pcowGEkOrRy47G94wE>V~oHEp;7rtsbSf z*0s(aRnp#CQd@DB#$?)R>c?ivTYh!H>Y=H<_WH6ZzT4H-kZmu!Y*I^E3GI$^}tn_8egIH zlgX-PQU#~z&x6lCzvSZ7AxHGR_|St6JLKrXfdzvKj_WhHU`WC71t$~?EA&Ow#1J1- zn0i-N3wnk=`?m@;i+D?SJB_z!r`_6nhCZp-0Y#(xbYG3j<>`~s29Uq`{I9-N!Tp*8 z-h25!-fBtxf8A^G=ZpAy$!&){^%|!6{MdhoeW>$Y6ecpw$qD=&^3B)CeEZNT%BMBj yz0dPCUSER>LkMl-Ey4E+mS~*!aef_WpSM_V(xI<=2=S8pyp_r~y*pP=UHmty%~^&3 From 64b20558e90a385f437beb34e5d47f559eb28470 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Wed, 23 Aug 2023 11:20:29 -0500 Subject: [PATCH 24/35] fixed bug for selection of tx powers --- Examples/MAX32655/BLE_fcc/main.c | 130 ++++++++++++++++++++----------- Examples/MAX32690/BLE_fcc/main.c | 125 +++++++++++++++++++---------- 2 files changed, 167 insertions(+), 88 deletions(-) diff --git a/Examples/MAX32655/BLE_fcc/main.c b/Examples/MAX32655/BLE_fcc/main.c index 8bdd88bd62..cf6e63b550 100644 --- a/Examples/MAX32655/BLE_fcc/main.c +++ b/Examples/MAX32655/BLE_fcc/main.c @@ -22,6 +22,7 @@ /*************************************************************************************************/ #include +#include #include #include "ll_init_api.h" #include "chci_tr.h" @@ -37,8 +38,8 @@ #include "bb_ble_sniffer_api.h" #include "pal_bb.h" #include "pal_cfg.h" +#include "pal_radio.h" #include "tmr.h" - /************************************************************************************************** Definitions **************************************************************************************************/ @@ -47,7 +48,13 @@ #define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U #define FREQ_HOP_PERIOD_US 20000 +typedef enum +{ + PAL_BB_CW, + PAL_BB_PRBS9, + PAL_BB_PRBS15, +}PalBbDbbPrbsType_t; /************************************************************************************************** Global Variables **************************************************************************************************/ @@ -62,21 +69,19 @@ static uint8_t phy = LL_PHY_LE_1M; static uint8_t phy_str[16]; static uint8_t txFreqHopCh; + + static uint32_t numTxPowers; + static int8_t *txPowersAvailable; /************************************************************************************************** Functions **************************************************************************************************/ /*! \brief Physical layer functions. */ -// extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern void llc_api_tx_ldo_setup(void); -extern void dbb_seq_tx_enable(void); -extern void dbb_seq_tx_disable(void); extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnableCw(void); -extern void PalBbDbbDisableCw(void); +extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); +extern void PalBbDbbDisablePatternGen(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); @@ -142,6 +147,28 @@ void TMR2_IRQHandler(void) MXC_TMR_EnableInt(MXC_TMR2); } +/*************************************************************************************************/ +/*! + + * \brief Print all available TX Powers the radio is capable of. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +static void printAvailablePowers(void) +{ + + + uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; + + for(uint32_t i = 0; i < top; i++) + { + APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); + } + +} /*************************************************************************************************/ /*! * \fn Usage statement @@ -200,7 +227,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, 0xAA, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); cmd = 0; break; @@ -209,7 +236,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, 0xAA, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); cmd = 0; break; @@ -218,7 +245,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, 0xAA, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); cmd = 0; break; @@ -232,42 +259,31 @@ static void processConsoleRX(uint8_t rxByte) break; case '4': + PalBbEnable(); - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -10 dBm"); - APP_TRACE_INFO0(" 1: 0 dBm"); - APP_TRACE_INFO0(" 2: 4.5 dBm"); + if(param == 0) + { + printAvailablePowers(); break; } - - switch (param) { - case '0': - PalBbAfeSetTxPower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO0("Power set to -10 dBm"); - break; - case '1': - // llc_api_set_txpower(0); - PalBbAfeSetTxPower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO0("Power set to 0 dBm"); - break; - case '2': - // llc_api_set_txpower(4); - PalBbAfeSetTxPower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO0("Power set to 4.5 dBm"); - break; - default: + else if(param >= '0' && param <= '0' + numTxPowers) + { + PalBbAfeSetTxPower(txPowersAvailable[param - '0']); + LlSetAdvTxPower(txPowersAvailable[param - '0']); + APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); + + } + else if(param < '0' || param > '9' ) + { APP_TRACE_INFO0("Invalid selection"); - break; } + cmd = 0; param = 0; break; case '5': + PalBbEnable(); if (param == 0) { APP_TRACE_INFO0("Select transmit channel"); APP_TRACE_INFO0(" 0: 0"); @@ -296,14 +312,12 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); - PalBbEnable(); - // llc_api_tx_ldo_setup(); + - /* Enable constant TX */ - // dbb_seq_tx_enable(); + /* Enable constant TX */ PalBbAfeTxSetup(); - PalBbDbbEnableCw(); + PalBbDbbEnablePatternGen(PAL_BB_CW); cmd = 0; param = 0; @@ -313,9 +327,9 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ - // dbb_seq_tx_disable(); + PalBbAfeTxDone(); - PalBbDbbDisableCw(); + PalBbDbbDisablePatternGen(); PalBbDisable(); cmd = 0; @@ -365,7 +379,6 @@ static void processConsoleRX(uint8_t rxByte) MXC_TMR_EnableInt(MXC_TMR2); cmd = 0; break; - case 'E': case 'e': @@ -400,7 +413,6 @@ static void mainLoadConfiguration(void) LlGetDefaultRunTimeCfg(&mainLlRtCfg); PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - /* Set 5.1 requirements. */ mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; @@ -415,6 +427,30 @@ static void mainLoadConfiguration(void) HCI_CLOCK_20PPM */ mainBbRtCfg.clkPpm = 20; + + + + +} +/*************************************************************************************************/ +/*! + * \brief Initialize Tx Powers Available for use + */ +/*************************************************************************************************/ +static void mainInitTxPowers(void) +{ + numTxPowers = PalRadioGetNumAvailableTxPowers(); + txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); + + if(txPowersAvailable == NULL) + { + APP_TRACE_ERR0("Failed to get number of available TX powers."); + APP_TRACE_ERR0("Malloc returned NULL"); + } + + + numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); + } /*************************************************************************************************/ @@ -504,6 +540,7 @@ int main(void) mainLoadConfiguration(); mainWsfInit(); + mainInitTxPowers(); #if (WSF_TRACE_ENABLED == TRUE) WsfCsEnter(); @@ -535,6 +572,7 @@ int main(void) /* Register the UART RX request */ WsfBufIoUartRegister(processConsoleRX); + printUsage(); diff --git a/Examples/MAX32690/BLE_fcc/main.c b/Examples/MAX32690/BLE_fcc/main.c index aafaac8601..584ee84b76 100644 --- a/Examples/MAX32690/BLE_fcc/main.c +++ b/Examples/MAX32690/BLE_fcc/main.c @@ -23,6 +23,7 @@ #include #include +#include #include "ll_init_api.h" #include "chci_tr.h" #include "lhci_api.h" @@ -37,6 +38,7 @@ #include "bb_ble_sniffer_api.h" #include "pal_bb.h" #include "pal_cfg.h" +#include "pal_radio.h" #include "tmr.h" /************************************************************************************************** @@ -48,6 +50,14 @@ #define FREQ_HOP_PERIOD_US 20000 +typedef enum +{ + PAL_BB_CW, + PAL_BB_PRBS9, + PAL_BB_PRBS15, + +}PalBbDbbPrbsType_t; + /************************************************************************************************** Global Variables **************************************************************************************************/ @@ -61,24 +71,21 @@ static LlRtCfg_t mainLlRtCfg; static uint8_t phy = LL_PHY_LE_1M; static uint8_t phy_str[16]; static uint8_t txFreqHopCh; +static uint32_t numTxPowers; +static int8_t *txPowersAvailable; /************************************************************************************************** Functions **************************************************************************************************/ -/*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern void llc_api_tx_ldo_setup(void); -extern void dbb_seq_tx_enable(void); -extern void dbb_seq_tx_disable(void); extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnableCw(void); -extern void PalBbDbbDisableCw(void); +extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); +extern void PalBbDbbDisablePatternGen(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); +extern void PalBbSeqTxEnable(void); /*************************************************************************************************/ /*! @@ -141,7 +148,28 @@ void TMR2_IRQHandler(void) MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); MXC_TMR_EnableInt(MXC_TMR2); } +/*************************************************************************************************/ +/*! + * \brief Print all available TX Powers the radio is capable of. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +static void printAvailablePowers(void) +{ + + + uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; + + for(uint32_t i = 0; i < top; i++) + { + APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); + } + +} /*************************************************************************************************/ /*! * \fn Usage statement @@ -232,40 +260,36 @@ static void processConsoleRX(uint8_t rxByte) break; case '4': - - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -10 dBm"); - APP_TRACE_INFO0(" 1: 0 dBm"); - APP_TRACE_INFO0(" 2: 4.5 dBm"); + + PalBbEnable(); + + if(param == 0) + { + printAvailablePowers(); break; } - - switch (param) { - case '0': - PalBbAfeSetTxPower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO0("Power set to -10 dBm"); - break; - case '1': - PalBbAfeSetTxPower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO0("Power set to 0 dBm"); - break; - case '2': - PalBbAfeSetTxPower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO0("Power set to 4.5 dBm"); - break; - default: + else if(param >= '0' && param <= '0' + numTxPowers) + { + PalBbAfeSetTxPower(txPowersAvailable[param - '0']); + LlSetAdvTxPower(txPowersAvailable[param - '0']); + APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); + + } + else if(param < '0' || param > '9' ) + { APP_TRACE_INFO0("Invalid selection"); - break; } + + PalBbDisable(); + cmd = 0; param = 0; + break; + case '5': + PalBbEnable(); if (param == 0) { APP_TRACE_INFO0("Select transmit channel"); APP_TRACE_INFO0(" 0: 0"); @@ -294,26 +318,24 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); - PalBbEnable(); - // llc_api_tx_ldo_setup(); + - /* Enable constant TX */ - // dbb_seq_tx_enable(); + /* Enable constant TX */ PalBbAfeTxSetup(); - PalBbDbbEnableCw(); + + PalBbDbbEnablePatternGen(PAL_BB_CW); cmd = 0; param = 0; break; - case '6': APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ PalBbAfeTxDone(); - PalBbDbbDisableCw(); - // dbb_seq_tx_disable(); + PalBbDbbDisablePatternGen(); + PalBbDisable(); @@ -415,7 +437,26 @@ static void mainLoadConfiguration(void) */ mainBbRtCfg.clkPpm = 20; } +/*************************************************************************************************/ +/*! + * \brief Initialize Tx Powers Available for use + */ +/*************************************************************************************************/ +static void mainInitTxPowers(void) +{ + numTxPowers = PalRadioGetNumAvailableTxPowers(); + txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); + + if(txPowersAvailable == NULL) + { + APP_TRACE_ERR0("Failed to get number of available TX powers."); + APP_TRACE_ERR0("Malloc returned NULL"); + } + + numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); + +} /*************************************************************************************************/ /*! * \brief Initialize WSF. @@ -502,7 +543,7 @@ static bool_t mainCheckServiceTokens(void) int main(void) { uint32_t memUsed; - + mainInitTxPowers(); mainLoadConfiguration(); mainWsfInit(); From 6f5605b6ee1b079458feb70484fb074739b4ad04 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Wed, 23 Aug 2023 11:41:57 -0500 Subject: [PATCH 25/35] added api to get possible tx powers --- Libraries/Cordio/platform/include/pal_radio.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Libraries/Cordio/platform/include/pal_radio.h b/Libraries/Cordio/platform/include/pal_radio.h index bfea3badb3..9ea56ed31a 100644 --- a/Libraries/Cordio/platform/include/pal_radio.h +++ b/Libraries/Cordio/platform/include/pal_radio.h @@ -128,6 +128,17 @@ void PalRadioReadRfPathComp(int16_t *pTxPathComp, int16_t *pRxPathComp); /*************************************************************************************************/ int8_t PalRadioGetRxRfPathComp(void); +/*************************************************************************************************/ +/*! + * \brief Get available TX Powers. + * \param txPowers Return buffer for available TX powers + * \param size Return buffer for length of txPowers array + * \return Number of available TX Powers + */ +/*************************************************************************************************/ +uint8_t PalRadioGetAvailableTxPowers(int8_t *txPowers, uint8_t size); +uint32_t PalRadioGetNumAvailableTxPowers(void); + /*! \} */ /* PAL_RADIO */ #ifdef __cplusplus From f3fe2c4056a77665d5efc1399be07644df2762ad Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Wed, 23 Aug 2023 16:49:17 +0000 Subject: [PATCH 26/35] clang-format bot reformatting. --- Examples/MAX32655/BLE_fcc/main.c | 58 ++++++------------ Examples/MAX32690/BLE_fcc/main.c | 59 +++++++------------ .../PeriphDrivers/Source/AFE/hart_uart.c | 6 +- 3 files changed, 41 insertions(+), 82 deletions(-) diff --git a/Examples/MAX32655/BLE_fcc/main.c b/Examples/MAX32655/BLE_fcc/main.c index cf6e63b550..d043284ef1 100644 --- a/Examples/MAX32655/BLE_fcc/main.c +++ b/Examples/MAX32655/BLE_fcc/main.c @@ -48,13 +48,12 @@ #define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U #define FREQ_HOP_PERIOD_US 20000 -typedef enum -{ - PAL_BB_CW, - PAL_BB_PRBS9, - PAL_BB_PRBS15, +typedef enum { + PAL_BB_CW, + PAL_BB_PRBS9, + PAL_BB_PRBS15, -}PalBbDbbPrbsType_t; +} PalBbDbbPrbsType_t; /************************************************************************************************** Global Variables **************************************************************************************************/ @@ -69,9 +68,8 @@ static uint8_t phy = LL_PHY_LE_1M; static uint8_t phy_str[16]; static uint8_t txFreqHopCh; - - static uint32_t numTxPowers; - static int8_t *txPowersAvailable; +static uint32_t numTxPowers; +static int8_t *txPowersAvailable; /************************************************************************************************** Functions **************************************************************************************************/ @@ -80,8 +78,8 @@ static uint8_t txFreqHopCh; extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); -extern void PalBbDbbDisablePatternGen(void); +extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); +extern void PalBbDbbDisablePatternGen(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); @@ -159,15 +157,11 @@ void TMR2_IRQHandler(void) /*************************************************************************************************/ static void printAvailablePowers(void) { - - uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; - for(uint32_t i = 0; i < top; i++) - { + for (uint32_t i = 0; i < top; i++) { APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); } - } /*************************************************************************************************/ /*! @@ -261,20 +255,15 @@ static void processConsoleRX(uint8_t rxByte) case '4': PalBbEnable(); - if(param == 0) - { + if (param == 0) { printAvailablePowers(); break; - } - else if(param >= '0' && param <= '0' + numTxPowers) - { + } else if (param >= '0' && param <= '0' + numTxPowers) { PalBbAfeSetTxPower(txPowersAvailable[param - '0']); LlSetAdvTxPower(txPowersAvailable[param - '0']); APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); - - } - else if(param < '0' || param > '9' ) - { + + } else if (param < '0' || param > '9') { APP_TRACE_INFO0("Invalid selection"); } @@ -312,10 +301,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); - - - - /* Enable constant TX */ + /* Enable constant TX */ PalBbAfeTxSetup(); PalBbDbbEnablePatternGen(PAL_BB_CW); @@ -327,7 +313,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Disabling TX"); /* Disable constant TX */ - + PalBbAfeTxDone(); PalBbDbbDisablePatternGen(); PalBbDisable(); @@ -427,10 +413,6 @@ static void mainLoadConfiguration(void) HCI_CLOCK_20PPM */ mainBbRtCfg.clkPpm = 20; - - - - } /*************************************************************************************************/ /*! @@ -439,18 +421,15 @@ static void mainLoadConfiguration(void) /*************************************************************************************************/ static void mainInitTxPowers(void) { - numTxPowers = PalRadioGetNumAvailableTxPowers(); + numTxPowers = PalRadioGetNumAvailableTxPowers(); txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); - if(txPowersAvailable == NULL) - { + if (txPowersAvailable == NULL) { APP_TRACE_ERR0("Failed to get number of available TX powers."); APP_TRACE_ERR0("Malloc returned NULL"); } - numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); - } /*************************************************************************************************/ @@ -572,7 +551,6 @@ int main(void) /* Register the UART RX request */ WsfBufIoUartRegister(processConsoleRX); - printUsage(); diff --git a/Examples/MAX32690/BLE_fcc/main.c b/Examples/MAX32690/BLE_fcc/main.c index 584ee84b76..c0aa016340 100644 --- a/Examples/MAX32690/BLE_fcc/main.c +++ b/Examples/MAX32690/BLE_fcc/main.c @@ -50,13 +50,12 @@ #define FREQ_HOP_PERIOD_US 20000 -typedef enum -{ - PAL_BB_CW, - PAL_BB_PRBS9, - PAL_BB_PRBS15, +typedef enum { + PAL_BB_CW, + PAL_BB_PRBS9, + PAL_BB_PRBS15, -}PalBbDbbPrbsType_t; +} PalBbDbbPrbsType_t; /************************************************************************************************** Global Variables @@ -71,18 +70,17 @@ static LlRtCfg_t mainLlRtCfg; static uint8_t phy = LL_PHY_LE_1M; static uint8_t phy_str[16]; static uint8_t txFreqHopCh; -static uint32_t numTxPowers; -static int8_t *txPowersAvailable; +static uint32_t numTxPowers; +static int8_t *txPowersAvailable; /************************************************************************************************** Functions **************************************************************************************************/ - extern bool_t PalBbAfeSetTxPower(int8_t txPower); extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); -extern void PalBbDbbDisablePatternGen(void); +extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); +extern void PalBbDbbDisablePatternGen(void); extern bool_t PalBbAfeTxSetup(void); extern bool_t PalBbAfeTxDone(void); extern void PalBbSeqTxEnable(void); @@ -160,15 +158,11 @@ void TMR2_IRQHandler(void) /*************************************************************************************************/ static void printAvailablePowers(void) { - - uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; - for(uint32_t i = 0; i < top; i++) - { + for (uint32_t i = 0; i < top; i++) { APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); } - } /*************************************************************************************************/ /*! @@ -260,34 +254,28 @@ static void processConsoleRX(uint8_t rxByte) break; case '4': - + PalBbEnable(); - - if(param == 0) - { + + if (param == 0) { printAvailablePowers(); break; - } - else if(param >= '0' && param <= '0' + numTxPowers) - { + } else if (param >= '0' && param <= '0' + numTxPowers) { PalBbAfeSetTxPower(txPowersAvailable[param - '0']); LlSetAdvTxPower(txPowersAvailable[param - '0']); APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); - - } - else if(param < '0' || param > '9' ) - { + + } else if (param < '0' || param > '9') { APP_TRACE_INFO0("Invalid selection"); } PalBbDisable(); - + cmd = 0; param = 0; break; - case '5': PalBbEnable(); if (param == 0) { @@ -318,10 +306,7 @@ static void processConsoleRX(uint8_t rxByte) APP_TRACE_INFO0("Starting TX"); - - - - /* Enable constant TX */ + /* Enable constant TX */ PalBbAfeTxSetup(); PalBbDbbEnablePatternGen(PAL_BB_CW); @@ -335,7 +320,6 @@ static void processConsoleRX(uint8_t rxByte) /* Disable constant TX */ PalBbAfeTxDone(); PalBbDbbDisablePatternGen(); - PalBbDisable(); @@ -444,18 +428,15 @@ static void mainLoadConfiguration(void) /*************************************************************************************************/ static void mainInitTxPowers(void) { - numTxPowers = PalRadioGetNumAvailableTxPowers(); + numTxPowers = PalRadioGetNumAvailableTxPowers(); txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); - if(txPowersAvailable == NULL) - { + if (txPowersAvailable == NULL) { APP_TRACE_ERR0("Failed to get number of available TX powers."); APP_TRACE_ERR0("Malloc returned NULL"); } - numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); - } /*************************************************************************************************/ /*! diff --git a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c index 9fa7b19eae..8c0a1f6ef6 100644 --- a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c +++ b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c @@ -564,9 +564,9 @@ int hart_clock_enable(void) pPTG->intfl = 0x01; //enable ISO before enabling ERFO - MXC_GCR->btleldoctrl |= (MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN | - MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9| - MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9 ); + MXC_GCR->btleldoctrl |= + (MXC_F_GCR_BTLELDOCTRL_LDORFEN | MXC_F_GCR_BTLELDOCTRL_LDOBBEN | + MXC_S_GCR_BTLELDOCTRL_LDORFVSEL_0_9 | MXC_S_GCR_BTLELDOCTRL_LDOBBVSEL_0_9); MXC_GCR->clkctrl |= MXC_F_GCR_CLKCTRL_ISO_EN; From 9544b6ae8e86b896790095d53ab4f740fe839b00 Mon Sep 17 00:00:00 2001 From: Sihyung Woo <75494566+sihyung-maxim@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:47:49 -0500 Subject: [PATCH 27/35] Fix GetClockSource Settings for ME17 --- Libraries/PeriphDrivers/Source/UART/uart_me17.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me17.c b/Libraries/PeriphDrivers/Source/UART/uart_me17.c index 49308eef8a..c277ca7005 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me17.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me17.c @@ -320,9 +320,9 @@ mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) break; case 3: switch (clock_option) { - case 0: + case 2: return MXC_UART_IBRO_CLK; - case 1: + case 3: return MXC_UART_ERTCO_CLK; default: return E_BAD_STATE; From aaeb068d7c26e40240e0c4e9c2911ca211a14a66 Mon Sep 17 00:00:00 2001 From: Sihyung Woo <75494566+sihyung-maxim@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:48:16 -0500 Subject: [PATCH 28/35] Fix GetClockSource Settings for AI85 --- Libraries/PeriphDrivers/Source/UART/uart_ai85.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_ai85.c b/Libraries/PeriphDrivers/Source/UART/uart_ai85.c index d0e07fd820..a9af930da7 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_ai85.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_ai85.c @@ -301,9 +301,9 @@ mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) break; case 3: switch (clock_option) { - case 0: + case 2: return MXC_UART_IBRO_CLK; - case 1: + case 3: return MXC_UART_ERTCO_CLK; default: return E_BAD_STATE; From deaf8f043c027c80e58d65c122cccce278ebc94e Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:36:44 -0600 Subject: [PATCH 29/35] removed tools and cherry picked reg files --- Tools/Bluetooth/BLE_hci.py | 1471 ------------------------- Tools/Bluetooth/DBB.py | 500 --------- Tools/Bluetooth/README.md | 63 +- Tools/Bluetooth/RS_fsl3.py | 269 ----- Tools/Bluetooth/RS_fsl3_sweep.py | 108 -- Tools/Bluetooth/__init__.py | 0 Tools/Bluetooth/calibration_init.py | 258 ----- Tools/Bluetooth/conn_sweep.py | 467 -------- Tools/Bluetooth/dtm_plotter.py | 253 ----- Tools/Bluetooth/dtm_sweep.py | 253 ----- Tools/Bluetooth/dtm_sweep_vs.py | 322 ------ Tools/Bluetooth/dtm_sweep_vs_allCh.py | 439 -------- Tools/Bluetooth/mc_rf_sw.py | 307 ------ Tools/Bluetooth/mini_RCDAT_USB.py | 182 --- Tools/Bluetooth/py_requirements.txt | 4 - Tools/Bluetooth/rf_switch.py | 130 --- 16 files changed, 3 insertions(+), 5023 deletions(-) delete mode 100644 Tools/Bluetooth/BLE_hci.py delete mode 100644 Tools/Bluetooth/DBB.py delete mode 100644 Tools/Bluetooth/RS_fsl3.py delete mode 100644 Tools/Bluetooth/RS_fsl3_sweep.py delete mode 100644 Tools/Bluetooth/__init__.py delete mode 100644 Tools/Bluetooth/calibration_init.py delete mode 100755 Tools/Bluetooth/conn_sweep.py delete mode 100644 Tools/Bluetooth/dtm_plotter.py delete mode 100644 Tools/Bluetooth/dtm_sweep.py delete mode 100644 Tools/Bluetooth/dtm_sweep_vs.py delete mode 100644 Tools/Bluetooth/dtm_sweep_vs_allCh.py delete mode 100644 Tools/Bluetooth/mc_rf_sw.py delete mode 100644 Tools/Bluetooth/mini_RCDAT_USB.py delete mode 100644 Tools/Bluetooth/py_requirements.txt delete mode 100644 Tools/Bluetooth/rf_switch.py diff --git a/Tools/Bluetooth/BLE_hci.py b/Tools/Bluetooth/BLE_hci.py deleted file mode 100644 index 0250ad4416..0000000000 --- a/Tools/Bluetooth/BLE_hci.py +++ /dev/null @@ -1,1471 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## BLE_hci.py - # - # HCI Tool used to control a Bluetooth Controller through a serial port. - # - -import serial -import sys -import signal -import codecs -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import datetime -import struct -import threading -from termcolor import colored -import readline - - -# Setup the default serial port settings -defaultBaud=115200 -defaultSP="/dev/ttyUSB0" -defaultMonSP="" - -# Setup the default Bluetooth settings -defaultAdvInterval="0x60" -defaultScanInterval="0x100" - -defaultConnInterval="0x6" # 7.5 ms -defaultSupTimeout="0x64" # 1 s - -defaultDevAddr="00:11:22:33:44:55" -defaultInitAddr=defaultDevAddr - -# Magic value for the exit function to properly return -exitFuncMagic=999 - -## Convert integer to hex. - # - # Converts integer to hex with a given number of bits for sign extension. -################################################################################ -def tohex(val, nbits): - return hex((val + (1 << nbits)) % (1 << nbits)) - -## Parse BD address. - # - # Reverses a Bluetooth address to bytes, LSB first. -################################################################################ -def parseBdAddr(addr): - # Reorder the address - addr = addr.split(":") - if(len(addr) != 6): - print("Address is wrong length, needs to be 6 bytes separated by ':'") - return "" - addrBytes = addr[5]+addr[4]+addr[3]+addr[2]+addr[1]+addr[0] - return addrBytes - -## Parse register address. - # - # Reverses a hex number to bytes, LSB first. -################################################################################ -def parseAddr(addr, numNibbles=8): - # Make sure it's a hex number starting with 0x - if(addr[:2] != "0x"): - print("Address must be a hex number starting with 0x") - - # Remove the 0x - addr = addr[2:] - - # Make sure this is a 32 bit address - if(len(addr) != numNibbles): - print("Address must be 32 bit hex number") - - # Split the address into bytes - chunks, chunk_size = len(addr), 2 - addrBytes = [ addr[i:i+chunk_size] for i in range(0, chunks, chunk_size) ] - - # Reverse the bytes to LSB first - - addrString = "" - for i in range (int(numNibbles/2)-1, -1, -1): - addrString = addrString + addrBytes[i] - - return addrString - -## Parse bytes string. - # - # Parses a string of 4 hex bytes, LSB first. Returns 32 bit int. -################################################################################ -def parseBytes32(byteString): - return int(byteString[3]+byteString[2]+byteString[1]+byteString[0], 16) - - -# Namespace class used to create function arguments similar to argparse -class Namespace: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - -class BLE_hci: - - port = serial.Serial() - serialPort = "" - - def __init__(self, args): - - try: - if "id" in vars(args).keys(): - self.id = args.id - else: - self.id = "-" - - # Open serial port - serialPort = args.serialPort - self.port = serial.Serial( - port=str(serialPort), - baudrate=args.baud, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - bytesize=serial.EIGHTBITS, - rtscts=False, - dsrdtr=False, - timeout=2.0 - ) - self.port.isOpen() - - if args.monPort == "": - self.mon_port = None - else: - mon_port = serial.Serial() - self.mon_port = serial.Serial( - port=str(args.monPort), - baudrate=args.baud, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - bytesize=serial.EIGHTBITS, - rtscts=False, - dsrdtr=False, - timeout=2.0 - ) - self.mon_port.isOpen() - - except serial.SerialException as err: - print(err) - sys.exit(1) - - except OverflowError as err: - print("baud rate exception, "+str(args.baud)+" is too large") - print(err) - sys.exit(1) - - if self.mon_port != None: - monTraceMsgThread = threading.Thread(target=self.monTraceMsg, daemon=True) - monTraceMsgThread.start() - - def closeListenDiscon(self): - # Close the listener thread if active - self.listenDisconThread - self.listenDisconStop - - if(self.listenDisconThread.is_alive()): - self.listenDisconStop = True - self.listenDisconThread.join() - - ## Exit function. - # - # Sends an exit code that is handled below. - ################################################################################ - def exitFunc(self, args): - - # Close the serial port - if self.port.is_open: - self.port.flush() - self.port.close() - - if self.mon_port is not None: - if self.mon_port.is_open: - self.mon_port.flush() - self.mon_port.close() - - print("") - - # Close the listener thread if active - self.closeListenDiscon() - - try: - if(args.returnVal != None): - sys.exit(int(args.returnVal)) - except AttributeError: - sys.exit(exitFuncMagic) - - sys.exit(exitFuncMagic) - - ## Wait for an HCI event. - # - # Waits for an HCI event, optionally prints the received event. - # Will timeout on the serial port if nothing arrives. - ################################################################################ - def wait_event(self, print_evt = True, timeout=6.0): - - # Set the serial port timeout - self.port.timeout=timeout - - # Receive the event - evt=self.port.read(size=1) - if(len(evt) == 0): - # TODO: Read flush - self.port.flush() - return "" - - evt=int(codecs.encode(evt, 'hex_codec'),16) - status_string = '%02X'%evt - - # ACL data - if(evt == 2): - # Receive the rest of the header - hdr = self.port.read(size=4) - packet_len = hdr[2] + (hdr[3] << 8) - hdr=int(codecs.encode(hdr, 'hex_codec'),16) - status_string+= '%08X'%hdr - - # HCI Event - elif(evt == 4): - # Receive the rest of the header - hdr = self.port.read(size=2) - packet_len = hdr[1] - hdr=int(codecs.encode(hdr, 'hex_codec'),16) - status_string+= '%04X'%hdr - - else: - print("Error: unknown evt = "+str(evt)) - return - - payload = self.port.read(size=packet_len) - - # Print the packet - if print_evt and len(payload) > 0: - for i in range(0, len(payload)): - status_string += '%02X'%payload[i] - - if self.id == "-": - print(str(datetime.datetime.now()) + " <", status_string) - else: - print(str(datetime.datetime.now()) + f" {self.id}<", status_string) - - return status_string - - ## Wait for HCI events. - # - # Waits to receive HCI events, prints the timestamp every 30 seconds. - ################################################################################ - def wait_events(self, seconds = 2, print_evt = True): - # Read events from the device for a few seconds - start_time = datetime.datetime.now() - delta = datetime.datetime.now() - start_time - while((delta.seconds < seconds) or (seconds == 0)): - self.wait_event(print_evt = print_evt, timeout=0.1) - delta = datetime.datetime.now() - start_time - if((delta.seconds > 30) and ((delta.seconds % 30) == 0)) : - print(str(datetime.datetime.now()) + " |") - - ## Send HCI command. - # - # Send a HCI command to the serial port. Will add a small delay and wait for - # and print an HCI event by default. - ################################################################################ - - def send_command(self, packet, resp=True, delay=0.01, print_cmd=True, timeout=6): - # Send the command and data - if(print_cmd): - if self.id == "-": - print(str(datetime.datetime.now()) + " >", packet) - else: - print(str(datetime.datetime.now()) + f" {self.id}>", packet) - - arr = bytearray.fromhex(packet) - - self.port.write(arr) - - sleep(0.2) # for better sync of controller status change and master/slave sync - - sleep(delay) - - if resp: - return self.wait_event(timeout=timeout) - - - ## Parse connection stats event. - # - # Parses a connection stats event and prints the results. - ################################################################################ - def parseConnStatsEvt(self, evt): - """ - Example: - 2023-01-04 12:41:48.018410 2> 01FDFF00 - 2023-01-04 12:41:48.029006 2< 040E2001FDFF00880000000100000000000000880000000000000000000A0016000700 - - rxDataOk : 136 - rxDataCRC : 1 - rxDataTO : 0 - txData : 136 - errTrans : 0 - PER : 0.73 % - - 2023-01-04 16:04:27.486935 1> 01FDFF00 - 2023-01-04 16:04:27.497405 1< 040E2001FDFF0000000000000000000000000000000000000000000000000000000000 - rxDataOk : 0 - rxDataCRC : 0 - rxDataTO : 0 - txData : 0 - errTrans : 0 - perMaster : 100.0 - - :param evt: - :return: per - """ - try: - # Offset into the event where the stats start, each stat is 32 bits, or - # 8 hex nibbles - i = 14 - rxDataOk = int(evt[6+i:8+i]+evt[4+i:6+i]+evt[2+i:4+i]+evt[0+i:2+i],16) - i += 8 - rxDataCRC = int(evt[6+i:8+i]+evt[4+i:6+i]+evt[2+i:4+i]+evt[0+i:2+i],16) - i += 8 - rxDataTO = int(evt[6+i:8+i]+evt[4+i:6+i]+evt[2+i:4+i]+evt[0+i:2+i],16) - i += 8 - txData = int(evt[6+i:8+i]+evt[4+i:6+i]+evt[2+i:4+i]+evt[0+i:2+i],16) - i += 8 - errTrans = int(evt[6+i:8+i]+evt[4+i:6+i]+evt[2+i:4+i]+evt[0+i:2+i],16) - except ValueError as err: - print(f'{self.id}: {evt}') - print(err) - return None - - print(f'{self.id}<') - print("rxDataOk : "+str(rxDataOk)) - print("rxDataCRC : "+str(rxDataCRC)) - print("rxDataTO : "+str(rxDataTO)) - print("txData : "+str(txData)) - print("errTrans : "+str(errTrans)) - - per = 100.0 - if (rxDataCRC+rxDataTO+rxDataOk) != 0: - per = round(float((rxDataCRC+rxDataTO)/(rxDataCRC+rxDataTO+rxDataOk))*100, 2) - print("PER : "+str(per)+" %") - - return per - - - ## Monitor the UART0 - # - # Listen for the trace message from the board UART0 - ################################################################################ - def monTraceMsg(self): - first = True - while True: - if self.mon_port is not None: - msg = self.mon_port.readline().decode("utf-8") - msg = msg.replace("\r\n", "") - if msg != "": - if first: - print(f'\n{str(datetime.datetime.now())} {self.id} {msg}') - first = False - else: - print(f'{str(datetime.datetime.now())} {self.id} {msg}') - - - ## Get connection stats. - # - # Send the command to get the connection stats, parse the return value, return the PER. - ################################################################################ - def connStatsFunc(self, args): - - per = None - retries = 5 - while((per == None) and (retries > 0)): - # Send the command to get the connection stats, save the event - statEvt = self.send_command("01FDFF00") - - if(retries != 5): - # Delay to clear pending events - self.wait_events(1) - - - # Parse the connection stats event - per = self.parseConnStatsEvt(statEvt) - - retries = retries - 1 - - if retries == 0 and per is None: - print(colored('Warning: Failed to get connection stats', 'yellow')) - - return per - - - ## Listen for disconnection events. - # - # Listen for events and print them to the terminal. Send command if we get a disconnect event. - ################################################################################ - def listenDiscon(self): - - # TODO: Add a way to cancel this - if(self.listenDisconCommand != ""): - self.send_command(listenDisconCommand) - - while(True): - evt = self.wait_event(timeout=0.1) - if(self.listenDisconStop): - sys.exit(1) - if("040504" in evt): - if(self.listenDisconCommand != ""): - self.send_command(listenDisconCommand) - # Thread used to listen for disconnection events - listenDisconThread = threading.Thread(target=listenDiscon) - listenDisconStop = False - listenDisconCommand = "" - - ## Set BD address command. - # - # Sets the public BD address for the device. - ################################################################################ - def addrFunc(self, args): - # Reorder the address - addrBytes = parseBdAddr(args.addr) - - # Send the vendor specific set address command - self.send_command("01F0FF06"+addrBytes) - - ## Start advertising function. - # - # Sends HCI commands to start advertising. - ################################################################################ - def advFunc(self, args): - if isinstance(args.stats, str): - #print(f'args.stats type: {type(args.stats)}, value: {args.stats}') - if args.stats.lower() == "true": - args.stats = True - else: - args.stats = False - - # Bogus address to use for commands, allows any peer to connect - peer_addr = "000000000000" - - # Setup the event masks - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01630C08FFFFFFFFFFFFFFFF") - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01012008FFFFFFFFFFFFFFFF") - - # Reset the connection stats - if(args.stats): - self.send_command("0102FF00") - - # Set default PHY to enable all PHYs - self.send_command("01312003"+"00"+"07"+"07") - - advType = "03" # Non connectable undirected advertising (ADV_NONCONN_IND) - if(args.connect == "True"): - advType = "00" # Connectable and scannable undirected advertising (ADV_IND) - - # Convert advertising interval string to int - advIntervalInt = int(args.interval, 16) - - # Convert int to 2 hex bytes, LSB first - advInterval = "%0.2X"%(advIntervalInt & 0xFF) - advInterval+= "%0.2X"%((advIntervalInt & 0xFF00) >> 8) - - # LeSetAdvParam(Advertising_Interval_Min=advInterval, - # Advertising_Interval_Max=advInterval, - # Advertising_Type=advType, - # Own_Address_Type=0 (public), - # Peer_Address_Type=0 (public), - # Peer_Address=peer_addr, - # Advertising_Channel_Map=7 (all 3 advertising channels), - # Advertising_Filter_Policy=0 (don't do any filtering)) - self.send_command("0106200F"+advInterval+advInterval+advType+"0000"+peer_addr+"0700") - - # Start advertising - connCommand = "010A200101" - - # Start a thread to listen for disconnection events and restart advertising - if(args.maintain == True): - global listenDisconCommand - global listenDisconStop - global listenDisconThread - - listenDisconThread = threading.Thread(target=listenDiscon) - listenDisconCommand = connCommand - listenDisconStop = False - - # Start the thread and wait for it to startup - listenDisconThread.start() - sleep(1) - - return - else: - self.send_command(connCommand) - - if(args.listen == "False"): - return - - # Listen for events indef - if(args.stats): - per = 100.0 - listenTime = int(args.listen) - while (listenTime > 0): - self.wait_events(10) - - # Send the command to get the connection stats, save the event - statEvt = self.send_command("01FDFF00") - - # Parse the connection stats event - per = self.parseConnStatsEvt(statEvt) - - listenTime = listenTime - 10 - - return per - - # Listen for events for a few seconds - if(args.listen != "True"): - self.wait_events(int(args.listen)) - return - else: - while True: - self.wait_events(0) - - - ## Start scanning function. - # - # Sends HCI commands to start scanning. - ################################################################################ - def scanFunc(self, args): - - # Setup the event masks - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01630C08FFFFFFFFFFFFFFFF") - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01012008FFFFFFFFFFFFFFFF") - - # Set scan parameters - # Active scanning - # window and interval 0xA0 - # Own address type is 0, public - # Not doing any filtering - self.send_command("010B200701A000A0000000") - - # Start scanning, don't filter duplicates - self.send_command("010C20020100") - - while True: - self.wait_event() - - ## Start initiating function. - # - # Sends HCI commands to start initiating and create a connection. - ################################################################################ - def initFunc(self, args): - if isinstance(args.stats, str): - #print(f'args.stats type: {type(args.stats)}, value: {args.stats}') - if args.stats.lower() == "true": - args.stats = True - else: - args.stats = False - - # Reorder the address - addrBytes = parseBdAddr(args.addr) - - # Setup the event masks - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01630C08FFFFFFFFFFFFFFFF") - self.send_command("01010C08FFFFFFFFFFFFFFFF") - self.send_command("01012008FFFFFFFFFFFFFFFF") - - # Reset the connection stats - if(args.stats): - self.send_command("0102FF00") - - # Set default PHY to enable all PHYs - self.send_command("01312003"+"00"+"07"+"07") - - # Convert connection interval string to int - connIntervalInt = int(args.interval, 16) - - # Convert int to 2 hex bytes, LSB first - connInterval = "%0.2X"%(connIntervalInt & 0xFF) - connInterval+= "%0.2X"%((connIntervalInt & 0xFF00) >> 8) - - # Convert supervision timeout string to int - supTimeoutInt = int(args.timeout, 16) - - # Convert int to 2 hex bytes, LSB first - supTimeout = "%0.2X"%(supTimeoutInt & 0xFF) - supTimeout+= "%0.2X"%((supTimeoutInt & 0xFF00) >> 8) - - # Create the connection, using a public address for peer and local - ownAddrType="00" - connLatency="0000" - connCommand="010D2019A000A00000"+"00"+addrBytes+ownAddrType+connInterval+connInterval+connLatency+supTimeout+"0F100F10" - - # Start a thread to listen for disconnection events and restart the connection - if(args.maintain == True): - global listenDisconCommand - global listenDisconStop - global listenDisconThread - - listenDisconThread = threading.Thread(target=listenDiscon) - listenDisconCommand = connCommand - listenDisconStop = False - - # Start the thread and wait for it to startup - listenDisconThread.start() - sleep(1) - - return - else: - self.send_command(connCommand) - - if(args.listen == "False"): - return - - # Listen for events indef - if(args.stats): - per = 100.0 - listenTime = int(args.listen) - while (listenTime > 0): - self.wait_events(10) - - # Send the command to get the connection stats, save the event - statEvt = self.send_command("01FDFF00") - - # Parse the connection stats event - per = self.parseConnStatsEvt(statEvt) - - listenTime = listenTime - 10 - - return per - - # Listen for events for a few seconds`` - if(args.listen != "True"): - self.wait_events(int(args.listen)) - return - else: - while True: - self.wait_events(0) - - ## Set the data length. - # - # Sets the TX data length in octets and time for handle 0. - ################################################################################ - def dataLenFunc(self, args): - # Send the set data length command with max length - self.send_command("01222006"+"0000"+"FB00"+"9042") - - ## Set the length of empty packets. - # - # Sets the length of empty packets. - ################################################################################ - def sendAclFunc(self, args): - - packetLen = "%0.2X"%(int(args.packetLen) & 0xFF) - packetLen+= "%0.2X"%((int(args.packetLen) & 0xFF00) >> 8) - - if(args.numPackets == "0"): - self.send_command("01E5FF02"+packetLen) - return - - numPackets = "%0.2X"%(int(args.numPackets) & 0xFF) - - # Send the vendor specific command to send ACL packets, handle 0 - self.send_command("01E4FF05"+"0000"+packetLen+numPackets) - - ## Set the length of empty packets. - - - # - # Sets the length of empty packets. - ################################################################################ - def sinkAclFunc(self, args): - - # Send the vendor specific command to sink ACL packets - self.send_command("01E3FF0101") - - ## PHY switch function. - # - # Sends HCI command to switch PHYs. Assumes that we can't do asymmetric PHY settings. - # Assumes we're using connection handle 0000 - ################################################################################ - def phyFunc(self, args, timeout=3): - # Convert PHY options to bits - phy="01" - phyOptions="0000" - if(args.phy == "4"): - phy="04" - phyOptions="0100" - elif(args.phy == "3"): - phy="04" - phyOptions="0200" - elif(args.phy == "2"): - phy="02" - elif(args.phy != "1"): - print("Invalid PHY selection, using 1M") - - self.send_command("01322007"+"0000"+"00"+phy+phy+phyOptions) - self.wait_events(timeout) - - ## Rest function. - # - # Sends HCI reset command. - ################################################################################ - def resetFunc(self, args): - - # Close the listener thread if active - self.closeListenDiscon() - - # Send the HCI command for HCI Reset - self.send_command("01030C00") - - ## Listen for events. - # - # Listen for HCI events. - ################################################################################ - def listenFunc(self, args): - if isinstance(args.stats, str): - #print(f'args.stats type: {type(args.stats)}, value: {args.stats}') - if args.stats.lower() == "true": - args.stats = True - else: - args.stats = False - - waitSeconds = int(args.time) - - per = 100.0 - if(args.stats): - - startTime = datetime.datetime.now() - while True: - - # Wait for at least 10 seconds - waitPrintSeconds = waitSeconds - if(waitSeconds == 0): - waitPrintSeconds = 10 - self.wait_events(waitPrintSeconds) - - # Send the command to get the connection stats, save the event - statEvt = self.send_command("01FDFF00") - - # Parse the connection stats event - per = self.parseConnStatsEvt(statEvt) - - timeNow = datetime.datetime.now() - - if((waitSeconds != 0) and ((timeNow - startTime).total_seconds() > waitSeconds)): - return per - - else: - self.wait_events(waitSeconds) - - return per - - - ## txTest function. - # - # Sends HCI command for the transmitter test. - ################################################################################ - def txTestFunc(self, args): - channel="%0.2X"%int(args.channel) - packetLength="%0.2X"%int(args.packetLength) - payload="%0.2X"%int(args.payload) - phy="%0.2X"%int(args.phy) - self.send_command("01342004"+channel+packetLength+payload+phy) - - ## txTestVS function. - # - # Sends a vendor specific HCI command for the transmitter test. - ################################################################################ - def txTestVSFunc(self, args): - - if args.channel is not None: - channel="%0.2X"%int(args.channel) - else: - channle = "%0.2X"%int(0) - if args.packetLength is not None: - packetLength="%0.2X"%int(args.packetLength) - else: - packetLength = '00' - - if args.payload is not None: - payload="%0.2X"%int(args.payload) - else: - payload="%0.2X"%int(0) - if args.phy is not None: - phy="%0.2X"%int(args.phy) - else: - phy = '01' - - numPackets = "%0.2X"%(int(args.numPackets) & 0xFF) - numPackets+= "%0.2X"%((int(args.numPackets) & 0xFF00) >> 8) - - self.send_command("0103FF06"+channel+packetLength+payload+phy+numPackets) - - ## rxTest function. - # - # Sends HCI command for the receiver test. - ################################################################################ - def rxTestFunc(self, args): - channel="%0.2X"%int(args.channel) - - # Convert S2 to coded PHY - phy = int(args.phy) - if(phy == 4): - phy = 3 - - phy="%0.2X"%phy - modulationIndex="00" - self.send_command("01332003"+channel+phy+modulationIndex) - - - def endTestVSFunc(self, args): - """ - Vendor specific command to end test\n - Returns a dictionary of entire test report\n - Keys:\n - rxDataTO - Timeouts on receive\n - rxDataCRC - RX data with CRC errors\n - rxDataOk - Total RX data received with no issues\n - txData - Total number of TX packets sent\n - """ - - evtString = self.send_command("0104FF00") - - if evtString: - stats = {} - - #flip every two character strings to create a big endian string to cast - stats['rxDataTO'] = int(evtString[-2:] + evtString[-4 :-2],16) - stats['rxDataCRC'] = int(evtString[-6 :-4] + evtString[-8:-6],16) - stats['rxDataOk'] = int(evtString[-10 :-8] + evtString[-12:-10] ,16) - stats['txData'] = int(evtString[-14 :-12] + evtString[-16:-14],16) - - # if args is None or args.noPrint is False: - for item in stats: - print(item, stats[item]) - - return stats - else: - print(colored('Error: Device Returned No Data. Command may not be supported, or device might not be updated', 'red')) - return None - - - ## End Test function. - # - # Sends HCI command for the end test command. - ################################################################################ - def endTestFunc(self, args): - # Send the end test command, store the event - evtString = self.send_command("011F2000") - - # Parse the event and print the number of received packets - try: - - print("evtString", evtString) - - evtData = int(evtString, 16) - except ValueError: - print('Value Error Has occured. Response most likely empty') - return 0 - - rxPackets = int((evtData & 0xFF00)>>8)+int((evtData & 0xFF)<<8) - if (args is None) or (vars(args).get('noPrint') is not True): - print("Received PKTS : "+str(rxPackets)) - - return rxPackets - - ## txPower function. - # - # Sends HCI command to set the TX power. - ################################################################################ - def txPowerFunc(self, args): - - # Get an 8 bit signed integer - power="%0.2X"%int(tohex(int(args.power), nbits=8), base=16) - - # Set the advertising TX power level - self.send_command("01F5FF01"+power) - - if(args.handle): - # Convert int handle to 2 hex bytes, LSB first - handle = "%0.2X"%(int(args.handle) & 0xFF) - handle+= "%0.2X"%((int(args.handle) & 0xFF00) >> 8) - - # Set the connection TX power level - self.send_command("01F6FF03"+handle+power) - - ## Disconnect function. - # - # Sends HCI command to disconnect from a connection. - ################################################################################ - def disconFunc(self, args): - # Send the disconnect command, handle 0, reason 0x16 Local Host Term - self.send_command("01060403000016") - - ## Set channel map function. - # - # Sends vendor specific HCI commands to set the channel map. - ################################################################################ - def setChMapFunc(self, args): - - chMask = 0xFFFFFFFFFF - if(args.mask == None): - if(args.chan == None): - # Use all of the channels - chMask = 0xFFFFFFFFFF - elif(args.chan == "0"): - # Use channels 0 and 1 - chMask = 0x0000000003 - else: - chMask = 0x0000000001 - chMask = chMask | (1 << int(args.chan)) - - else: - chMask = int(args.mask, 16) - - # Mask off the advertising channels - chMask = chMask & ~(0xE000000000) - - # Convert to a string - chMaskString = "0x%0.16X"%(chMask) - print(chMaskString) - maskString = parseAddr(chMaskString, numNibbles=16) - - - # Convert int handle to 2 hex bytes, LSB first - handle = "%0.2X"%(int(args.handle) & 0xFF) - handle+= "%0.2X"%((int(args.handle) & 0xFF00) >> 8) - - print(maskString) - self.send_command("01F8FF0A"+handle+maskString) - - ## Command function. - # - # Sends HCI commands. - ################################################################################ - def cmdFunc(self,args, timeout=None): - if timeout is None: - self.send_command(args.cmd) - else: - self.send_command(args.cmd, timeout=timeout) - - def readReg(self, addr, length): - - # Reverse the bytes to LSB first - addrBytes = parseAddr(addr) - - # Get the read length - readLen = length - if(readLen[:2] != "0x"): - print("Length must be a hex number starting with 0x") - return - readLen = readLen[2:] - - - readLenString = "%0.2X"%int(readLen, 16) - - - # Calculate the total length, 1 for the read len, 4 for the address length - totalLen = "%0.2X"%(1+4) - - # Send the command and save the event - evtString = self.send_command("0101FF"+totalLen+readLenString+addrBytes) - - - # Get the data - evtString = evtString[14:] - - # Split the data into bytes - chunks, chunk_size = len(evtString), 2 - evtBytes = [ evtString[i:i+chunk_size] for i in range(0, chunks, chunk_size) ] - - return evtBytes - - ## Read register function. - # - # Sends HCI command to read a register. - ################################################################################ - def readRegFunc(self, args): - - # Get the addr string - addr=args.addr - - # Reverse the bytes to LSB first - addrBytes = parseAddr(addr) - - # Get the read length - readLen = args.length - if(readLen[:2] != "0x"): - print("Length must be a hex number starting with 0x") - return - readLen = readLen[2:] - - # assert(readLen < 256) - - readLenString = "%0.2X"%int(readLen, 16) - print(readLenString) - # Calculate the total length, 1 for the read len, 4 for the address length - totalLen = "%0.2X"%(1+4) - - # Send the command and save the event - evtString = self.send_command("0101FF"+totalLen+readLenString+addrBytes) - - # Get the data - evtString = evtString[14:] - - # Split the data into bytes - chunks, chunk_size = len(evtString), 2 - evtBytes = [ evtString[i:i+chunk_size] for i in range(0, chunks, chunk_size) ] - - - # Print the data - startingAddr = int(args.addr, 16) - - # Pad the length so we can print 32-bit numbers - readLen = int(readLen,16) - readLenPad = readLen - if(readLen % 4): - readLenPad += (4-readLen%4) - - for i in range (0, readLenPad): - addr = startingAddr+i - - # Print the address every 4 bytes - if(i%4 == 0): - print("0x%0.8X"%addr, end=": 0x") - - # Print from MSB to LSB in the 32 bit value - lineAddr = int(i/4)*4 + (4-(i%4)) - 1 - - # Print spaces if we're padding the length - if(lineAddr >= readLen): - print("__", end="") - else: - print(evtBytes[lineAddr], end="") - - # Print a new line at the end of the 32 bit value - if(i%4 == 3): - print() - - return evtBytes - - ## Write register function. - # - # Sends HCI command to write a register. - ################################################################################ - def writeRegFunc(self, args): - - # Get the data string - data=args.value - - # Make sure input value is a hex number starting with 0x - if(data[:2] != "0x"): - print("Input value must be a hex number starting with 0x") - - data = data[2:] - - # Get the total length, minus 2 for the 0x - writeLen=len(data) - - # Make sure the writeLen is an even number - if(writeLen % 2 != 0): - print("Input value must be on a byte boundary, even number of digits") - return - - # Convert nibbles to number of bytes - writeLen = int(writeLen/2) - - if((writeLen != 4) and (writeLen != 2) and (writeLen != 1)): - print("Input value must be either 8, 16, or 32 bits") - return - - # Calculate the length, convert to string - totalLen="%0.2X"%(writeLen+5) - writeLen="%0.2X"%(writeLen) - - # Get the addr string - addr=args.addr - - # Make sure it's a hex number starting with 0x - if(addr[:2] != "0x"): - print("Address must be a hex number starting with 0x") - - addr = addr[2:] - - if(len(addr) != 8): - print("Address must be 32 bit hex number") - - # Split the address into bytes - chunks, chunk_size = len(addr), len(addr)//4 - addrBytes = [ addr[i:i+chunk_size] for i in range(0, chunks, chunk_size) ] - - # Reverse the bytes to LSB first - addrBytes = addrBytes[3]+addrBytes[2]+addrBytes[1]+addrBytes[0] - - self.send_command("0100FF"+totalLen+writeLen+addrBytes+data) - - ## Read RSSI function. - # - # Sends HCI command to read RSSI. - ################################################################################ - def rssiFunc(self, args, timeout=None): - if timeout is None: - self.send_command("010514020000", resp=False) - timeout = 0.1 - else: - self.send_command("010514020000", resp=False, timeout=timeout) - - rssi = 0 - evt = self.wait_event(timeout=timeout) - if evt is not None: - rssi_hex_str = evt[-2:] - byte_data = bytes.fromhex(rssi_hex_str) - rssi = struct.unpack('>b', byte_data)[0] - - if rssi is None: - rssi = 0 - - return rssi - -## Help function. - # - # Prints the help text. -################################################################################ -def helpFunc(args): - terminal.print_help() - -## Signal handler. - # - # Catches OS signals and closes the serial port. -################################################################################ -def signal_handler(signal, frame): - print() - sys.exit(0) - -if __name__ == '__main__': - - # Setup the signal handler to catch the ctrl-C - signal.signal(signal.SIGINT, signal_handler) - - # Setup the command line description text - descText = """ - Bluetooth Low Energy HCI tool. - - This tool is used in tandem with the BLE controller examples. This tools sends - HCI commands through the serial port to the target device. It will receive and print - the HCI events received from the target device. - - Serial port is configured as 8N1, no flow control, default baud rate of """+str(defaultBaud)+""". - """ - - # Parse the command line arguments - parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) - parser.add_argument('serial_port', nargs='?', default="", - help='Serial port path or COM#, default: '+defaultSP) - parser.add_argument('baud', nargs='?', default=defaultBaud, - help='Serial port baud rate, default: '+str(defaultBaud)) - parser.add_argument('--monPort', nargs='?', default=defaultMonSP, - help='Monitor Trace Msg Serial Port path or COM#, default: ' + defaultMonSP) - parser.add_argument('--serialPort', nargs='?', default=defaultSP, - help='Serial port path or COM#, default: '+defaultSP) - parser.add_argument('--baud', nargs='?', default=defaultBaud, - help='Serial port baud rate, default: '+str(defaultBaud)) - parser.add_argument('-c', '--command', default="", help='Commands to run') - - args = parser.parse_args() - if args.serial_port != "": - args.serialPort = args.serial_port - monSP = args.monPort # monitor trace msg serial port - - print("Bluetooth Low Energy HCI tool") - print("Serial port: " + args.serialPort) - print("Monitor Trace Msg Serial Port: "+monSP) - print("8N1 "+str(args.baud)) - if(args.command != ""): - print("running commands: "+args.command) - print("") - - # Create the BLE_hci object - ble_hci = BLE_hci(args) - - # Start the terminal argparse - terminal = argparse.ArgumentParser(prog="", add_help=True) - subparsers = terminal.add_subparsers() - - addr_parser = subparsers.add_parser('addr', help="Set the device address") - addr_parser.add_argument('addr', - help="Set the device address, ex: 00:11:22:33:44:55 ") - addr_parser.set_defaults(func=ble_hci.addrFunc) - - adv_parser = subparsers.add_parser('adv', help="Send the advertising commands", formatter_class=RawTextHelpFormatter) - adv_parser.add_argument('-i', '--interval', default=str(defaultAdvInterval), - help="Advertising interval in units of 0.625 ms, 16-bit hex number 0x0020 - 0x4000, default: "+str(defaultAdvInterval)) - adv_parser.add_argument('-c', '--connect', default="True", help="Advertise as a connectable device, default: True") - adv_parser.add_argument('-l', '--listen', default="False", help="Listen for events \n\t\"True\" for indefinitely, ctrl-c to exit \n\t\"False\" to return \n\tnumber of seconds") - adv_parser.add_argument('-s', '--stats', action='store_true', help="Periodically print the connection stats if listening") - adv_parser.add_argument('-m', '--maintain', action='store_true', help="Setup an event listener to restart advertising if we disconnect") - adv_parser.set_defaults(func=ble_hci.advFunc) - - scan_parser = subparsers.add_parser('scan', help="Send the scanning commands and print scan reports. ctrl-c to exit") - scan_parser.add_argument('-i', '--interval', default=str(defaultAdvInterval), - help="Advertising interval in units of 0.625 ms, 16-bit hex number 0x0020 - 0x4000, default: "+str(defaultAdvInterval)) - scan_parser.set_defaults(func=ble_hci.scanFunc) - - init_parser = subparsers.add_parser('init', help="Send the initiating commands to open a connection", formatter_class=RawTextHelpFormatter) - init_parser.add_argument('addr', help="Address of peer to connect with, ex: 00:11:22:33:44:55 ") - init_parser.add_argument('-i', '--interval', default=str(defaultConnInterval), - help="Connection interval in units of 1.25 ms, 16-bit hex number 0x0006 - 0x0C80, default: "+str(defaultConnInterval)) - init_parser.add_argument('-t', '--timeout', default=str(defaultSupTimeout), - help="Supervision timeout in units of 10 ms, 16-bit hex number 0x000A - 0x0C80, default: "+str(defaultSupTimeout)) - init_parser.add_argument('-l', '--listen', default="False", help="Listen for events \n\t\"True\" for indefinitely, ctrl-c to exit \n\t\"False\" to return \n\tnumber of seconds") - init_parser.add_argument('-s', '--stats', action='store_true', help="Periodically print the connection stats if listening") - init_parser.add_argument('-m', '--maintain', action='store_true', help="Setup an event listener to restart the connection if we disconnect") - init_parser.set_defaults(func=ble_hci.initFunc) - - dataLen_parser = subparsers.add_parser('dataLen', help="Set the max data length", formatter_class=RawTextHelpFormatter) - dataLen_parser.set_defaults(func=ble_hci.dataLenFunc) - - sendAcl_parser = subparsers.add_parser('sendAcl', help="Send ACL packets", formatter_class=RawTextHelpFormatter) - sendAcl_parser.add_argument('packetLen', help="Number of bytes per ACL packet, 16-bit decimal ex: 128, 0 to disable") - sendAcl_parser.add_argument('numPackets', help="Number of packets to send, 8-bit decimal ex: 255, 0 to enable auto-generate ") - sendAcl_parser.set_defaults(func=ble_hci.sendAclFunc) - - sinkAcl_parser = subparsers.add_parser('sinkAcl', help="Sink ACL packets, do not send events to host", formatter_class=RawTextHelpFormatter) - sinkAcl_parser.set_defaults(func=ble_hci.sinkAclFunc) - - connStats_parser = subparsers.add_parser('connStats', help="Get the connection stats", formatter_class=RawTextHelpFormatter) - connStats_parser.set_defaults(func=ble_hci.connStatsFunc) - - phy_parser = subparsers.add_parser('phy', help="Update the PHY in the active connection", formatter_class=RawTextHelpFormatter) - phy_parser.add_argument('phy', help= - """ - Desired PHY - 1: 1M - 2: 2M - 3: S8 - 4: S2 - default: 1M - """) - phy_parser.set_defaults(func=ble_hci.phyFunc) - - reset_parser = subparsers.add_parser('reset', help="Sends a HCI reset command") - reset_parser.set_defaults(func=ble_hci.resetFunc) - - listen_parser = subparsers.add_parser('listen', help="Listen for HCI events, print to screen") - listen_parser.add_argument('-t', '--time', default="0", help="Time to listen in seconds, default: 0(indef)") - listen_parser.add_argument('-s', '--stats', action='store_true', help="Periodically print the connection stats if listening") - listen_parser.set_defaults(func=ble_hci.listenFunc) - - txTest_parser = subparsers.add_parser('txTest', aliases=['tx'], help="Execute the transmitter test", formatter_class=RawTextHelpFormatter) - txTest_parser.add_argument('-c', '--channel', default="0", help="TX test channel, 0-39, default: 0") - txTest_parser.add_argument('--phy', default="1", help= - """TX test PHY - 1: 1M - 2: 2M - 3: S8 - 4: S2 - default: 1M - """) - txTest_parser.add_argument('-p','--payload', default="0", help= - """TX test Payload - 0: PRBS9 - 1: 11110000 - 2: 10101010 - 3: PRBS15 - 4: 11111111 - 5: 00000000 - 6: 00001111 - 7: 01010101 - default: PRBS9 - """) - txTest_parser.add_argument('-pl', '--packetLength', default="0", help= - """"TX packet length, number of bytes per packet, 0-255 - default: 0 - """) - txTest_parser.set_defaults(func=ble_hci.txTestFunc) - - txTestVS_parser = subparsers.add_parser('txTestVS', aliases=['txvs'], help="Execute the transmitter test", formatter_class=RawTextHelpFormatter) - txTestVS_parser.add_argument('-c', '--channel', default="0", help="TX test channel, 0-39, default: 0") - txTestVS_parser.add_argument('--phy', default="1", help= - """TX test PHY - 1: 1M - 2: 2M - 3: S8 - 4: S2 - default: 1M - """) - txTestVS_parser.add_argument('-p','--payload', default="0", help= - """TX test Payload - 0: PRBS9 - 1: 11110000 - 2: 10101010 - 3: PRBS15 - 4: 11111111 - 5: 00000000 - 6: 00001111 - 7: 01010101 - default: PRBS9 - """) - txTestVS_parser.add_argument('-pl', '--packetLength', default="0", help= - """"TX packet length, number of bytes per packet, 0-255 - default: 0 - """) - txTestVS_parser.add_argument('-np', '--numPackets', default="0", help= - """"Number of packets to TX, 2 bytes hex, 0 equals inf. - default: 0 - """) - txTestVS_parser.set_defaults(func=ble_hci.txTestVSFunc) - - rxTest_parser = subparsers.add_parser('rxTest', aliases=['rx'], help="Execute the receiver test") - rxTest_parser.add_argument('-c', '--channel', default="0", help="RX test channel, 0-39, default: 0") - rxTest_parser.add_argument('--phy', default="1", help= - """RX test PHY - 1: 1M - 2: 2M - 3: S8 - 4: S2 - default: 1M - """) - rxTest_parser.set_defaults(func=ble_hci.rxTestFunc) - - endTest_parser = subparsers.add_parser('endTest', aliases=['end'], - help="End the TX/RX test, print the number of correctly received packets") - endTest_parser.set_defaults(func=ble_hci.endTestFunc) - - endTestVS_parser = subparsers.add_parser('endTestVS', aliases=['endvs'], - help="End the TX/RX test, print the full test report, and return the report as a dictionary") - endTestVS_parser.set_defaults(func=ble_hci.endTestVSFunc) - - txPower_parser = subparsers.add_parser('txPower', aliases=['txp'], help="Set the TX power", formatter_class=RawTextHelpFormatter) - txPower_parser.add_argument('power', help="""Integer power setting in units of dBm""") - txPower_parser.add_argument('--handle', help="Connection handle, integer") - txPower_parser.set_defaults(func=ble_hci.txPowerFunc) - - discon_parser = subparsers.add_parser('discon', aliases=['dc'], - help="Send the command to disconnect") - discon_parser.set_defaults(func=ble_hci.disconFunc) - - setChMap_parser = subparsers.add_parser('setChMap', formatter_class=RawTextHelpFormatter, - help="""Set the connection channel map to a given channel.""") - setChMap_parser.add_argument('chan', help="""Channel to use in channel map - Will set the channel map to the given channel, plus one additional channel.""", nargs="?") - setChMap_parser.add_argument('-m','--mask', help="""40 bit hex number to use a channel map - 0xFFFFFFFFFF will use all channels, 0x000000000F will use channels 0-3""") - setChMap_parser.add_argument('--handle', help="Connection handle, integer", default="0") - setChMap_parser.set_defaults(func=ble_hci.setChMapFunc) - - cmd_parser = subparsers.add_parser('cmd', formatter_class=RawTextHelpFormatter, - help="Send raw HCI commands") - cmd_parser.add_argument('cmd', help="String of hex bytes LSB first\nex: \"01030C00\" to send HCI Reset command") - cmd_parser.add_argument('-l', '--listen', action='store_true', help="Listen for events indefinitely, ctrl-c to exit") - cmd_parser.set_defaults(func=ble_hci.cmdFunc) - - readReg_parser = subparsers.add_parser('readReg', formatter_class=RawTextHelpFormatter, - help="Read register, device performs a memcpy from address and returns the value") - readReg_parser.add_argument('addr', help="Address to read, 32-bit hex value\nex: \"0x20000000\"") - readReg_parser.add_argument('length', help="Number of bytes to read, hex value\nex: \"0x2\"") - readReg_parser.set_defaults(func=ble_hci.readRegFunc) - - readWrite_parser = subparsers.add_parser('writeReg', formatter_class=RawTextHelpFormatter, - help="Write register, device performs a memcpy to memory address") - readWrite_parser.add_argument('addr', help="Address to write, 32-bit hex value\nex: \"0x20000000\"") - readWrite_parser.add_argument('value', help="Data to write, 8,16, or 32 bit hex value,\nex: \"0x12\"") - readWrite_parser.set_defaults(func=ble_hci.writeRegFunc) - - rssi_parser = subparsers.add_parser('rssi', formatter_class=RawTextHelpFormatter, - help="read rssi") - rssi_parser.add_argument('-t', '--timeout', default="0.1", - help="read RSSI timeout in seconds, default 0.1 secs.") - rssi_parser.set_defaults(func=ble_hci.rssiFunc) - - # Exit function defined above - exit_parser = subparsers.add_parser('exit', aliases=['quit'], help="Exit the program") - exit_parser.set_defaults(func=ble_hci.exitFunc) - - help_parser = subparsers.add_parser('help', aliases=['h'], help="Show help message") - help_parser.set_defaults(func=helpFunc) - - # Parse the command input and execute the appropriate function - if(args.command != ""): - commands=args.command.split(";") - for i in range (0,len(commands)): - # Remove leading and trailing white space - command = commands[i].strip() - - # Split the command into its arguments - command = command.split() - - # Run the commands - try: - args = terminal.parse_args(command) - args.func(args) - except AttributeError: - continue - - # Catch SystemExit, allows user to ctrl-c to quit the current command - except SystemExit as err: - if("{0}".format(err) != "0"): - # Catch the magic exit value, return 0 - if("{0}".format(err) == str(exitFuncMagic)): - sys.exit(0) - - # Return error - sys.exit(int("{0}".format(err))) - - # Continue if we get a different code - - - # Start the terminal - while True: - # Get the terminal input - astr = input('>>> ') - try: - # Parse the input and execute the appropriate function - args = terminal.parse_args(astr.split()) - try: - args.func(args) - except AttributeError: - continue - - # Catch SystemExit, allows user to ctrl-c to quit the current command - except SystemExit as err: - if("{0}".format(err) != "0"): - # Catch the magic exit value, return 0 - if("{0}".format(err) == str(exitFuncMagic)): - sys.exit(0) - - # Return error - sys.exit(int("{0}".format(err))) - - # Continue if we get a different code diff --git a/Tools/Bluetooth/DBB.py b/Tools/Bluetooth/DBB.py deleted file mode 100644 index a9df8a0e10..0000000000 --- a/Tools/Bluetooth/DBB.py +++ /dev/null @@ -1,500 +0,0 @@ - -class RegisterOffsets: - CTRL = 0x1000 - TX = 0x2000 - RX = 0x3000 - RFFE = 0x8000 - - -class CtrlReg: - dbb_ctrl_version = 0x0000 - dbb_ctrl_rst = 0x0002 - tx_ctrl_dbb_en_dly = 0x0004 - tx_ctrl_rffe_en_dly = 0x0008 - tx_ctrl_dbb_dis_dly = 0x0010 - tx_ctrl_rffe_dis_dly = 0x0014 - tx_ctrl_cmd = 0x001c - tx_ctrl_debug_en_tx_on_sfd_to = 0x001e - rx_ctrl_dbb_en_dly = 0x0020 - rx_ctrl_rffe_en_dly = 0x0024 - rx_ctrl_dbb_dis_dly = 0x002c - rx_ctrl_rffe_dis_dly = 0x0030 - rx_ctrl_cmd = 0x0038 - tx_pmu_wake_up_dly = 0x003c - tx_pmu_ctrl = 0x003e - rffe_pmu_wake_up_dly = 0x0040 - rffe_pmu_ctrl = 0x0042 - rx_pmu_wake_up_dly = 0x0044 - rx_pmu_ctrl = 0x0046 - gen_pmu_status = 0x0048 - event_timing_cntr_clk_mult_p = 0x004c - event_timing_cntr_clk_div_q = 0x004e - event_timing_cntr_val = 0x0050 - event_timing_tx_enable_time = 0x0054 - event_timing_rx_enable_time = 0x0058 - event_timing_gp_event_time = 0x005c - event_timing_tx_enable_delta_time = 0x0060 - event_timing_rx_enable_delta_time = 0x0064 - event_timing_gp_event_delta_time = 0x0068 - event_timing_ctrl = 0x006c - event_timing_timestamp_tx_done = 0x0070 - event_timing_timestamp_rx_received = 0x0074 - event_timing_timestamp_rx_sfd_det = 0x0078 - event_timing_timestamp_rx_sfd_to = 0x007c - event_timing_timestamp_rx_energy_det = 0x0080 - events_status = 0x0084 - events_irq_test = 0x0086 - cmu_gating_on = 0x0088 - cmu_main_mult_p = 0x008a - cmu_main_div_q = 0x008c - cmu_phy_mult_p = 0x008e - cmu_phy_div_q = 0x0090 - cmu_dl_mult_p = 0x0092 - cmu_dl_div_q = 0x0094 - rsv_0x96 = 0x96 - b2b_ctrl = 0x0098 - misc_intr_ctrl = 0x009c - rsv_0xa0_0xff = 0xa0 - aes_st = 0x0100 - aes_aad = 0x0104 - rsv_0x108 = 0x108 - aes_ctrl = 0x010C - aes_key = 0x0110 - aes_ctr_blk = 0x0120 - - -class RffeReg: - rffe_ifc_version = 0x0000 - rffe_ifc_rffe_version = 0x0002 - general_param = 0x0004 - general_delay_freq = 0x0006 - general_delay_amp = 0x0008 - general_spi_invert_csn = 0x000a - general_skip_sdmod = 0x000c - tx_seq_ena_seq_lngth_total = 0x0010 - tx_seq_ena_seq_lngth_part = 0x0012 - tx_seq_ena_cmd = 0x0014 - tx_seq_dis_seq_lngth_total = 0x0034 - tx_seq_dis_seq_lngth_part = 0x0036 - tx_seq_dis_cmd = 0x0038 - tx_seq_spi = 0x0058 - rx_seq_ena_seq_lngth_total = 0x005c - rx_seq_ena_seq_lngth_part = 0x005e - rx_seq_ena_cmd = 0x0060 - rx_seq_dis_seq_lngth_total = 0x0080 - rx_seq_dis_seq_lngth_part = 0x0082 - rx_seq_dis_cmd = 0x0084 - rx_seq_spi = 0x00a4 - rffe_spim_cfg = 0x00a8 - rffe_spim_data_out = 0x00aa - rffe_spim_start_transaction = 0x00ac - rffe_spim_data_in = 0x00ae - agc_spi_cfg = 0x00b0 - agc_enc5_gain_addr = 0x00b4 - agc_enc5_gain_table = 0x00b6 - agc_enc5_gain_table_db = 0x00c6 - agc_enc5_ready_tmr = 0x00d6 - agc_enc5_offs_i_addr = 0x00d8 - agc_enc5_offs_q_addr = 0x00da - agc_enc5_dc_offs = 0x00dc - agc_enc5_offs_i_bypass = 0x00de - agc_enc5_offs_q_bypass = 0x00ee - agc_enc5_curr_dc_offs_i = 0x00fe - agc_enc5_curr_dc_offs_q = 0x010e - rsv_0x11e = 0x11e - general2_skip_fir_amp = 0x0120 - general2_fir_coefficients = 0x0122 - general2_fir_scalingfactor = 0x012a - anti_alias_am_skip_fir = 0x012c - anti_alias_am_coeff = 0x012e - anti_alias_am_scalingfactor = 0x0136 - anti_alias_fm_skip_fir = 0x0138 - anti_alias_fm_coeff = 0x013a - anti_alias_fm_scalingfactor = 0x0142 - cdc_clk_div_en = 0x0144 - rsv_0x146_0x163 = 0x146 - iq_ctrl = 0x0164 - iq_data = 0x0168 - - -class OffsetLuts: - - max32665 = { - 'ctrl': [ - (0x00, 0x96, 0xff - 0x96 + 1), - (0x100, 0x108, 4), - (0x10c, 0x110, 0x120 - 0x100) - ], - 'tx': [ - (0x00, 0x70, 0x180 - 0x70), - # any address offset past 0x18c causes a hardfault - (0x180, 0x18c, 0x194 + 76 - 0x18c) - ], - - 'rx': [(0x00, 0x76, 2), - (0x78, 0x13a, 2), - (0x13c, 0x2dc, 73*4), - (0x400, 0x404, 4), - (0x408, 0x40c, 4*5), - # The entire region with CTE values causes hardfaults - (0x420, 0x424, 0x586 - 0x424), - ], - 'rffe': [(0x00, 0x11e, 2), - (0x120, 0x146, 0x164 - 0x146), - (0x164, 0x168 + 2, 0x168 + 2 - 0x164) - ]} - - max32655 = { - 'ctrl': [ - (0x00, 0x96, 0xff - 0x96 + 1), - (0x100, 0x108, 4), - (0x10c, 0x110, 0x120 - 0x100) - ], - 'tx': [ - (0x00, 0x70, 0x180 - 0x70), - # any address offset past 0x18c causes a hardfault - (0x180, 0x18c, 0x194 + 76 - 0x18c) - ], - - 'rx': [(0x00, 0x76, 2), - (0x78, 0x13a, 2), - (0x13c, 0x2dc, 73*4), - (0x400, 0x404, 4), - (0x408, 0x40c, 4*5), - # The entire region with CTE values causes hardfaults - (0x420, 0x424, 0x586 - 0x424), - ], - 'rffe': [(0x00, 0x11e, 2), - (0x120, 0x146, 0x164 - 0x146), - (0x164, 0x168 + 2, 0x168 + 2 - 0x164) - ]} - - - #event timing region skipped - max32690 = { - 'ctrl': [ - (0x00, 0x50, 0x84 - 0x50 + 1), - (0x84, 0x96, 0xff - 0x96 + 1), - (0x100, 0x108, 4), - (0x10c, 0x110, 0x120 - 0x100) - ], - 'tx': [ - (0x00, 0x70, 0x180 - 0x70), - # any address offset past 0x18c causes a hardfault - (0x180, 0x18c, 0x194 + 76 - 0x18c) - ], - - 'rx': [(0x00, 0x76, 2), - (0x78, 0x13a, 2), - (0x13c, 0x2dc, 73*4), - (0x400, 0x404, 4), - (0x408, 0x40c, 4*5), - # The entire region with CTE values causes hardfaults - (0x420, 0x424, 0x586 - 0x424), - ], - 'rffe': [(0x00, 0x11e, 2), - (0x120, 0x146, 0x164 - 0x146), - (0x164, 0x168 + 2, 0x168 + 2 - 0x164) - ]} - - @staticmethod - def getOffsetLut(chip): - chip = chip.lower() - if chip == 'max32655': - return OffsetLuts.max32655 - elif chip == 'max32665': - return OffsetLuts.max32665 - elif chip == 'max32690': - return OffsetLuts.max32690 - else: - msg = f'Chip {chip} is not valid' - raise Exception(msg) - - -class DBB: - DBBBaseAddr = 0x40050000 - CtrlAddrBase = DBBBaseAddr + RegisterOffsets.CTRL - TxBaseAddr = DBBBaseAddr + RegisterOffsets.TX - RxBaseAddr = DBBBaseAddr + RegisterOffsets.RX - RffeBaseAddr = DBBBaseAddr + RegisterOffsets.RFFE - - RegSize8 = 0x1 - RegSize16 = 0x2 - RegSize32 = 0x3 - - def __init__(self, pyOcdTarget, chip='max32655'): - self.target = pyOcdTarget - self.chip = chip - self.offsetLuts = OffsetLuts.getOffsetLut(self.chip) - - def read8(self, addr): - return self.target.read8(addr) - - def read16(self, addr): - return self.target.read16(addr) - - def read32(self, addr): - return self.target.read32(addr) - - def readRange8(self, baseAddr, len): - data = [] - for i in range(len): - data.append(self.target.read8(baseAddr + i)) - return data - - def readRange16(self, baseAddr, len): - data = [] - for i in range(len): - data.append(self.target.read16(baseAddr + i)) - return data - - def readRange32(self, baseAddr, len): - data = [] - for i in range(len): - data.append(self.target.read16(baseAddr + i)) - return data - - def write8(self, addr, value): - self.target.write8(addr, value) - - def write16(self, addr, value): - self.target.write8(addr, value) - - def write32(self, addr, value): - self.target.write8(addr, value) - - def read(self, addr, size=0x1): - if size == self.RegSize8: - return self.read8(addr) - elif size == self.RegSize16: - return self.read16(addr) - elif size == self.RegSize32: - return self.read32(addr) - - def write(self, addr, value): - - if value <= 255: - self.write8(addr, value) - elif value <= 65535: - self.write16(addr, value) - else: - self.write32(addr, value) - - def readRegions(self, baseAddr, offsetLut: dict): - """ - Reads multiple regions give region map - and returns data as list - """ - regions = [] - for count, region in enumerate(offsetLut): - - # unpack to make readable - region_start, reserved_start, reserved_len = region - - # add base to offset address - region_start += baseAddr - reserved_start += baseAddr - - print('Reading Region', count) - - regionLength = reserved_start - region_start - print('Expected Region Length', regionLength) - - readout = self.readRange8( - region_start, reserved_start - region_start) - - # readout = [hex(i) for i in readout] - - if len(readout) != (regionLength): - print('Error occurred during readout.') - return [] - - regions.extend(readout) - - # add reserved region to the register read - regions.extend([0x00] * reserved_len) - - return regions - - def spim_setup(self): - cpha = 0 - cpol = 1 - endianess = 0 - clk_rate = 2 - - spi_setup = ( - (clk_rate << 0) | - (endianess << 4) | - (cpol << 5) | - (cpha << 6) | - 1 << 7 | - 0) - - self.write8(self.rffeAddr(RffeReg.rffe_spim_cfg), spi_setup) - self.write8(self.rffeAddr(RffeReg.tx_seq_spi), spi_setup) - self.write8(self.rffeAddr(RffeReg.rx_seq_spi), spi_setup) - self.write8(self.rffeAddr(RffeReg.agc_spi_cfg), spi_setup) - - def spim_write(self, addr, value): - - self.enableRffePmu(True) - - while not (self.readCtrl(CtrlReg.gen_pmu_status, self.RegSize16) & (1 << 2)): - pass - - for i in range(0xf): - # wait a little extra - pass - - addr |= (1 << 7) - - self.writeCtrl(CtrlReg.events_status, (1 << 5)) - self.writeRffe(RffeReg.rffe_spim_data_out, (addr << 8) + value) - self.writeRffe(RffeReg.rffe_spim_start_transaction, (1 << 0)) - - while not (self.readCtrl(CtrlReg.events_status) & (1 << 5), self.RegSize16): - pass - - self.enableRffePmu(False) - - def spim_read(self, addr): - self.enableRffePmu(True) - - while not (self.readCtrl(CtrlReg.gen_pmu_status, self.RegSize16) & (1 << 2)): - pass - - for i in range(0xf): - # wait a little extra - pass - - addr &= ~(1 << 7) - - self.writeCtrl(CtrlReg.events_status, (1 << 5)) - self.writeRffe(RffeReg.rffe_spim_data_out, (addr << 8) + 0) - self.writeRffe(RffeReg.rffe_spim_start_transaction, (1 << 0)) - - while not self.readCtrl(CtrlReg.events_status, self.RegSize16) & (1 << 5): - pass - - self.enableRffePmu(False) - - return self.readRffe(RffeReg.rffe_spim_data_in, self.RegSize8) - - def ctrlAddr(self, offset): - return self.CtrlAddrBase + offset - - def rxAddr(self, offset): - return self.RxBaseAddr + offset - - def txAddr(self, offset): - return self.TxBaseAddr + offset - - def rffeAddr(self, offset): - return self.RffeBaseAddr + offset - - def getCtrlVersionInfo(self): - DBB_CTRL = 0x40051000 - version = self.target.read16(DBB_CTRL, 1) - version_minor = version & 0xff - version_major = (version >> 8) * 0xff - - return (version_major, version_minor) - - def readCtrl(self, register, size): - return self.read(self.ctrlAddr(register), size) - - def writeCtrl(self, register, value): - self.write(self.ctrlAddr(register), value) - - def readRffe(self, register, size): - return self.read(self.rffeAddr(register), size) - - def writeRffe(self, register, value): - self.write(self.rffeAddr(register), value) - - def getCtrlAll(self): - - offsetLut = self.offsetLuts['ctrl'] - ctrl = self.readRegions(self.CtrlAddrBase, offsetLut) - - return ctrl - - def getTxAll(self): - """ - Read out the TX register of the DBB and return as list - Reserved regions will be set as '00' - """ - - MXC_BASE_BTLE_DBB_TX = self.TxBaseAddr - - - offsetLut = self.offsetLuts['tx'] - - return self.readRegions( - baseAddr=MXC_BASE_BTLE_DBB_TX, offsetLut=offsetLut) - - def getRxAll(self): - """ - Reads the contents of the rx register and returns data as a list - All reserved regions initialized as '00' - """ - MXC_BASE_BTLE_DBB_RX = self.RxBaseAddr - - offsetLut = self.offsetLuts['rx'] - - return self.readRegions(MXC_BASE_BTLE_DBB_RX, offsetLut) - - def getAll(self): - - ctrl = self.getCtrlAll() - rx = self.getRxAll() - tx = self.getTxAll() - rffe = self.getRffeAll() - - return { - 'ctrl': ctrl, - 'rx': rx, - 'tx': tx, - 'rffe': rffe - } - - def getRffeAll(self): - MXC_BASE_BTLE_DBB_EXT_RFFE = self.RffeBaseAddr - - - offsetLut = self.offsetLuts['rffe'] - - return self.readRegions( - baseAddr=MXC_BASE_BTLE_DBB_EXT_RFFE, offsetLut=offsetLut) - - def getAll(self): - - ctrl = self.getCtrlAll() - rx = self.getRxAll() - tx = self.getTxAll() - rffe = self.getRffeAll() - - return { - 'ctrl': ctrl, - 'rx': rx, - 'tx': tx, - 'rffe': rffe - } - - def enableRffePmu(self, enable=True): - if enable: - self.write16(self.ctrlAddr(CtrlReg.rffe_pmu_ctrl), (1 << 1)) - else: - self.write16(self.ctrlAddr(CtrlReg.rffe_pmu_ctrl), (1 << 2)) - - def getPmuStatus(self): - return self.readCtrl(CtrlReg.gen_pmu_status, self.RegSize32) - - def txPmuIsEnable(self): - return bool(self.getPmuStatus() & 0x1) - - def rffePmuIsEnabled(self): - return bool(self.getPmuStatus() & (1 << 1)) - - def rxPmuIsEnabled(self): - return bool(self.getPmuStatus() & (1 << 2)) diff --git a/Tools/Bluetooth/README.md b/Tools/Bluetooth/README.md index 51eb02653e..4b72dcc992 100644 --- a/Tools/Bluetooth/README.md +++ b/Tools/Bluetooth/README.md @@ -1,62 +1,5 @@ # Bluetooth Tools -These python tools are used for Bluetooth development and debugging. +All BLE tools have been removed from the MSDK in favor of their own repository -## BLE_hci -Host Controller Interface for controlling Bluetooth Controller devices. Uses a serial port and the HCI interface to send commands and receive events. - -``` -usage: BLE_hci.py [-h] [--monPort [MONPORT]] [--serialPort [SERIALPORT]] [--baud [BAUD]] [-c COMMAND] [serial_port] [baud] - - Bluetooth Low Energy HCI tool. - - This tool is used in tandem with the BLE controller examples. This tools sends - HCI commands through the serial port to the target device. It will receive and print - the HCI events received from the target device. - - Serial port is configured as 8N1, no flow control, default baud rate of 115200. - - -positional arguments: - serial_port Serial port path or COM#, default: /dev/ttyUSB0 - baud Serial port baud rate, default: 115200 - -options: - -h, --help show this help message and exit - --monPort [MONPORT] Monitor Trace Msg Serial Port path or COM#, default: - --serialPort [SERIALPORT] - Serial port path or COM#, default: /dev/ttyUSB0 - --baud [BAUD] Serial port baud rate, default: 115200 - -c COMMAND, --command COMMAND - Commands to run - -commands: - addr Set the device address - adv Send the advertising commands - scan Send the scanning commands and print scan reports. ctrl-c to exit - init Send the initiating commands to open a connection - dataLen Set the max data length - sendAcl Send ACL packets - sinkAcl Sink ACL packets, do not send events to host - connStats Get the connection stats - phy Update the PHY in the active connection - reset Sends a HCI reset command - listen Listen for HCI events, print to screen - txTest (tx) Execute the transmitter test - txTestVS (tx) Execute the transmitter test - rxTest (rx) Execute the receiver test - endTest (end) End the TX/RX test, print the number of correctly received packets - txPower (txp) Set the TX power - discon (dc) Send the command to disconnect - setChMap Set the connection channel map to a given channel. - cmd Send raw HCI commands - readReg Read register, device performs a memcpy from address and returns the value - writeReg Write register, device performs a memcpy to memory address - exit (quit) Exit the program - help (h) Show help message -``` - -## Mini RCDAT USB -Control a Minicircuits attenuator over USB. - -## RS FSL -Control a Rhode and Schwartz FSL Spectrum analyzer over ethernet. +- [MAX-BLE-HCI](https://github.com/Analog-Devices-MSDK/MAX-BLE-HCI) +- [BLE-Toolkit](https://github.com/Analog-Devices-MSDK/MAX-BLE-Toolkit) diff --git a/Tools/Bluetooth/RS_fsl3.py b/Tools/Bluetooth/RS_fsl3.py deleted file mode 100644 index 752137fbd5..0000000000 --- a/Tools/Bluetooth/RS_fsl3.py +++ /dev/null @@ -1,269 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## RS_fsl3.py - # - # Remote control a Rohde&Schwarz,FSL-3 - # - -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import pyvisa - -OBW_LIMIT=5000000 - -# Namespace class used to create function arguments similar to argparse -class Namespace: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - -class RS_fsl3: - - # Create the resource manager object - rm = pyvisa.ResourceManager() - sa = "" - - def __init__(self, args): - - try: - # Connect to the instrument - queryString = "TCPIP::"+args.ipAddress+"::inst0::INSTR" - print(f'query: {queryString}') - self.sa = self.rm.open_resource(queryString) - except ConnectionRefusedError as err: - print("Error connecting to instrument at IP:",args.ipAddress) - sys.exit(1) - - print('query: *IDN?') - print(self.sa.query('*IDN?')) - - # Leave the display on when remote controlling - self.sa.write(':SYST:DISP:UPD ON') - - # Reset the device - self.sa.write('*RST') - - def testOBW(self, ch=39): - self.sa.write('*RST') - # Test occupied bandwidth - self.sa.write(':CALC:MARK:FUNC:POW:SEL OBW') - self.sa.write(':SENS:POW:BWID 99PCT') - self.sa.write(':SENS:POW:ACH:PRES OBW') - - # Map the channel to the frequency - freq = 2402000000 + (ch * 2000000) - print("CH :",ch) - print("freq:",freq) - - self.sa.write(':FREQ:CENT ',str(freq)) - self.sa.write(':FREQ:SPAN 20000000') - self.sa.write(':BAND:AUTO ON') - self.sa.write(':BAND:RES 30000') - self.sa.write(':BAND:VID 100000') - self.sa.write(':TRIG:SOUR IMM') - self.sa.write(':DISP:TRAC:MODE MAXH') - self.sa.write(':AVER:COUN 0') - - # Set the marker - self.sa.write(':CALC:MARK1:MAX') - self.sa.write(':CALC:MARK1:X ',str(freq)) - - # Set the reference level - self.sa.write(':DISP:TRAC:Y:RLEV 10dBm') - - while not (self.sa.query('*OPC?')): pass - self.sa.write('INIT') - - sleep(10) - - obwString = self.sa.query(':CALC:MARK:FUNC:POW:RES? OBW') - print("OBW:",obwString) - obwFloat = float(obwString) - - txPowerString = self.sa.query(':CALC:MARK1:Y?') - txPowerFloat = float(txPowerString) - print("TX Power :",txPowerString) - - if(obwFloat > OBW_LIMIT): - print("OBW too large >",OBW_LIMIT) - return False - - return True - - def testRB2(self): - self.sa.write('*RST') - # Test RB2 - self.sa.write(':FREQ:CENT 2480000000') - self.sa.write(':FREQ:SPAN 20000000') - self.sa.write(':BAND:AUTO ON') - self.sa.write(':BAND:RES 1000000') - self.sa.write(':TRIG:SOUR IMM') - self.sa.write(':DISP:TRAC:MODE MAXH') - self.sa.write(':AVER:COUN 0') - - # Set the reference level - self.sa.write(':DISP:TRAC:Y:RLEV 10dBm') - - # Set the markers - self.sa.write(':CALC:MARK1:MAX') - self.sa.write(':CALC:MARK1:X 2483500000') - - self.sa.write(':CALC:MARK2:MAX') - self.sa.write(':CALC:MARK2:X 2480000000') - - while not (self.sa.query('*OPC?')): pass - self.sa.write('INIT') - - sleep(10) - - txPowerString = self.sa.query(':CALC:MARK2:Y?') - txPowerFloat = float(txPowerString) - print("TX Power :",txPowerString) - - rb2PowerString = self.sa.query(':CALC:MARK1:Y?') - rb2PowerFloat = float(rb2PowerString) - print("RB2 Power:",rb2PowerString) - - if(rb2PowerFloat > -20): - print("rb2Power too high") - return False - - return True - - def testRB1(self): - self.sa.write('*RST') - # Test RB1 - self.sa.write(':FREQ:CENT 2395000000') - self.sa.write(':FREQ:SPAN 20000000') - self.sa.write(':BAND:AUTO ON') - self.sa.write(':BAND:RES 1000000') - self.sa.write(':BAND:VID 3000000') - self.sa.write(':TRIG:SOUR IMM') - self.sa.write(':DISP:TRAC:MODE MAXH') - self.sa.write(':AVER:COUN 0') - - # Set the reference level - self.sa.write(':DISP:TRAC:Y:RLEV 10dBm') - - # Set the markers - self.sa.write(':CALC:MARK1:MAX') - self.sa.write(':CALC:MARK1:X 2390000000') - - self.sa.write(':CALC:MARK2:MAX') - self.sa.write(':CALC:MARK2:X 2402000000') - - while not (self.sa.query('*OPC?')): pass - self.sa.write('INIT') - - sleep(10) - - txPowerString = self.sa.query(':CALC:MARK2:Y?') - txPowerFloat = float(txPowerString) - print("TX Power :",txPowerString) - - rb1PowerString = self.sa.query(':CALC:MARK1:Y?') - rb1PowerFloat = float(rb1PowerString) - print("RB1 Power:",rb1PowerString) - - if(rb1PowerFloat > -20): - print("rb1Power too high") - return False - - return True - - -if __name__ == '__main__': - - # Setup the command line description text - descText = """ - Rohde&Schwarz,FSL-3 automation tools. - - This tool will setup a signal analyzer over IP to take measurements verifying - FCC Restricted band 2 : < -20 dBm at 2.4835 GHz - FCC Restricted band 1 : < -20 dBm at 2.3900 GHz - Occupied bandwidth : 99% power less than """+str(OBW_LIMIT/1000000)+""" MHz - """ - - # Parse the command line arguments - parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) - parser.add_argument('ipAddress',help='Instrument IP address') - parser.add_argument('cmd',help='Command to run: rb2, rb1, obw') - - args = parser.parse_args() - - print("IP :",args.ipAddress) - print("cmd:",args.cmd) - - # make sure we only have one command - commands = 0 - channel = 0 - if("obw" in args.cmd): - commands = commands+1 - try: - channel = int(args.cmd.split("obw")[1]) - except ValueError as err: - print("Error parsing channel") - print("obw is the expected command, e.g. obw39") - sys.exit(1) - - if("rb1" in args.cmd): - commands = commands+1 - if("rb2" in args.cmd): - commands = commands+1 - - if((commands != 1) or (len(args.cmd) > 5) or (len(args.cmd) < 3)): - print("cmd not formatted properly:",args.cmd) - parser.print_help() - sys.exit(1) - - # Create the object - rs_fsl3 = RS_fsl3(args) - - if ("obw" in args.cmd): - # Run the OBW test - if (rs_fsl3.testOBW(channel) == False): - sys.exit(1) - - if ("rb2" in args.cmd): - if (rs_fsl3.testRB2() == False): - sys.exit(1) - - if ("rb1" in args.cmd): - if (rs_fsl3.testRB1() == False): - sys.exit(1) - - sys.exit(0) diff --git a/Tools/Bluetooth/RS_fsl3_sweep.py b/Tools/Bluetooth/RS_fsl3_sweep.py deleted file mode 100644 index 19b45a2d3e..0000000000 --- a/Tools/Bluetooth/RS_fsl3_sweep.py +++ /dev/null @@ -1,108 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## RS_fsl3_sweep.py - # - # Sweep through tests executed by RS_fsl3.py - # - -import sys -import argparse -from argparse import RawTextHelpFormatter -from pprint import pprint -from time import sleep -from BLE_hci import BLE_hci -from BLE_hci import Namespace -from RS_fsl3 import RS_fsl3 - -# Setup the command line description text -descText = """ -RS_fsl3.py test sweep. -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('ipAddress',help='Instrument IP address') -parser.add_argument('serialPort',help='DUT HCI serial port') -parser.add_argument("--tx_pwr", default=4, help="TX POWE (0, 4)") - -args = parser.parse_args() -pprint(args) - -# Create the BLE_hci objects -hciDUT = BLE_hci(Namespace(serialPort=args.serialPort, monPort="", baud=115200)) -hciDUT.resetFunc(None) - -# Wait for calibration -sleep(1) - -# Create the RS_FSL3 spectrum analyzer object -sa = RS_fsl3(Namespace(ipAddress=args.ipAddress)) - -# Setup the DUT to TX at max power -hciDUT.txPowerFunc(Namespace(power=int(args.tx_pwr), handle=None)) - -channels = [0,1,2,10,19,30,36,37,38,39] - -for channel in channels: - # Start transmitting - hciDUT.txTestFunc(Namespace(channel=channel, packetLength=255, payload=0, phy=1)) - sleep(1) - - if(channel > 36): - # Start the OB2 test - retval = sa.testRB2() - - if(retval != True): - print("RB2 test failed") - sys.exit(1) - else: - # Start the OBW test - retval = sa.testOBW(ch=channel) - - if(retval != True): - print("OBW test failed") - sys.exit(1) - - if(channel == 0): - # Start the OB1 test - retval = sa.testRB1() - - if(retval != True): - print("RB1 test failed") - sys.exit(1) - -print("Test passed!") -sys.exit(0) diff --git a/Tools/Bluetooth/__init__.py b/Tools/Bluetooth/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Tools/Bluetooth/calibration_init.py b/Tools/Bluetooth/calibration_init.py deleted file mode 100644 index db8c0db7be..0000000000 --- a/Tools/Bluetooth/calibration_init.py +++ /dev/null @@ -1,258 +0,0 @@ - -#! /usr/bin/env python3 - -################################################################################ -# Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -# OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of Maxim Integrated -# Products, Inc. shall not be used except as stated in the Maxim Integrated -# Products, Inc. Branding Policy. -# -# The mere transfer of this software does not imply any licenses -# of trade secrets, proprietary technology, copyrights, patents, -# trademarks, maskwork rights, or any other form of intellectual -# property whatsoever. Maxim Integrated Products, Inc. retains all -# ownership rights. -# -############################################################################### - -# calibration_init.py -# -# tool to read/verify DBB for calibration purposes -# -# Ensure that both targets are built with BT_VER := 9 -# -from pyocd.core.helpers import ConnectHelper -import pyocd.core.options as opts -from pyocd.flash.file_programmer import FileProgrammer -import logging -import time -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import os.path -import json -from termcolor import colored - -from DBB import DBB -import sys -from BLE_hci import BLE_hci -from BLE_hci import Namespace - -TRACE_INFO = 2 -TRACE_WARNING = 1 -TRACE_ERROR = 0 - -traceLevel = TRACE_INFO - -logging.basicConfig(level=logging.INFO) - -# Setup the command line description text -descText = """ -Run Calibration and Initialization Tests -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser( - description=descText, formatter_class=RawTextHelpFormatter) - -parser.add_argument('dap_id', help='CMSIS DAP Serial Number') -parser.add_argument('hci_id', help='HCI Serial Port') - -parser.add_argument( - '-b', '--bin', help='Binary To Program Board with', default='') -parser.add_argument('-c', '--chip', default='max32655', help='Part number of chip') -parser.add_argument('-urd', '--update-reference-dbb', action='store_true') -parser.add_argument('-ura', '--update-reference-afe', action='store_true') -parser.add_argument('-vd', '--verify-dbb', action='store_true') -parser.add_argument('-p', '--print', default='', - help='print the structure =') -parser.add_argument('-f', '--file', default='dbb_reference.json') - - - - -args = parser.parse_args() -print(args) -print("--------------------------------------------------------------------------------------------") -dbbFile = args.file - - -def printTrace(label, msg, callerLevel, color='white'): - if callerLevel <= traceLevel: - print(colored(label + ": ", color), colored(msg, color)) - - -def printWarning(msg): - printTrace('Warning', msg, TRACE_WARNING, 'yellow') - - -def printInfo(msg): - printTrace('Info', msg, TRACE_INFO, 'green') - - -def printError(msg): - printTrace('Error', msg, TRACE_ERROR, 'red') - - -def getMismatches(a, b): - - if len(a) != len(b): - raise Exception('Lengths dont match') - - return [{f'offset {hex(i)}': {'ref': hex(a[i]), 'read': hex(b[i])}} for i in range(len(a)) if a[i] != b[i]] - - -def doPrint(dbbReadout, printArg): - locationInfo = printArg.split('=') - region = locationInfo[0].lower() - - if region == 'all': - printInfo(dbbReadout) - return - - if len(locationInfo) > 1: - - offset = locationInfo[1] - if 'x' in offset: - offset = int(offset, 16) - else: - offset = int(offset) - - else: - offset = -1 - - if region not in dbbReadout: - msg = f'Region {region} not in dbb' - raise Exception(msg) - - if offset >= 0: - regionLen = len(dbbReadout[region]) - if offset > regionLen - 1: - msg = f'Invalid offset {offset}, must be less than len of region {regionLen - 1}' - raise Exception(msg) - - regionReadout = dbbReadout[region][offset] - printInfo(f'Region {region} offset {offset}: {regionReadout}') - else: - printInfo(f'Region {region}: {dbbReadout[region]}') - - -def verifyDbb(dbbReadout): - dbbRef = {} - if (os.path.exists(dbbFile)): - with open(dbbFile, 'r') as read: - dbbRef = json.load(read) - - anyMismatches = False - failureFilePath = dbbFile.split('.') - failureFilePath = f'{failureFilePath[0]}_failure.json' - failureFile = open(failureFilePath, 'w') - allMismatches = {} - - for region in dbbRef: - mismatches = getMismatches(dbbRef[region], dbbReadout[region]) - if len(mismatches) != 0: - printWarning( - f'Mismatches found at region {region} and offsets {mismatches}') - - allMismatches[region] = mismatches - - if anyMismatches: - failureFile.close() - os.remove(failureFilePath) - else: - json.dump(allMismatches, failureFile) - failureFile.close() - - print('DBB Match', anyMismatches) - return True - else: - print(f'{dbbFile} Does Not Exist!') - return False - -def hciSetup(hciId): - hci = BLE_hci(Namespace(serialPort=hciId, monPort='', baud=115200, id=0)) - hci.resetFunc(None) - hci.txPowerFunc(Namespace(power=0, handle="0")) - hci.txTestVSFunc(Namespace(channel=0, phy=1, - packetLength=0, numPackets=0, payload=3)) - - - - -session = ConnectHelper.session_with_chosen_probe(blocking=False,unique_id=args.dap_id) - - -if args.chip != '': - session.options['target_override'] = 'max32690' - - - - -with session: - - printInfo(session.options['target_override']) - - - board = session.board - - target = board.target - flash = target.memory_map.get_boot_memory() - - # Load firmware into device. - - if args.bin != '' and os.path.exists(args.bin): - FileProgrammer(session).program(args.bin) - - # Reset, run. - target.reset_and_halt() - target.resume() - - sleep(2) - - # reset the hci - hciSetup(args.hci_id) - target.halt() - - time.sleep(1) - # Read some registers. - - dbb = DBB(target,args.chip) - - - dbbReadout = dbb.getAll() - if args.print: - doPrint(dbbReadout, args.print) - - if args.update_reference_dbb: - with open(dbbFile, 'w') as write: - json.dump(dbbReadout, write) - - if args.verify_dbb: - verifyDbb(dbbReadout) - - - target.reset() - target.resume() - - sys.exit(0) diff --git a/Tools/Bluetooth/conn_sweep.py b/Tools/Bluetooth/conn_sweep.py deleted file mode 100755 index da54e5a6a5..0000000000 --- a/Tools/Bluetooth/conn_sweep.py +++ /dev/null @@ -1,467 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## conn_sweep.py - # - # Sweep connection parameters. - # - # Ensure that both targets are built with BT_VER := 9 - # - - -from datetime import datetime as dt -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import itertools -import json -from mini_RCDAT_USB import mini_RCDAT_USB -from BLE_hci import BLE_hci -from BLE_hci import Namespace -import os -from pprint import pprint -import socket -from subprocess import call, Popen, PIPE, CalledProcessError, STDOUT -import time - -total_retry_times = 0 -RESET_CNT = 1 - -if socket.gethostname() == "wall-e": - rf_switch = True -else: - rf_switch = False - - -def run_script_reset_board(sh_file): - """call a prepared script file to reset a board""" - sh_file = os.path.realpath(sh_file) - print(f"Run script file {sh_file}.") - p = Popen([f'{sh_file}'], stdout=PIPE, stderr=PIPE, shell=True) - - for line in iter(p.stdout.readline, b''): - print(f'{dt.now()} - {line.strip().decode("utf-8")}') - - p.stdout.close() - p.wait() - result = p.returncode - print(f'Exit: {result}') - return result - - -# Setup the command line description text -descText = """ -Connection sweep. - -This tool uses a Mini Circuits RCDAT to control attenuation between two devices -running DTM software. A connection is created and PER data is gathered based on a -combination of parameters. -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('slaveSerial',help='Serial port for slave device') -parser.add_argument('masterSerial',help='Serial port for master device') -parser.add_argument('results',help='CSV files to store the results') -parser.add_argument('-d', '--delay', default=5,help='Number of seconds to wait before ending the test') -parser.add_argument('-l', '--limit', default=0,help='PER limit for return value') -parser.add_argument('-p', '--phys', default="1",help='PHYs to test with, comma separated list with 1-4.') -parser.add_argument('-t', '--txpows', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-a', '--attens', help='Attenuation settings to use, comma separated list.') -parser.add_argument('-s', '--step', default=10, help='Attenuation sweep step size in dBm.') -parser.add_argument('-e', '--pktlen', default="250", help="packet length, comma separated list.") -parser.add_argument('--mtp', default="", help="master TRACE serial port") -parser.add_argument('--stp', default="", help="slave TRACE serial port") -parser.add_argument('--loss', default=0, help="Calibrated path loss, -15.7 dBm (-16.4+0.7)") -parser.add_argument('--brd1_reset', default="", help="script file to reset board1") -parser.add_argument('--brd2_reset', default="", help="script file to reset board2") -parser.add_argument('--retry_limit', default=3, help="limit of retry times after fail") -parser.add_argument('--chip', default="", help="DUT chip") -parser.add_argument('--min_pwrs', default="90,90,90,90", help="abs min power") - -args = parser.parse_args() - -print("--------------------------------------------------------------------------------------------") -pprint(vars(args)) - -# PER mask -CONFIG_FILE=os.path.expanduser("~/Workspace/ci_config/RF-PHY-closed.json") -obj = json.load(open(CONFIG_FILE)) -use_per_mask = obj['tests']["simple_per.yml"]["use_per_mask"] -per_mask_margin = int(obj['tests']['per_mask']['per_mask_margin']) -per_corr_dtm_to_cm = int(obj['tests']['per_mask']['per_corr_dtm_to_cm']) - -phy_str = [ - "", - "1M", - "2M", - "S8", - "S2" -] - -per_mask = { - "1M": [ - [-20, per_mask_margin], - [-90, per_mask_margin], - [-93+per_corr_dtm_to_cm, 5+per_mask_margin], - [-96+per_corr_dtm_to_cm, 30+per_mask_margin], - [-99+per_corr_dtm_to_cm, 100], - [-114, 100] - ], - - "2M": [ - [-20, per_mask_margin], - [-87, per_mask_margin], - [-90+per_corr_dtm_to_cm, 5+per_mask_margin], - [-93+per_corr_dtm_to_cm, 30+per_mask_margin], - [-96+per_corr_dtm_to_cm, 100], - [-111, 100] - ], - - "S2": [ - [-20, per_mask_margin], - [-95, per_mask_margin], - [-98+per_corr_dtm_to_cm, 5+per_mask_margin], - [-101+per_corr_dtm_to_cm, 30+per_mask_margin], - [-104+per_corr_dtm_to_cm, 100], - [-119, 100] - ], - - "S8": [ - [-20, per_mask_margin], - [-98, per_mask_margin], - [-101+per_corr_dtm_to_cm, 5+per_mask_margin], - [-104+per_corr_dtm_to_cm, 30+per_mask_margin], - [-107+per_corr_dtm_to_cm, 100], - [-122, 100] - ] -} - -print(f' use_per_mask: {use_per_mask}') -print(f' per_mask_margin: {per_mask_margin}') -print(f'per_corr_dtm_to_cm: {per_corr_dtm_to_cm}') -print('per_mask:') -pprint(per_mask) - -# default minimum power -min_pwrs = [90, 90, 90, 90] # for PHY 1, 2, 3, 4 - -temp = args.min_pwrs.replace(" ", "") -pwrs = temp.split(",") -if len(pwrs) == 4: - min_pwrs = [int(x) for x in pwrs] - print(f'abs min pwr for each PHY: {min_pwrs}') - -packetLengths = args.pktlen.strip().split(",") -phys = args.phys.strip().split(",") -txPowers = args.txpows.strip().split(",") - -print("slaveSerial :", args.slaveSerial) -print("masterSerial :", args.masterSerial) -print("slave TRACE :", args.stp) -print("master TRACE :", args.mtp) -print("results :", args.results) -print("delay :", args.delay) -print("packetLengths :", packetLengths) -print("phys :", phys) -print("txPowers :", txPowers) -print("PER limit :", args.limit) - -# Open the results file, write the parameters -results = open(args.results, "a") -rssi_file_name = args.results.replace(".csv", "_rssi.csv") -rssi_results = open(rssi_file_name, "a") - -print("\nReset the attenuation to 30.") -if rf_switch: - set_val = 30 + float(args.loss) - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=set_val)) -sleep(1) - -# Create the BLE_hci objects -hciSlave = BLE_hci(Namespace(serialPort=args.slaveSerial, monPort=args.stp, baud=115200, id=2)) -hciMaster = BLE_hci(Namespace(serialPort=args.masterSerial, monPort=args.mtp, baud=115200, id=1)) - -ABORTED = False -perMax = 0 -RETRY = int(args.retry_limit) -need_to_setup = True # only do it at the beginning or after flash - -testing = 1 -for packetLen, phy, txPower in itertools.product(packetLengths, phys, txPowers): - - if args.attens is None: - if int(args.step) == 0 or int(args.step) == -1: - attens = [20, 70] - else: - attens = list(range(20, min_pwrs[int(phy)-1], int(args.step))) - - # Add the max attenuation - if int(args.step) != -1: - attens.append(min_pwrs[int(phy)-1]) - else: - temp = args.attens.replace(" ", "") - attens = temp.split(",") - attens = [float(x) for x in attens] - - # check if use PER mask - if use_per_mask == "1" and False: - attens = list() - for item in per_mask[phy_str[int(phy)]]: - attens.append(item[0]*(-1)) - - print(f'attens: {attens}') - - for atten in attens: - per_100 = 0 - while per_100 < RETRY: - if need_to_setup: - need_to_setup = False - - start_secs = time.time() - - print(f"{dt.now()} ----- sleep extra 2 secs\n") - sleep(2) - print(f"\n{dt.now()} ----- end of the sleep") - - print("\n\n\nReset the devices at the beginning of the test or after flash the board again.") - - print("\nslave reset") - hciSlave.resetFunc(None) - print("\nmaster reset") - hciMaster.resetFunc(None) - sleep(0.2) - - print("\nSet addresses.") - txAddr = "00:12:34:88:77:33" - rxAddr = "11:12:34:88:77:33" - print(f"\nslave set txAddr: {txAddr}") - hciSlave.addrFunc(Namespace(addr=txAddr)) - print(f"\nmaster set rxAddr: {rxAddr}") - hciMaster.addrFunc(Namespace(addr=rxAddr)) - sleep(0.2) - - print("\n----------------------------------") - print("pre-test setup") - print("----------------------------------") - - print("\nslave start advertising.") - hciSlave.advFunc(Namespace(interval="60", stats="False", connect="True", maintain=False, listen="False")) - - print("\nmaster start connection.") - hciMaster.initFunc(Namespace(interval="6", timeout="64", addr=txAddr, stats="False", maintain=False, listen="False")) - - print("\nSlave and master listenFunc") - hciSlave.listenFunc(Namespace(time=1, stats="False")) - hciMaster.listenFunc(Namespace(time=1, stats="False")) - - print("\nSlave and master dataLenFunc") - hciSlave.dataLenFunc(None) - hciMaster.dataLenFunc(None) - - print("\nSlave listenFunc") - hciSlave.listenFunc(Namespace(time=1, stats="False")) - - print("\nMaster set PHY and listenFunc.") - hciMaster.phyFunc(Namespace(phy=str(phy)), timeout=1) - hciMaster.listenFunc(Namespace(time=2, stats="False")) - - print("\nSlave and master set the txPower.") - hciSlave.txPowerFunc(Namespace(power=txPower, handle="0")) - hciMaster.txPowerFunc(Namespace(power=txPower, handle="0")) - - print("\nSlave listenFunc") - hciSlave.listenFunc(Namespace(time=1, stats="False")) - - print("\nSlave and master sinkAclFunc") - hciSlave.sinkAclFunc(None) - hciMaster.sinkAclFunc(None) - - print("\nslave listenFunc, 1 sec") - hciSlave.listenFunc(Namespace(time=1, stats="False")) - - print("\nSlave and master sendAclFunc, slave listenFunc") - hciSlave.sendAclFunc(Namespace(packetLen=str(packetLen), numPackets=str(0))) - hciMaster.sendAclFunc(Namespace(packetLen=str(packetLen), numPackets=str(0))) - hciSlave.listenFunc(Namespace(time=1, stats="False")) - - print("\nSlave and master sendAclFunc, slave listenFunc") - hciSlave.sendAclFunc(Namespace(packetLen=str(packetLen), numPackets=str(1))) - hciMaster.sendAclFunc(Namespace(packetLen=str(packetLen), numPackets=str(1))) - hciSlave.listenFunc(Namespace(time=1, stats="False")) - - start_secs = time.time() - - print('\n-----------------------------------------------------------------------------------------') - print(f'{args.chip} - packetLen: {packetLen}, phy: {phy}, atten: {atten}, txPower: {txPower}, testing point: {testing}') - print('-------------------------------------------------------------------------------------------') - - print(f"\nSet the requested attenuation: {atten}.") - if rf_switch: - set_val = atten + float(args.loss) - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=set_val)) - - sleep(0.1) - - print("\nReset the packet stats.") - hciSlave.cmdFunc(Namespace(cmd="0102FF00"), timeout=10.0) - hciMaster.cmdFunc(Namespace(cmd="0102FF00"), timeout=10.0) - - print(f"\nsleep args.delay {args.delay} secs") - sleep(int(args.delay)) - - print("\nslave read any pending events") - hciSlave.listenFunc(Namespace(time=1, stats="False")) - print("\nmaster read any pending events") - hciMaster.listenFunc(Namespace(time=1, stats="False")) - - print("\nMaster: read RSSI") - #hciMaster.cmdFunc(Namespace(cmd="010514020000")) - mst_rssi = hciMaster.rssiFunc(None) - print(f'master rssi: {mst_rssi}') - sleep(0.2) - - print("\nSlave: read RSSI") - #hciSlave.cmdFunc(Namespace(cmd="010514020000")) - slv_rssi = hciSlave.rssiFunc(None) - print(f'slave rssi: {slv_rssi}') - sleep(0.2) - - print("\nMaster collects results.") - perMaster = hciMaster.connStatsFunc(None) - - print("\nSlave collects results.") - perSlave = hciSlave.connStatsFunc(None) - - reset_master = False - if perMaster is None: - print("perMaster is None. Reset the master.") - reset_master = True - elif perMaster >= 99.99: - print(f"perMaster {perMaster}% invalid. Reset the master.") - reset_master = True - else: - print(f"\n\nperMaster : {perMaster:.2f} %") - - reset_slave = False - if perSlave is None: - print("perSlave is None. Flash the slave.") - reset_slave = True - elif perSlave >= 99.99: - print(f"perSlave {perSlave}% invalid. Flash the slave.") - reset_slave = True - else: - print(f"perSlave : {perSlave:.2f} %") - - if reset_slave or reset_master: - run_script_reset_board(args.brd1_reset) - run_script_reset_board(args.brd2_reset) - - per_100 += 1 - total_retry_times += 1 - - print("\nReset the attenuation to 30.") - if rf_switch: - set_val = 30 + float(args.loss) - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=set_val)) - - sleep(10) - - need_to_setup = True - type_string = 1 - - continue - - # Record max per - if perMaster > perMax: - perMax = perMaster - if perSlave > perMax: - perMax = perSlave - print(f"\nperMax : {perMax:.2f} %") - - break # no retry - - if per_100 >= RETRY: - print(f'Tried {per_100} times, give up.') - perMaster = 100 - perSlave = 100 - perMax = 100 - - if not use_per_mask: - ABORTED = True - - break - - # Save the results to file - results.write(f'{packetLen},{phy},{atten},{txPower},{perMaster},{perSlave},{mst_rssi},{slv_rssi}\n') - rssi_results.write(f'{packetLen},{phy},{atten},{txPower},{perMaster},{perSlave},{mst_rssi},{slv_rssi}\n') - - end_secs = time.time() - print(f'\nTotally used time for this point (secs): {(end_secs - start_secs):.0f}') - - #if testing >= RESET_CNT: - # testing = RESET_CNT - # - # hciMaster.cmdFunc(Namespace(cmd="01060403000013")) # close connection - # need_to_setup = True - #else: - # testing += 1 - testing += 1 - - -print('--------------------------------------------------------------------------------------------') -print("Reset the devices.") -hciSlave.resetFunc(None) -hciMaster.resetFunc(None) -sleep(0.1) - -results.write("\n") -results.close() -rssi_results.close() - -print("perMax: ", perMax) - -print(f'total_retry_times: {total_retry_times}') - -if float(args.limit) != 0.0: - if perMax > float(args.limit): - print("PER too high!") - sys.exit(1) - -if ABORTED: - sys.exit(2) - -sys.exit(0) diff --git a/Tools/Bluetooth/dtm_plotter.py b/Tools/Bluetooth/dtm_plotter.py deleted file mode 100644 index e101c7278f..0000000000 --- a/Tools/Bluetooth/dtm_plotter.py +++ /dev/null @@ -1,253 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ -# Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -# OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of Maxim Integrated -# Products, Inc. shall not be used except as stated in the Maxim Integrated -# Products, Inc. Branding Policy. -# -# The mere transfer of this software does not imply any licenses -# of trade secrets, proprietary technology, copyrights, patents, -# trademarks, maskwork rights, or any other form of intellectual -# property whatsoever. Maxim Integrated Products, Inc. retains all -# ownership rights. -# -############################################################################### - -# plot_per_results.py -# -# Create plots of the CI PER test results -# - -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import matplotlib.pyplot as plt -import numpy as np -import os -import pandas -import itertools - -RES_DIR = '/home/btm-ci/Workspace/ci_results/per' - -SPEC = 30 # per spec in % -phy_str = ["", "1M", "2M", "S8", "S2"] - -# Setup the command line description text -descText = """ -PER plotting tools. - -Takes .csv file arguments and creates PDF plots. - -First row in each file should be a header row with the following columns: -packetLen,phy,atten,txPower,perMaster,perSlave -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser( - description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('csvFile', help='csv file containing PER data.') -parser.add_argument('desc', help='Description of data.') -parser.add_argument('basename', help='PDF file base name.') - -args = parser.parse_args() - -print("csvFile :", args.csvFile) - -csv_full_path = f'{args.csvFile}' -csv_full_path = os.path.expanduser(csv_full_path) -print(f'csv full: {csv_full_path}') - -pdf_file_name = args.csvFile.replace('.csv', '.pdf') -pdf_file_name = os.path.expanduser(pdf_file_name) - -# Create the plots -phys = [] -lens = [] -attens = [] -txPowers = [] - -df = pandas.read_csv(csv_full_path,comment='#') -lens = df["packetLen"].unique() -phys = df["phy"].unique() -attens = df["atten"].unique() -txPowers = df["txPower"].unique() - -print("lens :", lens) -print("phys :", phys) -print("attens :", attens) -print("txPowers :", txPowers) - -print("--------------------------------------------------------------------------------------------") -row = len(lens) * len(txPowers) -col = len(phys) -print(f'row: {row}, col: {col}') - -if row > 1 or col > 1: - fig, axs = plt.subplots(row, col) - - name = pdf_file_name.split('/')[-1] - board = name.split('.')[0].replace('.pdf', '').upper() - fig.suptitle(f'Packet Error Rate vs Receive Power\n{board}', fontsize=10) - - if axs.ndim == 1: - plt.subplots_adjust(top=0.83, hspace=0.5) - else: - fig.tight_layout() - plt.subplots_adjust(top=0.80, bottom=0.1, hspace=0.5) - - case = 0 - for packetLen, phy, txPower in itertools.product(lens, phys, txPowers): - print(f'CASE: {case + 1}') - col = case % len(phys) - row = int(case / len(phys)) - print(f'row: {row}, col: {col}') - - - - - # Create line plot with atten to perSlave - print("len :", packetLen) - print("phy :", phy) - print("txPower :", txPower) - tempDf = df.loc[(df['packetLen'] == packetLen) & ( - df['phy'] == phy) & (df['txPower'] == txPower)] - - name = pdf_file_name.split('/')[-1] - board = name.split('_')[2].replace('.pdf', '').upper() - fig.suptitle(f'Packet Error Rate vs Receive Power\n{board}', fontsize=10) - fig.tight_layout() - plt.subplots_adjust(bottom=0.1) - - title = f'packet len: {packetLen}\nphy: {phy_str[phy]}\ntxPower:{txPower}' - if axs.ndim == 1: - axs[row].set_title(title, fontdict={'fontsize': 6, 'fontweight': 'medium'}) - axs[row].set_xlabel('Receive Power, dBm', fontdict={"fontsize": 5}) - axs[row].set_ylabel('PER (%)', fontdict={"fontsize": 5}) - axs[row].tick_params(axis='both', which='major', labelsize=4) - axs[row].plot(tempDf["atten"], tempDf["perSlave"], "-x", linewidth=0.25, ms=0.5) - axs[row].axhline(y=SPEC, color='r', linestyle=':', linewidth=0.5) - else: - axs[row, col].set_title(title, fontdict={'fontsize': 6, 'fontweight': 'medium'}) - axs[row, col].set_xlabel('Receive Power, dBm', fontdict={"fontsize": 5}) - axs[row, col].set_ylabel('PER (%)', fontdict={"fontsize": 5}) - axs[row, col].tick_params(axis='both', which='major', labelsize=4) - axs[row, col].plot(tempDf["atten"], tempDf["perSlave"], "-x", linewidth=0.25, ms=0.5) - axs[row, col].axhline(y=SPEC, color='r', linestyle=':', linewidth=0.5) - - a = list(tempDf['atten']) - p = list(tempDf['perSlave']) - for i in range(len(a)): - if p[i] > SPEC: - print(f'{a[i]}, {p[i]}') - if axs.ndim == 1: - axs[row].axvline(x=a[i], color='r', linestyle=':', linewidth=0.5) - axs[row].text(a[i], p[i], f' {p[i]}% @ {a[i]} dBm', horizontalalignment='left', - verticalalignment='center', fontsize=3) - else: - axs[row, col].axvline(x=a[i], color='r', linestyle=':', linewidth=0.5) - axs[row, col].text(a[i], p[i], f' {p[i]}% @ {a[i]} dBm', horizontalalignment='left', - verticalalignment='center', fontsize=3) - break - - # note - fig.text(.5, .01, "Run using DTM on Channel 0", ha='center', - fontdict={"fontsize": 5}) - - print() - case += 1 - - saved_file = pdf_file_name - print(saved_file) - - plt.savefig(saved_file) - - # save to a png file - png_file = pdf_file_name.replace(".pdf", ".png") - print(f'Save to file: {png_file}.') - plt.savefig(png_file) - # plt.show() - -# ------------------------------------------------------------------------------------------------- -# Save each test into separated PDF files. -# ------------------------------------------------------------------------------------------------- -case = 0 -for packetLen, phy, txPower in itertools.product(lens, phys, txPowers): - print(f'CASE: {case + 1}') - - # Create line plot with atten to perSlave - print("len :", packetLen) - print("phy :", phy) - print("txPower :", txPower) - tempDf = df.loc[(df['packetLen'] == packetLen) & ( - df['phy'] == phy) & (df['txPower'] == txPower)] - - name = pdf_file_name.split('/')[-1] - - board = name.split('.')[0].replace('.pdf', '').upper() - - fig = plt.figure() - ax1 = fig.add_axes((0.1, 0.2, 0.8, 0.7)) - - title = f'Packet Error Rate vs Receive Power\n'\ - f'\n{board}\n'\ - f'Packet length: {packetLen}, PHY: {phy_str[phy]}, txPower:{txPower}' - ax1.set_title(title) - ax1.set_xlabel('Receive Power, dBm') - ax1.set_ylabel('PER, Percentage') - - ax1.plot(tempDf["atten"], tempDf["perSlave"], "-x", linewidth=1, ms=2) - - a = list(tempDf['atten']) - p = list(tempDf['perSlave']) - plt.axhline(y=SPEC, color='r', linestyle=':', linewidth=0.75) - for i in range(len(a)): - if p[i] > SPEC: - print(f'{a[i]}, {p[i]}') - plt.axvline(x=a[i], color='r', linestyle=':', linewidth=0.75) - plt.text(a[i], p[i], f' {p[i]}% @ {a[i]} dBm', horizontalalignment='left', - verticalalignment='center', fontsize=8) - break - - # resize the figure to match the aspect ratio of the Axes - fig.set_size_inches(7, 8, forward=True) - #fig.text(.5, .10, args.desc, ha='center', fontdict={"fontsize": 12}) - fig.text(.5, .05, "Run using DTM (Channel 0).", ha='center', - fontdict={"fontsize": 12}) - - filename = csv_full_path.replace('.csv', '') - filename += f'_{packetLen}_{phy_str[phy]}_{txPower}.pdf' - print(f'Save to file: {filename}.') - plt.savefig(filename) - plt.show() - # save to a png file - png_file = filename.replace(".pdf", ".png") - print(f'Save to file: {png_file}.') - plt.savefig(png_file) - - print() - case += 1 - -print("DONE!") - -sys.exit(0) diff --git a/Tools/Bluetooth/dtm_sweep.py b/Tools/Bluetooth/dtm_sweep.py deleted file mode 100644 index 0637fca5fc..0000000000 --- a/Tools/Bluetooth/dtm_sweep.py +++ /dev/null @@ -1,253 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## dtm_sweep.py - # - # Sweep connection parameters. - # - # Ensure that both targets are built with BT_VER := 9 - # - -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import itertools -from mini_RCDAT_USB import mini_RCDAT_USB -from BLE_hci import BLE_hci -from BLE_hci import Namespace -import socket -import time - -if socket.gethostname() == "wall-e": - rf_switch = True -else: - rf_switch = False - -# Setup the command line description text -descText = """ -DTM sweep. - -This tool uses a Mini Circuits RCDAT to control attenuation between two devices -running DTM software. The Packet error rate (PER) of the master will be collected by setting the slave device in tx test mode and the master in rx test mode. -A vendor specific command is sent which sets the total number of packets which shoule be transmitted. -The total number of packets transmitted will be compared to the number of packtes received and the PER will be -calculated as numPacketsReceived/numPacketsTransmitted * 100 - -IMPORTANT: -The tx test command is vendor specific and is only guarenteed to work on MAX32 BLE devices running the latest stack. -The command is also supported by Nordic SoCs -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('slaveSerial',help='Serial port for slave device') -parser.add_argument('masterSerial',help='Serial port for master device') -parser.add_argument('results',help='CSV files to store the results') -parser.add_argument('-d', '--delay', default=5,help='Number of seconds to wait before ending the test') -parser.add_argument('-l', '--limit', default=0,help='PER limit for return value') -parser.add_argument('-p', '--phys', default="1",help='PHYs to test with, comma separated list with 1-4.') -parser.add_argument('-c', '--channel', default="0", help="Test channel, 0-39") -parser.add_argument('-t', '--txpows', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-a', '--attens', help='Attenuation settings to use, comma separated list.') -parser.add_argument('-s', '--step', default=10, help='Attenuation sweep step size in dBm.') -parser.add_argument('-e', '--pktlen', default="250", help="packet length, comma separated list.") - -parser.add_argument('-n', '--numpkt', default='5000',help='Number of packets in test.') - -parser.add_argument('--mtp', default="", help="master TRACE serial port") -parser.add_argument('--stp', default="", help="slave TRACE serial port") - -args = parser.parse_args() -print(args) - -print("--------------------------------------------------------------------------------------------") -packetLengths = args.pktlen.strip().split(",") -numPackets = args.numpkt.strip().split(",") -phys = args.phys.strip().split(",") -txPowers = args.txpows.strip().split(",") -chan = args.channel.strip().split(",") - -if args.attens is None: - if int(args.step) == 0: - attens = [20, 70] - else: - attens = list(range(20, 90, int(args.step))) - - # Add the max attenuation - attens.append(90) -else: - attens = args.attens.strip().split(",") - -print("slaveSerial :", args.slaveSerial) -print("masterSerial :", args.masterSerial) -print("results :", args.results) -print("delay :", args.delay) -print("packetLengths :", packetLengths) -print("numPackets :", numPackets) -print("phys :", phys) -print("attens :", attens) -print("txPowers :", txPowers) -print("Channel :", chan) -print("PER limit :", args.limit) - -# Open the results file, write the parameters -results = open(args.results, "a") -if 0: - results.write("# slaveSerial : "+str(args.slaveSerial)+"\n") - results.write("# masterSerial : "+str(args.masterSerial)+"\n") - results.write("# results : "+str(args.results)+"\n") - results.write("# delay : "+str(args.delay)+"\n") - results.write("# packetLengths : "+str(packetLengths)+"\n") - results.write("# numPackets : "+str(numPackets)+"\n") - results.write("# phys : "+str(phys)+"\n") - results.write("# attens : "+str(attens)+"\n") - results.write("# txPower : "+str(txPower)+"\n") - results.write("# Channel : "+str(chan)+"\n") - results.write("# PER limit : "+str(args.limit)+"\n") - - # Write the header line - results.write("packetLen,numPkt,phy,atten,txPower,channel,perMaster,perSlave\n") - -# Create the BLE_hci objects -hciSlave = BLE_hci(Namespace(serialPort=args.slaveSerial, monPort=args.stp, baud=115200, id=2)) -hciMaster = BLE_hci(Namespace(serialPort=args.masterSerial, monPort=args.mtp, baud=115200, id=1)) - -perMax = 0 - -for packetLen, numPkt, phy, txPower, chan in itertools.product(packetLengths, numPackets, phys, txPowers, chan): - per_100 = 0 - for atten in attens: - RETRY = 2 - while per_100 < RETRY: - start_secs = time.time() - print(f'\n---------------------------------------------------------------------------------------') - print(f'packetLen: {packetLen}, numPackets: {numPkt}, phy: {phy}, atten: {atten}, txPower: {txPower}, Channel: {chan}\n') - - print("Set the requested attenuation.") - if rf_switch: - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=atten)) - sleep(0.1) - - print("\nReset the devices.") - hciSlave.resetFunc(None) - hciMaster.resetFunc(None) - sleep(0.1) - - print("\nSet the PHY.") - hciMaster.phyFunc(Namespace(phy=phy), timeout=1) - - print("\nSet the txPower.") - hciSlave.txPowerFunc(Namespace(power=txPower, handle="0")) - hciMaster.txPowerFunc(Namespace(power=txPower, handle="0")) - - - print('--------------') - print("\nSet slave to RX.") - print(chan) - hciSlave.rxTestFunc(Namespace(channel=chan, phy=phy)) - print("\nSet master to TX, start test.") - hciMaster.txTestVSFunc(Namespace(channel=chan, phy=phy, packetLength=packetLen, numPackets=numPkt,payload=0)) - print(f"\nWait {args.delay} secs for the DTM Test to complete.") - sleep(int(args.delay)) - - print("\nEnd test.") - hciMaster.endTestFunc(None) - perSlave = hciSlave.endTestFunc(None) / int(numPkt) * 100 - - print('--------------') - print("\nReset the devices.") - hciSlave.resetFunc(None) - hciMaster.resetFunc(None) - sleep(0.1) - print(chan) - print("\nSet master to RX.") - hciMaster.rxTestFunc(Namespace(channel=chan, phy=phy)) - print("\nSet slave to TX, start test.") - hciSlave.txTestVSFunc(Namespace(channel=chan, phy=phy, packetLength=packetLen, numPackets=numPkt,payload=0)) - - print(f"\nWait {args.delay} secs for the DTM Test to complete.") - sleep(int(args.delay)) - - print("\nEnd test.") - hciSlave.endTestFunc(None) - perMaster = hciMaster.endTestFunc(None) / int(numPkt) * 100 - - print("\nCollect results.") - print("perMaster : ", perMaster) - print("perSlave : ", perSlave) - - if perMaster is None or perSlave is None: - per_100 += 1 - print(f'Retry: {per_100}') - continue - - # Record max per - if perMaster > perMax: - perMax = perMaster - if perSlave > perMax: - perMax = perSlave - print("perMax : ", perMax) - - break - - if per_100 >= RETRY: - print(f'Tried {per_100} times, give up.') - perMaster = 100 - perSlave = 100 - perMax = 100 - - # Save the results to file - results.write(str(packetLen)+","+str(numPkt)+","+str(phy)+",-"+str(atten)+","+str(txPower)+","+str(chan)+","+str(perMaster)+","+str(perSlave)+"\n") - end_secs = time.time() - print(f'\nUsed {(end_secs - start_secs):.0f} seconds.') - -print('--------------------------------------------------------------------------------------------') -print("Reset the devices.") -hciSlave.resetFunc(None) -hciMaster.resetFunc(None) -sleep(0.1) - -results.write("\n") -results.close() - -print("perMax: ", perMax) - -if float(args.limit) != 0.0: - if perMax > float(args.limit): - print("PER too high!") - sys.exit(1) - -sys.exit(0) diff --git a/Tools/Bluetooth/dtm_sweep_vs.py b/Tools/Bluetooth/dtm_sweep_vs.py deleted file mode 100644 index 1aca86278a..0000000000 --- a/Tools/Bluetooth/dtm_sweep_vs.py +++ /dev/null @@ -1,322 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## dtm_sweep.py - # - # Sweep connection parameters. - # - # Ensure that both targets are built with BT_VER := 9 - # - -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import itertools -from mini_RCDAT_USB import mini_RCDAT_USB -from BLE_hci import BLE_hci -from BLE_hci import Namespace -from termcolor import colored -import math - -verbose=True - -TRACE_INFO = 2 -TRACE_WARNING = 1 -TRACE_ERROR = 0 - -traceLevel = TRACE_INFO - -def printTrace(label, msg,callerLevel, color='white'): - if callerLevel <= traceLevel: - print(colored(label + ": ", color), colored(msg, color)) - -def printWarning(msg): - printTrace('Warning', msg, TRACE_WARNING, 'yellow') - -def printInfo(msg): - printTrace('Info', msg, TRACE_INFO, 'green') - -def printError(msg): - printTrace('Error', msg, TRACE_ERROR, 'red') - - -LL_CRC_LEN = 3 # CRC length. -LL_AA_LEN = 4 # Access address length. -LL_PREAMBLE_LEN_1M = 1 # Preamble length (LE 1M PHY) -LL_PREAMBLE_LEN_2M = 2 # Preamble length (LE 2M PHY) -LL_PREAMBLE_LEN_CODED_BITS = 10 # Preamble length (LE Coded PHY) -LL_CI_LEN_BITS = 2 # Coding indicator length (LE Coded PHY) -LL_TERM1_LEN_BITS = 3 # TERM1 length (LE Coded PHY) -LL_TERM2_LEN_BITS = 3 # TERM2 length (LE Coded PHY) -LL_BLE_BIT_PER_US = 1 # BLE PHY rate -LL_BLE_US_PER_BYTE_1M = 8 # BLE PHY speed (LE 1M PHY) -LL_BLE_US_PER_BYTE_2M = 4 # BLE PHY speed (LE 2M PHY) -LL_BLE_US_PER_BYTE_CODED_S8 = 64 # BLE PHY speed (LE Coded PHY, S=8) -LL_BLE_US_PER_BIT_CODED_S8 = 8 # BLE PHY speed (LE Coded PHY, S=8) -LL_BLE_US_PER_BYTE_CODED_S2 = 16 # BLE PHY speed (LE Coded PHY, S=2) -LL_BLE_US_PER_BIT_CODED_S2 = 2 # BLE PHY speed (LE Coded PHY, S=2) -LL_DTM_HDR_LEN = 2 # Direct Test Mode PDU header length - -# Calculate the duration of the test -def calcTestTime(packetLen, phy, numPackets): - - packetLen=int(packetLen) - phy=int(phy) - numPackets=int(numPackets) - totalTime = 0 - - # 1: 1M - # 2: 2M - # 3: S8 - # 4: S2 - - # Calculate the length of each packet - if (phy == 3 or phy == 4): - totalTime = (LL_PREAMBLE_LEN_CODED_BITS + (LL_AA_LEN * 8) + LL_CI_LEN_BITS + LL_TERM1_LEN_BITS) * LL_BLE_US_PER_BIT_CODED_S8 - if (phy == 4): - totalTime = totalTime + ((LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_CODED_S2) + (LL_TERM2_LEN_BITS * LL_BLE_US_PER_BIT_CODED_S2) - else: - totalTime = totalTime + ((LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_CODED_S8) + (LL_TERM2_LEN_BITS * LL_BLE_US_PER_BIT_CODED_S8) - - elif (phy == 2): - totalTime = (LL_PREAMBLE_LEN_2M + LL_AA_LEN + LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_2M - else: - totalTime = (LL_PREAMBLE_LEN_1M + LL_AA_LEN + LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_1M - - # Add the inter frame spacing - totalTime = math.ceil((totalTime + 249) / 625) * 625 - - # Multiply by the number of packets we're sending - totalTime = totalTime * numPackets - - # Add a constant 10 ms - totalTime = totalTime + 10000 - - return totalTime - - - -# Setup the command line description text -descText = """ -Direct Test Mode Sweep - -This tool uses a Mini Circuits RCDAT to control attenuation between two devices -running DTM software. The Packet error rate (PER) of the slave will be collected by setting the master device in tx test mode and the slave in rx test mode. -A vendor specific command will be sent to end the test. -The total number of packets transmitted will be compared to the number of packtes received and the PER will be -calculated as numPacketsReceived/numPacketsTransmitted * 100 - -IMPORTANT: The end test command is vendor specific, -meaning it will only work with MAX32 BLE devices using the latest stack. - -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('slaveSerial',help='Serial port for slave device') -parser.add_argument('masterSerial',help='Serial port for master device') -parser.add_argument('results',help='CSV files to store the results') -parser.add_argument('-d', '--delay', default=5,help='Number of seconds to wait before ending the test') -parser.add_argument('-n', '--numPackets', default=0,help='Number of packets to send per test') -parser.add_argument('-l', '--limit', default=0,help='PER limit for return value') -parser.add_argument('-p', '--phys', default="1",help='PHYs to test with, comma separated list with 1-4.') -parser.add_argument('-t', '--txpows', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-a', '--attens', help='Attenuation settings to use, comma separated list.') -parser.add_argument('-da', '--disable-atten', action='store_true',help='Disbale Attenuator For Testing Purposes') -parser.add_argument('-cl', '--channel-loss', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-as', '--atten-step', default="10",help='Attenuation Step Size.') - - -args = parser.parse_args() -print(args) - -packetLengths = [250] -phys = args.phys.strip().split(",") -txPowers = args.txpows.strip().split(",") -numPackets = args.numPackets - - - - - -if(args.attens == None): - attens = list(range(20,90,int(args.atten_step))) - - # Add the max attenuation - attens.append(90) -else: - attens = args.attens.strip().split(",") - - -if args.disable_atten: - attens=[0] - printInfo('Disabling Attenuator') - disableAttenuator = True -else: - printInfo('Attenuator active') - disableAttenuator = False - -print("slaveSerial :",args.slaveSerial) -print("masterSerial :",args.masterSerial) -print("results :",args.results) -print("delay :",args.delay) -print("numPackets :",numPackets) -print("packetLengths :",packetLengths) -print("phys :",phys) -print("attens :",attens) -print("txPowers :",txPowers) -print("PER limit :",args.limit) - -# Open the results file, write the parameters -results = open(args.results, "a") -results.write("# slaveSerial : "+str(args.slaveSerial)+"\n") -results.write("# masterSerial : "+str(args.masterSerial)+"\n") -results.write("# results : "+str(args.results)+"\n") -results.write("# delay : "+str(args.delay)+"\n") -results.write("# numPackets : "+str(numPackets)+"\n") -results.write("# packetLengths : "+str(packetLengths)+"\n") -results.write("# phys : "+str(phys)+"\n") -results.write("# attens : "+str(attens)+"\n") -results.write("# PER limit : "+str(args.limit)+"\n") - -# Write the header line -results.write("packetLen,phy,atten,txPower,perMaster,perSlave\n") - -assert(args.slaveSerial != args.masterSerial) - -# Create the BLE_hci objects -hciSlave = BLE_hci(Namespace(serialPort=args.slaveSerial, monPort="", baud=115200)) -hciMaster = BLE_hci(Namespace(serialPort=args.masterSerial, monPort="", baud=115200)) - -perMax = 0 - -# Reset the devices -hciSlave.resetFunc(None) -hciMaster.resetFunc(None) -sleep(0.1) - -for packetLen,phy,txPower in itertools.product(packetLengths,phys,txPowers): - - # # Reset the attenuation - if not disableAttenuator: - print('Setting attenuation') - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=30)) - sleep(0.1) - - # Set the TX Power - printInfo('Setting TX Power') - hciSlave.txPowerFunc(Namespace(power=txPower, handle="0")) - hciMaster.txPowerFunc(Namespace(power=txPower, handle="0")) - - for atten in attens: - print(packetLen," ",phy," ",atten," ",txPower) - - # Set the attenuation - if not disableAttenuator: - printInfo(f'Setting attenuation {atten}') - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=atten)) - sleep(0.1) - - hciMaster.resetFunc(None) - hciSlave.resetFunc(None) - sleep(0.1) - - #start the test - hciSlave.rxTestFunc(Namespace(channel=0, phy=phy)) - hciMaster.txTestVSFunc(Namespace(channel=0, phy=phy,payload=0,packetLength=packetLen,numPackets=numPackets)) - - - - if(numPackets == 0): - sleep(int(args.delay)) - else: - # Sleep based on the amount of time it takes to complete the test - # Convert us to seconds - sleep(calcTestTime(packetLen, phy, numPackets) / 1000000) - - stats = hciMaster.endTestVSFunc(Namespace(noPrint=True)) - packetsReceived = hciSlave.endTestFunc(Namespace(noPrint=True)) - - - packetsTransmitted = 0 - perMaster = 0 - if(numPackets == 0): - if stats is not None: - packetsTransmitted = stats['txData'] - - if packetsTransmitted != 0: - perSlave = round(100 * (1 - packetsReceived / packetsTransmitted), 2) - - else: - printWarning('End Test stats returned invalid data. (Packets Transmitted = 0) PER rate being set to 100') - perSlave = 100 - else: - perSlave = round(100 * (1 - packetsReceived / int(numPackets)), 2) - - if(packetsReceived == 0): - printWarning('Did not receive any packets') - - if(perSlave >= 50.0): - printWarning('Unusually high PER ', perSlave) - - if(perSlave > perMax): - perMax = perSlave - - # Save the results to file - results.write(str(packetLen)+","+str(phy)+",-"+str(atten+float(args.channel_loss))+","+str(txPower)+","+str(perMaster)+","+str(perSlave)+"\n") - -# Reset the devices -hciSlave.resetFunc(None) -hciMaster.resetFunc(None) -sleep(0.1) - -results.write("\n") -results.close() -# Set the attenuation -if not disableAttenuator: - printInfo(f'Setting attenuation {10}') - mini_RCDAT = mini_RCDAT_USB(Namespace(atten=10)) - sleep(0.1) - - -print("perMax: ",perMax) - -if(float(args.limit) != 0.0): - if(perMax > float(args.limit)): - print("PER too high!") - sys.exit(1) - -sys.exit(0) diff --git a/Tools/Bluetooth/dtm_sweep_vs_allCh.py b/Tools/Bluetooth/dtm_sweep_vs_allCh.py deleted file mode 100644 index f67010b37c..0000000000 --- a/Tools/Bluetooth/dtm_sweep_vs_allCh.py +++ /dev/null @@ -1,439 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## dtm_sweep.py - # - # Sweep connection parameters. - # - # Ensure that both targets are built with BT_VER := 9 - # - -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep -import itertools - - -## mc_rcdat_6000 can be found in msdk-test-and measurenent -## mini_rcdat_usb.py can be used to sub this -from mc_rcdat_6000 import McRcdat9000 - - - -from BLE_hci import BLE_hci -from BLE_hci import Namespace -from termcolor import colored -import math -import numpy as np -import pandas as pd -import seaborn as sns -import matplotlib.ticker as ticker -from matplotlib.colors import LogNorm, Normalize -from matplotlib.ticker import MaxNLocator -import matplotlib.pyplot as plt -from matplotlib import colors,cm -from matplotlib.colors import ListedColormap - -verbose=True - -TRACE_INFO = 2 -TRACE_WARNING = 1 -TRACE_ERROR = 0 - -traceLevel = TRACE_INFO - -def printTrace(label, msg,callerLevel, color='white'): - if callerLevel <= traceLevel: - print(colored(label + ": ", color), colored(msg, color)) - -def printWarning(msg): - printTrace('Warning', msg, TRACE_WARNING, 'yellow') - -def printInfo(msg): - printTrace('Info', msg, TRACE_INFO, 'green') - -def printError(msg): - printTrace('Error', msg, TRACE_ERROR, 'red') - - -LL_CRC_LEN = 3 # CRC length. -LL_AA_LEN = 4 # Access address length. -LL_PREAMBLE_LEN_1M = 1 # Preamble length (LE 1M PHY) -LL_PREAMBLE_LEN_2M = 2 # Preamble length (LE 2M PHY) -LL_PREAMBLE_LEN_CODED_BITS = 10 # Preamble length (LE Coded PHY) -LL_CI_LEN_BITS = 2 # Coding indicator length (LE Coded PHY) -LL_TERM1_LEN_BITS = 3 # TERM1 length (LE Coded PHY) -LL_TERM2_LEN_BITS = 3 # TERM2 length (LE Coded PHY) -LL_BLE_BIT_PER_US = 1 # BLE PHY rate -LL_BLE_US_PER_BYTE_1M = 8 # BLE PHY speed (LE 1M PHY) -LL_BLE_US_PER_BYTE_2M = 4 # BLE PHY speed (LE 2M PHY) -LL_BLE_US_PER_BYTE_CODED_S8 = 64 # BLE PHY speed (LE Coded PHY, S=8) -LL_BLE_US_PER_BIT_CODED_S8 = 8 # BLE PHY speed (LE Coded PHY, S=8) -LL_BLE_US_PER_BYTE_CODED_S2 = 16 # BLE PHY speed (LE Coded PHY, S=2) -LL_BLE_US_PER_BIT_CODED_S2 = 2 # BLE PHY speed (LE Coded PHY, S=2) -LL_DTM_HDR_LEN = 2 # Direct Test Mode PDU header length -NUM_CHANNELS = 40 # Number of testing channels - -# Calculate the duration of the test -def calcTestTime(packetLen, phy, numPackets): - - packetLen=int(packetLen) - phy=int(phy) - numPackets=int(numPackets) - totalTime = 0 - - # 1: 1M - # 2: 2M - # 3: S8 - # 4: S2 - - # Calculate the length of each packet - if (phy == 3 or phy == 4): - totalTime = (LL_PREAMBLE_LEN_CODED_BITS + (LL_AA_LEN * 8) + LL_CI_LEN_BITS + LL_TERM1_LEN_BITS) * LL_BLE_US_PER_BIT_CODED_S8 - if (phy == 4): - totalTime = totalTime + ((LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_CODED_S2) + (LL_TERM2_LEN_BITS * LL_BLE_US_PER_BIT_CODED_S2) - else: - totalTime = totalTime + ((LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_CODED_S8) + (LL_TERM2_LEN_BITS * LL_BLE_US_PER_BIT_CODED_S8) - - elif (phy == 2): - totalTime = (LL_PREAMBLE_LEN_2M + LL_AA_LEN + LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_2M - else: - totalTime = (LL_PREAMBLE_LEN_1M + LL_AA_LEN + LL_DTM_HDR_LEN + packetLen + LL_CRC_LEN) * LL_BLE_US_PER_BYTE_1M - - # Add the inter frame spacing - totalTime = math.ceil((totalTime + 249) / 625) * 625 - - # Multiply by the number of packets we're sending - totalTime = totalTime * numPackets - - # Add a constant 10 ms - totalTime = totalTime + 10000 - - return totalTime - -def plottable_3d_info(df: pd.DataFrame): - """ - Transform Pandas data into a format that's compatible with - Matplotlib's surface and wireframe plotting. - """ - index = df.index - columns = df.columns - - x, y = np.meshgrid(np.arange(len(columns)), np.arange(len(index))) - z = np.array([[df[c][i] for c in columns] for i in index]) - - xticks = dict(ticks=np.arange(len(columns)), labels=columns) - yticks = dict(ticks=np.arange(len(index)), labels=index) - - return x, y, z, xticks, yticks - -MAP_COLORS = [[181/255.0, 213/255.0, 227/255.0], - [66/255.0, 131/255.0, 231/255.0], - [128/255.0, 251/255.0, 96/255.0], - [58/255.0, 125/255.0, 39/255.0], - [254/255.0, 255/255.0, 84/255.0], - [241/255.0, 167/255.0, 61/255.0], - [233/255.0, 53/255.0, 40/255.0], - [126/255.0, 30/255.0, 22/255.0], - [0/255.0, 0/255.0, 0/0255.0]] - -def create_heatmap(df, annot=False): - cmap = ListedColormap(MAP_COLORS, name='adi-heatmap') - - bounds = [0.0, 0.0001, 0.1, 0.3, 1, 3, 10, 30, 99.9999, 105] - norm = colors.BoundaryNorm(bounds, cmap.N) - hm = sns.heatmap(df, cmap=cmap, norm=norm, annot=annot, xticklabels=True, linecolor=[237/255.0, 237/255.0, 237/255.0, 0.2], linewidth=0.35) - - old_ticks = hm.collections[0].colorbar.get_ticks() - new_ticks = [] - - for i in range(len(old_ticks) - 1): - new_ticks.append(old_ticks[i] + (old_ticks[i+1] - old_ticks[i])/2) - - labels = ['0%', '0%-0.1%', '0.1%-0.3%', '0.3%-1%', '1%-3%', '3%-10%', '10%-30%', '30%-100%', '100%'] - hm.collections[0].colorbar.set_ticks(new_ticks, labels=labels) - hm.collections[0].colorbar.ax.set_ylabel('Packet Error Rate') - hm.set(xlabel="Channels", ylabel="Rx Power [dBm]", title="Rx Sensitivity -- No interference") - - return hm - - -# Setup the command line description text -descText = """ -Direct Test Mode Sweep - -This tool uses a Mini Circuits RCDAT to control attenuation between two devices -running DTM software. The Packet error rate (PER) of the slave will be collected by setting the master device in tx test mode and the slave in rx test mode. -A vendor specific command will be sent to end the test. -The total number of packets transmitted will be compared to the number of packtes received and the PER will be -calculated as numPacketsReceived/numPacketsTransmitted * 100 - -IMPORTANT: The end test command is vendor specific, -meaning it will only work with MAX32 BLE devices using the latest stack. - -""" - -# Parse the command line arguments -parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) -parser.add_argument('slaveSerial',help='Serial port for slave device') -parser.add_argument('masterSerial',help='Serial port for master device') -parser.add_argument('results',help='CSV files to store the results') -parser.add_argument('-d', '--delay', default=0.5,help='Number of seconds to wait before ending the test') -parser.add_argument('-n', '--numPackets', default=0,help='Number of packets to send per test') -parser.add_argument('-l', '--limit', default=0,help='PER limit for return value') -parser.add_argument('-p', '--phys', default="1",help='PHYs to test with, comma separated list with 1-4.') -parser.add_argument('-t', '--txpows', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-a', '--attens', help='Attenuation settings to use, comma separated list.') -parser.add_argument('-da', '--disable-atten', action='store_true',help='Disbale Attenuator For Testing Purposes') -parser.add_argument('-cl', '--channel-loss', default="0",help='TX powers to test with, comma separated list.') -parser.add_argument('-as', '--atten-step', default="20",help='Attenuation Step Size.') - - -args = parser.parse_args() -print(args) - -packetLengths = [250] -phys = args.phys.strip().split(",") -txPowers = args.txpows.strip().split(",") -numPackets = args.numPackets - - - - - -if(args.attens == None): - attens = list(range(20,90,int(args.atten_step))) - - # Add the max attenuation - attens.append(90) -else: - attens = args.attens.strip().split(",") - - -if args.disable_atten: - attens=[0] - printInfo('Disabling Attenuator') - disableAttenuator = True -else: - printInfo('Attenuator active') - disableAttenuator = False - -print("slaveSerial :",args.slaveSerial) -print("masterSerial :",args.masterSerial) -print("results :",args.results) -print("delay :",args.delay) -print("numPackets :",numPackets) -print("packetLengths :",packetLengths) -print("phys :",phys) -print("attens :",attens) -print("txPowers :",txPowers) -print("PER limit :",args.limit) - - -# Open the results file, write the parameters -results = args.results -results = open(args.results, "w") -results.write("# slaveSerial : "+str(args.slaveSerial)+"\n") -results.write("# masterSerial : "+str(args.masterSerial)+"\n") -results.write("# results : "+str(args.results)+"\n") -results.write("# delay : "+str(args.delay)+"\n") -results.write("# numPackets : "+str(numPackets)+"\n") -results.write("# packetLengths : "+str(packetLengths)+"\n") -results.write("# phys : "+str(phys)+"\n") -results.write("# attens : "+str(attens)+"\n") -results.write("# PER limit : "+str(args.limit)+"\n") -# Write the header line - -results.close() - -mini_RCDAT = McRcdat9000() - - -results_df = pd.DataFrame() - -assert(args.slaveSerial != args.masterSerial) - -# Create the BLE_hci objects -hciSlave = BLE_hci(Namespace(serialPort=args.slaveSerial, monPort="", baud=115200)) -hciMaster = BLE_hci(Namespace(serialPort=args.masterSerial, monPort="", baud=115200)) - -perMax = 0 - -# Reset the devices -hciSlave.resetFunc(None) -hciMaster.resetFunc(None) -sleep(0.1) -for ch in range(NUM_CHANNELS): - temp_results = [] - print('Channel Num', ch) - print(f'{ch / NUM_CHANNELS *100}% complete') - printInfo('Setting TX Power') - hciSlave.txPowerFunc(Namespace(power=0, handle="0")) - hciMaster.txPowerFunc(Namespace(power=0, handle="0")) - - for packetLen,phy,txPower in itertools.product(packetLengths,phys,txPowers): - - - - # Set the TX Power - - - for atten in attens: - print(packetLen," ",phy," ",atten," ",txPower) - - # Set the attenuation - if not disableAttenuator: - mini_RCDAT.setAttenuation(atten) - - - # sleep(0.1) - - #start the test - printInfo("RX Starting") - hciSlave.rxTestFunc(Namespace(channel=ch, phy=phy)) - printInfo('TX Starting') - hciMaster.txTestVSFunc(Namespace(channel=ch, phy=phy,payload=0,packetLength=packetLen,numPackets=numPackets)) - - - - if(numPackets == 0): - sleep(int(args.delay)) - else: - # Sleep based on the amount of time it takes to complete the test - # Convert us to seconds - sleep(calcTestTime(packetLen, phy, numPackets) / 1000000) - - printInfo('Endding master') - stats = hciMaster.endTestVSFunc(Namespace(noPrint=True)) - printInfo('Edning slave') - packetsReceived = hciSlave.endTestFunc(Namespace(noPrint=True)) - - - packetsTransmitted = 0 - perMaster = 0 - - if(numPackets == 0): - if stats is not None: - packetsTransmitted = stats['txData'] - - if packetsTransmitted != 0: - perSlave = round(100 * (1 - packetsReceived / packetsTransmitted), 2) - - else: - printWarning('End Test stats returned invalid data. (Packets Transmitted = 0) PER rate being set to 100') - perSlave = 100 - else: - perSlave = round(100 * (1 - packetsReceived / int(numPackets)), 2) - - if(packetsReceived == 0): - printWarning('Did not receive any packets') - - if perSlave >= 50.0: - printWarning(f'Unusually high PER {perSlave}') - - - if(perSlave > perMax): - perMax = perSlave - elif(perSlave < 0): - perSlave = 0 - - # Gather the results - temp_results.append(perSlave) - - - # Save the results to dataframe - - - col_name = f'ch{ch}' - results_df[col_name] = temp_results - - - - print("perMax: ",perMax) - - if(float(args.limit) != 0.0): - if(perMax > float(args.limit)): - print("PER too high!") - sys.exit(1) - - -# Create the master dataframe -results_df.index = [str(-(x+int(args.channel_loss))) for x in attens] - -print(results_df) -results_df.to_csv(args.results,mode='a') - -hm = create_heatmap(results_df) -plt.savefig('heatmap.png') - - - -x,y,z,xticks,yticks = plottable_3d_info(results_df) - - -for i,row in enumerate(y): - y[i] = [i * int(args.atten_step) + attens[0]] * len(row) - -# print(y) -cmap = ListedColormap(MAP_COLORS, name='adi-heatmap') -bounds = [0.0, 0.0001, 0.1, 0.3, 1, 3, 10, 30, 99.9999, 105] -norm = colors.BoundaryNorm(bounds, cmap.N) -mappable = cm.ScalarMappable(norm=norm, cmap=cmap) - -fig = plt.figure(figsize=(10,5)) -cb = fig.colorbar(mappable) - - -old_ticks = cb.get_ticks() -new_ticks = [] - -for i in range(len(old_ticks) - 1): - new_ticks.append(old_ticks[i] + (old_ticks[i+1] - old_ticks[i])/2) - -labels = ['0%', '0%-0.1%', '0.1%-0.3%', '0.3%-1%', '1%-3%', '3%-10%', '10%-30%', '30%-100%', '100%'] -cb.set_ticks(new_ticks, labels=labels) -cb.ax.set_ylabel("Packet Error Rate") - -axes = fig.add_subplot(projection='3d') -axes.plot_surface(x, y, z,cmap='gnuplot') -axes.set(title='PER Across Channels', xlabel='Channel', ylabel='RX Power',zlabel='PER %') - -plt.savefig('surfaceplt.png') - - - - -sys.exit(0) diff --git a/Tools/Bluetooth/mc_rf_sw.py b/Tools/Bluetooth/mc_rf_sw.py deleted file mode 100644 index 62d68beaff..0000000000 --- a/Tools/Bluetooth/mc_rf_sw.py +++ /dev/null @@ -1,307 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ -# Copyright (C) 2023 Analog Devices, Inc., All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES -# OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -# OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of Maxim Integrated -# Products, Inc. shall not be used except as stated in the Maxim Integrated -# Products, Inc. Branding Policy. -# -# The mere transfer of this software does not imply any licenses -# of trade secrets, proprietary technology, copyrights, patents, -# trademarks, maskwork rights, or any other form of intellectual -# property whatsoever. Maxim Integrated Products, Inc. retains all -# ownership rights. -# -############################################################################### - -import argparse -from argparse import RawTextHelpFormatter -from datetime import datetime -import fcntl -import logging -import os -from pprint import pprint -import subprocess -import usb.core -import usb.util -import sys - -logging.basicConfig(filename=os.path.expanduser('~/Workspace/Resource_Share/Logs/mc_rf_sw.log'), - level=logging.DEBUG, - format='%(message)s') - - -WITH_PRINT = False - -# Equivalent of the _IO('U', 20) constant in the linux kernel. -USBDEVFS_RESET = ord('U') << (4*2) | 20 - - -def PRINT(msg): - if WITH_PRINT: - print(msg) - logging.debug(f'{datetime.now()} {msg}') - - -class Namespace: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class McRfSw: - """ - class for Mini-Circuits Solid State RF Switches. - model: USB-1SP16T-83H - model: USB-1SP8T-63H - """ - available_models = ("USB-1SP16T-83H", "USB-1SP8T-63H") - sw_type = ("SP16T", "SP8T") - - def __init__(self, args): - global WITH_PRINT - - if args.debug: - WITH_PRINT = True - else: - WITH_PRINT = False - - PRINT(f'{args}') - - if args.model not in McRfSw.available_models: - msg = f"Invalid model: {args.model}" - raise Exception(msg) - self.model = args.model - - # find the right device by the model name - self.dev = self.find_the_device(self.model) - if self.dev is None: - msg = f"Fail to find the device for {args.model}" - raise Exception(msg) - - # get device sn - self.sn = "" - cmd = "*:SN?" - PRINT(f'cmd: {cmd}') - self.dev.write(1, cmd) - sn = self.dev.read(0x81, 64) - PRINT(f'Received: {sn}') - i = 1 - while 255 > sn[i] > 0 and i <= len(sn): - self.sn = self.sn + chr(sn[i]) - i = i + 1 - PRINT(f'Device SN: {self.sn}\n') # 12210300026 - - if self.model == McRfSw.available_models[0]: - self.model_index = 0 - else: - self.model_index = 1 - - # get firmware - self.firmware = "" - cmd = "*:FIRMWARE?" - PRINT(f'cmd: {cmd}') - self.dev.write(1, cmd) - fw = self.dev.read(0x81, 64) - PRINT(f'Received: {fw}') - i = 1 - while 255 > fw[i] > 0 and i <= len(fw): - self.firmware = self.firmware + chr(fw[i]) - i = i + 1 - PRINT(f'Firmware: {self.firmware}\n') - - if args.op is None: - exit(0) - - self.dev.reset() - - if args.op.lower() == "get": - state = self.get_sw_state() - msg = f'Current state: {state}' - logging.debug(msg) - print(msg) - elif args.op.lower() == "set": - self.set_sw_state(args.state) - elif args.op.lower() == "reset": - PRINT("") - PRINT("Reset the device.") - #self.reset_device() - else: - raise ValueError("Invalid op.") - - usb.util.release_interface(self.dev, 0) - - def find_the_device(self, model): - """find the right device by its model name - """ - all_devs = usb.core.find(idVendor=0x20ce, idProduct=0x0022, find_all=True) - for d in all_devs: - # check configuration in this device - self.dettach_and_config(d) - - # get model name - model_name = "" - cmd = "*:MN?" - PRINT(f'cmd: {cmd}') - d.write(1, cmd) - mn = d.read(0x81, 64) - PRINT(f"Received: {mn}") - i = 1 - while 255 > mn[i] > 0 and i <= len(mn): - model_name = model_name + chr(mn[i]) - i = i + 1 - PRINT(f'Model name: {model_name}\n') - - if model_name == model: - return d - else: - PRINT('--- NOT THIS DEVICE ---') - return None - - def dettach_and_config(self, d): - for configuration in d: - PRINT("") - PRINT("configuration:") - PRINT(configuration) - - for interface in configuration: - PRINT("") - PRINT("interface:") - PRINT(interface) - if_num = interface.bInterfaceNumber - if not d.is_kernel_driver_active(if_num): - continue - - try: - d.detach_kernel_driver(if_num) - except usb.core.USBError as e: - print(f'Interface Number: {if_num}') - print(e) - - # set the active configuration. with no args we use first config. - d.set_configuration() - - def set_sw_state(self, state): - """Switch State Commands / Queries - :[Sw_Type]:[Sw_Channel]:STATE:[Sw_State] - - :arg - state - :return - status 0:command failed, 1: command completed successfully - """ - curr_state = self.get_sw_state() - PRINT("") - msg = f'Current state: {curr_state}' - logging.debug(msg) - print(msg) - - if curr_state == str(state): - return curr_state - - cmd = f'*:{McRfSw.sw_type[self.model_index]}:STATE:{state}' - PRINT(f'cmd: {cmd}') - self.dev.write(1, cmd) - resp = self.dev.read(0x81, 64) - PRINT(f'Received: {resp}') - i = 1 - set_resp = "" - while 255 > resp[i] > 0 and i <= len(resp): - set_resp = set_resp + chr(resp[i]) - i = i + 1 - if set_resp == "1": - PRINT("Success") - - new_state = self.get_sw_state() - PRINT("") - msg = f' New state: {new_state}' - else: - msg = 'FAILED!' - - logging.debug(msg) - print(msg) - - return set_resp - - def get_sw_state(self): - """get switch state - - """ - cmd = f'*:{McRfSw.sw_type[self.model_index]}:STATE?' - PRINT(f'cmd: {cmd}') - self.dev.write(1, cmd) - state_ret = self.dev.read(0x81, 64) - PRINT(f'Received: {state_ret}') - i = 1 - resp = "" - while 255 > state_ret[i] > 0 and i <= len(state_ret): - resp = resp + chr(state_ret[i]) - i = i + 1 - PRINT(f'Resp: {resp}') - return resp - - def reset_device(self): - """reset the RF switch - """ - proc = subprocess.Popen(['lsusb'], stdout=subprocess.PIPE) - out = proc.communicate()[0] - out = out.decode('utf-8') - lines = out.split('\n') - for line in lines: - if "Minicircuits I/O Controller" in line: - parts = line.split() - bus = parts[1] - dev = parts[3][:3] - dev_path = '/dev/bus/usb/%s/%s' % (bus, dev) - PRINT(f'dev_path: {dev_path}') - - fd = os.open(dev_path, os.O_WRONLY) - try: - fcntl.ioctl(fd, USBDEVFS_RESET, 0) - finally: - os.close(fd) - - -if __name__ == "__main__": - WITH_PRINT = 1 - - # Setup the command line description text - descText = """ - Mini-Circuits RF Switch control. - """ - - # Parse the command line arguments - parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) - parser.add_argument('--model', help='Model: USB-1SP16T-83H, or USB-1SP8T-63H') - parser.add_argument('--op', help='get, set, reset') - parser.add_argument('--state', help='state') - parser.add_argument('--debug', action="store_true", help='display debug info') - - args = parser.parse_args() - - if args.debug: - PRINT("\n\n\n") - print("Mini-Circuits RF Switch Control Tool") - print(f'Input arguments: {args}') - - McRfSw(args) - - diff --git a/Tools/Bluetooth/mini_RCDAT_USB.py b/Tools/Bluetooth/mini_RCDAT_USB.py deleted file mode 100644 index 09e9654aa3..0000000000 --- a/Tools/Bluetooth/mini_RCDAT_USB.py +++ /dev/null @@ -1,182 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## mini_RCDAT_USB.py - # - # Sets the attenuation of a Mini-Circuits RCDAT USB attenuator - # - -import usb.core -import usb.util -import argparse -from argparse import RawTextHelpFormatter -import sys - -# Set the VID and PID that we're going to try and connect to -vid=0x20ce -pid=0x0023 - -# Define the min and max attenuation values -minDbm=0 -maxDbm=90 - -# Namespace class used to create function arguments similar to argparse -class Namespace: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - -class mini_RCDAT_USB: - - def __init__(self, args): - - # Make sure attenuation is within the defined limits - try: - if(float(args.atten) > maxDbm) : - print("Attenuation parameter is too high, max attenuation: "+str(maxDbm)) - print(descText) - sys.exit(1) - if(float(args.atten) < minDbm) : - print("Attenuation parameter is too low, min attenuation: "+str(minDbm)) - print(descText) - sys.exit(1) - except ValueError as err: - print("Error with attenuation value") - print(descText) - sys.exit(1) - - # Find our device - dev = usb.core.find(idVendor=vid, idProduct=pid) - - if dev is None: - raise ValueError('Device not found') - - for configuration in dev: - for interface in configuration: - ifnum = interface.bInterfaceNumber - if not dev.is_kernel_driver_active(ifnum): - continue - try: - dev.detach_kernel_driver(ifnum) - except usb.core.USBError as e: - pass - - # set the active configuration. with no args we use first config. - dev.set_configuration() - - dev.reset() - - # Get the SN - SerialN="" - dev.write(1,"*:SN?") - sn=dev.read(0x81,64) - i=1 - while (sn[i]<255 and sn[i]>0): - SerialN=SerialN+chr(sn[i]) - i=i+1 - - # Get the model number - ModelN="" - dev.write(1,"*:MN?") - mn=dev.read(0x81,64) - i=1 - while (mn[i]<255 and mn[i]>0): - ModelN=ModelN+chr(mn[i]) - i=i+1 - - # Get the firmware version - Fw="" - dev.write(1,"*:FIRMWARE?") - sn=dev.read(0x81,64) - i=1 - while (sn[i]<255 and sn[i]>0): - Fw=Fw+chr(sn[i]) - i=i+1 - - retval=0 - - # Set the attenuation - attenCmdString="*:SETATT="+str(args.atten)+";" - print(attenCmdString) - dev.write(1,attenCmdString) - resp=dev.read(0x81,64) - i=1 - AttResp="" - while (resp[i]<255 and resp[i]>0): - AttResp=AttResp+chr(resp[i]) - i=i+1 - if (AttResp != "1"): - print("Error setting attenuation") - retval=1 - - # Check the attenuation - getAttenString="*:ATT?" - print(getAttenString) - dev.write(1,getAttenString) # return attenuation value - resp=dev.read(0x81,64) - i=1 - AttResp="" - while (resp[i]<255 and resp[i]>0): - AttResp=AttResp+chr(resp[i]) - i=i+1 - print("Attenuation: " + AttResp) - - usb.util.release_interface(dev, 0) - # dev.close() - -if __name__ == '__main__': - - # Setup the command line description text - descText = """ - Mini-Circuits RCDAT USB configuration tool. - - This tool is used to set the attenuation of a Mini Circuits RCDAT, using the USB interface. - Attenuation value must be a decimal number between """+str(minDbm)+""" and """+str(maxDbm)+""" - - VID=0x"""+'%04X'%vid+""" - PID=0x"""+'%04X'%pid - - # Parse the command line arguments - parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) - parser.add_argument('atten',help='attenuation in dBm, 0.25 dB resolution') - - args = parser.parse_args() - - print("Mini-Circuits RCDAT USB configuration tool") - print("Attenuation: "+str(args.atten)) - - # Set the attenuation - atten = mini_RCDAT_USB(args) - - sys.exit(0) diff --git a/Tools/Bluetooth/py_requirements.txt b/Tools/Bluetooth/py_requirements.txt deleted file mode 100644 index 2c1e22c718..0000000000 --- a/Tools/Bluetooth/py_requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -pyserial -pyusb -termcolor -readline \ No newline at end of file diff --git a/Tools/Bluetooth/rf_switch.py b/Tools/Bluetooth/rf_switch.py deleted file mode 100644 index 637190cb94..0000000000 --- a/Tools/Bluetooth/rf_switch.py +++ /dev/null @@ -1,130 +0,0 @@ -#! /usr/bin/env python3 - -################################################################################ - # Copyright (C) 2020 Maxim Integrated Products, Inc., All Rights Reserved. - # - # Permission is hereby granted, free of charge, to any person obtaining a - # copy of this software and associated documentation files (the "Software"), - # to deal in the Software without restriction, including without limitation - # the rights to use, copy, modify, merge, publish, distribute, sublicense, - # and/or sell copies of the Software, and to permit persons to whom the - # Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included - # in all copies or substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - # IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - # OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - # OTHER DEALINGS IN THE SOFTWARE. - # - # Except as contained in this notice, the name of Maxim Integrated - # Products, Inc. shall not be used except as stated in the Maxim Integrated - # Products, Inc. Branding Policy. - # - # The mere transfer of this software does not imply any licenses - # of trade secrets, proprietary technology, copyrights, patents, - # trademarks, maskwork rights, or any other form of intellectual - # property whatsoever. Maxim Integrated Products, Inc. retains all - # ownership rights. - # - ############################################################################### - -## rf_switch.py - # - # Tool used to control an RF switch with a simple UART interface - # - -import serial -import sys -import argparse -from argparse import RawTextHelpFormatter -from time import sleep - -# Setup the default serial port settings -defaultBaud=115200 -defaultSP="/dev/ttyUSB0" - -# Namespace class used to create function arguments similar to argparse -class Namespace: - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - -class rf_switch: - - port = serial.Serial() - serialPort = "" - - def __init__(self, args): - - try: - # Open serial port - serialPort = args.serialPort - self.port = serial.Serial( - port=str(serialPort), - baudrate=args.baud, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - bytesize=serial.EIGHTBITS, - rtscts=False, - dsrdtr=False, - timeout=1.0 - ) - self.port.isOpen() - except serial.SerialException as err: - print(err) - sys.exit(1) - - except OverflowError as err: - print("baud rate exception, "+str(args.baud)+" is too large") - print(err) - sys.exit(1) - - # Send the command, adding carriage return - commandString = args.command+"\r" - for char in commandString: - b = bytearray() - b.extend(map(ord, char)) - self.port.write(b) - sleep(0.01) - - # Receive the status - response = self.port.read_until("\n") - print(response.decode()) - -if __name__ == '__main__': - - - # Setup the command line description text - descText = """ - RF Switch tool. - - This tool is used to control an RF switch. The switch has two sides (L and R), each with - 4 inputs. - - Serial port is configured as 8N1, no flow control, default baud rate of """+str(defaultBaud)+""". - """ - - # Parse the command line arguments - parser = argparse.ArgumentParser(description=descText, formatter_class=RawTextHelpFormatter) - parser.add_argument('serialPort', default=defaultSP, - help='Serial port path or COM#, default: '+defaultSP) - parser.add_argument('command', help="""Set the left or right switch: L or R, followed by 0-4. 0 indicating closed. - Example: l1""") - - parser.add_argument('--baud', '-b', default=defaultBaud, - help='Serial port baud rate, default: '+str(defaultBaud)) - - args = parser.parse_args() - serialPort = args.serialPort - print("RF Switch tool") - print("Serial port: "+serialPort) - print("8N1 "+str(args.baud)) - print("") - - # Run the command - ble_hci = rf_switch(args) - From f95e15f5b95adaa3fe7be0917baabcd8884e0b81 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:11:00 -0500 Subject: [PATCH 30/35] added versioning API --- Libraries/Cordio/platform/include/pal_bb.h | 131 +++++++++++---------- 1 file changed, 72 insertions(+), 59 deletions(-) diff --git a/Libraries/Cordio/platform/include/pal_bb.h b/Libraries/Cordio/platform/include/pal_bb.h index e6e8d26507..3c49846101 100644 --- a/Libraries/Cordio/platform/include/pal_bb.h +++ b/Libraries/Cordio/platform/include/pal_bb.h @@ -34,110 +34,108 @@ extern "C" { * \addtogroup PAL_BB * \{ */ - + /************************************************************************************************** Macros **************************************************************************************************/ /*! \brief Protocol types */ -typedef enum -{ - BB_PROT_NONE, /*!< Non-protocol specific operation. */ - BB_PROT_BLE, /*!< Bluetooth Low Energy normal mode. */ - BB_PROT_BLE_DTM, /*!< Bluetooth Low Energy direct test mode. */ - BB_PROT_PRBS15, /*!< Enable the continuous PRBS15 transmit sequence. */ - BB_PROT_15P4, /*!< 802.15.4. */ - BB_PROT_NUM /*!< Number of protocols. */ +typedef enum { + BB_PROT_NONE, /*!< Non-protocol specific operation. */ + BB_PROT_BLE, /*!< Bluetooth Low Energy normal mode. */ + BB_PROT_BLE_DTM, /*!< Bluetooth Low Energy direct test mode. */ + BB_PROT_PRBS15, /*!< Enable the continuous PRBS15 transmit sequence. */ + BB_PROT_15P4, /*!< 802.15.4. */ + BB_PROT_NUM /*!< Number of protocols. */ } PalBbProt_t; /*! \brief Status codes */ -enum PalBbStat_c -{ - BB_STATUS_SUCCESS, /*!< Operation successful. */ - BB_STATUS_FAILED, /*!< General failure. */ - BB_STATUS_CANCELED, /*!< Receive canceled. */ - BB_STATUS_RX_TIMEOUT, /*!< Receive packet timeout. */ - BB_STATUS_CRC_FAILED, /*!< Receive packet with CRC verification failed. */ - BB_STATUS_FRAME_FAILED, /*!< Receive packet with frame verification failed. */ - BB_STATUS_ACK_FAILED, /*!< ACK packet failure. */ - BB_STATUS_ACK_TIMEOUT, /*!< ACK packet timeout. */ - BB_STATUS_TX_CCA_FAILED, /*!< Transmit CCA failure. */ - BB_STATUS_TX_FAILED /*!< Transmit failure. */ +enum PalBbStat_c { + BB_STATUS_SUCCESS, /*!< Operation successful. */ + BB_STATUS_FAILED, /*!< General failure. */ + BB_STATUS_CANCELED, /*!< Receive canceled. */ + BB_STATUS_RX_TIMEOUT, /*!< Receive packet timeout. */ + BB_STATUS_CRC_FAILED, /*!< Receive packet with CRC verification failed. */ + BB_STATUS_FRAME_FAILED, /*!< Receive packet with frame verification failed. */ + BB_STATUS_ACK_FAILED, /*!< ACK packet failure. */ + BB_STATUS_ACK_TIMEOUT, /*!< ACK packet timeout. */ + BB_STATUS_TX_CCA_FAILED, /*!< Transmit CCA failure. */ + BB_STATUS_TX_FAILED /*!< Transmit failure. */ }; /*! \brief PHY types. */ -typedef enum -{ - BB_PHY_BLE_1M = 1, /*!< Bluetooth Low Energy 1Mbps PHY. */ - BB_PHY_BLE_2M = 2, /*!< Bluetooth Low Energy 2Mbps PHY. */ - BB_PHY_BLE_CODED = 3, /*!< Bluetooth Low Energy Coded PHY (data coding unspecified). */ - BB_PHY_15P4 = 4, /*!< 802.15.4 PHY. */ +typedef enum { + BB_PHY_BLE_1M = 1, /*!< Bluetooth Low Energy 1Mbps PHY. */ + BB_PHY_BLE_2M = 2, /*!< Bluetooth Low Energy 2Mbps PHY. */ + BB_PHY_BLE_CODED = 3, /*!< Bluetooth Low Energy Coded PHY (data coding unspecified). */ + BB_PHY_15P4 = 4, /*!< 802.15.4 PHY. */ } PalBbPhy_t; /*! \brief PHY options. */ -enum PalBbPhy_op -{ - BB_PHY_OPTIONS_DEFAULT = 0, /*!< BB defined PHY Options behavior. */ - BB_PHY_OPTIONS_BLE_S2 = 1, /*!< Always use S=2 coding when transmitting on LE Coded PHY. */ - BB_PHY_OPTIONS_BLE_S8 = 2 /*!< Always use S=8 coding when transmitting on LE Coded PHY. */ +enum PalBbPhy_op { + BB_PHY_OPTIONS_DEFAULT = 0, /*!< BB defined PHY Options behavior. */ + BB_PHY_OPTIONS_BLE_S2 = 1, /*!< Always use S=2 coding when transmitting on LE Coded PHY. */ + BB_PHY_OPTIONS_BLE_S8 = 2 /*!< Always use S=8 coding when transmitting on LE Coded PHY. */ }; #ifndef BB_CLK_RATE_HZ /*! \brief BB clock rate in hertz. */ -#define BB_CLK_RATE_HZ 1000000 +#define BB_CLK_RATE_HZ 1000000 #endif /*! \brief Binary divide with 1,000,000 divisor (n[max]=0xFFFFFFFF). */ -#define BB_MATH_DIV_10E6(n) ((uint32_t)(((uint64_t)(n) * UINT64_C(4295)) >> 32)) +#define BB_MATH_DIV_10E6(n) ((uint32_t)(((uint64_t)(n)*UINT64_C(4295)) >> 32)) #if (BB_CLK_RATE_HZ == 1000000) /*! \brief Return microseconds (no conversion required). */ -#define BB_US_TO_BB_TICKS(us) (us) +#define BB_US_TO_BB_TICKS(us) (us) #elif (BB_CLK_RATE_HZ == 8000000) /*! \brief Compute BB ticks from given time in microseconds (max time is interval=1,996s). */ -#define BB_US_TO_BB_TICKS(us) ((uint32_t)((us) << 3)) +#define BB_US_TO_BB_TICKS(us) ((uint32_t)((us) << 3)) #elif (BB_CLK_RATE_HZ == 32768) /*! \brief Compute BB ticks from given time in microseconds (max time is interval=1,996s). */ -#define BB_US_TO_BB_TICKS(us) ((uint32_t)(((uint64_t)(us) * (uint64_t)(70368745)) >> 31)) /* calculated value may be one tick low */ +#define BB_US_TO_BB_TICKS(us) \ + ((uint32_t)(((uint64_t)(us) * (uint64_t)(70368745)) >> \ + 31)) /* calculated value may be one tick low */ #else /*! \brief Compute BB ticks from given time in microseconds (max time is interval=1,996s). */ -#define BB_US_TO_BB_TICKS(us) BB_MATH_DIV_10E6((uint64_t)(us) * (uint64_t)(BB_CLK_RATE_HZ)) +#define BB_US_TO_BB_TICKS(us) BB_MATH_DIV_10E6((uint64_t)(us) * (uint64_t)(BB_CLK_RATE_HZ)) #endif -#define RTC_CLOCK_RATE 32768 -#define USE_RTC_BB_CLK (BB_CLK_RATE_HZ == RTC_CLOCK_RATE) +#define RTC_CLOCK_RATE 32768 +#define USE_RTC_BB_CLK (BB_CLK_RATE_HZ == RTC_CLOCK_RATE) #if (BB_CLK_RATE_HZ == 1000000) /*! \brief BB ticks to microseconds (no conversion required). */ -#define BB_TICKS_TO_US(n) (n) +#define BB_TICKS_TO_US(n) (n) #elif (BB_CLK_RATE_HZ == 8000000) /*! \brief BB ticks to microseconds (8MHz). */ -#define BB_TICKS_TO_US(n) ((n) >> 3) +#define BB_TICKS_TO_US(n) ((n) >> 3) #elif (BB_CLK_RATE_HZ == 32768) /*! \brief BB ticks to microseconds (32768 Hz). */ -#define BB_TICKS_TO_US(n) (uint32_t)(((uint64_t)(n) * 15625) >> 9) +#define BB_TICKS_TO_US(n) (uint32_t)(((uint64_t)(n)*15625) >> 9) #else /*! \brief BB ticks to microseconds. */ -#define BB_TICKS_TO_US(n) (uint32_t)((uint64_t)(n) * 1000000 / BB_CLK_RATE_HZ) +#define BB_TICKS_TO_US(n) (uint32_t)((uint64_t)(n)*1000000 / BB_CLK_RATE_HZ) #endif /*! \brief Typical maximum duration to scan in a scan interval (BbRtCfg_t::maxScanPeriodMs). */ -#define BB_MAX_SCAN_PERIOD_MS 1000 +#define BB_MAX_SCAN_PERIOD_MS 1000 /*! \brief Typical RF setup delay (BbRtCfg_t::rfSetupDelayUs). */ -#define BB_RF_SETUP_DELAY_US 150 +#define BB_RF_SETUP_DELAY_US 150 /*! \brief Typical operation setup delay in microseconds (BbRtCfg_t::schSetupDelayUs). */ -#define BB_SCH_SETUP_DELAY_US 500 +#define BB_SCH_SETUP_DELAY_US 500 /*! \brief Maximum time tick for 32 bit timer(1MHz) in microseconds (BbRtCfg_t::schSetupDelayUs). */ -#define BB_TIMER_1MHZ_MAX_VALUE_US 0xFFFFFFFF /* 2^32 - 1 = 0xFFFFFFFF. */ +#define BB_TIMER_1MHZ_MAX_VALUE_US 0xFFFFFFFF /* 2^32 - 1 = 0xFFFFFFFF. */ /*! \brief Maximum time tick for 32 bit timer(8MHz) in microseconds (BbRtCfg_t::schSetupDelayUs). */ -#define BB_TIMER_8MHZ_MAX_VALUE_US 0x1FFFFFFF /* 2^29 - 1 = 0x1FFFFFFF. */ +#define BB_TIMER_8MHZ_MAX_VALUE_US 0x1FFFFFFF /* 2^29 - 1 = 0x1FFFFFFF. */ /*! \brief Maximum time tick for 24 bit RTC counter(32768Hz) in microseconds. (BbRtCfg_t::BbTimerBoundaryUs) */ -#define BB_RTC_MAX_VALUE_US 511999999 /* 2^24 / 32768 * 10^6 - 1 = 512 * 10^6 - 1 = 511999999. */ +#define BB_RTC_MAX_VALUE_US 511999999 /* 2^24 / 32768 * 10^6 - 1 = 512 * 10^6 - 1 = 511999999. */ /************************************************************************************************** Type Definitions @@ -147,15 +145,21 @@ enum PalBbPhy_op typedef void (*bbDrvIrqCback_t)(void); /*! \brief BB configuration. */ -typedef struct -{ - uint16_t clkPpm; /*!< Clock accuracy in PPM. */ - uint8_t rfSetupDelayUsec; /*!< RF setup delay in microseconds. */ - uint16_t maxScanPeriodMsec; /*!< Maximum scan period in milliseconds. */ - uint16_t schSetupDelayUsec; /*!< Schedule setup delay in microseconds. */ - uint32_t BbTimerBoundaryUsec; /*!< BB timer boundary translated in microseconds before wraparound. */ +typedef struct { + uint16_t clkPpm; /*!< Clock accuracy in PPM. */ + uint8_t rfSetupDelayUsec; /*!< RF setup delay in microseconds. */ + uint16_t maxScanPeriodMsec; /*!< Maximum scan period in milliseconds. */ + uint16_t schSetupDelayUsec; /*!< Schedule setup delay in microseconds. */ + uint32_t + BbTimerBoundaryUsec; /*!< BB timer boundary translated in microseconds before wraparound. */ } PalBbCfg_t; - +/*! \brief BB PHY Version. */ +typedef struct { + uint8_t major; + uint8_t minor; + uint8_t patch; + char *buildDate; +} PalBbPhyVersion_t; /************************************************************************************************** Function Declarations **************************************************************************************************/ @@ -258,7 +262,16 @@ void PalBbRegisterProtIrq(uint8_t protId, bbDrvIrqCback_t timerCback, bbDrvIrqCb /*************************************************************************************************/ void PalBbSetProtId(uint8_t protId); -/*! \} */ /* PAL_BB */ +/*************************************************************************************************/ +/*! + * \brief Get versioning information about phy + * + * \return Phy version structure + */ +/*************************************************************************************************/ +const PalBbPhyVersion_t *PalBbGetPhyVersion(void); + +/*! \} */ /* PAL_BB */ #ifdef __cplusplus }; From 2d76b86b843254635089d1a257155b510ca8b1ab Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 19 Aug 2024 10:29:44 -0500 Subject: [PATCH 31/35] added get clock source declaration for 680 --- Libraries/PeriphDrivers/Include/MAX32680/uart.h | 9 +++++++++ Libraries/PeriphDrivers/Source/UART/uart_me17.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Libraries/PeriphDrivers/Include/MAX32680/uart.h b/Libraries/PeriphDrivers/Include/MAX32680/uart.h index fe56cdfd99..74bcb6e122 100644 --- a/Libraries/PeriphDrivers/Include/MAX32680/uart.h +++ b/Libraries/PeriphDrivers/Include/MAX32680/uart.h @@ -261,6 +261,15 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt */ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock); +/** + * @brief Gets the clock source used for the UART instance + * + * @param uart Pointer to UART registers (selects the UART block used.) + * + * @return The selected clock source for the UART instance + */ +mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart); + /* ************************************************************************* */ /* Low-level functions */ /* ************************************************************************* */ diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me17.c b/Libraries/PeriphDrivers/Source/UART/uart_me17.c index c277ca7005..8c03f796f7 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me17.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me17.c @@ -82,7 +82,7 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo if (retval != E_NO_ERROR) { return retval; } - + return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } From 318958f82cb194c7298643cafa3f3687126c775a Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:31:24 -0500 Subject: [PATCH 32/35] Update uart_me17.c --- Libraries/PeriphDrivers/Source/UART/uart_me17.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me17.c b/Libraries/PeriphDrivers/Source/UART/uart_me17.c index 8c03f796f7..9c9f38f3e5 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me17.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me17.c @@ -82,7 +82,6 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo if (retval != E_NO_ERROR) { return retval; } - return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } From 26e47e02678e7969dcb771806d097d8268545729 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 19 Aug 2024 10:51:12 -0500 Subject: [PATCH 33/35] remove ble fcc examples in favor of rf test --- Examples/MAX32655/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32655/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - Examples/MAX32655/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32655/Bluetooth/BLE_fcc/README.md | 23 - Examples/MAX32655/Bluetooth/BLE_fcc/main.c | 535 -- .../MAX32655/Bluetooth/BLE_fcc/project.mk | 16 - Examples/MAX32665/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32665/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - Examples/MAX32665/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32665/Bluetooth/BLE_fcc/README.md | 23 - Examples/MAX32665/Bluetooth/BLE_fcc/main.c | 582 --- .../MAX32665/Bluetooth/BLE_fcc/project.mk | 21 - Examples/MAX32690/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32690/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../Bluetooth/BLE_fcc/ARM/Abstract.txt | 1 - .../MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct | 47 - .../MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewd | 3056 ------------ .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewp | 4399 ----------------- Examples/MAX32690/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32690/Bluetooth/BLE_fcc/README.md | 37 - Examples/MAX32690/Bluetooth/BLE_fcc/main.c | 537 -- .../MAX32690/Bluetooth/BLE_fcc/project.mk | 21 - 52 files changed, 12754 deletions(-) delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/project.mk delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/project.mk delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/project.mk diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.project b/Examples/MAX32655/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index 6b6f26cc5d..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index cca0bc9a44..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32655", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32655.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32655/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index 941dff1331..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index 717125621b..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32655 -TARGET_UC := MAX32655 -TARGET_LC := max32655 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index 92ce092391..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -## Required Connections -* Connect a USB cable between the PC and the (USB/PWR - UART) connector. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/main.c b/Examples/MAX32655/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index fb7e80e963..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,535 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "tmr.h" - -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 - -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; - -/************************************************************************************************** - Functions -**************************************************************************************************/ - -/*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern void llc_api_tx_ldo_setup(void); -extern void dbb_seq_tx_enable(void); -extern void dbb_seq_tx_disable(void); - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(uint8_t phy) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); -} - -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - - APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - - APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - - APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -10 dBm"); - APP_TRACE_INFO0(" 1: 0 dBm"); - APP_TRACE_INFO0(" 2: 4.5 dBm"); - break; - } - - switch (param) { - case '0': - llc_api_set_txpower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO0("Power set to -10 dBm"); - break; - case '1': - llc_api_set_txpower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO0("Power set to 0 dBm"); - break; - case '2': - llc_api_set_txpower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO0("Power set to 4.5 dBm"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - cmd = 0; - param = 0; - break; - - case '5': - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0"); - APP_TRACE_INFO0(" 1: 19"); - APP_TRACE_INFO0(" 2: 39"); - break; - } - - switch (param) { - case '0': - dbb_seq_select_rf_channel(0); - APP_TRACE_INFO0("Channel set to 0"); - break; - case '1': - dbb_seq_select_rf_channel(19); - APP_TRACE_INFO0("Channel set to 19"); - break; - case '2': - dbb_seq_select_rf_channel(39); - APP_TRACE_INFO0("Channel set to 39"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting TX"); - - PalBbEnable(); - - llc_api_tx_ldo_setup(); - - /* Enable constant TX */ - dbb_seq_tx_enable(); - - cmd = 0; - param = 0; - break; - - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ - dbb_seq_tx_disable(); - - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); - cmd = 0; - break; - - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} - -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; -#if (BT_VER > 9) - /* Use single pool for data buffers. */ - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - - mainLoadConfiguration(); - mainWsfInit(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 256a1a1131..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,16 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2 diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.project b/Examples/MAX32665/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index f108fb50bf..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32665 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index 94a81d4d5b..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32665", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32665.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index 36193f79c6..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index a1375f471f..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32665 -TARGET_UC := MAX32665 -TARGET_LC := max32665 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index 92ce092391..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -## Required Connections -* Connect a USB cable between the PC and the (USB/PWR - UART) connector. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/main.c b/Examples/MAX32665/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index afe83939b7..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,582 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "tmr.h" - -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 - -/* Bluetooth DBB registers */ -#define MXC_R_CONST_OUPUT *((volatile uint16_t *)(0x40052040)) -#define MXC_R_PATTERN_GEN *((volatile uint16_t *)(0x4005203C)) -#define MXC_R_TX_CTRL *((volatile uint16_t *)(0x4005101C)) - -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; - -/************************************************************************************************** - Functions -**************************************************************************************************/ - -/*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern uint8_t dbb_seq_get_rfpower(int8_t rf_power); -extern void llc_api_tx_ldo_setup(void); -extern void llc_api_set_phy(uint8_t phy, uint8_t phy_options); - -extern volatile int8_t tx_rfpower_idx; -extern volatile int8_t tx_rfpower_on; - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(void) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); -} - -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - - APP_TRACE_INFO1("Transmit RF channel 0 (2402M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - - APP_TRACE_INFO1("Transmit RF channel 19 (2440M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - - APP_TRACE_INFO1("Transmit RF channel 39 (2480M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39 (2480M), %s, forever ..", getPhyStr()); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -15 dBm"); - APP_TRACE_INFO0(" 1: -10 dBm"); - APP_TRACE_INFO0(" 2: -5 dBm"); - APP_TRACE_INFO0(" 3: -2 dBm"); - APP_TRACE_INFO0(" 4: 0 dBm"); - APP_TRACE_INFO0(" 5: 2 dBm"); - APP_TRACE_INFO0(" 6: 4.5 dBm"); - break; - } - - switch (param) { - case '0': - llc_api_set_txpower(-15); - LlSetAdvTxPower(-15); - APP_TRACE_INFO1("Power set to -15, Amp_coef = %x", dbb_seq_get_rfpower(-15)); - break; - case '1': - llc_api_set_txpower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO1("Power set to -10, Amp_coef = %x", dbb_seq_get_rfpower(-10)); - break; - case '2': - llc_api_set_txpower(-5); - LlSetAdvTxPower(-5); - APP_TRACE_INFO1("Power set to -5, Amp_coef = %x", dbb_seq_get_rfpower(-5)); - break; - case '3': - llc_api_set_txpower(-2); - LlSetAdvTxPower(-2); - APP_TRACE_INFO1("Power set to -2, Amp_coef = %x", dbb_seq_get_rfpower(-2)); - break; - case '4': - llc_api_set_txpower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO1("Power set to 0, Amp_coef = %x", dbb_seq_get_rfpower(0)); - break; - case '5': - llc_api_set_txpower(2); - LlSetAdvTxPower(2); - APP_TRACE_INFO1("Power set to 2, Amp_coef = %x", dbb_seq_get_rfpower(2)); - break; - case '6': - llc_api_set_txpower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO1("Power set to 4.5, Amp_coef = %x", dbb_seq_get_rfpower(4)); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - cmd = 0; - param = 0; - break; - - case '5': - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0 (2402M)"); - APP_TRACE_INFO0(" 1: 19 (2440M)"); - APP_TRACE_INFO0(" 2: 33 (2468M)"); - APP_TRACE_INFO0(" 3: 36 (2474M)"); - APP_TRACE_INFO0(" 4: 39 (2480M)"); - break; - } - - switch (param) { - case '0': - dbb_seq_select_rf_channel(0); - APP_TRACE_INFO0("Channel set to 0 (2402M)"); - break; - case '1': - dbb_seq_select_rf_channel(19); - APP_TRACE_INFO0("Channel set to 19 (2440M)"); - break; - case '2': - dbb_seq_select_rf_channel(33); - APP_TRACE_INFO0("Channel set to 33 (2468M)"); - break; - case '3': - dbb_seq_select_rf_channel(36); - APP_TRACE_INFO0("Channel set to 36 (2474M)"); - break; - case '4': - dbb_seq_select_rf_channel(39); - APP_TRACE_INFO0("Channel set to 39 (2480M)"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting PRBS9 TX"); - - PalBbEnable(); - - llc_api_tx_ldo_setup(); - - /* Enable constant TX */ - MXC_R_TX_CTRL = 0x1; - - /* Enable pattern generator, set PRBS-9 */ - MXC_R_CONST_OUPUT = 0x0; - MXC_R_PATTERN_GEN = 0x4B; - - cmd = 0; - param = 0; - break; - - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ - MXC_R_TX_CTRL = 0x2; - MXC_R_PATTERN_GEN = 0x48; - - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - llc_api_set_phy(phy, BB_PHY_OPTIONS_DEFAULT); - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - cmd = 0; - break; - - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} - -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; -#if (BT_VER > 9) - /* Use single pool for data buffers. */ - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - - mainLoadConfiguration(); - mainWsfInit(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 8a52cb8ee8..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,21 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# If you have secure version of MCU (MAX32666), set SBT=1 to generate signed binary -# For more information on how sing process works, see -# https://www.analog.com/en/education/education-library/videos/6313214207112.html -SBT=0 - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2 diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.project b/Examples/MAX32690/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index bf22e37436..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32690 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index c21b9c37ea..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32690", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32690.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt deleted file mode 100644 index c320ebf22e..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt +++ /dev/null @@ -1 +0,0 @@ -BLE fit example diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct deleted file mode 100644 index d2482c178c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct +++ /dev/null @@ -1,47 +0,0 @@ -#! armcc -E - - -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -; /*-Memory Regions-*/ -#define IROM_start__ 0x00000000 -#define IROM_size__ 0x00010000 -#define IFLASH_start__ 0x10000000 -#define IFLASH_size__ 0x00080000 -#define pal_nvm_db_start 0x10080000 -#define PAL_NVM_SIZE 0 -#define IRAM_start__ 0x20000000 -#define IRAM_size__ 0x00020000 - - - -; /*-Sizes */ -;#define size_cstack__ 0x6000 -;#define size_heap__ 0x2000 -; /**** End of ICF editor section. ###ICF###*/ - -#define memory mem with size = 4G; - - -LR_IFLASH IFLASH_start__ IFLASH_size__ { ; load region size_region - - ER_IFLASH IFLASH_start__ IFLASH_size__ { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - PAL_NVM pal_nvm_db_start PAL_NVM_SIZE { ; RW data - .ANY (+RO) - } - - RW_IRAM1 IRAM_start__ IRAM_size__ { ; RW data - .ANY (+RW +ZI) - } - - - -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index ecec6c8618..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd deleted file mode 100644 index c025f0103d..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd +++ /dev/null @@ -1,3056 +0,0 @@ - - - 3 - - Debug - - ARM - - 1 - - C-SPY - 2 - - 32 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 1 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 1 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 1 - - - - - - - - - - - IJET_ID - 2 - - 9 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 3 - 1 - 1 - - - - - - - - - - - - - NULINK_ID - 2 - - 0 - 1 - 1 - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 1 - - - - - - - - STLINK_ID - 2 - - 7 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 1 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 8 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - - Release - - ARM - - 0 - - C-SPY - 2 - - 32 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 0 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 0 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 0 - - - - - - - - - - - IJET_ID - 2 - - 9 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 3 - 1 - 0 - - - - - - - - - - - - - NULINK_ID - 2 - - 0 - 1 - 0 - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 0 - - - - - - - - STLINK_ID - 2 - - 7 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 0 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 8 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp deleted file mode 100644 index 742fd29cfc..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp +++ /dev/null @@ -1,4399 +0,0 @@ - - - 3 - - Debug - - ARM - - 1 - - General - 3 - - 33 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 37 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 11 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - 1 - inputOutputBased - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 25 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - - Release - - ARM - - 0 - - General - 3 - - 33 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 37 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 11 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - 0 - inputOutputBased - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 25 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - - $PROJ_DIR$\..\fit_main.c - - - $PROJ_DIR$\..\main.c - - - $PROJ_DIR$\..\stack_fit.c - - - CMSIS-Pack - CMSISPack.Component - - Maxim Maxim API _Device.I2C_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_reva.c - - - - Maxim Maxim API _Device.RTC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_reva.c - - - - $PROJ_DIR$\RTE\RTE_Components.h - - - Maxim Maxim API _Device.CTB_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_reva.c - - - - Maxim Maxim API _Device.ICC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_reva.c - - - - Maxim Maxim API _Device.Low Power_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/LP/lp_me18.c - - - - Maxim Maxim API _Device.TRNG_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_revb.c - - - - Maxim Maxim API _Device.WUT_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_reva.c - - - - Maxim Maxim BTLE _Bluetooth.Bluetooth LE_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_disc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_server.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_terminal.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_read.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_write.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_read.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_write.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/bb/bb_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bda.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bstream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/calc128.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/chci/chci_tr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/crc32.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/fcs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_core.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init_ctr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/BlePhy/MAX32690/IAR/libphy_iar.a - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_math.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/prand.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/print.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_ble.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_list.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_rm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_tm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_alert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_batt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_bps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_core.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_dis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gls.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hid.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hts.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_px.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_temp.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_time.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wp.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/terminal.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC_ll.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/wstr.c - - - - Maxim MAX32690 BSP _BSP.EvKit V1_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/EvKit_V1/Source/board.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/led.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/pb.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/stdio.c - - - - Maxim Maxim API _Device.DMA_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_reva.c - - - - Maxim Maxim API _Device.FLC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_reva.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_revb.c - - - - Maxim Maxim API _Device.GPIO_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c - - - - Maxim Maxim API _Device.Startup_1.0.0 - CMSISPack.Component - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\cmain.s - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\heap.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\low_level_init.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\max32690.h - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_assert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_delay.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_lock.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/nvic_table.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/pins_me18.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\startup_max32690.s - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/sys_me18.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\system_max32690.c - - - - Maxim Maxim API _Device.Timers_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_revb.c - - - - Maxim Maxim API _Device.UART_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_revb.c - - - - - <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> - <packages/> - <device Dclock="96000000" Dcore="Cortex-M4" DcoreVersion="r0p1" Dendian="Little-endian" Dfamily="MAX32690-66" Dfpu="SP_FPU" Dmpu="NO_MPU" Dname="MAX32690" Dvendor="Maxim:23" Pname="Cortex-M4" Punits="2" info="ARM Cortex-M4 96 MHz, 512 kB RAM, 1 MB ROM" url="http://www.keil.com/dd2/maxim/max32690"> - <package info="Maxim Integrated MAX32690 Series Device Support, Board Support Package and Examples" name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - </device> - <toolchain Tcompiler="IAR" Toutput="exe"/> - <components> - <component Cbundle="Maxim BTLE" Cbundleversion="1.0.0" Cclass="Bluetooth" Cgroup="Bluetooth LE" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/assettag/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/cycling/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/datc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/dats/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/fit/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/locator/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/medc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/meds/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/tag/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/uribeacon/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/watch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/ble/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_core.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_read.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_write.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_read.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_write.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_disc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_server.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_terminal.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_alert.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_batt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_bps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_core.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_dis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gls.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hid.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hts.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_px.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_temp.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_time.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wp.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init_ctr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_math.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_ble.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_rm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_tm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/bb_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/chci/chci_tr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_list.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC_ll.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bda.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bstream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/calc128.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/crc32.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/fcs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/prand.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/print.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/terminal.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/wstr.c"/> - <file category="library" condition="Startup IAR" deviceDependent="1" name="Libraries/BlePhy/MAX32690/IAR/libphy_iar.a"/> - </component> - <component Cbundle="MAX32690 BSP" Cbundleversion="1.0.0" Cclass="BSP" Cgroup="EvKit V1" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Include/" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Source/board.c" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/Include/" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/led.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/pb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/stdio.c" version="1.0.0"/> - </component> - <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.2.0"> - <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/> - <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> - <file category="include" name="CMSIS/Core/Include/"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="CTB" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_common.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="DMA" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="FLC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_common.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_reva.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_revb.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="GPIO" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="I2C" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="ICC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Low Power" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/lp_me18.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="RTC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Startup" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Include/MAX32690/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ADC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/AES/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CRC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2S/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SPI/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WDT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/PT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CAN/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LPCMP/" version="1.0.0"/> - <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/startup_max32690.s" version="1.0.0"/> - <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/low_level_init.c" version="1.0.0"/> - <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/cmain.s" version="1.0.0"/> - <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/heap.c" version="1.0.0"/> - <file attr="config" category="sourceC" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> - <file attr="config" category="header" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.h" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_assert.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_delay.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_lock.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/pins_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/sys_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Timers" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_revb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="TRNG" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_revb.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="UART" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_revb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="WUT" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_reva.c" version="1.0.0"/> - </component> - </components> - <apis/> -</configuration> - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index d6ae4b890b..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32690 -TARGET_UC := MAX32690 -TARGET_LC := max32690 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index af372dfeb5..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -### Required Connections - -If using the MAX32690EVKIT: -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. -- Install headers JP7(RX\_EN) and JP8(TX\_EN). -- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - -If using the MAX32690FTHR: -- Connect a USB cable between the PC and the J5 (USB/PWR) connector. -- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - -If using the AD-APARD32690-SL: -- Connect a USB cable between the PC and the P10 (USB-C) connector. -- Connect a MAXPICO Debug adapter to P9 (SWD Connector) -- Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No -* Setting `SBT=1` in [**project.mk**](project.mk) enables Secure Boot Tools for the project diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/main.c b/Examples/MAX32690/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index 3efb2f9dd5..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,537 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "tmr.h" - -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 - -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; - -/************************************************************************************************** - Functions -**************************************************************************************************/ - -/*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern void llc_api_tx_ldo_setup(void); -extern void dbb_seq_tx_enable(void); -extern void dbb_seq_tx_disable(void); - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(uint8_t phy) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); -} - -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - - APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - - APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - - APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -10 dBm"); - APP_TRACE_INFO0(" 1: 0 dBm"); - APP_TRACE_INFO0(" 2: 4.5 dBm"); - break; - } - - switch (param) { - case '0': - llc_api_set_txpower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO0("Power set to -10 dBm"); - break; - case '1': - llc_api_set_txpower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO0("Power set to 0 dBm"); - break; - case '2': - llc_api_set_txpower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO0("Power set to 4.5 dBm"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - cmd = 0; - param = 0; - break; - - case '5': - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0"); - APP_TRACE_INFO0(" 1: 19"); - APP_TRACE_INFO0(" 2: 39"); - break; - } - - switch (param) { - case '0': - dbb_seq_select_rf_channel(0); - APP_TRACE_INFO0("Channel set to 0"); - break; - case '1': - dbb_seq_select_rf_channel(19); - APP_TRACE_INFO0("Channel set to 19"); - break; - case '2': - dbb_seq_select_rf_channel(39); - APP_TRACE_INFO0("Channel set to 39"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting TX"); - - PalBbEnable(); - - llc_api_tx_ldo_setup(); - - /* Enable constant TX */ - dbb_seq_tx_enable(); - - cmd = 0; - param = 0; - break; - - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ - dbb_seq_tx_disable(); - - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); - cmd = 0; - break; - - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} - -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; - - /* Use single pool for data buffers. */ -#if (BT_VER > 9) - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - - mainLoadConfiguration(); - mainWsfInit(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 52c2a5eb9c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,21 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# If you have secure version of MCU, set SBT=1 to generate signed binary -# For more information on how sing process works, see -# https://www.analog.com/en/education/education-library/videos/6313214207112.html -SBT=0 - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2 From d6c6331299ba5eacf526943365f1acd36c999ef7 Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 19 Aug 2024 10:52:19 -0500 Subject: [PATCH 34/35] Revert "remove ble fcc examples in favor of rf test" This reverts commit 26e47e02678e7969dcb771806d097d8268545729. --- Examples/MAX32655/Bluetooth/BLE_fcc/.cproject | 93 + Examples/MAX32655/Bluetooth/BLE_fcc/.project | 26 + .../BLE_fcc/.settings/language.settings.xml | 15 + .../org.eclipse.cdt.codan.core.prefs | 93 + .../.settings/org.eclipse.cdt.core.prefs | 15 + .../Bluetooth/BLE_fcc/.vscode/README.md | 47 + .../BLE_fcc/.vscode/c_cpp_properties.json | 53 + .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 + .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 + .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 + .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 + .../MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 + Examples/MAX32655/Bluetooth/BLE_fcc/Makefile | 382 ++ Examples/MAX32655/Bluetooth/BLE_fcc/README.md | 23 + Examples/MAX32655/Bluetooth/BLE_fcc/main.c | 535 ++ .../MAX32655/Bluetooth/BLE_fcc/project.mk | 16 + Examples/MAX32665/Bluetooth/BLE_fcc/.cproject | 93 + Examples/MAX32665/Bluetooth/BLE_fcc/.project | 26 + .../BLE_fcc/.settings/language.settings.xml | 15 + .../org.eclipse.cdt.codan.core.prefs | 93 + .../.settings/org.eclipse.cdt.core.prefs | 15 + .../Bluetooth/BLE_fcc/.vscode/README.md | 47 + .../BLE_fcc/.vscode/c_cpp_properties.json | 53 + .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 + .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 + .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 + .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 + .../MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 + Examples/MAX32665/Bluetooth/BLE_fcc/Makefile | 382 ++ Examples/MAX32665/Bluetooth/BLE_fcc/README.md | 23 + Examples/MAX32665/Bluetooth/BLE_fcc/main.c | 582 +++ .../MAX32665/Bluetooth/BLE_fcc/project.mk | 21 + Examples/MAX32690/Bluetooth/BLE_fcc/.cproject | 93 + Examples/MAX32690/Bluetooth/BLE_fcc/.project | 26 + .../BLE_fcc/.settings/language.settings.xml | 15 + .../org.eclipse.cdt.codan.core.prefs | 93 + .../.settings/org.eclipse.cdt.core.prefs | 15 + .../Bluetooth/BLE_fcc/.vscode/README.md | 47 + .../BLE_fcc/.vscode/c_cpp_properties.json | 53 + .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 + .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 + .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 + .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 + .../Bluetooth/BLE_fcc/ARM/Abstract.txt | 1 + .../MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct | 47 + .../MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 + .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewd | 3056 ++++++++++++ .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewp | 4399 +++++++++++++++++ Examples/MAX32690/Bluetooth/BLE_fcc/Makefile | 382 ++ Examples/MAX32690/Bluetooth/BLE_fcc/README.md | 37 + Examples/MAX32690/Bluetooth/BLE_fcc/main.c | 537 ++ .../MAX32690/Bluetooth/BLE_fcc/project.mk | 21 + 52 files changed, 12754 insertions(+) create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.cproject create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.project create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json create mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/Makefile create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/README.md create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/main.c create mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/project.mk create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.cproject create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.project create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json create mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/Makefile create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/README.md create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/main.c create mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/project.mk create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.cproject create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.project create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json create mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/Makefile create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/README.md create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/main.c create mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/project.mk diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject new file mode 100644 index 0000000000..c648cc4106 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.project b/Examples/MAX32655/Bluetooth/BLE_fcc/.project new file mode 100644 index 0000000000..2f22644c90 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.project @@ -0,0 +1,26 @@ + + + BLE_fcc + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml new file mode 100644 index 0000000000..d32717b6f3 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..59c0b37ba7 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..6b6f26cc5d --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md new file mode 100755 index 0000000000..5b355bd51c --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json new file mode 100755 index 0000000000..dfbed47b58 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb new file mode 100755 index 0000000000..8f22801a47 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json new file mode 100755 index 0000000000..01fe519904 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json new file mode 100755 index 0000000000..cca0bc9a44 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json @@ -0,0 +1,101 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32655.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32655/sources" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json new file mode 100755 index 0000000000..e95445e2b3 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch new file mode 100644 index 0000000000..941dff1331 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile new file mode 100644 index 0000000000..717125621b --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # 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. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/README.md new file mode 100644 index 0000000000..92ce092391 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/README.md @@ -0,0 +1,23 @@ +# BLE_fcc + +Simple serial port console for FCC testing. +Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +## Required Connections +* Connect a USB cable between the PC and the (USB/PWR - UART) connector. + +### Project-Specific Build Notes +* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for +viewing the trace messages and interacting with the application. Port uses settings: + - Baud : 115200 + - Char size : 8 + - Parity : None + - Stop bits : 1 + - HW Flow Control : No + - SW Flow Control : No diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/main.c b/Examples/MAX32655/Bluetooth/BLE_fcc/main.c new file mode 100644 index 0000000000..fb7e80e963 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/main.c @@ -0,0 +1,535 @@ +/*************************************************************************************************/ +/*! + * @file main.c + * @brief BLE project with simple serial console for FCC testing + * + * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. + * + * Copyright (c) 2019-2020 Packetcraft, Inc. + * + * Portions Copyright (c) 2022-2023 Analog Devices, Inc. + * + * 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 "ll_init_api.h" +#include "chci_tr.h" +#include "lhci_api.h" +#include "hci_defs.h" +#include "wsf_assert.h" +#include "wsf_buf.h" +#include "wsf_cs.h" +#include "wsf_heap.h" +#include "wsf_timer.h" +#include "wsf_trace.h" +#include "wsf_bufio.h" +#include "bb_ble_sniffer_api.h" +#include "pal_bb.h" +#include "pal_cfg.h" +#include "tmr.h" + +/************************************************************************************************** + Definitions +**************************************************************************************************/ + +/*! \brief UART TX buffer size */ +#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U + +#define FREQ_HOP_PERIOD_US 20000 + +/************************************************************************************************** + Global Variables +**************************************************************************************************/ + +/*! \brief Persistent BB runtime configuration. */ +static BbRtCfg_t mainBbRtCfg; + +/*! \brief Persistent LL runtime configuration. */ +static LlRtCfg_t mainLlRtCfg; + +static uint8_t phy = LL_PHY_LE_1M; +static uint8_t phy_str[16]; +static uint8_t txFreqHopCh; + +/************************************************************************************************** + Functions +**************************************************************************************************/ + +/*! \brief Physical layer functions. */ +extern void llc_api_set_txpower(int8_t power); +extern void dbb_seq_select_rf_channel(uint32_t rf_channel); +extern void llc_api_tx_ldo_setup(void); +extern void dbb_seq_tx_enable(void); +extern void dbb_seq_tx_disable(void); + +/*************************************************************************************************/ +/*! + * \fn Get PHY String. + * + * \brief Convert the PHY definition to a string. + * + * \param phy PHY definition. + * + * \return Pointer to string describing the PHY. + */ +/*************************************************************************************************/ +static uint8_t *getPhyStr(uint8_t phy) +{ + switch (phy) { + case LL_TEST_PHY_LE_1M: + default: + memcpy(phy_str, "1M PHY", 7); + break; + case LL_TEST_PHY_LE_2M: + memcpy(phy_str, "2M PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S8: + memcpy(phy_str, "S8 PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S2: + memcpy(phy_str, "S2 PHY", 7); + break; + } + return phy_str; +} + +/*************************************************************************************************/ +/*! + * \fn Timer 2 interrupts handler. + * + * \brief Controls the frequency hopping. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void TMR2_IRQHandler(void) +{ + int res; + + MXC_TMR_TO_Clear(MXC_TMR2); + + /* Start the next channel */ + res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + if (res != LL_SUCCESS) + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + + /* Wrap the channels */ + if (txFreqHopCh == 40) + txFreqHopCh = 0; + + /* Restart the timeout */ + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); + MXC_TMR_EnableInt(MXC_TMR2); +} + +/*************************************************************************************************/ +/*! + * \fn Usage statement + * + * \brief Prints the usage statement. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void printUsage(void) +{ + APP_TRACE_INFO0("Usage: "); + APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); + APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); + APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (4) Set Transmit power"); + APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); + APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); + /* APP_TRACE_INFO0(" (7) Set PA value"); */ + APP_TRACE_INFO0(" (8) Set PHY"); + APP_TRACE_INFO0(" (9) TX Frequency Hop"); + APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); + APP_TRACE_INFO0(" (u) Print usage"); +} + +/*************************************************************************************************/ +/*! + * \fn Process the Console RX + * + * \brief State machine for the console inputs. + * + * \param rxByte Character received from the console. + * + * \return None. + */ +/*************************************************************************************************/ +static void processConsoleRX(uint8_t rxByte) +{ + int res; + + /* Holds the state of the command and the parameter */ + static uint8_t cmd = 0; + static uint8_t param = 0; + + /* Determines if the incoming character is a command or a parameter */ + if (cmd == 0) + cmd = rxByte; + else + param = rxByte; + + switch (cmd) { + case '0': + + APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '1': + + APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '2': + + APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '3': + + APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); + res = LlEnhancedRxTest(39, phy, 0, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '4': + + if (param == 0) { + APP_TRACE_INFO0("Select transmit power"); + APP_TRACE_INFO0(" 0: -10 dBm"); + APP_TRACE_INFO0(" 1: 0 dBm"); + APP_TRACE_INFO0(" 2: 4.5 dBm"); + break; + } + + switch (param) { + case '0': + llc_api_set_txpower(-10); + LlSetAdvTxPower(-10); + APP_TRACE_INFO0("Power set to -10 dBm"); + break; + case '1': + llc_api_set_txpower(0); + LlSetAdvTxPower(0); + APP_TRACE_INFO0("Power set to 0 dBm"); + break; + case '2': + llc_api_set_txpower(4); + LlSetAdvTxPower(4); + APP_TRACE_INFO0("Power set to 4.5 dBm"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + cmd = 0; + param = 0; + break; + + case '5': + if (param == 0) { + APP_TRACE_INFO0("Select transmit channel"); + APP_TRACE_INFO0(" 0: 0"); + APP_TRACE_INFO0(" 1: 19"); + APP_TRACE_INFO0(" 2: 39"); + break; + } + + switch (param) { + case '0': + dbb_seq_select_rf_channel(0); + APP_TRACE_INFO0("Channel set to 0"); + break; + case '1': + dbb_seq_select_rf_channel(19); + APP_TRACE_INFO0("Channel set to 19"); + break; + case '2': + dbb_seq_select_rf_channel(39); + APP_TRACE_INFO0("Channel set to 39"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + APP_TRACE_INFO0("Starting TX"); + + PalBbEnable(); + + llc_api_tx_ldo_setup(); + + /* Enable constant TX */ + dbb_seq_tx_enable(); + + cmd = 0; + param = 0; + break; + + case '6': + APP_TRACE_INFO0("Disabling TX"); + + /* Disable constant TX */ + dbb_seq_tx_disable(); + + PalBbDisable(); + + cmd = 0; + break; + + case '8': + if (param == 0) { + /* Set the PHY */ + APP_TRACE_INFO0("Select PHY"); + APP_TRACE_INFO0("1: 1M"); + APP_TRACE_INFO0("2: 2M"); + APP_TRACE_INFO0("3: S8"); + APP_TRACE_INFO0("4: S2"); + break; + } + + switch (param) { + case '1': + phy = LL_TEST_PHY_LE_1M; + APP_TRACE_INFO0("PHY set to 1M"); + break; + case '2': + phy = LL_TEST_PHY_LE_2M; + APP_TRACE_INFO0("PHY set to 2M"); + break; + case '3': + phy = LL_TEST_PHY_LE_CODED_S8; + APP_TRACE_INFO0("PHY set to S8"); + break; + case '4': + phy = LL_TEST_PHY_LE_CODED_S2; + APP_TRACE_INFO0("PHY set to S2"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + cmd = 0; + param = 0; + break; + case '9': + /* Frequency hopping TX */ + APP_TRACE_INFO0("Starting frequency hopping"); + NVIC_EnableIRQ(TMR2_IRQn); + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); + MXC_TMR_EnableInt(MXC_TMR2); + cmd = 0; + break; + + case 'E': + case 'e': + + APP_TRACE_INFO0("End test"); + MXC_TMR_Stop(MXC_TMR2); + LlEndTest(NULL); + cmd = 0; + break; + + case 'U': + case 'u': + printUsage(); + cmd = 0; + break; + + default: + APP_TRACE_INFO0("Invalid selection"); + cmd = 0; + param = 0; + break; + } +} + +/*************************************************************************************************/ +/*! + * \brief Load runtime configuration. + */ +/*************************************************************************************************/ +static void mainLoadConfiguration(void) +{ + PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); + LlGetDefaultRunTimeCfg(&mainLlRtCfg); + PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); + PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); + + /* Set 5.1 requirements. */ + mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; + + /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 + HCI_CLOCK_500PPM + HCI_CLOCK_250PPM + HCI_CLOCK_150PPM + HCI_CLOCK_100PPM + HCI_CLOCK_75PPM + HCI_CLOCK_50PPM + HCI_CLOCK_30PPM + HCI_CLOCK_20PPM + */ + mainBbRtCfg.clkPpm = 20; +} + +/*************************************************************************************************/ +/*! + * \brief Initialize WSF. + */ +/*************************************************************************************************/ +static void mainWsfInit(void) +{ + /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ + const uint16_t maxRptBufSize = 12 + 2 + 255; + + /* +12 for message headroom, +ISO Data Load, +4 for header. */ + const uint16_t dataBufSize = + 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; +#if (BT_VER > 9) + /* Use single pool for data buffers. */ + WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); +#endif + /* Ensure pool buffers are ordered correctly. */ + WSF_ASSERT(maxRptBufSize < dataBufSize); + + wsfBufPoolDesc_t poolDesc[] = { + { 16, 8 }, + { 32, 4 }, + { 128, mainLlRtCfg.maxAdvReports }, + { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ + { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + + mainLlRtCfg.numIsoRxBuf } + }; + + const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); + + /* Initial buffer configuration. */ + uint16_t memUsed; + WsfCsEnter(); + memUsed = WsfBufInit(numPools, poolDesc); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + WsfOsInit(); + WsfTimerInit(); +#if (WSF_TRACE_ENABLED == TRUE) + WsfTraceRegisterHandler(WsfBufIoWrite); + WsfTraceEnable(TRUE); +#endif +} + +/*************************************************************************************************/ +/*! + * \brief Check and service tokens (Trace and sniffer). + * + * \return TRUE if there is token pending. + */ +/*************************************************************************************************/ +static bool_t mainCheckServiceTokens(void) +{ + bool_t eventPending = FALSE; + +#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) + eventPending = LhciIsEventPending(); +#endif + +#if WSF_TOKEN_ENABLED == TRUE + /* Allow only a single token to be processed at a time. */ + if (!eventPending) + eventPending = WsfTokenService(); +#endif + +#if (BB_SNIFFER_ENABLED == TRUE) + /* Service one sniffer packet, if in the buffer. */ + if (!eventPending) + eventPending = LhciSnifferHandler(); +#endif + + return eventPending; +} + +/*************************************************************************************************/ +/*! + * \brief Main entry point. + */ +/*************************************************************************************************/ +int main(void) +{ + uint32_t memUsed; + + mainLoadConfiguration(); + mainWsfInit(); + +#if (WSF_TRACE_ENABLED == TRUE) + WsfCsEnter(); + memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); + WsfHeapAlloc(memUsed); + WsfCsExit(); +#endif + + WsfCsEnter(); + LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, + .wlSizeCfg = 4, + .rlSizeCfg = 4, + .plSizeCfg = 4, + .pLlRtCfg = &mainLlRtCfg, + .pFreeMem = WsfHeapGetFreeStartAddress(), + .freeMemAvail = WsfHeapCountAvailable() }; + + memUsed = LlInitControllerInit(&llCfg); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + bdAddr_t bdAddr; + PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); + /* Coverity[uninit_use_in_call] */ + LlSetBdAddr((uint8_t *)&bdAddr); + + WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); + WsfOsRegisterSleepCheckFunc(ChciTrService); + + /* Register the UART RX request */ + WsfBufIoUartRegister(processConsoleRX); + + printUsage(); + + WsfOsEnterMainLoop(); + + /* Does not return. */ + return 0; +} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk new file mode 100644 index 0000000000..256a1a1131 --- /dev/null +++ b/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk @@ -0,0 +1,16 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Enable Cordio library +LIB_CORDIO = 1 + +# TRACE option +# Set to 0 to disable +# Set to 2 to enable serial port trace messages +TRACE = 2 diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject new file mode 100644 index 0000000000..c648cc4106 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.project b/Examples/MAX32665/Bluetooth/BLE_fcc/.project new file mode 100644 index 0000000000..2f22644c90 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.project @@ -0,0 +1,26 @@ + + + BLE_fcc + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml new file mode 100644 index 0000000000..d32717b6f3 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..59c0b37ba7 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..f108fb50bf --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32665 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md new file mode 100755 index 0000000000..5b355bd51c --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json new file mode 100755 index 0000000000..dfbed47b58 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb new file mode 100755 index 0000000000..8f22801a47 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json new file mode 100755 index 0000000000..01fe519904 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json new file mode 100755 index 0000000000..94a81d4d5b --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json @@ -0,0 +1,101 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32665", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32665.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json new file mode 100755 index 0000000000..e95445e2b3 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch new file mode 100644 index 0000000000..36193f79c6 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile new file mode 100644 index 0000000000..a1375f471f --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # 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. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32665 +TARGET_UC := MAX32665 +TARGET_LC := max32665 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/README.md new file mode 100644 index 0000000000..92ce092391 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/README.md @@ -0,0 +1,23 @@ +# BLE_fcc + +Simple serial port console for FCC testing. +Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +## Required Connections +* Connect a USB cable between the PC and the (USB/PWR - UART) connector. + +### Project-Specific Build Notes +* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for +viewing the trace messages and interacting with the application. Port uses settings: + - Baud : 115200 + - Char size : 8 + - Parity : None + - Stop bits : 1 + - HW Flow Control : No + - SW Flow Control : No diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/main.c b/Examples/MAX32665/Bluetooth/BLE_fcc/main.c new file mode 100644 index 0000000000..afe83939b7 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/main.c @@ -0,0 +1,582 @@ +/*************************************************************************************************/ +/*! + * @file main.c + * @brief BLE project with simple serial console for FCC testing + * + * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. + * + * Copyright (c) 2019-2020 Packetcraft, Inc. + * + * Portions Copyright (c) 2022-2023 Analog Devices, Inc. + * + * 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 "ll_init_api.h" +#include "chci_tr.h" +#include "lhci_api.h" +#include "hci_defs.h" +#include "wsf_assert.h" +#include "wsf_buf.h" +#include "wsf_cs.h" +#include "wsf_heap.h" +#include "wsf_timer.h" +#include "wsf_trace.h" +#include "wsf_bufio.h" +#include "bb_ble_sniffer_api.h" +#include "pal_bb.h" +#include "pal_cfg.h" +#include "tmr.h" + +/************************************************************************************************** + Definitions +**************************************************************************************************/ + +/*! \brief UART TX buffer size */ +#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U + +#define FREQ_HOP_PERIOD_US 20000 + +/* Bluetooth DBB registers */ +#define MXC_R_CONST_OUPUT *((volatile uint16_t *)(0x40052040)) +#define MXC_R_PATTERN_GEN *((volatile uint16_t *)(0x4005203C)) +#define MXC_R_TX_CTRL *((volatile uint16_t *)(0x4005101C)) + +/************************************************************************************************** + Global Variables +**************************************************************************************************/ + +/*! \brief Persistent BB runtime configuration. */ +static BbRtCfg_t mainBbRtCfg; + +/*! \brief Persistent LL runtime configuration. */ +static LlRtCfg_t mainLlRtCfg; + +static uint8_t phy = LL_PHY_LE_1M; +static uint8_t phy_str[16]; +static uint8_t txFreqHopCh; + +/************************************************************************************************** + Functions +**************************************************************************************************/ + +/*! \brief Physical layer functions. */ +extern void llc_api_set_txpower(int8_t power); +extern void dbb_seq_select_rf_channel(uint32_t rf_channel); +extern uint8_t dbb_seq_get_rfpower(int8_t rf_power); +extern void llc_api_tx_ldo_setup(void); +extern void llc_api_set_phy(uint8_t phy, uint8_t phy_options); + +extern volatile int8_t tx_rfpower_idx; +extern volatile int8_t tx_rfpower_on; + +/*************************************************************************************************/ +/*! + * \fn Get PHY String. + * + * \brief Convert the PHY definition to a string. + * + * \param phy PHY definition. + * + * \return Pointer to string describing the PHY. + */ +/*************************************************************************************************/ +static uint8_t *getPhyStr(void) +{ + switch (phy) { + case LL_TEST_PHY_LE_1M: + default: + memcpy(phy_str, "1M PHY", 7); + break; + case LL_TEST_PHY_LE_2M: + memcpy(phy_str, "2M PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S8: + memcpy(phy_str, "S8 PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S2: + memcpy(phy_str, "S2 PHY", 7); + break; + } + return phy_str; +} + +/*************************************************************************************************/ +/*! + * \fn Timer 2 interrupts handler. + * + * \brief Controls the frequency hopping. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void TMR2_IRQHandler(void) +{ + int res; + + MXC_TMR_TO_Clear(MXC_TMR2); + + /* Start the next channel */ + res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + if (res != LL_SUCCESS) + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + + /* Wrap the channels */ + if (txFreqHopCh == 40) + txFreqHopCh = 0; + + /* Restart the timeout */ + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); +} + +/*************************************************************************************************/ +/*! + * \fn Usage statement + * + * \brief Prints the usage statement. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void printUsage(void) +{ + APP_TRACE_INFO0("Usage: "); + APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); + APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); + APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (4) Set Transmit power"); + APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); + APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); + /* APP_TRACE_INFO0(" (7) Set PA value"); */ + APP_TRACE_INFO0(" (8) Set PHY"); + APP_TRACE_INFO0(" (9) TX Frequency Hop"); + APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); + APP_TRACE_INFO0(" (u) Print usage"); +} + +/*************************************************************************************************/ +/*! + * \fn Process the Console RX + * + * \brief State machine for the console inputs. + * + * \param rxByte Character received from the console. + * + * \return None. + */ +/*************************************************************************************************/ +static void processConsoleRX(uint8_t rxByte) +{ + int res; + + /* Holds the state of the command and the parameter */ + static uint8_t cmd = 0; + static uint8_t param = 0; + + /* Determines if the incoming character is a command or a parameter */ + if (cmd == 0) + cmd = rxByte; + else + param = rxByte; + + switch (cmd) { + case '0': + + APP_TRACE_INFO1("Transmit RF channel 0 (2402M), 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr()); + res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '1': + + APP_TRACE_INFO1("Transmit RF channel 19 (2440M), 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr()); + res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '2': + + APP_TRACE_INFO1("Transmit RF channel 39 (2480M), 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr()); + res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '3': + + APP_TRACE_INFO1("Receive RF channel 39 (2480M), %s, forever ..", getPhyStr()); + res = LlEnhancedRxTest(39, phy, 0, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '4': + + if (param == 0) { + APP_TRACE_INFO0("Select transmit power"); + APP_TRACE_INFO0(" 0: -15 dBm"); + APP_TRACE_INFO0(" 1: -10 dBm"); + APP_TRACE_INFO0(" 2: -5 dBm"); + APP_TRACE_INFO0(" 3: -2 dBm"); + APP_TRACE_INFO0(" 4: 0 dBm"); + APP_TRACE_INFO0(" 5: 2 dBm"); + APP_TRACE_INFO0(" 6: 4.5 dBm"); + break; + } + + switch (param) { + case '0': + llc_api_set_txpower(-15); + LlSetAdvTxPower(-15); + APP_TRACE_INFO1("Power set to -15, Amp_coef = %x", dbb_seq_get_rfpower(-15)); + break; + case '1': + llc_api_set_txpower(-10); + LlSetAdvTxPower(-10); + APP_TRACE_INFO1("Power set to -10, Amp_coef = %x", dbb_seq_get_rfpower(-10)); + break; + case '2': + llc_api_set_txpower(-5); + LlSetAdvTxPower(-5); + APP_TRACE_INFO1("Power set to -5, Amp_coef = %x", dbb_seq_get_rfpower(-5)); + break; + case '3': + llc_api_set_txpower(-2); + LlSetAdvTxPower(-2); + APP_TRACE_INFO1("Power set to -2, Amp_coef = %x", dbb_seq_get_rfpower(-2)); + break; + case '4': + llc_api_set_txpower(0); + LlSetAdvTxPower(0); + APP_TRACE_INFO1("Power set to 0, Amp_coef = %x", dbb_seq_get_rfpower(0)); + break; + case '5': + llc_api_set_txpower(2); + LlSetAdvTxPower(2); + APP_TRACE_INFO1("Power set to 2, Amp_coef = %x", dbb_seq_get_rfpower(2)); + break; + case '6': + llc_api_set_txpower(4); + LlSetAdvTxPower(4); + APP_TRACE_INFO1("Power set to 4.5, Amp_coef = %x", dbb_seq_get_rfpower(4)); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + cmd = 0; + param = 0; + break; + + case '5': + if (param == 0) { + APP_TRACE_INFO0("Select transmit channel"); + APP_TRACE_INFO0(" 0: 0 (2402M)"); + APP_TRACE_INFO0(" 1: 19 (2440M)"); + APP_TRACE_INFO0(" 2: 33 (2468M)"); + APP_TRACE_INFO0(" 3: 36 (2474M)"); + APP_TRACE_INFO0(" 4: 39 (2480M)"); + break; + } + + switch (param) { + case '0': + dbb_seq_select_rf_channel(0); + APP_TRACE_INFO0("Channel set to 0 (2402M)"); + break; + case '1': + dbb_seq_select_rf_channel(19); + APP_TRACE_INFO0("Channel set to 19 (2440M)"); + break; + case '2': + dbb_seq_select_rf_channel(33); + APP_TRACE_INFO0("Channel set to 33 (2468M)"); + break; + case '3': + dbb_seq_select_rf_channel(36); + APP_TRACE_INFO0("Channel set to 36 (2474M)"); + break; + case '4': + dbb_seq_select_rf_channel(39); + APP_TRACE_INFO0("Channel set to 39 (2480M)"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + APP_TRACE_INFO0("Starting PRBS9 TX"); + + PalBbEnable(); + + llc_api_tx_ldo_setup(); + + /* Enable constant TX */ + MXC_R_TX_CTRL = 0x1; + + /* Enable pattern generator, set PRBS-9 */ + MXC_R_CONST_OUPUT = 0x0; + MXC_R_PATTERN_GEN = 0x4B; + + cmd = 0; + param = 0; + break; + + case '6': + APP_TRACE_INFO0("Disabling TX"); + + /* Disable constant TX */ + MXC_R_TX_CTRL = 0x2; + MXC_R_PATTERN_GEN = 0x48; + + PalBbDisable(); + + cmd = 0; + break; + + case '8': + if (param == 0) { + /* Set the PHY */ + APP_TRACE_INFO0("Select PHY"); + APP_TRACE_INFO0("1: 1M"); + APP_TRACE_INFO0("2: 2M"); + APP_TRACE_INFO0("3: S8"); + APP_TRACE_INFO0("4: S2"); + break; + } + + switch (param) { + case '1': + phy = LL_TEST_PHY_LE_1M; + APP_TRACE_INFO0("PHY set to 1M"); + break; + case '2': + phy = LL_TEST_PHY_LE_2M; + APP_TRACE_INFO0("PHY set to 2M"); + break; + case '3': + phy = LL_TEST_PHY_LE_CODED_S8; + APP_TRACE_INFO0("PHY set to S8"); + break; + case '4': + phy = LL_TEST_PHY_LE_CODED_S2; + APP_TRACE_INFO0("PHY set to S2"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + llc_api_set_phy(phy, BB_PHY_OPTIONS_DEFAULT); + + cmd = 0; + param = 0; + break; + case '9': + /* Frequency hopping TX */ + APP_TRACE_INFO0("Starting frequency hopping"); + NVIC_EnableIRQ(TMR2_IRQn); + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); + cmd = 0; + break; + + case 'E': + case 'e': + + APP_TRACE_INFO0("End test"); + MXC_TMR_Stop(MXC_TMR2); + LlEndTest(NULL); + cmd = 0; + break; + + case 'U': + case 'u': + printUsage(); + cmd = 0; + break; + + default: + APP_TRACE_INFO0("Invalid selection"); + cmd = 0; + param = 0; + break; + } +} + +/*************************************************************************************************/ +/*! + * \brief Load runtime configuration. + */ +/*************************************************************************************************/ +static void mainLoadConfiguration(void) +{ + PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); + LlGetDefaultRunTimeCfg(&mainLlRtCfg); + PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); + PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); + + /* Set 5.1 requirements. */ + mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; + + /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 + HCI_CLOCK_500PPM + HCI_CLOCK_250PPM + HCI_CLOCK_150PPM + HCI_CLOCK_100PPM + HCI_CLOCK_75PPM + HCI_CLOCK_50PPM + HCI_CLOCK_30PPM + HCI_CLOCK_20PPM + */ + mainBbRtCfg.clkPpm = 20; +} + +/*************************************************************************************************/ +/*! + * \brief Initialize WSF. + */ +/*************************************************************************************************/ +static void mainWsfInit(void) +{ + /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ + const uint16_t maxRptBufSize = 12 + 2 + 255; + + /* +12 for message headroom, +ISO Data Load, +4 for header. */ + const uint16_t dataBufSize = + 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; +#if (BT_VER > 9) + /* Use single pool for data buffers. */ + WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); +#endif + /* Ensure pool buffers are ordered correctly. */ + WSF_ASSERT(maxRptBufSize < dataBufSize); + + wsfBufPoolDesc_t poolDesc[] = { + { 16, 8 }, + { 32, 4 }, + { 128, mainLlRtCfg.maxAdvReports }, + { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ + { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + + mainLlRtCfg.numIsoRxBuf } + }; + + const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); + + /* Initial buffer configuration. */ + uint16_t memUsed; + WsfCsEnter(); + memUsed = WsfBufInit(numPools, poolDesc); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + WsfOsInit(); + WsfTimerInit(); +#if (WSF_TRACE_ENABLED == TRUE) + WsfTraceRegisterHandler(WsfBufIoWrite); + WsfTraceEnable(TRUE); +#endif +} + +/*************************************************************************************************/ +/*! + * \brief Check and service tokens (Trace and sniffer). + * + * \return TRUE if there is token pending. + */ +/*************************************************************************************************/ +static bool_t mainCheckServiceTokens(void) +{ + bool_t eventPending = FALSE; + +#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) + eventPending = LhciIsEventPending(); +#endif + +#if WSF_TOKEN_ENABLED == TRUE + /* Allow only a single token to be processed at a time. */ + if (!eventPending) + eventPending = WsfTokenService(); +#endif + +#if (BB_SNIFFER_ENABLED == TRUE) + /* Service one sniffer packet, if in the buffer. */ + if (!eventPending) + eventPending = LhciSnifferHandler(); +#endif + + return eventPending; +} + +/*************************************************************************************************/ +/*! + * \brief Main entry point. + */ +/*************************************************************************************************/ +int main(void) +{ + uint32_t memUsed; + + mainLoadConfiguration(); + mainWsfInit(); + +#if (WSF_TRACE_ENABLED == TRUE) + WsfCsEnter(); + memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); + WsfHeapAlloc(memUsed); + WsfCsExit(); +#endif + + WsfCsEnter(); + LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, + .wlSizeCfg = 4, + .rlSizeCfg = 4, + .plSizeCfg = 4, + .pLlRtCfg = &mainLlRtCfg, + .pFreeMem = WsfHeapGetFreeStartAddress(), + .freeMemAvail = WsfHeapCountAvailable() }; + + memUsed = LlInitControllerInit(&llCfg); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + bdAddr_t bdAddr; + PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); + /* Coverity[uninit_use_in_call] */ + LlSetBdAddr((uint8_t *)&bdAddr); + + WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); + WsfOsRegisterSleepCheckFunc(ChciTrService); + + /* Register the UART RX request */ + WsfBufIoUartRegister(processConsoleRX); + + printUsage(); + + WsfOsEnterMainLoop(); + + /* Does not return. */ + return 0; +} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk new file mode 100644 index 0000000000..8a52cb8ee8 --- /dev/null +++ b/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk @@ -0,0 +1,21 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# If you have secure version of MCU (MAX32666), set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 + +# Enable Cordio library +LIB_CORDIO = 1 + +# TRACE option +# Set to 0 to disable +# Set to 2 to enable serial port trace messages +TRACE = 2 diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject new file mode 100644 index 0000000000..c648cc4106 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.project b/Examples/MAX32690/Bluetooth/BLE_fcc/.project new file mode 100644 index 0000000000..2f22644c90 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.project @@ -0,0 +1,26 @@ + + + BLE_fcc + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml new file mode 100644 index 0000000000..d32717b6f3 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..59c0b37ba7 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..bf22e37436 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32690 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md new file mode 100755 index 0000000000..5b355bd51c --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json new file mode 100755 index 0000000000..dfbed47b58 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb new file mode 100755 index 0000000000..8f22801a47 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json new file mode 100755 index 0000000000..01fe519904 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json new file mode 100755 index 0000000000..c21b9c37ea --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json @@ -0,0 +1,101 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32690", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32690.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", + "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json new file mode 100755 index 0000000000..e95445e2b3 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt new file mode 100644 index 0000000000..c320ebf22e --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt @@ -0,0 +1 @@ +BLE fit example diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct new file mode 100644 index 0000000000..d2482c178c --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct @@ -0,0 +1,47 @@ +#! armcc -E + + +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +; /*-Memory Regions-*/ +#define IROM_start__ 0x00000000 +#define IROM_size__ 0x00010000 +#define IFLASH_start__ 0x10000000 +#define IFLASH_size__ 0x00080000 +#define pal_nvm_db_start 0x10080000 +#define PAL_NVM_SIZE 0 +#define IRAM_start__ 0x20000000 +#define IRAM_size__ 0x00020000 + + + +; /*-Sizes */ +;#define size_cstack__ 0x6000 +;#define size_heap__ 0x2000 +; /**** End of ICF editor section. ###ICF###*/ + +#define memory mem with size = 4G; + + +LR_IFLASH IFLASH_start__ IFLASH_size__ { ; load region size_region + + ER_IFLASH IFLASH_start__ IFLASH_size__ { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + + PAL_NVM pal_nvm_db_start PAL_NVM_SIZE { ; RW data + .ANY (+RO) + } + + RW_IRAM1 IRAM_start__ IRAM_size__ { ; RW data + .ANY (+RW +ZI) + } + + + +} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch new file mode 100644 index 0000000000..ecec6c8618 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd new file mode 100644 index 0000000000..c025f0103d --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd @@ -0,0 +1,3056 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 7 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 7 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp new file mode 100644 index 0000000000..742fd29cfc --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp @@ -0,0 +1,4399 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 33 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 1 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 25 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 33 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 25 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + $PROJ_DIR$\..\fit_main.c + + + $PROJ_DIR$\..\main.c + + + $PROJ_DIR$\..\stack_fit.c + + + CMSIS-Pack + CMSISPack.Component + + Maxim Maxim API _Device.I2C_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_reva.c + + + + Maxim Maxim API _Device.RTC_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_reva.c + + + + $PROJ_DIR$\RTE\RTE_Components.h + + + Maxim Maxim API _Device.CTB_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_common.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_reva.c + + + + Maxim Maxim API _Device.ICC_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_reva.c + + + + Maxim Maxim API _Device.Low Power_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/LP/lp_me18.c + + + + Maxim Maxim API _Device.TRNG_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_revb.c + + + + Maxim Maxim API _Device.WUT_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_reva.c + + + + Maxim Maxim BTLE _Bluetooth.Bluetooth LE_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_db.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_disc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_server.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_terminal.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_read.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_write.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_read.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_write.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/bb/bb_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bda.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bstream.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/calc128.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/chci/chci_tr.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/crc32.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/fcs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_core.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init_ctr.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/BlePhy/MAX32690/IAR/libphy_iar.a + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_math.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/prand.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/print.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_ble.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_list.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_rm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_tm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_alert.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_batt.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_bps.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_core.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cps.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cte.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_dis.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gls.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hid.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hts.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_px.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_temp.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_time.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wp.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wss.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/terminal.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC_ll.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/wstr.c + + + + Maxim MAX32690 BSP _BSP.EvKit V1_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/EvKit_V1/Source/board.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/led.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/pb.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/stdio.c + + + + Maxim Maxim API _Device.DMA_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_reva.c + + + + Maxim Maxim API _Device.FLC_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_common.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_reva.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_revb.c + + + + Maxim Maxim API _Device.GPIO_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_common.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c + + + + Maxim Maxim API _Device.Startup_1.0.0 + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\cmain.s + + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\heap.c + + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\low_level_init.c + + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\max32690.h + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_assert.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_delay.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_lock.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/nvic_table.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/pins_me18.c + + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\startup_max32690.s + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/sys_me18.c + + + $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\system_max32690.c + + + + Maxim Maxim API _Device.Timers_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_common.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_revb.c + + + + Maxim Maxim API _Device.UART_1.0.0 + CMSISPack.Component + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_common.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_me18.c + + + ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_revb.c + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="96000000" Dcore="Cortex-M4" DcoreVersion="r0p1" Dendian="Little-endian" Dfamily="MAX32690-66" Dfpu="SP_FPU" Dmpu="NO_MPU" Dname="MAX32690" Dvendor="Maxim:23" Pname="Cortex-M4" Punits="2" info="ARM Cortex-M4 96 MHz, 512 kB RAM, 1 MB ROM" url="http://www.keil.com/dd2/maxim/max32690"> + <package info="Maxim Integrated MAX32690 Series Device Support, Board Support Package and Examples" name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cbundle="Maxim BTLE" Cbundleversion="1.0.0" Cclass="Bluetooth" Cgroup="Bluetooth LE" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/assettag/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/cycling/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/datc/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/dats/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/fit/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/locator/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/medc/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/meds/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/tag/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/uribeacon/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/watch/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/ble/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/common/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/include/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/"/> + <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_core.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_read.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_write.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_read.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_write.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_disc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_server.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_terminal.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_db.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_alert.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_batt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_bps.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_core.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cps.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cte.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_dis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gls.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hid.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hts.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_px.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_temp.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_time.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wp.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wss.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init_ctr.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_math.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_ble.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_rm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_tm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/bb_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/chci/chci_tr.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_list.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_main.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC_ll.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bda.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bstream.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/calc128.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/crc32.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/fcs.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/prand.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/print.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/terminal.c"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/wstr.c"/> + <file category="library" condition="Startup IAR" deviceDependent="1" name="Libraries/BlePhy/MAX32690/IAR/libphy_iar.a"/> + </component> + <component Cbundle="MAX32690 BSP" Cbundleversion="1.0.0" Cclass="BSP" Cgroup="EvKit V1" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Include/" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Source/board.c" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/Include/" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/led.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/pb.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/stdio.c" version="1.0.0"/> + </component> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.2.0"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="CTB" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_common.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_reva.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="DMA" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_reva.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="FLC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_common.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_reva.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_revb.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="GPIO" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_common.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="I2C" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_reva.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="ICC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_reva.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Low Power" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/lp_me18.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="RTC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_reva.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Startup" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Include/MAX32690/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ADC/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/AES/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CRC/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2S/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SPI/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WDT/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/PT/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CAN/" version="1.0.0"/> + <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LPCMP/" version="1.0.0"/> + <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/startup_max32690.s" version="1.0.0"/> + <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/low_level_init.c" version="1.0.0"/> + <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/cmain.s" version="1.0.0"/> + <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/heap.c" version="1.0.0"/> + <file attr="config" category="sourceC" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> + <file attr="config" category="header" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.h" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_assert.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_delay.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_lock.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/pins_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/sys_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Timers" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_revb.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_common.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="TRNG" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_revb.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="UART" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_revb.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_common.c" version="1.0.0"/> + </component> + <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="WUT" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> + <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_me18.c" version="1.0.0"/> + <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_reva.c" version="1.0.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile new file mode 100644 index 0000000000..d6ae4b890b --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # 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. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32690 +TARGET_UC := MAX32690 +TARGET_LC := max32690 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/README.md new file mode 100644 index 0000000000..af372dfeb5 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/README.md @@ -0,0 +1,37 @@ +# BLE_fcc + +Simple serial port console for FCC testing. +Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Required Connections + +If using the MAX32690EVKIT: +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Install headers JP7(RX\_EN) and JP8(TX\_EN). +- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. + +If using the MAX32690FTHR: +- Connect a USB cable between the PC and the J5 (USB/PWR) connector. +- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. + +If using the AD-APARD32690-SL: +- Connect a USB cable between the PC and the P10 (USB-C) connector. +- Connect a MAXPICO Debug adapter to P9 (SWD Connector) +- Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. + +### Project-Specific Build Notes +* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for +viewing the trace messages and interacting with the application. Port uses settings: + - Baud : 115200 + - Char size : 8 + - Parity : None + - Stop bits : 1 + - HW Flow Control : No + - SW Flow Control : No +* Setting `SBT=1` in [**project.mk**](project.mk) enables Secure Boot Tools for the project diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/main.c b/Examples/MAX32690/Bluetooth/BLE_fcc/main.c new file mode 100644 index 0000000000..3efb2f9dd5 --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/main.c @@ -0,0 +1,537 @@ +/*************************************************************************************************/ +/*! + * @file main.c + * @brief BLE project with simple serial console for FCC testing + * + * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. + * + * Copyright (c) 2019-2020 Packetcraft, Inc. + * + * Portions Copyright (c) 2022-2023 Analog Devices, Inc. + * + * 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 "ll_init_api.h" +#include "chci_tr.h" +#include "lhci_api.h" +#include "hci_defs.h" +#include "wsf_assert.h" +#include "wsf_buf.h" +#include "wsf_cs.h" +#include "wsf_heap.h" +#include "wsf_timer.h" +#include "wsf_trace.h" +#include "wsf_bufio.h" +#include "bb_ble_sniffer_api.h" +#include "pal_bb.h" +#include "pal_cfg.h" +#include "tmr.h" + +/************************************************************************************************** + Definitions +**************************************************************************************************/ + +/*! \brief UART TX buffer size */ +#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U + +#define FREQ_HOP_PERIOD_US 20000 + +/************************************************************************************************** + Global Variables +**************************************************************************************************/ + +/*! \brief Persistent BB runtime configuration. */ +static BbRtCfg_t mainBbRtCfg; + +/*! \brief Persistent LL runtime configuration. */ +static LlRtCfg_t mainLlRtCfg; + +static uint8_t phy = LL_PHY_LE_1M; +static uint8_t phy_str[16]; +static uint8_t txFreqHopCh; + +/************************************************************************************************** + Functions +**************************************************************************************************/ + +/*! \brief Physical layer functions. */ +extern void llc_api_set_txpower(int8_t power); +extern void dbb_seq_select_rf_channel(uint32_t rf_channel); +extern void llc_api_tx_ldo_setup(void); +extern void dbb_seq_tx_enable(void); +extern void dbb_seq_tx_disable(void); + +/*************************************************************************************************/ +/*! + * \fn Get PHY String. + * + * \brief Convert the PHY definition to a string. + * + * \param phy PHY definition. + * + * \return Pointer to string describing the PHY. + */ +/*************************************************************************************************/ +static uint8_t *getPhyStr(uint8_t phy) +{ + switch (phy) { + case LL_TEST_PHY_LE_1M: + default: + memcpy(phy_str, "1M PHY", 7); + break; + case LL_TEST_PHY_LE_2M: + memcpy(phy_str, "2M PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S8: + memcpy(phy_str, "S8 PHY", 7); + break; + case LL_TEST_PHY_LE_CODED_S2: + memcpy(phy_str, "S2 PHY", 7); + break; + } + return phy_str; +} + +/*************************************************************************************************/ +/*! + * \fn Timer 2 interrupts handler. + * + * \brief Controls the frequency hopping. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void TMR2_IRQHandler(void) +{ + int res; + + MXC_TMR_TO_Clear(MXC_TMR2); + + /* Start the next channel */ + res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); + if (res != LL_SUCCESS) + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + + /* Wrap the channels */ + if (txFreqHopCh == 40) + txFreqHopCh = 0; + + /* Restart the timeout */ + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); + MXC_TMR_EnableInt(MXC_TMR2); +} + +/*************************************************************************************************/ +/*! + * \fn Usage statement + * + * \brief Prints the usage statement. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void printUsage(void) +{ + APP_TRACE_INFO0("Usage: "); + APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); + APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); + APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); + APP_TRACE_INFO0(" (4) Set Transmit power"); + APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); + APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); + /* APP_TRACE_INFO0(" (7) Set PA value"); */ + APP_TRACE_INFO0(" (8) Set PHY"); + APP_TRACE_INFO0(" (9) TX Frequency Hop"); + APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); + APP_TRACE_INFO0(" (u) Print usage"); +} + +/*************************************************************************************************/ +/*! + * \fn Process the Console RX + * + * \brief State machine for the console inputs. + * + * \param rxByte Character received from the console. + * + * \return None. + */ +/*************************************************************************************************/ +static void processConsoleRX(uint8_t rxByte) +{ + int res; + + /* Holds the state of the command and the parameter */ + static uint8_t cmd = 0; + static uint8_t param = 0; + + /* Determines if the incoming character is a command or a parameter */ + if (cmd == 0) + cmd = rxByte; + else + param = rxByte; + + switch (cmd) { + case '0': + + APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '1': + + APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '2': + + APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", + getPhyStr(phy)); + res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '3': + + APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); + res = LlEnhancedRxTest(39, phy, 0, 0); + APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); + cmd = 0; + break; + + case '4': + + if (param == 0) { + APP_TRACE_INFO0("Select transmit power"); + APP_TRACE_INFO0(" 0: -10 dBm"); + APP_TRACE_INFO0(" 1: 0 dBm"); + APP_TRACE_INFO0(" 2: 4.5 dBm"); + break; + } + + switch (param) { + case '0': + llc_api_set_txpower(-10); + LlSetAdvTxPower(-10); + APP_TRACE_INFO0("Power set to -10 dBm"); + break; + case '1': + llc_api_set_txpower(0); + LlSetAdvTxPower(0); + APP_TRACE_INFO0("Power set to 0 dBm"); + break; + case '2': + llc_api_set_txpower(4); + LlSetAdvTxPower(4); + APP_TRACE_INFO0("Power set to 4.5 dBm"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + cmd = 0; + param = 0; + break; + + case '5': + if (param == 0) { + APP_TRACE_INFO0("Select transmit channel"); + APP_TRACE_INFO0(" 0: 0"); + APP_TRACE_INFO0(" 1: 19"); + APP_TRACE_INFO0(" 2: 39"); + break; + } + + switch (param) { + case '0': + dbb_seq_select_rf_channel(0); + APP_TRACE_INFO0("Channel set to 0"); + break; + case '1': + dbb_seq_select_rf_channel(19); + APP_TRACE_INFO0("Channel set to 19"); + break; + case '2': + dbb_seq_select_rf_channel(39); + APP_TRACE_INFO0("Channel set to 39"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + APP_TRACE_INFO0("Starting TX"); + + PalBbEnable(); + + llc_api_tx_ldo_setup(); + + /* Enable constant TX */ + dbb_seq_tx_enable(); + + cmd = 0; + param = 0; + break; + + case '6': + APP_TRACE_INFO0("Disabling TX"); + + /* Disable constant TX */ + dbb_seq_tx_disable(); + + PalBbDisable(); + + cmd = 0; + break; + + case '8': + if (param == 0) { + /* Set the PHY */ + APP_TRACE_INFO0("Select PHY"); + APP_TRACE_INFO0("1: 1M"); + APP_TRACE_INFO0("2: 2M"); + APP_TRACE_INFO0("3: S8"); + APP_TRACE_INFO0("4: S2"); + break; + } + + switch (param) { + case '1': + phy = LL_TEST_PHY_LE_1M; + APP_TRACE_INFO0("PHY set to 1M"); + break; + case '2': + phy = LL_TEST_PHY_LE_2M; + APP_TRACE_INFO0("PHY set to 2M"); + break; + case '3': + phy = LL_TEST_PHY_LE_CODED_S8; + APP_TRACE_INFO0("PHY set to S8"); + break; + case '4': + phy = LL_TEST_PHY_LE_CODED_S2; + APP_TRACE_INFO0("PHY set to S2"); + break; + default: + APP_TRACE_INFO0("Invalid selection"); + break; + } + + cmd = 0; + param = 0; + break; + case '9': + /* Frequency hopping TX */ + APP_TRACE_INFO0("Starting frequency hopping"); + NVIC_EnableIRQ(TMR2_IRQn); + MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); + MXC_TMR_EnableInt(MXC_TMR2); + cmd = 0; + break; + + case 'E': + case 'e': + + APP_TRACE_INFO0("End test"); + MXC_TMR_Stop(MXC_TMR2); + LlEndTest(NULL); + cmd = 0; + break; + + case 'U': + case 'u': + printUsage(); + cmd = 0; + break; + + default: + APP_TRACE_INFO0("Invalid selection"); + cmd = 0; + param = 0; + break; + } +} + +/*************************************************************************************************/ +/*! + * \brief Load runtime configuration. + */ +/*************************************************************************************************/ +static void mainLoadConfiguration(void) +{ + PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); + LlGetDefaultRunTimeCfg(&mainLlRtCfg); + PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); + PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); + + /* Set 5.1 requirements. */ + mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; + + /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 + HCI_CLOCK_500PPM + HCI_CLOCK_250PPM + HCI_CLOCK_150PPM + HCI_CLOCK_100PPM + HCI_CLOCK_75PPM + HCI_CLOCK_50PPM + HCI_CLOCK_30PPM + HCI_CLOCK_20PPM + */ + mainBbRtCfg.clkPpm = 20; +} + +/*************************************************************************************************/ +/*! + * \brief Initialize WSF. + */ +/*************************************************************************************************/ +static void mainWsfInit(void) +{ + /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ + const uint16_t maxRptBufSize = 12 + 2 + 255; + + /* +12 for message headroom, +ISO Data Load, +4 for header. */ + const uint16_t dataBufSize = + 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; + + /* Use single pool for data buffers. */ +#if (BT_VER > 9) + WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); +#endif + + /* Ensure pool buffers are ordered correctly. */ + WSF_ASSERT(maxRptBufSize < dataBufSize); + + wsfBufPoolDesc_t poolDesc[] = { + { 16, 8 }, + { 32, 4 }, + { 128, mainLlRtCfg.maxAdvReports }, + { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ + { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + + mainLlRtCfg.numIsoRxBuf } + }; + + const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); + + /* Initial buffer configuration. */ + uint16_t memUsed; + WsfCsEnter(); + memUsed = WsfBufInit(numPools, poolDesc); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + WsfOsInit(); + WsfTimerInit(); +#if (WSF_TRACE_ENABLED == TRUE) + WsfTraceRegisterHandler(WsfBufIoWrite); + WsfTraceEnable(TRUE); +#endif +} + +/*************************************************************************************************/ +/*! + * \brief Check and service tokens (Trace and sniffer). + * + * \return TRUE if there is token pending. + */ +/*************************************************************************************************/ +static bool_t mainCheckServiceTokens(void) +{ + bool_t eventPending = FALSE; + +#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) + eventPending = LhciIsEventPending(); +#endif + +#if WSF_TOKEN_ENABLED == TRUE + /* Allow only a single token to be processed at a time. */ + if (!eventPending) + eventPending = WsfTokenService(); +#endif + +#if (BB_SNIFFER_ENABLED == TRUE) + /* Service one sniffer packet, if in the buffer. */ + if (!eventPending) + eventPending = LhciSnifferHandler(); +#endif + + return eventPending; +} + +/*************************************************************************************************/ +/*! + * \brief Main entry point. + */ +/*************************************************************************************************/ +int main(void) +{ + uint32_t memUsed; + + mainLoadConfiguration(); + mainWsfInit(); + +#if (WSF_TRACE_ENABLED == TRUE) + WsfCsEnter(); + memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); + WsfHeapAlloc(memUsed); + WsfCsExit(); +#endif + + WsfCsEnter(); + LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, + .wlSizeCfg = 4, + .rlSizeCfg = 4, + .plSizeCfg = 4, + .pLlRtCfg = &mainLlRtCfg, + .pFreeMem = WsfHeapGetFreeStartAddress(), + .freeMemAvail = WsfHeapCountAvailable() }; + + memUsed = LlInitControllerInit(&llCfg); + WsfHeapAlloc(memUsed); + WsfCsExit(); + + bdAddr_t bdAddr; + PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); + /* Coverity[uninit_use_in_call] */ + LlSetBdAddr((uint8_t *)&bdAddr); + + WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); + WsfOsRegisterSleepCheckFunc(ChciTrService); + + /* Register the UART RX request */ + WsfBufIoUartRegister(processConsoleRX); + + printUsage(); + + WsfOsEnterMainLoop(); + + /* Does not return. */ + return 0; +} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk new file mode 100644 index 0000000000..52c2a5eb9c --- /dev/null +++ b/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk @@ -0,0 +1,21 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# If you have secure version of MCU, set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 + +# Enable Cordio library +LIB_CORDIO = 1 + +# TRACE option +# Set to 0 to disable +# Set to 2 to enable serial port trace messages +TRACE = 2 From aed271ab64e58b60ae84f338c64902250053f8ab Mon Sep 17 00:00:00 2001 From: EricB-ADI Date: Mon, 19 Aug 2024 10:55:59 -0500 Subject: [PATCH 35/35] remove fcc in favor of rf test --- Examples/MAX32655/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32655/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - Examples/MAX32655/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32655/Bluetooth/BLE_fcc/README.md | 23 - Examples/MAX32655/Bluetooth/BLE_fcc/main.c | 568 --- .../MAX32655/Bluetooth/BLE_fcc/project.mk | 16 - Examples/MAX32665/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32665/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - Examples/MAX32665/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32665/Bluetooth/BLE_fcc/README.md | 23 - Examples/MAX32665/Bluetooth/BLE_fcc/main.c | 690 --- .../MAX32665/Bluetooth/BLE_fcc/project.mk | 21 - Examples/MAX32690/Bluetooth/BLE_fcc/.cproject | 93 - Examples/MAX32690/Bluetooth/BLE_fcc/.project | 26 - .../BLE_fcc/.settings/language.settings.xml | 15 - .../org.eclipse.cdt.codan.core.prefs | 93 - .../.settings/org.eclipse.cdt.core.prefs | 15 - .../Bluetooth/BLE_fcc/.vscode/README.md | 47 - .../BLE_fcc/.vscode/c_cpp_properties.json | 53 - .../Bluetooth/BLE_fcc/.vscode/flash.gdb | 17 - .../Bluetooth/BLE_fcc/.vscode/launch.json | 133 - .../Bluetooth/BLE_fcc/.vscode/settings.json | 101 - .../Bluetooth/BLE_fcc/.vscode/tasks.json | 115 - .../Bluetooth/BLE_fcc/ARM/Abstract.txt | 1 - .../MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct | 47 - .../MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch | 62 - .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewd | 3056 ------------ .../Bluetooth/BLE_fcc/IAR/BLE_dats.ewp | 4399 ----------------- Examples/MAX32690/Bluetooth/BLE_fcc/Makefile | 382 -- Examples/MAX32690/Bluetooth/BLE_fcc/README.md | 37 - Examples/MAX32690/Bluetooth/BLE_fcc/main.c | 537 -- .../MAX32690/Bluetooth/BLE_fcc/project.mk | 21 - 52 files changed, 12895 deletions(-) delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32655/Bluetooth/BLE_fcc/project.mk delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32665/Bluetooth/BLE_fcc/project.mk delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.cproject delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.project delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json delete mode 100755 Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/Makefile delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/README.md delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/main.c delete mode 100644 Examples/MAX32690/Bluetooth/BLE_fcc/project.mk diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.project b/Examples/MAX32655/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index 6b6f26cc5d..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index cca0bc9a44..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32655", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32655.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32655/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index 941dff1331..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index 717125621b..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32655 -TARGET_UC := MAX32655 -TARGET_LC := max32655 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/README.md b/Examples/MAX32655/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index 92ce092391..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -## Required Connections -* Connect a USB cable between the PC and the (USB/PWR - UART) connector. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/main.c b/Examples/MAX32655/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index 2999020f68..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,568 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "pal_radio.h" -#include "tmr.h" - -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 - -typedef enum { - PAL_BB_CW, - PAL_BB_PRBS9, - PAL_BB_PRBS15, - -} PalBbDbbPrbsType_t; - -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; -static uint32_t numTxPowers; -static int8_t *txPowersAvailable; - -/************************************************************************************************** - Functions -**************************************************************************************************/ - -extern bool_t PalBbAfeSetTxPower(int8_t txPower); -extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); -extern void PalBbDbbDisablePatternGen(void); -extern bool_t PalBbAfeTxSetup(void); -extern bool_t PalBbAfeTxDone(void); -extern void PalBbSeqTxEnable(void); - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(uint8_t phy) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); -} -/*************************************************************************************************/ -/*! - - * \brief Print all available TX Powers the radio is capable of. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -static void printAvailablePowers(void) -{ - uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; - - for (uint32_t i = 0; i < top; i++) { - APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); - } -} -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - - APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - - APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - - APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - - PalBbEnable(); - - if (param == 0) { - printAvailablePowers(); - break; - } else if (param >= '0' && param <= '0' + numTxPowers) { - PalBbAfeSetTxPower(txPowersAvailable[param - '0']); - LlSetAdvTxPower(txPowersAvailable[param - '0']); - APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); - - } else if (param < '0' || param > '9') { - APP_TRACE_INFO0("Invalid selection"); - } - - PalBbDisable(); - - cmd = 0; - param = 0; - - break; - - case '5': - PalBbEnable(); - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0"); - APP_TRACE_INFO0(" 1: 19"); - APP_TRACE_INFO0(" 2: 39"); - break; - } - - switch (param) { - case '0': - PalBbAfeSetChannelTx(0); - APP_TRACE_INFO0("Channel set to 0"); - break; - case '1': - PalBbAfeSetChannelTx(19); - APP_TRACE_INFO0("Channel set to 19"); - break; - case '2': - PalBbAfeSetChannelTx(39); - APP_TRACE_INFO0("Channel set to 39"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting TX"); - - /* Enable constant TX */ - PalBbAfeTxSetup(); - - PalBbDbbEnablePatternGen(PAL_BB_CW); - - cmd = 0; - param = 0; - break; - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ - PalBbAfeTxDone(); - PalBbDbbDisablePatternGen(); - - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); - cmd = 0; - break; - - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} -/*************************************************************************************************/ -/*! - * \brief Initialize Tx Powers Available for use - */ -/*************************************************************************************************/ -static void mainInitTxPowers(void) -{ - numTxPowers = PalRadioGetNumAvailableTxPowers(); - txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); - - if (txPowersAvailable == NULL) { - APP_TRACE_ERR0("Failed to get number of available TX powers."); - APP_TRACE_ERR0("Malloc returned NULL"); - } - - numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); -} -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; -#if (BT_VER > 9) - /* Use single pool for data buffers. */ - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - mainInitTxPowers(); - mainLoadConfiguration(); - mainWsfInit(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 256a1a1131..0000000000 --- a/Examples/MAX32655/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,16 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2 diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.project b/Examples/MAX32665/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index f108fb50bf..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32665 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index 94a81d4d5b..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32665", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32665.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index 36193f79c6..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index a1375f471f..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32665 -TARGET_UC := MAX32665 -TARGET_LC := max32665 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/README.md b/Examples/MAX32665/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index 92ce092391..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -## Required Connections -* Connect a USB cable between the PC and the (USB/PWR - UART) connector. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/main.c b/Examples/MAX32665/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index bb3b2db731..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,690 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "pal_radio.h" -#include "tmr.h" -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 -typedef enum { - PAL_BB_CW, - PAL_BB_PRBS9, - PAL_BB_PRBS15, - -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c -} PalBbDbbPrbsType_t; -======= -/* Bluetooth DBB registers */ -#define MXC_R_CONST_OUPUT *((volatile uint16_t *)(0x40052040)) -#define MXC_R_PATTERN_GEN *((volatile uint16_t *)(0x4005203C)) -#define MXC_R_TX_CTRL *((volatile uint16_t *)(0x4005101C)) - ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; - -static uint32_t numTxPowers; -static int8_t *txPowersAvailable; -/************************************************************************************************** - Functions -**************************************************************************************************/ - -/*! \brief Physical layer functions. */ -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - -extern bool_t PalBbAfeSetTxPower(int8_t txPower); -extern void PalBbAfeSetChannelTx(uint8_t rfChannel); -extern void PalBbDbbEnablePatternGen(PalBbDbbPrbsType_t prbsType); -extern void PalBbDbbDisablePatternGen(void); -extern bool_t PalBbAfeTxSetup(void); -extern bool_t PalBbAfeTxDone(void); -======= -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern uint8_t dbb_seq_get_rfpower(int8_t rf_power); -extern void llc_api_tx_ldo_setup(void); -extern void llc_api_set_phy(uint8_t phy, uint8_t phy_options); - -extern volatile int8_t tx_rfpower_idx; -extern volatile int8_t tx_rfpower_on; ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(void) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); -} - -/*************************************************************************************************/ -/*! - - * \brief Print all available TX Powers the radio is capable of. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -static void printAvailablePowers(void) -{ - uint8_t top = numTxPowers > 9 ? 9 : numTxPowers; - - for (uint32_t i = 0; i < top; i++) { - APP_TRACE_INFO2("%u: %d", i, txPowersAvailable[i]); - } -} -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, 0xAA, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); -======= - APP_TRACE_INFO1("Transmit RF channel 0 (2402M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, 0xAA, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); -======= - APP_TRACE_INFO1("Transmit RF channel 19 (2440M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, 0xAA, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS9, phy, 0); -======= - APP_TRACE_INFO1("Transmit RF channel 39 (2480M), 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr()); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39 (2480M), %s, forever ..", getPhyStr()); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - PalBbEnable(); - - if (param == 0) { -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - printAvailablePowers(); -======= - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -15 dBm"); - APP_TRACE_INFO0(" 1: -10 dBm"); - APP_TRACE_INFO0(" 2: -5 dBm"); - APP_TRACE_INFO0(" 3: -2 dBm"); - APP_TRACE_INFO0(" 4: 0 dBm"); - APP_TRACE_INFO0(" 5: 2 dBm"); - APP_TRACE_INFO0(" 6: 4.5 dBm"); ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - break; - } else if (param >= '0' && param <= '0' + numTxPowers) { - PalBbAfeSetTxPower(txPowersAvailable[param - '0']); - LlSetAdvTxPower(txPowersAvailable[param - '0']); - APP_TRACE_INFO1("Power set to %d dBm", txPowersAvailable[param - '0']); - - } else if (param < '0' || param > '9') { - APP_TRACE_INFO0("Invalid selection"); - } - -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c -======= - switch (param) { - case '0': - llc_api_set_txpower(-15); - LlSetAdvTxPower(-15); - APP_TRACE_INFO1("Power set to -15, Amp_coef = %x", dbb_seq_get_rfpower(-15)); - break; - case '1': - llc_api_set_txpower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO1("Power set to -10, Amp_coef = %x", dbb_seq_get_rfpower(-10)); - break; - case '2': - llc_api_set_txpower(-5); - LlSetAdvTxPower(-5); - APP_TRACE_INFO1("Power set to -5, Amp_coef = %x", dbb_seq_get_rfpower(-5)); - break; - case '3': - llc_api_set_txpower(-2); - LlSetAdvTxPower(-2); - APP_TRACE_INFO1("Power set to -2, Amp_coef = %x", dbb_seq_get_rfpower(-2)); - break; - case '4': - llc_api_set_txpower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO1("Power set to 0, Amp_coef = %x", dbb_seq_get_rfpower(0)); - break; - case '5': - llc_api_set_txpower(2); - LlSetAdvTxPower(2); - APP_TRACE_INFO1("Power set to 2, Amp_coef = %x", dbb_seq_get_rfpower(2)); - break; - case '6': - llc_api_set_txpower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO1("Power set to 4.5, Amp_coef = %x", dbb_seq_get_rfpower(4)); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - cmd = 0; - param = 0; - break; - - case '5': - PalBbEnable(); - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0 (2402M)"); - APP_TRACE_INFO0(" 1: 19 (2440M)"); - APP_TRACE_INFO0(" 2: 33 (2468M)"); - APP_TRACE_INFO0(" 3: 36 (2474M)"); - APP_TRACE_INFO0(" 4: 39 (2480M)"); - break; - } - - switch (param) { - case '0': -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - PalBbAfeSetChannelTx(0); - APP_TRACE_INFO0("Channel set to 0"); - break; - case '1': - PalBbAfeSetChannelTx(19); - APP_TRACE_INFO0("Channel set to 19"); - break; - case '2': - PalBbAfeSetChannelTx(39); - APP_TRACE_INFO0("Channel set to 39"); -======= - dbb_seq_select_rf_channel(0); - APP_TRACE_INFO0("Channel set to 0 (2402M)"); - break; - case '1': - dbb_seq_select_rf_channel(19); - APP_TRACE_INFO0("Channel set to 19 (2440M)"); - break; - case '2': - dbb_seq_select_rf_channel(33); - APP_TRACE_INFO0("Channel set to 33 (2468M)"); - break; - case '3': - dbb_seq_select_rf_channel(36); - APP_TRACE_INFO0("Channel set to 36 (2474M)"); - break; - case '4': - dbb_seq_select_rf_channel(39); - APP_TRACE_INFO0("Channel set to 39 (2480M)"); ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting PRBS9 TX"); - - /* Enable constant TX */ -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c - PalBbAfeTxSetup(); - PalBbDbbEnablePatternGen(PAL_BB_CW); -======= - MXC_R_TX_CTRL = 0x1; - - /* Enable pattern generator, set PRBS-9 */ - MXC_R_CONST_OUPUT = 0x0; - MXC_R_PATTERN_GEN = 0x4B; ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - - cmd = 0; - param = 0; - break; - - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ -<<<<<<< HEAD:Examples/MAX32655/BLE_fcc/main.c -======= - MXC_R_TX_CTRL = 0x2; - MXC_R_PATTERN_GEN = 0x48; ->>>>>>> main:Examples/MAX32665/Bluetooth/BLE_fcc/main.c - - PalBbAfeTxDone(); - PalBbDbbDisablePatternGen(); - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - llc_api_set_phy(phy, BB_PHY_OPTIONS_DEFAULT); - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - cmd = 0; - break; - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} -/*************************************************************************************************/ -/*! - * \brief Initialize Tx Powers Available for use - */ -/*************************************************************************************************/ -static void mainInitTxPowers(void) -{ - numTxPowers = PalRadioGetNumAvailableTxPowers(); - txPowersAvailable = malloc(numTxPowers * sizeof(int8_t)); - - if (txPowersAvailable == NULL) { - APP_TRACE_ERR0("Failed to get number of available TX powers."); - APP_TRACE_ERR0("Malloc returned NULL"); - } - - numTxPowers = PalRadioGetAvailableTxPowers(txPowersAvailable, numTxPowers); -} - -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; -#if (BT_VER > 9) - /* Use single pool for data buffers. */ - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - - mainLoadConfiguration(); - mainWsfInit(); - mainInitTxPowers(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 8a52cb8ee8..0000000000 --- a/Examples/MAX32665/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,21 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# If you have secure version of MCU (MAX32666), set SBT=1 to generate signed binary -# For more information on how sing process works, see -# https://www.analog.com/en/education/education-library/videos/6313214207112.html -SBT=0 - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2 diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject b/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject deleted file mode 100644 index c648cc4106..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.cproject +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.project b/Examples/MAX32690/Bluetooth/BLE_fcc/.project deleted file mode 100644 index 2f22644c90..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - BLE_fcc - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml deleted file mode 100644 index d32717b6f3..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/language.settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 59c0b37ba7..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,93 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index bf22e37436..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,15 +0,0 @@ -eclipse.preferences.version=1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=BLE_fcc -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32690 -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true -environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md deleted file mode 100755 index 5b355bd51c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# VSCode-Maxim - -_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ - -## Quick Links - -* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) -* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) - -## Introduction - -VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). - -The following features are supported: - -* Code editing with intellisense down to the register level -* Code compilation with the ability to easily re-target a project for different microcontrollers and boards -* Flashing programs -* GUI and command-line debugging - -## Dependencies - -* [Visual Studio Code](https://code.visualstudio.com/) - * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) - -## Installation - -Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. - -See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. - -## Usage - -See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. - -## Issue Tracker - -Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. - -New issues should contain _at minimum_ the following information: - -* Visual Studio Code version #s (see `Help -> About`) -* C/C++ Extension version # -* Target microcontroller and evaluation platform -* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json deleted file mode 100755 index dfbed47b58..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Linux", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - }, - { - "name": "Mac", - "includePath": [ - "${default}" - ], - "defines": [ - "${default}" - ], - "intelliSenseMode": "gcc-arm", - "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", - "browse": { - "path": [ - "${default}" - ] - } - } - ], - "version": 4 -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb deleted file mode 100755 index 8f22801a47..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/flash.gdb +++ /dev/null @@ -1,17 +0,0 @@ -define flash_m4 - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor reset halt -end - -define flash_m4_run - set architecture armv7e-m - set remotetimeout 10 - target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" - load - compare-sections - monitor resume -end diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json deleted file mode 100755 index 01fe519904..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/launch.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "configurations": [ - { - "name": "Debug Arm (Cortex-debug)", - "cwd":"${workspaceRoot}", - "executable": "${workspaceFolder}/build/${config:program_file}", - "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], - "symbolFiles": [{ - "file": "${workspaceFolder}/build/${config:symbol_file}" - }], - "request": "launch", - "type": "cortex-debug", - "servertype": "openocd", - "linux": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "windows": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "serverpath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "serverpath": "${config:OCD_path}/openocd", - }, - "searchDir": ["${config:OCD_path}/scripts"], - "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], - "interface": "swd", - "runToEntryPoint": "main", - "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" - }, - { - "name": "GDB (Arm M4)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/${config:program_file}", - "args": [], - "stopAtEntry": true, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3333", - "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", - "serverStarted": "Info : Listening on port 3333 for gdb connections", - "filterStderr": true, - "targetArchitecture": "arm", - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-arm.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text":"exec-file build/${config:program_file}" }, - { "text":"symbol-file build/${config:symbol_file}" }, - { "text":"target remote localhost:3333" }, - { "text":"monitor reset halt" }, - { "text":"set $pc=Reset_Handler"}, - { "text":"b main" } - ] - }, - { - "name": "GDB (RISC-V)", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/buildrv/${config:program_file}", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "linux": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/openocd", - }, - "windows": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", - "debugServerPath": "${config:OCD_path}/openocd.exe", - }, - "osx": { - "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", - "debugServerPath": "${config:OCD_path}/bin/openocd", - }, - "logging": { - "exceptions": true, - "trace": false, - "traceResponse": false, - "engineLogging": false - }, - "miDebuggerServerAddress": "localhost:3334", - "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", - "serverStarted": "Info : Listening on port 3334 for gdb connections", - "filterStderr": true, - "customLaunchSetupCommands": [ - {"text":"-list-features"} - ], - "targetArchitecture": "arm", - "setupCommands": [ - { "text":"set logging overwrite on"}, - { "text":"set logging file debug-riscv.log"}, - { "text":"set logging on"}, - { "text":"cd ${workspaceFolder}" }, - { "text": "set architecture riscv:rv32", "ignoreFailures": false }, - { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, - { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, - { "text":"target remote localhost:3334" }, - { "text":"b main" }, - { "text": "set $pc=Reset_Handler","ignoreFailures": false } - ] - } - ] -} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json deleted file mode 100755 index c21b9c37ea..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/settings.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "terminal.integrated.env.windows": { - "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.defaultProfile.windows": "Command Prompt", - - "terminal.integrated.env.linux": { - "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - "terminal.integrated.env.osx": { - "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", - "MAXIM_PATH":"${config:MAXIM_PATH}" - }, - - "target":"MAX32690", - "board":"EvKit_V1", - - "project_name":"${workspaceFolderBasename}", - - "program_file":"${config:project_name}.elf", - "symbol_file":"${config:program_file}", - - "M4_OCD_interface_file":"cmsis-dap.cfg", - "M4_OCD_target_file":"max32690.cfg", - "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", - "RV_OCD_target_file":"${config:target}_riscv.cfg", - - "v_Arm_GCC":"10.3", - "v_xPack_GCC":"12.2.0-3.1", - - "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", - "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", - "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", - "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", - "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", - - "C_Cpp.default.includePath": [ - "${workspaceFolder}", - "${workspaceFolder}/**", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", - "${config:MAXIM_PATH}/Libraries/CMSIS/Include", - "${config:ARM_GCC_path}/arm-none-eabi/include", - "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/stack/cfg", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/include", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/ble", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/include/common", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/include", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/dual_chip", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources/hci/exactle", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/include/util" - ], - "C_Cpp.default.browse.path": [ - "${workspaceFolder}", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", - "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", - "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", - "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", - "${config:MAXIM_PATH}/Libraries/MiscDrivers", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-host/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-apps/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-model/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-mesh-profile/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/ble-profiles/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/controller/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/wsf/sources", - "${config:MAXIM_PATH}/Libraries/Cordio/platform/targets/maxim/max32665/sources" - ], - "C_Cpp.default.defines": [ - - ], - "C_Cpp.default.forcedInclude": [ - "${workspaceFolder}/build/project_defines.h" - ] -} - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json b/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json deleted file mode 100755 index e95445e2b3..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/.vscode/tasks.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean", - "type": "shell", - "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "clean-periph", - "type": "shell", - "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", - "osx":{ - "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" - }, - "group": "build", - "problemMatcher": [] - }, - { - "label": "flash", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "flash & run", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--cd=\"${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", - "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", - "--batch" - ], - "group": "build", - "problemMatcher": [], - "dependsOn":["build"] - }, - { - "label": "erase flash", - "type": "shell", - "command": "openocd", - "args": [ - "-s", "${config:OCD_path}/scripts", - "-f", "interface/${config:M4_OCD_interface_file}", - "-f", "target/${config:M4_OCD_target_file}", - "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", - "-c", "exit" - ], - "group":"build", - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "openocd (m4)", - "type": "shell", - "command": "openocd", - "args": [ - "-s", - "${config:OCD_path}/scripts", - "-f", - "interface/${config:M4_OCD_interface_file}", - "-f", - "target/${config:M4_OCD_target_file}", - "-c", - "\"init; reset halt\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - { - "label": "gdb (m4)", - "type": "shell", - "command": "arm-none-eabi-gdb", - "args": [ - "--ex=\"cd ${workspaceFolder}\"", - "--se=\"build/${config:program_file}\"", - "--symbols=build/${config:symbol_file}", - "--ex=\"target remote localhost:3333\"", - "--ex=\"monitor reset halt\"", - "--ex=\"b main\"", - "--ex=\"c\"" - ], - "problemMatcher": [], - "dependsOn":[] - }, - ] -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt deleted file mode 100644 index c320ebf22e..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/Abstract.txt +++ /dev/null @@ -1 +0,0 @@ -BLE fit example diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct b/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct deleted file mode 100644 index d2482c178c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/ARM/BLE.sct +++ /dev/null @@ -1,47 +0,0 @@ -#! armcc -E - - -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -; /*-Memory Regions-*/ -#define IROM_start__ 0x00000000 -#define IROM_size__ 0x00010000 -#define IFLASH_start__ 0x10000000 -#define IFLASH_size__ 0x00080000 -#define pal_nvm_db_start 0x10080000 -#define PAL_NVM_SIZE 0 -#define IRAM_start__ 0x20000000 -#define IRAM_size__ 0x00020000 - - - -; /*-Sizes */ -;#define size_cstack__ 0x6000 -;#define size_heap__ 0x2000 -; /**** End of ICF editor section. ###ICF###*/ - -#define memory mem with size = 4G; - - -LR_IFLASH IFLASH_start__ IFLASH_size__ { ; load region size_region - - ER_IFLASH IFLASH_start__ IFLASH_size__ { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - PAL_NVM pal_nvm_db_start PAL_NVM_SIZE { ; RW data - .ANY (+RO) - } - - RW_IRAM1 IRAM_start__ IRAM_size__ { ; RW data - .ANY (+RW +ZI) - } - - - -} \ No newline at end of file diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch b/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch deleted file mode 100644 index ecec6c8618..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/BLE_fcc.launch +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd deleted file mode 100644 index c025f0103d..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewd +++ /dev/null @@ -1,3056 +0,0 @@ - - - 3 - - Debug - - ARM - - 1 - - C-SPY - 2 - - 32 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 1 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 1 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 1 - - - - - - - - - - - IJET_ID - 2 - - 9 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 3 - 1 - 1 - - - - - - - - - - - - - NULINK_ID - 2 - - 0 - 1 - 1 - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 1 - - - - - - - - STLINK_ID - 2 - - 7 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 1 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 8 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - - Release - - ARM - - 0 - - C-SPY - 2 - - 32 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 0 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 0 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 0 - - - - - - - - - - - IJET_ID - 2 - - 9 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 3 - 1 - 0 - - - - - - - - - - - - - NULINK_ID - 2 - - 0 - 1 - 0 - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 0 - - - - - - - - STLINK_ID - 2 - - 7 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 0 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 8 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp b/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp deleted file mode 100644 index 742fd29cfc..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/IAR/BLE_dats.ewp +++ /dev/null @@ -1,4399 +0,0 @@ - - - 3 - - Debug - - ARM - - 1 - - General - 3 - - 33 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 37 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 11 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - 1 - inputOutputBased - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 25 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - - Release - - ARM - - 0 - - General - 3 - - 33 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 37 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 11 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - 0 - inputOutputBased - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 25 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - - $PROJ_DIR$\..\fit_main.c - - - $PROJ_DIR$\..\main.c - - - $PROJ_DIR$\..\stack_fit.c - - - CMSIS-Pack - CMSISPack.Component - - Maxim Maxim API _Device.I2C_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/I2C/i2c_reva.c - - - - Maxim Maxim API _Device.RTC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/RTC/rtc_reva.c - - - - $PROJ_DIR$\RTE\RTE_Components.h - - - Maxim Maxim API _Device.CTB_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/CTB/ctb_reva.c - - - - Maxim Maxim API _Device.ICC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/ICC/icc_reva.c - - - - Maxim Maxim API _Device.Low Power_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/LP/lp_me18.c - - - - Maxim Maxim API _Device.TRNG_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TRNG/trng_revb.c - - - - Maxim Maxim API _Device.WUT_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/WUT/wut_reva.c - - - - Maxim Maxim BTLE _Bluetooth.Bluetooth LE_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_disc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_server.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/app_terminal.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_read.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/attc_write.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_read.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/att/atts_write.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/bb/bb_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bda.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/bstream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/calc128.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/chci/chci_tr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/crc32.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/fcs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_core.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/init/init_ctr.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/BlePhy/MAX32690/IAR/libphy_iar.a - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/ll/ll_math.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/prand.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/print.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_ble.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_list.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/common/sch/sch_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_rm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/controller/sources/ble/sch/sch_tm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/sec/common/sec_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_alert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_batt.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_bps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_core.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cps.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_cte.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_dis.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gls.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hid.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_hts.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_px.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_temp.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_time.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wp.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/services/svc_wss.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/terminal.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/thirdparty/uecc/uECC_ll.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Cordio/wsf/sources/util/wstr.c - - - - Maxim MAX32690 BSP _BSP.EvKit V1_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/EvKit_V1/Source/board.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/led.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/pb.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/Boards/MAX32690/Source/stdio.c - - - - Maxim Maxim API _Device.DMA_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/DMA/dma_reva.c - - - - Maxim Maxim API _Device.FLC_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_reva.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/FLC/flc_revb.c - - - - Maxim Maxim API _Device.GPIO_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c - - - - Maxim Maxim API _Device.Startup_1.0.0 - CMSISPack.Component - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\cmain.s - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\heap.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\low_level_init.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\max32690.h - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_assert.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_delay.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/mxc_lock.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/nvic_table.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/pins_me18.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\startup_max32690.s - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/SYS/sys_me18.c - - - $PROJ_DIR$\RTE\Device\MAX32690_Cortex-M4\system_max32690.c - - - - Maxim Maxim API _Device.Timers_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/TMR/tmr_revb.c - - - - Maxim Maxim API _Device.UART_1.0.0 - CMSISPack.Component - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_common.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_me18.c - - - ${CMSIS_PACK_PATH_Maxim#MAX32690#1.0.0}$\Libraries/PeriphDrivers/Source/UART/uart_revb.c - - - - - <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> - <packages/> - <device Dclock="96000000" Dcore="Cortex-M4" DcoreVersion="r0p1" Dendian="Little-endian" Dfamily="MAX32690-66" Dfpu="SP_FPU" Dmpu="NO_MPU" Dname="MAX32690" Dvendor="Maxim:23" Pname="Cortex-M4" Punits="2" info="ARM Cortex-M4 96 MHz, 512 kB RAM, 1 MB ROM" url="http://www.keil.com/dd2/maxim/max32690"> - <package info="Maxim Integrated MAX32690 Series Device Support, Board Support Package and Examples" name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - </device> - <toolchain Tcompiler="IAR" Toutput="exe"/> - <components> - <component Cbundle="Maxim BTLE" Cbundleversion="1.0.0" Cclass="Bluetooth" Cgroup="Bluetooth LE" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/assettag/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/cycling/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/datc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/dats/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/fit/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/locator/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/medc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/meds/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/tag/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/uribeacon/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/watch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/ble/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/include/common/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/include/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/"/> - <file category="include" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-apps/sources/hidapp/hidapp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_core.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/common/hci_tr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_cmd_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_core_ps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_evt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/hci/exactle/hci_vs_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_aes_rev.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ccm_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_cmac_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_ecc_hci.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/sec/common/sec_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_disc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_proc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_read.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_sign.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/attc_write.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ccc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_csf.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_dyn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_ind.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_proc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_read.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_sign.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/atts_write.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_eatt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/att/att_uuid.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/cfg/cfg_stack.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_adv_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_cis_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_master_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_slave_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_conn_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_dev_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_scan_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_lesc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sec_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/dm/dm_sync_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/hci/hci_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_coc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/l2c/l2c_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sc_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpi_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sc_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smpr_sm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_non.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_act.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-host/sources/stack/smp/smp_sc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_disc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_master_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_server.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_slave_leg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/app_terminal.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_hw.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/app_ui.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_console.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_lcd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_platform.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/af/common/ui_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/anpc/anpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atpc/atpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/atps/atps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/bas/bas_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blpc/blpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/blps/blps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cpp/cpps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/cscp/cscps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/dis/dis_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/fmpl/fmpl_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gap/gap_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/gatt/gatt_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glpc/glpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/glps/glps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hid/hid_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrpc/hrpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/hrps/hrps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htpc/htpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/htps/htps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/paspc/paspc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxpc/plxpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_db.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/plxps/plxps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/rscp/rscps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/scpps/scpps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/gyro_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/sensor/temp_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/tipc/tipc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/udsc/udsc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/uribeacon/uricfg_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_ft.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxc/wdxc_stream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_au.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_dc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_ft.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wdxs/wdxs_stream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wpc/wpc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wspc/wspc_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/profiles/wsps/wsps_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_alert.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_batt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_bps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_core.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cps.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cscs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_cte.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_dis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gls.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_gyro.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hid.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hrs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_hts.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_ipss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_plxs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_px.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_rscs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_scpss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_temp.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_time.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_uricfg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wdxs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wp.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/ble-profiles/sources/services/svc_wss.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_dtm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_pdufilt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_periodiclist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_reslist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_sniffer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/bb/bb_ble_whitelist.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/init/init_ctr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_conn_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_act_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_isr_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_data.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_iso_data.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_main_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_bis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_enc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_pdu_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lctr/lctr_sm_llcp_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_cmd_vs_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_evt_vs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_conn_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_init_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lhci/lhci_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_cs2.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_init_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_master_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_init_slave_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_bis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_cis_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_conn_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_diag.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_dtm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_enc_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_past.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_pc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_phy.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/ll/ll_math.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_events.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_master_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_adv_slave_ae.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_cis_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_conn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_iso.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_master.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_priv.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_sc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/lmgr/lmgr_main_slave.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_ble.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_rm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/ble/sch/sch_tm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/bb/bb_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/chci/chci_tr.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_list.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/controller/sources/common/sch/sch_main.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_btn.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_cfg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_codec.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_crypto.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_flash.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_i2s.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_led.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_rtc.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_sys.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_twi.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/platform/targets/maxim/max32690/sources/pal_uart.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC_ll.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/thirdparty/uecc/uECC.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_assert.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_buf.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_bufio.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_cs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_detoken.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_efs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_heap_sbrk.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_msg.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_nvm.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_os.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_queue.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_timer.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/targets/baremetal/wsf_trace.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bda.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/bstream.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/calc128.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/crc32.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/fcs.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/prand.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/print.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/terminal.c"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Cordio/wsf/sources/util/wstr.c"/> - <file category="library" condition="Startup IAR" deviceDependent="1" name="Libraries/BlePhy/MAX32690/IAR/libphy_iar.a"/> - </component> - <component Cbundle="MAX32690 BSP" Cbundleversion="1.0.0" Cclass="BSP" Cgroup="EvKit V1" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Include/" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/EvKit_V1/Source/board.c" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/Boards/MAX32690/Include/" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/led.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/pb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/Boards/MAX32690/Source/stdio.c" version="1.0.0"/> - </component> - <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.2.0"> - <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.5.1"/> - <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> - <file category="include" name="CMSIS/Core/Include/"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="CTB" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_common.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/ctb_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="DMA" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/dma_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="FLC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_common.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_reva.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/flc_revb.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="GPIO" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_reva.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/gpio_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="I2C" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/i2c_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="ICC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/icc_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Low Power" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/lp_me18.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="RTC" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/rtc_reva.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Startup" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Include/MAX32690/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ADC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/AES/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CRC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/DMA/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/FLC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/GPIO/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2C/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/I2S/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/ICC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LP/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/RTC/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SPI/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WDT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/PT/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CTB/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/CAN/" version="1.0.0"/> - <file category="include" deviceDependent="1" name="Libraries/PeriphDrivers/Source/LPCMP/" version="1.0.0"/> - <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/startup_max32690.s" version="1.0.0"/> - <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/low_level_init.c" version="1.0.0"/> - <file attr="config" category="sourceAsm" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/cmain.s" version="1.0.0"/> - <file attr="config" category="sourceC" condition="Startup IAR" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/IAR/heap.c" version="1.0.0"/> - <file attr="config" category="sourceC" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> - <file attr="config" category="header" deviceDependent="1" name="Libraries/CMSIS/Device/Maxim/MAX32690/Include/max32690.h" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_assert.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_delay.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/mxc_lock.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/pins_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/sys_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/SYS/nvic_table.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="Timers" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_revb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TMR/tmr_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="TRNG" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/TRNG/trng_revb.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="UART" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_revb.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/UART/uart_common.c" version="1.0.0"/> - </component> - <component Cbundle="Maxim API" Cbundleversion="1.0.0" Cclass="Device" Cgroup="WUT" Cvendor="Maxim" Cversion="1.0.0" deviceDependent="1"> - <package name="MAX32690" url="https://www.mxim.net/microcontroller/pack/" vendor="Maxim" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_me18.c" version="1.0.0"/> - <file category="sourceC" deviceDependent="1" name="Libraries/PeriphDrivers/Source/WUT/wut_reva.c" version="1.0.0"/> - </component> - </components> - <apis/> -</configuration> - - - diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile b/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile deleted file mode 100644 index d6ae4b890b..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/Makefile +++ /dev/null @@ -1,382 +0,0 @@ -############################################################################### - # - # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - # Analog Devices, Inc.), - # Copyright (C) 2023-2024 Analog Devices, Inc. - # - # 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. - # - ############################################################################## - -# ** Readme! ** -# Don't edit this file! This is the core Makefile for a MaximSDK -# project. The available configuration options can be overridden -# in "project.mk", on the command-line, or with system environment -# variables. - -# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system -# for more detailed instructions on how to use this system. - -# The detailed instructions mentioned above are easier to read than -# this file, but the comments found in this file also outline the -# available configuration variables. This file is organized into -# sub-sections, some of which expose config variables. - - -# ******************************************************************************* -# Set the target microcontroller and board to compile for. - -# Every TARGET microcontroller has some Board Support Packages (BSPs) that are -# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP -# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. - -# Configuration Variables: -# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 -# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA - - -ifeq "$(TARGET)" "" -# Default target microcontroller -TARGET := MAX32690 -TARGET_UC := MAX32690 -TARGET_LC := max32690 -else -# "TARGET" has been overridden in the environment or on the command-line. -# We need to calculate an upper and lowercase version of the part number, -# because paths on Linux and MacOS are case-sensitive. -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) -endif - -# Default board. -BOARD ?= EvKit_V1 - -# ******************************************************************************* -# Locate the MaximSDK - -# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable -# should point to the root directory of the MaximSDK installation. Setting this manually -# is usually only required if you're working on the command-line. - -# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK -# and move up from this project's original location. - -# Configuration Variables: -# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK - - -ifneq "$(MAXIM_PATH)" "" -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -# Locate some other useful paths... -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS -endif - -# ******************************************************************************* -# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH -# in case project.mk needs to reference those values. However, we also include -# this as early as possible in the Makefile so that it can append to or override -# the variables below. - - -PROJECTMK ?= $(abspath ./project.mk) -include $(PROJECTMK) -$(info Loaded project.mk) -# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file - -# ******************************************************************************* -# Final path sanitization and re-calculation. No options here. - -ifeq "$(MAXIM_PATH)" "" -# MAXIM_PATH is still not defined... -DEPTH := ../../../../ -MAXIM_PATH := $(abspath $(DEPTH)) -$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) -$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) -else -# Sanitize MAXIM_PATH for backslashes -MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) -endif - -# Final recalculation of LIBS_DIR/CMSIS_ROOT -LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) -CMSIS_ROOT := $(LIBS_DIR)/CMSIS - -# One final UC/LC check in case user set TARGET in project.mk -TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) -TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) - -export TARGET -export TARGET_UC -export TARGET_LC -export CMSIS_ROOT -# TODO: Remove dependency on exports for these variables. - -# ******************************************************************************* -# Set up search paths, and auto-detect all source code on those paths. - -# The following paths are searched by default, where "./" is the project directory. -# ./ -# |- *.h -# |- *.c -# |-include (optional) -# |- *.h -# |-src (optional) -# |- *.c - -# Configuration Variables: -# - VPATH : Tell this Makefile to search additional locations for source (.c) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - IPATH : Tell this Makefile to search additional locations for header (.h) files. -# You should use the "+=" operator with this option. -# Ex: VPATH += your/new/path -# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. -# This is really only useful if you want to add a source file that isn't -# on any VPATH, in which case you can add the full path to the file here. -# You should use the "+=" operator with this option. -# Ex: SRCS += your/specific/source/file.c -# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on -# VPATH and add them to the build. This is enabled by default. Set -# to 0 to disable. If autosearch is disabled, source files must be -# manually added to SRCS. -# Ex: AUTOSEARCH = 0 - - -# Where to find source files for this project. -VPATH += . -VPATH += src -VPATH := $(VPATH) - -# Where to find header files for this project -IPATH += . -IPATH += include -IPATH := $(IPATH) - -AUTOSEARCH ?= 1 -ifeq ($(AUTOSEARCH), 1) -# Auto-detect all C/C++ source files on VPATH -SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) -SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) -endif - -# Collapse SRCS before passing them on to the next stage -SRCS := $(SRCS) - -# ******************************************************************************* -# Set the output filename - -# Configuration Variables: -# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject - - -# The default value creates a file named after the target micro. Ex: MAX78000.elf -PROJECT ?= $(TARGET_LC) - -# ******************************************************************************* -# Compiler options - -# Configuration Variables: -# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional -# symbols and sets -Og as the default optimization level. -# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. -# Ex: MXC_OPTIMIZE_CFLAGS = -O2 -# - PROJ_CFLAGS : Add additional compiler flags to the build. -# You should use the "+=" operator with this option. -# Ex: PROJ_CFLAGS += -Wextra -# - MFLOAT_ABI : Set the floating point acceleration level. -# The only options are "hard", "soft", or "softfp". -# Ex: MFLOAT_ABI = hard -# - LINKERFILE : Override the default linkerfile. -# Ex: LINKERFILE = customlinkerfile.ld -# - LINKERPATH : Override the default search location for $(LINKERFILE) -# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -# If $(LINKERFILE) cannot be found at this path, then the root project -# directory will be used as a fallback. - -# Select 'GCC' or 'IAR' compiler -ifeq "$(COMPILER)" "" -COMPILER := GCC -endif - -# Set default compiler optimization levels -ifeq "$(MAKECMDGOALS)" "release" -# Default optimization level for "release" builds (make release) -MXC_OPTIMIZE_CFLAGS ?= -O2 -DEBUG = 0 -endif - -ifeq ($(DEBUG),1) -# Optimizes for debugging as recommended -# by GNU for code-edit-debug cycles -# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options -MXC_OPTIMIZE_CFLAGS := -Og -endif - -# Default level if not building for release or explicitly for debug -MXC_OPTIMIZE_CFLAGS ?= -Og - -# Set compiler flags -PROJ_CFLAGS += -Wall # Enable warnings -PROJ_CFLAGS += -DMXC_ASSERT_ENABLE - -# Set hardware floating point acceleration. -# Options are: -# - hard -# - soft -# - softfp (default if MFLOAT_ABI is not set) -MFLOAT_ABI ?= softfp -# MFLOAT_ABI must be exported to other Makefiles -export MFLOAT_ABI - -# This path contains system-level intialization files for the target micro. Add to the build. -VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source - -# ******************************************************************************* -# Secure Boot Tools (SBT) - -# This section integrates the Secure Boot Tools. It's intended for use with -# microcontrollers that have a secure bootloader. - -# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. - -# Configuration variables: -# SBT : Toggle SBT integration. Set to 1 to enable, or 0 -# to disable -# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to -# Tools/SBT in the MaximSDK. The standalone SBT installer will override -# this via an environment variable. -# TARGET_SEC : Specify the part number to be passed into the SBT. This should match -# the secure variant part #. The default value will depend on TARGET. -# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and -# the default selection happens in Tools/SBT/SBT-config. -# However, if there are multiple secure part #s for the target -# microcontroller this variable may need to be changed. - -SBT ?= 0 -ifeq ($(SBT), 1) -MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT -MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) -# ^ Must sanitize path for \ on Windows, since this may come from an environment -# variable. - -export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work - -# SBT-config.mk and SBT-rules.mk are included further down this Makefile. - -endif # SBT - -# ******************************************************************************* -# Default goal selection. This section allows you to override the default goal -# that will run if no targets are specified on the command-line. -# (ie. just running 'make' instead of 'make all') - -# Configuration variables: -# .DEFAULT_GOAL : Set the default goal if no targets were specified on the -# command-line -# ** "override" must be used with this variable. ** -# Ex: "override .DEFAULT_GOAL = mygoal" - -ifeq "$(.DEFAULT_GOAL)" "" -ifeq ($(SBT),1) -override .DEFAULT_GOAL := sla -else -override .DEFAULT_GOAL := all -endif -endif - -# Developer note: 'override' is used above for legacy Makefile compatibility. -# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system -# uses 'override' to come in over the top without breaking old projects. - -# It's also necessary to explicitly set MAKECMDGOALS... -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - -# Enable colors when --sync-output is used. -# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) -ifneq ($(MAKE_TERMOUT),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -ifneq ($(FORCE_COLOR),) -PROJ_CFLAGS += -fdiagnostics-color=always -endif - -# ******************************************************************************* -# Include SBT config. We need to do this here because it needs to know -# the current MAKECMDGOAL. -ifeq ($(SBT),1) -include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk -endif - -# ******************************************************************************* -# Libraries - -# This section offers "toggle switches" to include or exclude the libraries that -# are available in the MaximSDK. Set a configuration variable to 1 to include the -# library in the build, or 0 to exclude. - -# Each library may also have its own library specific configuration variables. See -# Libraries/libs.mk for more details. - -# Configuration variables: -# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) -# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) -# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. -# - LIB_CORDIO : Include the Cordio BLE library -# - LIB_FCL : Include the Free Cryptographic Library (FCL) -# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries -# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library -# - LIB_LITTLEFS : Include the "little file system" (littleFS) library -# - LIB_LWIP : Include the lwIP library -# - LIB_MAXUSB : Include the MAXUSB library -# - LIB_SDHC : Include the SDHC library - -include $(LIBS_DIR)/libs.mk - - -# ******************************************************************************* -# Rules - -# Include the rules for building for this target. All other makefiles should be -# included before this one. -include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk - -# Include the rules that integrate the SBTs. SBTs are a special case that must be -# include after the core gcc rules to extend them. -ifeq ($(SBT), 1) -include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk -endif - - -# Get .DEFAULT_GOAL working. -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS:=$(.DEFAULT_GOAL) -endif - - -all: -# Extend the functionality of the "all" recipe here - $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf - -libclean: - $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph - -clean: -# Extend the functionality of the "clean" recipe here - -# The rule to clean out all the build products. -distclean: clean libclean diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/README.md b/Examples/MAX32690/Bluetooth/BLE_fcc/README.md deleted file mode 100644 index af372dfeb5..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# BLE_fcc - -Simple serial port console for FCC testing. -Refer to [BLE_fcc](../../../../Libraries/Cordio/docs/Applications/BLE_fcc.md) documentation in the Cordio Library. - -## Software - -### Project Usage - -Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. - -### Required Connections - -If using the MAX32690EVKIT: -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. -- Install headers JP7(RX\_EN) and JP8(TX\_EN). -- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - -If using the MAX32690FTHR: -- Connect a USB cable between the PC and the J5 (USB/PWR) connector. -- Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - -If using the AD-APARD32690-SL: -- Connect a USB cable between the PC and the P10 (USB-C) connector. -- Connect a MAXPICO Debug adapter to P9 (SWD Connector) -- Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. - -### Project-Specific Build Notes -* Setting `TRACE=1` in [**project.mk**](project.mk) initializes the on-board USB-to-UART adapter for -viewing the trace messages and interacting with the application. Port uses settings: - - Baud : 115200 - - Char size : 8 - - Parity : None - - Stop bits : 1 - - HW Flow Control : No - - SW Flow Control : No -* Setting `SBT=1` in [**project.mk**](project.mk) enables Secure Boot Tools for the project diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/main.c b/Examples/MAX32690/Bluetooth/BLE_fcc/main.c deleted file mode 100644 index 3efb2f9dd5..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/main.c +++ /dev/null @@ -1,537 +0,0 @@ -/*************************************************************************************************/ -/*! - * @file main.c - * @brief BLE project with simple serial console for FCC testing - * - * Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved. - * - * Copyright (c) 2019-2020 Packetcraft, Inc. - * - * Portions Copyright (c) 2022-2023 Analog Devices, Inc. - * - * 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 "ll_init_api.h" -#include "chci_tr.h" -#include "lhci_api.h" -#include "hci_defs.h" -#include "wsf_assert.h" -#include "wsf_buf.h" -#include "wsf_cs.h" -#include "wsf_heap.h" -#include "wsf_timer.h" -#include "wsf_trace.h" -#include "wsf_bufio.h" -#include "bb_ble_sniffer_api.h" -#include "pal_bb.h" -#include "pal_cfg.h" -#include "tmr.h" - -/************************************************************************************************** - Definitions -**************************************************************************************************/ - -/*! \brief UART TX buffer size */ -#define PLATFORM_UART_TERMINAL_BUFFER_SIZE 2048U - -#define FREQ_HOP_PERIOD_US 20000 - -/************************************************************************************************** - Global Variables -**************************************************************************************************/ - -/*! \brief Persistent BB runtime configuration. */ -static BbRtCfg_t mainBbRtCfg; - -/*! \brief Persistent LL runtime configuration. */ -static LlRtCfg_t mainLlRtCfg; - -static uint8_t phy = LL_PHY_LE_1M; -static uint8_t phy_str[16]; -static uint8_t txFreqHopCh; - -/************************************************************************************************** - Functions -**************************************************************************************************/ - -/*! \brief Physical layer functions. */ -extern void llc_api_set_txpower(int8_t power); -extern void dbb_seq_select_rf_channel(uint32_t rf_channel); -extern void llc_api_tx_ldo_setup(void); -extern void dbb_seq_tx_enable(void); -extern void dbb_seq_tx_disable(void); - -/*************************************************************************************************/ -/*! - * \fn Get PHY String. - * - * \brief Convert the PHY definition to a string. - * - * \param phy PHY definition. - * - * \return Pointer to string describing the PHY. - */ -/*************************************************************************************************/ -static uint8_t *getPhyStr(uint8_t phy) -{ - switch (phy) { - case LL_TEST_PHY_LE_1M: - default: - memcpy(phy_str, "1M PHY", 7); - break; - case LL_TEST_PHY_LE_2M: - memcpy(phy_str, "2M PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S8: - memcpy(phy_str, "S8 PHY", 7); - break; - case LL_TEST_PHY_LE_CODED_S2: - memcpy(phy_str, "S2 PHY", 7); - break; - } - return phy_str; -} - -/*************************************************************************************************/ -/*! - * \fn Timer 2 interrupts handler. - * - * \brief Controls the frequency hopping. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void TMR2_IRQHandler(void) -{ - int res; - - MXC_TMR_TO_Clear(MXC_TMR2); - - /* Start the next channel */ - res = LlEnhancedTxTest(txFreqHopCh++, 255, LL_TEST_PKT_TYPE_AA, phy, 0); - if (res != LL_SUCCESS) - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - - /* Wrap the channels */ - if (txFreqHopCh == 40) - txFreqHopCh = 0; - - /* Restart the timeout */ - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); -} - -/*************************************************************************************************/ -/*! - * \fn Usage statement - * - * \brief Prints the usage statement. - * - * \param None. - * - * \return None. - */ -/*************************************************************************************************/ -void printUsage(void) -{ - APP_TRACE_INFO0("Usage: "); - APP_TRACE_INFO0(" (0) Transmit Continuous Modulated on RF channel 0 (2402 MHz)"); - APP_TRACE_INFO0(" (1) Transmit Continuous Modulated on RF channel 19 (2440 MHz)"); - APP_TRACE_INFO0(" (2) Transmit Continuous Modulated RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (3) Receive on RF channel 39 (2480 MHz)"); - APP_TRACE_INFO0(" (4) Set Transmit power"); - APP_TRACE_INFO0(" (5) Enable Constant Unmodulated TX"); - APP_TRACE_INFO0(" (6) Disable constant TX -- MUST be called after (5)"); - /* APP_TRACE_INFO0(" (7) Set PA value"); */ - APP_TRACE_INFO0(" (8) Set PHY"); - APP_TRACE_INFO0(" (9) TX Frequency Hop"); - APP_TRACE_INFO0(" (e) End transmission -- MUST be used after each (0-3, 9)"); - APP_TRACE_INFO0(" (u) Print usage"); -} - -/*************************************************************************************************/ -/*! - * \fn Process the Console RX - * - * \brief State machine for the console inputs. - * - * \param rxByte Character received from the console. - * - * \return None. - */ -/*************************************************************************************************/ -static void processConsoleRX(uint8_t rxByte) -{ - int res; - - /* Holds the state of the command and the parameter */ - static uint8_t cmd = 0; - static uint8_t param = 0; - - /* Determines if the incoming character is a command or a parameter */ - if (cmd == 0) - cmd = rxByte; - else - param = rxByte; - - switch (cmd) { - case '0': - - APP_TRACE_INFO1("Transmit RF channel 0, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(0, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '1': - - APP_TRACE_INFO1("Transmit RF channel 19, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(19, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '2': - - APP_TRACE_INFO1("Transmit RF channel 39, 255 bytes/pkt, PRBS15, %s, forever ..", - getPhyStr(phy)); - res = LlEnhancedTxTest(39, 255, LL_TEST_PKT_TYPE_PRBS15, phy, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '3': - - APP_TRACE_INFO1("Receive RF channel 39, %s, forever ..", getPhyStr(phy)); - res = LlEnhancedRxTest(39, phy, 0, 0); - APP_TRACE_INFO2("res = %u %s", res, res == LL_SUCCESS ? "(SUCCESS)" : "(FAIL)"); - cmd = 0; - break; - - case '4': - - if (param == 0) { - APP_TRACE_INFO0("Select transmit power"); - APP_TRACE_INFO0(" 0: -10 dBm"); - APP_TRACE_INFO0(" 1: 0 dBm"); - APP_TRACE_INFO0(" 2: 4.5 dBm"); - break; - } - - switch (param) { - case '0': - llc_api_set_txpower(-10); - LlSetAdvTxPower(-10); - APP_TRACE_INFO0("Power set to -10 dBm"); - break; - case '1': - llc_api_set_txpower(0); - LlSetAdvTxPower(0); - APP_TRACE_INFO0("Power set to 0 dBm"); - break; - case '2': - llc_api_set_txpower(4); - LlSetAdvTxPower(4); - APP_TRACE_INFO0("Power set to 4.5 dBm"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - cmd = 0; - param = 0; - break; - - case '5': - if (param == 0) { - APP_TRACE_INFO0("Select transmit channel"); - APP_TRACE_INFO0(" 0: 0"); - APP_TRACE_INFO0(" 1: 19"); - APP_TRACE_INFO0(" 2: 39"); - break; - } - - switch (param) { - case '0': - dbb_seq_select_rf_channel(0); - APP_TRACE_INFO0("Channel set to 0"); - break; - case '1': - dbb_seq_select_rf_channel(19); - APP_TRACE_INFO0("Channel set to 19"); - break; - case '2': - dbb_seq_select_rf_channel(39); - APP_TRACE_INFO0("Channel set to 39"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - APP_TRACE_INFO0("Starting TX"); - - PalBbEnable(); - - llc_api_tx_ldo_setup(); - - /* Enable constant TX */ - dbb_seq_tx_enable(); - - cmd = 0; - param = 0; - break; - - case '6': - APP_TRACE_INFO0("Disabling TX"); - - /* Disable constant TX */ - dbb_seq_tx_disable(); - - PalBbDisable(); - - cmd = 0; - break; - - case '8': - if (param == 0) { - /* Set the PHY */ - APP_TRACE_INFO0("Select PHY"); - APP_TRACE_INFO0("1: 1M"); - APP_TRACE_INFO0("2: 2M"); - APP_TRACE_INFO0("3: S8"); - APP_TRACE_INFO0("4: S2"); - break; - } - - switch (param) { - case '1': - phy = LL_TEST_PHY_LE_1M; - APP_TRACE_INFO0("PHY set to 1M"); - break; - case '2': - phy = LL_TEST_PHY_LE_2M; - APP_TRACE_INFO0("PHY set to 2M"); - break; - case '3': - phy = LL_TEST_PHY_LE_CODED_S8; - APP_TRACE_INFO0("PHY set to S8"); - break; - case '4': - phy = LL_TEST_PHY_LE_CODED_S2; - APP_TRACE_INFO0("PHY set to S2"); - break; - default: - APP_TRACE_INFO0("Invalid selection"); - break; - } - - cmd = 0; - param = 0; - break; - case '9': - /* Frequency hopping TX */ - APP_TRACE_INFO0("Starting frequency hopping"); - NVIC_EnableIRQ(TMR2_IRQn); - MXC_TMR_TO_Start(MXC_TMR2, FREQ_HOP_PERIOD_US); - MXC_TMR_EnableInt(MXC_TMR2); - cmd = 0; - break; - - case 'E': - case 'e': - - APP_TRACE_INFO0("End test"); - MXC_TMR_Stop(MXC_TMR2); - LlEndTest(NULL); - cmd = 0; - break; - - case 'U': - case 'u': - printUsage(); - cmd = 0; - break; - - default: - APP_TRACE_INFO0("Invalid selection"); - cmd = 0; - param = 0; - break; - } -} - -/*************************************************************************************************/ -/*! - * \brief Load runtime configuration. - */ -/*************************************************************************************************/ -static void mainLoadConfiguration(void) -{ - PalBbLoadCfg((PalBbCfg_t *)&mainBbRtCfg); - LlGetDefaultRunTimeCfg(&mainLlRtCfg); - PalCfgLoadData(PAL_CFG_ID_LL_PARAM, &mainLlRtCfg.maxAdvSets, sizeof(LlRtCfg_t) - 9); - PalCfgLoadData(PAL_CFG_ID_BLE_PHY, &mainLlRtCfg.phy2mSup, 4); - - /* Set 5.1 requirements. */ - mainLlRtCfg.btVer = LL_VER_BT_CORE_SPEC_5_0; - - /* Set the 32k sleep clock accuracy into one of the following bins, default is 20 - HCI_CLOCK_500PPM - HCI_CLOCK_250PPM - HCI_CLOCK_150PPM - HCI_CLOCK_100PPM - HCI_CLOCK_75PPM - HCI_CLOCK_50PPM - HCI_CLOCK_30PPM - HCI_CLOCK_20PPM - */ - mainBbRtCfg.clkPpm = 20; -} - -/*************************************************************************************************/ -/*! - * \brief Initialize WSF. - */ -/*************************************************************************************************/ -static void mainWsfInit(void) -{ - /* +12 for message headroom, + 2 event header, +255 maximum parameter length. */ - const uint16_t maxRptBufSize = 12 + 2 + 255; - - /* +12 for message headroom, +ISO Data Load, +4 for header. */ - const uint16_t dataBufSize = - 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; - - /* Use single pool for data buffers. */ -#if (BT_VER > 9) - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); -#endif - - /* Ensure pool buffers are ordered correctly. */ - WSF_ASSERT(maxRptBufSize < dataBufSize); - - wsfBufPoolDesc_t poolDesc[] = { - { 16, 8 }, - { 32, 4 }, - { 128, mainLlRtCfg.maxAdvReports }, - { maxRptBufSize, mainLlRtCfg.maxAdvReports }, /* Extended reports. */ - { dataBufSize, mainLlRtCfg.numTxBufs + mainLlRtCfg.numRxBufs + mainLlRtCfg.numIsoTxBuf + - mainLlRtCfg.numIsoRxBuf } - }; - - const uint8_t numPools = sizeof(poolDesc) / sizeof(poolDesc[0]); - - /* Initial buffer configuration. */ - uint16_t memUsed; - WsfCsEnter(); - memUsed = WsfBufInit(numPools, poolDesc); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - WsfOsInit(); - WsfTimerInit(); -#if (WSF_TRACE_ENABLED == TRUE) - WsfTraceRegisterHandler(WsfBufIoWrite); - WsfTraceEnable(TRUE); -#endif -} - -/*************************************************************************************************/ -/*! - * \brief Check and service tokens (Trace and sniffer). - * - * \return TRUE if there is token pending. - */ -/*************************************************************************************************/ -static bool_t mainCheckServiceTokens(void) -{ - bool_t eventPending = FALSE; - -#if (WSF_TOKEN_ENABLED == TRUE) || (BB_SNIFFER_ENABLED == TRUE) - eventPending = LhciIsEventPending(); -#endif - -#if WSF_TOKEN_ENABLED == TRUE - /* Allow only a single token to be processed at a time. */ - if (!eventPending) - eventPending = WsfTokenService(); -#endif - -#if (BB_SNIFFER_ENABLED == TRUE) - /* Service one sniffer packet, if in the buffer. */ - if (!eventPending) - eventPending = LhciSnifferHandler(); -#endif - - return eventPending; -} - -/*************************************************************************************************/ -/*! - * \brief Main entry point. - */ -/*************************************************************************************************/ -int main(void) -{ - uint32_t memUsed; - - mainLoadConfiguration(); - mainWsfInit(); - -#if (WSF_TRACE_ENABLED == TRUE) - WsfCsEnter(); - memUsed = WsfBufIoUartInit(WsfHeapGetFreeStartAddress(), PLATFORM_UART_TERMINAL_BUFFER_SIZE); - WsfHeapAlloc(memUsed); - WsfCsExit(); -#endif - - WsfCsEnter(); - LlInitRtCfg_t llCfg = { .pBbRtCfg = &mainBbRtCfg, - .wlSizeCfg = 4, - .rlSizeCfg = 4, - .plSizeCfg = 4, - .pLlRtCfg = &mainLlRtCfg, - .pFreeMem = WsfHeapGetFreeStartAddress(), - .freeMemAvail = WsfHeapCountAvailable() }; - - memUsed = LlInitControllerInit(&llCfg); - WsfHeapAlloc(memUsed); - WsfCsExit(); - - bdAddr_t bdAddr; - PalCfgLoadData(PAL_CFG_ID_BD_ADDR, bdAddr, sizeof(bdAddr_t)); - /* Coverity[uninit_use_in_call] */ - LlSetBdAddr((uint8_t *)&bdAddr); - - WsfOsRegisterSleepCheckFunc(mainCheckServiceTokens); - WsfOsRegisterSleepCheckFunc(ChciTrService); - - /* Register the UART RX request */ - WsfBufIoUartRegister(processConsoleRX); - - printUsage(); - - WsfOsEnterMainLoop(); - - /* Does not return. */ - return 0; -} diff --git a/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk b/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk deleted file mode 100644 index 52c2a5eb9c..0000000000 --- a/Examples/MAX32690/Bluetooth/BLE_fcc/project.mk +++ /dev/null @@ -1,21 +0,0 @@ -# This file can be used to set build configuration -# variables. These variables are defined in a file called -# "Makefile" that is located next to this one. - -# For instructions on how to use this system, see -# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system - -# ********************************************************** - -# If you have secure version of MCU, set SBT=1 to generate signed binary -# For more information on how sing process works, see -# https://www.analog.com/en/education/education-library/videos/6313214207112.html -SBT=0 - -# Enable Cordio library -LIB_CORDIO = 1 - -# TRACE option -# Set to 0 to disable -# Set to 2 to enable serial port trace messages -TRACE = 2