#ifndef _MATLAB_GPIO_H_
#define _MATLAB_GPIO_H_

#include "simstruc.h"
#include "stm32_matlab_conf.h"
//#include "mcu_wrapper_conf.h"

#ifdef STM32F1
/* дефайны для проверки конфигурации GPIO) */
#define GET_GPIO_CONF(_reg_, _pos_) \
((_pos_ < 8)?\
GET_BITS_FROM_REG(_reg_->CRL, GPIO_CRL_CNF0 << (_pos_<<2u),       (_pos_<<2u)+GPIO_CRL_CNF0_Pos):\
GET_BITS_FROM_REG(_reg_->CRH, GPIO_CRL_CNF0 << ((_pos_-8)<<2u),   ((_pos_-8)<<2u)+GPIO_CRL_CNF0_Pos) )

/* дефайны для проверки режима GPIO) */
#define GET_GPIO_MODE(_reg_, _pos_) \
((_pos_ < 8)?\
GET_BITS_FROM_REG(_reg_->CRL, GPIO_CRL_MODE0 << (_pos_<<2u),       (_pos_<<2u)+GPIO_CRL_MODE0_Pos):\
GET_BITS_FROM_REG(_reg_->CRH, GPIO_CRL_MODE0 << ((_pos_-8)<<2u),   ((_pos_-8)<<2u)+GPIO_CRL_MODE0_Pos) )
#endif

#ifdef STM32F4

/* дефайны для проверки конфигурации GPIO для STM32F4 */
#define GET_GPIO_CONF(_reg_, _pos_) \
    ((_reg_->MODER >> (_pos_ * 2u)) & 0x3u)  // возвращает только MODER

/* дефайны для проверки режима GPIO для STM32F4 */
#define GET_GPIO_MODE(_reg_, _pos_) \
    ((_reg_->MODER >> (_pos_ * 2u)) & GPIO_MODER_MODER0)

/* константы для совместимости с F1 - должны соответствовать значениям MODER */
#define GPIO_MODE_AF        0x2u  /* Alternate Function mode */

#endif

void Simulate_GPIO_BSRR(void);

#endif // _MATLAB_GPIO_H_