/***************************************************************************** * file Inc/common.h * author YuLiang * version 1.0.0 * date 10-Jun-2022 * brief This file provides all the headers of common function. ****************************************************************************** * Attention * *

© COPYRIGHT(c) 2022 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 WTOE 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 __COMMON_H__ #define __COMMON_H__ /* Includes ------------------------------------------------------------------*/ #include //#include "cmsis_os.h" //#include "task.h" #include #include #include /* Define --------------------------------------------------------------------*/ typedef signed char int8_t; typedef unsigned char uint8_t; typedef short int16_t; typedef unsigned short uint16_t; typedef int int32_t; typedef unsigned uint32_t; #define TRUE 1 #define FALSE 0 #define OTHER 2 /* int16_t无效时的数据. */ #define INVALID_DATE_8 0x7F /* uint16_t无效数据.*/ #define INVALID_DATA_U8 0xFF /* int16_t无效时的数据. */ #define INVALID_DATE_16 0x7FFF /* uint16_t无效数据.*/ #define INVALID_DATA_U16 0xFFFF /* int32_t无效时的数据. */ #define INVALID_DATE_32 0x7FFFFFFF /* uint32_t无效数据.*/ #define INVALID_DATA_U32 0xFFFFFFFF /* DAU 工频通道数. */ #define DAU_PORT_POWER_CNT 8 #define DAU_PORT_DEFECT_MAX 4 #define DAU_PORT_FAULT_MAX 4 /* ADC 校准点. */ #define DAU_POWER_ADJ_CNT 5 /* ADC 通道数. */ #define CFG_ADC_CH_CNT 8 #define SENSOR_SUM 8 /* ADC 校准点. */ #define ADC_COLLECT_CNT 2000 // ADC 每个通道采样次数. /* RS485 传感器数量. */ #define SENSOR_SUM 8 #define WAVE_SUM 4 #define POSITION_SUM 3 #define USART_BUF_SIZE 1088 #define DEBUG_DATA_SIZE 1024 #define UPDATE_DATA_SIZE DEBUG_DATA_SIZE #define FLASH_LOG_BUF_LEN 256 #define FD_BUF_LEN 256 #define FLASH_LOG_DATA_LEN 248 #define MONITOR_ADCi_NOTIFY_OK 0x101 #define MONITOR_ADC_NOTIFY_OK 0x102 #define MONITOR_SEN_NOTIFY_OK 0x201 #define COM_WDG_COM 0x0001 #define COM_WDG_ADC 0x0002 #define COM_WDG_CLI 0x0004 #define COM_WDG_WIR 0x0008 #define COM_WDG_DAU 0x0010 #define COM_WDG_GPS 0x0020 #define CSG_CIPHERTEXT_LEN 4 #define CSG_PASSWD_LEN 4 #define BIT00 (0x01) #define BIT01 (0x02) #define BIT02 (0x04) #define BIT03 (0x08) #define BIT04 (0x10) #define BIT05 (0x20) #define BIT06 (0x40) #define BIT07 (0x80) #define BIT08 (0x0100) #define BIT09 (0x0200) #define BIT10 (0x0400) #define BIT11 (0x0800) #define BIT12 (0x1000) #define BIT13 (0x2000) #define BIT14 (0x4000) #define BIT15 (0x8000) #define BIT16 (0x00010000) #define BIT17 (0x00020000) #define BIT18 (0x00040000) #define BIT19 (0x00080000) #define BIT20 (0x00100000) #define BIT21 (0x00200000) #define BIT22 (0x00400000) #define BIT23 (0x00800000) #define BIT24 (0x01000000) #define BIT25 (0x02000000) #define BIT26 (0x04000000) #define BIT27 (0x08000000) #define BIT28 (0x10000000) #define BIT29 (0x20000000) #define BIT30 (0x40000000) #define BIT31 (0x80000000) #define DEV_CAPABILITY_LEN 16 #define DEV_CAPABILITY_BIT_LEN 128 #define DEV_PASSWORD_LEN 16 #define DEV_COMPILE_TIME_LEN 32 #define DEV_VERSION_STR_LEN 32 #define DEV_NAME_LEN 128 #define DEV_RESET_INFO_NUM 10 #define DEV_APN_LEN 16 #define DEV_APN_LEN_LONG 64 #define DEV_CONFIG_SIZE 1024 #define DEV_RECORD_SIZE 512 /* Exported types ------------------------------------------------------------*/ /* debug模块号. */ typedef enum { DBG_M_ADC = 0, DBG_M_4G, DBG_M_RS485_SEN, DBG_M_RS485_DEBUG, DBG_M_DAU, DBG_M_DAU_TXRX, DBG_M_GPS, DBG_M_COUNT } DBG_MODULE_E; /* debug命令字. */ typedef enum { DBG_CMD_ON = 0, DBG_CMD_OFF, DBG_CMD_OFF_ALL, } DBG_CMD_E; /* 公共监控任务标志. */ typedef enum { COM_SYS_SAVE_CONFIG = 0, COM_SYS_SAVE_RECORD, COM_SYS_SAVE_INFO, COM_SYS_RESET, COM_SYS_SHUTDOWN, } COM_SYS_FLAG_E; /* 命令类型. */ enum DEBUG_CMD_TYPE { DEBUG_CT_REQUEST = 1, DEBUG_CT_REPLY = 2, DEBUG_CT_PRV_REQUEST = 121, DEBUG_CT_PRV_REPLY = 122, }; /* 共有命令字. */ enum DEBUG_CMD { DEBUG_C_CONTACT = 1, DEBUG_C_DEV_INFO_SET = 2, DEBUG_C_RESET = 3, DEBUG_C_DEFAULT = 4, DEBUG_C_UPDATE_APP = 5, DEBUG_C_UPDATE_IAP = 6, DEBUG_C_DEV_CONFIG = 7, DEBUG_C_DEV_CONFIG_SET = 8, DEBUG_C_UPDATE_APP_RT = 9, DEBUG_C_KEEPALIVE = 10, DEBUG_C_TIME = 11 }; /* 私有命令字. */ enum DEBUG_CM_CMD { DEBUG_PRV_REALDATA = 1, DEBUG_PRV_POWER = 2, DEBUG_PRV_DEFECT = 3, DEBUG_PRV_REALDATA_FUALT = 4, DEBUG_PRV_POWER_FAULT = 5, DEBUG_PRV_FAULT = 6, DEBUG_PRV_ADJ_INFO = 7, DEBUG_PRV_ADJ_INFO_SET = 8, DEBUG_PRV_ADJ_AUTO = 9, DEBUG_PRV_DEV_STATE = 10, DEBUG_PRV_WAVE_COL = 11, DEBUG_PRV_WAVE_CAL = 12, DEBUG_PRV_WAVE_MAX = 13, DEBUG_PRV_LOG = 14, DEBUG_PRV_HISTORY_DATA = 15, DEBUG_PRV_ADJ_MANUAL = 16, DEBUG_PRV_CSG_CONFIG = 17, DEBUG_PRV_CSG_CONFIG_SET = 18, DEBUG_PRV_POSITION_WAVE = 19, DEBUG_PRV_POSITION = 20 }; /* . */ typedef enum { ADC_ENERGY_AUTO = 0, ADC_ENERGY_NORMAL, ADC_ENERGY_SLEEP, ADC_ENERGY_SLEEP_FORCE, ADC_ENERGY_CNT } ADC_ENERGY_E; enum WaveStateE { WAVE_STATE_IDLE = 0, WAVE_STATE_START, WAVE_STATE_WAIT, WAVE_STATE_READ, WAVE_STATE_STOP, WAVE_STATE_ADC_ERROR, WAVE_STATE_TIMEOUT, WAVE_STATE_COMPLETION = 255 }; //Q_ENUM(WaveStateE); /* 状态机状态. */ enum WlStateE { WL_STATE_SOFT = 0, WL_STATE_AT_ATE, WL_STATE_AT_QICSGP, WL_STATE_AT_QIACT, WL_STATE_AT_CSQ, WL_STATE_AT_QICFGTS, WL_STATE_AT_QICFGWT, WL_STATE_AT_QIOPEN, WL_STATE_WAKEUP = 128, WL_STATE_REALDATA, WL_STATE_PWR_FRE, WL_STATE_UPDATE, WL_STATE_UPDATE_RT, WL_STATE_WAVE, WL_STATE_WAVE_MAX, WL_STATE_KEEPALIVE, WL_STATE_END = 255 }; //Q_ENUM(WlStateE); typedef struct { uint16_t len; uint8_t dev_type_m; uint8_t dev_type_s; uint32_t dev_id; uint8_t cmd_type; uint8_t cmd; uint16_t pkt_id; uint8_t reserve[8]; } proto_head_t; typedef struct { uint32_t index; uint32_t len; } mul_head_t; typedef struct { /* 设备信息. 36byte */ uint8_t typeM; uint8_t typeS; uint8_t mac[6]; uint32_t id; uint8_t ip[4]; uint8_t ipMask[4]; uint8_t ipGw[4]; uint8_t serverIp[4]; uint8_t wirelessServerIp[4]; uint16_t serverPort; uint16_t wirelessServerPort; /* 版本信息. 224byte */ uint8_t bootVersion[DEV_VERSION_STR_LEN]; uint8_t bootCompile_time[DEV_COMPILE_TIME_LEN]; uint8_t imgVersion[DEV_VERSION_STR_LEN]; uint8_t imgCompile_time[DEV_VERSION_STR_LEN]; uint8_t hardwareVersion[DEV_VERSION_STR_LEN]; uint8_t fpgaVersion[DEV_COMPILE_TIME_LEN]; uint8_t factoryTime[DEV_COMPILE_TIME_LEN]; /* 设备其他信息. 128byte */ uint8_t name[DEV_NAME_LEN]; uint8_t csgId[8]; uint16_t csgVersion; uint8_t csgCard[6]; } devInfo; /* RS485 调试通讯协议配置信息. */ typedef struct { /* 设备配置. 12byte */ uint16_t flag; uint8_t energyMode; uint8_t isVoltageCol; uint8_t sensor_id[SENSOR_SUM]; uint16_t collectInterval; uint16_t waveInterval; uint16_t collectThreshold; uint16_t waveThreshold; uint8_t mainCable; uint8_t normalSleep; uint8_t isTempCol; uint8_t isWaveCol; uint8_t APN[DEV_APN_LEN]; //uint8_t APN_long[DEV_APN_LEN_LONG]; } devConfig; /* 南网配置信息. */ typedef struct { uint8_t passwd[CSG_PASSWD_LEN]; uint8_t beatInterval; uint8_t resetTime[3]; uint16_t collectInterval; uint16_t sleepTime; uint16_t onlineTime; uint8_t reserve[2]; uint8_t ciphertext[CSG_CIPHERTEXT_LEN]; // 实时数据认证密文. } csgConfig_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[CFG_ADC_CH_CNT]; // 通道电流有效值 mA. uint16_t vsc; // 超级电容电压, 单位: mv. int16_t sen_temp[SENSOR_SUM]; // 传感器温度: 单位: 0.1℃. uint16_t senX[SENSOR_SUM]; // 传感器震动 x 轴. uint16_t senY[SENSOR_SUM]; // 传感器震动 y 轴. uint16_t senZ[SENSOR_SUM]; // 传感器震动 z 轴. uint8_t energyMode; // 节能模式. uint8_t senShort; // 传感器是否短路, 0 – 没有短路, 1 – 短路. uint8_t senValid[SENSOR_SUM]; // 传感器数据是否有效, 0 - 无效, 1 - 有效. } realData_t; /* 设备状态信息. */ typedef struct { uint8_t energyMode; // 节能模式. uint8_t isAdcCollect; // ADC 采集完成. uint8_t isAdcUp; // ADC 上传完成. uint8_t AdciCnt; // ADCi 错误计数. uint8_t AdciState; // ADCi 状态. uint8_t AdcCnt; // ADC 错误计数. uint8_t AdcState; // ADC 状态. uint8_t waveState; // 高频录波状态. uint32_t waveTime; // 高频录波开始时间. uint8_t waveStart; // 高频录波完成. uint8_t waveUpStart; // 高频录波上传完成. uint16_t waveIdx; // 高频录波续传索引. uint8_t waveRt; // 高频录波结果. uint8_t waveForce; // 是否强制录波. uint8_t wlState; // 4G 状态. uint8_t wlCnt; // 4G 错误计数. uint16_t wlWaveIdx; // 4G 上传录波文件索引. uint8_t isWlUpdate; // 4G 升级. uint8_t isAdcthr; // 是否超过工频阈值. uint8_t forceSleepUp; // 强制睡眠报文是否上传. uint8_t isBatCharge; // 电池充电状态. uint16_t waveAdj; // 高频校准系数. int16_t waveMin; // 高频采样最大值. int16_t waveMax; // 高频采样最小值. uint32_t sysTime; // 系统运行时间. uint16_t scMax; // 超级电容最大值. uint16_t scMin; // 超级电容最小值. uint32_t scMaxTime; // 超级电容最大值时间. uint32_t scMinTime; // 超级电容最小值时间. uint32_t scUpTime; // 超级电容充电时间. uint32_t scDownTime; // 超级电容放电时间. } devState; /* 校准参数信息. */ typedef struct { uint16_t ADCRatio[DAU_PORT_POWER_CNT]; // 变比 uint32_t ADCBase_elec[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT]; // 分段点(1A/2A/5A/10A/30A) uint16_t ADCAdj[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT]; // 斜率(校准系数) float ADCBase[DAU_PORT_POWER_CNT][DAU_POWER_ADJ_CNT]; // 采样值(对应分段点的1/2/5/10/30) uint16_t vin; uint16_t vin_adj; uint8_t ADC_turns[DAU_PORT_POWER_CNT]; // 匝数 } dev_adj_t; /* 校准命令信息. */ typedef struct { uint8_t chSelecet; uint8_t isVoltageSel; uint8_t manualIndex; uint8_t reserve[1]; } adjSet; /* 高频校准信息. */ typedef struct { /* 高频校准. 4 */ uint16_t param; uint8_t reserve[2]; } waveParam_t; /* Note: 必须保证这个结构体的大小是可以被flash扇区大小整除的,比如128,256... */ typedef struct { uint64_t id; uint8_t data[FLASH_LOG_DATA_LEN]; } falsh_log_t; /* Note: 必须保证这个结构体的大小是可以被flash扇区大小整除的,比如128,256... */ typedef struct { uint64_t id; uint32_t run_time; // 时间, 单位 s int16_t temperature; // 设备温度, 单位: 0.1℃ uint16_t vin; // 工作电压, 单位: mv uint16_t vbat; // 电池电压, 单位: mv uint16_t vsc; // 超级电容电压, 单位: mv uint16_t defect[4]; // 缺陷电流最大值 mA uint32_t elec[DAU_PORT_POWER_CNT]; // 通道电流有效值 mA uint8_t col_flag; // DAU 采集标志位 uint8_t reserve[3]; // Reserve } fd_data_t; /* Exported macro ------------------------------------------------------------*/ /* dev_config flag 类型号. */ enum DevConfigFlag { DEV_FLAG_CLI = 0, // 是否开启命令行模式. DEV_FLAG_ADJ, // 是否开启校准模式. DEV_FLAG_FACTORY // 工厂持续采样模式. }; /* bitmap操作. */ #define MONITOR_BITMAP_SET(t, b) ((t) |= 1 << (b)) #define MONITOR_BITMAP_RESET(t, b) ((t) &= ~(1 << (b))) #define IS_MONITOR_BIT_SET(t, b) ((t) & (1 << b)) //QByteArray data #define HexPrint(func, packet, len) \ do{\ QByteArray data((const char *)packet, len); \ QString hexString; \ qDebug() << func << ":\n"; \ for (int i = 0; i < data.size(); i++) { \ hexString += QString("%1 ").arg((quint8)data.at(i), 2, 16, QChar('0')); \ } \ qDebug() << hexString; \ }while (0); /* Extern global variables ---------------------------------------------------*/ /* Extern functions ----------------------------------------------------------*/ extern uint32_t crc32_update(uint32_t crc, char* buf, uint32_t len); extern void crc32_table_init(void); extern uint32_t crc32(void const *buf, uint32_t byte_count); extern uint32_t crc32_update(uint32_t crc, char* buf, uint32_t len); extern uint16_t crc16(uint8_t *data, uint16_t size); int32_t stringToChar(QString str, char *buf, uint32_t len); void printHexArray(const char *msg, const char *array, int length); #endif /******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/