159 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			159 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef _IOT_EM_EXT_H_
							 | 
						||
| 
								 | 
							
								#define _IOT_EM_EXT_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "os_lock_api.h"
							 | 
						||
| 
								 | 
							
								#include "os_timer_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_cal_data.h"
							 | 
						||
| 
								 | 
							
								#include "iot_em_ext_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_em_ext_calibration.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MODULE_ID                IOT_EM_EXT_MODULE_ATT7022
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_TIMER_PERIOD_MS          1000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_EM_EXT_MODULE_ID == IOT_EM_EXT_MODULE_ATT7022)
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_CALI_PARA_LEN            IOT_EM_EXT_ATT_CALI_PARA_LEN
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_CALI_PARA_LEN            0
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* msg_type has assigned in register function,
							 | 
						||
| 
								 | 
							
								 * msg_id can be made of module part and func part.
							 | 
						||
| 
								 | 
							
								 * we make module part in msg_id's high 8 bit, max module(255),
							 | 
						||
| 
								 | 
							
								 * func part in msg_id low 8 bit, max func id(255)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								/* em ext message id's module part */
							 | 
						||
| 
								 | 
							
								/* module part of calibration */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MSG_ID_MODULE_CALI           1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* em ext message id's function part */
							 | 
						||
| 
								 | 
							
								/* function part of calibration start */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MSG_ID_FUNC_CALI_START       1
							 | 
						||
| 
								 | 
							
								/* function part of calibration timer out */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MSG_ID_FUNC_CALI_TIMEOUT     2
							 | 
						||
| 
								 | 
							
								/* function part of calibration stop */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MSG_ID_FUNC_CALI_STOP        3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* em ext module's mode of reset state */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MODE_MISSION                 0
							 | 
						||
| 
								 | 
							
								/* em ext module's mode of set state */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MODE_ONESHOT                 1
							 | 
						||
| 
								 | 
							
								/* em ext module's mode of invalid */
							 | 
						||
| 
								 | 
							
								#define IOT_EM_EXT_MODE_INVALID                 0xFF
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* customer profile info */
							 | 
						||
| 
								 | 
							
								typedef struct _iot_em_ext_profile_info {
							 | 
						||
| 
								 | 
							
								    iot_em_ext_meas_std_rpt_func_t  std_rpt;
							 | 
						||
| 
								 | 
							
								} iot_em_ext_profile_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* energy meter extern module information context */
							 | 
						||
| 
								 | 
							
								typedef struct _iot_em_ext_ctxt {
							 | 
						||
| 
								 | 
							
								    /* indicate external module, see EX_EXT_MODULE_XXX */
							 | 
						||
| 
								 | 
							
								    uint32_t module_id          : 2,
							 | 
						||
| 
								 | 
							
								    /* indicate module is inited */
							 | 
						||
| 
								 | 
							
								        is_inited               : 1,
							 | 
						||
| 
								 | 
							
								    /* indicate em calibration mode */
							 | 
						||
| 
								 | 
							
								        mode                    : 8,
							 | 
						||
| 
								 | 
							
								        resv                    : 21;
							 | 
						||
| 
								 | 
							
								    timer_id_t                  em_timer;
							 | 
						||
| 
								 | 
							
								    /* calibration parameter oem entry */
							 | 
						||
| 
								 | 
							
								    iot_cal_data_em_ext_t      *oem_cali;
							 | 
						||
| 
								 | 
							
								    /* measure data buffer */
							 | 
						||
| 
								 | 
							
								    iot_em_ext_meas_data_t      meas;
							 | 
						||
| 
								 | 
							
								    /* customer info */
							 | 
						||
| 
								 | 
							
								    iot_em_ext_profile_info_t   profile;
							 | 
						||
| 
								 | 
							
								} iot_em_ext_ctxt_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               read calibration data from extern chip
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param cali_type     em ext data type, see IOT_EM_EXT_CTYPE_XXX
							 | 
						||
| 
								 | 
							
								 * @param em_ext_phase  em ext phase id, see IOT_EM_EXT_PLC_PHASE_XXX
							 | 
						||
| 
								 | 
							
								 * @return:             error code, see ERR_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_em_ext_read_cali(uint8_t cali_type, uint8_t em_ext_phase);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               write calibration data to extern chip reg.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param cali_type     em ext data type, see IOT_EM_EXT_CTYPE_XXX
							 | 
						||
| 
								 | 
							
								 * @param em_ext_phase  em ext phase id, see IOT_EM_EXT_PHASE_XXX
							 | 
						||
| 
								 | 
							
								 * @param value         write data
							 | 
						||
| 
								 | 
							
								 * @return:             error code, see ERR_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_em_ext_write_cali(uint8_t cali_type, uint8_t em_ext_phase,
							 | 
						||
| 
								 | 
							
								    uint32_t value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               calculate calibration value base on incoming data
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param calc_type     calculate calibration data type.
							 | 
						||
| 
								 | 
							
								 * @param para          calculate calibration data parameters.
							 | 
						||
| 
								 | 
							
								 * @return:             calibration result
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_em_ext_calc_cali(uint8_t calc_type, void *para);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               energy special function handle
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param func_id       function id, see IOT_EM_EXT_FUNC_XXX
							 | 
						||
| 
								 | 
							
								 * @param para          function parameter address
							 | 
						||
| 
								 | 
							
								 * @param para_len      function parameter byte length
							 | 
						||
| 
								 | 
							
								 * @return:             error code, see ERR_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_em_ext_func(uint8_t func_id, void *para, uint16_t para_len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               get current energy meter module id
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return:             module id num, see IOT_EM_EXT_MODULE_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_em_ext_get_module_id(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               enqueue message of em ext module
							 | 
						||
| 
								 | 
							
								 * @param msg_id        message id
							 | 
						||
| 
								 | 
							
								 * @param data1         message first data
							 | 
						||
| 
								 | 
							
								 * @param data2         message second data
							 | 
						||
| 
								 | 
							
								 * @return              none
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_em_ext_queue_msg(uint16_t msg_id, uint32_t data1, void *data2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               clean message of em ext module
							 | 
						||
| 
								 | 
							
								 * @param msg_id        which message to be cleaned
							 | 
						||
| 
								 | 
							
								 * @return              none
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_em_ext_clean_msg(uint16_t msg_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @brief               set em ext module mode
							 | 
						||
| 
								 | 
							
								 * @param mode          em module's mode to set, refer IOT_EM_EXT_MODE_XXX
							 | 
						||
| 
								 | 
							
								 * @return              none
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_em_ext_set_mode(uint8_t mode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* @breif               get em ext module mode
							 | 
						||
| 
								 | 
							
								 * @param               none
							 | 
						||
| 
								 | 
							
								 * @return              em module's mode, refer to IOT_EM_EXT_MODE_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_em_ext_get_mode(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //_IOT_EM_EXT_H_
							 |