/**
* @file examples_driver_adc.c
* @author www.tuya.com
* @brief 一个简单的tkl adc接口使用演示程序，可以通过命令行执行
* @version 0.1
* @date 2022-05-20
*
* @copyright Copyright (c) tuya.inc 2022
*
*/

#include "tuya_cloud_types.h"
#include "tkl_adc.h"
#include "tal_log.h"
#include "tal_thread.h"
/***********************************************************
*************************micro define***********************
***********************************************************/
#define ADC_NUM       TUYA_ADC_NUM_5
#define ADC_CHANNEL   2

/***********************************************************
***********************typedef define***********************
***********************************************************/


/***********************************************************
***********************variable define**********************
***********************************************************/
STATIC TUYA_ADC_BASE_CFG_T sg_adc_cfg = {
    .ch_list.data = 1<<ADC_CHANNEL,
    .ch_nums = 1,    //adc Number of channel lists
    .width = 12,
    .mode = TUYA_ADC_CONTINUOUS,
    .type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,
    .conv_cnt = 1,
};

STATIC THREAD_HANDLE adc_hdl = NULL;

/***********************************************************
***********************function define**********************
***********************************************************/

/**
* @brief a thread int adc port and read the adc very 2 seconds
*
* @param[in] param:Task parameters
* @return none
*/
VOID app_adc_thread(INT_T argc, CHAR_T *argv[])
{
    TAL_PR_NOTICE("example_adc_play3");
    OPERATE_RET rt = OPRT_OK;
    INT32_T adc_value = 0;

    /* ADC 0 channel 2 init */
    TUYA_CALL_ERR_GOTO(tkl_adc_init(ADC_NUM, &sg_adc_cfg), __EXIT);

    for(;;){
        TAL_PR_NOTICE("example_adc_play4");
        TUYA_CALL_ERR_LOG(tkl_adc_read_voltage(ADC_NUM, ADC_CHANNEL, &adc_value));
        TAL_PR_DEBUG("ADC%d value = %d", ADC_NUM, adc_value);        
    }

    TUYA_CALL_ERR_LOG(tkl_adc_deinit(ADC_NUM));

__EXIT:
    return;
}

VOID_T example_adc_play(VOID_T)
{
    TAL_PR_NOTICE("example_adc_play2");
    THREAD_CFG_T thrd_param = {1024*6, THREAD_PRIO_3, "adc task"};
    tal_thread_create_and_start(&adc_hdl, NULL, NULL, app_adc_thread, NULL, &thrd_param);
    return;
}