149 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.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_REC_H
							 | 
						||
| 
								 | 
							
								#define IOT_SUNSOLAR_REC_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* os shim includes */
							 | 
						||
| 
								 | 
							
								#include "os_types_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* iot common header files */
							 | 
						||
| 
								 | 
							
								#include "iot_pkt_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* max pv number of this module. */
							 | 
						||
| 
								 | 
							
								#define LOCAL_PV_MAX_REC                                    (2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* every 1 minute freeze curve data unit:minutes */
							 | 
						||
| 
								 | 
							
								#define IOT_SOLR_REC_CHECK_CRUVE_FROZEN_TIME                (1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* record frozen data count, one day, every minute */
							 | 
						||
| 
								 | 
							
								#define IOT_SOLR_REC_FROZEN_DATA_CNT                        (24 * 60)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(push)  /* save the pack status */
							 | 
						||
| 
								 | 
							
								#pragma pack(1)     /* 1 byte align */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* frozen data block */
							 | 
						||
| 
								 | 
							
								typedef struct _iot_sunsolar_rec_frozen_block {
							 | 
						||
| 
								 | 
							
								    /* frozen voltage uint:0.1v */
							 | 
						||
| 
								 | 
							
								    uint16_t            volt[LOCAL_PV_MAX_REC];
							 | 
						||
| 
								 | 
							
								    /* current unit:1mA */
							 | 
						||
| 
								 | 
							
								    uint16_t            current;
							 | 
						||
| 
								 | 
							
								    /* temperature 0.1c */
							 | 
						||
| 
								 | 
							
								    int16_t             temp;
							 | 
						||
| 
								 | 
							
								    /* rsd state */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* config rsd status, 0xA:open, 0x5:close. */
							 | 
						||
| 
								 | 
							
								        uint8_t         last_cmd     :4,
							 | 
						||
| 
								 | 
							
								        /* real rsd status, 0xA:open, 0x5:close. */
							 | 
						||
| 
								 | 
							
								                        real_status  :4;
							 | 
						||
| 
								 | 
							
								    } rsd_state[LOCAL_PV_MAX_REC];
							 | 
						||
| 
								 | 
							
								    /* rsd voltage uint:0.1v */
							 | 
						||
| 
								 | 
							
								    uint16_t            rsd_volt[LOCAL_PV_MAX_REC];
							 | 
						||
| 
								 | 
							
								    /* snr */
							 | 
						||
| 
								 | 
							
								    int8_t              snr;
							 | 
						||
| 
								 | 
							
								    /* rssi */
							 | 
						||
| 
								 | 
							
								    uint8_t             rssi;
							 | 
						||
| 
								 | 
							
								    /* period power out: 0.01Wh */
							 | 
						||
| 
								 | 
							
								    uint32_t            period_energy[LOCAL_PV_MAX_REC];
							 | 
						||
| 
								 | 
							
								    /* history total power out: 1Wh */
							 | 
						||
| 
								 | 
							
								    uint32_t            total_energy[LOCAL_PV_MAX_REC];
							 | 
						||
| 
								 | 
							
								    /* reboot count */
							 | 
						||
| 
								 | 
							
								    uint16_t            reboot_cnt;
							 | 
						||
| 
								 | 
							
								    /* online status */
							 | 
						||
| 
								 | 
							
								    uint8_t             plclink_state;
							 | 
						||
| 
								 | 
							
								} iot_sunsolar_rec_frozen_block_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* froezen recording description */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /* content of frozen recording */
							 | 
						||
| 
								 | 
							
								    iot_sunsolar_rec_frozen_block_t rec;
							 | 
						||
| 
								 | 
							
								     /* flag to mark if frozen recording is valid */
							 | 
						||
| 
								 | 
							
								    uint8_t valid;
							 | 
						||
| 
								 | 
							
								} iot_sunsolar_rec_frozen_desc_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* record head */
							 | 
						||
