status_t DbgConsole_Init()

in lib/nxp/utilities/fsl_debug_console.c [670:798]


status_t DbgConsole_Init(uint8_t instance, uint32_t baudRate, serial_port_type_t device, uint32_t clkSrcFreq)
{
    serial_manager_config_t serialConfig;
    serial_manager_status_t status = kStatus_SerialManager_Success;

#if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
    serial_port_uart_config_t uartConfig = {
        .instance     = instance,
        .clockRate    = clkSrcFreq,
        .baudRate     = baudRate,
        .parityMode   = kSerialManager_UartParityDisabled,
        .stopBitCount = kSerialManager_UartOneStopBit,
        .enableRx     = 1,
        .enableTx     = 1,
    };
#endif

#if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
    serial_port_usb_cdc_config_t usbCdcConfig = {
        .controllerIndex = (serial_port_usb_cdc_controller_index_t)instance,
    };
#endif

#if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
    serial_port_swo_config_t swoConfig = {
        .clockRate = clkSrcFreq,
        .baudRate  = baudRate,
        .port      = instance,
        .protocol  = kSerialManager_SwoProtocolNrz,
    };
#endif

#if (defined(SERIAL_PORT_TYPE_USBCDC_VIRTUAL) && (SERIAL_PORT_TYPE_USBCDC_VIRTUAL > 0U))
    serial_port_usb_cdc_virtual_config_t usbCdcVirtualConfig = {
        .controllerIndex = (serial_port_usb_cdc_virtual_controller_index_t)instance,
    };
#endif

    serialConfig.type = device;
#if defined(DEBUG_CONSOLE_TRANSFER_NON_BLOCKING)
    serialConfig.ringBuffer     = &s_debugConsoleState.readRingBuffer[0];
    serialConfig.ringBufferSize = DEBUG_CONSOLE_RECEIVE_BUFFER_LEN;
#endif

    if (kSerialPort_Uart == device)
    {
#if (defined(SERIAL_PORT_TYPE_UART) && (SERIAL_PORT_TYPE_UART > 0U))
        serialConfig.portConfig = &uartConfig;
#else
        status = kStatus_SerialManager_Error;
#endif
    }
    else if (kSerialPort_UsbCdc == device)
    {
#if (defined(SERIAL_PORT_TYPE_USBCDC) && (SERIAL_PORT_TYPE_USBCDC > 0U))
        serialConfig.portConfig = &usbCdcConfig;
#else
        status = kStatus_SerialManager_Error;
#endif
    }
    else if (kSerialPort_Swo == device)
    {
#if (defined(SERIAL_PORT_TYPE_SWO) && (SERIAL_PORT_TYPE_SWO > 0U))
        serialConfig.portConfig = &swoConfig;
#else
        status = kStatus_SerialManager_Error;
#endif
    }
    else if (kSerialPort_UsbCdcVirtual == device)
    {
#if (defined(SERIAL_PORT_TYPE_USBCDC_VIRTUAL) && (SERIAL_PORT_TYPE_USBCDC_VIRTUAL > 0U))
        serialConfig.portConfig = &usbCdcVirtualConfig;
#else
        status = kStatus_SerialManager_Error;
#endif
    }
    else
    {
        status = kStatus_SerialManager_Error;
    }

    if (kStatus_SerialManager_Error != status)
    {
        (void)memset(&s_debugConsoleState, 0, sizeof(s_debugConsoleState));

#if defined(DEBUG_CONSOLE_TRANSFER_NON_BLOCKING)
        s_debugConsoleState.writeRingBuffer.ringBufferSize = DEBUG_CONSOLE_TRANSMIT_BUFFER_LEN;
#endif

        s_debugConsoleState.serialHandle = (serial_handle_t)&s_debugConsoleState.serialHandleBuffer[0];
        status                           = SerialManager_Init(s_debugConsoleState.serialHandle, &serialConfig);

        assert(kStatus_SerialManager_Success == status);

        DEBUG_CONSOLE_CREATE_MUTEX_SEMAPHORE(s_debugConsoleReadSemaphore);
#if (defined(DEBUG_CONSOLE_RX_ENABLE) && (DEBUG_CONSOLE_RX_ENABLE > 0U))
        DEBUG_CONSOLE_CREATE_BINARY_SEMAPHORE(s_debugConsoleReadWaitSemaphore);
#endif

        {
            status =
                SerialManager_OpenWriteHandle(s_debugConsoleState.serialHandle,
                                              ((serial_write_handle_t)&s_debugConsoleState.serialWriteHandleBuffer[0]));
            assert(kStatus_SerialManager_Success == status);
#if defined(DEBUG_CONSOLE_TRANSFER_NON_BLOCKING)
            (void)SerialManager_InstallTxCallback(
                ((serial_write_handle_t)&s_debugConsoleState.serialWriteHandleBuffer[0]),
                DbgConsole_SerialManagerTxCallback, &s_debugConsoleState);
#endif
        }

#if (defined(DEBUG_CONSOLE_RX_ENABLE) && (DEBUG_CONSOLE_RX_ENABLE > 0U))
        {
            status =
                SerialManager_OpenReadHandle(s_debugConsoleState.serialHandle,
                                             ((serial_read_handle_t)&s_debugConsoleState.serialReadHandleBuffer[0]));
            assert(kStatus_SerialManager_Success == status);
#if defined(DEBUG_CONSOLE_TRANSFER_NON_BLOCKING)
            (void)SerialManager_InstallRxCallback(
                ((serial_read_handle_t)&s_debugConsoleState.serialReadHandleBuffer[0]),
                DbgConsole_SerialManagerRxCallback, &s_debugConsoleState);
#endif
        }
#endif

        g_serialHandle = s_debugConsoleState.serialHandle;
    }
    return (status_t)status;
}