#ifndef __MW_RTC_DEFINE__
#define __MW_RTC_DEFINE__


#include "public_diy.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

#define RTCTYPE_NULL        (0u)
#define RTCTYPE_PCF8563     (1u)
#define RTCTYPE_OTHER       (2u)

#define RTCTYPE_DEFINE         (RTCTYPE_NULL)


/* RTC GPIO definition */
/* RTC SCL */
#define RCC_GPIO_RTC_SCL	RCC_APB2Periph_GPIOA
#define GPIO_PORT_RTC_SCL   GPIOA
#define GPIO_PIN_RTC_SCL	GPIO_Pin_1
/* RTC SDA */
#define RCC_GPIO_RTC_SDA	RCC_APB2Periph_GPIOA
#define GPIO_PORT_RTC_SDA   GPIOA
#define GPIO_PIN_RTC_SDA	GPIO_Pin_0

/* RTC pin control */
/* SCL write pin state */
#define RTC_W_SCL(x)		GPIO_WriteBit(GPIO_PORT_RTC_SCL, GPIO_PIN_RTC_SCL, (BitAction)(x))
/* SDA write pin state */
#define RTC_W_SDA(x)		GPIO_WriteBit(GPIO_PORT_RTC_SDA, GPIO_PIN_RTC_SDA, (BitAction)(x))
/* get sda pin state */
#define GET_RTC_SDA_STATE()   GPIO_ReadInputDataBit(GPIO_PORT_RTC_SDA, GPIO_PIN_RTC_SDA)

// typedef enum
// {
//     e_rtcType_pcf8563 = 0,


//     // 总个数
//     e_rtcType_number
// }rtc_type_enum;

/* rtc时间信息 */
typedef struct
{
    uint8_t year;   // 年
    uint8_t month;  // 月
    uint8_t day;    // 日
    uint8_t week;   // 星期
    uint8_t hour;   // 时
    uint8_t minute; // 分
    uint8_t second; // 秒
}rtc_time_infor;

typedef struct
{
    // rtc类型 pcf8563等
    uint8_t rtc_type;
    // // 时间信息 年月日星期时分秒
    // rtc_time_infor time_infor;
    // rtc外设初始化程序
    uint8_t (*init)(void);
    // 重启程序，若返回值为0xFF则表示无重启功能，无效。
    uint8_t (*reboot)(void);
    // 获取rtc时间信息
    uint8_t (*get_rtc_time)(rtc_time_infor*);
    // 设置rtc的时间信息
    uint8_t (*set_rtc_time)(rtc_time_infor);
}rtc_drv_str;

// void rtc_gpio_init(void);
void rtc_SDA_as_output(void);

void rtc_SDA_as_input(void);

uint8_t rtc_is_SDA_as_openDrain_output(void);

uint8_t rtc_is_SDA_as_floating_input(void);

#endif
