From 368c329da03b29cceb80d1530c76f7fd00745126 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 8 Oct 2026 13:30:02 +0300 Subject: [PATCH] Forgot to add board files to git --- servo_controller/.gitignore | 1 - .../boards/arm/servo2350/Kconfig.defconfig | 51 +++ .../boards/arm/servo2350/Kconfig.servo2350 | 4 + .../boards/arm/servo2350/board.cmake | 20 + .../boards/arm/servo2350/board.yml | 6 + .../boards/arm/servo2350/docs/Servo2350.pdf | Bin 0 -> 280709 bytes .../arm/servo2350/servo2350-pinctrl.dtsi | 57 +++ .../boards/arm/servo2350/servo2350.dtsi | 356 ++++++++++++++++++ .../servo2350/servo2350_rp2350b_hazard3.dts | 12 + .../servo2350/servo2350_rp2350b_hazard3.yaml | 20 + .../servo2350_rp2350b_hazard3_defconfig | 10 + .../arm/servo2350/servo2350_rp2350b_m33.dts | 12 + .../arm/servo2350/servo2350_rp2350b_m33.yaml | 21 ++ .../servo2350/servo2350_rp2350b_m33_defconfig | 10 + .../boards/arm/servo2350/support/openocd.cfg | 8 + 15 files changed, 587 insertions(+), 1 deletion(-) create mode 100644 servo_controller/boards/arm/servo2350/Kconfig.defconfig create mode 100644 servo_controller/boards/arm/servo2350/Kconfig.servo2350 create mode 100644 servo_controller/boards/arm/servo2350/board.cmake create mode 100644 servo_controller/boards/arm/servo2350/board.yml create mode 100644 servo_controller/boards/arm/servo2350/docs/Servo2350.pdf create mode 100644 servo_controller/boards/arm/servo2350/servo2350-pinctrl.dtsi create mode 100644 servo_controller/boards/arm/servo2350/servo2350.dtsi create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.dts create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.yaml create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3_defconfig create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.dts create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.yaml create mode 100644 servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33_defconfig create mode 100644 servo_controller/boards/arm/servo2350/support/openocd.cfg diff --git a/servo_controller/.gitignore b/servo_controller/.gitignore index 1a6d87a..af55f5e 100644 --- a/servo_controller/.gitignore +++ b/servo_controller/.gitignore @@ -1,4 +1,3 @@ build tmp -boards .vscode \ No newline at end of file diff --git a/servo_controller/boards/arm/servo2350/Kconfig.defconfig b/servo_controller/boards/arm/servo2350/Kconfig.defconfig new file mode 100644 index 0000000..15ed436 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/Kconfig.defconfig @@ -0,0 +1,51 @@ + +if BOARD_SERVO2350 + +menu "USB sample options" + depends on USB_DEVICE_STACK_NEXT + +config USBD_MANUFACTURER + string "USB device sample manufacturer string" + default "Zephyr Project" + help + USB device sample manufacturer string. + +config USBD_PRODUCT + string "USB device sample product string" + default "USBD sample" + help + USB device sample product stringa. + +config USBD_PID + hex "USB device sample Product ID" + default 0x0001 + help + USB device sample Product ID. + +config USBD_SELF_POWERED + bool "USB device sample Self-powered attribute" + default y + help + Set the Self-powered attribute in the sample configuration. + +config USBD_REMOTE_WAKEUP + bool "USB device sample Remote Wakeup attribute" + help + Set the Remote Wakeup attribute in the sample configuration. + +config USBD_MAX_POWER + int "USB device sample bMaxPower value" + default 125 + range 0 250 + help + bMaxPower value in the sample configuration in 2 mA units. + +config USBD_20_EXTENSION_DESC + bool "Use default USB 2.0 Extension Descriptor" + depends on USBD_BOS_SUPPORT + help + Set bcdUSB value to 0201 and use default USB 2.0 Extension Descriptor. + +endmenu + +endif # BOARD_SERVO2350 diff --git a/servo_controller/boards/arm/servo2350/Kconfig.servo2350 b/servo_controller/boards/arm/servo2350/Kconfig.servo2350 new file mode 100644 index 0000000..9ff6836 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/Kconfig.servo2350 @@ -0,0 +1,4 @@ + +config BOARD_SERVO2350 + select SOC_RP2350B_HAZARD3 if BOARD_SERVO2350_RP2350B_HAZARD3 + select SOC_RP2350B_M33 if BOARD_SERVO2350_RP2350B_M33 diff --git a/servo_controller/boards/arm/servo2350/board.cmake b/servo_controller/boards/arm/servo2350/board.cmake new file mode 100644 index 0000000..b7a6d26 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/board.cmake @@ -0,0 +1,20 @@ + +board_runner_args(openocd --cmd-pre-init "source [find interface/cmsis-dap.cfg]") +if(CONFIG_ARM) + board_runner_args(openocd --cmd-pre-init "source [find target/rp2350.cfg]") +else() + board_runner_args(openocd --cmd-pre-init "source [find target/rp2350-riscv.cfg]") +endif() + +board_runner_args(probe-rs "--chip=RP235x") + +# The adapter speed is expected to be set by interface configuration. +# The Raspberry Pi's OpenOCD fork doesn't, so match their documentation at +# https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html#debugging-with-swd +board_runner_args(openocd --cmd-pre-init "set_adapter_speed_if_not_set 5000") + +board_runner_args(uf2 "--board-id=RP2350") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/probe-rs.board.cmake) +include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake) diff --git a/servo_controller/boards/arm/servo2350/board.yml b/servo_controller/boards/arm/servo2350/board.yml new file mode 100644 index 0000000..c6d42c5 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/board.yml @@ -0,0 +1,6 @@ +board: + name: servo2350 + full_name: Servo2350 + vendor: arm + socs: + - name: rp2350b diff --git a/servo_controller/boards/arm/servo2350/docs/Servo2350.pdf b/servo_controller/boards/arm/servo2350/docs/Servo2350.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20e19d8f6f131c4da3cf81c172ce9a9f140c5f4e GIT binary patch literal 280709 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 z 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 literal 0 HcmV?d00001 diff --git a/servo_controller/boards/arm/servo2350/servo2350-pinctrl.dtsi b/servo_controller/boards/arm/servo2350/servo2350-pinctrl.dtsi new file mode 100644 index 0000000..1d38dcf --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350-pinctrl.dtsi @@ -0,0 +1,57 @@ +#include + +&pinctrl { + i2c0_default: i2c0_default { + group1 { + pinmux = , // SDA + ; // SCL + input-enable; + input-schmitt-enable; + }; + }; + + spi1_default: spi1_default { + group1 { + pinmux = , // D29 + , // SPI_CLK + ; // SPI_MOSI + }; + + group2 { + pinmux = ; // SPI_MISO + input-enable; + }; + }; + + pwm_default: pwm_default { + group1 { + pinmux = , // SERVO 1 + , // SERVO 2 + , // SERVO 3 + , // SERVO 4 + , // SERVO 5 + , // SERVO 6 + , // SERVO 7 + , // SERVO 8 + , // SERVO 9 + , // SERVO 10 + , // SERVO 11 + , // SERVO 12 + , // SERVO 13 + , // SERVO 14 + , // SERVO 15 + , // SERVO 16 + , // SERVO 17 + ; // SERVO 18 + }; + }; + + adc_default: adc_default { + group1 { + pinmux = , // MUX_COMMON + , // SERVO 17 + ; // SERVO 18 + input-enable; + }; + }; +}; diff --git a/servo_controller/boards/arm/servo2350/servo2350.dtsi b/servo_controller/boards/arm/servo2350/servo2350.dtsi new file mode 100644 index 0000000..949d8c1 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350.dtsi @@ -0,0 +1,356 @@ +#include + +#include +#include +#include + +#include "servo2350-pinctrl.dtsi" + +/ { + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &cdc_acm_uart0; + zephyr,shell-uart = &cdc_acm_uart0; + zephyr,code-partition = &code_partition; + }; + + zephyr,user { + io-channels = <&adc 0>, + <&adc 1>, + <&adc 2>; + }; + + leds { + compatible = "gpio-leds"; + + led0: led_0 { + gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + label = "LED0"; + }; + led1: led_1 { + gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + label = "LED1"; + }; + }; + + imu_int1_pin { + compatible = "gpio-keys"; + + imu_int1: imu_int1 { + gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>; + label = "IMU_INT1"; + }; + + imu_int2: imu_int2 { + gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; + label = "IMU_INT2"; + }; + }; + + digital_inputs: digital_inputs { + compatible = "gpio-keys"; + + digital1: digital_1 { + gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_1"; + }; + digital2: digital_2 { + gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_2"; + }; + digital3: digital_3 { + gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_3"; + }; + digital4: digital_4 { + gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_4"; + }; + digital5: digital_5 { + gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_5"; + }; + digital6: digital_6 { + gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; + label = "DIGITAL_6"; + }; + }; + + digital_outputs: digital_outputs { + compatible = "gpio-leds"; + + leg0_enable: leg0_enable { + gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; + label = "LEG0_ENABLE"; + }; + leg1_enable: leg1_enable { + gpios = <&gpio0_hi 11 GPIO_ACTIVE_HIGH>; + label = "LEG1_ENABLE"; + }; + leg2_enable: leg2_enable { + gpios = <&gpio0_hi 12 GPIO_ACTIVE_HIGH>; + label = "LEG2_ENABLE"; + }; + leg3_enable: leg3_enable { + gpios = <&gpio0_hi 13 GPIO_ACTIVE_HIGH>; + label = "LEG3_ENABLE"; + }; + leg4_enable: leg4_enable { + gpios = <&gpio0_hi 14 GPIO_ACTIVE_HIGH>; + label = "LEG4_ENABLE"; + }; + leg5_enable: leg5_enable { + gpios = <&gpio0_hi 15 GPIO_ACTIVE_HIGH>; + label = "LEG5_ENABLE"; + }; + }; + + pwm_servos { + compatible = "pwm-leds"; + + servo1: servo_1 { + pwms = <&pwm 0 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_1"; + }; + servo2: servo_2 { + pwms = <&pwm 1 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_2"; + }; + servo3: servo_3 { + pwms = <&pwm 2 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_3"; + }; + servo4: servo_4 { + pwms = <&pwm 3 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_4"; + }; + servo5: servo_5 { + pwms = <&pwm 4 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_5"; + }; + servo6: servo_6 { + pwms = <&pwm 5 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_6"; + }; + servo7: servo_7 { + pwms = <&pwm 6 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_7"; + }; + servo8: servo_8 { + pwms = <&pwm 7 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_8"; + }; + servo9: servo_9 { + pwms = <&pwm 8 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_9"; + }; + servo10: servo_10 { + pwms = <&pwm 9 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_10"; + }; + servo11: servo_11 { + pwms = <&pwm 10 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_11"; + }; + servo12: servo_12 { + pwms = <&pwm 11 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_12"; + }; + servo13: servo_13 { + pwms = <&pwm 12 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_13"; + }; + servo14: servo_14 { + pwms = <&pwm 13 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_14"; + }; + servo15: servo_15 { + pwms = <&pwm 14 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_15"; + }; + servo16: servo_16 { + pwms = <&pwm 15 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_16"; + }; + servo17: servo_17 { + pwms = <&pwm 16 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_17"; + }; + servo18: servo_18 { + pwms = <&pwm 17 PWM_USEC(20000) PWM_POLARITY_NORMAL>; + label = "SERVO_18"; + }; + }; + + mux: mux { + compatible = "cd74hc4067"; + status = "okay"; + select-gpios = <&gpio0_hi 2 GPIO_ACTIVE_HIGH>, + <&gpio0_hi 3 GPIO_ACTIVE_HIGH>, + <&gpio0_hi 6 GPIO_ACTIVE_HIGH>, + <&gpio0_hi 7 GPIO_ACTIVE_HIGH>; + }; + + aliases { + watchdog0 = &wdt0; + led0 = &led0; + led1 = &led1; + imu = &imu; + imu-int1 = &imu_int1; + imu-int2 = &imu_int2; + digital1 = &digital1; + digital2 = &digital2; + digital3 = &digital3; + digital4 = &digital4; + digital5 = &digital5; + digital6 = &digital6; + leg0-enable = &leg0_enable; + leg1-enable = &leg1_enable; + leg2-enable = &leg2_enable; + leg3-enable = &leg3_enable; + leg4-enable = &leg4_enable; + leg5-enable = &leg5_enable; + servo1 = &servo1; + servo2 = &servo2; + servo3 = &servo3; + servo4 = &servo4; + servo5 = &servo5; + servo6 = &servo6; + servo7 = &servo7; + servo8 = &servo8; + servo9 = &servo9; + servo10 = &servo10; + servo11 = &servo11; + servo12 = &servo12; + servo13 = &servo13; + servo14 = &servo14; + servo15 = &servo15; + servo16 = &servo16; + servo17 = &servo17; + servo18 = &servo18; + mux = &mux; + }; +}; + +&flash0 { + /* W25Q16JVUXIQ_TR: 16M-bit (2MB) NOR Flash */ + reg = <0x10000000 DT_SIZE_M(2)>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Code partition: 256KB for application code (starts at beginning of flash) */ + code_partition: partition@0 { + label = "code"; + reg = <0x00000000 DT_SIZE_K(256)>; + read-only; + }; + + /* Settings partition: 64KB for settings data */ + settings_partition: partition@40000 { + label = "settings"; + reg = <0x00040000 DT_SIZE_K(64)>; + }; + + /* Data partition: 1728KB for data storage (largest partition) */ + data_partition: partition@50000 { + label = "data"; + reg = <0x00050000 DT_SIZE_K(1728)>; + }; + }; +}; + +zephyr_udc0: &usbd { + status = "okay"; + cdc_acm_uart0: cdc_acm_uart0 { + compatible = "zephyr,cdc-acm-uart"; + label = "USB_CDC"; + }; +}; + +gpio0_lo: &gpio0 { + status = "okay"; +}; + +&gpio0_hi { + status = "okay"; + +}; + +&i2c0 { + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; + + imu: icm45686@68 { + compatible = "invensense,icm42688"; + reg = <0x68>; + status = "disabled"; + + int1-gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>; + int2-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; + + accel-pwr-mode = <3>; + accel-ord = <9>; + accel-fs = <16>; + accel-lpf = <0>; + + gyro-pwr-mode = <0>; /* turn off */ + gyro-ord = <9>; + gyro-fs = <2000>; + }; +}; + +&spi1 { + clock-frequency = ; + pinctrl-0 = <&spi1_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&adc { + pinctrl-0 = <&adc_default>; + pinctrl-names = "default"; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + adc0: channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; + + adc1: channel@1 { + reg = <1>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; + + adc2: channel@2 { + reg = <2>; + zephyr,gain = "ADC_GAIN_1"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; +}; + +&pwm { + status = "okay"; + pinctrl-0 = <&pwm_default>; + pinctrl-names = "default"; + divider-int-0 = <64>; +}; + +&timer0 { + status = "okay"; +}; diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.dts b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.dts new file mode 100644 index 0000000..10e828f --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.dts @@ -0,0 +1,12 @@ +/dts-v1/; + +/* The build system assumes that there's a cpucluster-specific file. + * + * This file provides composition of the device tree: + * 1. The common features of the SoC + * 2. Core-specific configuration. + * 3. Board-specific configuration. + */ +#include +#include +#include "servo2350.dtsi" diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.yaml b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.yaml new file mode 100644 index 0000000..e8db7b1 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3.yaml @@ -0,0 +1,20 @@ +identifier: servo2350/rp2350b/hazard3 +name: Servo2350 (Hazard3) +type: mcu +arch: riscv +flash: 16384 +ram: 8192 +toolchain: + - zephyr +supported: + - adc + - clock + - counter + - dma + - gpio + - hwinfo + - i2c + - pwm + - spi + - usbd + - uart diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3_defconfig b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3_defconfig new file mode 100644 index 0000000..89fba55 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_hazard3_defconfig @@ -0,0 +1,10 @@ +CONFIG_BUILD_OUTPUT_HEX=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_CLOCK_CONTROL=y +CONFIG_CONSOLE=y +CONFIG_GPIO=y +CONFIG_RESET=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_USE_DT_CODE_PARTITION=y diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.dts b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.dts new file mode 100644 index 0000000..f8b0b67 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.dts @@ -0,0 +1,12 @@ +/dts-v1/; + +/* The build system assumes that there's a cpucluster-specific file. + * + * This file provides composition of the device tree: + * 1. The common features of the SoC + * 2. Core-specific configuration. + * 3. Board-specific configuration. + */ +#include +#include +#include "servo2350.dtsi" diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.yaml b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.yaml new file mode 100644 index 0000000..89f4dec --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33.yaml @@ -0,0 +1,21 @@ +identifier: servo2350/rp2350b/m33 +name: Servo2350 (Cortex-M33) +type: mcu +arch: arm +flash: 16384 +ram: 8192 +toolchain: + - zephyr + - gnuarmemb +supported: + - adc + - clock + - counter + - dma + - gpio + - hwinfo + - i2c + - pwm + - spi + - usbd + - uart diff --git a/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33_defconfig b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33_defconfig new file mode 100644 index 0000000..89fba55 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/servo2350_rp2350b_m33_defconfig @@ -0,0 +1,10 @@ +CONFIG_BUILD_OUTPUT_HEX=y +CONFIG_BUILD_OUTPUT_UF2=y +CONFIG_CLOCK_CONTROL=y +CONFIG_CONSOLE=y +CONFIG_GPIO=y +CONFIG_RESET=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_USE_DT_CODE_PARTITION=y diff --git a/servo_controller/boards/arm/servo2350/support/openocd.cfg b/servo_controller/boards/arm/servo2350/support/openocd.cfg new file mode 100644 index 0000000..652ca53 --- /dev/null +++ b/servo_controller/boards/arm/servo2350/support/openocd.cfg @@ -0,0 +1,8 @@ +# Checking and set 'adapter speed'. +# Set the adaptor speed, if unset, and given as an argument. +proc set_adapter_speed_if_not_set { speed } { + puts "checking adapter speed..." + if { [catch {adapter speed} ret] } { + adapter speed $speed + } +}