/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

#ifdef _WFX_NOT_USED_USING_HAL_INSTEAD_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "em_bus.h"
#include "em_cmu.h"
#include "em_gpio.h"
#include "em_ldma.h"
#include "em_usart.h"
#include "gpiointerrupt.h"

/* Need Lwip stuff before rsi is included */
#include "wfx_host_events.h"

#include "FreeRTOS.h"
#include "event_groups.h"
#include "rsi_common_apis.h"
#include "rsi_data_types.h"
#include "rsi_error.h"
#include "rsi_nwk.h"
#include "rsi_socket.h"
#include "rsi_utils.h"
#include "rsi_wlan.h"
#include "rsi_wlan_apis.h"
#include "rsi_wlan_config.h"
#include "task.h"

#include "wfx_host_pinout.h"
#include "wfx_rsi.h"

/* The following stuff comes from hal/rsi_hal_mcu_interrupt.c */
static void (*rsi_intr_cb)(void);
/*********************************************************************
 * @fn  void rsi_hal_intr_config(void (*rsi_interrupt_handler)(void))
 * @brief
 *      get the hal intr configuration
 * @param[in]  rsi_interrupt_handler:
 * @return
 *      None
 ***********************************************************************/
void rsi_hal_intr_config(void (*rsi_interrupt_handler)(void))
{
    rsi_intr_cb = rsi_interrupt_handler;
}

/***********************************************************************
 * @fn  static void wfx_spi_wakeup_irq_callback(uint8_t irqNumber)
 * @brief
 *       end of stuff from hal/rsi_hal_mcu_interrupt.c
 * @param[in]  irqNumber:
 * @return  None
 * **********************************************************************/
static void wfx_spi_wakeup_irq_callback(uint8_t irqNumber)
{
    BaseType_t bus_task_woken;
    uint32_t interrupt_mask;

    if (irqNumber != SL_WFX_HOST_PINOUT_SPI_IRQ)
        return;
    // Get and clear all pending GPIO interrupts
    interrupt_mask = GPIO_IntGet();
    GPIO_IntClear(interrupt_mask);
    if (rsi_intr_cb)
        (*rsi_intr_cb)();
}

/***********************************************************************
 * @fn   static void wfx_host_gpio_init(void)
 * @brief
 *       function called when host gpio intialization
 * @param[in]  None
 * @return  None
 * **********************************************************************/
static void wfx_host_gpio_init(void)
{
    // Enable GPIO clock.
    CMU_ClockEnable(cmuClock_GPIO, true);

    // Configure WF200 reset pin.
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_RESET_PORT, SL_WFX_HOST_PINOUT_RESET_PIN, gpioModePushPull, PINOUT_CLEAR);
    // Configure WF200 WUP pin.
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_WUP_PORT, SL_WFX_HOST_PINOUT_WUP_PIN, gpioModePushPull, PINOUT_CLEAR);

    // GPIO used as IRQ.
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_SPI_WIRQ_PORT, SL_WFX_HOST_PINOUT_SPI_WIRQ_PIN, gpioModeInputPull, PINOUT_CLEAR);
    CMU_OscillatorEnable(cmuOsc_LFXO, true, true);

    // Set up interrupt based callback function - trigger on both edges.
    GPIOINT_Init();
    GPIO_ExtIntConfig(SL_WFX_HOST_PINOUT_SPI_WIRQ_PORT, SL_WFX_HOST_PINOUT_SPI_WIRQ_PIN, SL_WFX_HOST_PINOUT_SPI_IRQ, true, false,
                      true);
    GPIOINT_CallbackRegister(SL_WFX_HOST_PINOUT_SPI_IRQ, wfx_spi_wakeup_irq_callback);

    // Change GPIO interrupt priority (FreeRTOS asserts unless this is done here!)
    NVIC_SetPriority(GPIO_EVEN_IRQn, WFX_GPIO_NVIC_PRIORITY);
    NVIC_SetPriority(GPIO_ODD_IRQn, WFX_GPIO_NVIC_PRIORITY);
}

#define USART SL_WFX_HOST_PINOUT_SPI_PERIPHERAL

/***********************************************************************
 * @fn   static int sl_wfx_host_spi_set_config(void *usart)
 * @brief
 *       set the configuration of spi
 * @param[in]  usart:
 * @return  returns 0 if sucessful,
 *         -1 otherwise
 * **********************************************************************/
