/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.h
* @brief : Header for main.c file.
* This file contains the common defines of the application.
******************************************************************************
* @attention
*
*
© Copyright (c) 2021 STMicroelectronics.
* All rights reserved.
*
* 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"
#include "bme280.h"
#include "rtos.h"
#include "event-system.h"
#include "list_event.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 I2C_TX_Err: 1;
uint32_t I2C_RX_Err: 1;
uint32_t BME280: 1;
uint32_t _reserv: 25;
} Flag;
typedef union {
uint16_t u16; // element specifier for accessing whole u16
int16_t i16; // element specifier for accessing whole i16
struct {
#ifdef LITTLE_ENDIAN // Byte-order is little endian
uint8_t u8L; // element specifier for accessing low u8
uint8_t u8H; // element specifier for accessing high u8
#else // Byte-order is big endian
uint8_t u8H; // element specifier for accessing low u8
uint8_t u8L; // element specifier for accessing high u8
#endif
} s16; // element spec. for acc. struct with low or high u8
} nt16_t;
typedef union {
uint32_t u32; // element specifier for accessing whole u32
int32_t i32; // element specifier for accessing whole i32
struct {
#ifdef LITTLE_ENDIAN // Byte-order is little endian
uint16_t u16L; // element specifier for accessing low u16
uint16_t u16H; // element specifier for accessing high u16
#else // Byte-order is big endian
uint16_t u16H; // element specifier for accessing low u16
uint16_t u16L; // element specifier for accessing high u16
#endif
} s32; // element spec. for acc. struct with low or high u16
} nt32_t;
/* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
#define I2C_RET_OK (int8_t)0
#define I2C_RET_NACK (int8_t)-1
#define I2C_RET_ERR (int8_t)-2
/* 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
/* BTNs */
#define BTN_NUM 4
#define BTN1_PIN GPIO_IDR_ID8
#define BTN2_PIN GPIO_IDR_ID9
#define BTN3_PIN GPIO_IDR_ID10
#define BTN4_PIN GPIO_IDR_ID11
#define BTN_PORT GPIOA
#define BTN_PINS (BTN1_PIN | BTN2_PIN | BTN3_PIN | BTN4_PIN)
#define BTN1_STATE (BTN_PORT->IDR & BTN1_PIN)
#define BTN2_STATE (BTN_PORT->IDR & BTN2_PIN)
#define BTN3_STATE (BTN_PORT->IDR & BTN3_PIN)
#define BTN4_STATE (BTN_PORT->IDR & BTN4_PIN)
#define BTNS_STATE (BTN_PORT->IDR & BTN_PINS)
#define BTN_STATE(pin) (BTN_PORT->IDR & pin)
/* time constant in ms */
#define BTN_SCAN_PERIOD 10
#define BTN_SCAN_PAUSE 200
#define BTN_TIME_PRESSED 30
#define BTN_TIME_HOLDED 500
#define BTN_TIME_REPEATED 50
typedef struct {
uint8_t time;
es_event_t pressed;
es_event_t holded;
uint32_t pin;
//(GPIO_TypeDef *) GPIOA; // ?->IDR
} btn_t;
/* USER CODE END Private defines */
#ifdef __cplusplus
}
#endif
#endif /* __MAIN_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/