/**
 * \file
 * \brief sm6218模块例程
 * 
 * \internal
 * \par modification history:
 * - 1.00 25-04-15, first implementation.
 * \endinternal
 */

/**
 * \brief 开发接口：
 * 
 * \note 开发流程：配置模块通道采集，再获取对应通道温度值
 *                       
 */

#include "main.h"
#include <string.h>
#include <stdio.h>
#include "sm6218.h"

extern void ptintf_info(const char *);
extern void delay_ms(uint16_t);

#define CHAN_NUM 8

/**
 * \brief sm6218模块例程入口
 * 
 * \param[in] hi2c I2C设备
 * 
 * \retval  0 成功
 * \retval -1 失败 
 */
float      temp_date[CHAN_NUM] = {0};      //存放温度数据的缓存区
int sm6218_demo_entry(I2C_HandleTypeDef *hi2c)
{
    char       info[256] = {0};
    int        ret = 0;
    
    uint8_t    config_info[CHAN_NUM] = {0};    //存放8通道配置信息的缓存区
    uint8_t    cold_chip_num = 0x00;           //存放冷端芯片编号选择，编号8代表无冷端芯片
    int        i;
    uint8_t    speed_cfg     = 0x00;           //采样率设置，0x00=>3HZ,0x01=>10HZ

    /* 初始化一个sm6218设备 */
    zlg_sm6218_device_t sm6218_dev;
    sm6218_dev.hi2c = hi2c;       //I2C主机设备
    sm6218_dev.sm6218_addr = 0x49; //sm6218模块地址
    
    /* 配置模块8通道配置寄存器，这里默认配置8通道一样配置*/
    for(i = 0;i < CHAN_NUM;i++) {
        config_info[i] =  SM6218_CHAN_EN | SM6218_TYPE_T | SM6218_TEMP_RANGE_0 | SM6218_COLD_CHIP_TMP116 | cold_chip_num;
    }
    
    /* 配置模块8通道配置寄存器，这里默认配置8通道一样配置*/
    ret = sm6218_config_set(&sm6218_dev,config_info);
    if(ret < 0){
       return -1;
    }
    
    /* 配置模块采样率*/
    ret = sm6218_speed_set(&sm6218_dev,&speed_cfg);
    if(ret < 0){
       return -1;
    }
    
    while (1) {

        /* 获取通道1采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN1, &temp_date[0]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道2采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN2, &temp_date[1]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道3采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN3, &temp_date[2]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道4采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN4, &temp_date[3]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道5采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN5, &temp_date[4]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道6采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN6, &temp_date[5]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道7采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN7, &temp_date[6]);
        if(ret < 0){
            return -1;
        }
        /* 获取通道8采集到的温度数据 */
        ret = sm6218_get_temp(&sm6218_dev, SM6218_TEMP_ADDR, SM6218_CHAN8, &temp_date[7]);
        if(ret < 0){
            return -1;
        }
        
        /* 获取通道8采集到的温度数据,4字节示例*/
       // sm6218_get_temp_4b(&sm6218_dev, SM6218_TEMP_4B_ADDR, SM6218_CHAN8, &temp_date[7]) ;
        
        for (i = 0;i<8;i++) {
            // 输出温度值
            sprintf(info,"chanl%d temperature = %0.3f\n",i+1,temp_date[i]);
            ptintf_info(info);
        }
   
        delay_ms(2000);
        ptintf_info("\n\n");
    }
    return 0;
}

/** end of file **/