/********************************** (C) COPYRIGHT *******************************
 * File Name          : main.c
 * Author             : WCH
 * Version            : V1.1
 * Date               : 2020/08/06
 * Description        : 外设从机应用主函数及任务系统初始化
 *********************************************************************************
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * Attention: This software (modified or not) and binary are used for
 * microcontroller manufactured by Nanjing Qinheng Microelectronics.
 *******************************************************************************/

/******************************************************************************/
/* 头文件包含 */
#include "CONFIG.h"
#include "HAL.h"
#include "gattprofile.h"
#include "peripheral.h"

#include "bsp_flash.h"
#include "bsp_adc.h"

#include "bsp_key.h"

#include "bsp_beep_led_emv.h"

#include "bsp_i2c.h"

#include "log.h"
#include "bsp_uart.h"

#undef LOG_ENABLE
#define LOG_ENABLE 1

/*********************************************************************
 * GLOBAL TYPEDEFS
 */
__attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];

#if (defined(BLE_MAC)) && (BLE_MAC == TRUE)
const uint8_t MacAddr[6] = {0x84, 0xC2, 0xE4, 0x03, 0x02, 0x02};
#endif

/*********************************************************************
 * @fn      Main_Circulation
 *
 * @brief   主循环
 *
 * @return  none
 */
__HIGH_CODE
__attribute__((noinline)) void Main_Circulation()
{
    while (1)
    {
        TMOS_SystemProcess();
        BSP_UART1_TxLoop();
        if (GPIOB_ReadPortPin(GPIO_Pin_15) == 0)
        {
            // 12V_EN
            BOOST_EN;
            logDebug("BOOST_EN\n");

            // LED_R
            LED_R_ON;
            DelayMs(1000);
            logDebug("LED_R_ON\n");

            LED_ALL_OFF_DEINIT;
            DelayMs(1000);
            logDebug("LED_ALL_OFF_DEINIT\n");

            // BEEP
            BEEP_ON;
            DelayMs(1000);
            logDebug("BEEP_ON\n");
            BEEP_OFF_DEINIT;
            DelayMs(1000);
            logDebug("BEEP_OFF_DEINIT\n");

            // LED_G
            LED_G_ON;
            DelayMs(1000);
            logDebug("LED_G_ON\n");

            LED_ALL_OFF_DEINIT;
            DelayMs(1000);
            logDebug("LED_ALL_OFF_DEINIT\n");

            // LED_Y
            LED_Y_ON;
            DelayMs(1000);
            logDebug("LED_Y_ON\n");

            LED_ALL_OFF_DEINIT;
            DelayMs(1000);
            logDebug("LED_ALL_OFF_DEINIT\n");


            logDebug("Delay 6s\n");

            // EMV_CHARGE
            EMV_CHARGE_EN;
            logDebug("EMV_CHARGE_EN\n");

            DelayMs(1000);

            EMV_CHARGE_OFF_DEINIT;
            logDebug("EMV_CHARGE_OFF_DEINIT 500 ms\n");

            // EMV_CTRL
            EMV_ON;
            logDebug("EMV_ON\n");
            DelayMs(100);

            BOOST_OFF_DEINIT;
            BEEP_OFF_DEINIT;
            LED_ALL_OFF_DEINIT;
            EMV_CHARGE_OFF_DEINIT;
            EMV_OFF_DEINIT;
        }
    }
}

/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
int main(void)
{
#if (defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
    PWR_DCDCCfg(ENABLE);
#endif
    SetSysClock(CLK_SOURCE_PLL_60MHz);


#if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
#endif
#ifdef DEBUG
    // GPIOA_SetBits(bTXD1);
    // GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);

    // UART1_DefInit();

    // 改成1500000波特率了
    BSP_UART1_Init(1500000);
    // logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
    logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
    logError("中文测试 %2.2f", 123.456);

#endif

    DelayMs(1000 * 3);

    BOOST_OFF_DEINIT;
    BEEP_OFF_DEINIT;
    LED_ALL_OFF_DEINIT;
    EMV_CHARGE_OFF_DEINIT;
    EMV_OFF_DEINIT;

    BSP_KEY_Init();



    BSP_ADC_Init();
    CH59x_BLEInit();

    logDebug("%s\n", VER_LIB);
    uint8_t MacAddr[6];
    GetMACAddress(MacAddr);
    logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]);

    HAL_Init();
    GAPRole_PeripheralInit();
    Peripheral_Init();


    BSP_FLASH_Init();

    DelayMs(100);
    GXHTC3C_Init();

    Main_Circulation();
}

/******************************** endfile @ main ******************************/
