/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32g0xx_ll_dma.h"
#include "stm32g0xx.h"
#include "stm32g0xx_ll_i2c.h"
#include "stm32g0xx_ll_rcc.h"
#include "stm32g0xx_ll_bus.h"
#include "stm32g0xx_ll_system.h"
#include "stm32g0xx_ll_exti.h"
#include "stm32g0xx_ll_cortex.h"
#include "stm32g0xx_ll_utils.h"
#include "stm32g0xx_ll_pwr.h"
#include "stm32g0xx_ll_spi.h"
#include "stm32g0xx_ll_tim.h"
#include "stm32g0xx_ll_gpio.h"

#if defined(USE_FULL_ASSERT)
#include "stm32_assert.h"
#endif /* USE_FULL_ASSERT */

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "gpio.h"
#include "ds3231.h"

/* USER CODE END Includes */

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */
typedef enum {
  DOWN = 0,
  UP = 1
} updown_t;

typedef enum {
  OFF = 0,
  ON = 1
} onoff_t;

volatile struct {
  uint32_t RTC_IRQ:     1;
  uint32_t SPI_TX_End:  1;
  uint32_t I2C_TX_End:  1;
  uint32_t I2C_RX_End:  1;
  uint32_t _reserv:    28;
} Flag;

/* USER CODE END ET */

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */

/* USER CODE END EC */

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
#define LATCH_DOWN    GPIOA->BRR = 0x8000
#define LATCH_UP      GPIOA->BSRR = 0x8000

#define TUBE_PWR_ON   GPIOA->BRR = 0x10
#define TUBE_PWR_OFF  GPIOA->BSRR = 0x10

#define IN15_P        GPIOA->BSRR = 0x1
#define IN15_Plus     GPIOA->BSRR = 0x2
#define IN15_Minus    GPIOA->BSRR = 0x4
#define IN15_Percent  GPIOA->BSRR = 0x8
#define IN15_OFF      GPIOA->BRR = 0xF

#define COLOR_R(x)          TIM3->CCR1 = x
#define COLOR_B(x)          TIM3->CCR2 = x
#define COLOR_G(x)          TIM3->CCR3 = x
#define COLOR_RGB(r, g, b)  TIM3->CCR1 = r; TIM3->CCR3 = g; TIM3->CCR2 = b

/* USER CODE END EM */

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

/* USER CODE BEGIN EFP */

/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define LC0_Pin LL_GPIO_PIN_0
#define LC0_GPIO_Port GPIOA
#define LC1_Pin LL_GPIO_PIN_1
#define LC1_GPIO_Port GPIOA
#define LC2_Pin LL_GPIO_PIN_2
#define LC2_GPIO_Port GPIOA
#define LC3_Pin LL_GPIO_PIN_3
#define LC3_GPIO_Port GPIOA
#define SHDN_Pin LL_GPIO_PIN_4
#define SHDN_GPIO_Port GPIOA
#define PWM_R_Pin LL_GPIO_PIN_6
#define PWM_R_GPIO_Port GPIOA
#define PWM_G_Pin LL_GPIO_PIN_7
#define PWM_G_GPIO_Port GPIOA
#define PWM_B_Pin LL_GPIO_PIN_0
#define PWM_B_GPIO_Port GPIOB
#define PWM_T_Pin LL_GPIO_PIN_1
#define PWM_T_GPIO_Port GPIOB
#define BTN1_Pin LL_GPIO_PIN_8
#define BTN1_GPIO_Port GPIOA
#define BTN2_Pin LL_GPIO_PIN_9
#define BTN2_GPIO_Port GPIOA
#define BTN3_Pin LL_GPIO_PIN_10
#define BTN3_GPIO_Port GPIOA
#define BTN4_Pin LL_GPIO_PIN_11
#define BTN4_GPIO_Port GPIOA
#define Latch_Pin LL_GPIO_PIN_15
#define Latch_GPIO_Port GPIOA
#define IRQ_Pin LL_GPIO_PIN_8
#define IRQ_GPIO_Port GPIOB
#define IRQ_EXTI_IRQn EXTI4_15_IRQn
/* USER CODE BEGIN Private defines */
#define USE_FULL_LL_DRIVER 1

/* 0xd0 */
#define I2C_ADDR_RTC      (0x68 << 1)
/* 0x76 */
#define I2C_ADDR_BME      (0x3b << 1)

/* USER CODE END Private defines */

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
