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 */
 |