178 lines
5.8 KiB
C
178 lines
5.8 KiB
C
|
/****************************************************************************
|
|||
|
|
|||
|
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 */
|