~aleteoryx/muditaos

6aae5f500630044e8b8ec85ec7ec81fdfdb79b93 — Maciej Janicki 5 years ago 16996c9
[EGD-5101] Add flow control configuration for cellular

Fix flow control pin configuration in OS.
Turn on flow control for cellular modem.
M module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp => module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp +13 -6
@@ 9,6 9,7 @@
#include "../pit/pit.hpp"
#include "dma_config.h"
#include "fsl_cache.h"
#include "../../common/chip.hpp"
#include <common_data/EventStore.hpp>
#include <map>



@@ 99,6 100,8 @@ namespace bsp
        s_cellularConfig.rxIdleConfig  = kLPUART_IdleCharacter1;
        s_cellularConfig.enableTx      = false;
        s_cellularConfig.enableRx      = false;
        s_cellularConfig.enableTxCTS   = true;
        s_cellularConfig.enableRxRTS   = true;

        if (LPUART_Init(CELLULAR_UART_BASE, &s_cellularConfig, GetPerphSourceClock(PerphClock_LPUART)) !=
            kStatus_Success) {


@@ 109,12 112,14 @@ namespace bsp
        LPUART_EnableInterrupts(CELLULAR_UART_BASE, kLPUART_IdleLineInterruptEnable | kLPUART_RxDataRegFullFlag);
        LPUART_ClearStatusFlags(CELLULAR_UART_BASE, 0xFFFFFFFF);
        NVIC_ClearPendingIRQ(LPUART1_IRQn);
        NVIC_ClearPendingIRQ(GPIO1_Combined_0_15_IRQn);
        NVIC_SetPriority(GPIO1_Combined_0_15_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY);
        NVIC_SetPriority(LPUART1_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY);
        NVIC_EnableIRQ(GPIO1_Combined_0_15_IRQn);
        NVIC_EnableIRQ(LPUART1_IRQn);

        EnableRx();
        isInitialized = true;

    }

    void RT1051Cellular::SetSpeed(uint32_t portSpeed)


@@ 135,6 140,7 @@ namespace bsp
        DisableTx();

        NVIC_DisableIRQ(LPUART1_IRQn);
        NVIC_DisableIRQ(GPIO1_Combined_0_15_IRQn);
        LPUART_DisableInterrupts(CELLULAR_UART_BASE, kLPUART_IdleLineInterruptEnable | kLPUART_RxDataRegFullFlag);
        LPUART_ClearStatusFlags(CELLULAR_UART_BASE, 0xFFFFFFFF);
        NVIC_ClearPendingIRQ(LPUART1_IRQn);


@@ 330,7 336,7 @@ namespace bsp

        gpio_1->ConfPin(DriverGPIOPinParams{.dir      = DriverGPIOPinParams::Direction::Input,
                                            .irqMode  = DriverGPIOPinParams::InterruptMode::IntRisingOrFallingEdge,
                                            .defLogic = 1,
                                            .defLogic = 0,
                                            .pin = static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_1_CTS_PIN)});

        gpio_1->ConfPin(


@@ 353,8 359,8 @@ namespace bsp
        // OUTPUTS

        gpio_1->ConfPin(DriverGPIOPinParams{.dir      = DriverGPIOPinParams::Direction::Output,
                                            .irqMode  = DriverGPIOPinParams::InterruptMode::NoIntmode,
                                            .defLogic = 0,
                                            .irqMode  = DriverGPIOPinParams::InterruptMode::IntRisingOrFallingEdge,
                                            .defLogic = 1,
                                            .pin = static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_1_RTS_PIN)});

        gpio_1->ConfPin(DriverGPIOPinParams{.dir      = DriverGPIOPinParams::Direction::Output,


@@ 414,7 420,8 @@ namespace bsp
        ;
        // ENABLE INTERRUPTS

        gpio_1->EnableInterrupt(1 << static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_1_STATUS_PIN));
        gpio_1->EnableInterrupt(1 << static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_1_CTS_PIN) |
                                1 << static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_1_STATUS_PIN));
        gpio_2->EnableInterrupt(1 << static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_2_SIM_TRAY_INSERTED_PIN) |
                                1 << static_cast<uint32_t>(BoardDefinitions::CELLULAR_GPIO_2_RI_PIN));
    }