static int sl_wfx_host_spi_set_config(void * usart)
{
    int ret = -1;

    if (0)
    {
#if defined(USART0)
    }
    else if (usart == USART0)
    {
        usart_clock     = cmuClock_USART0;
        usart_tx_signal = dmadrvPeripheralSignal_USART0_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART0_RXDATAV;
        ret             = 0;
#endif
#if defined(USART1)
    }
    else if (usart == USART1)
    {
        usart_clock     = cmuClock_USART1;
        usart_tx_signal = dmadrvPeripheralSignal_USART1_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART1_RXDATAV;
        ret             = 0;
#endif
#if defined(USART2)
    }
    else if (usart == USART2)
    {
        usart_clock     = cmuClock_USART2;
        usart_tx_signal = dmadrvPeripheralSignal_USART2_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART2_RXDATAV;
        ret             = 0;
#endif
#if defined(USART3)
    }
    else if (usart == USART3)
    {
        usart_clock     = cmuClock_USART3;
        usart_tx_signal = dmadrvPeripheralSignal_USART3_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART3_RXDATAV;
        ret             = 0;
#endif
#if defined(USART4)
    }
    else if (usart == USART4)
    {
        usart_clock     = cmuClock_USART4;
        usart_tx_signal = dmadrvPeripheralSignal_USART4_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART4_RXDATAV;
        ret             = 0;
#endif
#if defined(USART5)
    }
    else if (usart == USART5)
    {
        usart_clock     = cmuClock_USART5;
        usart_tx_signal = dmadrvPeripheralSignal_USART5_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USART5_RXDATAV;
        ret             = 0;
#endif
#if defined(USARTRF0)
    }
    else if (usart == USARTRF0)
    {
        usart_clock     = cmuClock_USARTRF0;
        usart_tx_signal = dmadrvPeripheralSignal_USARTRF0_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USARTRF0_RXDATAV;
        ret             = 0;
#endif
#if defined(USARTRF1)
    }
    else if (usart == USARTRF1)
    {
        usart_clock     = cmuClock_USARTRF1;
        usart_tx_signal = dmadrvPeripheralSignal_USARTRF1_TXBL;
        usart_rx_signal = dmadrvPeripheralSignal_USARTRF1_RXDATAV;
        ret             = 0;
#endif
    }

    return ret;
}

/****************************************************************************
 * @fn  sl_status_t sl_wfx_host_init_bus(void)
 * @brief
 * Initialize SPI peripheral
 * @param[in] None
 * @return  returns SL_STATUS_OK if successful,
 *        SL_STATUS_FAIL otherwise
 *****************************************************************************/
sl_status_t sl_wfx_host_init_bus(void)
{
    int res;

    // Initialize and enable the USART
    USART_InitSync_TypeDef usartInit = USART_INITSYNC_DEFAULT;

    res = sl_wfx_host_spi_set_config(USART);
    if (res != SPI_CONFIG_SUCESS)
    {
        return SL_STATUS_FAIL;
    }

    spi_enabled        = true;
    dummy_tx_data      = 0;
    usartInit.baudrate = 36000000u;
    usartInit.msbf     = true;
    CMU_ClockEnable(cmuClock_HFPER, true);
    CMU_ClockEnable(cmuClock_GPIO, true);
    CMU_ClockEnable(usart_clock, true);
    USART_InitSync(USART, &usartInit);
    USART->CTRL |= (1u << _USART_CTRL_SMSDELAY_SHIFT);
    USART->ROUTELOC0 =
        (USART->ROUTELOC0 & ~(_USART_ROUTELOC0_TXLOC_MASK | _USART_ROUTELOC0_RXLOC_MASK | _USART_ROUTELOC0_CLKLOC_MASK)) |
        (SL_WFX_HOST_PINOUT_SPI_TX_LOC << _USART_ROUTELOC0_TXLOC_SHIFT) |
        (SL_WFX_HOST_PINOUT_SPI_RX_LOC << _USART_ROUTELOC0_RXLOC_SHIFT) |
        (SL_WFX_HOST_PINOUT_SPI_CLK_LOC << _USART_ROUTELOC0_CLKLOC_SHIFT);

    USART->ROUTEPEN = USART_ROUTEPEN_TXPEN | USART_ROUTEPEN_RXPEN | USART_ROUTEPEN_CLKPEN;
    GPIO_DriveStrengthSet(SL_WFX_HOST_PINOUT_SPI_CLK_PORT, gpioDriveStrengthStrongAlternateStrong);
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_SPI_TX_PORT, SL_WFX_HOST_PINOUT_SPI_TX_PIN, gpioModePushPull, PINOUT_CLEAR);
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_SPI_RX_PORT, SL_WFX_HOST_PINOUT_SPI_RX_PIN, gpioModeInput, PINOUT_CLEAR);
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_SPI_CLK_PORT, SL_WFX_HOST_PINOUT_SPI_CLK_PIN, gpioModePushPull, PINOUT_CLEAR);

    DMADRV_Init();
    DMADRV_AllocateChannel(&tx_dma_channel, NULL);
    DMADRV_AllocateChannel(&rx_dma_channel, NULL);
    GPIO_PinModeSet(SL_WFX_HOST_PINOUT_SPI_CS_PORT, SL_WFX_HOST_PINOUT_SPI_CS_PIN, gpioModePushPull, PINOUT_SET);
    USART->CMD = USART_CMD_CLEARRX | USART_CMD_CLEARTX;

    return SL_STATUS_OK;
}

/***********************************************************************
 * @fn   void wfx_rsidev_init(void)
 * @brief
 *       function called when driver rsidev intialization
 * @param[in]  None
 * @return  None
 * **********************************************************************/
void wfx_rsidev_init(void)
{
    wfx_host_gpio_init();
}
#endif /* _NOT_USED */
