From a0be4ee3e921056560172c417a2458e7915077e4 Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Fri, 8 Jul 2022 17:07:28 +0800 Subject: [PATCH] Add uart0-5 configure --- bsp/cypress/libraries/HAL_Drivers/SConscript | 9 +- .../libraries/HAL_Drivers/drv_common.c | 34 +- bsp/cypress/libraries/HAL_Drivers/drv_uart.c | 174 +- bsp/cypress/libraries/HAL_Drivers/drv_uart.h | 19 + .../libraries/HAL_Drivers/uart_config.h | 170 ++ .../libraries/IFX_PSOC6_HAL/SConscript | 13 + .../GeneratedSource/cycfg_peripherals.c | 27 +- .../mtb_shared/serial-flash/.gitignore | 1 + .../mtb_shared/serial-flash/EULA | 55 + .../mtb_shared/serial-flash/LICENSE | 165 ++ .../mtb_shared/serial-flash/README.md | 42 + .../mtb_shared/serial-flash/RELEASE.md | 54 + .../serial-flash/cy_serial_flash_prog.c | 101 ++ .../serial-flash/cy_serial_flash_qspi.c | 921 ++++++++++ .../serial-flash/cy_serial_flash_qspi.h | 272 +++ .../docs/api_reference_manual.html | 15 + .../serial-flash/docs/html/bc_s.png | Bin 0 -> 676 bytes .../serial-flash/docs/html/bdwn.png | Bin 0 -> 147 bytes .../serial-flash/docs/html/closed.png | Bin 0 -> 132 bytes .../mtb_shared/serial-flash/docs/html/doc.png | Bin 0 -> 746 bytes .../serial-flash/docs/html/doxygen.svg | 26 + .../serial-flash/docs/html/doxygen_style.css | 1583 +++++++++++++++++ .../serial-flash/docs/html/dynsections.js | 121 ++ .../serial-flash/docs/html/folderclosed.png | Bin 0 -> 616 bytes .../serial-flash/docs/html/folderopen.png | Bin 0 -> 597 bytes .../docs/html/group__group__board__libs.html | 755 ++++++++ .../serial-flash/docs/html/index.html | 144 ++ .../serial-flash/docs/html/jquery.js | 35 + .../serial-flash/docs/html/logo.png | Bin 0 -> 19090 bytes .../mtb_shared/serial-flash/docs/html/menu.js | 127 ++ .../serial-flash/docs/html/menudata.js | 27 + .../serial-flash/docs/html/nav_f.png | Bin 0 -> 153 bytes .../serial-flash/docs/html/nav_g.png | Bin 0 -> 95 bytes .../serial-flash/docs/html/nav_h.png | Bin 0 -> 98 bytes .../serial-flash/docs/html/navtree.css | 147 ++ .../serial-flash/docs/html/navtree.js | 549 ++++++ .../serial-flash/docs/html/navtreedata.js | 39 + .../serial-flash/docs/html/navtreeindex0.js | 7 + .../serial-flash/docs/html/open.png | Bin 0 -> 123 bytes .../serial-flash/docs/html/resize.js | 150 ++ .../serial-flash/docs/html/search/all_0.html | 37 + .../serial-flash/docs/html/search/all_0.js | 24 + .../serial-flash/docs/html/search/all_1.html | 37 + .../serial-flash/docs/html/search/all_1.js | 4 + .../serial-flash/docs/html/search/close.svg | 31 + .../docs/html/search/functions_0.html | 37 + .../docs/html/search/functions_0.js | 17 + .../docs/html/search/groups_0.html | 37 + .../serial-flash/docs/html/search/groups_0.js | 4 + .../serial-flash/docs/html/search/mag_sel.svg | 74 + .../docs/html/search/nomatches.html | 13 + .../docs/html/search/pages_0.html | 37 + .../serial-flash/docs/html/search/pages_0.js | 4 + .../serial-flash/docs/html/search/search.css | 263 +++ .../serial-flash/docs/html/search/search.js | 794 +++++++++ .../docs/html/search/search_l.png | Bin 0 -> 567 bytes .../docs/html/search/search_m.png | Bin 0 -> 158 bytes .../docs/html/search/search_r.png | Bin 0 -> 553 bytes .../docs/html/search/searchdata.js | 27 + .../docs/html/search/typedefs_0.html | 37 + .../docs/html/search/typedefs_0.js | 4 + .../serial-flash/docs/html/splitbar.png | Bin 0 -> 314 bytes .../serial-flash/docs/html/sync_off.png | Bin 0 -> 853 bytes .../serial-flash/docs/html/sync_on.png | Bin 0 -> 845 bytes .../serial-flash/docs/html/tab_a.png | Bin 0 -> 142 bytes .../serial-flash/docs/html/tab_b.png | Bin 0 -> 169 bytes .../serial-flash/docs/html/tab_h.png | Bin 0 -> 177 bytes .../serial-flash/docs/html/tab_s.png | Bin 0 -> 184 bytes .../serial-flash/docs/html/tabs.css | 1 + .../mtb_shared/serial-flash/version.xml | 1 + bsp/cypress/psoc6-cy8cproto-4343w/.config | 98 +- .../psoc6-cy8cproto-4343w/applications/main.c | 8 +- .../psoc6-cy8cproto-4343w/board/Kconfig | 63 +- bsp/cypress/psoc6-cy8cproto-4343w/rtconfig.py | 2 +- 74 files changed, 7344 insertions(+), 92 deletions(-) create mode 100644 bsp/cypress/libraries/HAL_Drivers/uart_config.h create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/.gitignore create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/EULA create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/LICENSE create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/README.md create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/RELEASE.md create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_prog.c create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.c create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.h create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/api_reference_manual.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bc_s.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bdwn.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/closed.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doc.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen.svg create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen_style.css create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/dynsections.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/folderclosed.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/folderopen.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/group__group__board__libs.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/index.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/jquery.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/logo.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menu.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menudata.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_f.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_g.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_h.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/navtree.css create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/navtree.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/navtreedata.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/navtreeindex0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/open.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/resize.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/close.svg create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/mag_sel.svg create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/nomatches.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.css create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search_l.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search_m.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search_r.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/searchdata.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.html create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.js create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/splitbar.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_off.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_on.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_a.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_b.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_h.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_s.png create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tabs.css create mode 100644 bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/version.xml diff --git a/bsp/cypress/libraries/HAL_Drivers/SConscript b/bsp/cypress/libraries/HAL_Drivers/SConscript index f27717a19..5fef6acb7 100644 --- a/bsp/cypress/libraries/HAL_Drivers/SConscript +++ b/bsp/cypress/libraries/HAL_Drivers/SConscript @@ -19,12 +19,19 @@ if GetDepend(['RT_USING_SERIAL']): src += ['drv_uart.c'] if GetDepend(['RT_USING_I2C', 'RT_USING_I2C_BITOPS']): - if GetDepend('BSP_USING_I2C1') or GetDepend('BSP_USING_I2C2'): + if GetDepend('BSP_USING_I2C1'): src += ['drv_soft_i2c.c'] +if GetDepend(['RT_USING_I2C']): + if GetDepend('BSP_USING_HW_I2C1'): + src += ['drv_i2c.c'] + if GetDepend(['RT_USING_ADC']): src += ['drv_adc.c'] +if GetDepend(['RT_USING_QSPI']): + src += ['drv_qspi.c'] + path = [cwd] path += [cwd + '/config'] diff --git a/bsp/cypress/libraries/HAL_Drivers/drv_common.c b/bsp/cypress/libraries/HAL_Drivers/drv_common.c index 5151012f8..097960242 100644 --- a/bsp/cypress/libraries/HAL_Drivers/drv_common.c +++ b/bsp/cypress/libraries/HAL_Drivers/drv_common.c @@ -70,32 +70,14 @@ void _Error_Handler(char *s, int num) */ void rt_hw_us_delay(rt_uint32_t us) { - rt_uint32_t ticks; - rt_uint32_t told, tnow, tcnt = 0; - rt_uint32_t reload = SysTick->LOAD; - - ticks = us * reload / (1000000 / RT_TICK_PER_SECOND); - told = SysTick->VAL; - while (1) - { - tnow = SysTick->VAL; - if (tnow != told) - { - if (tnow < told) - { - tcnt += told - tnow; - } - else - { - tcnt += reload - tnow + told; - } - told = tnow; - if (tcnt >= ticks) - { - break; - } - } - } + rt_uint32_t start, now, delta, reload, us_tick; + start = SysTick->VAL; + reload = SysTick->LOAD; + us_tick = SystemCoreClock / 1000000UL; + do { + now = SysTick->VAL; + delta = start > now ? start - now : reload + start - now; + } while(delta < us_tick * us); } /** diff --git a/bsp/cypress/libraries/HAL_Drivers/drv_uart.c b/bsp/cypress/libraries/HAL_Drivers/drv_uart.c index da8019517..727398686 100644 --- a/bsp/cypress/libraries/HAL_Drivers/drv_uart.c +++ b/bsp/cypress/libraries/HAL_Drivers/drv_uart.c @@ -11,67 +11,146 @@ #include #include "drv_uart.h" +#include "uart_config.h" #include "cy_retarget_io.h" #include "cyhal_scb_common.h" -struct ifx_usart -{ - char *name; - CySCB_Type *usart_x; - IRQn_Type intrSrc; - struct rt_serial_device serial; -}; - enum { +#ifdef BSP_USING_UART0 + UART0_INDEX, +#endif #ifdef BSP_USING_UART1 UART1_INDEX, #endif +#ifdef BSP_USING_UART2 + UART2_INDEX, +#endif +#ifdef BSP_USING_UART3 + UART3_INDEX, +#endif +#ifdef BSP_USING_UART4 + UART4_INDEX, +#endif +#ifdef BSP_USING_UART5 + UART5_INDEX, +#endif }; -#ifdef BSP_USING_UART1 -/* UART1 device driver structure */ -const cy_stc_sysint_t UART1_SCB_IRQ_cfg = +static struct ifx_uart_config uart_config[] = { - .intrSrc = scb_5_interrupt_IRQn, - .intrPriority = 7u, -}; +#ifdef BSP_USING_UART0 + UART0_CONFIG, #endif - -static struct ifx_usart usart_config[] = -{ #ifdef BSP_USING_UART1 - { - "uart1", - SCB5, - scb_5_interrupt_IRQn, - }, + UART1_CONFIG, +#endif +#ifdef BSP_USING_UART2 + UART2_CONFIG, +#endif +#ifdef BSP_USING_UART3 + UART3_CONFIG, +#endif +#ifdef BSP_USING_UART4 + UART4_CONFIG, +#endif +#ifdef BSP_USING_UART5 + UART5_CONFIG, #endif }; -static void usart_isr(struct rt_serial_device *serial) +static struct ifx_uart uart_obj[sizeof(uart_config) / sizeof(uart_config[0])] = {0}; + +static void uart_isr(struct rt_serial_device *serial) { RT_ASSERT(serial != RT_NULL); + struct ifx_uart *uart = (struct ifx_uart *) serial->parent.user_data; + RT_ASSERT(uart != RT_NULL); -#ifdef BSP_USING_UART1 - if ((SCB5->INTR_RX_MASKED & SCB_INTR_RX_MASKED_NOT_EMPTY_Msk) != 0) +#ifdef BSP_USING_UART5 + if ((uart->config->usart_x->INTR_RX_MASKED & SCB_INTR_RX_MASKED_NOT_EMPTY_Msk) != 0) { /* Clear UART "RX fifo not empty interrupt" */ - SCB5->INTR_RX = SCB5->INTR_RX & SCB_INTR_RX_NOT_EMPTY_Msk; + uart->config->usart_x->INTR_RX = uart->config->usart_x->INTR_RX & SCB_INTR_RX_NOT_EMPTY_Msk; rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } #endif } -#ifdef BSP_USING_UART1 +#ifdef BSP_USING_UART0 /* UART0 Interrupt Hanlder */ +void uart0_isr_callback(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&uart_obj[UART0_INDEX].serial); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif +#ifdef BSP_USING_UART1 +/* UART1 Interrupt Hanlder */ void uart1_isr_callback(void) { /* enter interrupt */ rt_interrupt_enter(); - usart_isr(&usart_config[UART1_INDEX].serial); + uart_isr(&uart_obj[UART1_INDEX].serial); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif +#ifdef BSP_USING_UART2 +/* UART2 Interrupt Hanlder */ +void uart2_isr_callback(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&uart_obj[UART2_INDEX].serial); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif +#ifdef BSP_USING_UART3 +/* UART3 Interrupt Hanlder */ +void uart3_isr_callback(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&uart_obj[UART3_INDEX].serial); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif +#ifdef BSP_USING_UART4 +/* UART4 Interrupt Hanlder */ +void uart4_isr_callback(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&uart_obj[UART4_INDEX].serial); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif +#ifdef BSP_USING_UART5 +/* UART5 Interrupt Hanlder */ +void uart5_isr_callback(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&uart_obj[UART5_INDEX].serial); /* leave interrupt */ rt_interrupt_leave(); @@ -83,18 +162,17 @@ void uart1_isr_callback(void) */ static rt_err_t ifx_configure(struct rt_serial_device *serial, struct serial_configure *cfg) { - struct ifx_usart *usart_instance = (struct ifx_usart *) serial->parent.user_data; + struct ifx_uart *uart = (struct ifx_uart *) serial->parent.user_data; RT_ASSERT(serial != RT_NULL); - RT_ASSERT(usart_instance != RT_NULL); + RT_ASSERT(uart != RT_NULL); cy_en_scb_uart_status_t result; /* Initialize retarget-io to use the debug UART port */ - result = cy_retarget_io_init(CYBSP_DEBUG_UART_TX, CYBSP_DEBUG_UART_RX, + result = cy_retarget_io_init(uart->config->tx_pin, uart->config->rx_pin, CY_RETARGET_IO_BAUDRATE); - /* retarget-io init failed. Stop program execution */ RT_ASSERT(result != RT_ERROR); return RT_EOK; @@ -103,8 +181,8 @@ static rt_err_t ifx_configure(struct rt_serial_device *serial, struct serial_con static rt_err_t ifx_control(struct rt_serial_device *serial, int cmd, void *arg) { RT_ASSERT(serial != RT_NULL); - struct ifx_usart *usart = (struct ifx_usart *) serial->parent.user_data; - RT_ASSERT(usart != RT_NULL); + struct ifx_uart *uart = (struct ifx_uart *) serial->parent.user_data; + RT_ASSERT(uart != RT_NULL); switch (cmd) { @@ -114,15 +192,13 @@ static rt_err_t ifx_control(struct rt_serial_device *serial, int cmd, void *arg) case RT_DEVICE_CTRL_SET_INT: /* Unmasking only the RX fifo not empty interrupt bit */ - usart->usart_x->INTR_RX_MASK = SCB_INTR_RX_MASK_NOT_EMPTY_Msk; + uart->config->usart_x->INTR_RX_MASK = SCB_INTR_RX_MASK_NOT_EMPTY_Msk; -#ifdef BSP_USING_UART1 /* Interrupt Settings for UART */ - Cy_SysInt_Init(&UART1_SCB_IRQ_cfg, uart1_isr_callback); -#endif + Cy_SysInt_Init(uart->config->UART_SCB_IRQ_cfg, uart->config->userIsr); /* Enable the interrupt */ - NVIC_EnableIRQ(usart->intrSrc); + NVIC_EnableIRQ(uart->config->intrSrc); break; } @@ -133,9 +209,9 @@ static int ifx_uarths_putc(struct rt_serial_device *serial, char c) { RT_ASSERT(serial != RT_NULL); - struct ifx_usart *usart = (struct ifx_usart *) serial->parent.user_data; + struct ifx_uart *uart = (struct ifx_uart *) serial->parent.user_data; - RT_ASSERT(usart != RT_NULL); + RT_ASSERT(uart != RT_NULL); if (_cyhal_scb_pm_transition_pending()) return CYHAL_SYSPM_RSLT_ERR_PM_PENDING; @@ -143,7 +219,7 @@ static int ifx_uarths_putc(struct rt_serial_device *serial, char c) uint32_t count = 0; while (count == 0) { - count = Cy_SCB_UART_Put(usart->usart_x, c); + count = Cy_SCB_UART_Put(uart->config->usart_x, c); } return (1); @@ -180,23 +256,23 @@ const struct rt_uart_ops _uart_ops = void rt_hw_uart_init(void) { int index; - rt_size_t obj_num; - obj_num = sizeof(usart_config) / sizeof(struct ifx_usart); + rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct ifx_uart); struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; rt_err_t result = 0; for (index = 0; index < obj_num; index++) { - usart_config[index].serial.ops = &_uart_ops; - usart_config[index].serial.config = config; + uart_obj[index].config = &uart_config[index]; + uart_obj[index].serial.ops = &_uart_ops; + uart_obj[index].serial.config = config; /* register uart device */ - result = rt_hw_serial_register(&usart_config[index].serial, - usart_config[index].name, + result = rt_hw_serial_register(&uart_obj[index].serial, + uart_obj[index].config->name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, - &usart_config[index]); + &uart_obj[index]); RT_ASSERT(result == RT_EOK); } diff --git a/bsp/cypress/libraries/HAL_Drivers/drv_uart.h b/bsp/cypress/libraries/HAL_Drivers/drv_uart.h index 18d569a57..5a0f615e9 100644 --- a/bsp/cypress/libraries/HAL_Drivers/drv_uart.h +++ b/bsp/cypress/libraries/HAL_Drivers/drv_uart.h @@ -17,6 +17,25 @@ #include "board.h" #include "cycfg_peripherals.h" +#define uart_isr_callback(name) name##_isr_callback + +struct ifx_uart_config +{ + const char *name; + rt_uint32_t tx_pin; + rt_uint32_t rx_pin; + CySCB_Type *usart_x; + IRQn_Type intrSrc; + cy_israddress userIsr; + cy_stc_sysint_t *UART_SCB_IRQ_cfg; +}; + +struct ifx_uart +{ + struct ifx_uart_config *config; + struct rt_serial_device serial; +}; + void rt_hw_uart_init(void); #endif diff --git a/bsp/cypress/libraries/HAL_Drivers/uart_config.h b/bsp/cypress/libraries/HAL_Drivers/uart_config.h new file mode 100644 index 000000000..ce1d1c392 --- /dev/null +++ b/bsp/cypress/libraries/HAL_Drivers/uart_config.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-07-08 Rbb666 first version + */ + +#ifndef __UART_CONFIG_H__ +#define __UART_CONFIG_H__ + +#include +#include "board.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_UART0 +/* UART0 device driver structure */ +cy_stc_sysint_t UART2_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_0_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif +#ifdef BSP_USING_UART1 +/* UART1 device driver structure */ +cy_stc_sysint_t UART1_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_1_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif +#ifdef BSP_USING_UART2 +/* UART2 device driver structure */ +cy_stc_sysint_t UART2_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_2_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif +#ifdef BSP_USING_UART3 +/* UART3 device driver structure */ +cy_stc_sysint_t UART3_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_3_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif +#ifdef BSP_USING_UART4 +/* UART4 device driver structure */ +cy_stc_sysint_t UART4_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_4_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif +#ifdef BSP_USING_UART5 +/* UART5 device driver structure */ +cy_stc_sysint_t UART5_SCB_IRQ_cfg = +{ + .intrSrc = (IRQn_Type) scb_5_interrupt_IRQn, + .intrPriority = (7u), +}; +#endif + +#if defined(BSP_USING_UART0) +#ifndef UART0_CONFIG +#define UART0_CONFIG \ + { \ + .name = "uart0", \ + .tx_pin = P0_3, \ + .rx_pin = P0_2, \ + .usart_x = SCB0, \ + .intrSrc = scb_0_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart0) \ + .UART_SCB_IRQ_cfg = &UART0_SCB_IRQ_cfg, \ + } +void uart0_isr_callback(void); +#endif /* UART0_CONFIG */ +#endif /* BSP_USING_UART0 */ + +#if defined(BSP_USING_UART1) +#ifndef UART1_CONFIG +#define UART1_CONFIG \ + { \ + .name = "uart1", \ + .tx_pin = P10_1, \ + .rx_pin = P10_0, \ + .usart_x = SCB1, \ + .intrSrc = scb_1_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart1) \ + .UART_SCB_IRQ_cfg = &UART1_SCB_IRQ_cfg, \ + } +void uart1_isr_callback(void); +#endif /* UART1_CONFIG */ +#endif /* BSP_USING_UART1 */ + +#if defined(BSP_USING_UART2) +#ifndef UART2_CONFIG +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .tx_pin = P9_1, \ + .rx_pin = P9_0, \ + .usart_x = SCB2, \ + .intrSrc = scb_2_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart2), \ + .UART_SCB_IRQ_cfg = &UART2_SCB_IRQ_cfg, \ + } +void uart2_isr_callback(void); +#endif /* UART2_CONFIG */ +#endif /* BSP_USING_UART2 */ + +#if defined(BSP_USING_UART3) +#ifndef UART3_CONFIG +#define UART3_CONFIG \ + { \ + .name = "uart3", \ + .tx_pin = P6_1, \ + .rx_pin = P6_0, \ + .usart_x = SCB3, \ + .intrSrc = scb_3_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart3), \ + .UART_SCB_IRQ_cfg = &UART3_SCB_IRQ_cfg, \ + } +void uart3_isr_callback(void); +#endif /* UART3_CONFIG */ +#endif /* BSP_USING_UART3 */ + +#if defined(BSP_USING_UART4) +#ifndef UART4_CONFIG +#define UART4_CONFIG \ + { \ + .name = "uart4", \ + .tx_pin = P7_1, \ + .rx_pin = P7_0, \ + .usart_x = SCB4, \ + .intrSrc = scb_4_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart4), \ + .UART_SCB_IRQ_cfg = &UART4_SCB_IRQ_cfg, \ + } +void uart4_isr_callback(void); +#endif /* UART4_CONFIG */ +#endif /* BSP_USING_UART4 */ + +#if defined(BSP_USING_UART5) +#ifndef UART5_CONFIG +#define UART5_CONFIG \ + { \ + .name = "uart5", \ + .tx_pin = P5_1, \ + .rx_pin = P5_0, \ + .usart_x = SCB5, \ + .intrSrc = scb_5_interrupt_IRQn, \ + .userIsr = uart_isr_callback(uart5), \ + .UART_SCB_IRQ_cfg = &UART5_SCB_IRQ_cfg, \ + } +void uart5_isr_callback(void); +#endif /* UART5_CONFIG */ +#endif /* BSP_USING_UART5 */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/SConscript b/bsp/cypress/libraries/IFX_PSOC6_HAL/SConscript index 58356ef4f..c01630183 100644 --- a/bsp/cypress/libraries/IFX_PSOC6_HAL/SConscript +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/SConscript @@ -67,10 +67,23 @@ if GetDepend(['RT_USING_ADC']): src += ['mtb-pdl-cat1/drivers/source/cy_dmac.c'] src += ['mtb-pdl-cat1/drivers/source/cy_sysanalog.c'] +if GetDepend(['RT_USING_QSPI']): + src += ['mtb-hal-cat1/source/cyhal_qspi.c'] + src += ['mtb-pdl-cat1/drivers/source/cy_dma.c'] + src += ['mtb-pdl-cat1/drivers/source/cy_smif.c'] + src += ['mtb-pdl-cat1/drivers/source/cy_smif_sfdp.c'] + src += ['mtb-pdl-cat1/drivers/source/cy_smif_memslot.c'] + src += ['mtb_shared/serial-flash/cy_serial_flash_qspi.c'] + src += ['TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_qspi_memslot.c'] + +if GetDepend(['RT_USING_I2C']): + src += ['mtb-hal-cat1/source/cyhal_i2c.c'] + path = [cwd + '/capsense', cwd + '/psoc6cm0p', cwd + '/retarget-io', cwd + '/core-lib/include', + cwd + '/mtb_shared/serial-flash', cwd + '/mtb-hal-cat1/include', cwd + '/mtb-hal-cat1/include_pvt', cwd + '/mtb-pdl-cat1/cmsis/include', diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c b/bsp/cypress/libraries/IFX_PSOC6_HAL/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c index aed0aa176..2ffab3dc6 100644 --- a/bsp/cypress/libraries/IFX_PSOC6_HAL/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/TARGET_CY8CKIT-062S2-43012/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c @@ -26,6 +26,7 @@ * See the License for the specific language governing permissions and * limitations under the License. ********************************************************************************/ +#include #include "cycfg_peripherals.h" @@ -34,8 +35,32 @@ cy_stc_csd_context_t cy_csd_0_context = .lockKey = CY_CSD_NONE_KEY, }; - void init_cycfg_peripherals(void) { Cy_SysClk_PeriphAssignDivider(PCLK_CSD_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); + +#ifdef BSP_USING_UART0 + /* UART0 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB0_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif +#ifdef BSP_USING_UART1 + /* UART1 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB1_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif +#ifdef BSP_USING_UART2 + /* UART2 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB2_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif +#ifdef BSP_USING_UART3 + /* UART3 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB3_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif +#ifdef BSP_USING_UART4 + /* UART4 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB4_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif +#ifdef BSP_USING_UART5 + /* UART5 Device Clock*/ + Cy_SysClk_PeriphAssignDivider(PCLK_SCB5_CLOCK, CY_SYSCLK_DIV_8_BIT, 0U); +#endif } diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/.gitignore b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/.gitignore new file mode 100644 index 000000000..d8f8d4692 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/.gitignore @@ -0,0 +1 @@ +docs diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/EULA b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/EULA new file mode 100644 index 000000000..f10c742b1 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/EULA @@ -0,0 +1,55 @@ +CYPRESS END USER LICENSE AGREEMENT + +PLEASE READ THIS END USER LICENSE AGREEMENT ("Agreement") CAREFULLY BEFORE DOWNLOADING, INSTALLING, COPYING, OR USING THIS SOFTWARE AND ACCOMPANYING DOCUMENTATION. BY DOWNLOADING, INSTALLING, COPYING OR USING THE SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, PROMPTLY RETURN AND DO NOT USE THE SOFTWARE. IF YOU HAVE PURCHASED THIS LICENSE TO THE SOFTWARE, YOUR RIGHT TO RETURN THE SOFTWARE EXPIRES 30 DAYS AFTER YOUR PURCHASE AND APPLIES ONLY TO THE ORIGINAL PURCHASER. + +1. Definitions. + + "Software" means this software and any accompanying documentation, including any upgrades, updates, bug fixes or modified versions provided to you by Cypress. + + "Source Code" means software in human-readable form. + + "Binary Code" means the software in binary code form such as object code or an executable. + + "Development Tools" means software that is intended to be installed on a personal computer and used to create programming code for Firmware, Drivers, or Host Applications. Examples of Development Tools are Cypress's PSoC Creator software, Cypress's WICED SDKs, and Cypress's ModusToolbox software. + + "Firmware" means software that executes on a Cypress hardware product. + + "Driver" means software that enables the use of a Cypress hardware product on a particular host operating system such as GNU/Linux, Windows, MacOS, Android, and iOS. + + "Host Application" means software that executes on a device other than a Cypress hardware product in order to program, control, or communicate with a Cypress hardware product. + + "inf File" means a hardware setup information file (.inf file) created by the Software to allow a Microsoft Windows operating system to install the driver for a Cypress hardware product. + +2. License. Subject to the terms and conditions of this Agreement, Cypress Semiconductor Corporation ("Cypress") and its suppliers grant to you a non-exclusive, non-transferable license under their copyright rights: + + a. to use the Development Tools in object code form solely for the purpose of creating Firmware, Drivers, Host Applications, and inf Files for Cypress hardware products; and + + b. (i) if provided in Source Code form, to copy, modify, and compile the Firmware Source Code to create Firmware for execution on a Cypress hardware product, and (ii) to distribute Firmware in binary code form only, only when installed onto a Cypress hardware product; and + + c. (i) if provided in Source Code form, to copy, modify, and compile the Driver Source Code to create one or more Drivers to enable the use of a Cypress hardware product on a particular host operating system, and (ii) to distribute the Driver, in binary code form only, only when installed on a device that includes the Cypress hardware product that the Driver is intended to enable; and + + d. (i) if provided in Source Code form, to copy, modify, and compile the Host Application Source Code to create one or more Host Applications to program, control, or communicate with a Cypress hardware product, and (ii) to distribute Host Applications, in binary code form only, only when installed on a device that includes a Cypress hardware product that the Host Application is intended to program, control, or communicate with; and + + e. to freely distribute any inf File. + +Any distribution of Software permitted under this Agreement must be made pursuant to your standard end user license agreement used for your proprietary (closed source) software products, such end user license agreement to include, at a minimum, provisions limiting your licensors' liability and prohibiting reverse engineering of the Software, consistent with such provisions in this Agreement. + +3. Free and Open Source Software. Portions of the Software may be licensed under free and/or open source licenses such as the GNU General Public License or other licenses from third parties ("Third Party Software"). Third Party Software is subject to the applicable license agreement and not this Agreement. If you are entitled to receive the source code from Cypress for any Third Party Software included with the Software, either the source code will be included with the Software or you may obtain the source code at no charge from . The applicable license terms will accompany each source code package. To review the license terms applicable to any Third Party Software for which Cypress is not required to provide you with source code, please see the Software's installation directory on your computer. + +4. Proprietary Rights; Ownership. The Software, including all intellectual property rights therein, is and will remain the sole and exclusive property of Cypress or its suppliers. Cypress retains ownership of the Source Code and any compiled version thereof. Subject to Cypress' ownership of the underlying Software (including Source Code), you retain ownership of any modifications you make to the Source Code. You agree not to remove any Cypress copyright or other notices from the Source Code and any modifications thereof. You agree to keep the Source Code confidential. Any reproduction, modification, translation, compilation, or representation of the Source Code except as permitted in Section 2 ("License") is prohibited without the express written permission of Cypress. Except as otherwise expressly provided in this Agreement, you may not: (i) modify, adapt, or create derivative works based upon the Software; (ii) copy the Software; (iii) except and only to the extent explicitly permitted by applicable law despite this limitation, decompile, translate, reverse engineer, disassemble or otherwise reduce the Software to human-readable form; or (iv) use the Software or any sample code other than for the Purpose. You hereby covenant that you will not assert any claim that the Software, or derivative works thereof created by or for Cypress, infringe any intellectual property right owned or controlled by you + +5. No Support. Cypress may, but is not required to, provide technical support for the Software. + +6. Term and Termination. This Agreement is effective until terminated, and either party may terminate this Agreement at any time with or without cause. This Agreement and your license rights under this Agreement will terminate immediately without notice from Cypress if you fail to comply with any provision of this Agreement. Upon termination, you must destroy all copies of Software in your possession or control. The following paragraphs shall survive any termination of this Agreement: "Free and Open Source Software," "Proprietary Rights; Ownership," "Compliance With Law," "Disclaimer," "Limitation of Liability," and "General." + +7. Compliance With Law. Each party agrees to comply with all applicable laws, rules and regulations in connection with its activities under this Agreement. Without limiting the foregoing, the Software may be subject to export control laws and regulations of the United States and other countries. You agree to comply strictly with all such laws and regulations and acknowledge that you have the responsibility to obtain licenses to export, re-export, or import the Software. + +8. Disclaimer. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THE SOFTWARE, INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes to the Software without notice. Cypress does not assume any liability arising out of the application or use of Software or any product or circuit described in the Software. It is the responsibility of the user of the Software to properly design, program, and test the functionality and safety of any application made of the Software and any resulting product. Cypress does not authorize its Software or products for use in any products where a malfunction or failure of the Software or Cypress product may reasonably be expected to result in significant property damage, injury or death ("High Risk Product"). If you include any Software or Cypress product in a High Risk Product, you assume all risk of such use and agree to indemnify Cypress and its suppliers against all liability. No computing device can be absolutely secure. Therefore, despite security measures implemented in Cypress hardware or software products, Cypress does not assume any liability arising out of any security breach, such as unauthorized access to or use of a Cypress product. + +9. Limitation of Liability. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL CYPRESS OR ITS SUPPLIERS, RESELLERS, OR DISTRIBUTORS BE LIABLE FOR ANY LOST REVENUE, PROFIT, OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL, OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF CYPRESS OR ITS SUPPLIERS, RESELLERS, OR DISTRIBUTORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL CYPRESS' OR ITS SUPPLIERS', RESELLERS', OR DISTRIBUTORS' TOTAL LIABILITY TO YOU, WHETHER IN CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, EXCEED THE GREATER OF US$500 OR THE PRICE PAID BY YOU FOR THE SOFTWARE. THE FOREGOING LIMITATIONS SHALL APPLY EVEN IF THE ABOVE-STATED WARRANTY FAILS OF ITS ESSENTIAL PURPOSE. BECAUSE SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATION OR EXCLUSION OF CONSEQUENTIAL OR INCIDENTAL DAMAGES, ALL OR PORTIONS OF THE ABOVE LIMITATION MAY NOT APPLY TO YOU. + +10. Restricted Rights. The Software is commercial computer software as that term is described in 48 C.F.R. 252.227-7014(a)(1). If the Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software shall be only those set forth in this Agreement. + +11. Personal Information. You agree that information you provide through your registration on Cypress IoT Community Forum or other Cypress websites, including contact information or other personal information, may be collected and used by Cypress consistent with its Data Privacy Policy (www.cypress.com/privacy-policy), as updated or revised from time to time, and may be provided to its third party sales representatives, distributors and other entities conducting sales activities for Cypress for sales-related and other business purposes. + +12. General. This Agreement will bind and inure to the benefit of each party's successors and assigns, provided that you may not assign or transfer this Agreement, in whole or in part, without Cypress' written consent. This Agreement shall be governed by and construed in accordance with the laws of the State of California, United States of America, as if performed wholly within the state and without giving effect to the principles of conflict of law. The parties consent to personal and exclusive jurisdiction of and venue in, the state and federal courts within Santa Clara County, California; provided however, that nothing in this Agreement will limit Cypress' right to bring legal action in any venue in order to protect or enforce its intellectual property rights. No failure of either party to exercise or enforce any of its rights under this Agreement will act as a waiver of such rights. If any portion of this Agreement is found to be void or unenforceable, the remaining provisions of this Agreement shall remain in full force and effect. This Agreement is the complete and exclusive agreement between the parties with respect to the subject matter hereof, superseding and replacing any and all prior agreements, communications, and understandings (both written and oral) regarding such subject matter. Any notice to Cypress will be deemed effective when actually received and must be sent to Cypress Semiconductor Corporation, ATTN: Chief Legal Officer, 198 Champion Court, San Jose, CA 95134 USA. diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/LICENSE b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/LICENSE new file mode 100644 index 000000000..59cd3f8a3 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/LICENSE @@ -0,0 +1,165 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/README.md b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/README.md new file mode 100644 index 000000000..c989ce613 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/README.md @@ -0,0 +1,42 @@ +# Serial Flash + +### Overview + +Provides functions for interacting with an external flash connected through its Single SPI/Dual SPI/Quad SPI/Octal SPI interface. The read operation can be performed in either blocking or non-blocking manner by calling the corresponding function while the write and erase operations are implemented as blocking functions. This library accepts the configuration generated using the QSPI Configurator tool but supports only one memory slot. Note that PSoC™ 6 supports up to 4 memory slots on the same QSPI block. + +### Features + +* Supports asynchronous (non-blocking) read operation +* Implements thread-safety for use with multi-threaded RTOS environment using the [abstraction-rtos](https://github.com/infineon/abstraction-rtos) library +* Accepts the configuration generated by the QSPI Configurator tool +* Supports Execute-in-Place (XIP) mode of operation +* Provides information about the external memory to the programming tool for it to be able to program the memory, for example, when user wants to place the code into the external memory for XIP operation. +* Allows for programming external memory if CY_ENABLE_XIP_PROGRAM is defined when building the application. Note: This is not compatible with the PSoC™ 64 series of devices. + +### Quick Start +1. Add \#include "cy_serial_flash_qspi.h" +2. Add `DEFINES=CY_SERIAL_FLASH_QSPI_THREAD_SAFE` in the Makefile to enable thread-safety when used in a multi-threaded RTOS environment +3. See the [PSoC™ 6 MCU: QSPI Flash Read and Write](https://github.com/infineon/mtb-example-psoc6-qspi-readwrite) code example to learn using this library + +**NOTE:** +If you delete the contents of the GeneratedSource directory inside the BSP, you must re-generate the memory configuration files *cycfg_qspi_memslot.c/.h*. To do this from inside the ModusToolbox™ IDE, open the QSPI Configurator tool from the Quick Panel and press **Ctrl+S** or click **File > Save**. If you open the tool outside the IDE, you need to first open the *design.cyqspi* file in the tool. To do this, click **File > Import** and then locate the file inside the BSP under *COMPONENT_BSP_DESIGN_MODUS* directory. + +**NOTE:** +For devices with no internal flash (eg:CAT1B device CYW20829), user needs to disable 'config data in flash' option in QSPI Configurator. + +### Dependencies + +* [abstraction-rtos](https://github.com/infineon/abstraction-rtos) library if `DEFINES=CY_SERIAL_FLASH_QSPI_THREAD_SAFE` is added in the Makefile + +### More information + +* [API Reference Guide](https://infineon.github.io/serial-flash/html/index.html) +* [Cypress Semiconductor, an Infineon Technologies Company](http://www.cypress.com) +* [Infineon GitHub](https://github.com/infineon) +* [ModusToolbox™](https://www.cypress.com/products/modustoolbox-software-environment) +* [PSoC™ 6 Code Examples using ModusToolbox™ IDE](https://github.com/infineon/Code-Examples-for-ModusToolbox-Software) +* [ModusToolbox™ Software](https://github.com/Infineon/modustoolbox-software) +* [PSoC™ 6 Resources - KBA223067](https://community.cypress.com/docs/DOC-14644) + +--- +© Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation, 2019-2021. diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/RELEASE.md b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/RELEASE.md new file mode 100644 index 000000000..ac7c009c3 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/RELEASE.md @@ -0,0 +1,54 @@ +# Serial Flash Library Release Notes +Provides functions for interacting with an external flash connected through its Single/Dual/Quad/Octal SPI interface. + +### What's Included? +* APIs for Read/Write/Erase operations +* Supports Execute-in-Place (XIP) mode of operation +* Accepts the configuration generated by the QSPI Configurator tool +* Allows for providing information to the programming tool to program the external memory. + +### What Changed? +#### v1.3.0 +* Added support for CAT1B device - CYW20829. +#### v1.2.0 +* Added support for HAL API v1 or v2 +#### v1.1.0 +* Added the following functions: + - `cy_serial_flash_qspi_read_async()` - Supports asynchronous (non-blocking) read using fixed DMA resources. Refer to the API reference manual for details on the list of devices supported for DMA operation and the exact DMA resources used. + - `cy_serial_flash_qspi_abort_read()` - Aborts an ongoing asynchronous read operation + - `cy_serial_flash_qspi_set_dma_interrupt_priority()` - Changes the DMA interrupt priority +* Implemented thread-safety for use with multi-threaded RTOS environment using the [abstraction-rtos](https://github.com/infineon/abstraction-rtos) library + - Add `DEFINES=CY_SERIAL_FLASH_QSPI_THREAD_SAFE` in the Makefile to enable thread-safety +* Updated `cy_serial_flash_qspi_get_erase_size()` to support memories with hybrid sectors +#### v1.0.2 +* Added new function `cy_serial_flash_qspi_get_prog_size()` to get the programming size +* Minor documentation updates +#### v1.0.1 +* Minor update for documentation & branding +#### v1.0.0 +* Initial release + +### Supported Software and Tools +This version of the Serial Flash library was validated for compatibility with the following Software and Tools: + +| Software and Tools | Version | +| :--- | :----: | +| ModusToolbox™ Software Environment | 2.4.0 | +| GCC Compiler | 10.3.1 | +| IAR Compiler | 8.4 | +| ARM Compiler 6 | 6.11 | + +Minimum required ModusToolbox™ Software Environment: v2.0 + +### More information + +* [API Reference Guide](https://infineon.github.io/serial-flash/html/index.html) +* [Cypress Semiconductor, an Infineon Technologies Company](http://www.cypress.com) +* [Infineon GitHub](https://github.com/infineon) +* [ModusToolbox™](https://www.cypress.com/products/modustoolbox-software-environment) +* [PSoC™ 6 Code Examples using ModusToolbox™ IDE](https://github.com/infineon/Code-Examples-for-ModusToolbox-Software) +* [ModusToolbox™ Software](https://github.com/Infineon/modustoolbox-software) +* [PSoC™ 6 Resources - KBA223067](https://community.cypress.com/docs/DOC-14644) + +--- +© Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation, 2019-2021. \ No newline at end of file diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_prog.c b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_prog.c new file mode 100644 index 000000000..863474b74 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_prog.c @@ -0,0 +1,101 @@ +/***********************************************************************************************//** + * \file cy_serial_flash_prog.c + * + * \brief + * Provides variables necessary to inform programming tools how to program the + * attached serial flash memory. The variables used here must be placed at + * specific locations in order to be detected and used by programming tools + * to know that there is an attached memory and its characteristics. Uses the + * configuration provided as part of BSP. + * + *************************************************************************************************** + * \copyright + * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **************************************************************************************************/ + +/** + * \addtogroup group_board_libs + * \{ + * In addition to the APIs for reading and writting to memory at runtime, this library also + * provides support for informing programming tools about the external memory so it can be + * be written at the same time as internal flash. This support can be enabled by defining + * CY_ENABLE_XIP_PROGRAM while building the application. With this define in place, code + * will be generated in the .cy_sflash_user_data & .cy_toc_part2 sections. These sections + * must be provided by the linker script for the application. One the application has been + * built, these locations can be read by programming tools (eg: Cypress Programmer, OpenOCD, + * pyOCD) to know that there is a memory device attached and how to program it. + * \note This support is not compatible with the PSoCâ„¢ 64 series of devices. + * \} group_board_libs + */ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#if defined(CY_ENABLE_XIP_PROGRAM) + +#include "cycfg_qspi_memslot.h" + +typedef struct +{ + const cy_stc_smif_block_config_t* smifCfg; // Pointer to SMIF top-level configuration + const uint32_t null_t; // NULL termination +} stc_smif_ipblocks_arr_t; + +// This data can be placed anywhere in the internal memory, but it must be at a location that +// can be determined and used for the calculation of the CRC16 checksum in the cyToc below. There +// are multiple ways this can be accomplished including: +// 1) Placing it in a dedicated memory block with a known address. (as done here) +// 2) Placing it at an absolute location via a the linker script +// 3) Using 'cymcuelftool -S' to recompute the checksum and patch the elf file after linking +CY_SECTION(".cy_sflash_user_data") __attribute__((used)) +const stc_smif_ipblocks_arr_t smifIpBlocksArr = { &smifBlockConfig, 0x00000000 }; + +// This data is used to populate the table of contents part 2. When present, it is used by the boot +// process and programming tools to determine key characteristics about the memory usage including +// where the boot process should start the application from and what external memories are connected +// (if any). This must consume a full row of flash memory row. The last entry is a checksum of the +// other values in the ToC which must be updated if any other value changes. This can be done +// manually or by running 'cymcuelftool -S' to recompute the checksum. +CY_SECTION(".cy_toc_part2") __attribute__((used)) +const uint32_t cyToc[128] = +{ + 0x200-4, // Offset=0x0000: Object Size, bytes + 0x01211220, // Offset=0x0004: Magic Number (TOC Part 2, ID) + 0, // Offset=0x0008: Key Storage Address + (int)&smifIpBlocksArr, // Offset=0x000C: This points to a null terminated array of SMIF + // structures. + 0x10000000u, // Offset=0x0010: App image start address + // Offset=0x0014-0x01F7: Reserved + [126] = 0x000002C2, // Offset=0x01 + // Bits[ 1: 0] CLOCK_CONFIG (0=8MHz, 1=25MHz, 2=50MHz, 3=100MHz) + // Bits[ 4: 2] LISTEN_WINDOW (0=20ms, 1=10ms, 2=1ms, 3=0ms, 4=100ms) + // Bits[ 6: 5] SWJ_PINS_CTL (0/1/3=Disable SWJ, 2=Enable SWJ) + // Bits[ 8: 7] APP_AUTHENTICATION (0/2/3=Enable, 1=Disable) + // Bits[10: 9] FB_BOOTLOADER_CTL: UNUSED + [127] = 0x3BB30000 // Offset=0x01FC: CRC16-CCITT + // (the upper 2 bytes contain the CRC and the lower 2 bytes are 0) +}; + +#endif // defined(CY_ENABLE_XIP_PROGRAM) + +#if defined(__cplusplus) +} +#endif diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.c b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.c new file mode 100644 index 000000000..8137f73f4 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.c @@ -0,0 +1,921 @@ +/***********************************************************************************************//** + * \file cy_serial_flash_qspi.c + * + * \brief + * Provides APIs for interacting with an external flash connected to the SPI or + * QSPI interface, uses SFDP to auto-discover memory properties if SFDP is + * enabled in the configuration. + * + *************************************************************************************************** + * \copyright + * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **************************************************************************************************/ + +#include +#include "cy_serial_flash_qspi.h" +#include "cyhal_qspi.h" +#include "cy_trigmux.h" +#include "cy_dma.h" +#include "cy_utils.h" + +#if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) +#include +#include "cyabs_rtos.h" +#endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ + +#ifdef CY_IP_MXSMIF + +#if defined(__cplusplus) +extern "C" { +#endif + + +/** \cond INTERNAL */ + +/** Timeout to apply while polling the memory for its ready status after quad + * enable command has been sent out. Quad enable is a non-volatile write. + */ +#define CY_SERIAL_FLASH_QUAD_ENABLE_TIMEOUT_US (5000lu) // in microseconds + +/** Number of loops to run while polling the SMIF for its busy status. */ +#define SMIF_BUSY_CHECK_LOOP_COUNT (10lu) + +/** Timeout to apply per loop while polling the SMIF for its busy status. */ +#define SMIF_BUSY_CHECK_TIMEOUT_MS (1lu) // in milliseconds + +// Number of memories supported by the driver +#define SMIF_MEM_DEVICES (1u) + +// SMIF slot from which the memory configuration is picked up - fixed to 0 as +// the driver supports only one device +#define MEM_SLOT (0u) + +/* Maximum number of bytes that can be read by SMIF in one transfer */ +#define SMIF_MAX_RX_COUNT (65536lu) + +#define DMA_YCOUNT_ONE_LOOP (1lu) + +#define MSB_SHIFT_EIGHT (0x08u) +#define LSB_MASK (0xFFlu) + +/* Masks used for checking the flag bits */ +#define FLAG_QSPI_HAL_INIT_DONE (0x01lu << 0) +#define FLAG_DMA_INIT_DONE (0x01lu << 1) +#define FLAG_READ_IN_PROGRESS (0x01lu << 2) + +#define IS_FLAG_SET(mask) (status_flags & (mask)) +#define SET_FLAG(mask) (status_flags |= (mask)) +#define CLEAR_FLAG(mask) (status_flags &= ~(mask)) + +#if defined(CY_DEVICE_PSOC6ABLE2) +/* You cannot simply change these values. The trigger mux connect code in + * _init_dma() needs to be updated correspondingly. + */ + #define RX_DMA_INSTANCE DW1 + #define RX_DMA_CHANNEL_NUM (15lu) + #define RX_DMA_CH0_IRQn (cpuss_interrupts_dw1_0_IRQn) +#elif defined(CY_DEVICE_PSOC6A2M) || defined(CY_DEVICE_PSOC6A512K) || defined(CY_DEVICE_PSOC6A256K) +/* In these devices, only 1to1 triggers are available between SMIF and a + * specific combination of DW instances and channel numbers. + * i.e. TX trigger request from SMIF can connect only to DW1 CH22 and + * RX trigger request from SMIF can connect only to DW1 CH23. + */ + #define RX_DMA_INSTANCE DW1 + #define RX_DMA_CHANNEL_NUM (23lu) + #define RX_DMA_CH0_IRQn (cpuss_interrupts_dw1_0_IRQn) + + #define DEVICE_GROUP_1TO1_TRIGGER +#elif defined(CY_DEVICE_CYW20829) + #define RX_DMA_INSTANCE DW0 + #define RX_DMA_CHANNEL_NUM (0u) + #define RX_DMA_CH0_IRQn (cpuss_interrupts_dw0_0_IRQn) +#else // if defined(CY_DEVICE_PSOC6ABLE2) + #define DMA_UNSUPPORTED +#endif // if defined(CY_DEVICE_PSOC6ABLE2) + +#define DMA_CHANNEL_PRIORITY (3lu) +#define DMA_INTR_PRIORITY (7lu) + +/** \endcond */ + +static cyhal_qspi_t qspi_obj; +static volatile uint32_t status_flags; +static cy_stc_smif_mem_config_t* qspi_mem_config[SMIF_MEM_DEVICES]; + +static cy_stc_smif_block_config_t qspi_block_config = +{ + // The number of SMIF memories defined. + .memCount = SMIF_MEM_DEVICES, + // The pointer to the array of memory config structures of size memCount. + .memConfig = (cy_stc_smif_mem_config_t**)qspi_mem_config, + // The version of the SMIF driver. + .majorVersion = CY_SMIF_DRV_VERSION_MAJOR, + // The version of the SMIF driver. + .minorVersion = CY_SMIF_DRV_VERSION_MINOR +}; + +#if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) +static cy_mutex_t serial_flash_mutex; +#endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ + +#ifndef DMA_UNSUPPORTED +typedef struct +{ + uint32_t addr; + size_t length; + uint8_t* buf; + cy_serial_flash_qspi_read_complete_callback_t callback; + void* callback_arg; +} read_txfr_info_t; + +static read_txfr_info_t read_txfr_info; + +/* DMA related variables */ +static cy_stc_dma_descriptor_t dma_descr; + +/* Default DW descriptor config */ +static cy_stc_dma_descriptor_config_t dma_descr_config = +{ + .retrigger = CY_DMA_RETRIG_4CYC, + .interruptType = CY_DMA_DESCR, + .triggerOutType = CY_DMA_DESCR_CHAIN, + .channelState = CY_DMA_CHANNEL_ENABLED, + .triggerInType = CY_DMA_DESCR, + .dataSize = CY_DMA_BYTE, + .srcTransferSize = CY_DMA_TRANSFER_SIZE_WORD, + .dstTransferSize = CY_DMA_TRANSFER_SIZE_DATA, + .descriptorType = CY_DMA_2D_TRANSFER, + .srcAddress = 0, + .dstAddress = 0, + .srcXincrement = 0U, + .dstXincrement = 1U, + .xCount = 1UL, + .srcYincrement = 0U, + .dstYincrement = CY_DMA_LOOP_COUNT_MAX, + .yCount = 1UL, + .nextDescriptor = &dma_descr, +}; + +/* Default DW channel config */ +static cy_stc_dma_channel_config_t dma_channel_config = +{ + .descriptor = &dma_descr, + .preemptable = false, + .priority = DMA_CHANNEL_PRIORITY, + .enable = false, + .bufferable = false, +}; + +static const cyhal_resource_inst_t DW_obj = +{ + .type = CYHAL_RSC_DW, + .block_num = ((uint32_t)RX_DMA_INSTANCE - DW0_BASE)/sizeof(DW_Type), + .channel_num = RX_DMA_CHANNEL_NUM +}; + +static cy_rslt_t _init_dma(void); +static cy_rslt_t _deinit_dma(void); +static void _rx_dma_irq_handler(void); +static cy_en_smif_status_t _read_next_chunk(void); +#if !defined(CY_DEVICE_CYW20829) +static void _value_to_byte_array(uint32_t value, uint8_t* byte_array, uint32_t start_pos, + uint32_t size); +#endif /* #if !defined(CY_DEVICE_CYW20829) */ +#endif /* #ifndef DMA_UNSUPPORTED */ + +static inline cy_rslt_t _mutex_acquire(void); +static inline cy_rslt_t _mutex_release(void); + +#if defined(CY_DEVICE_CYW20829) +static cy_stc_smif_context_t SMIFContext; +#endif /* defined(CY_DEVICE_CYW20829) */ + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_init +// +// The driver supports only one memory. When multiple memory configurations are generated by the +// SMIF configurator tool, provide only the configuration for memory that need to be supported by +// the driver. Memory configuration can be changed by deinit followed by init with new +// configuration +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_init( + const cy_stc_smif_mem_config_t* mem_config, + cyhal_gpio_t io0, + cyhal_gpio_t io1, + cyhal_gpio_t io2, + cyhal_gpio_t io3, + cyhal_gpio_t io4, + cyhal_gpio_t io5, + cyhal_gpio_t io6, + cyhal_gpio_t io7, + cyhal_gpio_t sclk, + cyhal_gpio_t ssel, + uint32_t hz) +{ + cy_rslt_t result = CY_RSLT_SUCCESS; + cy_en_smif_status_t smif_status = CY_SMIF_SUCCESS; + + #if (CYHAL_API_VERSION >= 2) + // SMIF is already initialized for 20829 hence we can skip calling cyhal_qspi_init. + // initializing only the SMIF base address and the context variables for 20829. + #if defined(CY_DEVICE_CYW20829) + qspi_obj.base = SMIF0; + qspi_obj.context = SMIFContext; + #else /* defined(CY_DEVICE_CYW20829) */ + cyhal_qspi_slave_pin_config_t memory_pin_set = + { + .io = { io0, io1, io2, io3, io4, io5, io6, io7 }, + .ssel = ssel + }; + result = cyhal_qspi_init(&qspi_obj, sclk, &memory_pin_set, hz, 0, NULL); + #endif /* defined(CY_DEVICE_CYW20829) */ + + #else /* HAL API version 1 */ + result = cyhal_qspi_init(&qspi_obj, io0, io1, io2, io3, io4, io5, io6, io7, sclk, ssel, hz, 0); + #endif /* HAL API version 1 */ + + qspi_mem_config[MEM_SLOT] = (cy_stc_smif_mem_config_t*)mem_config; + + if (CY_RSLT_SUCCESS == result) + { + SET_FLAG(FLAG_QSPI_HAL_INIT_DONE); + + // Perform SFDP detection and XIP register configuration depending on the memory + // configuration. + smif_status = Cy_SMIF_MemInit(qspi_obj.base, &qspi_block_config, &qspi_obj.context); + if (CY_SMIF_SUCCESS == smif_status) + { + // Enable Quad mode (1-1-4 or 1-4-4 modes) to use all the four I/Os during + // communication. + + if ((qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->readCmd->dataWidth == + CY_SMIF_WIDTH_QUAD) || + (qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->programCmd->dataWidth == + CY_SMIF_WIDTH_QUAD)) + { + bool isQuadEnabled = false; + smif_status = + Cy_SMIF_MemIsQuadEnabled(qspi_obj.base, qspi_block_config.memConfig[MEM_SLOT], + &isQuadEnabled, &qspi_obj.context); + if ((CY_SMIF_SUCCESS == smif_status) && !isQuadEnabled) + { + smif_status = + Cy_SMIF_MemEnableQuadMode(qspi_obj.base, + qspi_block_config.memConfig[MEM_SLOT], + CY_SERIAL_FLASH_QUAD_ENABLE_TIMEOUT_US, + &qspi_obj.context); + } + } + if (CY_SMIF_SUCCESS == smif_status) + { + #ifndef DMA_UNSUPPORTED + result = _init_dma(); + + if (CY_RSLT_SUCCESS == result) + { + SET_FLAG(FLAG_DMA_INIT_DONE); + #endif /* #ifndef DMA_UNSUPPORTED */ + + #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) + /* Initialize the mutex */ + result = cy_rtos_init_mutex(&serial_flash_mutex); + #endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ + + #ifndef DMA_UNSUPPORTED + } + #endif /* #ifndef DMA_UNSUPPORTED */ + } + } + } + + if ((CY_RSLT_SUCCESS != result) || (CY_SMIF_SUCCESS != smif_status)) + { + cy_serial_flash_qspi_deinit(); + + if (CY_SMIF_SUCCESS != smif_status) + { + result = (cy_rslt_t)smif_status; + } + } + + return result; +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_deinit +//-------------------------------------------------------------------------------------------------- +void cy_serial_flash_qspi_deinit(void) +{ + cy_rslt_t result; + + if (IS_FLAG_SET(FLAG_QSPI_HAL_INIT_DONE)) + { + /* For CYW20829, BOOTROM enables XIP by default and user is not expected to + disable memory while in XIP */ + #if !defined(CY_DEVICE_CYW20829) + if (qspi_obj.base != NULL) + { + /* There is no harm in calling this even if Cy_SMIF_MemInit() did + * not succeed since anyway we own the QSPI object. + */ + Cy_SMIF_MemDeInit(qspi_obj.base); + } + + cyhal_qspi_free(&qspi_obj); + #endif /* !defined(CY_DEVICE_CYW20829) */ + CLEAR_FLAG(FLAG_QSPI_HAL_INIT_DONE); + + #ifndef DMA_UNSUPPORTED + if (IS_FLAG_SET(FLAG_DMA_INIT_DONE)) + { + result = _deinit_dma(); + CY_ASSERT(CY_RSLT_SUCCESS == result); + + CLEAR_FLAG(FLAG_DMA_INIT_DONE); + #endif /* #ifndef DMA_UNSUPPORTED */ + + #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) + result = cy_rtos_deinit_mutex(&serial_flash_mutex); + CY_ASSERT(CY_RSLT_SUCCESS == result); + #endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ + + #ifndef DMA_UNSUPPORTED + } + #endif /* #ifndef DMA_UNSUPPORTED */ + } + + CY_UNUSED_PARAMETER(result); /* To avoid compiler warning in Release mode. */ +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_get_size +//-------------------------------------------------------------------------------------------------- +size_t cy_serial_flash_qspi_get_size(void) +{ + return (size_t)qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->memSize; +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_get_erase_size +//-------------------------------------------------------------------------------------------------- +size_t cy_serial_flash_qspi_get_erase_size(uint32_t addr) +{ + size_t erase_sector_size; + cy_stc_smif_hybrid_region_info_t* hybrid_info = NULL; + + cy_en_smif_status_t smif_status = + Cy_SMIF_MemLocateHybridRegion(qspi_block_config.memConfig[MEM_SLOT], &hybrid_info, addr); + + if (CY_SMIF_SUCCESS != smif_status) + { + erase_sector_size = (size_t)qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->eraseSize; + } + else + { + erase_sector_size = (size_t)hybrid_info->eraseSize; + } + + return erase_sector_size; +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_get_prog_size +//-------------------------------------------------------------------------------------------------- +size_t cy_serial_flash_qspi_get_prog_size(uint32_t addr) +{ + CY_UNUSED_PARAMETER(addr); + return (size_t)qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->programSize; +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_read +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t* buf) +{ + cy_rslt_t result_mutex_rel = CY_RSLT_SUCCESS; + + cy_rslt_t result = _mutex_acquire(); + + if (CY_RSLT_SUCCESS == result) + { + // Cy_SMIF_MemRead() returns error if (addr + length) > total flash size. + result = (cy_rslt_t)Cy_SMIF_MemRead(qspi_obj.base, qspi_block_config.memConfig[MEM_SLOT], + addr, + buf, length, &qspi_obj.context); + result_mutex_rel = _mutex_release(); + } + + /* Give priority to the status of SMIF operation when both SMIF operation + * and mutex release fail. + */ + return ((CY_RSLT_SUCCESS == result) ? result_mutex_rel : result); +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_abort_read +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_abort_read(void) +{ + #ifndef DMA_UNSUPPORTED + cy_rslt_t result; + + /* Wait until SMIF finishes any pending transfer. */ + for (uint32_t loop = 0; loop < SMIF_BUSY_CHECK_LOOP_COUNT; loop++) + { + if (!Cy_SMIF_BusyCheck(qspi_obj.base)) + { + break; + } + + cyhal_system_delay_ms(SMIF_BUSY_CHECK_TIMEOUT_MS); + } + + if (Cy_SMIF_BusyCheck(qspi_obj.base)) + { + SET_FLAG(FLAG_READ_IN_PROGRESS); + result = CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY; + } + else + { + Cy_DMA_Channel_Disable(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + result = CY_RSLT_SUCCESS; + CLEAR_FLAG(FLAG_READ_IN_PROGRESS); + } + + return result; + #else // ifndef DMA_UNSUPPORTED + return CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED; + #endif /* #ifndef DMA_UNSUPPORTED */ +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_read_async +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t* buf, + cy_serial_flash_qspi_read_complete_callback_t callback, + void* callback_arg) +{ + #ifndef DMA_UNSUPPORTED + cy_rslt_t result = CY_RSLT_SERIAL_FLASH_ERR_BAD_PARAM; + cy_rslt_t result_mutex_rel = CY_RSLT_SUCCESS; + + CY_ASSERT(NULL != buf); + + if (IS_FLAG_SET(FLAG_READ_IN_PROGRESS)) + { + result = CY_RSLT_SERIAL_FLASH_ERR_READ_BUSY; /* Previous read request is not yet complete. + */ + } + else if ((addr + length) <= cy_serial_flash_qspi_get_size()) + { + result = _mutex_acquire(); + + if (CY_RSLT_SUCCESS == result) + { + read_txfr_info.addr = addr; + read_txfr_info.length = length; + read_txfr_info.buf = buf; + read_txfr_info.callback = callback; + read_txfr_info.callback_arg = callback_arg; + + /* Enable the DMA channel */ + Cy_DMA_Channel_Enable(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + + SET_FLAG(FLAG_READ_IN_PROGRESS); + result = (cy_rslt_t)_read_next_chunk(); /* Start the read transfer */ + + if (CY_RSLT_SUCCESS != result) + { + CLEAR_FLAG(FLAG_READ_IN_PROGRESS); + } + + result_mutex_rel = _mutex_release(); + } + } + + /* Give priority to the status of SMIF operation when both SMIF operation + * and mutex release fail. + */ + return ((CY_RSLT_SUCCESS == result) ? result_mutex_rel : result); + #else // ifndef DMA_UNSUPPORTED + CY_UNUSED_PARAMETER(addr); + CY_UNUSED_PARAMETER(length); + CY_UNUSED_PARAMETER(buf); + CY_UNUSED_PARAMETER(callback); + CY_UNUSED_PARAMETER(callback_arg); + + return CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED; + #endif /* #ifndef DMA_UNSUPPORTED */ +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_write +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t* buf) +{ + cy_rslt_t result_mutex_rel = CY_RSLT_SUCCESS; + + cy_rslt_t result = _mutex_acquire(); + + if (CY_RSLT_SUCCESS == result) + { + // Cy_SMIF_MemWrite() returns error if (addr + length) > total flash size. + result = (cy_rslt_t)Cy_SMIF_MemWrite(qspi_obj.base, qspi_block_config.memConfig[MEM_SLOT], + addr, + (uint8_t*)buf, length, &qspi_obj.context); + result_mutex_rel = _mutex_release(); + } + + /* Give priority to the status of SMIF operation when both SMIF operation + * and mutex release fail. + */ + return ((CY_RSLT_SUCCESS == result) ? result_mutex_rel : result); +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_erase +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_erase(uint32_t addr, size_t length) +{ + cy_rslt_t result_mutex_rel = CY_RSLT_SUCCESS; + + cy_rslt_t result = _mutex_acquire(); + + if (CY_RSLT_SUCCESS == result) + { + // If the erase is for the entire chip, use chip erase command + if ((addr == 0u) && (length == cy_serial_flash_qspi_get_size())) + { + result = + (cy_rslt_t)Cy_SMIF_MemEraseChip(qspi_obj.base, + qspi_block_config.memConfig[MEM_SLOT], + &qspi_obj.context); + } + else + { + // Cy_SMIF_MemEraseSector() returns error if (addr + length) > total flash size or if + // addr is not aligned to erase sector size or if (addr + length) is not aligned to + // erase sector size. + result = + (cy_rslt_t)Cy_SMIF_MemEraseSector(qspi_obj.base, + qspi_block_config.memConfig[MEM_SLOT], + addr, length, &qspi_obj.context); + } + + result_mutex_rel = _mutex_release(); + } + + /* Give priority to the status of SMIF operation when both SMIF operation + * and mutex release fail. + */ + return ((CY_RSLT_SUCCESS == result) ? result_mutex_rel : result); +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_enable_xip +// +// This function enables or disables XIP on the MCU, does not send any command +// to the serial flash. XIP register configuration is already done as part of +// cy_serial_flash_qspi_init() if MMIO mode is enabled in the QSPI +// Configurator. +//-------------------------------------------------------------------------------------------------- +cy_rslt_t cy_serial_flash_qspi_enable_xip(bool enable) +{ + if (enable) + { + Cy_SMIF_SetMode(qspi_obj.base, CY_SMIF_MEMORY); + } + else + { + Cy_SMIF_SetMode(qspi_obj.base, CY_SMIF_NORMAL); + } + + return CY_RSLT_SUCCESS; +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_set_interrupt_priority +//-------------------------------------------------------------------------------------------------- +void cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority) +{ + #if defined(CY_DEVICE_CYW20829) + NVIC_SetPriority(smif_interrupt_normal_IRQn, priority); + #else /* defined(CY_DEVICE_CYW20829) */ + NVIC_SetPriority(smif_interrupt_IRQn, priority); + #endif /* defined(CY_DEVICE_CYW20829) */ +} + + +//-------------------------------------------------------------------------------------------------- +// cy_serial_flash_qspi_set_interrupt_priority +//-------------------------------------------------------------------------------------------------- +void cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority) +{ + #ifndef DMA_UNSUPPORTED + NVIC_SetPriority((IRQn_Type)(RX_DMA_CH0_IRQn + RX_DMA_CHANNEL_NUM), priority); + #else + CY_UNUSED_PARAMETER(priority); + #endif /* #ifndef DMA_UNSUPPORTED */ +} + + +#ifndef DMA_UNSUPPORTED +//-------------------------------------------------------------------------------------------------- +// _read_next_chunk +//-------------------------------------------------------------------------------------------------- +static cy_en_smif_status_t _read_next_chunk(void) +{ + cy_en_smif_status_t smif_status = CY_SMIF_SUCCESS; + uint32_t chunk; + #if !defined(CY_DEVICE_CYW20829) + uint8_t addr_array[CY_SMIF_FOUR_BYTES_ADDR] = { 0U }; + #endif /* !defined(CY_DEVICE_CYW20829) */ + + if (read_txfr_info.length > 0UL) + { + /* SMIF can read only up to 65536 bytes in one go. Split the larger read into multiple + chunks */ + chunk = + (read_txfr_info.length > + SMIF_MAX_RX_COUNT) ? (SMIF_MAX_RX_COUNT) : read_txfr_info.length; + + /* In 2D transfer, (X_count x Y_count) should be a multiple of CY_DMA_LOOP_COUNT_MAX (256). + */ + if (chunk > CY_DMA_LOOP_COUNT_MAX) + { + /* Make chunk divisible by CY_DMA_LOOP_COUNT_MAX (256) by masking out the LS bits */ + chunk &= ~(CY_DMA_LOOP_COUNT_MAX - 1); + + dma_descr_config.yCount = chunk/CY_DMA_LOOP_COUNT_MAX; + dma_descr_config.xCount = CY_DMA_LOOP_COUNT_MAX; + } + else + { + dma_descr_config.yCount = DMA_YCOUNT_ONE_LOOP; + dma_descr_config.xCount = chunk; + } + + dma_descr_config.dstAddress = (void*)read_txfr_info.buf; + #if defined(CY_DEVICE_CYW20829) + dma_descr_config.dataSize = CY_DMA_BYTE; + dma_descr_config.srcTransferSize = CY_DMA_TRANSFER_SIZE_DATA, + dma_descr_config.srcXincrement = 1; + dma_descr_config.srcAddress = + (void*)(qspi_block_config.memConfig[MEM_SLOT]->baseAddress + read_txfr_info.addr); + #endif /* defined(CY_DEVICE_CYW20829) */ + Cy_DMA_Descriptor_Init(&dma_descr, &dma_descr_config); + + #if defined(CY_DEVICE_CYW20829) + Cy_TrigMux_SwTrigger(TRIG_OUT_MUX_0_PDMA0_TR_IN0, CY_TRIGGER_TWO_CYCLES); + #else /* defined(CY_DEVICE_CYW20829) */ + /* Pass NULL for buffer (and callback) so that the function does not + * set up FIFO interrupt. We don't need FIFO interrupt to be setup + * since we will be using DMA. + */ + _value_to_byte_array(read_txfr_info.addr, &addr_array[0], 0UL, + qspi_block_config.memConfig[MEM_SLOT]->deviceCfg->numOfAddrBytes); + smif_status = Cy_SMIF_MemCmdRead(qspi_obj.base, qspi_block_config.memConfig[MEM_SLOT], + addr_array, NULL, chunk, NULL, &qspi_obj.context); + + if (CY_SMIF_SUCCESS == smif_status) + #endif /* defined(CY_DEVICE_CYW20829) */ + { + /* Recalculate the next rxBuffer offset */ + read_txfr_info.length -= chunk; + read_txfr_info.addr += chunk; + read_txfr_info.buf += chunk; + } + } + + return smif_status; +} + + +//-------------------------------------------------------------------------------------------------- +// _init_dma +//-------------------------------------------------------------------------------------------------- +static cy_rslt_t _init_dma(void) +{ + cy_rslt_t result; + + /* Set the source address of the descriptor */ + dma_descr_config.srcAddress = (void*)&SMIF_RX_DATA_FIFO_RD1(qspi_obj.base); + + /* Configure the RX DMA */ + result = + (cy_rslt_t)Cy_DMA_Channel_Init(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM, &dma_channel_config); + + if (CY_RSLT_SUCCESS == result) + { + Cy_DMA_Channel_SetInterruptMask(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM, CY_DMA_INTR_MASK); + Cy_DMA_Enable(RX_DMA_INSTANCE); + + /* Configure interrupt for RX DMA */ + cy_stc_sysint_t dma_intr_config = + { .intrSrc = (IRQn_Type)(RX_DMA_CH0_IRQn + RX_DMA_CHANNEL_NUM), + .intrPriority = DMA_INTR_PRIORITY }; + + result = (cy_rslt_t)Cy_SysInt_Init(&dma_intr_config, _rx_dma_irq_handler); + + if (CY_RSLT_SUCCESS == result) + { + NVIC_EnableIRQ(dma_intr_config.intrSrc); + + /* Configure the trigger mux */ + #if defined(DEVICE_GROUP_1TO1_TRIGGER) + result = (cy_rslt_t)Cy_TrigMux_Select(TRIG_OUT_1TO1_3_SMIF_RX_TO_PDMA1_TR_IN23, false, + TRIGGER_TYPE_LEVEL); + #else //defined(DEVICE_GROUP_1TO1_TRIGGER) + #if !defined(CY_DEVICE_CYW20829) + + result = (cy_rslt_t)Cy_TrigMux_Connect(TRIG13_IN_SMIF_TR_RX_REQ, + TRIG13_OUT_TR_GROUP0_INPUT42, false, + TRIGGER_TYPE_LEVEL); + + if (CY_RSLT_SUCCESS == result) + { + result = (cy_rslt_t)Cy_TrigMux_Connect(TRIG1_IN_TR_GROUP13_OUTPUT15, + TRIG1_OUT_CPUSS_DW1_TR_IN15, false, + TRIGGER_TYPE_LEVEL); + } + #endif /*defined(CY_DEVICE_CYW20829)*/ + #endif /* #if defined(DEVICE_GROUP_1TO1_TRIGGER) */ + } + } + + if (CY_RSLT_SUCCESS == result) + { + /* Reserve the DW instance so that HAL will not be able to use it later. */ + result = cyhal_hwmgr_reserve(&DW_obj); + } + + return result; +} + + +//-------------------------------------------------------------------------------------------------- +// _deinit_dma +//-------------------------------------------------------------------------------------------------- +static cy_rslt_t _deinit_dma(void) +{ + cy_rslt_t result = CY_RSLT_SUCCESS; + + NVIC_DisableIRQ((IRQn_Type)(RX_DMA_CH0_IRQn + RX_DMA_CHANNEL_NUM)); + + /* Disable only the channel, not the DW instance as it may be used by other + * part of the application. + */ + Cy_DMA_Channel_Disable(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + + /* Free the DMA resource so that HAL can use it now */ + cyhal_hwmgr_free(&DW_obj); + + #if defined(DEVICE_GROUP_1TO1_TRIGGER) + result = (cy_rslt_t)Cy_TrigMux_Deselect(TRIG_OUT_1TO1_3_SMIF_RX_TO_PDMA1_TR_IN23); + #else + /* No PDL function is available for handling deinit for non-1to1 trigger muxes. */ + #endif /* #if defined(DEVICE_GROUP_1TO1_TRIGGER) */ + + return result; +} + + +//-------------------------------------------------------------------------------------------------- +// _rx_dma_irq_handler +//-------------------------------------------------------------------------------------------------- +static void _rx_dma_irq_handler(void) +{ + cy_en_smif_status_t smif_status = CY_SMIF_SUCCESS; + bool terminate_read_txfr = true; + cy_en_dma_intr_cause_t cause = Cy_DMA_Channel_GetStatus(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + + Cy_DMA_Channel_ClearInterrupt(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + + if (CY_DMA_INTR_CAUSE_COMPLETION == cause) + { + if (read_txfr_info.length > 0UL) + { + smif_status = _read_next_chunk(); + + if (CY_SMIF_SUCCESS == smif_status) + { + terminate_read_txfr = false; + } + } + } + else + { + smif_status = (cy_en_smif_status_t)CY_RSLT_SERIAL_FLASH_ERR_DMA; + } + + if (terminate_read_txfr) + { + Cy_DMA_Channel_Disable(RX_DMA_INSTANCE, RX_DMA_CHANNEL_NUM); + CLEAR_FLAG(FLAG_READ_IN_PROGRESS); + + /* Execute the callback */ + if (NULL != read_txfr_info.callback) + { + read_txfr_info.callback((cy_rslt_t)smif_status, read_txfr_info.callback_arg); + } + } +} + + +#if !defined(CY_DEVICE_CYW20829) +/******************************************************************************* +* Function Name: _value_to_byte_array +****************************************************************************//** +* +* Unpacks the specified number of bytes from a 32-bit value into the given byte +* array. +* +* \param value +* The 32-bit (4-byte) value to unpack. +* +* \param byte_array +* The byte array to fill. +* +* \param start_pos +* The start position of the byte array to begin filling from. +* +* \param size +* The number of bytes to unpack. +* +*******************************************************************************/ +static void _value_to_byte_array(uint32_t value, uint8_t* byte_array, uint32_t start_pos, + uint32_t size) +{ + CY_ASSERT((0lu < size) && (CY_SMIF_FOUR_BYTES_ADDR >= size)); + CY_ASSERT(NULL != byte_array); + + do + { + size--; + byte_array[size + start_pos] = (uint8_t)(value & LSB_MASK); + value >>= MSB_SHIFT_EIGHT; /* Shift to get the next byte */ + } while (size > 0U); +} + + +#endif /* #if !defined(CY_DEVICE_CYW20829)*/ + +#endif /* #ifndef DMA_UNSUPPORTED */ + +//-------------------------------------------------------------------------------------------------- +// _mutex_acquire +//-------------------------------------------------------------------------------------------------- +static inline cy_rslt_t _mutex_acquire(void) +{ + #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) + return cy_rtos_get_mutex(&serial_flash_mutex, CY_RTOS_NEVER_TIMEOUT); + #else + return CY_RSLT_SUCCESS; + #endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ +} + + +//-------------------------------------------------------------------------------------------------- +// _mutex_release +//-------------------------------------------------------------------------------------------------- +static inline cy_rslt_t _mutex_release(void) +{ + #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) + return cy_rtos_set_mutex(&serial_flash_mutex); + #else + return CY_RSLT_SUCCESS; + #endif /* #if defined(CY_SERIAL_FLASH_QSPI_THREAD_SAFE) */ +} + + +#if defined(__cplusplus) +} +#endif + +#endif // CY_IP_MXSMIF diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.h b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.h new file mode 100644 index 000000000..a50e7151b --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/cy_serial_flash_qspi.h @@ -0,0 +1,272 @@ +/***********************************************************************************************//** + * \file cy_serial_flash_qspi.h + * + * \brief + * Provides APIs for interacting with an external flash connected to the SPI or + * QSPI interface. Read is implemented as both blocking and non-blocking whereas + * write, and erase are implemented as blocking functions. + * + *************************************************************************************************** + * \copyright + * Copyright 2018-2022 Cypress Semiconductor Corporation (an Infineon company) or + * an affiliate of Cypress Semiconductor Corporation + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **************************************************************************************************/ + +/** + * \addtogroup group_board_libs Serial Flash + * \ingroup group_lib + * \{ + * + * \section section_resource_usage DMA Resource Usage + * This library uses fixed DMA (Datawire or DW) resources and supports DMA only + * for the following devices. DMA is not supported for other devices and the + * functions \ref cy_serial_flash_qspi_read_async() and + * \ref cy_serial_flash_qspi_abort_read() will return + * \ref CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED error and + * \ref cy_serial_flash_qspi_set_dma_interrupt_priority() will simply return + * doing nothing. + * * CY8C6xx4, CY8C6xx5, CY8C6xx8, CY8C6xxA, CYB06xx5, CYB06xxA, CYS06xxA: DW1, Channel 23 + * * CY8C6xx6, CY8C6xx7, CYB06xx7: DW1, Channel 15 + */ + +#pragma once + +#include +#include "cy_result.h" +#include "cy_pdl.h" +#include "cyhal.h" + +#ifdef CY_IP_MXSMIF + +#if defined(__cplusplus) +extern "C" { +#endif + +/** The function or operation is not supported on the target or the memory */ +#define CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED \ + (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 1)) + +/** Parameters passed to a function are invalid */ +#define CY_RSLT_SERIAL_FLASH_ERR_BAD_PARAM \ + (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 2)) + +/** A previously initiated read operation is not yet complete */ +#define CY_RSLT_SERIAL_FLASH_ERR_READ_BUSY \ + (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 3)) + +/** A DMA error occurred during read transfer */ +#define CY_RSLT_SERIAL_FLASH_ERR_DMA \ + (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 4)) + +/** Read abort failed. QSPI block is busy. */ +#define CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY \ + (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 5)) + +#ifdef DOXYGEN +/** Enables thread-safety for use with multi-threaded RTOS environment. */ +#define CY_SERIAL_FLASH_QSPI_THREAD_SAFE +#endif /* #ifdef DOXYGEN */ + +/** + * Callback pointer to use with \ref cy_serial_flash_qspi_read_async(). + * \param operation_status Status of the read operation + * \param callback_arg Pointer to be passed back to the callback function + */ +typedef void (* cy_serial_flash_qspi_read_complete_callback_t)(cy_rslt_t operation_status, + void* callback_arg); + +/** + * \brief Initializes the serial flash memory. This function accepts up to 8 + * I/Os. Number of I/Os depend on the type of memory interface. Pass NC when an + * I/O is unused. + * Single SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7) + * Dual SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7) + * Quad SPI - (io0, io1, io2, io3) or (io4, io5, io6, io7) + * Octal SPI - All 8 I/Os are used. + * \param mem_config Memory configuration to be used for initializing + * \param io0 Data/IO pin 0 connected to the memory, Pass NC when unused. + * \param io1 Data/IO pin 1 connected to the memory, Pass NC when unused. + * \param io2 Data/IO pin 2 connected to the memory, Pass NC when unused. + * \param io3 Data/IO pin 3 connected to the memory, Pass NC when unused. + * \param io4 Data/IO pin 4 connected to the memory, Pass NC when unused. + * \param io5 Data/IO pin 5 connected to the memory, Pass NC when unused. + * \param io6 Data/IO pin 6 connected to the memory, Pass NC when unused. + * \param io7 Data/IO pin 7 connected to the memory, Pass NC when unused. + * \param sclk Clock pin connected to the memory + * \param ssel Slave select pin connected to the memory + * \param hz Clock frequency to be used with the memory. + * \returns CY_RSLT_SUCCESS if the initialization was successful, an error code + * otherwise. + */ +cy_rslt_t cy_serial_flash_qspi_init( + const cy_stc_smif_mem_config_t* mem_config, + cyhal_gpio_t io0, + cyhal_gpio_t io1, + cyhal_gpio_t io2, + cyhal_gpio_t io3, + cyhal_gpio_t io4, + cyhal_gpio_t io5, + cyhal_gpio_t io6, + cyhal_gpio_t io7, + cyhal_gpio_t sclk, + cyhal_gpio_t ssel, + uint32_t hz); + +/** + * \brief De-initializes the serial flash memory. + * Before calling this function, ensure that an ongoing asynchronous read + * operation is either completed or successfully aborted. + * Async read is started by calling \ref cy_serial_flash_qspi_read_async() and + * aborted by calling \ref cy_serial_flash_qspi_abort_read(). + */ +void cy_serial_flash_qspi_deinit(void); + +/** + * \brief Returns the size of the serial flash memory in bytes. + * \returns Memory size in bytes. + */ +size_t cy_serial_flash_qspi_get_size(void); + +/** + * \brief Returns the size of the erase sector to which the given address + * belongs. Address is used only for a memory with hybrid sector size. + * \param addr Address that belongs to the sector for which size is returned. + * \returns Erase sector size in bytes. + */ +size_t cy_serial_flash_qspi_get_erase_size(uint32_t addr); + +/** + * \brief Returns the page size for programming of the sector to which the given + * address belongs. Address is used only for a memory with hybrid sector size. + * \param addr Address that belongs to the sector for which size is returned. + * \returns Page size in bytes. + */ +size_t cy_serial_flash_qspi_get_prog_size(uint32_t addr); + +/** + * \brief Utility function to calculate the starting address of an erase sector + * to which the given address belongs. + * \param addr Address in the sector for which the starting address is returned. + * \returns Starting address of the sector + */ +__STATIC_INLINE uint32_t cy_serial_flash_get_sector_start_address(uint32_t addr) +{ + return (addr & ~(cy_serial_flash_qspi_get_erase_size(addr) - 1)); +} + + +/** + * \brief Reads data from the serial flash memory. This is a blocking + * function. Returns error if (addr + length) exceeds the flash size. + * \param addr Starting address to read from + * \param length Number of data bytes to read + * \param buf Pointer to the buffer to store the data read from the memory + * \returns CY_RSLT_SUCCESS if the read was successful, an error code otherwise. + */ +cy_rslt_t cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t* buf); + +/** + * \brief Reads data from the serial flash memory. This is a non-blocking + * function. Returns error if (addr + length) exceeds the flash size. + * Uses fixed DMA (DW) instance and channel for transferring the data from + * QSPI RX FIFO to the user-provided buffer. + * \param addr Starting address to read from + * \param length Number of data bytes to read + * \param buf Pointer to the buffer to store the data read from the memory + * \param callback Pointer to the callback function to be called after the read + * operation is complete. Callback is invoked from the DMA ISR. + * \param callback_arg Pointer to the argument to be passed to the callback + * function + * \returns CY_RSLT_SUCCESS if the read was successful, an error code otherwise. + */ +cy_rslt_t cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t* buf, + cy_serial_flash_qspi_read_complete_callback_t callback, + void* callback_arg); + +/** + * \brief Aborts an ongoing asynchronous read initiated by calling + * \ref cy_serial_flash_qspi_read_async(). + * + * \returns CY_RSLT_SUCCESS if the abort was successful, an error code + * if the QSPI block is still busy after a timeout. + */ +cy_rslt_t cy_serial_flash_qspi_abort_read(void); + +/** + * \brief Writes the data to the serial flash memory. The program area + * must have been erased prior to calling this API using + * \ref cy_serial_flash_qspi_erase() This is a blocking function. Returns error if + * (addr + length) exceeds the flash size. + * \param addr Starting address to write to + * \param length Number of bytes to write + * \param buf Pointer to the buffer storing the data to be written + * \returns CY_RSLT_SUCCESS if the write was successful, an error code + * otherwise. + */ +cy_rslt_t cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t* buf); + +/** + * \brief Erases the serial flash memory, uses chip erase command when + * addr = 0 and length = flash_size otherwise uses sector erase command. This is + * a blocking function. Returns error if addr or (addr + length) is not aligned + * to the sector size or if (addr + length) exceeds the flash size. + * For memories with hybrid sectors, returns error if the end address + * (=addr + length) is not aligned to the size of the sector in which the end + * address is located. + * Call \ref cy_serial_flash_qspi_get_size() to get the flash size and + * call \ref cy_serial_flash_qspi_get_erase_size() to get the size of an erase + * sector. + * + * \param addr Starting address to begin erasing + * \param length Number of bytes to erase + * \returns CY_RSLT_SUCCESS if the erase was successful, an error code + * otherwise. + */ +cy_rslt_t cy_serial_flash_qspi_erase(uint32_t addr, size_t length); + +/** + * \brief Enables Execute-in-Place (memory mapped) mode on the MCU. This + * function does not send any command to the serial flash. This may not be + * supported on all the targets in which case + * CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED is returned. + * \param enable true: XIP mode is set, false: normal mode is set + * \returns CY_RSLT_SUCCESS if the operation was successful. + * CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED if the target does not + * support XIP. + */ +cy_rslt_t cy_serial_flash_qspi_enable_xip(bool enable); + +/** + * \brief Changes QSPI interrupt priority + * \param priority interrupt priority to be set + */ +void cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority); + +/** + * \brief Changes the DMA interrupt priority + * \param priority interrupt priority to be set + */ +void cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority); + + +#if defined(__cplusplus) +} +#endif + +#endif // CY_IP_MXSMIF + +/** \} group_board_libs */ diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/api_reference_manual.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/api_reference_manual.html new file mode 100644 index 000000000..fd26c4877 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/api_reference_manual.html @@ -0,0 +1,15 @@ + + + +Redirect to API Reference Manual main page after 0 seconds + + + + +

