225 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			8.0 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 PROTO_645_SUNSOLAR_H
 | |
| #define PROTO_645_SUNSOLAR_H
 | |
| 
 | |
| /* os shim includes */
 | |
| #include "os_types_api.h"
 | |
| 
 | |
| /* ------------------------ dlt645 DI for solar ---------------------------- */
 | |
| /* DI: read sunsolar module SN */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_PVSN        (0x04001516u)
 | |
| /* DI: set sunsolar module SN */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_SET_PVSN         (0x04001517u)
 | |
| /* DI: reboot sunsolar module */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_DEV_REBOOT       (0x04001518u)
 | |
| /* DI: set rsd status */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_SET_RSD          (0x04001525u)
 | |
| /* DI: read rsd current status */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_RSD         (0x04001526u)
 | |
| /* DI: heartbeat from CCTT */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_CCTT_HEARTBEAT   (0x04001537u)
 | |
| /* DI: set heartbeat enable or disable */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_SET_HEARTBEAT    (0x04001538u)
 | |
| /* DI: read hearbeat status */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_HEARTBEAT   (0x04001539u)
 | |
| 
 | |
| /* DI: read sunsolar module datas, voltage ... */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_SOLAR_DATA  (0xFFB00001u)
 | |
| /* DI: read sunsolar collector current data */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_CUR_DATA    (0xFFB00002u)
 | |
| /* DI: upgrade data buffer */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_TRANS_UPGRADE_DATA (0xFFB00003u)
 | |
| /* DI: query upgrade data bitmap */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_QUERY_UPGRADE_BM (0xFFB00004u)
 | |
| /* DI: after device recv done datas, execute device upgrade */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_EXECUTE_UPGRADE  (0xFFB00005u)
 | |
| /* DI: read solar sta frozen data */
 | |
| #define PROTO_645_2007_EXT_SOLR_DI_READ_FROZEN_DATA (0xFFB0000Du)
 | |
| 
 | |
| /* sunsolar tlv data type */
 | |
| #define PROTO_645_SUNSOLAR_TLV_LINKSTATE                 1
 | |
| #define PROTO_645_SUNSOLAR_TLV_VOLTAGE                   2
 | |
| #define PROTO_645_SUNSOLAR_TLV_CURRENT                   3
 | |
| #define PROTO_645_SUNSOLAR_TLV_TEMPERATURE               4
 | |
| #define PROTO_645_SUNSOLAR_TLV_PLC_LINKSTATISTICS        5
 | |
| #define PROTO_645_SUNSOLAR_TLV_PV_SN_STR                 6
 | |
| #define PROTO_645_SUNSOLAR_TLV_VERSION                   7
 | |
| #define PROTO_645_SUNSOLAR_TLV_RSD_STATUS                9
 | |
| #define PROTO_645_SUNSOLAR_TLV_PERIOD_ENERGY             10
 | |
| #define PROTO_645_SUNSOLAR_TLV_HIS_TOTAL_ENERGY          11
 | |
| #define PROTO_645_SUNSOLAR_TLV_REBOOT_CNT                12
 | |
| /* define sunsolar max tlv data type count */
 | |
| #define PROTO_645_SUNSOLAR_TLV_TYPE_MAX                  16
 | |
| 
 | |
| #define PROTO_645_SUNSOLAR_TLV_TYPE_ALL                  (0x0FFF)
 | |
| 
 | |
| #define PROTO_645_SUNSOLAR_REBOOT_TYPE_NORMAL            0
 | |
| #define PROTO_645_SUNSOLAR_REBOOT_TYPE_ASSERT            1
 | |
| #define PROTO_645_SUNSOLAR_REBOOT_TYPE_W_ZERO_ADDR       2
 | |
| #define PROTO_645_SUNSOLAR_REBOOT_TYPE_MAX               2
 | |
| 
 | |
| /* proto 645 cmd magic */
 | |
| #define PROTO_645_SUNSOLAR_CMD_EN_MAGIC                  (0XAA)
 | |
| #define PROTO_645_SUNSOLAR_CMD_DIS_MAGIC                 (0X55)
 | |
| 
 | |
| /* local rsd status change to magic */
 | |
| #define RSD_STATUS_2_MAGIC(rsd_status)                      \
 | |
|     (rsd_status) ?                                          \
 | |
|         (PROTO_645_SUNSOLAR_CMD_EN_MAGIC & 0xF) :           \
 | |
|         (PROTO_645_SUNSOLAR_CMD_DIS_MAGIC & 0xF)
 | |
| 
 | |
| /* start code for load curve record */
 | |
| #define PROTO_645_SOLR_LOAD_CURVE_START_CODE             0xA0
 | |
| /* finish code for load curve record */
 | |
| #define PROTO_645_SOLR_LOAD_CURVE_END_CODE               0xE5
 | |
| 
 | |
| /* data structure version for freeze data: version0 */
 | |
| #define PROTO_645_SOLR_FROZEN_DATA_VER_0                 (0)
 | |
| 
 | |
| #pragma pack(push)      /* save the pack status */
 | |
| #pragma pack(1)         /* 1 byte align */
 | |
| 
 | |
| /* sunsolar tlv data type request */
 | |
| typedef struct _proto_645_tlv_type_req {
 | |
|     /* each bit represents a type */
 | |
|     uint16_t value;
 | |
| } proto_645_tlv_type_req_t;
 | |
| 
 | |
| /* report data information use tag, length, value module */
 | |
