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