/**
 * @file	   map_hal.c
 *
 * @copyright  Nehemis SARL reserves all rights even in the event of industrial
 *             property rights. We reserve all rights of disposal such as
 *             copying and passing on to third parties.
 *
 * @brief	   Mapping of the hardware interfaces.
 *
 */

/******************************************************************************
 * Include Header Files
 ******************************************************************************/
#include "nms_types.h"
#include "map_hal.h"
#include "stm32g4xx_hal_tim.h"
/******************************************************************************
 * Macro constant declarations
 ******************************************************************************/
extern TIM_HandleTypeDef htim7;
/******************************************************************************
 * Extern Function Declarations
 ******************************************************************************/
uint32 MapHalGpio( MapHalGpioPin_en pin_en, uint16* targetPin_pu16,  GPIO_TypeDef** targetPort_ppst)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if(targetPin_pu16 == NULL || targetPort_ppst == NULL)
    {
        error_u32 = NMS_ERR_UNKNOWN;
    }
    else
    {
        switch (pin_en)
        {
        case MAP_HAL_PMP_ENABLE:

            *targetPin_pu16     = GPIO_PIN_15;
            *targetPort_ppst    = GPIOB;
            error_u32           = NMS_ERR_NONE;

            break;

        default:

            error_u32 = NMS_ERR_UNKNOWN;

            break;
        }
    }

    return error_u32;
}


uint32 MapHalGpioCallback(uint16 targetPin_u16, MapHalGpioPin_en * pin_pen)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    switch (targetPin_u16)
    {
    case GPIO_PIN_15:

        *pin_pen  = MAP_HAL_PMP_ENABLE;
        error_u32 = NMS_ERR_NONE;

        break;

    default:

        error_u32 = NMS_ERR_UNKNOWN;

        break;
    }

    return error_u32;
}


uint32 MapHalTimerModule(MapHalTimerModule_en timer_en, TIM_HandleTypeDef ** targetModule_ppst)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if(targetModule_ppst != NULL)
    {
        switch(timer_en)
        {
            case MAP_HAL_TIMER_RTOS:
                *targetModule_ppst = &htim17;
                error_u32 = NMS_ERR_NONE;
                break;

            case MAP_HAL_TIMER_FILTER:
				*targetModule_ppst = &htim6;
				error_u32 = NMS_ERR_NONE;
				break;

            default:
                error_u32 = NMS_ERR_UNKNOWN;
                break;
        }
    }
    else
    {
        error_u32 = NMS_ERR_UNKNOWN;
    }

    return error_u32;
}


uint32 MapHalTimerCallback(TIM_HandleTypeDef ** targetModule_ppst, MapHalTimerModule_en * timer_pen)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if(*targetModule_ppst != NULL)
    {
        if (*targetModule_ppst == &htim17)
        {
            *timer_pen = MAP_HAL_TIMER_RTOS;
            error_u32  = NMS_ERR_NONE;
        }
        else if (*targetModule_ppst == &htim6)
        {
            *timer_pen = MAP_HAL_TIMER_FILTER;
            error_u32  = NMS_ERR_NONE;
        }

    }
    else
    {
        error_u32 = NMS_ERR_UNKNOWN;
    }

    return error_u32;
}


uint32 MapHalAdcModule(MapHalAdcModule_en adc_en, ADC_HandleTypeDef ** targetModule_ppst)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if(targetModule_ppst != NULL)
    {
        switch(adc_en)
        {
            case MAP_HAL_ADC_1:
                *targetModule_ppst = &hadc1;
                error_u32 = NMS_ERR_NONE;
                break;


            default:
            	error_u32 = NMS_ERR_UNKNOWN;
                break;
        }
    }
    else
    {
    	error_u32 = NMS_ERR_UNKNOWN;
    }

    return error_u32;
}


extern uint32 MapHalAdcCallback(ADC_HandleTypeDef *targetModule_pst, MapHalAdcModule_en *adcModule_en)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if (targetModule_pst != NULL)
    {
        if (targetModule_pst == &hadc1)
        {
            *adcModule_en = MAP_HAL_ADC_1;
            error_u32 = NMS_ERR_NONE;
        }
        else
        {
            error_u32 = NMS_ERR_UNKNOWN;
        }
    }
    else
    {
        error_u32 = NMS_ERR_UNKNOWN;
    }

    return error_u32;
}


uint32 MapHalI2cModule(MapHalI2cModule_en module_en, I2C_HandleTypeDef ** targetModule_ppst)
{
    uint32 error_u32 = NMS_ERR_DEFAULT;

    if(targetModule_ppst != NULL)
    {
        switch(module_en)
        {
            case MAP_HAL_GRUNDFOS_PMP_I2C_HANDLE:
                *targetModule_ppst = &hi2c4;
                error_u32 = NMS_ERR_NONE;
                break;


            default:
            	error_u32 = NMS_ERR_UNKNOWN;
                break;
        }
    }
    else
    {
    	error_u32 = NMS_ERR_UNKNOWN;
    }

    return error_u32;
}
