Files
kunlun/driver/extern/em/inc/iot_em_ext.h

159 lines
5.4 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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_