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