| typedef struct _proto_645_sunsolar_tlv_data {
 | |
|     /* data type: see PROTO_645_SUNSOLAR_TLV_XX */
 | |
|     uint8_t type    :7,
 | |
|     /* if is last type data set to 1 */
 | |
|             flg     :1;
 | |
|     /* include data length */
 | |
|     uint8_t len;
 | |
|     /* data */
 | |
|     uint8_t data[0];
 | |
| } proto_645_sunsolar_tlv_data_t;
 | |
| 
 | |
| /* link status */
 | |
| typedef struct _proto_645_sunsolar_link_state {
 | |
|     /* link type, online/offline status */
 | |
|     uint8_t is_online;
 | |
| } proto_645_sunsolar_link_state_t;
 | |
| 
 | |
| /* voltage */
 | |
| typedef struct _proto_645_sunsolar_voltage {
 | |
|     /* voltage unit:0.1V */
 | |
|     uint16_t vol;
 | |
| } proto_645_sunsolar_voltage_t;
 | |
| 
 | |
| /* current */
 | |
| typedef struct _proto_645_sunsolar_current {
 | |
|     /* current unit:0.001A */
 | |
|     uint16_t cur;
 | |
| } proto_645_sunsolar_current_t;
 | |
| 
 | |
| /* temperature */
 | |
| typedef struct _proto_645_sunsolar_temperature {
 | |
|     /* temperature unit:0.1degrees */
 | |
|     int16_t temp;
 | |
| } proto_645_sunsolar_temperature_t;
 | |
| 
 | |
| /* plc link statistics */
 | |
| typedef struct _proto_645_sunsolar_plc_link_stat {
 | |
|     /* the last pkt rssi */
 | |
|     uint8_t rssi;
 | |
|     /* the last pkt snr */
 | |
|     int8_t snr;
 | |
| } proto_645_sunsolar_plc_link_stat_t;
 | |
| 
 | |
| /* period power output */
 | |
| typedef struct _proto_645_sunsolar_period_energy {
 | |
|     /* period power output, unit: mWh */
 | |
|     uint32_t period_total_energy;
 | |
| } proto_645_sunsolar_period_energy_t;
 | |
| 
 | |
| /* history power output */
 | |
| typedef struct _proto_645_sunsolar_total_his_energy {
 | |
|     /* history total energy output, unit: Wh */
 | |
|     uint64_t his_total_energy;
 | |
| } proto_645_sunsolar_total_his_energy_t;
 | |
| 
 | |
| /* reboot count struct */
 | |
| typedef struct _proto_645_sunsolar_reboot_cnt {
 | |
|     /* reboot count */
 | |
|     uint16_t reboot_cnt;
 | |
| } proto_645_sunsolar_reboot_cnt_t;
 | |
| 
 | |
| /* reboot type struct */
 | |
| typedef struct _proto_645_sunsolar_dev_reboot {
 | |
|     /* reboot_type, see PROTO_645_SUNSOLAR_REBOOT_TYPE_XX. */
 | |
|     uint8_t reboot_type;
 | |
| } proto_645_sunsolar_dev_reboot_t;
 | |
| 
 | |
| /* heartbeat function config command layout */
 | |
| typedef struct _proto_645_sunsolar_heartbeat_set {
 | |
|     /* heartbeat function control cmd magic,
 | |
|      * see PROTO_645_SUNSOLAR_CMD_XX_MAGCI.
 | |
|      */
 | |
|     uint8_t cmd_magic;
 | |
| } proto_645_sunsolar_heartbeat_set_t;
 | |
| 
 | |
| /* read rsd cfg status and real status*/
 | |
| typedef struct _proto_645_sunsolar_read_rsd {
 | |
|     /* config rsd status: 0xA, open; 0x5, close; */
 | |
|     uint8_t  last_cmd       :4,
 | |
|     /* real time rsd status: 0xA, open; 0x5, close; */
 | |
|              real_status    :4;
 | |
|     /* rsd voltage unit:0.1v*/
 | |
|     uint16_t real_volt;
 | |
| } proto_645_sunsolar_read_rsd_t;
 | |
| 
 | |
| /* rsd config status */
 | |
| typedef struct _proto_645_sunsolar_set_rsd {
 | |
|     /* master device set rsd time */
 | |
|     uint32_t           tm;
 | |
|    /* rsd direct control command magic,
 | |
|     * see PROTO_645_SUNSOLAR_CMD_XX_MAGCI.
 | |
|     */
 | |
|     uint8_t            cmd_magic;
 | |
| } proto_645_sunsolar_set_rsd_t;
 | |
| 
 | |
| /* sunsolar module Version */
 | |
| typedef struct _proto_645_sunsolar_mod_ver {
 | |
|     uint32_t sw_ver;
 | |
|     uint32_t hw_ver;
 | |
| } proto_645_sunsolar_mod_ver_t;
 | |
| 
 | |
| /* collect upgrade data */
 | |
| typedef struct _proto_645_sunsolar_col_upgrade_data {
 | |
|     /* upgrade total frame count */
 | |
|     uint16_t total_cnt;
 | |
|     /* current frame index */
 | |
|     uint16_t cur_index;
 | |
|     /* current frame data */
 | |
|     uint8_t data[0];
 | |
| } proto_645_sunsolar_col_upgrade_data_t;
 | |
| 
 | |
| typedef struct _proto_645_sunsolar_upgrade_lost_data {
 | |
|     /* total frame count */
 | |
|     uint16_t total_cnt;
 | |
|     /* lost frame count, one time max 64 */
 | |
|     uint16_t cur_lost_cnt;
 | |
|     /* lost index list */
 | |
|     uint16_t lost_index[0];
 | |
| } proto_645_sunsolar_upgrade_lost_data_t;
 | |
| 
 | |
| #pragma pack(pop)
 | |
| 
 | |
| #endif /* PROTO_645_SUNSOLAR_H */
 |