133 lines
4.3 KiB
C
133 lines
4.3 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_NV_H
|
|
#define IOT_SUNSOLAR_STA_NV_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types_api.h"
|
|
|
|
/* sunsolar internal header files */
|
|
#include "iot_sunsolar_sta.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*----------------------------------------
|
|
* nv region layout shows like below
|
|
*----------------------------------------
|
|
* |-----------------------------|
|
|
* | |
|
|
* | config data | 8k bytes
|
|
* | |
|
|
* |-----------------------------|
|
|
* | |
|
|
* | nv info | 8k bytes
|
|
* | |
|
|
* |-----------------------------|
|
|
*/
|
|
|
|
/* non-volatile parameter config section start addr */
|
|
#define IOT_SOLR_STA_NV_CFG_SEC_START IOT_SOLR_STA_NV_REGION_START
|
|
/* non-volatile parameter config section size */
|
|
#define IOT_SOLR_STA_NV_CFG_SEC_SIZE (8 * 1024)
|
|
/* non-volatile parameter config section end addr */
|
|
#define IOT_SOLR_STA_NV_CFG_SEC_END \
|
|
(IOT_SOLR_STA_NV_CFG_SEC_START + IOT_SOLR_STA_NV_CFG_SEC_SIZE)
|
|
|
|
/* non-volatile info section start addr */
|
|
#define IOT_SOLR_STA_NV_INFO_SEC_START IOT_SOLR_STA_NV_CFG_SEC_END
|
|
/* non-volatile info section start size */
|
|
#define IOT_SOLR_STA_NV_INFO_SEC_SIZE (8 * 1024)
|
|
/* non-volatile info section end addr */
|
|
#define IOT_SOLR_STA_NV_INFO_SEC_END \
|
|
(IOT_SOLR_STA_NV_INFO_SEC_START + IOT_SOLR_STA_NV_INFO_SEC_SIZE)
|
|
|
|
#define PV_SN_STR_MAX_LEN 18
|
|
|
|
/* sunsolar sta NV region section ID */
|
|
typedef enum {
|
|
/* nv cfg section */
|
|
iot_sunsolar_nv_cfg_id,
|
|
/* nv info section */
|
|
iot_sunsolar_nv_info_id,
|
|
/* max */
|
|
iot_sunsolar_nv_id_max,
|
|
} iot_sunsolar_nv_id_t;
|
|
|
|
#pragma pack(push) /* save the pack status */
|
|
#pragma pack(1) /* 1 byte align */
|
|
|
|
/* PV module SN string */
|
|
typedef struct _pv_sn_t {
|
|
uint8_t pv_sn[PV_SN_STR_MAX_LEN];
|
|
} pv_sn_t;
|
|
|
|
typedef struct _iot_sunsolar_sta_nv_cfg {
|
|
/* pvsn of pv. */
|
|
pv_sn_t pvsn[LOCAL_PV_MAX];
|
|
/* heartbeat function: 1 enable, 0 disable. */
|
|
uint8_t heartbeat_en : 1,
|
|
/* reserved for future */
|
|
rsv1 : 7;
|
|
/* reserved for future */
|
|
uint8_t rsv2[469];
|
|
} iot_sunsolar_sta_nv_cfg_t;
|
|
|
|
typedef struct _iot_sunsolar_sta_nv_info {
|
|
/* history generated energy of each pv, unit: mWalt*hour */
|
|
uint64_t total_mWh[LOCAL_PV_MAX];
|
|
/* last RSD control command from the command */
|
|
uint8_t rsd_last_cmd;
|
|
/* reserved for future */
|
|
uint8_t rsv[41];
|
|
} iot_sunsolar_sta_nv_info_t;
|
|
|
|
#pragma pack(pop)
|
|
|
|
/**
|
|
* @brief iot_sunsolar_sta_nv_init() - init sunsolar sta nv .
|
|
* @return: 0 - for success case
|
|
* @return: otherwise - error number
|
|
*/
|
|
uint32_t iot_sunsolar_sta_nv_init(void);
|
|
|
|
/**
|
|
* @brief iot_sunsolar_sta_nv_deinit() - deinit sunsolar sta nv.
|
|
*/
|
|
void iot_sunsolar_sta_nv_deinit(void);
|
|
|
|
/**
|
|
* @brief iot_sunsolar_nv_get_section() - gets the buffer pointer for the
|
|
* specified section
|
|
* @param id: seticon id, see iot_sunsolar_nv_id_t
|
|
* @retval: buffer pointer for the specified section
|
|
*/
|
|
void *iot_sunsolar_nv_get_section(iot_sunsolar_nv_id_t id);
|
|
|
|
/**
|
|
* @brief void iot_sunsolar_nv_update_section(iot_sunsolar_nv_id_t id)
|
|
* update the specified seticon to
|
|
* non-volatile storage
|
|
* @param id: seticon id, see iot_sunsolar_nv_id_t
|
|
*/
|
|
void iot_sunsolar_nv_update_section(iot_sunsolar_nv_id_t id);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* IOT_SUNSOLAR_STA_NV_H */
|