/*****************************************************************************
* file include/ca_coll.h
* author YuLiang
* version 1.0.0
* date 28-Nov-2023
* brief This file provides all the headers of the collect functions.
******************************************************************************
* Attention
*
*
© COPYRIGHT(c) 2023 LandPower
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of LandPower nor the names of its contributors may be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __CA_COLL_H__
#define __CA_COLL_H__
#ifdef CFG_DEV_TYPE_LAND_CA
/* Includes ------------------------------------------------------------------*/
/* Define --------------------------------------------------------------------*/
#define CA_COLL_ADC_CH_SUM 8
#define CA_COLL_SENSOR_SUM 8
#define CA_COLL_VERSION_LEN 32
#define CA_COLL_COMPILE_LEN 32
#define CA_COLL_NAME_LEN 128
#define CA_COLL_USART_NAME_LEN 64
#define CA_COLL_ERR_CNT_MAX 9
#define CA_COLL_VPN_LEN 64
/* Exported types ------------------------------------------------------------*/
/* 环流设备信息结构体 */
typedef struct
{
/* 设备信息. 36byte */
uint8_t type_m;
uint8_t type_s;
uint8_t mac[6];
uint32_t id;
uint8_t ip[4];
uint8_t ip_mask[4];
uint8_t ip_gw[4];
uint8_t server_ip[4];
uint8_t wireless_server_ip[4];
uint16_t server_port;
uint16_t wireless_server_port;
/* 版本信息. 224byte */
uint8_t boot_version[CA_COLL_VERSION_LEN];
uint8_t boot_compile_time[CA_COLL_COMPILE_LEN];
uint8_t img_version[CA_COLL_VERSION_LEN];
uint8_t img_compile_time[CA_COLL_COMPILE_LEN];
uint8_t hardware_version[CA_COLL_VERSION_LEN];
uint8_t FPGA_version[CA_COLL_VERSION_LEN];
uint8_t factory_time[CA_COLL_COMPILE_LEN];
/* 设备其他信息. 128byte */
uint8_t name[CA_COLL_NAME_LEN];
} ca_coll_dev_info_t;
/* 实时数据结构体. */
typedef struct
{
int16_t temperature; // 设备温度, 单位: 0.1℃.
uint16_t vbat; // 电池电压, 单位: mv.
int16_t CSQ; // 4G 信号质量 > -51dBm 统一显示 -51dBm, < -113 dBm 为无信号.
uint16_t vin; // 工作电压, 单位: mv.
uint32_t elec[CA_COLL_ADC_CH_SUM]; // 通道电流有效值 mA.
uint16_t vsc; // 超级电容电压, 单位: mv.
uint16_t sen_temp[CA_COLL_SENSOR_SUM]; // 传感器温度: 单位: 0.1℃.
uint16_t sen_x[CA_COLL_SENSOR_SUM]; // 传感器震动 x 轴.
uint16_t sen_y[CA_COLL_SENSOR_SUM]; // 传感器震动 y 轴.
uint16_t sen_z[CA_COLL_SENSOR_SUM]; // 传感器震动 z 轴.
uint8_t energy_mode; // 当前设备工作模式.
uint8_t sen_short; // 传感器是否短路, 0 – 没有短路, 1 – 短路.
uint8_t sen_valid[CA_COLL_SENSOR_SUM]; // 传感器数据是否有效, 0 - 无效, 1 - 有效.
uint32_t run_time; // 设备运行时长, 单位 s.
uint8_t fre_valid; // 工频数据有效, 有线协议使用.
uint8_t wave_valid; // 高频数据有效, 有线协议使用.
uint8_t reserve[2];
} ca_coll_dev_data_t;
/* 环流配置结构体. */
typedef struct
{
uint16_t interval; // 环流采集间隔, 单位: m
uint16_t threshold; // 工频采样阈值, 单位: A
uint16_t wave_threshold; // 高频采样阈值, 单位: mv
uint8_t wave_interval; // 高频采样间隔, 单位: h
uint8_t main_cable; // 主缆 ID (0-6) 默认 5
uint8_t normal_sleep; // 正常模式是否休眠: 0 - 否 1 - 是默认 0
uint8_t is_voltage_col; // 是否开启电流采集
uint8_t is_temp_col; // 是否开启温度震度
uint8_t is_wave_col; // 是否开启高频录波
} ca_coll_dev_cfg_t;
/* 设备配置结构体. */
typedef struct
{
int fd; // 打开的文件描述符
char dev[CA_COLL_USART_NAME_LEN]; // 串口驱动位置
int32_t baud; // 波特率
int8_t bits; // 几位数据位
char parity; // 奇偶校验位
int8_t stop; // 几位停止位
int8_t is_4G; // 4G 是否使能
int32_t coll_inr; // 采集间隔, 单位: s
char apn[CA_COLL_VPN_LEN]; // VPN
int8_t is_MQTT; // 是否打开 MQTT
int8_t is_land; // 是否打开协议
uint16_t land_port; // 私有协议端口
char land_ip[INET_ADDRSTRLEN]; // 私有协议地址
} ca_coll_cfg_t;
/* 设备状态结构体. */
typedef struct
{
int fd_read; // 环流升级文件描述符
uint32_t send_err_cnt; // 环流发送失败计数
uint32_t update_index; // 环流升级报文索引
bool is_update_cable; // 环流设备升级中
bool is_4g_connect; // EC20 是否拨号成功
} ca_coll_state_t;
/* Exported macro ------------------------------------------------------------*/
/* Extern global variables ---------------------------------------------------*/
/* Extern functions ----------------------------------------------------------*/
extern int32_t ca_coll_init(void);
extern int32_t ca_coll_init_after(void);
extern ca_coll_cfg_t* ca_coll_cfg_get(void);
extern ca_coll_dev_info_t* ca_coll_cable_info_get(void);
extern ca_coll_dev_cfg_t* ca_coll_cable_cfg_get(void);
extern ca_coll_dev_data_t* ca_coll_cable_data_get(void);
extern ca_coll_state_t* ca_coll_cable_state_get(void);
extern void ca_coll_cable_update_set(bool enable);
extern void ca_coll_show_dev(void);
extern void ca_coll_show_dev_data(void);
extern void ca_coll_show_dev_state(void);
#endif
#endif
/************************ (C) COPYRIGHT LandPower ***** END OF FILE ****/