+ If the automatic redirection is failing, click the following link to open API Reference Manual. +

+ + \ No newline at end of file diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bc_s.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bdwn.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doc.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen.svg b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen.svg new file mode 100644 index 000000000..d42dad52d --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen_style.css b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen_style.css new file mode 100644 index 000000000..b4893b13c --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/doxygen_style.css @@ -0,0 +1,1583 @@ +/* The standard CSS for doxygen 1.8.11 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #A8A8A8; + color: #000; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 250% sans-serif, Tahoma, Ariel; + margin: 0px; + padding: 2px 0px 2px 25px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + color: grey; + margin: 0 0 0 26px; + padding: 0; + + height: 0px; +} + +#projectnumber +{ + font: 40% sans-serif, Tahoma, Ariel; + color: #606060; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + + +/* ****************************************************/ + +/* + +#navrow1 +{ + display: none; +} + +*/ + +/* cypress logo */ +img[src="logo.png"]{ + height:75px; + /*float: right;*/ +} + +/* \section format */ +h1 +{ + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: bold; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +/* \subsection format */ +h2 +{ + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.0em; + padding-top: 4px; + width: 100%; +} + +/* \ssububsection format */ +h3 +{ + color: #354C7B; + font-size: 100%; + font-weight: bold; + margin-top: 1.0em; + padding-top: 4px; + width: 100%; +} + +/* \snippet_begin */ +pre.snippet_code +{ + font: 100% Consolas, Courier New; + border: 1px solid black; + border-radius: 0.5em; + -webkit-border-radius: 0.5em; + -moz-border-radius: 0.5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + padding: 8px; + margin: 0px 0px 0px -12px; +} + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +/* left-align the screenshots in the user guide generated from MD */ +.image { + text-align: left; +} diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/dynsections.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/dynsections.js new file mode 100644 index 000000000..3174bd7be --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (la9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/group__group__board__libs.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/group__group__board__libs.html new file mode 100644 index 000000000..a9a47b2e8 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/group__group__board__libs.html @@ -0,0 +1,755 @@ + + + + + + + + +Serial Flash (serial-flash) + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Serial Flash (serial-flash)
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
Serial Flash
+
+
+

General Description

+

In addition to the APIs for reading and writting to memory at runtime, this library also provides support for informing programming tools about the external memory so it can be be written at the same time as internal flash.

+

This support can be enabled by defining CY_ENABLE_XIP_PROGRAM while building the application. With this define in place, code will be generated in the .cy_sflash_user_data & .cy_toc_part2 sections. These sections must be provided by the linker script for the application. One the application has been built, these locations can be read by programming tools (eg: Cypress Programmer, OpenOCD, pyOCD) to know that there is a memory device attached and how to program it.

Note
This support is not compatible with the PSoC™ 64 series of devices.
+

+DMA Resource Usage

+

This library uses fixed DMA (Datawire or DW) resources and supports DMA only for the following devices. DMA is not supported for other devices and the functions cy_serial_flash_qspi_read_async() and cy_serial_flash_qspi_abort_read() will return CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED error and cy_serial_flash_qspi_set_dma_interrupt_priority() will simply return doing nothing.

    +
  • CY8C6xx4, CY8C6xx5, CY8C6xx8, CY8C6xxA, CYB06xx5, CYB06xxA, CYS06xxA: DW1, Channel 23
  • +
  • CY8C6xx6, CY8C6xx7, CYB06xx7: DW1, Channel 15
  • +
+ + + + + + + + + + + + + + + + + + + + +

+Macros

+#define CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 1))
 The function or operation is not supported on the target or the memory.
 
+#define CY_RSLT_SERIAL_FLASH_ERR_BAD_PARAM    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 2))
 Parameters passed to a function are invalid.
 
+#define CY_RSLT_SERIAL_FLASH_ERR_READ_BUSY    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 3))
 A previously initiated read operation is not yet complete.
 
+#define CY_RSLT_SERIAL_FLASH_ERR_DMA    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 4))
 A DMA error occurred during read transfer.
 
#define CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 5))
 Read abort failed. More...
 
+#define CY_SERIAL_FLASH_QSPI_THREAD_SAFE
 Enables thread-safety for use with multi-threaded RTOS environment.
 
+ + + + +

+Typedefs

typedef void(* cy_serial_flash_qspi_read_complete_callback_t) (cy_rslt_t operation_status, void *callback_arg)
 Callback pointer to use with cy_serial_flash_qspi_read_async(). More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

cy_rslt_t cy_serial_flash_qspi_init (const cy_stc_smif_mem_config_t *mem_config, cyhal_gpio_t io0, cyhal_gpio_t io1, cyhal_gpio_t io2, cyhal_gpio_t io3, cyhal_gpio_t io4, cyhal_gpio_t io5, cyhal_gpio_t io6, cyhal_gpio_t io7, cyhal_gpio_t sclk, cyhal_gpio_t ssel, uint32_t hz)
 Initializes the serial flash memory. More...
 
void cy_serial_flash_qspi_deinit (void)
 De-initializes the serial flash memory. More...
 
size_t cy_serial_flash_qspi_get_size (void)
 Returns the size of the serial flash memory in bytes. More...
 
size_t cy_serial_flash_qspi_get_erase_size (uint32_t addr)
 Returns the size of the erase sector to which the given address belongs. More...
 
size_t cy_serial_flash_qspi_get_prog_size (uint32_t addr)
 Returns the page size for programming of the sector to which the given address belongs. More...
 
__STATIC_INLINE uint32_t cy_serial_flash_get_sector_start_address (uint32_t addr)
 Utility function to calculate the starting address of an erase sector to which the given address belongs. More...
 
cy_rslt_t cy_serial_flash_qspi_read (uint32_t addr, size_t length, uint8_t *buf)
 Reads data from the serial flash memory. More...
 
cy_rslt_t cy_serial_flash_qspi_read_async (uint32_t addr, size_t length, uint8_t *buf, cy_serial_flash_qspi_read_complete_callback_t callback, void *callback_arg)
 Reads data from the serial flash memory. More...
 
cy_rslt_t cy_serial_flash_qspi_abort_read (void)
 Aborts an ongoing asynchronous read initiated by calling cy_serial_flash_qspi_read_async(). More...
 
cy_rslt_t cy_serial_flash_qspi_write (uint32_t addr, size_t length, const uint8_t *buf)
 Writes the data to the serial flash memory. More...
 
cy_rslt_t cy_serial_flash_qspi_erase (uint32_t addr, size_t length)
 Erases the serial flash memory, uses chip erase command when addr = 0 and length = flash_size otherwise uses sector erase command. More...
 
cy_rslt_t cy_serial_flash_qspi_enable_xip (bool enable)
 Enables Execute-in-Place (memory mapped) mode on the MCU. More...
 
void cy_serial_flash_qspi_set_interrupt_priority (uint8_t priority)
 Changes QSPI interrupt priority. More...
 
void cy_serial_flash_qspi_set_dma_interrupt_priority (uint8_t priority)
 Changes the DMA interrupt priority. More...
 
+

Macro Definition Documentation

+ +

◆ CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY

+ +
+
+ + + + +
#define CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY    (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH, 5))
+
+ +

Read abort failed.

+

QSPI block is busy.

+ +
+
+

Typedef Documentation

+ +

◆ cy_serial_flash_qspi_read_complete_callback_t

+ +
+
+ + + + +
typedef void(* cy_serial_flash_qspi_read_complete_callback_t) (cy_rslt_t operation_status, void *callback_arg)
+
+ +

Callback pointer to use with cy_serial_flash_qspi_read_async().

+
Parameters
+ + + +
operation_statusStatus of the read operation
callback_argPointer to be passed back to the callback function
+
+
+ +
+
+

Function Documentation

+ +

◆ cy_serial_flash_qspi_init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_init (const cy_stc_smif_mem_config_t * mem_config,
cyhal_gpio_t io0,
cyhal_gpio_t io1,
cyhal_gpio_t io2,
cyhal_gpio_t io3,
cyhal_gpio_t io4,
cyhal_gpio_t io5,
cyhal_gpio_t io6,
cyhal_gpio_t io7,
cyhal_gpio_t sclk,
cyhal_gpio_t ssel,
uint32_t hz 
)
+
+ +

Initializes the serial flash memory.

+

This function accepts up to 8 I/Os. Number of I/Os depend on the type of memory interface. Pass NC when an I/O is unused. Single SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7) Dual SPI - (io0, io1) or (io2, io3) or (io4, io5) or (io6, io7) Quad SPI - (io0, io1, io2, io3) or (io4, io5, io6, io7) Octal SPI - All 8 I/Os are used.

Parameters
+ + + + + + + + + + + + + +
mem_configMemory configuration to be used for initializing
io0Data/IO pin 0 connected to the memory, Pass NC when unused.
io1Data/IO pin 1 connected to the memory, Pass NC when unused.
io2Data/IO pin 2 connected to the memory, Pass NC when unused.
io3Data/IO pin 3 connected to the memory, Pass NC when unused.
io4Data/IO pin 4 connected to the memory, Pass NC when unused.
io5Data/IO pin 5 connected to the memory, Pass NC when unused.
io6Data/IO pin 6 connected to the memory, Pass NC when unused.
io7Data/IO pin 7 connected to the memory, Pass NC when unused.
sclkClock pin connected to the memory
sselSlave select pin connected to the memory
hzClock frequency to be used with the memory.
+
+
+
Returns
CY_RSLT_SUCCESS if the initialization was successful, an error code otherwise.
+ +
+
+ +

◆ cy_serial_flash_qspi_deinit()

+ +
+
+ + + + + + + + +
void cy_serial_flash_qspi_deinit (void )
+
+ +

De-initializes the serial flash memory.

+

Before calling this function, ensure that an ongoing asynchronous read operation is either completed or successfully aborted. Async read is started by calling cy_serial_flash_qspi_read_async() and aborted by calling cy_serial_flash_qspi_abort_read().

+ +
+
+ +

◆ cy_serial_flash_qspi_get_size()

+ +
+
+ + + + + + + + +
size_t cy_serial_flash_qspi_get_size (void )
+
+ +

Returns the size of the serial flash memory in bytes.

+
Returns
Memory size in bytes.
+ +
+
+ +

◆ cy_serial_flash_qspi_get_erase_size()

+ +
+
+ + + + + + + + +
size_t cy_serial_flash_qspi_get_erase_size (uint32_t addr)
+
+ +

Returns the size of the erase sector to which the given address belongs.

+

Address is used only for a memory with hybrid sector size.

Parameters
+ + +
addrAddress that belongs to the sector for which size is returned.
+
+
+
Returns
Erase sector size in bytes.
+ +
+
+ +

◆ cy_serial_flash_qspi_get_prog_size()

+ +
+
+ + + + + + + + +
size_t cy_serial_flash_qspi_get_prog_size (uint32_t addr)
+
+ +

Returns the page size for programming of the sector to which the given address belongs.

+

Address is used only for a memory with hybrid sector size.

Parameters
+ + +
addrAddress that belongs to the sector for which size is returned.
+
+
+
Returns
Page size in bytes.
+ +
+
+ +

◆ cy_serial_flash_get_sector_start_address()

+ +
+
+ + + + + + + + +
__STATIC_INLINE uint32_t cy_serial_flash_get_sector_start_address (uint32_t addr)
+
+ +

Utility function to calculate the starting address of an erase sector to which the given address belongs.

+
Parameters
+ + +
addrAddress in the sector for which the starting address is returned.
+
+
+
Returns
Starting address of the sector
+ +
+
+ +

◆ cy_serial_flash_qspi_read()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_read (uint32_t addr,
size_t length,
uint8_t * buf 
)
+
+ +

Reads data from the serial flash memory.

+

This is a blocking function. Returns error if (addr + length) exceeds the flash size.

Parameters
+ + + + +
addrStarting address to read from
lengthNumber of data bytes to read
bufPointer to the buffer to store the data read from the memory
+
+
+
Returns
CY_RSLT_SUCCESS if the read was successful, an error code otherwise.
+ +
+
+ +

◆ cy_serial_flash_qspi_read_async()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_read_async (uint32_t addr,
size_t length,
uint8_t * buf,
cy_serial_flash_qspi_read_complete_callback_t callback,
void * callback_arg 
)
+
+ +

Reads data from the serial flash memory.

+

This is a non-blocking function. Returns error if (addr + length) exceeds the flash size. Uses fixed DMA (DW) instance and channel for transferring the data from QSPI RX FIFO to the user-provided buffer.

Parameters
+ + + + + + +
addrStarting address to read from
lengthNumber of data bytes to read
bufPointer to the buffer to store the data read from the memory
callbackPointer to the callback function to be called after the read operation is complete. Callback is invoked from the DMA ISR.
callback_argPointer to the argument to be passed to the callback function
+
+
+
Returns
CY_RSLT_SUCCESS if the read was successful, an error code otherwise.
+ +
+
+ +

◆ cy_serial_flash_qspi_abort_read()

+ +
+
+ + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_abort_read (void )
+
+ +

Aborts an ongoing asynchronous read initiated by calling cy_serial_flash_qspi_read_async().

+
Returns
CY_RSLT_SUCCESS if the abort was successful, an error code if the QSPI block is still busy after a timeout.
+ +
+
+ +

◆ cy_serial_flash_qspi_write()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_write (uint32_t addr,
size_t length,
const uint8_t * buf 
)
+
+ +

Writes the data to the serial flash memory.

+

The program area must have been erased prior to calling this API using cy_serial_flash_qspi_erase() This is a blocking function. Returns error if (addr + length) exceeds the flash size.

Parameters
+ + + + +
addrStarting address to write to
lengthNumber of bytes to write
bufPointer to the buffer storing the data to be written
+
+
+
Returns
CY_RSLT_SUCCESS if the write was successful, an error code otherwise.
+ +
+
+ +

◆ cy_serial_flash_qspi_erase()

+ +
+
+ + + + + + + + + + + + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_erase (uint32_t addr,
size_t length 
)
+
+ +

Erases the serial flash memory, uses chip erase command when addr = 0 and length = flash_size otherwise uses sector erase command.

+

This is a blocking function. Returns error if addr or (addr + length) is not aligned to the sector size or if (addr + length) exceeds the flash size. For memories with hybrid sectors, returns error if the end address (=addr + length) is not aligned to the size of the sector in which the end address is located. Call cy_serial_flash_qspi_get_size() to get the flash size and call cy_serial_flash_qspi_get_erase_size() to get the size of an erase sector.

+
Parameters
+ + + +
addrStarting address to begin erasing
lengthNumber of bytes to erase
+
+
+
Returns
CY_RSLT_SUCCESS if the erase was successful, an error code otherwise.
+ +
+
+ +

◆ cy_serial_flash_qspi_enable_xip()

+ +
+
+ + + + + + + + +
cy_rslt_t cy_serial_flash_qspi_enable_xip (bool enable)
+
+ +

Enables Execute-in-Place (memory mapped) mode on the MCU.

+

This function does not send any command to the serial flash. This may not be supported on all the targets in which case CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED is returned.

Parameters
+ + +
enabletrue: XIP mode is set, false: normal mode is set
+
+
+
Returns
CY_RSLT_SUCCESS if the operation was successful. CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED if the target does not support XIP.
+ +
+
+ +

◆ cy_serial_flash_qspi_set_interrupt_priority()

+ +
+
+ + + + + + + + +
void cy_serial_flash_qspi_set_interrupt_priority (uint8_t priority)
+
+ +

Changes QSPI interrupt priority.

+
Parameters
+ + +
priorityinterrupt priority to be set
+
+
+ +
+
+ +

◆ cy_serial_flash_qspi_set_dma_interrupt_priority()

+ +
+
+ + + + + + + + +
void cy_serial_flash_qspi_set_dma_interrupt_priority (uint8_t priority)
+
+ +

Changes the DMA interrupt priority.

+
Parameters
+ + +
priorityinterrupt priority to be set
+
+
+ +
+
+
+
+ + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/index.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/index.html new file mode 100644 index 000000000..b089e5983 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/index.html @@ -0,0 +1,144 @@ + + + + + + + + +Serial Flash (serial-flash) + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Serial Flash (serial-flash)
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Serial Flash
+
+
+

+

+Overview

+

Provides functions for interacting with an external flash connected through its Single SPI/Dual SPI/Quad SPI/Octal SPI interface. The read operation can be performed in either blocking or non-blocking manner by calling the corresponding function while the write and erase operations are implemented as blocking functions. This library accepts the configuration generated using the QSPI Configurator tool but supports only one memory slot. Note that PSoC™ 6 supports up to 4 memory slots on the same QSPI block.

+

+Features

+
    +
  • Supports asynchronous (non-blocking) read operation
  • +
  • Implements thread-safety for use with multi-threaded RTOS environment using the abstraction-rtos library
  • +
  • Accepts the configuration generated by the QSPI Configurator tool
  • +
  • Supports Execute-in-Place (XIP) mode of operation
  • +
  • Provides information about the external memory to the programming tool for it to be able to program the memory, for example, when user wants to place the code into the external memory for XIP operation.
  • +
  • Allows for programming external memory if CY_ENABLE_XIP_PROGRAM is defined when building the application. Note: This is not compatible with the PSoC™ 64 series of devices.
  • +
+

+Quick Start

+
    +
  1. Add #include "cy_serial_flash_qspi.h"
  2. +
  3. Add DEFINES=CY_SERIAL_FLASH_QSPI_THREAD_SAFE in the Makefile to enable thread-safety when used in a multi-threaded RTOS environment
  4. +
  5. See the PSoC™ 6 MCU: QSPI Flash Read and Write code example to learn using this library
  6. +
+

NOTE: If you delete the contents of the GeneratedSource directory inside the BSP, you must re-generate the memory configuration files cycfg_qspi_memslot.c/.h. To do this from inside the ModusToolbox™ IDE, open the QSPI Configurator tool from the Quick Panel and press Ctrl+S or click File > Save. If you open the tool outside the IDE, you need to first open the design.cyqspi file in the tool. To do this, click File > Import and then locate the file inside the BSP under COMPONENT_BSP_DESIGN_MODUS directory.

+

NOTE: For devices with no internal flash (eg:CAT1B device CYW20829), user needs to disable 'config data in flash' option in QSPI Configurator.

+

+Dependencies

+
    +
  • abstraction-rtos library if DEFINES=CY_SERIAL_FLASH_QSPI_THREAD_SAFE is added in the Makefile
  • +
+

+More information

+ +
+

© Cypress Semiconductor Corporation (an Infineon company) or an affiliate of Cypress Semiconductor Corporation, 2019-2021.

+
+
+
+ + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/jquery.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/jquery.js new file mode 100644 index 000000000..c9ed3d99c --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/logo.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..be03a1ff92032f2d7dae77f692491ad9e8c9e608 GIT binary patch literal 19090 zcmaKUcU)7=^7m0tK&qnBn*}TgqS7H$8%PlZ>Aff&kxl>wK}A4Cic$h9y_Zk}p(uz{ zAyk3TODLfS63V;rdG34fbM^lI@Z*QGyK`o~Q+8&vb6#kw-=sgneguLb`rEgZwIGNB z2|))Es1JiDhpj`$!GBbbZ>wFWnmT-t`54vx$*BqOh{olXz8eGyohJV~;FT)p0UlD? zDyS(yP+=tPj`<-7QsKL;tZ>h3aB;Zq$#{8bqbr(Dic&G-D{Uatg+LP~#b@%=!L>fR zC!Q*0FzHDIeh&;|uS$79cQ|K_i))t!OVoO3V zvY)er8P2o7H7KjuFx^;qYvg9cnBp)Rg5If&K#)8vv|!ysAkc(1QJPBO*iBRBpf&4T zd#T*M5Ty4;9D-c1;buN;D%G&XS2*9v7mG7d8V-2x_{+Nf?lRklpnJ-INXA{l8V%07 zUy|_#uJ+{cRMB{gKyqx|no}|*1Z_^zLxH#24|d{IG_CdX)#QhhxJZ#}W?9@k5M<`R zdKi+YA)ZZ))zFnAF>OroVy-`~DIx5fzo4Oh0ID?w#K~TNm>~P~Zz7$X+3Lb7RBRoxe zb^#hpZ@{Y^9;bVnh0-Tb7f|W}3gbXD-pHkOnncGYhA(bEkD48TAivk*P_2yDk@z;x zCg}peffJZDDrw6XqcPWtekB2?5R;uU$snA%5-|o=pZLWi=;(n(+GM9i}pmz!*P_nX2c%qt=|Idiw7eLnKGu{+|$Cj^o zh+%g{?le70`D>!a2vnQBRIa^}W|=-NnbcVHnH8+p2b%EuvAg3WD18DwogKhVO8Yha z3%@gzjG-DBi;~9i>Pf|%0LE0CfI1L}T$(Af>`^GNY9JNP=@m6I10rVtZ-S50!;`$^ zHaB=lwq+LXh=brcFdBJamJdY~Hbon5XrOq2WRT}1y}V2tem~}PQRv4APpg^L>#u=D z%F}@716rE0dORgmSSk`t4MQnacF^Hxf_PSo z^x&c6E{G9_i~z-!E0#|I^3a9T&d~QC!hBA)M~eFV2pVw2kurF}6sd?%XbJF#>H*w) z8yYrpS3?G}$2Q-Wrg_TKlv3)0A&k-pwBtlyg^I<~qL1AjIsXz1IY}QVyer^y zuO)njp;VRX$<^2xUNR0$cCIki2#p8ThX-wg7JC(-L|OzEs1FhXD&a{GlH@LaZ*c$q zo~^&fFW$@m`pb1c(lm>mx!tLQ?WxArfAGeORr+|%*n(BbVylPc^CkUDZ*pnzM916~ zPQ%>)););#&%CBUHZre3)Bz^OK&8uqqq2h{ix??sG-B(v!ltn-aA7D=3mE+hbk2ET zMZ4v7w{#}MK|yI2pmXSIlsHu1zQ2p@QaA_iak8t1$63u-fB{}6ZwlUp9qc}mK{0cx zdoX%bR$t7ItoAE!#i5T8U`c$?WjkU?DfaS9f)$V~P#$2BF%hs|=FW6urX)ej6HO=4 zw`wsG1@sTS0vz0JimjShiCcVES>=t^m-f@}NLkVVW68QexXw8dvFDZRvZh$Q0|JOk?w zGncM{l~5meqeA+8Lprf~&=;FMl}WZ9O=@onv!OBczM%v)qM}4QLSbKBP{W$cJ_Oiz z4Q(1aV|UrTIAe|LHJY?vtw{iJ2nuWhv?drLx$FpF1&>Adv5DwPIr2+TH%1^?NVtkj~OXq(49RAP8d5pz< zHONZT&#^+KMfG8@TS1URGe_WDm#r<)IdkczAl_pOzwa+eW*i42lQUBtfrer|=Bu|# zad8`;)qzsVf}jr#H-^c<Z=C1LV#=_Gxv`>t9D3i^jY)o{RGYv>UhKPicr+ux z*<;Ni4sKPPA;%R!{eXGDoh_u1V25yLBt*`)>pwMnQ0qSBO| zW%py)BeyJZM7iPC#h*j<~@nh*)Qow!dz=LX43g{D?&klp6NHxA8s zrBOeGYvxL}>g&@oxsE;XBMFJxEkQbHR6sYU975D)*l=TiNO9O7XzW-shi2G)Pf`C) zr&UN|#49`KyvD=3pBuJ(@f|7o?;F<$`lHqkK+rq9&hqqKQQDs_`!2z|psihO{@x7( zE_Fm*L{kCcTI5B}(i<~vp8K|HQV76^-5F z1F~^8b1pAY zGYq}G)GyZ5R@f!|b^cgzR{_a5`)Dh|f#M=+;|Z5fty_|H&4qbfh?cX%)pc z1dQO~>fv`8uhWbBWH=eLlaG(g7B^g6;8zOBX66=Y@pOovcr-4F;9i3p0~Qid2hQG3 zDd>iK_U`Ns@=#29726|e9gh4^br1N&eKk~at%vR^2C;U2;|4j`;}!F!Pf>`cx|JyQ1Z^Jjt`?StU@KywU1muRiC)8*{v`Dyd5Y zsM=RZiEe&v&(a)E6XzZI_yQ;Fd)^;IFQ zuU=2SH?Aoj+e5p7|Keyn0t}(}jktVnSVh&!@l2bfm}Hgu)Uws|#L$4HVFi-u;3&xb zN5QV65~@k?C~#xCoQr5LqBx(`!zp(&mBBrKutsygQGrAdQ~>#r8z42sw4i&UMy{n> z|6YFK{wpFDU1$lrVMkfi)=2<1hGK{EE@Rsbc7*W$G*`+EzqL9d&; z_2os!9>#K~LnQxCj?Qy)*4Rcv1<#dn5zSD2#Y+$r7mYe_vXWRM_jC2}$?_{>b1@?@ z6s9yF%Wr#czNPB0G<7jK7+=2VP4Q?xf%k;YO zKx~IIm3fRNFms!;&hqNU#vF>NsXfj(O9rnV;l)d0<)Td*D=5^#Pm(nq*$gElL)Ah6 zF*l#HJj1Z7Qbul2^24draLYjUYn%A)8q__BZ?3EjkuHCU-I~i-f^?w%YNJ_;X>Q-6 znbI;|`{t@CQ&_W}3j;eedEc0ROzjo+^5CU-g#(dyJW5j>)AI<8u6h#GNW%?RfQ#!l zj?1x2Tg^!Z9ug+mk>Z+f8~vls_02q3!{>ePjlo%hIpeRz%@|G`8oW251xG#Uy4J)M z>}|UKSZ3telTw{NMgZ;`@ll<*#4eSCjt08bnmqUcs!x{(d(8Zws?!DhL%;# zj|`sFO@k8B%wzSi%%`{VRnjg56B8aI!=ThKRrlQI4PKdx2FCcHCL4Q~J06rkldr>2 z2O_i1bfyt(jYlB%!$GN)x?jvW?c^{UFjv1vhkvdId!*zYg`h8hiPL}y0A7ux88z~p zCQlA)RaxZS2ttIMw<6HE$_boTzuT0th zv1sN3b;(7r!22Hy=(F?q|zGe(CJxB#&1hdI!dR4)9_j7?$u+EFyj(z%Y?% zy#Tg=FK0+WRpr=^^c)ZN>Bs;pX8^#StFDG}D`G!}k>-*Lo@{pf2NG3# z9E5-7PYSbXw;>!OZrq7(BV|ds8&L3?)JvtEy~&f2#V#G`zh>~jeeY{@A{EIB~bRN+%F=Dyiq5zvsB$A=HC>m$q+i+k@aSbobR1h?4sp z5D9kg!1mlq=2$bAwSGY&6KTNoOvn886}yHa=Y~@BtpIU?b2;pj={M4HU4L6Z0=B(z z)WvdJ9Lo4fuy9m*UhVN|$LSgxCEo4a?+Nm_IcG5zoTc7de?ez{&KcVUqNEh5{6)@w zp?MEai*H}0t>4Cs;ViwpX0OOt7FWp45JA1E{wn&ee zMkso%rq4tQTiPHJR`L^hec}fVBbe}e<+mx>18OEp3bKoAah;_v+2%o zVAaI&=N-o_(lxKf%SgV_5l-wpTO{E)cGp|k#b;q?h<)>i%aR|4J@^A6TRUy1^D2o^ zOf88=q{eQk??KW2frs9CL6B5giLYCa z=(yG|9HlR?J-TAGs73Wm0L--m#VX=L@H%K4b;iO(C>ie_Da_ZxfA$aXXs(|Be zc>GkPaL{H?X>1lkTQ*pqIJs9b#@D*%rskZmKTG=JnlyiNbeL}Oww#4t-UsS|e9>m2 zFn$~!DRyW*OZZwy)b}g3pZ(`Z&0?AL3#r19;s$E)6pvoF)7^S#6&ZDIxbf&+jotpv zSuh$-G!o-x(Dr2-4ddu$oBl9C@bhjMBxqdbz&JI)Y@2FrC%>iBLMJ;SEE?dCCM2 zxXnpi!pxM^`QaDKu|>Y?l}8oajLuFi4tnB;&VNLF@Z+$rew^P)sE}$k8O$QlGQLXT z-0xD_GL)iDb~DVDZlP#+VZ~OGcRR|@ZRb$W#G{Lz%y8}d8HsR~MSlMbBs)*keG3Vm z;yIhL=kaR-jfxKy=Em%AQid-&ZMY$%mq^Vn?TE*S&VHDl7q0T>J(R`AGsXL~RdEQs z_bkiSH#&hgsjkMl2UeHPV7F?<;9F0vJ3Ui5^CeqrlrhVPZH3u+@FBa!<=rRoa=P^O zhkj0PeKCO>DYaIxk!J7n&D{L4i|Mbv=})-XpO(P$fx7fi+^#9B%YbVShm!I8z#RV9 z){bP>kwqo6l{>Piv^>qK?=CwZLkFLk@1w8}n!eXVq_z^!QX|TK9 z&50M!iKtusjxZf(+~Vt~eqgg3>%QV4E%fMSRclm=!zsFJ&B8)^3tdU0MsHz19$q+t zd>>&-pVFJv*byctUjOL3g(>=>#o@s^T@a{opE90!jEeRf^q`OQV|$$0=X)IXKbE|C z8^rY8x5Smd9$<|=juf4u8dSK*8HEfU6l^NbJdH7Ml<7{|eSh@eVsd%BL<8*pU{>TB zU7xXY)$sJFP(M32VPgQn#@D$-VmI0lAc}}Jp(mLjmf;nSJRC2eye*)ZecSSUMw?yH z?(9D5+!K$2W8uvPii=X+E7^RQ4~h1>2$u7m{L&l9Ci?(s-uIriv!5Q!e3Q*3#+h;k zWDkdwfeB|j_cCZ}T33Z{Ylw1D{*b)X!!;2-7HmF36+YayD>bXur+$s!o(8F(6vGxl zs&*ME@~h^>wGma|yYKt^oEajbk>i_t4=jY~d5U#-JnP(x9mfw1)+r80mb3Qd@6lFz z#Va*?x^1+&6zLtYD>leGxf0@8aKz75x8>0R#|zZRMz`33m20KirUCrxu0#dC@wT<$ znukXW7zVyIK;g<5b&e?E-VLlN!Bqp#!hkIKAh1mc|_! zkoP>FdxkJS^ESO!s(SqN)oL?w_uxSXjy}KXRZ=sJ z95|;&C6o)a2&dZ{*NgYfd_E3*9pub z`kP$JGm}fF7IoH}Ys??sbB*%TzNy#jA#=&u;fotfK1-`*b`8UieDR8%khCcoZKgHZ zb3(+=ja(US=a!^L?#ga3aw(4XDljFgW-kT5WmP|>DulXzHGVRFD@ANRJaQ_IrNcNF zaj3W%X$LWdtsu{ae$-+vSrlIY`du%Z^#0r63y;Tp9_AXOZj{E0huY*$zH;+48 zW9A79&6Qg_FFxxaEN7e6KkdsGq?Z`FQ@v|+d8_vl7sma%UTyWnx_+ zK+{wH;YaK>QNNQGLedSeFmAizBw97&lo){UDT>yvkR_MAmu>P8un3OK_G~E%`Pf zX8p5Cm-8uiKPRm@vBgAUtFX6KNhk2R2*d1r=QvioZtb?cxiqO)tM7DW%@+8dTOSgI zSrA$euw%a4iZ62{5?){hZhwtwT~@~pC26P7sB)0 zBCyG0352~6C2BuUCgm9mDSc%t35C`x6_WWs)^7L}y62%{ zM;T0?^`6xoOh63&;fEc_>G7U54P4x=Xym<=p($IWWOt#h>^`<2vC5{-2%81qKWQh& z75t;3)#vox(`4Jtxm(dN>zOymK}tv3Z+OXOCu&OjJJ=mT;)dJg+=dGbun8}T9XNPJ zuDRMtywlP_gylf~)!rFh%X0H~W0Io$Ew~_8=*qqMk7WO% zzR@z3gNR_wY+oHDjU)qBbtYBw@Ryn-Yu9dbzlK8H$iCuA z8YDwwRgi&Biif>s{M<1s1+4xh3LS?Wt3s)BEzE@%k$QVBcBMI$g#l%~cH32_FgE)K z(D`kTn5%W+@P=JY4(p(E1M1;F{vzI+;$iD`pg3W&54Yl@E1uF@=jExHeG215KYz7q z<>Y!|591@7U27RR>i}Y3f4~gfy#Hoz)vNr2;ni;ZPjoMH8v-=M6&-!{F$%1JvMrs! z^VEVHEt>XXbp)jT2qwR0Vk5^%F*j&sDOq=3)81$C#ZYXxv6<;1u2|_HDM3%!y(>$n z=iB=4#PD*Mal`;{7;J697^5tKl^MdyzBpl7uQ4@QOJ!+>D^&wjF}iJ z7itj@qE$dY^U5zR9JcylC5bG6MV$y~>}!lp?#S_{v+wB>A7Vh>jp4>)s3eayG&`Tq z`GModu3x2n3Ny-Xn%8d&HrVyTN@w(3!F&i{9)6U-(PxcZ*WS$1vRo6gE2S@BCkect zX1qw(lrn();?n-wuc>F5*bB^!l?GWC!>#&M>E0WDH>#*ngL{ac8{BV+H|+Q^fAMLP zqI(Z9!0@fnU4PMH@UR?Xaa(hYWxmLc@{jA`y?8oXbO^f%M{(b&nwsWmhJ+0Q63yx` zx1t4qeOe@;)q2-Pg60Nd^6W-9=1xXWWN3Ae!Kcu{*BhcIc9{D5QIUf-4(O?NqM^B* z{?bxHE}F9MMstO=p6O;yeehn*CJV(SS)0CzZGq>@b;&f`#E*UAT31ta<+wK)?C9Bu zr~3N(h3rL1u-pd`gVunOfO9K0T{gRW^=JA($JGY=38`i8=n@bU@`4A=R3p#YZ=JrH z&>CCMt`u4``yV_tJOh78Pw+Iif_q|=P>?%ldU*59=Ixu2H@-WoT z8d;&Iub;3!h1Ry5?PRI0dGmn=Nn9!L)U+=Lf5KYa%H9@Al6EkxhgQE6AHLpz^)Bxi zgb~9u4c`Rp)$>u8l4)$c>)2sd-ZJZ?WQ6~i=g54ona#uKON9)fg|lqDceHBQ5-i2r zm|8f>pg;H{HdS(aHB!qI^1|)!1{}4!xY}Xr!ldkt=oM*r;deeqGQ*jBc*LOnr9e|f(MnDjHIYP zp)}^>#*}N0_p(Z@U(a{`Y@?X#FSEdfQOUTJQPY4}YgtA)a=p?Bld|1!HMgufU9eMW zA!$1e>!ZsLf9roWM*|ixiq)+006&JELTsJ7lJM9 zL&v-?BJvp=x2|Nk^-kr)%)E=;?%DErYel;ng1pr(+(0zgDF1>^(FN&Pi6+m`bGvdE z(K;p5^}nsV0eE5X;8WaHnDf+HbWeqz3(r|J=X#WT+dyNQ`K7mOEd@2YvO=yW?W**! z>51-Ljgd5`{4N(%7BZ=?ru<83tKJoSn3FoDmQ}6Vdo=RdZm!c}&UB<(uu#2@)71{X zUsz2z`aag2!st%o10*TyqNSd`7t8Jw98Wi*%$69m1OpnXZ=27b?Il{y!<>9JP;U1T^UF%Ihwp3N?SH)Ull4?)n!Y zyP=!8m66Ksw$fOjcl*0?WK$%dC8$3J4<5vjS+Pv{Fsbw(E_xPoQp?nGKa+La+ulnk z@5tgO2Yif=Y)8A*c249keG346@9i}4Q3`Q_s;BLWxsucy;b)>D4F7NoAW~*WQ9df6 zEVZreDQxwzT49d#&#h}HF%@DvSxfw`N06#i3Xj!S!?f?EYK$`53*s7|68U@n6?ABj z&oH(F_p2S{G|uT)Bcxh}1ZPic^c`=hj1t6ViT;BS5BPB}r4$NbF3(|%A59VVfu9y- zw%eF6$0zG5I`VCB?Y)W~lQfLipSGFs?)fSD^-)lc1CnDip7jN1|6O;2K^67|lbUz}u&ja&bb5B##N z16{|!U`c8l*T}T4!ea6I`{luNWGcd{`=fPx>ic87!9e1>4PRT9EmD6s55!b?jwX<# z;=SP^WJi~6z5S<2|Js5Y!QCJ#lJst95EBSO%JeM44PnuCZyAmM9p|Do4R66?CO{gV z0-v;TI)Qw_%U}OOyH$Ek}@7H-5yr zRt>l2K3$RgZwkjDuHep!Tnv?17Q2v12+PHuGdz|54*4Jyy(S7aSw9p)WI;<|B{-kL<&g+|*ku=|mN$sP7E@WG`pYT7O@mP4=#6{-mm&Uz%mr3N)qnE3pjmbI z*Y@GXW|DL7zXP@+u9!1c^h0K(N8_T$)v_avwub)#=r0S9z+9I zakuQ`&C=z6n7?DjByXTi3atF-9}rIXH^QB;N8rtN&i|6PrAyAM07QX|2HP9XI0{a+ z|I2@FJllK|U!kMv`%k_T_Zk$oTA#Ijoc=%T0))bF5DJI9=buasjpasCBFo<6crj8- zJTm>*IXQ+g{7-NTV@w+!_$l*$YI-Z-(h_Q8)TI?>zj(UEyExW*O}k;u;S%nz&Ee+Y zy=L-Nj&xY;EfWFeBn2~rhn>%(^$#I<5YkJb+)T`tW4!VYTzu!V( zG7)SA00QAxAlvA(myMi+{go(~{*@>^F7%Wi$z*(d{C~iBsK;~5%_E_#hHW!4e$-4d za@~W?o)2@FJswFSnKINl&-40CucyKKkN!$FqVj*+P3|G4`q!_SMt>=ftifz-iUzRu zCWu~U14z!qn!^W()QszdWmAR}e1pQW6-|+wC?!QhSjlhOiY7c%&eq;*r1E{fiiKo= zSDX@MU(}hOyV?KF3RkXTZj2m|G-sLg<_EP&?eeMIKX9|+-NK07BPWCFqRxW$?cSF} z7tju(5}Elrk*W#L2EQmQw}unu*)wrGXAR=0Gp&HJbW=-+X$7f&)(wpy=CV^<4f1J zfv2ed%(s(7oRT&Nm$-> z`1Oq3Z;|_NVrHbM6DyhpzP#;WqN8(O)%oveS&y@KK)k$!u`E#z**%TUySB+!(`Lk& zQX1%A|7EXchZg(}>?FORAgoUhK;<|6Ex_m0GK3=$m-S>@(n3n%XX5eO6P|w>jCg^z&~L49Pp; z8dIN=<2t^FpRVR_Dt}@E)&iSoT%Us(ux;Kw^^+sD&{*>Iu8)P6qtU-Bz2$02>co>E z?3jK$$Gn~R-z6tV4|{FBmiQg`x4riDmb7wf^`R7emV;>mkiJ|Rs!|mfc?=v0k)`eGL^!QXTOn;d(%S9%)DHG zFEw)T%QMv+N$9Td=PK4RO)BmAjhjs;qU>LogF9`JExK?9i!&JhXhDVPhl>-;%5lv* zH+~O32j}e5k@WC4XUrmZr*ph6t0lef*`GccYm55L z^&bFdA=rgUM#ftv?`~ek8nmAcU%BF1x79*~4;EKaBiA1E%|)^Jj)C-q8c zHPAmBd#3-JrIyq*?iGvV`k>Th__1)`?tSCuKP|a-T4Q*{8&xB7iCttT4!;cwAg4V! zMsw$>UyQvWGp1Ja8)GgYCVAR=aSL4Bh^uxLY^PW>n@?7Y*KRzGzu zqaj;z<7p6JJoiINuJwW2TSdQqrHQJ{5&rO7O;oobx~XxHIV$}LBWIAWs$c4&;{wH~ zn49dwnMLP`4`sDcLje$Y%9nz7aNc95^QYZ6{itFZM4J5g90%Q6D~U zVcCicg}m1%y9tMl{r_fTctOU2D47azIN1-m`lj4p_T9ol`H^Z?BX?jSC8y>zwq zU%X5X*AuV7X;kRm^!KFRCA|-iS6MToEW>RVptD&LWBqMkok^D& zwNNhp+euFSymt8T3$5orH`m&H-%VoQ?@fAP3~q9F6W2rhD<)(*IwNzLQc?u zjx>QQ&m8@$RL$4v2=%&*;XeV(wPsuGpsBZe`zH%HX@ba-qZNn`<8ahNVN900N_7qa z@ma6s{33AbF9PC|-IV5{&3`gT+I$U3f7&!ZgY5q64m zi*rB!;_~s&Z^uUa=pZ7`hdaQWO7OitWm%Jh=hyy={L26;g;x|a)ViwD7@npfv*gw+B?kVCL5C9dq!S+w zAx?$#9UnIVVer>^K|Z(`ZNi8Q^ViRlda&xBI}A`9`!fZ+`XWce8cNwT{6WJx;!J2_ z5s&hJuwjv*#&E!Sk=N?NNPe_1$5AyV-Kf1k%fpY^xAw}5J+l~yVj|GDe2E+yk|QVH ze^tdbU+7ZA=5VAh9SDMb)e*F*y~Ny~IdWFqeJE}vjOE!l#l^^?kY&zR6hHrQ1$kGi z3{>-#!Xl;_xvt$ApDXcw?CLvzR?J#&$DvyqdB&83#e3T>E=I?PhOho7FL%hi3|+hM zCLyDqrqgcqe;5fx)02*G&#@`h-ExLhP3goM;PHPK!SEN}N{jhKYq8q4v!2rZS-M`BICDm3|yC|h{Ur(mXC$a`4zAv9D_@lSi z2t?cruk*-;Eisco{xClcw*ip+IvmLcL^$oDUdHm>Kk7g)O!;R>d{^Tz#~tJ_O{BV- z7n}~pR0b2^NZ*T$=oEdvG$|mPU^}A9Cwsw_kipLZc9{%u7YyBJY(9Y6Ac)`VA4mKktM`Im zB4M0X5{0Dtys;!nA%oaG`x=|A^C!G#}0wt5q~cX012M#bxdgq zJ~d6?3GGJV)!F##+U?96r5Kn9*e3oKPKhksMXIs4X3|*7qp&}wlF#~L=i;jMlc+R^ zf{sq_Go8D%4fF8|=^iJlcYcCAhrz@YXq+{8@XR6UUz9rjqBNB8TP@ueyWOAaGC$Ys zXwdZ`hD{jLbR$=C$z<{DP?|>$rpYR8LWNwB0&33&KWCG62bCWwQb2)oA0~<>BX1Di zzwbDga$X6G60fvwUZ)+68{m0N?H-o5M6izvuWSG}e6O{w47W$ZIwuEFv)KWs;tv{r zYeQVwR9%YZcif*5#E4Re&bv*vt#wu^hz6j=hP13eD@0dlCc$5S!j{J;O(@LKHy(EG z5=~+8M$2lBMiRV!uV;U44qJS$k8(6a+DQggEzL;Hu1jjXOKAu$jlLpUPqxr(nICY$ zy?#H!I2cqllbQ7d>CAb(0NfFU0xuG&Qs#Pk%FYL%i&Aof%rZ-L7|9)N(DKIsNJ_Gk z|9j&euK%dycEakdUkxcAacg6?h&M5jJH@z=;?t`?Sn9})QS#xH6Cs)n6dgUE_EE71 zsY{#GjWS5&1{Wyjag*>Qowv(ID_Y6qi#{JtbFNOwz6spwhLZ1vF08r6Jk#yi^PPN_ zaN zn^xIN;KDVyqORmg+*`=WH~CJ>ao%H|SJUTB%}h)CH}cp^jIcPY!>f4d>>1(Z8)K9| zqlOa_$sJqJNud}Hd=;H3{0)ou48-IRu=k1;K$VP`TT;^DSZN#m!PPi1Wh4CqYUDyPlF) z@B`#_o!9e-cBee67@Z|KLzA5#D!WDAJ3ebEODtrP8@Pygg~fY}W0O>)FDM#49ribx z9|7${Q11z)Cg$~eBNZ_dY@H%|98e# zI;t2m-^7L3W8_iS$9$;dUNJgMMv#RFkyPtQ! zZT>X%Ef*%<>hVl)+ZqZCcs#+OKrdPU^{+(>uMO?dW6LaL%YrtEsf`HnqK4S?sm9nz z`fo#$mOPY=bA2(_mY!bNXtjf+J`i_3SuN7+iZm3}rQw+cc#+0r!;lGZ(TcQtG~nmKqE^lEIS9d8%4I98E? zdNr>eFF$OUX|OY0xO(`xw2x>?RNY&$Mw3~Gch!;)^NGCzG;=K_S5L!E)A@h_-j7uE z4sY=75pTq6gCeHBMXI#0zBFWYulfj-Pdr_mwSCj#oqX|B21rG*3J`v=z$gP-EwViLc6 z24hsSl}a8NdE8|D%GB7xug2ibWfCvwwfiBvzj%J<9e)_3I%vXx&T%c>#8z$V+N@R& zuz-HMsHOEw7u+wu8m*eBCM%5<7m?5E-@1O!gSuGN-8eN$Jo(13>+LI5XF6u0n!yC9 zqIKtx$0GyTlGA^d;69UoTH& zRE+}oFTdO4YaTKc*)IN6SXr6@x)ZTcp#;aZ2iu~csRSx}oR0tAzMK4_V~rK`_}*s`fPGT1g4F4J8@Yrp4U1T6E^K%E$i z`L)8!#B-=xf{^WRSf3MuIuPe~%Kxzge{}c#rgpM0=8v~WqN@FF)gMl^0L_jm%u$JN z9g{}VUVsKuXD}|4##r?5tjSVzgy2;Va$l!=(J?2-1*sSTV5sFbtX4F|>Y#lyR^6;V zH?c%!JBS8IA>SeK?U+p>=(;UVzyuo_&RGtj0)W+<-D0u|jrI-Jp8;a$2uO|f_Ac)& zR#oBwE~kzi8sKZq!)#ar$X-uP3Je`{0gqo|5@G01TRBrK=A|;Lhk56N<;%~G0$(Wa z#TMsP?jW!gsf%00>xH1NbwGKAkBH3npfm!;MH}k->3To_@qEpFRl-AO+{BYU&_=sP zV|D$n^?LK__$GhJa)F8BaL~gF4SarE?>Nsp+k;zpqY4768=E^V0v#hU)GBlPUQ z{6+%%b}h0U+uiSm5;mmqrWjTA929v^aDw03eLb>0Dhrq$RrEBPn;9GKFZ4}+EZlNz z;w4}RO*9>rQP)MPp#6*Puz?*G7oqx6cHy2Mt?H|bptF5vJ|O(3R9w!oHnEOxSEce^ zB#8e^H$D9>wavdBZ{gX|x1dwJlr}F=j$CWb)osuoTEB=>l+^|5krYyNpvg}z3={DO z#$t`zI`i5y0Q=Rto(h6yj?fhbVMbDkTXj6%6q=<=TM^F)splnxbWGg%K=gzi3hf^Y z^-20Z&hJgZq~tl+o*16`z0<=_j2a4jT{)o?s-?6Lm|hfjX9W7vy|P|r}`uu z0I5>y0gvULLSGR|@DYK=#|ueDL1V*4F_$Qym)(gYPjW?SllC99`4+tfP33VP(GUFY z`4nc*E3iPL>Yjc&c0Gw=u36jBnZ^N}ktA1J#pqu`mz9RwPvDkm7{ zW?Dk^MQ*%)M*bc~KJTdRrC}=vX|YcSA(<5EY7+6s*WKXu?EVVY>p-V*vHA$ac`eDGzb9=}ffzbKuH_6g(`VX) z_%REHSPif4ErYBkNeJ~(+OhQ-3M(b!I5n7A(OzIFl6BS@8a4LZNtN9F-s)TaEp<^{ z!#mWvO?9K6O0&#dNGd))L?Ack!7AUzA$-$8U&Twyua`>hc(+{VY7`gRmzkToak%y> zuo}Y-iuvVt(L64@gYJSC59a|5p3`q~`o7G!Tl;9c#FM%P)kk~pv-Go`o&mqht&D=S zLLJN3Vk$Vxfu-=iT$<4~a^f8Q;bJN67f--z**e8R=*sR8)fo+4aod?|7emKK9||s0 z0-a}6c2|`n7=+%|eiGM-RZZ%kSk{93A2>VjAA*To!g}h`WVw%lxu?KfgU9Kn{rXw2 z9tQS^=65pi!lU`6QNV)bA~iOEtTKfu104Z zeRTKJSXE75{c>b_J(otv8)qT^Dpq?u%Y=)Yi2D2dl~?AsU45=UOyMTTD+5~@g&U1F z$A8(Z-`1M5*9fC&J~Y2apWGLNkB~iU9d$-eMYTyz8dgRT2R5WybmhcbF-0LWyn!C~ z=XlHp<^7;_%2hS<%9T-xukS32D_s3(lFs#bKcCW}m6r!!X(70$zixSC4MFQ6ef%*v zUrH$0AoSm~+um`Hl$x}I1pq4uTRBlQWzL+nZZA%DQUwF^cm9EDa$kgc`cxq) z0LnQHf^(KqjZaJmTZ@sTP@@LxDbY@e(Txf`R(L=b)elwf2t_#>UV&V*^;iL5B}5 z-9lfSar3l+{XpJ8-^z(&(}calF9fQfQ6-wy~d^e@}8%*%d^!~A~f{-Y-dDUf)1G3kSB0^9`(OJjMnfU_`y~{ zlTH5m5BUDlQJ_%B+n92cP#nLqCQut}hOuMapHXnvJCY!XnYj#&g7$d`+IyU?mM;{v zJk@Phe;LIprpxZo-ng)Qny$L$NMsd*?Z&ongNo)Kzlk1R~( z#zPPfKo=VQur$*>UYOoEGsw|zcF}a1ldfvZgndL(wy9eSs&ydGsSSF=1aHX=T&yDn hZ7^Ls09_~Yz|ZtNiT{|^3sME>_H}jTJVmpo{}1jVabo}g literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menu.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menu.js new file mode 100644 index 000000000..54e81cf15 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menu.js @@ -0,0 +1,127 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + var searchBox; + if (searchEnabled) { + if (serverSide) { + searchBox='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBox='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' + '' + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBox) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBox); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBox); + $('#searchBoxPos2').show(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menudata.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menudata.js new file mode 100644 index 000000000..52ec81af1 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/menudata.js @@ -0,0 +1,27 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Home",url:"index.html"}, +{text:"API Reference",url:"group__group__board__libs.html"}]} diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_f.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_g.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.html new file mode 100644 index 000000000..65f85b5b7 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.js new file mode 100644 index 000000000..5e44e1a51 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['cy_5frslt_5fserial_5fflash_5ferr_5fbad_5fparam_0',['CY_RSLT_SERIAL_FLASH_ERR_BAD_PARAM',['../group__group__board__libs.html#ga21e3c8199504eb76df66c793488e01e8',1,'cy_serial_flash_qspi.h']]], + ['cy_5frslt_5fserial_5fflash_5ferr_5fdma_1',['CY_RSLT_SERIAL_FLASH_ERR_DMA',['../group__group__board__libs.html#ga63374cfb508c830f53f25682c183b610',1,'cy_serial_flash_qspi.h']]], + ['cy_5frslt_5fserial_5fflash_5ferr_5fqspi_5fbusy_2',['CY_RSLT_SERIAL_FLASH_ERR_QSPI_BUSY',['../group__group__board__libs.html#ga959a08da14d528096cf8ebbfb48c5da4',1,'cy_serial_flash_qspi.h']]], + ['cy_5frslt_5fserial_5fflash_5ferr_5fread_5fbusy_3',['CY_RSLT_SERIAL_FLASH_ERR_READ_BUSY',['../group__group__board__libs.html#ga41875c99fa454d69ec187e772234ce44',1,'cy_serial_flash_qspi.h']]], + ['cy_5frslt_5fserial_5fflash_5ferr_5funsupported_4',['CY_RSLT_SERIAL_FLASH_ERR_UNSUPPORTED',['../group__group__board__libs.html#gabe7c8c3af5cdc0f9640b70402f543dd7',1,'cy_serial_flash_qspi.h']]], + ['cy_5fserial_5fflash_5fget_5fsector_5fstart_5faddress_5',['cy_serial_flash_get_sector_start_address',['../group__group__board__libs.html#ga1aec27b28a9ce3205ce16e12c4d576b0',1,'cy_serial_flash_qspi.h']]], + ['cy_5fserial_5fflash_5fqspi_5fabort_5fread_6',['cy_serial_flash_qspi_abort_read',['../group__group__board__libs.html#ga49c497643b74f2e9071e27266836f45d',1,'cy_serial_flash_qspi_abort_read(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga49c497643b74f2e9071e27266836f45d',1,'cy_serial_flash_qspi_abort_read(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fdeinit_7',['cy_serial_flash_qspi_deinit',['../group__group__board__libs.html#gac4914a8bff25287d43c661d6cd68fbfd',1,'cy_serial_flash_qspi_deinit(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gac4914a8bff25287d43c661d6cd68fbfd',1,'cy_serial_flash_qspi_deinit(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fenable_5fxip_8',['cy_serial_flash_qspi_enable_xip',['../group__group__board__libs.html#ga56772d2543b7b7f2c17ed9ddb9db941e',1,'cy_serial_flash_qspi_enable_xip(bool enable): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga56772d2543b7b7f2c17ed9ddb9db941e',1,'cy_serial_flash_qspi_enable_xip(bool enable): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5ferase_9',['cy_serial_flash_qspi_erase',['../group__group__board__libs.html#ga41c8380588bc01b6a8320b23bc172649',1,'cy_serial_flash_qspi_erase(uint32_t addr, size_t length): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga41c8380588bc01b6a8320b23bc172649',1,'cy_serial_flash_qspi_erase(uint32_t addr, size_t length): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5ferase_5fsize_10',['cy_serial_flash_qspi_get_erase_size',['../group__group__board__libs.html#gacaad29bc13d3a4cd243830980b21c274',1,'cy_serial_flash_qspi_get_erase_size(uint32_t addr): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gacaad29bc13d3a4cd243830980b21c274',1,'cy_serial_flash_qspi_get_erase_size(uint32_t addr): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5fprog_5fsize_11',['cy_serial_flash_qspi_get_prog_size',['../group__group__board__libs.html#ga3b4219e6b1182c0c75704581b6cacc37',1,'cy_serial_flash_qspi_get_prog_size(uint32_t addr): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga3b4219e6b1182c0c75704581b6cacc37',1,'cy_serial_flash_qspi_get_prog_size(uint32_t addr): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5fsize_12',['cy_serial_flash_qspi_get_size',['../group__group__board__libs.html#ga7b9bff94b0c4ba30b11de9f64a0e4980',1,'cy_serial_flash_qspi_get_size(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga7b9bff94b0c4ba30b11de9f64a0e4980',1,'cy_serial_flash_qspi_get_size(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5finit_13',['cy_serial_flash_qspi_init',['../group__group__board__libs.html#gaa9c587684b8b629a0fde56e786400d82',1,'cy_serial_flash_qspi_init(const cy_stc_smif_mem_config_t *mem_config, cyhal_gpio_t io0, cyhal_gpio_t io1, cyhal_gpio_t io2, cyhal_gpio_t io3, cyhal_gpio_t io4, cyhal_gpio_t io5, cyhal_gpio_t io6, cyhal_gpio_t io7, cyhal_gpio_t sclk, cyhal_gpio_t ssel, uint32_t hz): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gaa9c587684b8b629a0fde56e786400d82',1,'cy_serial_flash_qspi_init(const cy_stc_smif_mem_config_t *mem_config, cyhal_gpio_t io0, cyhal_gpio_t io1, cyhal_gpio_t io2, cyhal_gpio_t io3, cyhal_gpio_t io4, cyhal_gpio_t io5, cyhal_gpio_t io6, cyhal_gpio_t io7, cyhal_gpio_t sclk, cyhal_gpio_t ssel, uint32_t hz): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fread_14',['cy_serial_flash_qspi_read',['../group__group__board__libs.html#ga8b700333be27d3f22dbf2b7a273e7f1e',1,'cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t *buf): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga8b700333be27d3f22dbf2b7a273e7f1e',1,'cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t *buf): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fread_5fasync_15',['cy_serial_flash_qspi_read_async',['../group__group__board__libs.html#ga869d6c8e2b93215608161fb889675b82',1,'cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t *buf, cy_serial_flash_qspi_read_complete_callback_t callback, void *callback_arg): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga869d6c8e2b93215608161fb889675b82',1,'cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t *buf, cy_serial_flash_qspi_read_complete_callback_t callback, void *callback_arg): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fread_5fcomplete_5fcallback_5ft_16',['cy_serial_flash_qspi_read_complete_callback_t',['../group__group__board__libs.html#gaa528d15ff15325aaec05e5a548856a19',1,'cy_serial_flash_qspi.h']]], + ['cy_5fserial_5fflash_5fqspi_5fset_5fdma_5finterrupt_5fpriority_17',['cy_serial_flash_qspi_set_dma_interrupt_priority',['../group__group__board__libs.html#ga181056affe774bccde023137e1e01f3a',1,'cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga181056affe774bccde023137e1e01f3a',1,'cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fset_5finterrupt_5fpriority_18',['cy_serial_flash_qspi_set_interrupt_priority',['../group__group__board__libs.html#ga818e617f0abbff49f43ee1254d7bc35c',1,'cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga818e617f0abbff49f43ee1254d7bc35c',1,'cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fthread_5fsafe_19',['CY_SERIAL_FLASH_QSPI_THREAD_SAFE',['../group__group__board__libs.html#ga93bd4d9c9082ff732c56c1a6657abc32',1,'cy_serial_flash_qspi.h']]], + ['cy_5fserial_5fflash_5fqspi_5fwrite_20',['cy_serial_flash_qspi_write',['../group__group__board__libs.html#gab7e5444e256507f0bc5d112d6741621a',1,'cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t *buf): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gab7e5444e256507f0bc5d112d6741621a',1,'cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t *buf): cy_serial_flash_qspi.c']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.html new file mode 100644 index 000000000..af53dabdc --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.js new file mode 100644 index 000000000..79f826ae9 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serial_20flash_0',['Serial Flash',['../group__group__board__libs.html',1,'(Global Namespace)'],['../index.html',1,'(Global Namespace)']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/close.svg b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/close.svg new file mode 100644 index 000000000..a933eea1a --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.html new file mode 100644 index 000000000..ce4509023 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.js new file mode 100644 index 000000000..22799bc90 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/functions_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['cy_5fserial_5fflash_5fget_5fsector_5fstart_5faddress_0',['cy_serial_flash_get_sector_start_address',['../group__group__board__libs.html#ga1aec27b28a9ce3205ce16e12c4d576b0',1,'cy_serial_flash_qspi.h']]], + ['cy_5fserial_5fflash_5fqspi_5fabort_5fread_1',['cy_serial_flash_qspi_abort_read',['../group__group__board__libs.html#ga49c497643b74f2e9071e27266836f45d',1,'cy_serial_flash_qspi_abort_read(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga49c497643b74f2e9071e27266836f45d',1,'cy_serial_flash_qspi_abort_read(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fdeinit_2',['cy_serial_flash_qspi_deinit',['../group__group__board__libs.html#gac4914a8bff25287d43c661d6cd68fbfd',1,'cy_serial_flash_qspi_deinit(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gac4914a8bff25287d43c661d6cd68fbfd',1,'cy_serial_flash_qspi_deinit(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fenable_5fxip_3',['cy_serial_flash_qspi_enable_xip',['../group__group__board__libs.html#ga56772d2543b7b7f2c17ed9ddb9db941e',1,'cy_serial_flash_qspi_enable_xip(bool enable): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga56772d2543b7b7f2c17ed9ddb9db941e',1,'cy_serial_flash_qspi_enable_xip(bool enable): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5ferase_4',['cy_serial_flash_qspi_erase',['../group__group__board__libs.html#ga41c8380588bc01b6a8320b23bc172649',1,'cy_serial_flash_qspi_erase(uint32_t addr, size_t length): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga41c8380588bc01b6a8320b23bc172649',1,'cy_serial_flash_qspi_erase(uint32_t addr, size_t length): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5ferase_5fsize_5',['cy_serial_flash_qspi_get_erase_size',['../group__group__board__libs.html#gacaad29bc13d3a4cd243830980b21c274',1,'cy_serial_flash_qspi_get_erase_size(uint32_t addr): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gacaad29bc13d3a4cd243830980b21c274',1,'cy_serial_flash_qspi_get_erase_size(uint32_t addr): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5fprog_5fsize_6',['cy_serial_flash_qspi_get_prog_size',['../group__group__board__libs.html#ga3b4219e6b1182c0c75704581b6cacc37',1,'cy_serial_flash_qspi_get_prog_size(uint32_t addr): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga3b4219e6b1182c0c75704581b6cacc37',1,'cy_serial_flash_qspi_get_prog_size(uint32_t addr): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fget_5fsize_7',['cy_serial_flash_qspi_get_size',['../group__group__board__libs.html#ga7b9bff94b0c4ba30b11de9f64a0e4980',1,'cy_serial_flash_qspi_get_size(void): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga7b9bff94b0c4ba30b11de9f64a0e4980',1,'cy_serial_flash_qspi_get_size(void): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5finit_8',['cy_serial_flash_qspi_init',['../group__group__board__libs.html#gaa9c587684b8b629a0fde56e786400d82',1,'cy_serial_flash_qspi_init(const cy_stc_smif_mem_config_t *mem_config, cyhal_gpio_t io0, cyhal_gpio_t io1, cyhal_gpio_t io2, cyhal_gpio_t io3, cyhal_gpio_t io4, cyhal_gpio_t io5, cyhal_gpio_t io6, cyhal_gpio_t io7, cyhal_gpio_t sclk, cyhal_gpio_t ssel, uint32_t hz): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gaa9c587684b8b629a0fde56e786400d82',1,'cy_serial_flash_qspi_init(const cy_stc_smif_mem_config_t *mem_config, cyhal_gpio_t io0, cyhal_gpio_t io1, cyhal_gpio_t io2, cyhal_gpio_t io3, cyhal_gpio_t io4, cyhal_gpio_t io5, cyhal_gpio_t io6, cyhal_gpio_t io7, cyhal_gpio_t sclk, cyhal_gpio_t ssel, uint32_t hz): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fread_9',['cy_serial_flash_qspi_read',['../group__group__board__libs.html#ga8b700333be27d3f22dbf2b7a273e7f1e',1,'cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t *buf): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga8b700333be27d3f22dbf2b7a273e7f1e',1,'cy_serial_flash_qspi_read(uint32_t addr, size_t length, uint8_t *buf): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fread_5fasync_10',['cy_serial_flash_qspi_read_async',['../group__group__board__libs.html#ga869d6c8e2b93215608161fb889675b82',1,'cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t *buf, cy_serial_flash_qspi_read_complete_callback_t callback, void *callback_arg): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga869d6c8e2b93215608161fb889675b82',1,'cy_serial_flash_qspi_read_async(uint32_t addr, size_t length, uint8_t *buf, cy_serial_flash_qspi_read_complete_callback_t callback, void *callback_arg): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fset_5fdma_5finterrupt_5fpriority_11',['cy_serial_flash_qspi_set_dma_interrupt_priority',['../group__group__board__libs.html#ga181056affe774bccde023137e1e01f3a',1,'cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga181056affe774bccde023137e1e01f3a',1,'cy_serial_flash_qspi_set_dma_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fset_5finterrupt_5fpriority_12',['cy_serial_flash_qspi_set_interrupt_priority',['../group__group__board__libs.html#ga818e617f0abbff49f43ee1254d7bc35c',1,'cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#ga818e617f0abbff49f43ee1254d7bc35c',1,'cy_serial_flash_qspi_set_interrupt_priority(uint8_t priority): cy_serial_flash_qspi.c']]], + ['cy_5fserial_5fflash_5fqspi_5fwrite_13',['cy_serial_flash_qspi_write',['../group__group__board__libs.html#gab7e5444e256507f0bc5d112d6741621a',1,'cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t *buf): cy_serial_flash_qspi.c'],['../group__group__board__libs.html#gab7e5444e256507f0bc5d112d6741621a',1,'cy_serial_flash_qspi_write(uint32_t addr, size_t length, const uint8_t *buf): cy_serial_flash_qspi.c']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.html new file mode 100644 index 000000000..b58dd540d --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.js new file mode 100644 index 000000000..6bd73c6ed --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serial_20flash_0',['Serial Flash',['../group__group__board__libs.html',1,'']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/mag_sel.svg b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/mag_sel.svg new file mode 100644 index 000000000..03626f64a --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/nomatches.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/nomatches.html new file mode 100644 index 000000000..2b9360b6b --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.html new file mode 100644 index 000000000..34ca499f4 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.js new file mode 100644 index 000000000..4dc5ed7e0 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serial_20flash_0',['Serial Flash',['../index.html',1,'']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.css b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.css new file mode 100644 index 000000000..648a792f5 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.css @@ -0,0 +1,263 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 19px; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.js new file mode 100644 index 000000000..ac8055d13 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search.js @@ -0,0 +1,794 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var width = 400; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search_r.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/searchdata.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/searchdata.js new file mode 100644 index 000000000..fbb78f729 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/searchdata.js @@ -0,0 +1,27 @@ +var indexSectionsWithContent = +{ + 0: "cs", + 1: "c", + 2: "c", + 3: "s", + 4: "s" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "functions", + 2: "typedefs", + 3: "groups", + 4: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Functions", + 2: "Typedefs", + 3: "Modules", + 4: "Pages" +}; + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.html b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.html new file mode 100644 index 000000000..2f66dc427 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.js b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.js new file mode 100644 index 000000000..baa53b090 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cy_5fserial_5fflash_5fqspi_5fread_5fcomplete_5fcallback_5ft_0',['cy_serial_flash_qspi_read_complete_callback_t',['../group__group__board__libs.html#gaa528d15ff15325aaec05e5a548856a19',1,'cy_serial_flash_qspi.h']]] +]; diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/splitbar.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_off.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_on.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_a.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_b.png b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tabs.css b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tabs.css new file mode 100644 index 000000000..00d1c6024 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/docs/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/version.xml b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/version.xml new file mode 100644 index 000000000..23e887b56 --- /dev/null +++ b/bsp/cypress/libraries/IFX_PSOC6_HAL/mtb_shared/serial-flash/version.xml @@ -0,0 +1 @@ +1.3.0.27308 diff --git a/bsp/cypress/psoc6-cy8cproto-4343w/.config b/bsp/cypress/psoc6-cy8cproto-4343w/.config index 75cfea590..705e15e76 100644 --- a/bsp/cypress/psoc6-cy8cproto-4343w/.config +++ b/bsp/cypress/psoc6-cy8cproto-4343w/.config @@ -80,7 +80,7 @@ CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_CONSOLE_DEVICE_NAME="uart5" CONFIG_RT_VER_NUM=0x40101 CONFIG_ARCH_ARM=y CONFIG_RT_USING_CPU_FFS=y @@ -138,7 +138,10 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_CAN is not set # CONFIG_RT_USING_HWTIMER is not set # CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_I2C=y +# CONFIG_RT_I2C_DEBUG is not set +CONFIG_RT_USING_I2C_BITOPS=y +CONFIG_RT_I2C_BITOPS_DEBUG=y # CONFIG_RT_USING_PHY is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set @@ -152,7 +155,8 @@ CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set +CONFIG_RT_USING_SENSOR=y +CONFIG_RT_USING_SENSOR_CMD=y # CONFIG_RT_USING_TOUCH is not set # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set @@ -174,7 +178,15 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # # POSIX (Portable Operating System Interface) layer # -# CONFIG_RT_USING_POSIX_FS is not set +CONFIG_RT_USING_POSIX_FS=y +# CONFIG_RT_USING_POSIX_DEVIO is not set +# CONFIG_RT_USING_POSIX_STDIO is not set +# CONFIG_RT_USING_POSIX_POLL is not set +# CONFIG_RT_USING_POSIX_SELECT is not set +# CONFIG_RT_USING_POSIX_SOCKET is not set +# CONFIG_RT_USING_POSIX_TERMIOS is not set +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_POSIX_MMAN is not set # CONFIG_RT_USING_POSIX_DELAY is not set # CONFIG_RT_USING_POSIX_CLOCK is not set # CONFIG_RT_USING_POSIX_TIMER is not set @@ -333,6 +345,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # CONFIG_PKG_USING_RAPIDJSON is not set # CONFIG_PKG_USING_JSMN is not set # CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set # # XML: Extensible Markup Language @@ -508,10 +521,72 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 # # peripheral libraries and drivers # -# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +CONFIG_PKG_USING_SENSORS_DRIVERS=y +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +CONFIG_PKG_USING_MPU6XXX=y +CONFIG_PKG_MPU6XXX_PATH="/packages/peripherals/sensors/mpu6xxx" +# CONFIG_PKG_USING_MPU6XXX_V001 is not set +# CONFIG_PKG_USING_MPU6XXX_V100 is not set +# CONFIG_PKG_USING_MPU6XXX_V110 is not set +CONFIG_PKG_USING_MPU6XXX_LATEST_VERSION=y +CONFIG_PKG_MPU6XXX_VER="latest" +CONFIG_PKG_USING_MPU6XXX_ACCE=y +CONFIG_PKG_USING_MPU6XXX_GYRO=y +CONFIG_PKG_USING_MPU6XXX_MAG=y +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_AS7341 is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ICM20608 is not set @@ -678,8 +753,19 @@ CONFIG_BSP_USING_USB_TO_USART=y # CONFIG_BSP_USING_GPIO=y CONFIG_BSP_USING_UART=y -CONFIG_BSP_USING_UART1=y +CONFIG_BSP_USING_UART5=y +CONFIG_BSP_USING_UART2=y # CONFIG_BSP_USING_ADC is not set +# CONFIG_BSP_USING_QSPI_FLASH is not set +CONFIG_BSP_USING_HW_I2C=y +CONFIG_BSP_USING_HW_I2C1=y + +# +# Notice: P6_0 --> 48; P6_1 --> 49 +# +CONFIG_BSP_I2C1_SCL_PIN=48 +CONFIG_BSP_I2C1_SDA_PIN=49 +# CONFIG_BSP_USING_I2C is not set # # Board extended module Drivers diff --git a/bsp/cypress/psoc6-cy8cproto-4343w/applications/main.c b/bsp/cypress/psoc6-cy8cproto-4343w/applications/main.c index 4d25fe61d..e3e21c2ec 100644 --- a/bsp/cypress/psoc6-cy8cproto-4343w/applications/main.c +++ b/bsp/cypress/psoc6-cy8cproto-4343w/applications/main.c @@ -21,9 +21,9 @@ int main(void) for (;;) { - rt_pin_write(CYBSP_USER_LED, PIN_HIGH); - rt_thread_mdelay(1000); - rt_pin_write(CYBSP_USER_LED, PIN_LOW); - rt_thread_mdelay(1000); + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); } } diff --git a/bsp/cypress/psoc6-cy8cproto-4343w/board/Kconfig b/bsp/cypress/psoc6-cy8cproto-4343w/board/Kconfig index 75ccf587c..f204a244c 100644 --- a/bsp/cypress/psoc6-cy8cproto-4343w/board/Kconfig +++ b/bsp/cypress/psoc6-cy8cproto-4343w/board/Kconfig @@ -10,9 +10,9 @@ config SOC_IFX_PSOC6_43012 menu "Onboard Peripheral Drivers" config BSP_USING_USB_TO_USART - bool "Enable USB TO USART (uart1)" + bool "Enable USB TO USART (uart5)" select BSP_USING_UART - select BSP_USING_UART1 + select BSP_USING_UART5 default y endmenu @@ -29,9 +29,12 @@ menu "On-chip Peripheral Drivers" default y select RT_USING_SERIAL if BSP_USING_UART - config BSP_USING_UART1 - bool "Enable UART1" + config BSP_USING_UART5 + bool "Enable UART5" default y + config BSP_USING_UART2 + bool "Enable UART2" + default n endif menuconfig BSP_USING_ADC @@ -43,6 +46,58 @@ menu "On-chip Peripheral Drivers" bool "Enable ADC1" default n endif + + config BSP_USING_QSPI_FLASH + bool "Enable QSPI BUS" + select RT_USING_QSPI + select RT_USING_SFUD + select RT_SFUD_USING_QSPI + default n + + menuconfig BSP_USING_HW_I2C + bool "Enable Hardware I2C Bus" + default n + select RT_USING_I2C + select RT_USING_PIN + if BSP_USING_HW_I2C + config BSP_USING_HW_I2C1 + bool "Enable I2C1 Bus (User I2C)" + default n + if BSP_USING_HW_I2C1 + comment "Notice: P6_0 --> 48; P6_1 --> 49" + config BSP_I2C1_SCL_PIN + int "i2c1 SCL pin number" + range 1 113 + default 48 + config BSP_I2C1_SDA_PIN + int "i2c1 SDA pin number" + range 1 113 + default 49 + endif + endif + + menuconfig BSP_USING_I2C + bool "Enable I2C Bus" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C + config BSP_USING_I2C1 + bool "Enable I2C1 Bus (User I2C)" + default n + if BSP_USING_I2C1 + comment "Notice: P13_1 --> 105; P13_2 --> 106" + config BSP_I2C1_SCL_PIN + int "i2c1 SCL pin number" + range 1 113 + default 105 + config BSP_I2C1_SDA_PIN + int "i2c1 SDA pin number" + range 1 113 + default 106 + endif + endif endmenu menu "Board extended module Drivers" diff --git a/bsp/cypress/psoc6-cy8cproto-4343w/rtconfig.py b/bsp/cypress/psoc6-cy8cproto-4343w/rtconfig.py index 747fd3fe6..37ee59f9b 100644 --- a/bsp/cypress/psoc6-cy8cproto-4343w/rtconfig.py +++ b/bsp/cypress/psoc6-cy8cproto-4343w/rtconfig.py @@ -19,7 +19,7 @@ if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' EXEC_PATH = r'C:\Users\XXYYZZ' elif CROSS_TOOL == 'keil': - PLATFORM = 'armcc' + PLATFORM = 'armclang' EXEC_PATH = r'C:/Keil_v5' elif CROSS_TOOL == 'iar': PLATFORM = 'iar' -- GitLab