| 
								 | 
							
								typedef struct _iot_sunsolar_rec_head {
							 | 
						||
| 
								 | 
							
								    /* crc16 from rec_seq to data */
							 | 
						||
| 
								 | 
							
								    uint16_t            crc;
							 | 
						||
| 
								 | 
							
								    /* record sequence n umber */
							 | 
						||
| 
								 | 
							
								    uint32_t            rec_seq;
							 | 
						||
| 
								 | 
							
								    /* time stamp */
							 | 
						||
| 
								 | 
							
								    uint32_t            ts;
							 | 
						||
| 
								 | 
							
								    /* block data */
							 | 
						||
| 
								 | 
							
								    uint8_t             data[0];
							 | 
						||
| 
								 | 
							
								} iot_sunsolar_rec_head_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(pop)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* record region descriptor */
							 | 
						||
| 
								 | 
							
								typedef struct iot_sunsolar_rec_region_desc {
							 | 
						||
| 
								 | 
							
								    /* record entry size, contains record headers */
							 | 
						||
| 
								 | 
							
								    uint32_t            entry_size;
							 | 
						||
| 
								 | 
							
								    /* region start position */
							 | 
						||
| 
								 | 
							
								    uint32_t            start;
							 | 
						||
| 
								 | 
							
								    /* max count of entrys current region can save */
							 | 
						||
| 
								 | 
							
								    uint16_t            max_cnt;
							 | 
						||
| 
								 | 
							
								    /* recording depth */
							 | 
						||
| 
								 | 
							
								    uint32_t            rec_depth;
							 | 
						||
| 
								 | 
							
								    /* record serial number will assigned */
							 | 
						||
| 
								 | 
							
								    uint32_t            seq;
							 | 
						||
| 
								 | 
							
								    /* index of the latest record increased one */
							 | 
						||
| 
								 | 
							
								    uint32_t            new_idx;
							 | 
						||
| 
								 | 
							
								    /* index of the oldest record */
							 | 
						||
| 
								 | 
							
								    uint32_t            oldest_idx;
							 | 
						||
| 
								 | 
							
								    /* timestamp of the latest record */
							 | 
						||
| 
								 | 
							
								    uint32_t            last_rec_ts;
							 | 
						||
| 
								 | 
							
								} iot_sunsolar_rec_region_desc_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_sunsolar_frozen_data_rec() -  record frozen data
							 | 
						||
| 
								 | 
							
								 * @param tm: rtc time
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_sunsolar_frozen_data_rec(iot_time_tm_t *tm);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_sunsolar_frozen_rec_read() - reading frozen record.
							 | 
						||
| 
								 | 
							
								 * @param ts: specify the start time,  and return the time of the first point of
							 | 
						||
| 
								 | 
							
								 *            successful lookup
							 | 
						||
| 
								 | 
							
								 * @param inteval: time interval, unit is second.
							 | 
						||
| 
								 | 
							
								 * @param n: specifies the number of points to be read, returns the number of
							 | 
						||
| 
								 | 
							
								 *           points actually read.
							 | 
						||
| 
								 | 
							
								 * @param pkt: the pointer of pkt containing read result.
							 | 
						||
| 
								 | 
							
								 * @retval: ERR_OK - successfully, otherwise - error code
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_sunsolar_frozen_rec_read(uint32_t *ts, uint32_t inteval,
							 | 
						||
| 
								 | 
							
								    uint8_t *n, iot_pkt_t **pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief    iot_sunsolar_rec_init() - init sunsolar record specific operation.
							 | 
						||
| 
								 | 
							
								 * @return:  0    -   for success case
							 | 
						||
| 
								 | 
							
								 * @return:  otherwise   -   error number
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_sunsolar_rec_init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_sunsolar_rec_deinit() - deinit sunsolar record specific operation.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_sunsolar_rec_deinit();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* IOT_SUNSOLAR_REC_H */
							 |