diff --git a/CMakeLists.txt b/CMakeLists.txt index e2d1bff..0ed12a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,10 @@ add_executable(${MCUX_SDK_PROJECT_NAME} "${ProjDirPath}/source/freertos_hello.c" "${ProjDirPath}/source/usb_device_interface_0_cic_vcom.c" "${ProjDirPath}/source/usb_device_interface_0_cic_vcom.h" + "${ProjDirPath}/source/usb_device_interface_2_cic_vcom.c" + "${ProjDirPath}/source/usb_device_interface_2_cic_vcom.h" + "${ProjDirPath}/source/usb_device_interface_4_cic_vcom.c" + "${ProjDirPath}/source/usb_device_interface_4_cic_vcom.h" "${ProjDirPath}/source/generated/usb_device_composite.c" "${ProjDirPath}/source/generated/usb_device_composite.h" "${ProjDirPath}/source/generated/usb_device_descriptor.c" diff --git a/board/clock_config.c.bak b/board/clock_config.c.bak deleted file mode 100644 index 4445ac9..0000000 --- a/board/clock_config.c.bak +++ /dev/null @@ -1,490 +0,0 @@ -/* - * How to setup clock using clock driver functions: - * - * 1. Call CLOCK_InitXXXPLL() to configure corresponding PLL clock. - * - * 2. Call CLOCK_InitXXXpfd() to configure corresponding PLL pfd clock. - * - * 3. Call CLOCK_SetMux() to configure corresponding clock source for target clock out. - * - * 4. Call CLOCK_SetDiv() to configure corresponding clock divider for target clock out. - * - * 5. Call CLOCK_SetXtalFreq() to set XTAL frequency based on board settings. - * - */ - -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -!!GlobalInfo -product: Clocks v7.0 -processor: MIMXRT1052xxxxB -package_id: MIMXRT1052DVL6B -mcu_data: ksdk2_0 -processor_version: 9.0.1 -board: IMXRT1050-EVKB - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ - -#include "clock_config.h" -#include "fsl_iomuxc.h" - -/******************************************************************************* - * Definitions - ******************************************************************************/ - -/******************************************************************************* - * Variables - ******************************************************************************/ -/* System clock frequency. */ -extern uint32_t SystemCoreClock; - -/******************************************************************************* - ************************ BOARD_InitBootClocks function ************************ - ******************************************************************************/ -void BOARD_InitBootClocks(void) -{ - BOARD_BootClockRUN(); -} - -/******************************************************************************* - ********************** Configuration BOARD_BootClockRUN *********************** - ******************************************************************************/ -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -!!Configuration -name: BOARD_BootClockRUN -called_from_default_init: true -outputs: -- {id: AHB_CLK_ROOT.outFreq, value: 600 MHz} -- {id: CAN_CLK_ROOT.outFreq, value: 40 MHz} -- {id: CKIL_SYNC_CLK_ROOT.outFreq, value: 32.768 kHz} -- {id: CLK_1M.outFreq, value: 1 MHz} -- {id: CLK_24M.outFreq, value: 24 MHz} -- {id: CSI_CLK_ROOT.outFreq, value: 12 MHz} -- {id: ENET1_TX_CLK.outFreq, value: 2.4 MHz} -- {id: ENET_125M_CLK.outFreq, value: 2.4 MHz} -- {id: ENET_25M_REF_CLK.outFreq, value: 1.2 MHz} -- {id: FLEXIO1_CLK_ROOT.outFreq, value: 30 MHz} -- {id: FLEXIO2_CLK_ROOT.outFreq, value: 30 MHz} -- {id: FLEXSPI_CLK_ROOT.outFreq, value: 160 MHz} -- {id: GPT1_ipg_clk_highfreq.outFreq, value: 75 MHz} -- {id: GPT2_ipg_clk_highfreq.outFreq, value: 75 MHz} -- {id: IPG_CLK_ROOT.outFreq, value: 150 MHz} -- {id: LCDIF_CLK_ROOT.outFreq, value: 67.5 MHz} -- {id: LPI2C_CLK_ROOT.outFreq, value: 60 MHz} -- {id: LPSPI_CLK_ROOT.outFreq, value: 105.6 MHz} -- {id: LVDS1_CLK.outFreq, value: 1.2 GHz} -- {id: MQS_MCLK.outFreq, value: 1080/17 MHz} -- {id: PERCLK_CLK_ROOT.outFreq, value: 75 MHz} -- {id: PLL7_MAIN_CLK.outFreq, value: 24 MHz} -- {id: SAI1_CLK_ROOT.outFreq, value: 1080/17 MHz} -- {id: SAI1_MCLK1.outFreq, value: 1080/17 MHz} -- {id: SAI1_MCLK2.outFreq, value: 1080/17 MHz} -- {id: SAI1_MCLK3.outFreq, value: 30 MHz} -- {id: SAI2_CLK_ROOT.outFreq, value: 1080/17 MHz} -- {id: SAI2_MCLK1.outFreq, value: 1080/17 MHz} -- {id: SAI2_MCLK3.outFreq, value: 30 MHz} -- {id: SAI3_CLK_ROOT.outFreq, value: 1080/17 MHz} -- {id: SAI3_MCLK1.outFreq, value: 1080/17 MHz} -- {id: SAI3_MCLK3.outFreq, value: 30 MHz} -- {id: SEMC_CLK_ROOT.outFreq, value: 75 MHz} -- {id: SPDIF0_CLK_ROOT.outFreq, value: 30 MHz} -- {id: TRACE_CLK_ROOT.outFreq, value: 132 MHz} -- {id: UART_CLK_ROOT.outFreq, value: 80 MHz} -- {id: USDHC1_CLK_ROOT.outFreq, value: 198 MHz} -- {id: USDHC2_CLK_ROOT.outFreq, value: 198 MHz} -settings: -- {id: CCM.AHB_PODF.scale, value: '1', locked: true} -- {id: CCM.ARM_PODF.scale, value: '2', locked: true} -- {id: CCM.FLEXSPI_PODF.scale, value: '3', locked: true} -- {id: CCM.FLEXSPI_SEL.sel, value: CCM.PLL3_SW_CLK_SEL} -- {id: CCM.LPSPI_PODF.scale, value: '5', locked: true} -- {id: CCM.PERCLK_PODF.scale, value: '2', locked: true} -- {id: CCM.SEMC_PODF.scale, value: '8'} -- {id: CCM.TRACE_CLK_SEL.sel, value: CCM_ANALOG.PLL2_MAIN_CLK} -- {id: CCM.TRACE_PODF.scale, value: '4', locked: true} -- {id: CCM_ANALOG.PLL1_BYPASS.sel, value: CCM_ANALOG.PLL1} -- {id: CCM_ANALOG.PLL1_PREDIV.scale, value: '1', locked: true} -- {id: CCM_ANALOG.PLL1_VDIV.scale, value: '50', locked: true} -- {id: CCM_ANALOG.PLL2.denom, value: '1', locked: true} -- {id: CCM_ANALOG.PLL2.num, value: '0', locked: true} -- {id: CCM_ANALOG.PLL2_BYPASS.sel, value: CCM_ANALOG.PLL2_OUT_CLK} -- {id: CCM_ANALOG.PLL2_PFD0_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD0} -- {id: CCM_ANALOG.PLL2_PFD1_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD1} -- {id: CCM_ANALOG.PLL2_PFD2_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD2} -- {id: CCM_ANALOG.PLL2_PFD3_BYPASS.sel, value: CCM_ANALOG.PLL2_PFD3} -- {id: CCM_ANALOG.PLL3_BYPASS.sel, value: CCM_ANALOG.PLL3} -- {id: CCM_ANALOG.PLL3_PFD0_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD0} -- {id: CCM_ANALOG.PLL3_PFD0_DIV.scale, value: '33', locked: true} -- {id: CCM_ANALOG.PLL3_PFD0_MUL.scale, value: '18', locked: true} -- {id: CCM_ANALOG.PLL3_PFD1_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD1} -- {id: CCM_ANALOG.PLL3_PFD2_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD2} -- {id: CCM_ANALOG.PLL3_PFD3_BYPASS.sel, value: CCM_ANALOG.PLL3_PFD3} -- {id: CCM_ANALOG.PLL4.denom, value: '50'} -- {id: CCM_ANALOG.PLL4.div, value: '47'} -- {id: CCM_ANALOG.PLL5.denom, value: '1'} -- {id: CCM_ANALOG.PLL5.div, value: '31', locked: true} -- {id: CCM_ANALOG.PLL5.num, value: '0'} -- {id: CCM_ANALOG.PLL5_BYPASS.sel, value: CCM_ANALOG.PLL5_POST_DIV} -- {id: CCM_ANALOG.PLL5_POST_DIV.scale, value: '2'} -- {id: CCM_ANALOG.VIDEO_DIV.scale, value: '4'} -- {id: CCM_ANALOG_PLL_ENET_POWERDOWN_CFG, value: 'Yes'} -- {id: CCM_ANALOG_PLL_USB1_POWER_CFG, value: 'Yes'} -- {id: CCM_ANALOG_PLL_VIDEO_POWERDOWN_CFG, value: 'No'} -sources: -- {id: XTALOSC24M.RTC_OSC.outFreq, value: 32.768 kHz, enabled: true} - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ - -/******************************************************************************* - * Variables for BOARD_BootClockRUN configuration - ******************************************************************************/ -const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN = - { - .loopDivider = 100, /* PLL loop divider, Fout = Fin * 50 */ - .src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */ - }; -const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN = - { - .loopDivider = 1, /* PLL loop divider, Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator ) */ - .numerator = 0, /* 30 bit numerator of fractional loop divider */ - .denominator = 1, /* 30 bit denominator of fractional loop divider */ - .src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */ - }; -const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN = - { - .loopDivider = 0, /* PLL loop divider, Fout = Fin * 20 */ - .src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */ - }; -const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN = - { - .loopDivider = 31, /* PLL loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */ - .postDivider = 8, /* Divider after PLL */ - .numerator = 0, /* 30 bit numerator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */ - .denominator = 1, /* 30 bit denominator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */ - .src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */ - }; -/******************************************************************************* - * Code for BOARD_BootClockRUN configuration - ******************************************************************************/ -void BOARD_BootClockRUN(void) -{ - /* Init RTC OSC clock frequency. */ - CLOCK_SetRtcXtalFreq(32768U); - /* Enable 1MHz clock output. */ - XTALOSC24M->OSC_CONFIG2 |= XTALOSC24M_OSC_CONFIG2_ENABLE_1M_MASK; - /* Use free 1MHz clock output. */ - XTALOSC24M->OSC_CONFIG2 &= ~XTALOSC24M_OSC_CONFIG2_MUX_1M_MASK; - /* Set XTAL 24MHz clock frequency. */ - CLOCK_SetXtalFreq(24000000U); - /* Enable XTAL 24MHz clock source. */ - CLOCK_InitExternalClk(0); - /* Enable internal RC. */ - CLOCK_InitRcOsc24M(); - /* Switch clock source to external OSC. */ - CLOCK_SwitchOsc(kCLOCK_XtalOsc); - /* Set Oscillator ready counter value. */ - CCM->CCR = (CCM->CCR & (~CCM_CCR_OSCNT_MASK)) | CCM_CCR_OSCNT(127); - /* Setting PeriphClk2Mux and PeriphMux to provide stable clock before PLLs are initialed */ - CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 1); /* Set PERIPH_CLK2 MUX to OSC */ - CLOCK_SetMux(kCLOCK_PeriphMux, 1); /* Set PERIPH_CLK MUX to PERIPH_CLK2 */ - /* Setting the VDD_SOC to 1.275V. It is necessary to config AHB to 600Mhz. */ - DCDC->REG3 = (DCDC->REG3 & (~DCDC_REG3_TRG_MASK)) | DCDC_REG3_TRG(0x13); - /* Waiting for DCDC_STS_DC_OK bit is asserted */ - while (DCDC_REG0_STS_DC_OK_MASK != (DCDC_REG0_STS_DC_OK_MASK & DCDC->REG0)) - { - } - /* Set AHB_PODF. */ - CLOCK_SetDiv(kCLOCK_AhbDiv, 0); - /* Disable IPG clock gate. */ - CLOCK_DisableClock(kCLOCK_Adc1); - CLOCK_DisableClock(kCLOCK_Adc2); - CLOCK_DisableClock(kCLOCK_Xbar1); - CLOCK_DisableClock(kCLOCK_Xbar2); - CLOCK_DisableClock(kCLOCK_Xbar3); - /* Set IPG_PODF. */ - CLOCK_SetDiv(kCLOCK_IpgDiv, 3); - /* Set ARM_PODF. */ - CLOCK_SetDiv(kCLOCK_ArmDiv, 1); - /* Set PERIPH_CLK2_PODF. */ - CLOCK_SetDiv(kCLOCK_PeriphClk2Div, 0); - /* Disable PERCLK clock gate. */ - CLOCK_DisableClock(kCLOCK_Gpt1); - CLOCK_DisableClock(kCLOCK_Gpt1S); - CLOCK_DisableClock(kCLOCK_Gpt2); - CLOCK_DisableClock(kCLOCK_Gpt2S); - CLOCK_DisableClock(kCLOCK_Pit); - /* Set PERCLK_PODF. */ - CLOCK_SetDiv(kCLOCK_PerclkDiv, 1); - /* Disable USDHC1 clock gate. */ - CLOCK_DisableClock(kCLOCK_Usdhc1); - /* Set USDHC1_PODF. */ - CLOCK_SetDiv(kCLOCK_Usdhc1Div, 1); - /* Set Usdhc1 clock source. */ - CLOCK_SetMux(kCLOCK_Usdhc1Mux, 0); - /* Disable USDHC2 clock gate. */ - CLOCK_DisableClock(kCLOCK_Usdhc2); - /* Set USDHC2_PODF. */ - CLOCK_SetDiv(kCLOCK_Usdhc2Div, 1); - /* Set Usdhc2 clock source. */ - CLOCK_SetMux(kCLOCK_Usdhc2Mux, 0); - /* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd. - * With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged. - * Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/ -#ifndef SKIP_SYSCLK_INIT - /* Disable Semc clock gate. */ - CLOCK_DisableClock(kCLOCK_Semc); - /* Set SEMC_PODF. */ - CLOCK_SetDiv(kCLOCK_SemcDiv, 7); - /* Set Semc alt clock source. */ - CLOCK_SetMux(kCLOCK_SemcAltMux, 0); - /* Set Semc clock source. */ - CLOCK_SetMux(kCLOCK_SemcMux, 0); -#endif - /* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd. - * With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged. - * Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/ -#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1)) - /* Disable Flexspi clock gate. */ - CLOCK_DisableClock(kCLOCK_FlexSpi); - /* Set FLEXSPI_PODF. */ - CLOCK_SetDiv(kCLOCK_FlexspiDiv, 2); - /* Set Flexspi clock source. */ - CLOCK_SetMux(kCLOCK_FlexspiMux, 1); -#endif - /* Disable CSI clock gate. */ - CLOCK_DisableClock(kCLOCK_Csi); - /* Set CSI_PODF. */ - CLOCK_SetDiv(kCLOCK_CsiDiv, 1); - /* Set Csi clock source. */ - CLOCK_SetMux(kCLOCK_CsiMux, 0); - /* Disable LPSPI clock gate. */ - CLOCK_DisableClock(kCLOCK_Lpspi1); - CLOCK_DisableClock(kCLOCK_Lpspi2); - CLOCK_DisableClock(kCLOCK_Lpspi3); - CLOCK_DisableClock(kCLOCK_Lpspi4); - /* Set LPSPI_PODF. */ - CLOCK_SetDiv(kCLOCK_LpspiDiv, 4); - /* Set Lpspi clock source. */ - CLOCK_SetMux(kCLOCK_LpspiMux, 2); - /* Disable TRACE clock gate. */ - CLOCK_DisableClock(kCLOCK_Trace); - /* Set TRACE_PODF. */ - CLOCK_SetDiv(kCLOCK_TraceDiv, 3); - /* Set Trace clock source. */ - CLOCK_SetMux(kCLOCK_TraceMux, 0); - /* Disable SAI1 clock gate. */ - CLOCK_DisableClock(kCLOCK_Sai1); - /* Set SAI1_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Sai1PreDiv, 3); - /* Set SAI1_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Sai1Div, 1); - /* Set Sai1 clock source. */ - CLOCK_SetMux(kCLOCK_Sai1Mux, 0); - /* Disable SAI2 clock gate. */ - CLOCK_DisableClock(kCLOCK_Sai2); - /* Set SAI2_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Sai2PreDiv, 3); - /* Set SAI2_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Sai2Div, 1); - /* Set Sai2 clock source. */ - CLOCK_SetMux(kCLOCK_Sai2Mux, 0); - /* Disable SAI3 clock gate. */ - CLOCK_DisableClock(kCLOCK_Sai3); - /* Set SAI3_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Sai3PreDiv, 3); - /* Set SAI3_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Sai3Div, 1); - /* Set Sai3 clock source. */ - CLOCK_SetMux(kCLOCK_Sai3Mux, 0); - /* Disable Lpi2c clock gate. */ - CLOCK_DisableClock(kCLOCK_Lpi2c1); - CLOCK_DisableClock(kCLOCK_Lpi2c2); - CLOCK_DisableClock(kCLOCK_Lpi2c3); - /* Set LPI2C_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Lpi2cDiv, 0); - /* Set Lpi2c clock source. */ - CLOCK_SetMux(kCLOCK_Lpi2cMux, 0); - /* Disable CAN clock gate. */ - CLOCK_DisableClock(kCLOCK_Can1); - CLOCK_DisableClock(kCLOCK_Can2); - CLOCK_DisableClock(kCLOCK_Can1S); - CLOCK_DisableClock(kCLOCK_Can2S); - /* Set CAN_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_CanDiv, 1); - /* Set Can clock source. */ - CLOCK_SetMux(kCLOCK_CanMux, 2); - /* Disable UART clock gate. */ - CLOCK_DisableClock(kCLOCK_Lpuart1); - CLOCK_DisableClock(kCLOCK_Lpuart2); - CLOCK_DisableClock(kCLOCK_Lpuart3); - CLOCK_DisableClock(kCLOCK_Lpuart4); - CLOCK_DisableClock(kCLOCK_Lpuart5); - CLOCK_DisableClock(kCLOCK_Lpuart6); - CLOCK_DisableClock(kCLOCK_Lpuart7); - CLOCK_DisableClock(kCLOCK_Lpuart8); - /* Set UART_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_UartDiv, 0); - /* Set Uart clock source. */ - CLOCK_SetMux(kCLOCK_UartMux, 0); - /* Disable LCDIF clock gate. */ - CLOCK_DisableClock(kCLOCK_LcdPixel); - /* Set LCDIF_PRED. */ - CLOCK_SetDiv(kCLOCK_LcdifPreDiv, 1); - /* Set LCDIF_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_LcdifDiv, 3); - /* Set Lcdif pre clock source. */ - CLOCK_SetMux(kCLOCK_LcdifPreMux, 5); - /* Disable SPDIF clock gate. */ - CLOCK_DisableClock(kCLOCK_Spdif); - /* Set SPDIF0_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Spdif0PreDiv, 1); - /* Set SPDIF0_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Spdif0Div, 7); - /* Set Spdif clock source. */ - CLOCK_SetMux(kCLOCK_SpdifMux, 3); - /* Disable Flexio1 clock gate. */ - CLOCK_DisableClock(kCLOCK_Flexio1); - /* Set FLEXIO1_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Flexio1PreDiv, 1); - /* Set FLEXIO1_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Flexio1Div, 7); - /* Set Flexio1 clock source. */ - CLOCK_SetMux(kCLOCK_Flexio1Mux, 3); - /* Disable Flexio2 clock gate. */ - CLOCK_DisableClock(kCLOCK_Flexio2); - /* Set FLEXIO2_CLK_PRED. */ - CLOCK_SetDiv(kCLOCK_Flexio2PreDiv, 1); - /* Set FLEXIO2_CLK_PODF. */ - CLOCK_SetDiv(kCLOCK_Flexio2Div, 7); - /* Set Flexio2 clock source. */ - CLOCK_SetMux(kCLOCK_Flexio2Mux, 3); - /* Set Pll3 sw clock source. */ - CLOCK_SetMux(kCLOCK_Pll3SwMux, 0); - /* Init ARM PLL. */ - CLOCK_InitArmPll(&armPllConfig_BOARD_BootClockRUN); - /* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd. - * With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged. - * Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/ -#ifndef SKIP_SYSCLK_INIT -#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1) - #warning "SKIP_SYSCLK_INIT should be defined to keep system pll (selected to be SEMC source clock in SDK projects) unchanged." -#endif - /* Init System PLL. */ - CLOCK_InitSysPll(&sysPllConfig_BOARD_BootClockRUN); - /* Init System pfd0. */ - CLOCK_InitSysPfd(kCLOCK_Pfd0, 27); - /* Init System pfd1. */ - CLOCK_InitSysPfd(kCLOCK_Pfd1, 16); - /* Init System pfd2. */ - CLOCK_InitSysPfd(kCLOCK_Pfd2, 24); - /* Init System pfd3. */ - CLOCK_InitSysPfd(kCLOCK_Pfd3, 16); - /* Disable pfd offset. */ - CCM_ANALOG->PLL_SYS &= ~CCM_ANALOG_PLL_SYS_PFD_OFFSET_EN_MASK; -#endif - /* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd. - * With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged. - * Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/ -#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1)) - /* Init Usb1 PLL. */ - CLOCK_InitUsb1Pll(&usb1PllConfig_BOARD_BootClockRUN); - /* Init Usb1 pfd0. */ - CLOCK_InitUsb1Pfd(kCLOCK_Pfd0, 33); - /* Init Usb1 pfd1. */ - CLOCK_InitUsb1Pfd(kCLOCK_Pfd1, 16); - /* Init Usb1 pfd2. */ - CLOCK_InitUsb1Pfd(kCLOCK_Pfd2, 17); - /* Init Usb1 pfd3. */ - CLOCK_InitUsb1Pfd(kCLOCK_Pfd3, 19); - /* Disable Usb1 PLL output for USBPHY1. */ - CCM_ANALOG->PLL_USB1 &= ~CCM_ANALOG_PLL_USB1_EN_USB_CLKS_MASK; -#endif - /* DeInit Audio PLL. */ - CLOCK_DeinitAudioPll(); - /* Bypass Audio PLL. */ - CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllAudio, 1); - /* Set divider for Audio PLL. */ - CCM_ANALOG->MISC2 &= ~CCM_ANALOG_MISC2_AUDIO_DIV_LSB_MASK; - CCM_ANALOG->MISC2 &= ~CCM_ANALOG_MISC2_AUDIO_DIV_MSB_MASK; - /* Enable Audio PLL output. */ - CCM_ANALOG->PLL_AUDIO |= CCM_ANALOG_PLL_AUDIO_ENABLE_MASK; - /* Init Video PLL. */ - uint32_t pllVideo; - /* Disable Video PLL output before initial Video PLL. */ - CCM_ANALOG->PLL_VIDEO &= ~CCM_ANALOG_PLL_VIDEO_ENABLE_MASK; - /* Bypass PLL first */ - CCM_ANALOG->PLL_VIDEO = (CCM_ANALOG->PLL_VIDEO & (~CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC_MASK)) | - CCM_ANALOG_PLL_VIDEO_BYPASS_MASK | CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC(0); - CCM_ANALOG->PLL_VIDEO_NUM = CCM_ANALOG_PLL_VIDEO_NUM_A(0); - CCM_ANALOG->PLL_VIDEO_DENOM = CCM_ANALOG_PLL_VIDEO_DENOM_B(1); - pllVideo = (CCM_ANALOG->PLL_VIDEO & (~(CCM_ANALOG_PLL_VIDEO_DIV_SELECT_MASK | CCM_ANALOG_PLL_VIDEO_POWERDOWN_MASK))) | - CCM_ANALOG_PLL_VIDEO_ENABLE_MASK |CCM_ANALOG_PLL_VIDEO_DIV_SELECT(31); - pllVideo |= CCM_ANALOG_PLL_VIDEO_POST_DIV_SELECT(1); - CCM_ANALOG->MISC2 = (CCM_ANALOG->MISC2 & (~CCM_ANALOG_MISC2_VIDEO_DIV_MASK)) | CCM_ANALOG_MISC2_VIDEO_DIV(3); - CCM_ANALOG->PLL_VIDEO = pllVideo; - while ((CCM_ANALOG->PLL_VIDEO & CCM_ANALOG_PLL_VIDEO_LOCK_MASK) == 0) - { - } - /* Disable pfd offset. */ - CCM_ANALOG->PLL_VIDEO &= ~CCM_ANALOG_PLL_VIDEO_PFD_OFFSET_EN_MASK; - /* Disable bypass for Video PLL. */ - CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllVideo, 0); - /* DeInit Enet PLL. */ - CLOCK_DeinitEnetPll(); - /* Bypass Enet PLL. */ - CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllEnet, 1); - /* Set Enet output divider. */ - CCM_ANALOG->PLL_ENET = (CCM_ANALOG->PLL_ENET & (~CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK)) | CCM_ANALOG_PLL_ENET_DIV_SELECT(1); - /* Enable Enet output. */ - CCM_ANALOG->PLL_ENET |= CCM_ANALOG_PLL_ENET_ENABLE_MASK; - /* Enable Enet25M output. */ - CCM_ANALOG->PLL_ENET |= CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN_MASK; - /* DeInit Usb2 PLL. */ - CLOCK_DeinitUsb2Pll(); - /* Bypass Usb2 PLL. */ - CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllUsb2, 1); - /* Enable Usb2 PLL output. */ - CCM_ANALOG->PLL_USB2 |= CCM_ANALOG_PLL_USB2_ENABLE_MASK; - /* Set preperiph clock source. */ - CLOCK_SetMux(kCLOCK_PrePeriphMux, 3); - /* Set periph clock source. */ - CLOCK_SetMux(kCLOCK_PeriphMux, 0); - /* Set periph clock2 clock source. */ - CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 0); - /* Set per clock source. */ - CLOCK_SetMux(kCLOCK_PerclkMux, 0); - /* Set lvds1 clock source. */ - CCM_ANALOG->MISC1 = (CCM_ANALOG->MISC1 & (~CCM_ANALOG_MISC1_LVDS1_CLK_SEL_MASK)) | CCM_ANALOG_MISC1_LVDS1_CLK_SEL(0); - /* Set clock out1 divider. */ - CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO1_DIV_MASK)) | CCM_CCOSR_CLKO1_DIV(0); - /* Set clock out1 source. */ - CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO1_SEL_MASK)) | CCM_CCOSR_CLKO1_SEL(1); - /* Set clock out2 divider. */ - CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO2_DIV_MASK)) | CCM_CCOSR_CLKO2_DIV(0); - /* Set clock out2 source. */ - CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO2_SEL_MASK)) | CCM_CCOSR_CLKO2_SEL(18); - /* Set clock out1 drives clock out1. */ - CCM->CCOSR &= ~CCM_CCOSR_CLK_OUT_SEL_MASK; - /* Disable clock out1. */ - CCM->CCOSR &= ~CCM_CCOSR_CLKO1_EN_MASK; - /* Disable clock out2. */ - CCM->CCOSR &= ~CCM_CCOSR_CLKO2_EN_MASK; - /* Set SAI1 MCLK1 clock source. */ - IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk1Sel, 0); - /* Set SAI1 MCLK2 clock source. */ - IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk2Sel, 0); - /* Set SAI1 MCLK3 clock source. */ - IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI1MClk3Sel, 0); - /* Set SAI2 MCLK3 clock source. */ - IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI2MClk3Sel, 0); - /* Set SAI3 MCLK3 clock source. */ - IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI3MClk3Sel, 0); - /* Set MQS configuration. */ - IOMUXC_MQSConfig(IOMUXC_GPR,kIOMUXC_MqsPwmOverSampleRate32, 0); - /* Set ENET Tx clock source. */ - IOMUXC_EnableMode(IOMUXC_GPR, kIOMUXC_GPR_ENET1RefClkMode, false); - /* Set GPT1 High frequency reference clock source. */ - IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT1_MASK; - /* Set GPT2 High frequency reference clock source. */ - IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT2_MASK; - /* Set SystemCoreClock variable. */ - SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK; -} - diff --git a/board/clock_config.h.bak b/board/clock_config.h.bak deleted file mode 100644 index daf5873..0000000 --- a/board/clock_config.h.bak +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef _CLOCK_CONFIG_H_ -#define _CLOCK_CONFIG_H_ - -#include "fsl_common.h" - -/******************************************************************************* - * Definitions - ******************************************************************************/ -#define BOARD_XTAL0_CLK_HZ 24000000U /*!< Board xtal0 frequency in Hz */ - -#define BOARD_XTAL32K_CLK_HZ 32768U /*!< Board xtal32k frequency in Hz */ -/******************************************************************************* - ************************ BOARD_InitBootClocks function ************************ - ******************************************************************************/ - -#if defined(__cplusplus) -extern "C" { -#endif /* __cplusplus*/ - -/*! - * @brief This function executes default configuration of clocks. - * - */ -void BOARD_InitBootClocks(void); - -#if defined(__cplusplus) -} -#endif /* __cplusplus*/ - -/******************************************************************************* - ********************** Configuration BOARD_BootClockRUN *********************** - ******************************************************************************/ -/******************************************************************************* - * Definitions for BOARD_BootClockRUN configuration - ******************************************************************************/ -#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 600000000U /*!< Core clock frequency: 600000000Hz */ - -/* Clock outputs (values are in Hz): */ -#define BOARD_BOOTCLOCKRUN_AHB_CLK_ROOT 600000000UL -#define BOARD_BOOTCLOCKRUN_CAN_CLK_ROOT 40000000UL -#define BOARD_BOOTCLOCKRUN_CKIL_SYNC_CLK_ROOT 32768UL -#define BOARD_BOOTCLOCKRUN_CLKO1_CLK 0UL -#define BOARD_BOOTCLOCKRUN_CLKO2_CLK 0UL -#define BOARD_BOOTCLOCKRUN_CLK_1M 1000000UL -#define BOARD_BOOTCLOCKRUN_CLK_24M 24000000UL -#define BOARD_BOOTCLOCKRUN_CSI_CLK_ROOT 12000000UL -#define BOARD_BOOTCLOCKRUN_ENET1_TX_CLK 2400000UL -#define BOARD_BOOTCLOCKRUN_ENET_125M_CLK 2400000UL -#define BOARD_BOOTCLOCKRUN_ENET_25M_REF_CLK 1200000UL -#define BOARD_BOOTCLOCKRUN_FLEXIO1_CLK_ROOT 30000000UL -#define BOARD_BOOTCLOCKRUN_FLEXIO2_CLK_ROOT 30000000UL -#define BOARD_BOOTCLOCKRUN_FLEXSPI_CLK_ROOT 160000000UL -#define BOARD_BOOTCLOCKRUN_GPT1_IPG_CLK_HIGHFREQ 75000000UL -#define BOARD_BOOTCLOCKRUN_GPT2_IPG_CLK_HIGHFREQ 75000000UL -#define BOARD_BOOTCLOCKRUN_IPG_CLK_ROOT 150000000UL -#define BOARD_BOOTCLOCKRUN_LCDIF_CLK_ROOT 67500000UL -#define BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT 60000000UL -#define BOARD_BOOTCLOCKRUN_LPSPI_CLK_ROOT 105600000UL -#define BOARD_BOOTCLOCKRUN_LVDS1_CLK 1200000000UL -#define BOARD_BOOTCLOCKRUN_MQS_MCLK 63529411UL -#define BOARD_BOOTCLOCKRUN_PERCLK_CLK_ROOT 75000000UL -#define BOARD_BOOTCLOCKRUN_PLL7_MAIN_CLK 24000000UL -#define BOARD_BOOTCLOCKRUN_SAI1_CLK_ROOT 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI1_MCLK1 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI1_MCLK2 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI1_MCLK3 30000000UL -#define BOARD_BOOTCLOCKRUN_SAI2_CLK_ROOT 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI2_MCLK1 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI2_MCLK2 0UL -#define BOARD_BOOTCLOCKRUN_SAI2_MCLK3 30000000UL -#define BOARD_BOOTCLOCKRUN_SAI3_CLK_ROOT 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI3_MCLK1 63529411UL -#define BOARD_BOOTCLOCKRUN_SAI3_MCLK2 0UL -#define BOARD_BOOTCLOCKRUN_SAI3_MCLK3 30000000UL -#define BOARD_BOOTCLOCKRUN_SEMC_CLK_ROOT 75000000UL -#define BOARD_BOOTCLOCKRUN_SPDIF0_CLK_ROOT 30000000UL -#define BOARD_BOOTCLOCKRUN_SPDIF0_EXTCLK_OUT 0UL -#define BOARD_BOOTCLOCKRUN_TRACE_CLK_ROOT 132000000UL -#define BOARD_BOOTCLOCKRUN_UART_CLK_ROOT 80000000UL -#define BOARD_BOOTCLOCKRUN_USBPHY1_CLK 0UL -#define BOARD_BOOTCLOCKRUN_USBPHY2_CLK 0UL -#define BOARD_BOOTCLOCKRUN_USDHC1_CLK_ROOT 198000000UL -#define BOARD_BOOTCLOCKRUN_USDHC2_CLK_ROOT 198000000UL - -/*! @brief Arm PLL set for BOARD_BootClockRUN configuration. - */ -extern const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN; -/*! @brief Usb1 PLL set for BOARD_BootClockRUN configuration. - */ -extern const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN; -/*! @brief Sys PLL for BOARD_BootClockRUN configuration. - */ -extern const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN; -/*! @brief Video PLL set for BOARD_BootClockRUN configuration. - */ -extern const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN; - -/******************************************************************************* - * API for BOARD_BootClockRUN configuration - ******************************************************************************/ -#if defined(__cplusplus) -extern "C" { -#endif /* __cplusplus*/ - -/*! - * @brief This function executes configuration of clocks. - * - */ -void BOARD_BootClockRUN(void); - -#if defined(__cplusplus) -} -#endif /* __cplusplus*/ - -#endif /* _CLOCK_CONFIG_H_ */ - diff --git a/board/dcd.c.bak b/board/dcd.c.bak deleted file mode 100644 index c3b2132..0000000 --- a/board/dcd.c.bak +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright 2020 NXP - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -#include "dcd.h" - -/* Component ID definition, used by tools. */ -#ifndef FSL_COMPONENT_ID -#define FSL_COMPONENT_ID "platform.drivers.xip_board" -#endif - -#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1) -#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1) -#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__) -__attribute__((section(".boot_hdr.dcd_data"), used)) -#elif defined(__ICCARM__) -#pragma location = ".boot_hdr.dcd_data" -#endif - -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -!!GlobalInfo -product: DCDx V2.0 -processor: MIMXRT1052xxxxB -package_id: MIMXRT1052DVL6B -mcu_data: ksdk2_0 -processor_version: 0.0.0 -board: IMXRT1050-EVKB -output_format: c_array - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ -/* COMMENTS BELOW ARE USED AS SETTINGS FOR DCD DATA */ -const uint8_t dcd_data[] = { - /* HEADER */ - /* Tag */ - 0xD2, - /* Image Length */ - 0x04, 0x10, - /* Version */ - 0x41, - - /* COMMANDS */ - - /* group: 'Imported Commands' */ - /* #1.1-113, command header bytes for merged 'Write - value' command */ - 0xCC, 0x03, 0x8C, 0x04, - /* #1.1, command: write_value, address: CCM_CCGR0, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.2, command: write_value, address: CCM_CCGR1, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x6C, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.3, command: write_value, address: CCM_CCGR2, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.4, command: write_value, address: CCM_CCGR3, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x74, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.5, command: write_value, address: CCM_CCGR4, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.6, command: write_value, address: CCM_CCGR5, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.7, command: write_value, address: CCM_CCGR6, value: 0xFFFFFFFF, size: 4 */ - 0x40, 0x0F, 0xC0, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, - /* #1.8, command: write_value, address: CCM_ANALOG_PLL_SYS, value: 0x2001, size: 4 */ - 0x40, 0x0D, 0x80, 0x30, 0x00, 0x00, 0x20, 0x01, - /* #1.9, command: write_value, address: CCM_ANALOG_PFD_528, value: 0x1D0000, size: 4 */ - 0x40, 0x0D, 0x81, 0x00, 0x00, 0x1D, 0x00, 0x00, - /* #1.10, command: write_value, address: CCM_CBCDR, value: 0x10D40, size: 4 */ - 0x40, 0x0F, 0xC0, 0x14, 0x00, 0x01, 0x0D, 0x40, - /* #1.11, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_00, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, - /* #1.12, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_01, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, - /* #1.13, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_02, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00, - /* #1.14, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_03, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, - /* #1.15, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_04, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00, - /* #1.16, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_05, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00, - /* #1.17, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_06, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00, - /* #1.18, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_07, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, - /* #1.19, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_08, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, - /* #1.20, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_09, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, - /* #1.21, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_10, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00, - /* #1.22, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_11, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, - /* #1.23, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_12, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00, - /* #1.24, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_13, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, - /* #1.25, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_14, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x4C, 0x00, 0x00, 0x00, 0x00, - /* #1.26, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_15, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00, - /* #1.27, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_16, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x54, 0x00, 0x00, 0x00, 0x00, - /* #1.28, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_17, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x58, 0x00, 0x00, 0x00, 0x00, - /* #1.29, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_18, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00, - /* #1.30, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_19, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, - /* #1.31, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_20, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00, - /* #1.32, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_21, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, - /* #1.33, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_22, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x6C, 0x00, 0x00, 0x00, 0x00, - /* #1.34, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_23, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00, - /* #1.35, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_24, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00, - /* #1.36, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_25, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00, - /* #1.37, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_26, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00, - /* #1.38, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_27, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - /* #1.39, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_28, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x84, 0x00, 0x00, 0x00, 0x00, - /* #1.40, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_29, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, - /* #1.41, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_30, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00, - /* #1.42, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_31, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00, - /* #1.43, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_32, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x94, 0x00, 0x00, 0x00, 0x00, - /* #1.44, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_33, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00, - /* #1.45, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_34, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0x9C, 0x00, 0x00, 0x00, 0x00, - /* #1.46, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_35, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00, - /* #1.47, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_36, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00, - /* #1.48, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_37, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0xA8, 0x00, 0x00, 0x00, 0x00, - /* #1.49, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_38, value: 0x00, size: 4 */ - 0x40, 0x1F, 0x80, 0xAC, 0x00, 0x00, 0x00, 0x00, - /* #1.50, command: write_value, address: IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_39, value: 0x10, size: 4 */ - 0x40, 0x1F, 0x80, 0xB0, 0x00, 0x00, 0x00, 0x10, - /* #1.51, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_00, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x04, 0x00, 0x01, 0x10, 0xF9, - /* #1.52, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_01, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x08, 0x00, 0x01, 0x10, 0xF9, - /* #1.53, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_02, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x0C, 0x00, 0x01, 0x10, 0xF9, - /* #1.54, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_03, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x10, 0x00, 0x01, 0x10, 0xF9, - /* #1.55, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_04, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x14, 0x00, 0x01, 0x10, 0xF9, - /* #1.56, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_05, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x18, 0x00, 0x01, 0x10, 0xF9, - /* #1.57, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_06, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x1C, 0x00, 0x01, 0x10, 0xF9, - /* #1.58, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_07, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x20, 0x00, 0x01, 0x10, 0xF9, - /* #1.59, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_08, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x24, 0x00, 0x01, 0x10, 0xF9, - /* #1.60, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_09, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x28, 0x00, 0x01, 0x10, 0xF9, - /* #1.61, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_10, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x2C, 0x00, 0x01, 0x10, 0xF9, - /* #1.62, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_11, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x30, 0x00, 0x01, 0x10, 0xF9, - /* #1.63, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_12, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x34, 0x00, 0x01, 0x10, 0xF9, - /* #1.64, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_13, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x38, 0x00, 0x01, 0x10, 0xF9, - /* #1.65, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_14, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x3C, 0x00, 0x01, 0x10, 0xF9, - /* #1.66, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_15, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x40, 0x00, 0x01, 0x10, 0xF9, - /* #1.67, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_16, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x44, 0x00, 0x01, 0x10, 0xF9, - /* #1.68, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_17, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x48, 0x00, 0x01, 0x10, 0xF9, - /* #1.69, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_18, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x4C, 0x00, 0x01, 0x10, 0xF9, - /* #1.70, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_19, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x50, 0x00, 0x01, 0x10, 0xF9, - /* #1.71, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_20, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x54, 0x00, 0x01, 0x10, 0xF9, - /* #1.72, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_21, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x58, 0x00, 0x01, 0x10, 0xF9, - /* #1.73, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_22, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x5C, 0x00, 0x01, 0x10, 0xF9, - /* #1.74, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_23, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x60, 0x00, 0x01, 0x10, 0xF9, - /* #1.75, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_24, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x64, 0x00, 0x01, 0x10, 0xF9, - /* #1.76, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_25, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x68, 0x00, 0x01, 0x10, 0xF9, - /* #1.77, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_26, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x6C, 0x00, 0x01, 0x10, 0xF9, - /* #1.78, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_27, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x70, 0x00, 0x01, 0x10, 0xF9, - /* #1.79, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_28, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x74, 0x00, 0x01, 0x10, 0xF9, - /* #1.80, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_29, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x78, 0x00, 0x01, 0x10, 0xF9, - /* #1.81, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_30, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x7C, 0x00, 0x01, 0x10, 0xF9, - /* #1.82, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_31, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x80, 0x00, 0x01, 0x10, 0xF9, - /* #1.83, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_32, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x84, 0x00, 0x01, 0x10, 0xF9, - /* #1.84, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_33, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x88, 0x00, 0x01, 0x10, 0xF9, - /* #1.85, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_34, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x8C, 0x00, 0x01, 0x10, 0xF9, - /* #1.86, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_35, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x90, 0x00, 0x01, 0x10, 0xF9, - /* #1.87, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_36, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x94, 0x00, 0x01, 0x10, 0xF9, - /* #1.88, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_37, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x98, 0x00, 0x01, 0x10, 0xF9, - /* #1.89, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_38, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0x9C, 0x00, 0x01, 0x10, 0xF9, - /* #1.90, command: write_value, address: IOMUXC_SW_PAD_CTL_PAD_GPIO_EMC_39, value: 0x110F9, size: 4 */ - 0x40, 0x1F, 0x82, 0xA0, 0x00, 0x01, 0x10, 0xF9, - /* #1.91, command: write_value, address: SEMC_MCR, value: 0x10000004, size: 4 */ - 0x40, 0x2F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, - /* #1.92, command: write_value, address: SEMC_BMCR0, value: 0x81, size: 4 */ - 0x40, 0x2F, 0x00, 0x08, 0x00, 0x00, 0x00, 0x81, - /* #1.93, command: write_value, address: SEMC_BMCR1, value: 0x81, size: 4 */ - 0x40, 0x2F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x81, - /* #1.94, command: write_value, address: SEMC_BR0, value: 0x8000001B, size: 4 */ - 0x40, 0x2F, 0x00, 0x10, 0x80, 0x00, 0x00, 0x1B, - /* #1.95, command: write_value, address: SEMC_BR1, value: 0x8200001B, size: 4 */ - 0x40, 0x2F, 0x00, 0x14, 0x82, 0x00, 0x00, 0x1B, - /* #1.96, command: write_value, address: SEMC_BR2, value: 0x8400001B, size: 4 */ - 0x40, 0x2F, 0x00, 0x18, 0x84, 0x00, 0x00, 0x1B, - /* #1.97, command: write_value, address: SEMC_BR3, value: 0x8600001B, size: 4 */ - 0x40, 0x2F, 0x00, 0x1C, 0x86, 0x00, 0x00, 0x1B, - /* #1.98, command: write_value, address: SEMC_BR4, value: 0x90000021, size: 4 */ - 0x40, 0x2F, 0x00, 0x20, 0x90, 0x00, 0x00, 0x21, - /* #1.99, command: write_value, address: SEMC_BR5, value: 0xA0000019, size: 4 */ - 0x40, 0x2F, 0x00, 0x24, 0xA0, 0x00, 0x00, 0x19, - /* #1.100, command: write_value, address: SEMC_BR6, value: 0xA8000017, size: 4 */ - 0x40, 0x2F, 0x00, 0x28, 0xA8, 0x00, 0x00, 0x17, - /* #1.101, command: write_value, address: SEMC_BR7, value: 0xA900001B, size: 4 */ - 0x40, 0x2F, 0x00, 0x2C, 0xA9, 0x00, 0x00, 0x1B, - /* #1.102, command: write_value, address: SEMC_BR8, value: 0x21, size: 4 */ - 0x40, 0x2F, 0x00, 0x30, 0x00, 0x00, 0x00, 0x21, - /* #1.103, command: write_value, address: SEMC_IOCR, value: 0x79A8, size: 4 */ - 0x40, 0x2F, 0x00, 0x04, 0x00, 0x00, 0x79, 0xA8, - /* #1.104, command: write_value, address: SEMC_SDRAMCR0, value: 0xF31, size: 4 */ - 0x40, 0x2F, 0x00, 0x40, 0x00, 0x00, 0x0F, 0x31, - /* #1.105, command: write_value, address: SEMC_SDRAMCR1, value: 0x652922, size: 4 */ - 0x40, 0x2F, 0x00, 0x44, 0x00, 0x65, 0x29, 0x22, - /* #1.106, command: write_value, address: SEMC_SDRAMCR2, value: 0x10920, size: 4 */ - 0x40, 0x2F, 0x00, 0x48, 0x00, 0x01, 0x09, 0x20, - /* #1.107, command: write_value, address: SEMC_SDRAMCR3, value: 0x50210A08, size: 4 */ - 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x08, - /* #1.108, command: write_value, address: SEMC_DBICR0, value: 0x21, size: 4 */ - 0x40, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21, - /* #1.109, command: write_value, address: SEMC_DBICR1, value: 0x888888, size: 4 */ - 0x40, 0x2F, 0x00, 0x84, 0x00, 0x88, 0x88, 0x88, - /* #1.110, command: write_value, address: SEMC_IPCR1, value: 0x02, size: 4 */ - 0x40, 0x2F, 0x00, 0x94, 0x00, 0x00, 0x00, 0x02, - /* #1.111, command: write_value, address: SEMC_IPCR2, value: 0x00, size: 4 */ - 0x40, 0x2F, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, - /* #1.112, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */ - 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, - /* #1.113, command: write_value, address: SEMC_IPCMD, value: 0xA55A000F, size: 4 */ - 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0F, - /* #2, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */ - 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, - /* #3.1-2, command header bytes for merged 'Write - value' command */ - 0xCC, 0x00, 0x14, 0x04, - /* #3.1, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */ - 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, - /* #3.2, command: write_value, address: SEMC_IPCMD, value: 0xA55A000C, size: 4 */ - 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C, - /* #4, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */ - 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, - /* #5.1-2, command header bytes for merged 'Write - value' command */ - 0xCC, 0x00, 0x14, 0x04, - /* #5.1, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */ - 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, - /* #5.2, command: write_value, address: SEMC_IPCMD, value: 0xA55A000C, size: 4 */ - 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C, - /* #6, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */ - 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, - /* #7.1-3, command header bytes for merged 'Write - value' command */ - 0xCC, 0x00, 0x1C, 0x04, - /* #7.1, command: write_value, address: SEMC_IPTXDAT, value: 0x33, size: 4 */ - 0x40, 0x2F, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x33, - /* #7.2, command: write_value, address: SEMC_IPCR0, value: 0x80000000, size: 4 */ - 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00, - /* #7.3, command: write_value, address: SEMC_IPCMD, value: 0xA55A000A, size: 4 */ - 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0A, - /* #8, command: check_any_bit_set, address: SEMC_INTR, value: 0x01, size: 4 */ - 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, - /* #9, command: write_value, address: SEMC_SDRAMCR3, value: 0x50210A09, size: 4 */ - 0xCC, 0x00, 0x0C, 0x04, 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x09 - }; -/* BE CAREFUL MODIFYING THIS SETTINGS - IT IS YAML SETTINGS FOR TOOLS */ - -#else -const uint8_t dcd_data[] = {0x00}; -#endif /* XIP_BOOT_HEADER_DCD_ENABLE */ -#endif /* XIP_BOOT_HEADER_ENABLE */ diff --git a/board/dcd.h.bak b/board/dcd.h.bak deleted file mode 100644 index 185b0ec..0000000 --- a/board/dcd.h.bak +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2020 NXP - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -#ifndef __DCD__ -#define __DCD__ - -#include - -/*! @name Driver version */ -/*@{*/ -/*! @brief XIP_BOARD driver version 2.0.1. */ -#define FSL_XIP_BOARD_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) -/*@}*/ - -/************************************* - * DCD Data - *************************************/ -#define DCD_TAG_HEADER (0xD2) -#define DCD_VERSION (0x41) -#define DCD_TAG_HEADER_SHIFT (24) -#define DCD_ARRAY_SIZE 1 - -#endif /* __DCD__ */ diff --git a/board/peripherals.c b/board/peripherals.c index abdbc2d..26a4b9f 100644 --- a/board/peripherals.c +++ b/board/peripherals.c @@ -136,8 +136,8 @@ instance: - deviceSetting: - vendor_id: '0x1FC9' - product_id: '0x0094' - - manufacturer_string: 'NXP' - - product_string: 'VCOM' + - manufacturer_string: 'NXP Semiconductors' + - product_string: 'CDC Virtual COM' - self_powered: 'true' - max_power: '500' - interfaces: @@ -199,6 +199,122 @@ instance: - bRefresh: '0' - bSynchAddress: 'NoSynchronization' - quick_selection: 'QS_INTERFACE_DIC_VCOM' + - 2: + - interface_class: 'kClassCic' + - setting_cic: + - interface_name: 'CIC VCOM' + - subclass: 'kSubclassAcm' + - protocol: 'kProtocolNone' + - implementation: 'kImplementationCicVcom' + - endpoints_settings: + - 0: + - setting_name: 'Default' + - endpoints: + - 0: + - direction: 'kIn' + - transfer_type: 'kInterrupt' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k16' + - polling_interval_fs: '8' + - max_packet_size_hs: 'k16' + - polling_interval_hs: '7' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - data_interface_count: '1' + - quick_selection: 'QS_INTERFACE_CIC_VCOM' + - 3: + - interface_class: 'kClassDic' + - setting_dic: + - interface_name: 'DIC VCOM' + - subclass: 'kSubclassNone' + - protocol: 'kProtocolNone' + - implementation: 'kImplementationDicVcom' + - endpoints_settings: + - 0: + - setting_name: 'Default' + - endpoints: + - 0: + - direction: 'kIn' + - transfer_type: 'kBulk' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k64' + - polling_interval_fs: '0' + - max_packet_size_hs: 'k512' + - polling_interval_hs: '0' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - 1: + - direction: 'kOut' + - transfer_type: 'kBulk' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k64' + - polling_interval_fs: '0' + - max_packet_size_hs: 'k512' + - polling_interval_hs: '0' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - quick_selection: 'QS_INTERFACE_DIC_VCOM' + - 4: + - interface_class: 'kClassCic' + - setting_cic: + - interface_name: 'CIC VCOM' + - subclass: 'kSubclassAcm' + - protocol: 'kProtocolNone' + - implementation: 'kImplementationCicVcom' + - endpoints_settings: + - 0: + - setting_name: 'Default' + - endpoints: + - 0: + - direction: 'kIn' + - transfer_type: 'kInterrupt' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k16' + - polling_interval_fs: '8' + - max_packet_size_hs: 'k16' + - polling_interval_hs: '7' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - data_interface_count: '1' + - quick_selection: 'QS_INTERFACE_CIC_VCOM' + - 5: + - interface_class: 'kClassDic' + - setting_dic: + - interface_name: 'DIC VCOM' + - subclass: 'kSubclassNone' + - protocol: 'kProtocolNone' + - implementation: 'kImplementationDicVcom' + - endpoints_settings: + - 0: + - setting_name: 'Default' + - endpoints: + - 0: + - direction: 'kIn' + - transfer_type: 'kBulk' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k64' + - polling_interval_fs: '0' + - max_packet_size_hs: 'k512' + - polling_interval_hs: '0' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - 1: + - direction: 'kOut' + - transfer_type: 'kBulk' + - synchronization: 'kNoSynchronization' + - usage: 'kData' + - max_packet_size_fs: 'k64' + - polling_interval_fs: '0' + - max_packet_size_hs: 'k512' + - polling_interval_hs: '0' + - bRefresh: '0' + - bSynchAddress: 'NoSynchronization' + - quick_selection: 'QS_INTERFACE_DIC_VCOM' * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ /* clang-format on */ diff --git a/board/peripherals.c.bak b/board/peripherals.c.bak deleted file mode 100644 index 2a46543..0000000 --- a/board/peripherals.c.bak +++ /dev/null @@ -1,392 +0,0 @@ -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -/* clang-format off */ -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -!!GlobalInfo -product: Peripherals v9.0 -processor: MIMXRT1052xxxxB -package_id: MIMXRT1052DVL6B -mcu_data: ksdk2_0 -processor_version: 9.0.1 -board: IMXRT1050-EVKB -functionalGroups: -- name: BOARD_InitPeripherals - UUID: f1fa4e90-59a0-4ebb-b5c6-285f38e255e8 - called_from_default_init: true - selectedCore: core0 - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ - -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -component: -- type: 'system' -- type_id: 'system_54b53072540eeeb8f8e9343e71f28176' -- global_system_definitions: - - user_definitions: '' - - user_includes: '' - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ -/* clang-format on */ - -/*********************************************************************************************************************** - * Included files - **********************************************************************************************************************/ -#include "peripherals.h" - -/*********************************************************************************************************************** - * BOARD_InitPeripherals functional group - **********************************************************************************************************************/ -/*********************************************************************************************************************** - * NVIC initialization code - **********************************************************************************************************************/ -/* clang-format off */ -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -instance: -- name: 'NVIC' -- type: 'nvic' -- mode: 'general' -- custom_name_enabled: 'false' -- type_id: 'nvic_57b5eef3774cc60acaede6f5b8bddc67' -- functional_group: 'BOARD_InitPeripherals' -- peripheral: 'NVIC' -- config_sets: - - nvic: - - interrupt_table: [] - - interrupts: [] - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ -/* clang-format on */ - -/* Empty initialization function (commented out) -static void NVIC_init(void) { -} */ - -/*********************************************************************************************************************** - * LPUART1 initialization code - **********************************************************************************************************************/ -/* clang-format off */ -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -instance: -- name: 'LPUART1' -- type: 'lpuart' -- mode: 'polling' -- custom_name_enabled: 'false' -- type_id: 'lpuart_54a65a580e3462acdbacefd5299e0cac' -- functional_group: 'BOARD_InitPeripherals' -- peripheral: 'LPUART1' -- config_sets: - - lpuartConfig_t: - - lpuartConfig: - - clockSource: 'LpuartClock' - - lpuartSrcClkFreq: 'BOARD_BootClockRUN' - - baudRate_Bps: '115200' - - parityMode: 'kLPUART_ParityDisabled' - - dataBitsCount: 'kLPUART_EightDataBits' - - isMsb: 'false' - - stopBitCount: 'kLPUART_OneStopBit' - - txFifoWatermark: '0' - - rxFifoWatermark: '1' - - enableRxRTS: 'false' - - enableTxCTS: 'false' - - txCtsSource: 'kLPUART_CtsSourcePin' - - txCtsConfig: 'kLPUART_CtsSampleAtStart' - - rxIdleType: 'kLPUART_IdleTypeStartBit' - - rxIdleConfig: 'kLPUART_IdleCharacter1' - - enableTx: 'true' - - enableRx: 'true' - - quick_selection: 'QuickSelection1' - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ -/* clang-format on */ -const lpuart_config_t LPUART1_config = { - .baudRate_Bps = 115200UL, - .parityMode = kLPUART_ParityDisabled, - .dataBitsCount = kLPUART_EightDataBits, - .isMsb = false, - .stopBitCount = kLPUART_OneStopBit, - .txFifoWatermark = 0U, - .rxFifoWatermark = 1U, - .enableRxRTS = false, - .enableTxCTS = false, - .txCtsSource = kLPUART_CtsSourcePin, - .txCtsConfig = kLPUART_CtsSampleAtStart, - .rxIdleType = kLPUART_IdleTypeStartBit, - .rxIdleConfig = kLPUART_IdleCharacter1, - .enableTx = true, - .enableRx = true -}; - -static void LPUART1_init(void) { - LPUART_Init(LPUART1_PERIPHERAL, &LPUART1_config, LPUART1_CLOCK_SOURCE); -} - -/*********************************************************************************************************************** - * USB1 initialization code - **********************************************************************************************************************/ -/* clang-format off */ -/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -instance: -- name: 'USB1' -- type: 'usb' -- mode: 'device' -- custom_name_enabled: 'false' -- type_id: 'usb_49b3e4c7d25fbcd298641994d1b911e9' -- functional_group: 'BOARD_InitPeripherals' -- peripheral: 'USB1' -- config_sets: - - deviceSetting: - - vendor_id: '0x1FC9' - - product_id: '0x0094' - - manufacturer_string: 'NXP' - - product_string: 'VCOM' - - self_powered: 'true' - - max_power: '500' - - interfaces: - - 0: - - interface_class: 'kClassCic' - - setting_cic: - - interface_name: 'CIC VCOM' - - subclass: 'kSubclassAcm' - - protocol: 'kProtocolNone' - - implementation: 'kImplementationCicVcom' - - endpoints_settings: - - 0: - - setting_name: 'Default' - - endpoints: - - 0: - - direction: 'kIn' - - transfer_type: 'kInterrupt' - - synchronization: 'kNoSynchronization' - - usage: 'kData' - - max_packet_size_fs: 'k16' - - polling_interval_fs: '8' - - max_packet_size_hs: 'k16' - - polling_interval_hs: '7' - - bRefresh: '0' - - bSynchAddress: 'NoSynchronization' - - data_interface_count: '1' - - quick_selection: 'QS_INTERFACE_CIC_VCOM' - - 1: - - interface_class: 'kClassDic' - - setting_dic: - - interface_name: 'DIC VCOM' - - subclass: 'kSubclassNone' - - protocol: 'kProtocolNone' - - implementation: 'kImplementationDicVcom' - - endpoints_settings: - - 0: - - setting_name: 'Default' - - endpoints: - - 0: - - direction: 'kIn' - - transfer_type: 'kBulk' - - synchronization: 'kNoSynchronization' - - usage: 'kData' - - max_packet_size_fs: 'k64' - - polling_interval_fs: '0' - - max_packet_size_hs: 'k512' - - polling_interval_hs: '0' - - bRefresh: '0' - - bSynchAddress: 'NoSynchronization' - - 1: - - direction: 'kOut' - - transfer_type: 'kBulk' - - synchronization: 'kNoSynchronization' - - usage: 'kData' - - max_packet_size_fs: 'k64' - - polling_interval_fs: '0' - - max_packet_size_hs: 'k512' - - polling_interval_hs: '0' - - bRefresh: '0' - - bSynchAddress: 'NoSynchronization' - - quick_selection: 'QS_INTERFACE_DIC_VCOM' - - 2: - - interface_class: 'kClassAudio_2_0' - - setting_audio_2_0: - - interface_name: 'Audio control' - - subclass: 'kSubclassAudioControl' - - protocol: 'kProtocolIPV20' - - implementation: 'kImplementationAudioSpeaker' - - endpoints_settings: - - 0: - - setting_name: 'Default' - - endpoints: [] - - acHeader_descriptor_audio_2_0: - - bCategory: 'kDesktopSpeaker' - - bmControls: 'kNone' - - units_audio_2_0: - - 0: - - audio_unit: 'kClockSource' - - clock_source: - - bClockID: '1' - - bmAttributesLow: 'kInternalFixedClock' - - bmAttributesHigh: 'kFreeRunning' - - bmControlsLow: 'kHostProgrammable' - - bmControlsHigh: 'kReadOnly' - - 1: - - audio_unit: 'kInputTerminal' - - input_terminal: - - bTerminalID: '2' - - wTerminalType: 'kStreaming' - - bCSourceID: 'bClockID_1' - - bNrChannels: '2' - - bmChannelConfig: 'USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FL USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FR' - - bmControls_0_1bit: 'kNone' - - bmControls_2_3bit: 'kNone' - - bmControls_4_5bit: 'kNone' - - bmControls_6_7bit: 'kNone' - - bmControls_8_9bit: 'kNone' - - bmControls_10_11bit: 'kNone' - - 2: - - audio_unit: 'kFeatureUnit' - - feature_unit: - - bUnitID: '3' - - bSourceID: 'bTerminalID_2' - - bmaControls: - - 0: - - bmControls_0_1bit: 'kHostProgrammable' - - bmControls_2_3bit: 'kHostProgrammable' - - bmControls_4_5bit: 'kNone' - - bmControls_6_7bit: 'kNone' - - bmControls_8_9bit: 'kNone' - - bmControls_10_11bit: 'kNone' - - bmControls_12_13bit: 'kNone' - - bmControls_14_15bit: 'kNone' - - bmControls_16_17bit: 'kNone' - - bmControls_18_19bit: 'kNone' - - bmControls_20_21bit: 'kNone' - - bmControls_22_23bit: 'kNone' - - bmControls_24_25bit: 'kNone' - - bmControls_26_27bit: 'kNone' - - bmControls_28_29bit: 'kNone' - - 1: - - bmControls_0_1bit: 'kNone' - - bmControls_2_3bit: 'kNone' - - bmControls_4_5bit: 'kNone' - - bmControls_6_7bit: 'kNone' - - bmControls_8_9bit: 'kNone' - - bmControls_10_11bit: 'kNone' - - bmControls_12_13bit: 'kNone' - - bmControls_14_15bit: 'kNone' - - bmControls_16_17bit: 'kNone' - - bmControls_18_19bit: 'kNone' - - bmControls_20_21bit: 'kNone' - - bmControls_22_23bit: 'kNone' - - bmControls_24_25bit: 'kNone' - - bmControls_26_27bit: 'kNone' - - bmControls_28_29bit: 'kNone' - - 2: - - bmControls_0_1bit: 'kNone' - - bmControls_2_3bit: 'kNone' - - bmControls_4_5bit: 'kNone' - - bmControls_6_7bit: 'kNone' - - bmControls_8_9bit: 'kNone' - - bmControls_10_11bit: 'kNone' - - bmControls_12_13bit: 'kNone' - - bmControls_14_15bit: 'kNone' - - bmControls_16_17bit: 'kNone' - - bmControls_18_19bit: 'kNone' - - bmControls_20_21bit: 'kNone' - - bmControls_22_23bit: 'kNone' - - bmControls_24_25bit: 'kNone' - - bmControls_26_27bit: 'kNone' - - bmControls_28_29bit: 'kNone' - - 3: - - audio_unit: 'kOutputTerminal' - - output_terminal: - - bTerminalID: '4' - - wTerminalType: 'kSpeaker' - - bSourceID: 'bTerminalID_3' - - bCSourceID: 'bClockID_1' - - bmControls_0_1bit: 'kNone' - - bmControls_2_3bit: 'kNone' - - bmControls_4_5bit: 'kNone' - - bmControls_6_7bit: 'kNone' - - bmControls_8_9bit: 'kNone' - - 3: - - interface_class: 'kClassAudio_2_0' - - setting_audio_2_0: - - interface_name: 'Audio 20' - - subclass: 'kSubclassAudioStream' - - protocol: 'kProtocolIPV20' - - implementation: 'kImplementationNone' - - endpoints_settings: - - 0: - - setting_name: 'Default' - - endpoints: [] - - asInterface_descriptor_audio_2_0: - - bTerminalLink: 'bTerminalID_2' - - bmControlsLow: 'kNone' - - bmControlsHigh: 'kNone' - - bFormatType: 'kFormatI' - - bmFormats: 'kUndefined' - - bNrChannels: '2' - - bmChannelConfig: '' - - typeIFormat_descriptor_audio_2_0: - - bSubslotSize: 'kOne' - - bBitResolution: '0' - - 1: - - setting_name: 'Default2' - - endpoints: - - 0: - - direction: 'kOut' - - transfer_type: 'kIsochronous' - - synchronization: 'kAdaptive' - - usage: 'kData' - - max_packet_size_fs: 'k8' - - polling_interval_fs: '1' - - max_packet_size_hs: 'k8' - - polling_interval_hs: '1' - - bRefresh: '0' - - bSynchAddress: 'NoSynchronization' - - cs_as_data_2_0: - - bmControls_0_1bit: 'kNone' - - bmControls_2_3bit: 'kNone' - - bmControls_4_5bit: 'kNone' - - bLockDelayUnits: 'undefined' - - wLockDelay: '0' - - 1: - - direction: 'kIn' - - transfer_type: 'kIsochronous' - - synchronization: 'kNoSynchronization' - - usage: 'kFeedback' - - max_packet_size_fs: 'k8' - - polling_interval_fs: '1' - - max_packet_size_hs: 'k8' - - polling_interval_hs: '1' - - bRefresh: '0' - - bSynchAddress: 'NoSynchronization' - - asInterface_descriptor_audio_2_0: - - bTerminalLink: 'bTerminalID_2' - - bmControlsLow: 'kNone' - - bmControlsHigh: 'kNone' - - bFormatType: 'kFormatI' - - bmFormats: 'kPCM' - - bNrChannels: '2' - - bmChannelConfig: 'USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FL USB_INTERFACE_AUDIO_CONTROL_INPUT_TERMINAL_CHANNEL_CONFIG_FR' - - typeIFormat_descriptor_audio_2_0: - - bSubslotSize: 'kOne' - - bBitResolution: '0' - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ -/* clang-format on */ - -static void USB1_init(void) { - USB_DeviceApplicationInit(); -} - -/*********************************************************************************************************************** - * Initialization functions - **********************************************************************************************************************/ -void BOARD_InitPeripherals(void) -{ - /* Initialize components */ - LPUART1_init(); - USB1_init(); -} - -/*********************************************************************************************************************** - * BOARD_InitBootPeripherals function - **********************************************************************************************************************/ -void BOARD_InitBootPeripherals(void) -{ - BOARD_InitPeripherals(); -} diff --git a/board/peripherals.h.bak b/board/peripherals.h.bak deleted file mode 100644 index d7248c0..0000000 --- a/board/peripherals.h.bak +++ /dev/null @@ -1,49 +0,0 @@ -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -#ifndef _PERIPHERALS_H_ -#define _PERIPHERALS_H_ - -/*********************************************************************************************************************** - * Included files - **********************************************************************************************************************/ -#include "fsl_common.h" -#include "fsl_lpuart.h" -#include "fsl_clock.h" - -#if defined(__cplusplus) -extern "C" { -#endif /* __cplusplus */ - -/*********************************************************************************************************************** - * Definitions - **********************************************************************************************************************/ -/* Definitions for BOARD_InitPeripherals functional group */ -/* Definition of peripheral ID */ -#define LPUART1_PERIPHERAL LPUART1 -/* Definition of the clock source frequency */ -#define LPUART1_CLOCK_SOURCE 80000000UL - -/*********************************************************************************************************************** - * Global variables - **********************************************************************************************************************/ -extern const lpuart_config_t LPUART1_config; - -/*********************************************************************************************************************** - * Initialization functions - **********************************************************************************************************************/ - -void BOARD_InitPeripherals(void); - -/*********************************************************************************************************************** - * BOARD_InitBootPeripherals function - **********************************************************************************************************************/ -void BOARD_InitBootPeripherals(void); - -#if defined(__cplusplus) -} -#endif - -#endif /* _PERIPHERALS_H_ */ diff --git a/board/pin_mux.c.bak b/board/pin_mux.c.bak deleted file mode 100644 index ccf0ea0..0000000 --- a/board/pin_mux.c.bak +++ /dev/null @@ -1,73 +0,0 @@ -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -/* - * TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -!!GlobalInfo -product: Pins v9.0 -processor: MIMXRT1052xxxxB -package_id: MIMXRT1052DVL6B -mcu_data: ksdk2_0 -processor_version: 9.0.1 -board: IMXRT1050-EVKB - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS *********** - */ - -#include "fsl_common.h" -#include "fsl_iomuxc.h" -#include "fsl_gpio.h" -#include "pin_mux.h" - -/* FUNCTION ************************************************************************************************************ - * - * Function Name : BOARD_InitBootPins - * Description : Calls initialization functions. - * - * END ****************************************************************************************************************/ -void BOARD_InitBootPins(void) { - BOARD_InitPins(); -} - -/* - * TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* -BOARD_InitPins: -- options: {callFromInitBoot: 'true', coreID: core0, enableClock: 'true'} -- pin_list: - - {pin_num: L14, peripheral: LPUART1, signal: RX, pin_signal: GPIO_AD_B0_13, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm, - pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow} - - {pin_num: K14, peripheral: LPUART1, signal: TX, pin_signal: GPIO_AD_B0_12, software_input_on: Disable, hysteresis_enable: Disable, pull_up_down_config: Pull_Down_100K_Ohm, - pull_keeper_select: Keeper, pull_keeper_enable: Enable, open_drain: Disable, speed: MHZ_100, drive_strength: R0_6, slew_rate: Slow} - - {pin_num: G13, peripheral: GPIO1, signal: 'gpio_io, 10', pin_signal: GPIO_AD_B0_10, direction: OUTPUT, gpio_init_state: 'true'} - * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS *********** - */ - -/* FUNCTION ************************************************************************************************************ - * - * Function Name : BOARD_InitPins - * Description : Configures pin routing and optionally pin electrical features. - * - * END ****************************************************************************************************************/ -void BOARD_InitPins(void) { - CLOCK_EnableClock(kCLOCK_Iomuxc); - - /* GPIO configuration of INT1_COMBO on GPIO_AD_B0_10 (pin G13) */ - gpio_pin_config_t INT1_COMBO_config = { - .direction = kGPIO_DigitalOutput, - .outputLogic = 1U, - .interruptMode = kGPIO_NoIntmode - }; - /* Initialize GPIO functionality on GPIO_AD_B0_10 (pin G13) */ - GPIO_PinInit(GPIO1, 10U, &INT1_COMBO_config); - - IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10, 0U); - IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0U); - IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0U); - IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0x10B0U); - IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0x10B0U); -} - -/*********************************************************************************************************************** - * EOF - **********************************************************************************************************************/ diff --git a/board/pin_mux.h.bak b/board/pin_mux.h.bak deleted file mode 100644 index 103dece..0000000 --- a/board/pin_mux.h.bak +++ /dev/null @@ -1,82 +0,0 @@ -/*********************************************************************************************************************** - * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file - * will be overwritten if the respective MCUXpresso Config Tools is used to update this file. - **********************************************************************************************************************/ - -#ifndef _PIN_MUX_H_ -#define _PIN_MUX_H_ - -/*********************************************************************************************************************** - * Definitions - **********************************************************************************************************************/ - -/*! @brief Direction type */ -typedef enum _pin_mux_direction -{ - kPIN_MUX_DirectionInput = 0U, /* Input direction */ - kPIN_MUX_DirectionOutput = 1U, /* Output direction */ - kPIN_MUX_DirectionInputOrOutput = 2U /* Input or output direction */ -} pin_mux_direction_t; - -/*! - * @addtogroup pin_mux - * @{ - */ - -/*********************************************************************************************************************** - * API - **********************************************************************************************************************/ - -#if defined(__cplusplus) -extern "C" { -#endif - -/*! - * @brief Calls initialization functions. - * - */ -void BOARD_InitBootPins(void); - -/* GPIO_AD_B0_13 (coord L14), UART1_RXD */ -/* Routed pin properties */ -#define BOARD_INITPINS_UART1_RXD_PERIPHERAL LPUART1 /*!< Peripheral name */ -#define BOARD_INITPINS_UART1_RXD_SIGNAL RX /*!< Signal name */ - -/* GPIO_AD_B0_12 (coord K14), UART1_TXD */ -/* Routed pin properties */ -#define BOARD_INITPINS_UART1_TXD_PERIPHERAL LPUART1 /*!< Peripheral name */ -#define BOARD_INITPINS_UART1_TXD_SIGNAL TX /*!< Signal name */ - -/* GPIO_AD_B0_10 (coord G13), JTAG_TDO/J21[13]/INT1_COMBO/ENET_INT/J22[6]/U32[11] */ -/* Routed pin properties */ -#define BOARD_INITPINS_INT1_COMBO_PERIPHERAL GPIO1 /*!< Peripheral name */ -#define BOARD_INITPINS_INT1_COMBO_SIGNAL gpio_io /*!< Signal name */ -#define BOARD_INITPINS_INT1_COMBO_CHANNEL 10U /*!< Signal channel */ - -/* Symbols to be used with GPIO driver */ -#define BOARD_INITPINS_INT1_COMBO_GPIO GPIO1 /*!< GPIO peripheral base pointer */ -#define BOARD_INITPINS_INT1_COMBO_GPIO_PIN 10U /*!< GPIO pin number */ -#define BOARD_INITPINS_INT1_COMBO_GPIO_PIN_MASK (1U << 10U) /*!< GPIO pin mask */ -#define BOARD_INITPINS_INT1_COMBO_PORT GPIO1 /*!< PORT peripheral base pointer */ -#define BOARD_INITPINS_INT1_COMBO_PIN 10U /*!< PORT pin number */ -#define BOARD_INITPINS_INT1_COMBO_PIN_MASK (1U << 10U) /*!< PORT pin mask */ - - -/*! - * @brief Configures pin routing and optionally pin electrical features. - * - */ -void BOARD_InitPins(void); - -#if defined(__cplusplus) -} -#endif - -/*! - * @} - */ -#endif /* _PIN_MUX_H_ */ - -/*********************************************************************************************************************** - * EOF - **********************************************************************************************************************/ diff --git a/rt1050_freertos_usb.mex b/rt1050_freertos_usb.mex index 561fa54..19a4539 100644 --- a/rt1050_freertos_usb.mex +++ b/rt1050_freertos_usb.mex @@ -504,6 +504,10 @@ + + + + 9.0.1 @@ -588,8 +592,8 @@ - - + + @@ -662,6 +666,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/freertos_hello.c b/source/freertos_hello.c index d5459c3..024909a 100644 --- a/source/freertos_hello.c +++ b/source/freertos_hello.c @@ -82,6 +82,6 @@ static void hello_task(void *pvParameters) static void usb_task(void *pvParameters) { for(;;) { USB_DeviceTasks(); - vTaskDelay(pdMS_TO_TICKS(10)); + vTaskDelay(pdMS_TO_TICKS(1)); } } \ No newline at end of file diff --git a/source/generated/usb_device_composite.c b/source/generated/usb_device_composite.c index 95b3a43..983cfa3 100644 --- a/source/generated/usb_device_composite.c +++ b/source/generated/usb_device_composite.c @@ -47,6 +47,10 @@ #include "usb_device_composite.h" #include "usb_device_interface_0_cic_vcom.h" + +#include "usb_device_interface_2_cic_vcom.h" + +#include "usb_device_interface_4_cic_vcom.h" #if (defined(FSL_FEATURE_SOC_SYSMPU_COUNT) && (FSL_FEATURE_SOC_SYSMPU_COUNT > 0U)) #include "fsl_sysmpu.h" @@ -131,6 +135,20 @@ extern usb_status_t USB_DeviceInterface0CicVcomSetInterface(class_handle_t handl extern usb_status_t USB_DeviceInterface1DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); +extern usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite); +extern usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param); +extern usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_index); +extern usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +extern usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +extern usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite); +extern usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param); +extern usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_index); +extern usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +extern usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + /******************************************************************************* * Variables ******************************************************************************/ @@ -149,6 +167,8 @@ uint32_t isConnectedToHsHost = 0U; usb_device_composite_struct_t g_UsbDeviceComposite; extern usb_device_class_struct_t g_UsbDeviceInterface0CicVcomConfig; +extern usb_device_class_struct_t g_UsbDeviceInterface2CicVcomConfig; +extern usb_device_class_struct_t g_UsbDeviceInterface4CicVcomConfig; /* Set class configurations. */ usb_device_class_config_struct_t g_CompositeClassConfig[USB_COMPOSITE_INTERFACE_COUNT] = { @@ -158,6 +178,18 @@ usb_device_class_config_struct_t g_CompositeClassConfig[USB_COMPOSITE_INTERFACE_ { (usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL, }, + { + USB_DeviceInterface2CicVcomCallback, (class_handle_t)NULL, &g_UsbDeviceInterface2CicVcomConfig, + }, + { + (usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL, + }, + { + USB_DeviceInterface4CicVcomCallback, (class_handle_t)NULL, &g_UsbDeviceInterface4CicVcomConfig, + }, + { + (usb_device_class_callback_t)NULL, (class_handle_t)NULL, NULL, + }, }; /* Set class configuration list. */ @@ -690,6 +722,10 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, g_UsbDeviceComposite.currentConfiguration = 0U; /* The device is detached - the zero configuration is set. */ USB_DeviceInterface0CicVcomSetConfiguration(g_UsbDeviceComposite.interface0CicVcomHandle, *temp8); + /* The device is detached - the zero configuration is set. */ + USB_DeviceInterface2CicVcomSetConfiguration(g_UsbDeviceComposite.interface2CicVcomHandle, *temp8); + /* The device is detached - the zero configuration is set. */ + USB_DeviceInterface4CicVcomSetConfiguration(g_UsbDeviceComposite.interface4CicVcomHandle, *temp8); } else if (USB_COMPOSITE_CONFIGURATION_INDEX == (*temp8)) { @@ -697,6 +733,8 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, g_UsbDeviceComposite.attach = 1U; g_UsbDeviceComposite.currentConfiguration = *temp8; USB_DeviceInterface0CicVcomSetConfiguration(g_UsbDeviceComposite.interface0CicVcomHandle, *temp8); + USB_DeviceInterface2CicVcomSetConfiguration(g_UsbDeviceComposite.interface2CicVcomHandle, *temp8); + USB_DeviceInterface4CicVcomSetConfiguration(g_UsbDeviceComposite.interface4CicVcomHandle, *temp8); error = kStatus_USB_Success; } else @@ -858,6 +896,20 @@ usb_status_t USB_UpdateInterfaceSetting(uint8_t interface, uint8_t alternateSett case USB_INTERFACE_1_DIC_VCOM_INDEX: ret = USB_DeviceInterface1DicVcomSetInterface(g_UsbDeviceComposite.interface0CicVcomHandle, alternateSetting); break; + + case USB_INTERFACE_2_CIC_VCOM_INDEX: + ret = USB_DeviceInterface2CicVcomSetInterface(g_UsbDeviceComposite.interface2CicVcomHandle, alternateSetting); + break; + case USB_INTERFACE_3_DIC_VCOM_INDEX: + ret = USB_DeviceInterface3DicVcomSetInterface(g_UsbDeviceComposite.interface2CicVcomHandle, alternateSetting); + break; + + case USB_INTERFACE_4_CIC_VCOM_INDEX: + ret = USB_DeviceInterface4CicVcomSetInterface(g_UsbDeviceComposite.interface4CicVcomHandle, alternateSetting); + break; + case USB_INTERFACE_5_DIC_VCOM_INDEX: + ret = USB_DeviceInterface5DicVcomSetInterface(g_UsbDeviceComposite.interface4CicVcomHandle, alternateSetting); + break; } if (ret == kStatus_USB_Success) @@ -888,6 +940,8 @@ usb_status_t USB_DeviceApplicationInit(void) g_UsbDeviceComposite.speed = USB_SPEED_FULL; g_UsbDeviceComposite.attach = 0U; g_UsbDeviceComposite.interface0CicVcomHandle = (class_handle_t)NULL; + g_UsbDeviceComposite.interface2CicVcomHandle = (class_handle_t)NULL; + g_UsbDeviceComposite.interface4CicVcomHandle = (class_handle_t)NULL; g_UsbDeviceComposite.deviceHandle = NULL; /* Initialize the usb stack and class drivers. */ @@ -901,6 +955,10 @@ usb_status_t USB_DeviceApplicationInit(void) /* Get the class handle. */ g_UsbDeviceComposite.interface0CicVcomHandle = g_UsbDeviceCompositeConfigList.config[0].classHandle; USB_DeviceInterface0CicVcomInit(&g_UsbDeviceComposite); + g_UsbDeviceComposite.interface2CicVcomHandle = g_UsbDeviceCompositeConfigList.config[2].classHandle; + USB_DeviceInterface2CicVcomInit(&g_UsbDeviceComposite); + g_UsbDeviceComposite.interface4CicVcomHandle = g_UsbDeviceCompositeConfigList.config[4].classHandle; + USB_DeviceInterface4CicVcomInit(&g_UsbDeviceComposite); #if (defined(USB_DEVICE_CONFIG_CHARGER_DETECT) && (USB_DEVICE_CONFIG_CHARGER_DETECT > 0U)) && \ @@ -1035,7 +1093,11 @@ void USB_DeviceChargerTask(usb_device_composite_struct_t *usbDeviceCompositeDcd) void USB_DeviceTasks(void) { - USB_DeviceInterface0CicVcomTask(); + USB_DeviceInterface0CicVcomTask(); + + USB_DeviceInterface2CicVcomTask(); + + USB_DeviceInterface4CicVcomTask(); #if USB_DEVICE_CONFIG_USE_TASK USB_DeviceTaskFn(g_UsbDeviceComposite.deviceHandle); #endif diff --git a/source/generated/usb_device_composite.h b/source/generated/usb_device_composite.h index b0becfa..9583f55 100644 --- a/source/generated/usb_device_composite.h +++ b/source/generated/usb_device_composite.h @@ -93,6 +93,8 @@ typedef struct _usb_device_composite_struct { usb_device_handle deviceHandle; class_handle_t interface0CicVcomHandle; + class_handle_t interface2CicVcomHandle; + class_handle_t interface4CicVcomHandle; uint8_t currentConfiguration; /*Current configuration number*/ uint8_t currentInterfaceAlternateSetting[USB_COMPOSITE_INTERFACE_COUNT]; /*alternate setting number*/ uint8_t speed; /*USB speed code, one of the following: USB_SPEED_FULL(0x00U),USB_SPEED_LOW(0x01U),USB_SPEED_HIGH(0x02U)*/ diff --git a/source/generated/usb_device_config.h b/source/generated/usb_device_config.h index 991ca54..a019788 100644 --- a/source/generated/usb_device_config.h +++ b/source/generated/usb_device_config.h @@ -70,7 +70,7 @@ /*! @brief CDC ACM instance count. */ #ifndef USB_DEVICE_CONFIG_CDC_ACM -#define USB_DEVICE_CONFIG_CDC_ACM (1U) +#define USB_DEVICE_CONFIG_CDC_ACM (3U) #endif /*USB_DEVICE_CONFIG_CDC_ACM*/ /*! @brief MSC instance count. */ @@ -99,7 +99,7 @@ #define USB_DEVICE_CONFIG_SELF_POWER (1U) /*! @brief How many endpoints are supported in the stack. */ -#define USB_DEVICE_CONFIG_ENDPOINTS (3U) +#define USB_DEVICE_CONFIG_ENDPOINTS (7U) /*! @brief Whether the device task is enabled. */ #define USB_DEVICE_CONFIG_USE_TASK (0U) diff --git a/source/generated/usb_device_descriptor.c b/source/generated/usb_device_descriptor.c index 0495beb..4728e93 100644 --- a/source/generated/usb_device_descriptor.c +++ b/source/generated/usb_device_descriptor.c @@ -109,6 +109,98 @@ usb_device_interface_struct_t g_UsbDeviceInterface1DicVcomInterface[] = { }, }; +usb_device_endpoint_struct_t g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = { + { + USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_INTERRUPT, + FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE, + FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL, + }, +}; + +usb_device_interface_struct_t g_UsbDeviceInterface2CicVcomInterface[] = { + { + USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */ + { + USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */ + g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints, /* Endpoints handle */ + }, + NULL, + }, +}; + +usb_device_endpoint_struct_t g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = { + { + USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_BULK, + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE, + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL, + }, + { + USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_BULK, + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE, + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL, + }, +}; + +usb_device_interface_struct_t g_UsbDeviceInterface3DicVcomInterface[] = { + { + USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */ + { + USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */ + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints, /* Endpoints handle */ + }, + NULL, + }, +}; + +usb_device_endpoint_struct_t g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = { + { + USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_INTERRUPT, + FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE, + FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL, + }, +}; + +usb_device_interface_struct_t g_UsbDeviceInterface4CicVcomInterface[] = { + { + USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */ + { + USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */ + g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints, /* Endpoints handle */ + }, + NULL, + }, +}; + +usb_device_endpoint_struct_t g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT] = { + { + USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_BULK, + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE, + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL, + }, + { + USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + USB_ENDPOINT_BULK, + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE, + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL, + }, +}; + +usb_device_interface_struct_t g_UsbDeviceInterface5DicVcomInterface[] = { + { + USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* The alternate setting of the interface */ + { + USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Endpoints count */ + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints, /* Endpoints handle */ + }, + NULL, + }, +}; + usb_device_interfaces_struct_t g_UsbDeviceInterface0CicVcomInterfaces[USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT] = { { USB_INTERFACE_0_CIC_VCOM_CLASS, @@ -141,6 +233,70 @@ usb_device_class_struct_t g_UsbDeviceInterface0CicVcomConfig = { USB_DEVICE_CONFIGURATION_COUNT, }; +usb_device_interfaces_struct_t g_UsbDeviceInterface2CicVcomInterfaces[USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT] = { + { + USB_INTERFACE_2_CIC_VCOM_CLASS, + USB_INTERFACE_2_CIC_VCOM_SUBCLASS, + USB_INTERFACE_2_CIC_VCOM_PROTOCOL, + USB_INTERFACE_2_CIC_VCOM_INDEX, + g_UsbDeviceInterface2CicVcomInterface, /* Interfaces handle */ + sizeof(g_UsbDeviceInterface2CicVcomInterface) / sizeof(usb_device_interface_struct_t), + }, + { + USB_INTERFACE_3_DIC_VCOM_CLASS, + USB_INTERFACE_3_DIC_VCOM_SUBCLASS, + USB_INTERFACE_3_DIC_VCOM_PROTOCOL, + USB_INTERFACE_3_DIC_VCOM_INDEX, + g_UsbDeviceInterface3DicVcomInterface, /* Interfaces handle */ + sizeof(g_UsbDeviceInterface3DicVcomInterface) / sizeof(usb_device_interface_struct_t), + }, +}; + +usb_device_interface_list_t g_UsbDeviceInterface2CicVcomInterfaceList[USB_DEVICE_CONFIGURATION_COUNT] = { + { + USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT, + g_UsbDeviceInterface2CicVcomInterfaces, /* The interfaces handle */ + }, +}; + +usb_device_class_struct_t g_UsbDeviceInterface2CicVcomConfig = { + g_UsbDeviceInterface2CicVcomInterfaceList, + kUSB_DeviceClassTypeCdc, + USB_DEVICE_CONFIGURATION_COUNT, +}; + +usb_device_interfaces_struct_t g_UsbDeviceInterface4CicVcomInterfaces[USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT] = { + { + USB_INTERFACE_4_CIC_VCOM_CLASS, + USB_INTERFACE_4_CIC_VCOM_SUBCLASS, + USB_INTERFACE_4_CIC_VCOM_PROTOCOL, + USB_INTERFACE_4_CIC_VCOM_INDEX, + g_UsbDeviceInterface4CicVcomInterface, /* Interfaces handle */ + sizeof(g_UsbDeviceInterface4CicVcomInterface) / sizeof(usb_device_interface_struct_t), + }, + { + USB_INTERFACE_5_DIC_VCOM_CLASS, + USB_INTERFACE_5_DIC_VCOM_SUBCLASS, + USB_INTERFACE_5_DIC_VCOM_PROTOCOL, + USB_INTERFACE_5_DIC_VCOM_INDEX, + g_UsbDeviceInterface5DicVcomInterface, /* Interfaces handle */ + sizeof(g_UsbDeviceInterface5DicVcomInterface) / sizeof(usb_device_interface_struct_t), + }, +}; + +usb_device_interface_list_t g_UsbDeviceInterface4CicVcomInterfaceList[USB_DEVICE_CONFIGURATION_COUNT] = { + { + USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT, + g_UsbDeviceInterface4CicVcomInterfaces, /* The interfaces handle */ + }, +}; + +usb_device_class_struct_t g_UsbDeviceInterface4CicVcomConfig = { + g_UsbDeviceInterface4CicVcomInterfaceList, + kUSB_DeviceClassTypeCdc, + USB_DEVICE_CONFIGURATION_COUNT, +}; + USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) uint8_t g_UsbDeviceDescriptor[] = { USB_DESCRIPTOR_LENGTH_DEVICE, /* Size of this descriptor in bytes */ @@ -188,8 +344,8 @@ USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) uint8_t g_UsbDeviceConfigurationDescriptor[] = { USB_DESCRIPTOR_LENGTH_CONFIGURE, /* Size of this descriptor in bytes */ USB_DESCRIPTOR_TYPE_CONFIGURE, /* CONFIGURATION Descriptor Type */ - USB_SHORT_GET_LOW(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), - USB_SHORT_GET_HIGH(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), /* Total length of data returned for this configuration. */ + USB_SHORT_GET_LOW(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), + USB_SHORT_GET_HIGH(USB_DESCRIPTOR_LENGTH_CONFIGURE + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT + USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC + USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT + USB_DESCRIPTOR_LENGTH_ENDPOINT), /* Total length of data returned for this configuration. */ USB_COMPOSITE_INTERFACE_COUNT, /* Number of interfaces supported by this configuration */ USB_COMPOSITE_CONFIGURATION_INDEX, /* Value to use as an argument to the SetConfiguration() request to select this configuration */ @@ -296,6 +452,178 @@ uint8_t g_UsbDeviceConfigurationDescriptor[] = { USB_SHORT_GET_LOW(FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE), USB_SHORT_GET_HIGH(FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE), FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_IAD_DESC_SIZE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, /* INTERFACE_ASSOCIATION Descriptor Type */ + USB_INTERFACE_2_CIC_VCOM_INDEX, /* The first interface number associated with this function */ + 2U, /* The number of contiguous interfaces associated with this function */ + USB_INTERFACE_2_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + + USB_INTERFACE_2_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + + USB_INTERFACE_2_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 2U, /* Function string descriptor index */ + + USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */ + USB_INTERFACE_2_CIC_VCOM_INDEX, /* Number of this interface. */ + USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting + for the interface identified in the prior field */ + USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this + interface setting (excluding endpoint zero). */ + USB_INTERFACE_2_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + USB_INTERFACE_2_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + USB_INTERFACE_2_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 0U, /* Index of string descriptor describing this interface */ + + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_HEADER_FUNC_DESC, + 0x10U, + 0x01U, /* USB Class Definitions for Communications the Communication specification version 1.10 */ + + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_CALL_MANAGEMENT_FUNC_DESC, + 0x01U, /*Bit 0: Whether device handle call management itself 1, Bit 1: Whether device can send/receive call + management information over a Data Class Interface 0 */ + USB_INTERFACE_3_DIC_VCOM_INDEX, /* Indicates multiplexed commands are handled via data interface */ + + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_ABSTRACT_CONTROL_FUNC_DESC, + 0x06U, /* Bit 0: Whether device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and + Get_Comm_Feature 0, Bit 1: Whether device supports the request combination of Set_Line_Coding, + Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State 1, Bit 2: Whether device + supports the request Send_Break, Bit 3: Whether device supports the notification Network_Connection */ + + USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_UNION_FUNC_DESC, + USB_INTERFACE_2_CIC_VCOM_INDEX, /* The interface number of the Communications or Data Class interface */ + USB_INTERFACE_3_DIC_VCOM_INDEX, /* Interface number of subordinate interface in the Union */ + + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_INTERRUPT, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE), + FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */ + USB_INTERFACE_3_DIC_VCOM_INDEX, /* Number of this interface. */ + USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting + for the interface identified in the prior field */ + USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this + interface setting (excluding endpoint zero). */ + USB_INTERFACE_3_DIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + USB_INTERFACE_3_DIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + USB_INTERFACE_3_DIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 0U, /* Index of string descriptor describing this interface */ + + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE), + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE), + FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_IAD_DESC_SIZE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, /* INTERFACE_ASSOCIATION Descriptor Type */ + USB_INTERFACE_4_CIC_VCOM_INDEX, /* The first interface number associated with this function */ + 2U, /* The number of contiguous interfaces associated with this function */ + USB_INTERFACE_4_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + + USB_INTERFACE_4_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + + USB_INTERFACE_4_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 2U, /* Function string descriptor index */ + + USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */ + USB_INTERFACE_4_CIC_VCOM_INDEX, /* Number of this interface. */ + USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting + for the interface identified in the prior field */ + USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this + interface setting (excluding endpoint zero). */ + USB_INTERFACE_4_CIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + USB_INTERFACE_4_CIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + USB_INTERFACE_4_CIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 0U, /* Index of string descriptor describing this interface */ + + USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_HEADER_FUNC_DESC, + 0x10U, + 0x01U, /* USB Class Definitions for Communications the Communication specification version 1.10 */ + + USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_CALL_MANAGEMENT_FUNC_DESC, + 0x01U, /*Bit 0: Whether device handle call management itself 1, Bit 1: Whether device can send/receive call + management information over a Data Class Interface 0 */ + USB_INTERFACE_5_DIC_VCOM_INDEX, /* Indicates multiplexed commands are handled via data interface */ + + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_ABSTRACT_CONTROL_FUNC_DESC, + 0x06U, /* Bit 0: Whether device supports the request combination of Set_Comm_Feature, Clear_Comm_Feature, and + Get_Comm_Feature 0, Bit 1: Whether device supports the request combination of Set_Line_Coding, + Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State 1, Bit 2: Whether device + supports the request Send_Break, Bit 3: Whether device supports the notification Network_Connection */ + + USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE, /* CS_INTERFACE Descriptor Type */ + USB_CDC_UNION_FUNC_DESC, + USB_INTERFACE_4_CIC_VCOM_INDEX, /* The interface number of the Communications or Data Class interface */ + USB_INTERFACE_5_DIC_VCOM_INDEX, /* Interface number of subordinate interface in the Union */ + + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_INTERRUPT, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE), + FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_DESCRIPTOR_LENGTH_INTERFACE, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_INTERFACE, /* INTERFACE Descriptor Type */ + USB_INTERFACE_5_DIC_VCOM_INDEX, /* Number of this interface. */ + USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX, /* Value used to select this alternate setting + for the interface identified in the prior field */ + USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT, /* Number of endpoints used by this + interface setting (excluding endpoint zero). */ + USB_INTERFACE_5_DIC_VCOM_CLASS, /* Class code (assigned by the USB-IF). */ + USB_INTERFACE_5_DIC_VCOM_SUBCLASS, /* Subclass code (assigned by the USB-IF). */ + USB_INTERFACE_5_DIC_VCOM_PROTOCOL, /* Protocol code (assigned by the USB). */ + 0U, /* Index of string descriptor describing this interface */ + + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE), + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL, /* Interval for polling endpoint for data transfers. */ + USB_DESCRIPTOR_LENGTH_ENDPOINT, /* Size of this descriptor in bytes */ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* ENDPOINT Descriptor Type */ + USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT), + /* The number of the endpoint on the USB device described by this descriptor. */ + USB_ENDPOINT_BULK, /* This field describes the endpoint's attributes */ + USB_SHORT_GET_LOW(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE), + USB_SHORT_GET_HIGH(FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE), + FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL, /* Interval for polling endpoint for data transfers. */ }; USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) @@ -308,7 +636,7 @@ uint8_t g_UsbDeviceString0[] = { USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) uint8_t g_UsbDeviceString1[] = { - 2U + 2U * 3U, + 2U + 2U * 18U, USB_DESCRIPTOR_TYPE_STRING, 'N', 0x00U, @@ -316,14 +644,66 @@ uint8_t g_UsbDeviceString1[] = { 0x00U, 'P', 0x00U, + ' ', + 0x00U, + 'S', + 0x00U, + 'e', + 0x00U, + 'm', + 0x00U, + 'i', + 0x00U, + 'c', + 0x00U, + 'o', + 0x00U, + 'n', + 0x00U, + 'd', + 0x00U, + 'u', + 0x00U, + 'c', + 0x00U, + 't', + 0x00U, + 'o', + 0x00U, + 'r', + 0x00U, + 's', + 0x00U, }; USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) uint8_t g_UsbDeviceString2[] = { - 2U + 2U * 4U, + 2U + 2U * 15U, USB_DESCRIPTOR_TYPE_STRING, + 'C', + 0x00U, + 'D', + 0x00U, + 'C', + 0x00U, + ' ', + 0x00U, 'V', 0x00U, + 'i', + 0x00U, + 'r', + 0x00U, + 't', + 0x00U, + 'u', + 0x00U, + 'a', + 0x00U, + 'l', + 0x00U, + ' ', + 0x00U, 'C', 0x00U, 'O', @@ -451,6 +831,30 @@ static usb_endpoint_setting_t getEndpointSetting (uint8_t speed, uint8_t alterna setting.interval = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL; setting.size = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE; break; + case USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION: + setting.interval = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL; + setting.size = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE; + break; + case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION: + setting.interval = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL; + setting.size = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE; + break; + case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION: + setting.interval = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL; + setting.size = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE; + break; + case USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION: + setting.interval = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL; + setting.size = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE; + break; + case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION: + setting.interval = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL; + setting.size = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE; + break; + case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION: + setting.interval = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL; + setting.size = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE; + break; } break; } @@ -474,6 +878,30 @@ static usb_endpoint_setting_t getEndpointSetting (uint8_t speed, uint8_t alterna setting.interval = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL; setting.size = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE; break; + case USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN | USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION: + setting.interval = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL; + setting.size = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE; + break; + case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION: + setting.interval = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL; + setting.size = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE; + break; + case USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT | USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION: + setting.interval = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL; + setting.size = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE; + break; + case USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN | USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION: + setting.interval = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL; + setting.size = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE; + break; + case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION: + setting.interval = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL; + setting.size = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE; + break; + case USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT | USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION: + setting.interval = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL; + setting.size = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE; + break; } break; } @@ -522,12 +950,24 @@ usb_status_t USB_DeviceSetSpeed(usb_device_handle handle, uint8_t speed) g_UsbDeviceInterface0CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_0_CIC_VCOM_SETTING_0_EP_1_INTERRUPT_IN_PACKET_SIZE; g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_2_BULK_IN_PACKET_SIZE; g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE; + g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE; + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE; + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE; + g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE; + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[0].maxPacketSize = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE; + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[1].maxPacketSize = HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE; } else { g_UsbDeviceInterface0CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_0_CIC_VCOM_SETTING_0_EP_1_INTERRUPT_IN_PACKET_SIZE; g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_2_BULK_IN_PACKET_SIZE; g_UsbDeviceInterface1DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_PACKET_SIZE; + g_UsbDeviceInterface2CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE; + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE; + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE; + g_UsbDeviceInterface4CicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE; + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[0].maxPacketSize = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE; + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[1].maxPacketSize = FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE; } return kStatus_USB_Success; diff --git a/source/generated/usb_device_descriptor.h b/source/generated/usb_device_descriptor.h index 249da63..e014463 100644 --- a/source/generated/usb_device_descriptor.h +++ b/source/generated/usb_device_descriptor.h @@ -115,6 +115,8 @@ /* Length of Abstract Control Management Functional Descriptor in bytes */ #define USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT (4U) #define USB_DESCRIPTOR_LENGTH_INTERFACE_0_CIC_VCOM_UNION_FUNC (5U) +#define USB_DESCRIPTOR_LENGTH_INTERFACE_2_CIC_VCOM_UNION_FUNC (5U) +#define USB_DESCRIPTOR_LENGTH_INTERFACE_4_CIC_VCOM_UNION_FUNC (5U) #define USB_DESCRIPTOR_TYPE_CDC_CS_INTERFACE (0x24U) #define USB_DESCRIPTOR_TYPE_CDC_CS_ENDPOINT (0x25U) @@ -155,6 +157,74 @@ #define FS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL (0U) #define HS_INTERFACE_1_DIC_VCOM_SETTING_0_EP_1_BULK_OUT_INTERVAL (0U) +#define USB_INTERFACE_2_CIC_VCOM_CLASS (0x02U) +#define USB_INTERFACE_2_CIC_VCOM_SUBCLASS (0x02U) +#define USB_INTERFACE_2_CIC_VCOM_PROTOCOL (0x00U) +#define USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT (2U) +#define USB_INTERFACE_2_CIC_VCOM_INDEX (2U) +#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (1U) +#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0 +#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN (3U) +#define USB_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN +#define FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE (16U) +#define HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_PACKET_SIZE (16U) +#define FS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL (8U) +#define HS_INTERFACE_2_CIC_VCOM_SETTING_0_EP_3_INTERRUPT_IN_INTERVAL (7U) + +#define USB_INTERFACE_3_DIC_VCOM_CLASS (0x0AU) +#define USB_INTERFACE_3_DIC_VCOM_SUBCLASS (0x00U) +#define USB_INTERFACE_3_DIC_VCOM_PROTOCOL (0x00U) +#define USB_INTERFACE_3_DIC_VCOM_INTERFACE_COUNT (1U) +#define USB_INTERFACE_3_DIC_VCOM_INDEX (3U) +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (2U) +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0 +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN (4U) +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN +#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE (64U) +#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_PACKET_SIZE (512U) +#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL (0U) +#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_4_BULK_IN_INTERVAL (0U) +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT (2U) +#define USB_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_OUT +#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE (64U) +#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_PACKET_SIZE (512U) +#define FS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL (0U) +#define HS_INTERFACE_3_DIC_VCOM_SETTING_0_EP_2_BULK_OUT_INTERVAL (0U) + +#define USB_INTERFACE_4_CIC_VCOM_CLASS (0x02U) +#define USB_INTERFACE_4_CIC_VCOM_SUBCLASS (0x02U) +#define USB_INTERFACE_4_CIC_VCOM_PROTOCOL (0x00U) +#define USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT (2U) +#define USB_INTERFACE_4_CIC_VCOM_INDEX (4U) +#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (1U) +#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0 +#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN (5U) +#define USB_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN +#define FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE (16U) +#define HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_PACKET_SIZE (16U) +#define FS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL (8U) +#define HS_INTERFACE_4_CIC_VCOM_SETTING_0_EP_5_INTERRUPT_IN_INTERVAL (7U) + +#define USB_INTERFACE_5_DIC_VCOM_CLASS (0x0AU) +#define USB_INTERFACE_5_DIC_VCOM_SUBCLASS (0x00U) +#define USB_INTERFACE_5_DIC_VCOM_PROTOCOL (0x00U) +#define USB_INTERFACE_5_DIC_VCOM_INTERFACE_COUNT (1U) +#define USB_INTERFACE_5_DIC_VCOM_INDEX (5U) +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_ENDPOINT_COUNT (2U) +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_DEFAULT_INDEX USB_ALTERNATE_SETTING_0 +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN (6U) +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN +#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE (64U) +#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_PACKET_SIZE (512U) +#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL (0U) +#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_6_BULK_IN_INTERVAL (0U) +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT (3U) +#define USB_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_DIRECTION USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_OUT +#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE (64U) +#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_PACKET_SIZE (512U) +#define FS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL (0U) +#define HS_INTERFACE_5_DIC_VCOM_SETTING_0_EP_3_BULK_OUT_INTERVAL (0U) + #define USB_DESCRIPTOR_LENGTH_CONFIGURATION_ALL (sizeof(g_UsbDeviceConfigurationDescriptor)) @@ -163,7 +233,7 @@ #define USB_DESCRIPTOR_LENGTH_STRING1 (sizeof(g_UsbDeviceString1)) #define USB_DESCRIPTOR_LENGTH_STRING2 (sizeof(g_UsbDeviceString2)) -#define USB_COMPOSITE_INTERFACE_COUNT (USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT) +#define USB_COMPOSITE_INTERFACE_COUNT (USB_INTERFACE_0_CIC_VCOM_INTERFACE_COUNT + USB_INTERFACE_2_CIC_VCOM_INTERFACE_COUNT + USB_INTERFACE_4_CIC_VCOM_INTERFACE_COUNT) /******************************************************************************* * API diff --git a/source/usb_device_interface_2_cic_vcom.c b/source/usb_device_interface_2_cic_vcom.c new file mode 100644 index 0000000..b97915f --- /dev/null +++ b/source/usb_device_interface_2_cic_vcom.c @@ -0,0 +1,540 @@ +/* + * Copyright 2015-2016, Freescale Semiconductor, Inc. + * Copyright 2016-2021 NXP + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "usb_device_config.h" +#include "usb.h" +#include "usb_device.h" + +#include "usb_device_class.h" +#include "usb_device_cdc_acm.h" + +#include "usb_device_ch9.h" +#include "usb_device_descriptor.h" + +#include "usb_device_composite.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Outgoing notification buffer number */ +#define USB_CIC_VCOM_IN_ENDPOINT (3) +/* Outgoing data buffer number */ +#define USB_DIC_VCOM_IN_ENDPOINT (4) +/* Outgoing data buffer index */ +#define USB_DIC_VCOM_IN_ENDPOINT_INDEX (0) +/* Incoming data buffer number */ +#define USB_DIC_VCOM_OUT_ENDPOINT (2) +/* Incoming data buffer index */ +#define USB_DIC_VCOM_OUT_ENDPOINT_INDEX (1) +/* Data packet size for High Speed */ +#define HS_DIC_VCOM_OUT_PACKET_SIZE (512) +/* Data packet size for Full Speed */ +#define FS_DIC_VCOM_OUT_PACKET_SIZE (64) + +#if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0) +#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE + +#endif +#if defined(USB_DEVICE_CONFIG_KHCI) && (USB_DEVICE_CONFIG_KHCI > 0) +#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE + +#endif +#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U) +#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE + +#endif + +#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U) +#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE +#endif + +/* Currently configured line coding */ +#define LINE_CODING_SIZE (0x07U) +#define LINE_CODING_DTERATE (115200U) +#define LINE_CODING_CHARFORMAT (0x00U) +#define LINE_CODING_PARITYTYPE (0x00U) +#define LINE_CODING_DATABITS (0x08U) + +/* Communications feature */ +#define COMM_FEATURE_DATA_SIZE (0x02U) +#define STATUS_ABSTRACT_STATE (0x0000U) +#define COUNTRY_SETTING (0x0000U) + +/* Notification of serial state */ +#define NOTIF_PACKET_SIZE (0x08U) +#define UART_BITMAP_SIZE (0x02U) +#define NOTIF_REQUEST_TYPE (0xA1U) + +/* Define the types for application */ +typedef struct _usb_cdc_vcom_struct +{ + class_handle_t cdcAcmHandle; /* USB CDC ACM class handle. */ + volatile uint8_t startTransactions; /* A flag to indicate whether a CDC device is ready to transmit and receive data. */ +} usb_cdc_vcom_struct_t; + +/* Define the information relates to abstract control model */ +typedef struct _usb_cdc_acm_info +{ + uint8_t serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE]; /* Serial state buffer of the CDC device to notify the + serial state to host. */ + bool dtePresent; /* A flag to indicate whether DTE is present. */ + uint16_t breakDuration; /* Length of time in milliseconds of the break signal */ + uint8_t dteStatus; /* Status of data terminal equipment */ + uint8_t currentInterface; /* Current interface index. */ + uint16_t uartState; /* UART state of the CDC device. */ +} usb_cdc_acm_info_t; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param); + +usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx); + +usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite); + +/******************************************************************************* + * Variables + ******************************************************************************/ + + +extern usb_device_endpoint_struct_t g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[]; + +/* Line coding of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_lineCoding[LINE_CODING_SIZE] = { + /* E.g. 0x00,0xC2,0x01,0x00 : 0x0001C200 is 115200 bits per second */ + (LINE_CODING_DTERATE >> 0U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 8U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 16U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 24U) & 0x000000FFU, + LINE_CODING_CHARFORMAT, + LINE_CODING_PARITYTYPE, + LINE_CODING_DATABITS}; + +/* Abstract state of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_abstractState[COMM_FEATURE_DATA_SIZE] = {(STATUS_ABSTRACT_STATE >> 0U) & 0x00FFU, + (STATUS_ABSTRACT_STATE >> 8U) & 0x00FFU}; + +/* Country code of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_countryCode[COMM_FEATURE_DATA_SIZE] = {(COUNTRY_SETTING >> 0U) & 0x00FFU, + (COUNTRY_SETTING >> 8U) & 0x00FFU}; + +/* CDC ACM information */ +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_acm_info_t s_usbCdcAcmInfo; +/* Data buffer for receiving and sending*/ +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currRecvBuf[DATA_BUFF_SIZE]; +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currSendBuf[DATA_BUFF_SIZE]; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_recvSize = 0; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_sendSize = 0; + +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_waitForDataReceive = 0; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_comOpen = 0; +#endif + +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_device_composite_struct_t *s_UsbDeviceComposite; +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_vcom_struct_t s_UsbInterface2CicVcom; + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * @brief Interface task function. + */ +void USB_DeviceInterface2CicVcomTask(void) +{ + usb_status_t error = kStatus_USB_Error; + if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions)) + { + /* User Code */ + if ((0 != s_recvSize) && (0xFFFFFFFFU != s_recvSize)) + { + int32_t i; + + /* Copy Buffer to Send Buff */ + for (i = 0; i < s_recvSize; i++) + { + s_currSendBuf[s_sendSize++] = s_currRecvBuf[i]; + } + s_recvSize = 0; + } + + if (s_sendSize) + { + uint32_t size = s_sendSize; + s_sendSize = 0; + + error = USB_DeviceCdcAcmSend(s_UsbInterface2CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, s_currSendBuf, size); + + if (error != kStatus_USB_Success) + { + /* Failure to send Data Handling code here */ + } + } +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + if ((s_waitForDataReceive)) + { + if (s_comOpen == 1) + { + /* Wait for all the packets been sent during opening the com port. Otherwise these packets may + * wake up the system. + */ + usb_echo("Waiting to enter lowpower ...\r\n"); + for (uint32_t i = 0U; i < 16000000U; ++i) + { + __ASM("NOP"); /* delay */ + } + + s_comOpen = 0; + } + usb_echo("Enter lowpower\r\n"); + BOARD_DbgConsole_Deinit(); + USB0->INTEN &= ~USB_INTEN_TOKDNEEN_MASK; + USB_EnterLowpowerMode(); + + s_waitForDataReceive = 0; + USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK; + BOARD_DbgConsole_Init(); + usb_echo("Exit lowpower\r\n"); + } +#endif + } +} + +/*! +* @brief Function that processes class specific events. +* +* @param handle Handle to USB device class. +* @param event Class event code. +* @param param The parameter of the class specific event. +* @return usb_status_t Status of USB transaction. +*/ +usb_status_t USB_DeviceInterface2CicVcomCallback(class_handle_t handle, uint32_t event, void *param) +{ + uint32_t len; + uint8_t *uartBitmap; + usb_device_cdc_acm_request_param_struct_t *acmReqParam; + usb_device_endpoint_callback_message_struct_t *epCbParam; + usb_status_t error = kStatus_USB_Error; + usb_cdc_acm_info_t *acmInfo = &s_usbCdcAcmInfo; + acmReqParam = (usb_device_cdc_acm_request_param_struct_t *)param; + epCbParam = (usb_device_endpoint_callback_message_struct_t *)param; + + switch (event) + { + case kUSB_DeviceCdcEventSendResponse: + { + if ((epCbParam->length != 0) && (!(epCbParam->length % g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_IN_ENDPOINT_INDEX].maxPacketSize))) + { + /* If the last packet is the size of endpoint, then send also zero-ended packet, + ** meaning that we want to inform the host that we do not have any additional + ** data, so it can flush the output. + */ + error = USB_DeviceCdcAcmSend(handle, USB_DIC_VCOM_IN_ENDPOINT, NULL, 0); + } + else if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions)) + { + if ((epCbParam->buffer != NULL) || ((epCbParam->buffer == NULL) && (epCbParam->length == 0))) + { + /* User: add your own code for send complete event */ + /* Schedule buffer for next receive event */ + error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; +#endif + } + } + else + { + } + } + break; + case kUSB_DeviceCdcEventRecvResponse: + { + if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface2CicVcom.startTransactions)) + { + s_recvSize = epCbParam->length; + +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 0; + USB0->INTEN |= USB_INTEN_SOFTOKEN_MASK; +#endif + if (!s_recvSize) + { + /* Schedule buffer for next receive event */ + error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; +#endif + } + } + } + break; + case kUSB_DeviceCdcEventSerialStateNotif: + ((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 0; + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSendEncapsulatedCommand: + break; + case kUSB_DeviceCdcEventGetEncapsulatedResponse: + break; + case kUSB_DeviceCdcEventSetCommFeature: + if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue) + { + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_abstractState; + } + else + { + *(acmReqParam->length) = 0; + } + } + else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue) + { + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_countryCode; + } + else + { + *(acmReqParam->length) = 0; + } + } + else + { + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventGetCommFeature: + if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue) + { + *(acmReqParam->buffer) = s_abstractState; + *(acmReqParam->length) = COMM_FEATURE_DATA_SIZE; + } + else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue) + { + *(acmReqParam->buffer) = s_countryCode; + *(acmReqParam->length) = COMM_FEATURE_DATA_SIZE; + } + else + { + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventClearCommFeature: + break; + case kUSB_DeviceCdcEventGetLineCoding: + *(acmReqParam->buffer) = s_lineCoding; + *(acmReqParam->length) = LINE_CODING_SIZE; + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSetLineCoding: + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_lineCoding; + } + else + { + *(acmReqParam->length) = 0; + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSetControlLineState: + { + s_usbCdcAcmInfo.dteStatus = acmReqParam->setupValue; + /* activate/deactivate Tx carrier */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION) + { + acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_TX_CARRIER; + } + else + { + acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_TX_CARRIER; + } + + /* activate carrier and DTE. Com port of terminal tool running on PC is open now */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) + { + acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_RX_CARRIER; + } + /* Com port of terminal tool running on PC is closed now */ + else + { + acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_RX_CARRIER; + } + + /* Indicates to DCE if DTE is present or not */ + acmInfo->dtePresent = (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) ? true : false; + + /* Initialize the serial state buffer */ + acmInfo->serialStateBuf[0] = NOTIF_REQUEST_TYPE; /* bmRequestType */ + acmInfo->serialStateBuf[1] = USB_DEVICE_CDC_NOTIF_SERIAL_STATE; /* bNotification */ + acmInfo->serialStateBuf[2] = 0x00; /* wValue */ + acmInfo->serialStateBuf[3] = 0x00; + acmInfo->serialStateBuf[4] = 0x00; /* wIndex */ + acmInfo->serialStateBuf[5] = 0x00; + acmInfo->serialStateBuf[6] = UART_BITMAP_SIZE; /* wLength */ + acmInfo->serialStateBuf[7] = 0x00; + /* Notify to host the line state */ + acmInfo->serialStateBuf[4] = acmReqParam->interfaceIndex; + /* Lower byte of UART BITMAP */ + uartBitmap = (uint8_t *)&acmInfo->serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE - 2]; + uartBitmap[0] = acmInfo->uartState & 0xFFu; + uartBitmap[1] = (acmInfo->uartState >> 8) & 0xFFu; + len = (uint32_t)(NOTIF_PACKET_SIZE + UART_BITMAP_SIZE); + if (0 == ((usb_device_cdc_acm_struct_t *)handle)->hasSentState) + { + error = USB_DeviceCdcAcmSend(handle, USB_CIC_VCOM_IN_ENDPOINT, acmInfo->serialStateBuf, len); + if (kStatus_USB_Success != error) + { + usb_echo("kUSB_DeviceCdcEventSetControlLineState error!"); + } + ((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 1; + } + + /* Update status */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION) + { + /* To do: CARRIER_ACTIVATED */ + } + else + { + /* To do: CARRIER_DEACTIVATED */ + } + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) + { + /* DTE_ACTIVATED */ + if (1 == s_UsbDeviceComposite->attach) + { + s_UsbInterface2CicVcom.startTransactions = 1; +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; + s_comOpen = 1; + usb_echo("USB_APP_CDC_DTE_ACTIVATED\r\n"); +#endif + } + } + else + { + /* DTE_DEACTIVATED */ + if (1 == s_UsbDeviceComposite->attach) + { + s_UsbInterface2CicVcom.startTransactions = 0; + } + } + } + break; + case kUSB_DeviceCdcEventSendBreak: + break; + default: + break; + } + + return error; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param handle Handle to USB device class. +* @param configuration_idx Id of device configuration. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface2CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx) +{ + /* Schedule buffer for receive */ + USB_DeviceCdcAcmRecv(s_UsbInterface2CicVcom.cdcAcmHandle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface3DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); + + return kStatus_USB_Success; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param class_handle_t Handle to USB device class. +* @param alternateSetting Id of device alternative setting. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface2CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting) +{ + return kStatus_USB_Success; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param class_handle_t Handle to USB device class. +* @param alternateSetting Id of device alternative setting. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface3DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting) +{ + return kStatus_USB_Success; +} + +/*! +* @brief Initializes device structure and buffer pointers. +* +* @param *device Pointer to structure to initialize to. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface2CicVcomInit(usb_device_composite_struct_t *deviceComposite) +{ + s_UsbDeviceComposite = deviceComposite; + s_UsbInterface2CicVcom.cdcAcmHandle = s_UsbDeviceComposite->interface2CicVcomHandle; + return kStatus_USB_Success; +} diff --git a/source/usb_device_interface_2_cic_vcom.h b/source/usb_device_interface_2_cic_vcom.h new file mode 100644 index 0000000..85b9918 --- /dev/null +++ b/source/usb_device_interface_2_cic_vcom.h @@ -0,0 +1,44 @@ +/* + * Copyright 2015-2016, Freescale Semiconductor, Inc. + * Copyright 2016-2021 NXP + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__ +#define __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @brief Interface task function. + */ +void USB_DeviceInterface2CicVcomTask(void); + +#endif /* __USB_DEVICE_INTERFACE_2_CIC_VCOM_H__ */ diff --git a/source/usb_device_interface_4_cic_vcom.c b/source/usb_device_interface_4_cic_vcom.c new file mode 100644 index 0000000..cdd0244 --- /dev/null +++ b/source/usb_device_interface_4_cic_vcom.c @@ -0,0 +1,540 @@ +/* + * Copyright 2015-2016, Freescale Semiconductor, Inc. + * Copyright 2016-2021 NXP + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "usb_device_config.h" +#include "usb.h" +#include "usb_device.h" + +#include "usb_device_class.h" +#include "usb_device_cdc_acm.h" + +#include "usb_device_ch9.h" +#include "usb_device_descriptor.h" + +#include "usb_device_composite.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Outgoing notification buffer number */ +#define USB_CIC_VCOM_IN_ENDPOINT (5) +/* Outgoing data buffer number */ +#define USB_DIC_VCOM_IN_ENDPOINT (6) +/* Outgoing data buffer index */ +#define USB_DIC_VCOM_IN_ENDPOINT_INDEX (0) +/* Incoming data buffer number */ +#define USB_DIC_VCOM_OUT_ENDPOINT (3) +/* Incoming data buffer index */ +#define USB_DIC_VCOM_OUT_ENDPOINT_INDEX (1) +/* Data packet size for High Speed */ +#define HS_DIC_VCOM_OUT_PACKET_SIZE (512) +/* Data packet size for Full Speed */ +#define FS_DIC_VCOM_OUT_PACKET_SIZE (64) + +#if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0) +#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE + +#endif +#if defined(USB_DEVICE_CONFIG_KHCI) && (USB_DEVICE_CONFIG_KHCI > 0) +#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE + +#endif +#if defined(USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS > 0U) +#define DATA_BUFF_SIZE FS_DIC_VCOM_OUT_PACKET_SIZE + +#endif + +#if defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U) +#define DATA_BUFF_SIZE HS_DIC_VCOM_OUT_PACKET_SIZE +#endif + +/* Currently configured line coding */ +#define LINE_CODING_SIZE (0x07U) +#define LINE_CODING_DTERATE (115200U) +#define LINE_CODING_CHARFORMAT (0x00U) +#define LINE_CODING_PARITYTYPE (0x00U) +#define LINE_CODING_DATABITS (0x08U) + +/* Communications feature */ +#define COMM_FEATURE_DATA_SIZE (0x02U) +#define STATUS_ABSTRACT_STATE (0x0000U) +#define COUNTRY_SETTING (0x0000U) + +/* Notification of serial state */ +#define NOTIF_PACKET_SIZE (0x08U) +#define UART_BITMAP_SIZE (0x02U) +#define NOTIF_REQUEST_TYPE (0xA1U) + +/* Define the types for application */ +typedef struct _usb_cdc_vcom_struct +{ + class_handle_t cdcAcmHandle; /* USB CDC ACM class handle. */ + volatile uint8_t startTransactions; /* A flag to indicate whether a CDC device is ready to transmit and receive data. */ +} usb_cdc_vcom_struct_t; + +/* Define the information relates to abstract control model */ +typedef struct _usb_cdc_acm_info +{ + uint8_t serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE]; /* Serial state buffer of the CDC device to notify the + serial state to host. */ + bool dtePresent; /* A flag to indicate whether DTE is present. */ + uint16_t breakDuration; /* Length of time in milliseconds of the break signal */ + uint8_t dteStatus; /* Status of data terminal equipment */ + uint8_t currentInterface; /* Current interface index. */ + uint16_t uartState; /* UART state of the CDC device. */ +} usb_cdc_acm_info_t; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param); + +usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx); + +usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting); + +usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite); + +/******************************************************************************* + * Variables + ******************************************************************************/ + + +extern usb_device_endpoint_struct_t g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[]; + +/* Line coding of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_lineCoding[LINE_CODING_SIZE] = { + /* E.g. 0x00,0xC2,0x01,0x00 : 0x0001C200 is 115200 bits per second */ + (LINE_CODING_DTERATE >> 0U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 8U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 16U) & 0x000000FFU, + (LINE_CODING_DTERATE >> 24U) & 0x000000FFU, + LINE_CODING_CHARFORMAT, + LINE_CODING_PARITYTYPE, + LINE_CODING_DATABITS}; + +/* Abstract state of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_abstractState[COMM_FEATURE_DATA_SIZE] = {(STATUS_ABSTRACT_STATE >> 0U) & 0x00FFU, + (STATUS_ABSTRACT_STATE >> 8U) & 0x00FFU}; + +/* Country code of cdc device */ +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_countryCode[COMM_FEATURE_DATA_SIZE] = {(COUNTRY_SETTING >> 0U) & 0x00FFU, + (COUNTRY_SETTING >> 8U) & 0x00FFU}; + +/* CDC ACM information */ +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_acm_info_t s_usbCdcAcmInfo; +/* Data buffer for receiving and sending*/ +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currRecvBuf[DATA_BUFF_SIZE]; +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static uint8_t s_currSendBuf[DATA_BUFF_SIZE]; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_recvSize = 0; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint32_t s_sendSize = 0; + +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_waitForDataReceive = 0; +USB_DMA_INIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) volatile static uint8_t s_comOpen = 0; +#endif + +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_device_composite_struct_t *s_UsbDeviceComposite; +USB_DMA_NONINIT_DATA_ALIGN(USB_DATA_ALIGN_SIZE) static usb_cdc_vcom_struct_t s_UsbInterface4CicVcom; + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * @brief Interface task function. + */ +void USB_DeviceInterface4CicVcomTask(void) +{ + usb_status_t error = kStatus_USB_Error; + if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions)) + { + /* User Code */ + if ((0 != s_recvSize) && (0xFFFFFFFFU != s_recvSize)) + { + int32_t i; + + /* Copy Buffer to Send Buff */ + for (i = 0; i < s_recvSize; i++) + { + s_currSendBuf[s_sendSize++] = s_currRecvBuf[i]; + } + s_recvSize = 0; + } + + if (s_sendSize) + { + uint32_t size = s_sendSize; + s_sendSize = 0; + + error = USB_DeviceCdcAcmSend(s_UsbInterface4CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, s_currSendBuf, size); + + if (error != kStatus_USB_Success) + { + /* Failure to send Data Handling code here */ + } + } +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + if ((s_waitForDataReceive)) + { + if (s_comOpen == 1) + { + /* Wait for all the packets been sent during opening the com port. Otherwise these packets may + * wake up the system. + */ + usb_echo("Waiting to enter lowpower ...\r\n"); + for (uint32_t i = 0U; i < 16000000U; ++i) + { + __ASM("NOP"); /* delay */ + } + + s_comOpen = 0; + } + usb_echo("Enter lowpower\r\n"); + BOARD_DbgConsole_Deinit(); + USB0->INTEN &= ~USB_INTEN_TOKDNEEN_MASK; + USB_EnterLowpowerMode(); + + s_waitForDataReceive = 0; + USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK; + BOARD_DbgConsole_Init(); + usb_echo("Exit lowpower\r\n"); + } +#endif + } +} + +/*! +* @brief Function that processes class specific events. +* +* @param handle Handle to USB device class. +* @param event Class event code. +* @param param The parameter of the class specific event. +* @return usb_status_t Status of USB transaction. +*/ +usb_status_t USB_DeviceInterface4CicVcomCallback(class_handle_t handle, uint32_t event, void *param) +{ + uint32_t len; + uint8_t *uartBitmap; + usb_device_cdc_acm_request_param_struct_t *acmReqParam; + usb_device_endpoint_callback_message_struct_t *epCbParam; + usb_status_t error = kStatus_USB_Error; + usb_cdc_acm_info_t *acmInfo = &s_usbCdcAcmInfo; + acmReqParam = (usb_device_cdc_acm_request_param_struct_t *)param; + epCbParam = (usb_device_endpoint_callback_message_struct_t *)param; + + switch (event) + { + case kUSB_DeviceCdcEventSendResponse: + { + if ((epCbParam->length != 0) && (!(epCbParam->length % g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_IN_ENDPOINT_INDEX].maxPacketSize))) + { + /* If the last packet is the size of endpoint, then send also zero-ended packet, + ** meaning that we want to inform the host that we do not have any additional + ** data, so it can flush the output. + */ + error = USB_DeviceCdcAcmSend(handle, USB_DIC_VCOM_IN_ENDPOINT, NULL, 0); + } + else if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions)) + { + if ((epCbParam->buffer != NULL) || ((epCbParam->buffer == NULL) && (epCbParam->length == 0))) + { + /* User: add your own code for send complete event */ + /* Schedule buffer for next receive event */ + error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; +#endif + } + } + else + { + } + } + break; + case kUSB_DeviceCdcEventRecvResponse: + { + if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface4CicVcom.startTransactions)) + { + s_recvSize = epCbParam->length; + +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 0; + USB0->INTEN |= USB_INTEN_SOFTOKEN_MASK; +#endif + if (!s_recvSize) + { + /* Schedule buffer for next receive event */ + error = USB_DeviceCdcAcmRecv(handle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; +#endif + } + } + } + break; + case kUSB_DeviceCdcEventSerialStateNotif: + ((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 0; + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSendEncapsulatedCommand: + break; + case kUSB_DeviceCdcEventGetEncapsulatedResponse: + break; + case kUSB_DeviceCdcEventSetCommFeature: + if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue) + { + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_abstractState; + } + else + { + *(acmReqParam->length) = 0; + } + } + else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue) + { + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_countryCode; + } + else + { + *(acmReqParam->length) = 0; + } + } + else + { + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventGetCommFeature: + if (USB_DEVICE_CDC_FEATURE_ABSTRACT_STATE == acmReqParam->setupValue) + { + *(acmReqParam->buffer) = s_abstractState; + *(acmReqParam->length) = COMM_FEATURE_DATA_SIZE; + } + else if (USB_DEVICE_CDC_FEATURE_COUNTRY_SETTING == acmReqParam->setupValue) + { + *(acmReqParam->buffer) = s_countryCode; + *(acmReqParam->length) = COMM_FEATURE_DATA_SIZE; + } + else + { + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventClearCommFeature: + break; + case kUSB_DeviceCdcEventGetLineCoding: + *(acmReqParam->buffer) = s_lineCoding; + *(acmReqParam->length) = LINE_CODING_SIZE; + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSetLineCoding: + if (1 == acmReqParam->isSetup) + { + *(acmReqParam->buffer) = s_lineCoding; + } + else + { + *(acmReqParam->length) = 0; + } + error = kStatus_USB_Success; + break; + case kUSB_DeviceCdcEventSetControlLineState: + { + s_usbCdcAcmInfo.dteStatus = acmReqParam->setupValue; + /* activate/deactivate Tx carrier */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION) + { + acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_TX_CARRIER; + } + else + { + acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_TX_CARRIER; + } + + /* activate carrier and DTE. Com port of terminal tool running on PC is open now */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) + { + acmInfo->uartState |= USB_DEVICE_CDC_UART_STATE_RX_CARRIER; + } + /* Com port of terminal tool running on PC is closed now */ + else + { + acmInfo->uartState &= (uint16_t)~USB_DEVICE_CDC_UART_STATE_RX_CARRIER; + } + + /* Indicates to DCE if DTE is present or not */ + acmInfo->dtePresent = (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) ? true : false; + + /* Initialize the serial state buffer */ + acmInfo->serialStateBuf[0] = NOTIF_REQUEST_TYPE; /* bmRequestType */ + acmInfo->serialStateBuf[1] = USB_DEVICE_CDC_NOTIF_SERIAL_STATE; /* bNotification */ + acmInfo->serialStateBuf[2] = 0x00; /* wValue */ + acmInfo->serialStateBuf[3] = 0x00; + acmInfo->serialStateBuf[4] = 0x00; /* wIndex */ + acmInfo->serialStateBuf[5] = 0x00; + acmInfo->serialStateBuf[6] = UART_BITMAP_SIZE; /* wLength */ + acmInfo->serialStateBuf[7] = 0x00; + /* Notify to host the line state */ + acmInfo->serialStateBuf[4] = acmReqParam->interfaceIndex; + /* Lower byte of UART BITMAP */ + uartBitmap = (uint8_t *)&acmInfo->serialStateBuf[NOTIF_PACKET_SIZE + UART_BITMAP_SIZE - 2]; + uartBitmap[0] = acmInfo->uartState & 0xFFu; + uartBitmap[1] = (acmInfo->uartState >> 8) & 0xFFu; + len = (uint32_t)(NOTIF_PACKET_SIZE + UART_BITMAP_SIZE); + if (0 == ((usb_device_cdc_acm_struct_t *)handle)->hasSentState) + { + error = USB_DeviceCdcAcmSend(handle, USB_CIC_VCOM_IN_ENDPOINT, acmInfo->serialStateBuf, len); + if (kStatus_USB_Success != error) + { + usb_echo("kUSB_DeviceCdcEventSetControlLineState error!"); + } + ((usb_device_cdc_acm_struct_t *)handle)->hasSentState = 1; + } + + /* Update status */ + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_CARRIER_ACTIVATION) + { + /* To do: CARRIER_ACTIVATED */ + } + else + { + /* To do: CARRIER_DEACTIVATED */ + } + if (acmInfo->dteStatus & USB_DEVICE_CDC_CONTROL_SIG_BITMAP_DTE_PRESENCE) + { + /* DTE_ACTIVATED */ + if (1 == s_UsbDeviceComposite->attach) + { + s_UsbInterface4CicVcom.startTransactions = 1; +#if defined(FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED) && (FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED > 0U) && \ + defined(USB_DEVICE_CONFIG_KEEP_ALIVE_MODE) && (USB_DEVICE_CONFIG_KEEP_ALIVE_MODE > 0U) && \ + defined(FSL_FEATURE_USB_KHCI_USB_RAM) && (FSL_FEATURE_USB_KHCI_USB_RAM > 0U) + s_waitForDataReceive = 1; + USB0->INTEN &= ~USB_INTEN_SOFTOKEN_MASK; + s_comOpen = 1; + usb_echo("USB_APP_CDC_DTE_ACTIVATED\r\n"); +#endif + } + } + else + { + /* DTE_DEACTIVATED */ + if (1 == s_UsbDeviceComposite->attach) + { + s_UsbInterface4CicVcom.startTransactions = 0; + } + } + } + break; + case kUSB_DeviceCdcEventSendBreak: + break; + default: + break; + } + + return error; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param handle Handle to USB device class. +* @param configuration_idx Id of device configuration. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface4CicVcomSetConfiguration(class_handle_t handle, uint8_t configuration_idx) +{ + /* Schedule buffer for receive */ + USB_DeviceCdcAcmRecv(s_UsbInterface4CicVcom.cdcAcmHandle, USB_DIC_VCOM_OUT_ENDPOINT, s_currRecvBuf, + g_UsbDeviceInterface5DicVcomSetting0DefaultEndpoints[USB_DIC_VCOM_OUT_ENDPOINT_INDEX].maxPacketSize); + + return kStatus_USB_Success; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param class_handle_t Handle to USB device class. +* @param alternateSetting Id of device alternative setting. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface4CicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting) +{ + return kStatus_USB_Success; +} + +/*! +* @brief Notifies application layer about set configuration event. +* +* @param class_handle_t Handle to USB device class. +* @param alternateSetting Id of device alternative setting. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface5DicVcomSetInterface(class_handle_t handle, uint8_t alternateSetting) +{ + return kStatus_USB_Success; +} + +/*! +* @brief Initializes device structure and buffer pointers. +* +* @param *device Pointer to structure to initialize to. +* @return usb_status_t Always return kStatus_USB_Success value. +*/ +usb_status_t USB_DeviceInterface4CicVcomInit(usb_device_composite_struct_t *deviceComposite) +{ + s_UsbDeviceComposite = deviceComposite; + s_UsbInterface4CicVcom.cdcAcmHandle = s_UsbDeviceComposite->interface4CicVcomHandle; + return kStatus_USB_Success; +} diff --git a/source/usb_device_interface_4_cic_vcom.h b/source/usb_device_interface_4_cic_vcom.h new file mode 100644 index 0000000..bd092df --- /dev/null +++ b/source/usb_device_interface_4_cic_vcom.h @@ -0,0 +1,44 @@ +/* + * Copyright 2015-2016, Freescale Semiconductor, Inc. + * Copyright 2016-2021 NXP + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__ +#define __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @brief Interface task function. + */ +void USB_DeviceInterface4CicVcomTask(void); + +#endif /* __USB_DEVICE_INTERFACE_4_CIC_VCOM_H__ */