Files
kunlun/app/iot_sunsolar_app/inc/iot_sunsolar_sta.h

178 lines
5.8 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
Copyright(c) 2024 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_SUNSOLAR_STA_H
#define IOT_SUNSOLAR_STA_H
/* os shim includes */
#include "os_types_api.h"
#include "os_timer_api.h"
/* common includes */
#include "proto_645.h"
#include "iot_task_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/* max pv number of this module. */
#define LOCAL_PV_MAX (2)
/* calibration time, if time is too large unit:s */
#define IOT_SOLR_STA_CHECK_RTC_TIME (2)
/* 输入电压阈值当高于此值才打开RSD的输出单位: 0.1V */
#define IOT_SUNSOLAR_STA_LOW_VOLT_RESUME_THR (120)
/* 输入电压过低触发输出关断后到重新打开输出的时间计数单位0.25s */
#define IOT_SUNSOLAR_STA_LOW_VOLT_RESUME_CHK_DELAY (8)
/* max inactive duration not receive heartbeat to disable RSD output,
* unit: sec
*/
#define IOT_SUNSOLAR_CCTT_MAX_INACTIVE_DUR (30)
/* size of received upgrade data bitmap */
#define IOT_SUNSOLAR_UPGRADE_BM_SIZE (1024)
/* recv upgrade data length once time */
#define IOT_SUNSOLAR_UPGRADE_BLOCK_SIZE (200)
/* receive upgrade data max lost count */
#define IOT_SUNSOLAR_UPGRADE_DATA_LOST_CNT_MAX (60)
/* rsd func info */
typedef struct _iot_sunsolar_sta_rsd_ctrl_t {
/* RSD gpio */
uint8_t rsd_io;
/* RSD led control gpio, low level on */
uint8_t rsd_led;
/* RSD check voltage 0.1V */
uint16_t rsd_volt;
} iot_sunsolar_sta_rsd_ctrl_t;
typedef struct _iot_sunsolar_sta_rsd_state_t {
/* the rsd ctrl output src bitmap */
uint8_t off_src_bm;
/* RSD real time status */
uint8_t real_status;
} iot_sunsolar_sta_rsd_logic_state_t;
/* define RSD trigger source */
typedef enum _rsd_out_trig_src_t {
RSD_TRIG_SRC_CMD,
RSD_TRIG_SRC_HEARTBEAT,
RSD_TRIG_SRC_PV0_LOW_VOLT,
RSD_TRIG_SRC_PV1_LOW_VOLT
} rsd_out_trig_src_t;
/* dev states data struct */
typedef struct _dev_state_e_t {
/* unit is 0.1V */
uint16_t voltage;
/* unit is 0.1C */
int16_t temperature;
/* unit is mA */
uint16_t current;
/* period all power out unit:mWh */
uint32_t period_energy;
/* history total energy unit:mWh */
uint64_t total_energy;
/* sunsolar low volt produce to restart open output' all time count n,
* all time = n * 0.25s
*/
uint8_t low_volt_resume_chk_cold;
/* flag to mark if this photovoltaic panle output low voltage */
uint8_t low_volt : 1,
/* reserved for future */
rsvd : 7;
/* rsd info */
iot_sunsolar_sta_rsd_ctrl_t rsd_ctrl;
} dev_state_e_t;
/* sunsolar heart beat info */
typedef struct _iot_sunsolar_sta_hb_info {
/* last heartbeat time */
uint32_t last_hb_tm;
/* heartbeat time out flag */
uint8_t hb_timeout_flag;
} iot_sunsolar_sta_hb_info;
typedef struct _iot_sunsolar_upgrade_file {
/* index bitmap for sta receive block from cctt. */
uint8_t block_bitmap[IOT_SUNSOLAR_UPGRADE_BM_SIZE];
/* upgrade file total count */
uint16_t total_cnt;
} iot_sunsolar_upgrade_file_t;
typedef struct _iot_sunsolar_sta_global {
/* buffer is used to cache protocol data */
uint8_t proto_buff[PROTO_645_MAX_PKT_LEN];
/* dev check timer handle */
timer_id_t dev_check_timer;
/* dev reset timer handle */
timer_id_t dev_reboot_timer;
/* device state */
dev_state_e_t dev_state[LOCAL_PV_MAX];
/* local pv count */
uint8_t pv_count;
/* cache reboot type, see PROTO_645_SUNSOLAR_REBOOT_TYPE_XX */
uint8_t reboot_type;
/* record every time cctt's time */
iot_time_tm_t last_cctt_tm;
/* sunsolar heart beat info */
iot_sunsolar_sta_hb_info hb_info;
/* rsd function, pv0,pv1 public rsd state */
iot_sunsolar_sta_rsd_logic_state_t rsd_logic_state;
/* upgrade id for diffrent */
uint32_t upgrade_id;
/* upgrade file info */
iot_sunsolar_upgrade_file_t file_info;
} iot_sunsolar_sta_global_t;
/**
* @brief iot_sunsolar_sta_get_reboot_cnt() - get total reboot count
* @return: total reboot count
*/
uint16_t iot_sunsolar_sta_get_reboot_cnt(void);
#if (IOT_SUNSOLAR_APP_ENABLE && PLC_SUPPORT_STA_ROLE)
/**
* @brief iot_sunsolar_sta_init() - init sunsolar sta role device specific
* operation.
* @return: 0 - for success case
* @return: otherwise - error number
*/
uint32_t iot_sunsolar_sta_init();
/**
* @brief iot_sunsolar_sta_deinit() - deinit sunsolar sta role device specific
* operation.
*/
void iot_sunsolar_sta_deinit();
#else /* IOT_SUNSOLAR_APP_ENABLE && PLC_SUPPORT_STA_ROLE */
#define iot_sunsolar_sta_init() (ERR_NOSUPP)
#define iot_sunsolar_sta_deinit()
#endif /* IOT_SUNSOLAR_APP_ENABLE && PLC_SUPPORT_STA_ROLE */
#ifdef __cplusplus
}
#endif
#endif /* IOT_SUNSOLAR_STA_H */