@@ 621,5 628,5 @@ namespace bsp
            }
        } // namespace ringIndicator

    }     // namespace cellular
    } // namespace cellular
} // namespace bsp

M module-bsp/board/rt1051/common/irq/irq_gpio.cpp => module-bsp/board/rt1051/common/irq/irq_gpio.cpp +5 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "irq_gpio.hpp"


@@ 73,6 73,10 @@ namespace bsp
                xHigherPriorityTaskWoken |= cellular::status::statusIRQhandler();
            }

            if (irq_mask & (1 << BSP_CELLULAR_UART_CTS_PIN)) {
                LOG_DEBUG("CELLULAR CTS IRQ!");
            }

            // Clear all IRQs
            GPIO_PortClearInterruptFlags(GPIO1, irq_mask);


M module-bsp/board/rt1051/common/pin_mux.c => module-bsp/board/rt1051/common/pin_mux.c +2 -3
@@ 1216,9 1216,8 @@ void PINMUX_InitCellular(void)

    IOMUXC_SetPinConfig(PINMUX_CELLULAR_UART_CTS,

                        PAD_CONFIG_SLEW_RATE_SLOW | PAD_CONFIG_DRIVER_STRENGTH_LVL_1 | PAD_CONFIG_SPEED_SLOW_50MHz |
                            PAD_CONFIG_PULL_KEEPER_ENABLED | PAD_CONFIG_SELECT_PULL | PAD_CONFIG_PULL_DOWN_100kOhm |
                            PAD_CONFIG_HYSTERESIS_DISABLED);
                        PAD_CONFIG_SLEW_RATE_SLOW | PAD_CONFIG_DRIVER_DISABLED | PAD_CONFIG_SPEED_SLOW_50MHz |
                            PAD_CONFIG_PULL_KEEPER_ENABLED | PAD_CONFIG_SELECT_PULL | PAD_CONFIG_PULL_DOWN_100kOhm);

    IOMUXC_SetPinConfig(PINMUX_CELLULAR_UART_RTS,


M module-bsp/board/rt1051/common/pin_mux.h => module-bsp/board/rt1051/common/pin_mux.h +2 -2
@@ 130,8 130,8 @@ extern "C"
 */
#define PINMUX_CELLULAR_UART_TX           IOMUXC_GPIO_AD_B0_12_LPUART1_TX
#define PINMUX_CELLULAR_UART_RX           IOMUXC_GPIO_AD_B0_13_LPUART1_RX
#define PINMUX_CELLULAR_UART_CTS          IOMUXC_GPIO_AD_B0_14_GPIO1_IO14
#define PINMUX_CELLULAR_UART_RTS          IOMUXC_GPIO_AD_B0_15_GPIO1_IO15
#define PINMUX_CELLULAR_UART_CTS          IOMUXC_GPIO_AD_B0_14_LPUART1_CTS_B
#define PINMUX_CELLULAR_UART_RTS          IOMUXC_GPIO_AD_B0_15_LPUART1_RTS_B
#define PINMUX_CELLULAR_AP_READY          IOMUXC_GPIO_B1_00_GPIO2_IO16
#define PINMUX_CELLULAR_RESET             IOMUXC_GPIO_B1_01_GPIO2_IO17
#define PINMUX_CELLULAR_PWRKEY            IOMUXC_GPIO_B1_02_GPIO2_IO18

M module-cellular/Modem/TS0710/TS0710.h => module-cellular/Modem/TS0710/TS0710.h +1 -1
@@ 275,7 275,7 @@ class TS0710
    ATParser *parser;

    int CloseMultiplexer();
    const static bool hardwareControlFlowEnable = false;
    static constexpr auto hardwareControlFlowEnable = true;

    bool searchForString(const std::vector<std::string> &response, std::string str)
    {