//
// Created by anonymous on 2026/5/24.
//

#ifndef VOILETTYPEDEF_H
#define VOILETTYPEDEF_H

#include "stm32f10x.h"

#define INTERRUPT_ENABLE    __set_PRIMASK(0);       //开启中断
#define INTERRUPT_DISABLE   __set_PRIMASK(1);       //关闭中断

typedef struct {
    GPIO_TypeDef *Periph;
    unsigned short GpioPin;
} GPIO_MAP_T;

// ==================== GPIOA 组 ====================
#ifdef GPIOA
#define GPIO0   {GPIOA, GPIO_Pin_0}
#define GPIO1   {GPIOA, GPIO_Pin_1}
#define GPIO2   {GPIOA, GPIO_Pin_2}
#define GPIO3   {GPIOA, GPIO_Pin_3}
#define GPIO4   {GPIOA, GPIO_Pin_4}
#define GPIO5   {GPIOA, GPIO_Pin_5}
#define GPIO6   {GPIOA, GPIO_Pin_6}
#define GPIO7   {GPIOA, GPIO_Pin_7}
#define GPIO8   {GPIOA, GPIO_Pin_8}
#define GPIO9   {GPIOA, GPIO_Pin_9}
#define GPIO10  {GPIOA, GPIO_Pin_10}
#define GPIO11  {GPIOA, GPIO_Pin_11}
#define GPIO12  {GPIOA, GPIO_Pin_12}
#define GPIO13  {GPIOA, GPIO_Pin_13}
#define GPIO14  {GPIOA, GPIO_Pin_14}
#define GPIO15  {GPIOA, GPIO_Pin_15}
#endif
#ifdef GPIOB
// ==================== GPIOB 组 ====================
#define GPIO16  {GPIOB, GPIO_Pin_0}
#define GPIO17  {GPIOB, GPIO_Pin_1}
#define GPIO18  {GPIOB, GPIO_Pin_2}
#define GPIO19  {GPIOB, GPIO_Pin_3}
#define GPIO20  {GPIOB, GPIO_Pin_4}
#define GPIO21  {GPIOB, GPIO_Pin_5}
#define GPIO22  {GPIOB, GPIO_Pin_6}
#define GPIO23  {GPIOB, GPIO_Pin_7}
#define GPIO24  {GPIOB, GPIO_Pin_8}
#define GPIO25  {GPIOB, GPIO_Pin_9}
#define GPIO26  {GPIOB, GPIO_Pin_10}
#define GPIO27  {GPIOB, GPIO_Pin_11}
#define GPIO28  {GPIOB, GPIO_Pin_12}
#define GPIO29  {GPIOB, GPIO_Pin_13}
#define GPIO30  {GPIOB, GPIO_Pin_14}
#define GPIO31  {GPIOB, GPIO_Pin_15}
#endif
#ifdef GPIOC
// ==================== GPIOC 组 ====================
#define GPIO32  {GPIOC, GPIO_Pin_0}
#define GPIO33  {GPIOC, GPIO_Pin_1}
#define GPIO34  {GPIOC, GPIO_Pin_2}
#define GPIO35  {GPIOC, GPIO_Pin_3}
#define GPIO36  {GPIOC, GPIO_Pin_4}
#define GPIO37  {GPIOC, GPIO_Pin_5}
#define GPIO38  {GPIOC, GPIO_Pin_6}
#define GPIO39  {GPIOC, GPIO_Pin_7}
#define GPIO40  {GPIOC, GPIO_Pin_8}
#define GPIO41  {GPIOC, GPIO_Pin_9}
#define GPIO42  {GPIOC, GPIO_Pin_10}
#define GPIO43  {GPIOC, GPIO_Pin_11}
#define GPIO44  {GPIOC, GPIO_Pin_12}
#define GPIO45  {GPIOC, GPIO_Pin_13}
#define GPIO46  {GPIOC, GPIO_Pin_14}
#define GPIO47  {GPIOC, GPIO_Pin_15}
#endif
#ifdef GPIOD
// ==================== GPIOD 组 ====================
#define GPIO48  {GPIOD, GPIO_Pin_0}
#define GPIO49  {GPIOD, GPIO_Pin_1}
#define GPIO50  {GPIOD, GPIO_Pin_2}
#define GPIO51  {GPIOD, GPIO_Pin_3}
#define GPIO52  {GPIOD, GPIO_Pin_4}
#define GPIO53  {GPIOD, GPIO_Pin_5}
#define GPIO54  {GPIOD, GPIO_Pin_6}
#define GPIO55  {GPIOD, GPIO_Pin_7}
#define GPIO56  {GPIOD, GPIO_Pin_8}
#define GPIO57  {GPIOD, GPIO_Pin_9}
#define GPIO58  {GPIOD, GPIO_Pin_10}
#define GPIO59  {GPIOD, GPIO_Pin_11}
#define GPIO60  {GPIOD, GPIO_Pin_12}
#define GPIO61  {GPIOD, GPIO_Pin_13}
#define GPIO62  {GPIOD, GPIO_Pin_14}
#define GPIO63  {GPIOD, GPIO_Pin_15}
#endif
#ifdef GPIOE
// ==================== GPIOE 组 ====================
#define GPIO64  {GPIOE, GPIO_Pin_0}
#define GPIO65  {GPIOE, GPIO_Pin_1}
#define GPIO66  {GPIOE, GPIO_Pin_2}
#define GPIO67  {GPIOE, GPIO_Pin_3}
#define GPIO68  {GPIOE, GPIO_Pin_4}
#define GPIO69  {GPIOE, GPIO_Pin_5}
#define GPIO70  {GPIOE, GPIO_Pin_6}
#define GPIO71  {GPIOE, GPIO_Pin_7}
#define GPIO72  {GPIOE, GPIO_Pin_8}
#define GPIO73  {GPIOE, GPIO_Pin_9}
#define GPIO74  {GPIOE, GPIO_Pin_10}
#define GPIO75  {GPIOE, GPIO_Pin_11}
#define GPIO76  {GPIOE, GPIO_Pin_12}
#define GPIO77  {GPIOE, GPIO_Pin_13}
#define GPIO78  {GPIOE, GPIO_Pin_14}
#define GPIO79  {GPIOE, GPIO_Pin_15}
#endif
#ifdef GPIOF
// ==================== GPIOF 组 ====================
#define GPIO80  {GPIOF, GPIO_Pin_0}
#define GPIO81  {GPIOF, GPIO_Pin_1}
#define GPIO82  {GPIOF, GPIO_Pin_2}
#define GPIO83  {GPIOF, GPIO_Pin_3}
#define GPIO84  {GPIOF, GPIO_Pin_4}
#define GPIO85  {GPIOF, GPIO_Pin_5}
#define GPIO86  {GPIOF, GPIO_Pin_6}
#define GPIO87  {GPIOF, GPIO_Pin_7}
#define GPIO88  {GPIOF, GPIO_Pin_8}
#define GPIO89  {GPIOF, GPIO_Pin_9}
#define GPIO90  {GPIOF, GPIO_Pin_10}
#define GPIO91  {GPIOF, GPIO_Pin_11}
#define GPIO92  {GPIOF, GPIO_Pin_12}
#define GPIO93  {GPIOF, GPIO_Pin_13}
#define GPIO94  {GPIOF, GPIO_Pin_14}
#define GPIO95  {GPIOF, GPIO_Pin_15}
#endif
#ifdef GPIOG
// ==================== GPIOG 组 ====================
#define GPIO96  {GPIOG, GPIO_Pin_0}
#define GPIO97  {GPIOG, GPIO_Pin_1}
#define GPIO98  {GPIOG, GPIO_Pin_2}
#define GPIO99  {GPIOG, GPIO_Pin_3}
#define GPIO100 {GPIOG, GPIO_Pin_4}
#define GPIO101 {GPIOG, GPIO_Pin_5}
#define GPIO102 {GPIOG, GPIO_Pin_6}
#define GPIO103 {GPIOG, GPIO_Pin_7}
#define GPIO104 {GPIOG, GPIO_Pin_8}
#define GPIO105 {GPIOG, GPIO_Pin_9}
#define GPIO106 {GPIOG, GPIO_Pin_10}
#define GPIO107 {GPIOG, GPIO_Pin_11}
#define GPIO108 {GPIOG, GPIO_Pin_12}
#define GPIO109 {GPIOG, GPIO_Pin_13}
#define GPIO110 {GPIOG, GPIO_Pin_14}
#define GPIO111 {GPIOG, GPIO_Pin_15}
#endif

#define GPIOEND {(GPIO_TypeDef *)0xFFFFFFFF, 0xFFFF}

typedef struct {
    USART_TypeDef *Periph;
    unsigned int Irqn;
} COM_MAP_T;

#ifdef USART1
#define COM0   {USART1,USART1_IRQn}
#endif
#ifdef USART2
#define COM1   {USART2,USART2_IRQn}
#endif
#ifdef USART3
#define COM2   {USART3,USART3_IRQn}
#endif
#ifdef UART4
#define COM3   {UART4,UART4_IRQn}
#endif
#define COM4   {UART5,UART5_IRQn}

#endif //VOILETTYPEDEF_H
