/*******************************************************************************
*
*
* File:         demo_hal_swire.c
* Description： swire demo code
* Version：      V0.1
* Date：         2023-07-27
* Author：       jaya
 *******************************************************************************/

/*******************************************************************************
* 1.Included files
*******************************************************************************/
#include "stdarg.h"
#include "stdlib.h"
#include "stdio.h"
#include "test_cfg_global.h"
#include "hal_swire.h"
#include "hal_gpio.h"
#include "tau_log.h"
#include "tau_delay.h"
#include "demo_hal_swire.h"

#if _MODULE_DEMO_SWIRE_EN
/*******************************************************************************
* 2.Global constant and macro definitions using #define
*******************************************************************************/
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "demo_hal_swire"

/*******************************************************************************
* 3.Global function and Global variable declarations
*******************************************************************************/

/*******************************************************************************
* 4.Global variable extern declarations
*******************************************************************************/

/*******************************************************************************
* 5.Global function prototypes
*******************************************************************************/
/**
* @brief  swire 手动产生波形 demo
* @param
* @retval bool true/false
*/
static bool demo_hal_swire_gen_swire_manual(void)
{
    /* 配置PIN15为SWIRE 输出*/
    hal_gpio_set_mode(IO_PAD_AP_SWIRE, PIN15_MODE_SWIRE);
    /* swire 初始化 */
    hal_swire_init();
    /* 启动swire, Swire引脚信号拉高 */
    hal_swire_enable(true);
    delayMs(100);
    /* 配置pulse 为36,产生36个脉冲波形后保持拉高 */
    hal_swire_set_pulse(36);
    delayMs(100);
    /* 配置pulse 为25,产生25个脉冲波形后保持拉高 */
    hal_swire_set_pulse(25);
    delayMs(100);
    /* 关闭swire, Swire引脚信号拉低 */
    hal_swire_enable(false);
    /* swire去初始化     */
    hal_swire_deinit();
    return true;
}

/**
* @brief  swire 自动产生波形 demo
* @param
* @retval bool true/false
*/
static bool demo_hal_swire_gen_swire_auto(void)
{
    /* 配置PIN15为SWIRE 输出*/
    hal_gpio_set_mode(IO_PAD_AP_SWIRE, PIN15_MODE_SWIRE);
    /* swire 初始化 */
    hal_swire_init();
    hal_swire_set_timer(TIMER_NUM0, 16, true);

    /* 启动swire, Swire引脚信号拉高,每个16ms发送一次swire信号 */
    hal_swire_enable(true);

    /*保持每16ms输出36个脉冲，持续100ms*/
    hal_swire_set_pulse(36);     /* 使用timer情况下pulse配置为0时实际输出255个脉冲, 可以在enable之前或者enable前后配置发送正确波形,消除255脉冲问题 */
    delayMs(100);

    /* 配置pulse 为25,保持每16ms输出36个脉冲，持续100ms */
    hal_swire_set_pulse(25);

    /* 关闭swire, Swire引脚信号拉低 */
    hal_swire_enable(false);
    /* swire去初始化     */
    hal_swire_deinit();
    return true;
}

/**
* @brief  swire 配置波形形状demo
* @param
* @retval bool true/false
*/
static bool demo_hal_swire_set_swire_waveform(void)
{
    /* 配置PIN15为SWIRE 输出*/
    hal_gpio_set_mode(IO_PAD_AP_SWIRE, PIN15_MODE_SWIRE);
    /* swire 初始化 */
    hal_swire_init();
    /* 配置波形,持续时间50us */
    hal_swire_set_waveform(50, 50, 50, 50);
    /* 启动swire, Swire引脚信号拉高 */
    hal_swire_enable(true);
    delayMs(100);
    /* 配置pulse 为36,产生36个脉冲波形后保持拉高 */
    hal_swire_set_pulse(36);
    delayMs(100);
    /* 关闭swire, Swire引脚信号拉低 */
    hal_swire_enable(false);
    /* swire去初始化     */
    hal_swire_deinit();
    return true;
}


/**
* @brief  swire demo case
* @param  none
* @retval none
*/
void demo_hal_swire(void)
{
    TAU_LOGD("swire dmeo \n");
    demo_hal_swire_gen_swire_manual();
    //demo_hal_swire_gen_swire_auto();
    //demo_hal_swire_set_swire_waveform();
}
#endif
